Salve a tutti!
Sono uno studente di ingegneria e dopo alcuni anni di "inattività", sono ormai giunto (non senza fatica) alla conclusione dei miei studi! L'ultimo esame è proprio quello di
informatica generale!
L'esame consiste in un questionario comprendente 7 domande teoriche a risposta breve e 3 esercizi riguardanti il C! In particolare, questi esercizi non richiedono la scrittura di un programma ma la deduzione di un risultato, sulla base di una o più funzioni date e una chiamata di funzione...il tutto sul modello
cliente-servitore!
Sostanzialmente, la conoscenza richiesta è legata alla capacità di interpretare le varie operazioni descritte sinteticamente nel codice proposto e giungere ad un risultato finale, cioè la stampa a video sulla base di una precisa formattazione del risultato! Poi segue l'esempio...ma prima volevo premettere una cosa importante: non mi aspetto che mi diate "gratis" la conoscenza del C (ammesso che fosse possibile...non avrebbe senso), ma sono alla ricerca di un "how to" sintetico che mi permetta di trasferire sulla "pratica" le nozioni teoriche che sto cercando di acquisire in questa fase dello studio!
Negli esercizi ci saranno array, puntatori (che non ho ancora approfondito benissimo), funzioni, dati e strutture tipiche del C e che sto studiando in contemporanea con questo post, si può dire!
Ultima nota: purtroppo il mio professore non ci ha fornito degli svolgimenti (per lui dovrebbe essere tutto molto chiaro con la teoria) ma per me non lo è...faccio fatica e ho bisogno di una mano!
Non volendo essere troppo prolisso, parto subito con un esempio recente!
Se f.1 e f2 sono definite nel seguente modo:
int f1(int *x) { int i=0,y=0;
for (i=0; i<*x; i+=3) *x+=y++;
return ++(*x);}
int f2(int *x, int **y) {
*x+=f1(*y); return --(**y);}
Cosa stampa il seguente frammento di codice?
int x=3, y=5, *p=&y; *p+=f2(&x, &p);
printf("\nx=%d, y=%d", x, ++(*p));
Che io ho riscritto in modo tale da poter essere compilato correttamente, in questo modo
#include <stdio.h>
int f1(int *x) { int i=0,y=0;
for (i=0; i<*x; i+=3) *x+=y++;
return ++(*x);}
int f2(int *x, int **y) {
*x+=f1(*y); return --(**y);}
main(){
int x=3, y=5, *p=&y; *p+=f2(&x, &p);
printf("\nx=%d, y=%d", x, ++(*p));
}
Il compilatore restituisce
x=
10, y=
12
Quello che vi chiedo, è di spiegarmi i passaggi "sequenziali" che si fanno per giungere al risultato...i "conti" in somma...anche in maniera "chiacchierata"! Ci sono esercizi almeno in apparenza diversi per contenuti delle strutture (qui mancano array ad esempio), che magari vi proporrò più avanti, se riusciremo a capirci con questo!
Spero che possiate aiutarmi! Grazie di cuore fin da subito!