1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012

Slides:



Advertisements
Presentazioni simili
Lo sviluppo top down Le funzioni
Advertisements

Le funzioni in C++. Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi.
Programmazione: Iterazione Esistono tre tipi di iterazione fondamentali e vedremo la corrispondenza dei relativi diagrammi a blocchi e la loro traduzione.
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
Fondamenti di Informatica A - Massimo Bertozzi I PUNTATORI.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Un semplice programma C /* Programma che stampa un saluto */ #include main() { printf(“Hello World!\n”); }
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettrica ed Elettronica Linguaggio C A.A. 2011/2011
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
ELEMENTI DI INFORMATICA
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Introduzione al linguaggio C
Gli array Moreno Marzolla
IL CONCETTO DI ALGORITMO
10. Programmazione Ricorsiva Ing. Simona Colucci
ELEMENTI DI INFORMATICA
ELEMENTI DI INFORMATICA
Process synchronization
Organizzazione fisica
I FILES AD ACCESSO SEQUENZIALE
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Informatica per l’Ingegneria
Lezione 9 – A.A. 2016/2017 Prof. Giovanni Acampora
Process synchronization
Java World Cicli e Array.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Corso Java Cicli e Array.
Linguaggio C++ Selezione.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Strutture di Controllo
Secondo Programma in C.
Programmazione e Laboratorio di Programmazione
Il passaggio dei parametri Metodi statici Il riferimento this
Programmazione e Laboratorio di Programmazione
Ricorsione 16/01/2019 package.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Programmazione e Laboratorio di Programmazione
I SOTTOPROGRAMMI.
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Process synchronization
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Unità A2 Java: le basi del linguaggio
La struttura dei primi programma in C
Le istruzioni di iterazione in C
Lucidi della Pof.ssa Pazienza
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
Processi decisionali e funzioni di controllo
Programmazione e Laboratorio di Programmazione
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Fondamenti di Informatica
Programmazione e Laboratorio di Programmazione
Unità 1 Programmi base.
Programmazione e Laboratorio di Programmazione
Lezione Terza Primi passi di programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
Array (vettori) In linguaggio C / C++.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/ Ing. Giuseppe Destefanis Diee, secondo piano Tel mail:

2 Array Gli array contengono un numero finito di dati tutti dello stesso tipo. Gli elementi dell'array sono individuati da un indice. a a[0] a[1]a[2]a[3]a[4]a[5]a[6]

3 Array (2) Per dichiarare un vettore si deve specificare il tipo e il numero dei suoi elementi: int v[10]; //un vettore di interi di 10 elementi Dichiarazione di un tipo array e definizione di un array sono contestuali.

4 Inizializzazione di un array #include int main() { int vett[10]; //dichiarazione for(int i=0; i<10; i++) vett[i]=i; for(int i=0; i<10; i++) { printf("vett[%d]=%d \n",i,vett[i]); }

5 Inizializzazione di un array (2) #include int main() { int vett[]={1,2,3,4,5}; for(int i=0; i<5; i++) { printf("vett[%d]=%d \n",i,vett[i]); }

6 Trovare il massimo elemento in un array #include int main() { int vett[10]; for(int i=0; i<10; i++) scanf("%d",&vett[i]); int max=vett[0]; for(int i=1; i<10; i++) if(vett[i]>max) max=vett[i]; printf("Il massimo è %d \n",max); }

7 Array multidimensionali int matrix[m][n]; //matrice con m righe e n colonne 1 … n 1...m1...m

8 Array multidimensionali #include int main() { int matrix[2][2]; //dichiarazione della matrice for(int righe=0; righe<2; righe++) for(int colonne=0; colonne<2; colonne++) { matrix[righe][colonne]=righe+colonne; } for(int righe=0; righe<2; righe++) { for(int colonne=0; colonne<2; colonne++) printf("%d\t",matrix[righe][colonne]); printf("\n"); }

