ALCUNI ESERCIZI SUL C: mi sapreste aiutare?

ing.pietro
3) Dato il seguente programma:
#include
int main(){
int i=1;
int numero=1;
int N=10;
while(i numero=numero*i;
i=i+3;
}
printf(“%d”, numero);
return 0;
}
a. Scrivere l’output di questo programma.
b. Riscrivere le operazioni eseguite con il ciclo while con un ciclo for commentando le modifiche.
c. Riscrivere il programma introducendo la funzione
int calcola(int dato)
che riceva esegua le stesse operazioni del ciclo for e restituisca al programma principale il numero da stampare.




5) Trovare i 4 errori nel programma seguente (e commentarli)

#include

void doppio_tripplo(int vett[], int a, int n){
int i, coeff;
for (i=1; i coeff=i+1;
vett=coeff*a;
}
}

void quadrato(int a, int *quad) {
*quad=a*a;
}

int main()
{
int vettore[3], dato, quadrato;
printf(“Introduci il dato \n”);
scanf(“%d”, dato);
doppio_tripplo(vettore,dato,3);
printf(“Il doppio e il triplo di %d sono: %d e %d”,
vettore[0], vettore[1], vettore[2]);
quadrato(dato,quadrato);
printf(“Invece il quadrato di %c è %c”, dato, quadrato);
return 0;
}



grazie in anticipo

Risposte
_Tipper
Scrivere l'output del programma non mi sembra difficile, basta armarsi di carta, penna e tanta pazienza...
Per riscrivere il ciclo while usando un ciclo for ti rammento che:
inizializzazione
while(condizione)
{
     operazioni
     aggiornamento
}

equivale a:
for(inizializzazione;condizione;aggiornamento)
{
     operazioni
}

Per il quesito c) nel main basta inserire:
int i=1;
numero=calcola(i);
printf("%d",numero);

e impostare la funzione calcola() come:
int calcola(dato)
{
     int numero=1;
     int N=1;
     while(i<N)
     {
          numero=numero*dato;
          dato=dato+3;
     }
     return numero;
}

_Tipper
Un errore nel main è:
scanf("%d", dato) /* scorretto */

scanf("%d", &dato) /* corretto */

La funzione quadrato dovrebbe essere chiamata così:
quadrato(dato, &quadrato);

Stessa cosa per doppio_tripplo, si dovrebbe passare &vettore.
Nel main poi il comando printf corretto è questo:
printf("Invece il quadrato di %d è %d", dato, quadrato);

ing.pietro
e quindi nel punto b quale modifica devo fare ?

_Tipper
Mi sembra chiaro, dal momento che l'inizzializzazione è int N=10, la condizione è i

ing.pietro
scusa tipper ma sono un po testone su queste cose....
quindi se il ciclo for è cosi strutturato:

for (inizializzazione;condizione; aggiornamento)
aperta la graffa


operazione

chiusa la graffa



qual è l'operazione di questo programma?

_Tipper
Quella che rimane:
numero=numero*i;

ing.pietro
grazie mille


io pensavo che passando ad un altro ciclo bisognasse cambiare l'inizializzazione e le operazione
invece è solo una cosa di struttura

_Tipper
Esatto.

ing.pietro
scusa tipper correggimi se sbaglio:

l'output del primo programma è:


printf(“%d”, numero);

Nidhogg
"ing.pietro":
scusa tipper correggimi se sbaglio:

l'output del primo programma è:


printf(“%d”, numero);


La traccia non richiede quale istruzione genera l'output (e cioè printf(“%d”, numero);), ma richiede il valore della variabile numero che viene mandato in output tramite l'istruzione printf.
Quindi prova a fare una tabella (tavola di traccia) con tutte le variabili (in questo caso i, numero e N).

ing.pietro
praticamenteo ogni valore che introduco me lo incrementa di 3

Nidhogg
"ing.pietro":
praticamenteo ogni valore che introduco me lo incrementa di 3


Diciamo di si, ma la traccia chiede il valore numerico stampato a video tramite la printf.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.