Fondamenti di Informatica Prof. A.Broggi Linguaggio C (2) Fondamenti di Informatica Prof. A.Broggi Funzioni: esempio Funzioni } ... calcola(dato, &quadrato, &cubo); } Fondamenti di Informatica Fondamenti di Informatica Prototipo delle funzioni main() { float dato, quadrato, cubo; val_scont= valore - (valore*percent / 100); return(val_scont); } ... calcola(dato, &quadrato, &cubo); main() { long int costo; int percentuale; } } 2 Fondamenti di Informatica Funzioni: esempio 5 Fondamenti di Informatica Puntatori #include <stdio.h> void testacoda(void) { printf(“**********\n “); return; } • un blocco di istruzioni tra { e } forma un’istruzione composta • i blocchi possono essere annidati • l’indentazione rende visibile la struttura del programma • il blocco più esterno è il file che costituisce il programma assegnazione dell’indirizzo di una variabile: ind_dato = &dato2; definizione di un puntatore (ad intero): int dato2; int *ind_dato; accesso al contenuto di una variabile tramite un puntatore: ind_dato = &dato2; dato2 = 5; *ind_dato = 5; 3 www.ce.unipr.it/broggi/fondinfo Fondamenti di Informatica 1 Fondamenti di Informatica Prof. A.Broggi Linguaggio C (2) Fondamenti di Informatica 2 Fondamenti di Informatica Prof. A.Broggi Linguaggio C (2) Istruzione if - else • Lo scope delle funzioni va dal punto dove sono definite o dichiarate alla fine del blocco più esterno • Lo scope delle variabili e costanti va dal punto dove sono definite alla fine del blocco in cui la definizione è inserita • Le funzioni, variabili e costanti definite in testa al programma sono globali • Le variabili definite in una funzione o blocco sono locali Fondamenti di Informatica Prof. A.Broggi Linguaggio C (2) do istruzione while (espressione); valore = 0.0; n=1; do { valore = valore +1/n; n++; } while(1/n > soglia); printf(“Ïntroduci due numeri interi\n”); scanf(“%d%d”, &n1, &n2); if ((n1>=0) && (n2>0)) { quoz = n1/n2; printf(“Quoziente=%d\n”, quoz); } else printf(“Errore nei dati introdotti\n”); 10 Fondamenti di Informatica Scope: esempio 13 Fondamenti di Informatica for(inizializzazione; condizione; aggiornamento ) istruzione; int n, k; long int fatt; if (dato1 == dato2) flag = 1; else flag=0; int funz1(int param1, float param2) { int dato5; void funz2(int param1, int param2); ... } 16 Istruzione for Istruzione if - else • if annidati: attenzione alle ambiguità • sfruttare le potenzialità del C main() { float dato3, dato4; ... } fatt =1; for (k=1; k<=n; k++) fatt = fatt*k; flag = (dato1 == dato2); • attenzione agli errori di questo tipo if (2<=dato<=5) printf(“Il dato è compreso tra 2 e 5 \n”); 11 Fondamenti di Informatica 14 Fondamenti di Informatica 17 Istruzione while Funzioni di libreria while (espressione) istruzione; • il compilatore dispone di librerie di funzioni predefinite • suddivise in file per categorie (matematiche, I/O, conversione, stringhe,…) • funzioni standard e non standard • includere con #include il file che contiene il prototipo (header file) www.ce.unipr.it/broggi/fondinfo 3 const float soglia = 0.00005; float valore; int n; main() { int n1, n2, quoz; int dato1, dato2; int funz1(int param1, float param2); Fondamenti di Informatica www.ce.unipr.it/broggi/fondinfo Istruzione do-while if (espressione) istruzione1; else istruzione2; #define PIGRECO 3,1415 void funz2(int param1, int param2) { char dato6; ... Fondamenti di Informatica } 9 #include <stdio.h> } Fondamenti di Informatica 6 www.ce.unipr.it/broggi/fondinfo Scope delle variabili e delle funzioni 8 Blocchi di istruzioni assegnazione del contenuto di una variabile: dato1 = dato2; void corporett(void) { printf(“* *\n “); return; } ... void calcola(float valore, float *quad_val, float *cub_val) { *quad_val = valore * valore; *cub_val = *quad_val * valore; return; } ... printf(“Il prezzo scontato e`= %ld\n”, prezzo_scont(costo, percentuale); ... } 7 void calcola(float valore, float *quad_val, float *cub_val); long int prezzo_scont(long int valore, int percent) { long int val_scont; /* corpo della funzione */ … return(valore); Fondamenti di Informatica ... 4 Passaggio dei parametri per valore Funzioni: forma generale main() { testacoda(); corporett(); corporett(); corporett(); testacoda(); } main() { float dato, quadrato, cubo; dato = lettura(); printf(“Il dato introdotto e`= %d\n”, dato); 1 tipo nome_funzione(param1, …, paramn) { /* definizioni costanti e variabili */ ... Fondamenti di Informatica printf(“Introduci un intero: “); scanf(“%d”, &dato_letto); return(dato_letto); main() { int dato; } Linguaggio C (2) void calcola(float valore, float *quad_val, float *cub_val) { *quad_val = valore * valore; *cub_val = *quad_val * valore; return; } int lettura(void) { int dato_letto; • modulo di programma che può essere invocato più volte • meccanismo di funzionamento Fondamenti di Informatica Prof. A.Broggi Passaggio dei parametri per riferimento #include <stdio.h> • necessità di eseguire più volte una stessa elaborazione Fondamenti di Informatica Linguaggio C (2) double senx (double x) { const double soglia = 0.00005; double csenx , termine, termass, n; } 12 4 termine = x; n=1; csenx = x; termass = fabs (termine); while (termass > soglia) { termine = -termine*x*x /((n+1)*(n+2)); csenx = csenx + termine; n+=2; termass = fabs (termine); } return(csenx ); Fondamenti di Informatica www.ce.unipr.it/broggi/fondinfo 15 5 www.ce.unipr.it/broggi/fondinfo 6