9 //Tavola Pitagorica #include int main() { int matrix[10][10]; for(int righe=0; righe<10; righe++) for(int colonne=0; colonne<10; colonne++) { matrix[righe][colonne]=(righe+1)*(colonne+1); } for(int righe=0; righe<10; righe++) { for(int colonne=0; colonne<10; colonne++) printf("%d\t",matrix[righe][colonne]); printf("\n"); }

10 Le funzioni in matematica Nell'analisi matematica una funzione f da X in Y consiste in una legge che associa ad ogni elemento x in X uno e un solo elemento y di Y: f(x)=y x è l'argomento della funzione, o variabile indipendente, e y è il valore della variabile dipendente.

11 Le funzioni Quando si realizza un programma, capita spesso che una sequenza di operazioni debba essere ripetuta più volte. Esempio: calcolare il fattoriale di due numeri inseriti dall'utente.

12 Prima soluzione #include int main() { int num, fatt; fatt=1; scanf("%d",&num); for(int i=1; i<=num; i++){ fatt*=i; } printf("Il fattoriale vale: %d\n",fatt); fatt=1; //riscrivo la sequenza di istruzioni scanf("%d",&num); for(int i=1; i<=num; i++){ fatt*=i; } printf("Il fattoriale vale: %d\n",fatt); }

13 Seconda soluzione #include int fattoriale(int numero) //funzione fattoriale { int fatt=1; for(int i=1; i<=numero; i++){ fatt*=i; } return fatt; } int main() { int num, fatt; scanf("%d",&num); fatt=fattoriale(num); printf("Il fattoriale vale: %d\n",fatt); }

14 Le funzioni Per utilizzare una funzione è necessario che prima venga dichiarata e definita. Nella dichiarazione vi sono le informazioni sul tipo di dati utilizzati e sul risultato (valore restituito dalla funzione). Nella definizione vengono specificati i dati sui quali la funzione opera e le azioni per ottenere il risultato. La definizione di una funzione è anche una dichiarazione.

15 Dichiarazione di funzioni [tipo della funzione] nome (tipo parametro1,tipo parametro2,...); int fattoriale(int numero); tipo della funzione nome tipo del parametro nome del parametro Tra le parentesi tonde si specifica il nome, il numero e il tipo dei parametri formali.

16 Definizione di funzioni... int fattoriale(int numero) { int fatt=1; for(int i=1; i<=numero; i++){ fatt*=i; } return fatt; }...

17 Dichiarazione #include int main() { int num, fatt; scanf("%d",&num); fatt=fattoriale(num); //ATTENZIONE! Funzione non dichiarata! printf("Il fattoriale vale: %d\n",fatt); } int fattoriale(int numero) { if(numero==0) return 1; int fatt=1; for(int i=1; i<=numero; i++){ fatt*=i; } return fatt; }

18 Dichiarazione #include int fattoriale(int); //dichiarazione (deve precedere la chiamata) int main() { int num, fatt; scanf("%d",&num); fatt=fattoriale(num); // ok! printf("Il fattoriale vale: %d\n",fatt); } int fattoriale(int numero) { if(numero==0) return 1; int fatt=1; for(int i=1; i<=numero; i++){ fatt*=i; } return fatt; }

19 Istruzione return L'istruzione return:  fa terminare l'esecuzione della funzione;  restituisce il risultato della funzione. Il corpo della funzione può contenere più di una volta l'istruzione return.

20 Istruzione return (2)... int fattoriale(int numero) { if(numero==0) return 1; int fatt=1; for(int i=1; i<=numero; i++){ fatt*=i; } return fatt; }...

21 Argomenti di una funzione... int fattoriale(int numero) { if(numero==0) return 1; int fatt=1; for(int i=1; i<=numero; i++){ fatt*=i; } return fatt; }... argomento formale

22 Argomenti di una funzione #include int fattoriale(int numero) //funzione fattoriale { int fatt=1; for(int i=1; i<=numero; i++){ fatt*=i; } return fatt; } int main() { int num, fatt; scanf("%d",&num); fatt=fattoriale(num); printf("Il fattoriale vale: %d\n",fatt); } argomento attuale

