Lnguaggo C funzon e procedure Unverstà degl Stud d Bresca Docente: Massmlano Gacomn
Un esempo Acqusre dall utente un numero ntero n, rpetendo l acquszone se è prmo. Successvamente, stampare 5 numer prm superor a n. Vedamo come rsolveremmo l problema con le strutture note Element d Informatca e Programmazone Unverstà d Bresca 2
man(){ nt trovato, j; long nt n, ; prntf("insersc un numero non prmo\n"); do{ scanf("%d", &n); trovato=0; for(=2; <=n/2;++) f(n%==0) trovato=1; whle (! trovato); Determna se prmo for(j=0;j<5;j++){ do{ n++; trovato=0; for(=2; <=n/2;++) f(n%==0) trovato=1; whle (trovato); prntf("%d\n", n); system("pause"); Determna se prmo Element d Informatca e Programmazone Unverstà d Bresca 3
Una soluzone pù elegante: defnamo la funzone prmo man(){ nt prmo(long nt num){ long nt ; nt trovato=0; for(=2; <=num/2;++) f(num%==0) trovato=1; return(!trovato); long nt n; nt ; prntf("insersc un numero non prmo\n"); do scanf("%d", &n); whle(prmo(n)); for(=0;<5;++){ do n++; whle(!prmo(n)); prntf("%d\n", n); system("pause"); Element d Informatca e Programmazone Unverstà d Bresca 4
Defnzone d funzon n C Esempo Parametr formal (argoment della funzone) Tpo del valore resttuto float potenza(float, nt n){ nt ; float pot=1; for(=1;<=n;++) pot=pot*; return pot; NB: funzone (float, nt) float resttusce n Element d Informatca e Programmazone Unverstà d Bresca 5
Defnzone d funzon n C Esempo Parametr formal (argoment della funzone) Tpo del valore resttuto float potenza(float, nt n){ nt ; float pot=1; for(=1;<=n;++) pot=pot*; return pot; Resttusce l valore (d tpo float) NB: funzone (float, nt) float resttusce n Element d Informatca e Programmazone Unverstà d Bresca 6
Defnzone d funzon n C Esempo 5.5 2 30.25 float potenza(float, nt n){ nt ; float pot=1; for(=1;<=n;++) pot=pot*; return pot; NB: funzone (float, nt) float resttusce n Element d Informatca e Programmazone Unverstà d Bresca 7
Defnzone d funzon n C (n generale) Tpo del valore resttuto Parametr formal (argoment della funzone) tpo nome_funzone(tpo 1 arg 1,, tpo n arg n ){ Defnzone d varabl local return val; Resttusce l valore (d tpo ) Element d Informatca e Programmazone Unverstà d Bresca 8
Chamata d funzon n C Se nel programma voglamo usare la funzone defnta, dobbamo chamarla passandole parametr attual Esempo precedente b= potenza(5.5, 2); In generale nome_funzone(arg_att 1,, arg_att n ) float potenza(float, nt n){ return pot; Parametr attual: sono valor cu tp devono corrspondere a quell de parametr formal Element d Informatca e Programmazone Unverstà d Bresca 9
Esecuzone delle funzon e passaggo de parametr n C Prma della chamata Programma chamante b b= potenza(5.5, 2); Funzone Potenza n Parametr formal pot Element d Informatca e Programmazone Unverstà d Bresca 10
Esecuzone delle funzon e passaggo de parametr n C Chamata: passaggo de parametr Programma chamante b b= potenza(5.5, 2); Funzone Potenza n 5.5 2 Parametr formal pot Element d Informatca e Programmazone Unverstà d Bresca 11
Esecuzone delle funzon e passaggo de parametr n C Rtorno Programma chamante b b= potenza(5.5, 2); 30.25 Funzone Potenza n 5.5 2 Parametr formal pot 30.25 return pot; Element d Informatca e Programmazone Unverstà d Bresca 12
Esecuzone delle funzon e passaggo de parametr n C Dopo l rtorno Programma chamante b 30.25 b= potenza(5.5, 2); Funzone Potenza n Parametr formal pot return pot; valor non vengono conservat! Element d Informatca e Programmazone Unverstà d Bresca 13
Le procedure In C: funzon che non rtornano un valore (tpo rtorno vod) Esempo typedef struct { char nome[20]; char cognome[20]; nt eta; persona; vod stampadat(persona p){ prntf( Nome: %s\n, p.nome); prntf( Cognome: %s\n, p.cognome); prntf( %d ann\n, p.eta); Element d Informatca e Programmazone Unverstà d Bresca 14
Vsbltà delle varabl (1) Programma Procedura y y Element d Informatca e Programmazone Unverstà d Bresca 15
Vsbltà delle varabl (1) Programma Procedura y y - Le varabl global sono accessbl dalla procedura - Le varabl local (nclus parametr formal) mascherano le varabl global con lo stesso nome - Come noto, le local non lascano tracca dopo l uscta dalla procedura Element d Informatca e Programmazone Unverstà d Bresca 16
Vsbltà delle varabl (2) VARIABILE INDEFINITA Procedura y Programma y Element d Informatca e Programmazone Unverstà d Bresca 17
ESEMPIO 1 man(){ nt a=2, b=5; nt =0, j; nt mul(nt a, nt b){ nt ; =a*b; return ; j = mul(a, b); system("pause"); NB: rmane 0 ESEMPIO 2 man(){ nt a=2, b=5; nt =0, j; nt mul(nt a, nt b){ =a*b; return ; j = mul(a, b); system("pause") NB: dventa 10 ESEMPIO 3 nt mul(nt a, nt b){ =a*b; return ; man(){ nt a=2, b=5; nt =0, j; j = mul(a, b); system("pause"); NB: non compla!