23 Argomenti di una funzione All'atto della chiamata di una funzione vengono eseguite le seguenti azioni: 1.Si valuta l'espressione che forma il parametro attuale; 2.Il controllo del flusso viene trasferito alla funzione; 3.Viene creata una variabile locale alla funzione e gli viene assegnato nome e tipo dell'argomento formale; 4.La variabile argomento formale viene inizializzata con il valore dell'argomento attuale; 5.Viene eseguita la funzione sino al primo return; 6.Viene valutata l'espressione dopo il return; tutte le variabili locali e i parametri formali vengono distrutti e il valore ottenuto viene sostituito alla variabile del main.

24 Corrispondenza tra parametri All'atto della chiamata di una funzione la corrispondenza tra parametri (formali e attuali) viene valutata nel seguente modo: 1.per numero (numero di parametri formali = numero di parametri attuali); 2.per tipo (altrimenti regole di conversione); 3.ordine;

25 Funzioni void... void fattoriale(int numero) { if(numero==0) printf(“Il fattoriale è 1\n”); int fatt=1; for(int i=1; i<=numero; i++){ fatt*=i; } printf(“Il fattoriale è%d\n”, fatt); }...

26 Visibilità (scope delle variabili) La visibilità, o scope, di una variabile è la parte di programma nel quale la variabile può essere usata. Scopo delle regole di visibilità:  Consentire a più parti del programma di riferirsi ad una stessa variabile (il nome della variabile è visibile a tutte le parti interessate);  Impedire ad una o più parti del programma di riferirsi ad una variabile (il nome della variabile non è visibile a queste parti del programma)

27 Blocco Un blocco è una sequenza di istruzioni racchiuse tra parentesi graffe: { … istruzioni … } Un identificatore dichiarato in un blocco è visibile dal punto in cui viene dichiarato sino alla fine del blocco. (Il corpo di una funzione è un blocco)

28 Classi di memorizzazione La classe di memorizzazione di una variabile è una proprietà riguardante il suo tempo di vita (cioè il tempo in cui la variabile rimane in memoria durante l'esecuzione). Classe di memorizzazione:  Statica  Automatica

29 Variabile statica  Le variabili statiche vengono create a partire dal punto in cui vengono definite, e vengono distrutte alla fine del programma.  Se non inizializzate dal programmatore vengono per default inizializzate a zero.

30 Esempio #include int main() { static int num; printf("%d\n",num); //0 { printf("%d\n",num); //0 int num=3; printf("%d\n",num); //3 //prima di uscire dal blocco si distrugge la variabile num del blocco //mentre non viene distrutta la variabile static num esterna al blocco } printf("%d\n",num); //0 }

31 Variabile automatica  Le variabili automatiche vengono create a partire dal punto in cui vengono definite e vengono distrutte quando termina l'esecuzione del blocco al quale appartengono.  Ciascuna chiamata di funzione comporta l'esecuzione del blocco che ne costituisce il corpo e per ogni chiamata si ha la creazione delle variabili automatiche coinvolte.

32 Posso rendere statica una variabile all'interno di un blocco?

33 #include int main() { int num=0; printf("%d\n",num); //0 { static int b=3; printf("%d\n",b); //3 } printf("%d",b); //errore b non è visibile a questo livello //l'area di memoria nella quale è memorizzato il valore //di b è ancora presente }

34 Visibilità Una variabile dichiarata nel corpo di una funzione è locale alla funzione. int fattoriale(int numero) { int fatt=1; //fatt è locale alla funzione for(int i=1; i<=numero; i++){ fatt*=i; } return fatt; }

35 Esempio #include void f() { int a=5; printf("%d\n",a); } int main() { printf("%d\n",a); //ATTENZIONE! a non è dichiarata int num=0; printf("%d\n",num); //0 { printf("%d\n",num); //0 int num=3; printf("%d\n",num); //3 } printf("%d\n",num); //0 f(); //5 }

36 Funzioni ricorsive #include int fatt(int num) { return (num<2)?1:num*fatt(num-1); } int main() { int num=0; printf("Inserire un numero: \n"); scanf("%d",&num); int fattoriale=fatt(num); printf("Il fattoriale vale %d\n",fattoriale); }