Introduzione al C Esercitazione 3Dipartimento Ingegneria Chimica Materiali Ambiente Prof. Antonino Stelitano
Docente       Antonino              StelitanoTutorLezioni       Lunedì           14:00 – 17:30     aula 16                ...
Menù di oggi           Vettori e matrici           Funzioni
Cos‟è un vettoreUn vettore, o meglio, un array è un insieme ordinato di elementi,tutti di uno stesso tipo.Può essere visua...
Gli ArraysUn esempio di definizione di un array in C e :                   nome array                     dimensione  tipo...
Gli Arrays: rappresentazione ideale     int elenco_numeri[50];       ?        ?        ?        ?     ?       0        1  ...
Indicizzazione degli arrayIn C gli indici delle celle iniziano da 0 e finiscono alla dimensionedellarray meno uno. Nellese...
Esempio ArrayCreare un array di 10 elementi di tipo integer (int)Assegnare ad esso 10 valori a piacereStampare il contenut...
Soluzione Array#include <stdio.h>#include <stdlib.h>int main(){         int arrayInteri[10];         arrayInteri[0] = 15; ...
Output soluzione array cella 0 = 15 cella 1 = 25 cella 2 = 35 cella 3 = 45 cella 4 = 55 cella 5 = 65 cella 6 = 75 cella 7 ...
Esercizio FibonacciScrivere un programma che generi i primi 12 interidella successione di Fibonacci, li salvi in un array ...
Successione di FibonacciLa successione di Fibonacci è una sequenza di numeri interinaturali definibile assegnando i valori...
Soluzione Fibonacci#include <stdio.h>#include <stdlib.h>int main(){    int successione_Fibonacci[12];    int f0 = 0, f1 = ...
Output Fibonacci 0 1 1 2 3 5 8 13 21 34 55 89 Premere un tasto per continuare . . .
Le matriciLe matrici non sono altro che arraymultidimensionali           0    [0][0]       [0][1]righe                    ...
Gli Array multidimensionali Gli array multidimensionali sono cosi definiti: int tabella_numeri[50][50] (per due dimensioni...
Indicizzazione degli Array multidimensionalisi accede agli elementi di un array multidimensionale nelseguente modo:numero ...
Esempio Matrici#include <stdio.h>#include <stdlib.h>int main(){   int matrice[2][2], i, j;   matrice[0][0] = 1;   matrice[...
Output Matricimatrice[0][0] = 1matrice[0][1] = 2matrice[1][0] = 3matrice[1][1] = 4Premere un tasto per continuare . . .
Le stringhe In C le stringhe sono definite come array di caratteri. Ad esempio, la seguente istruzione definisce una strin...
Gestione delle stringheIl C non ha un sistema maneggevole per costruire le stringhe, così leseguenti assegnazioni NON SONO...
Stampare una stringaPer stampare una stringa si usa printf() con lo specialecarattere di controllo %s:printf("%s", nome);N...
Esempio stampa di una stringa#include <stdio.h>#include <stdlib.h>main(){  char string_nome[80];  printf("inserisci il tuo...
Output stampa di una stringainserisci il tuo nome:antonioNOME: antonioNOME IN ALTRO MODO: antonioPremere un tasto per cont...
il carattere „0‟Al fine di permettere lutilizzo di stringhe con lunghezzavariabile, il carattere 0 viene utilizzato per in...
Esercizio Stringhe Dichiarare un array di 6 elementi di tipo char. Inserire in tale array la stringa “DINO” Stampare a vid...
Soluzione esercizio Stringhe#include <stdio.h>#include <stdlib.h>int main(){   char nome[6];   nome[0] = D;   nome[1] = I;...
Output esercizio Stringhe prova stampa DINO = DINO$³¨☻CÂÇ|¿ # RI-prova stampa DINO = DINO Premere un tasto per continuare ...
Spiegazione esercizio Stringhechar nome[6];             ?     ?     ?     ?     ?     ?nome[0] = D;nome[1] = I;nome[2] = N...
Le Funzioniil C considera "main()" come una funzione.La forma generale di una funzione e:returntype function_name (param1,...
Tipo di ritornoSe manca la definizione del tipo della funzione("returntype", tipo della variabile di ritorno dellafunzione...
EsempioEsempio di una funzione che calcola la media tra duevalori:                             argomenti     valore di rit...
Eseguire una funzionePer richiamare tale funzione si procede nel seguente modo:main(){     float a = 10, b = 25, risultato...
Programma calcola media#include <stdio.h>#include <stdlib.h>float calcolamedia(float a, float b){          float media;   ...
DomandaCosa succede se inverto l‟ordine delle funzioni?              #include <stdio.h>              #include <stdlib.h>  ...
Risposta   Il compilatore non può sapere cos‟è “calcolamedia”                #include <stdio.h>                #include <s...
Prototipi di funzioniPrima di usare una funzione, il C devericonoscere il tipo di ritorno e il tipo deiparametri che la fu...
Dichiarazione di funzione    Limportanza della dichiarazione e doppia:    - viene fatta per avere un codice sorgente più  ...
Dichiarazione di funzione (2)Fondamentalmente, se una funzione e stata definita prima diessere usata (call) allora è possi...
Dichiarazione di funzione (3)Per dichiarare un prototipo di funzione bisognasemplicemente stabilire il ritorno della funzi...
Una scorciatoiale funzioni e le variabili possono essere dichiarate sulla stessa lineadi codice sorgente. Questa procedura...
Funzioni “void”Se non si vuole ritornare alcun valore da una funzione è sufficiente dichiararla di tipovoid ed omettere il...
Funzioni ed arrayPossono essere passati alle funzioni come parametri anche array singoli omultidimensionali.Gli array mono...
SpiegazioneNella precedente funzione “trovamedia” ladichiarazione "float list[]" dichiara al C che"list" è un array di flo...
Esempio d‟uso per “trovamedia” #include <stdio.h> #include <stdlib.h> //dichiarazione di funzione float trovamedia(int siz...
Funzioni ed array multidimensionaliArray multidimensionali possono essere passati allefunzioni nel seguente modo:void stam...
SpiegazioneNella precedente funzione “stampatabella”, la parte dicodice "float tabella[][5]" dichiara al C che tabella è u...
Riepilogo: array e funzioniriepilogando,nel caso di array singoli non e necessario specificarela dimensione dellarray nell...
Esercizio: array e funzioniSi scriva un programma che prenda in ingressoda tastiera 10 interi, li memorizzi in un array,or...
Upcoming SlideShare
Loading in …5
×

Esercitazione 3 (14 marzo 2012)

372
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
372
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Esercitazione 3 (14 marzo 2012)

  1. 1. Introduzione al C Esercitazione 3Dipartimento Ingegneria Chimica Materiali Ambiente Prof. Antonino Stelitano
  2. 2. Docente Antonino StelitanoTutorLezioni Lunedì 14:00 – 17:30 aula 16 Lab. Paolo Ercoli – via Tiburtina 205 Mercoledì 15:45 – 19:00 aula 5 Viale del C. LaurenzianoRicevimento: Su richiesta antonino.stelitano@uniroma1.it stelitano.a@libero.itSito web: http://w3.uniroma1.it/ab_informatiche/
  3. 3. Menù di oggi Vettori e matrici Funzioni
  4. 4. Cos‟è un vettoreUn vettore, o meglio, un array è un insieme ordinato di elementi,tutti di uno stesso tipo.Può essere visualizzato idealmente come una lista di cellenumerate univocamente cella 0 1 2 3 4 5 indice Array di 6 elementi
  5. 5. Gli ArraysUn esempio di definizione di un array in C e : nome array dimensione tipo int elenco_numeri[50];e si accede agli elementi dellarray nel seguente modo: terzo_numero = elenco_numeri[2]; elenco_numeri[49] = 100;
  6. 6. Gli Arrays: rappresentazione ideale int elenco_numeri[50]; ? ? ? ? ? 0 1 2 3 49 terzo_numero = elenco_numeri[2]; elenco_numeri[49] = 100; terzo_numero ? ? X ? 100 0 1 2 3 49
  7. 7. Indicizzazione degli arrayIn C gli indici delle celle iniziano da 0 e finiscono alla dimensionedellarray meno uno. Nellesempio precedente il range è 0-49, cioèelenco_numeri è un array di 50 elementi e si ha:elenco_numeri[0], elenco_numeri[1], ..., elenco_numeri[49]Questa è una caratteristica tipica dei moderni linguaggi diprogrammazione e richiede un po di pratica per raggiungere "lagiusta disposizione danimo".
  8. 8. Esempio ArrayCreare un array di 10 elementi di tipo integer (int)Assegnare ad esso 10 valori a piacereStampare il contenuto dell‟array che si è creato
  9. 9. Soluzione Array#include <stdio.h>#include <stdlib.h>int main(){ int arrayInteri[10]; arrayInteri[0] = 15; int i; for(i = 1; i < 10; i++) { arrayInteri[ i ] = (arrayInteri[ i – 1 ] + 10); } for(i = 0; i < 10; i++) { printf("cella %d = %dn", i, arrayInteri[ i ]); } system("PAUSE");}
  10. 10. Output soluzione array cella 0 = 15 cella 1 = 25 cella 2 = 35 cella 3 = 45 cella 4 = 55 cella 5 = 65 cella 6 = 75 cella 7 = 85 cella 8 = 95 cella 9 = 105 Premere un tasto per continuare . . .
  11. 11. Esercizio FibonacciScrivere un programma che generi i primi 12 interidella successione di Fibonacci, li salvi in un array di interi estampi la successione a videoQual è l‟espressione analitica della successione di Fibonacci?Help:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
  12. 12. Successione di FibonacciLa successione di Fibonacci è una sequenza di numeri interinaturali definibile assegnando i valori dei due primi termini,F0:= 0 ed F1:= 1, e chiedendo che per ogni successivo siaFn := Fn-1 + Fn-2.Il termine F0 viene aggiunto nel caso si voglia fare iniziare lasuccessione con 0; storicamente il primo termine dellasuccessione è F1:= 1.
  13. 13. Soluzione Fibonacci#include <stdio.h>#include <stdlib.h>int main(){ int successione_Fibonacci[12]; int f0 = 0, f1 = 1, i; successione_Fibonacci[0] = 0; successione_Fibonacci[1] = 1; for(i = 2; i < 12; i++){ successione_Fibonacci[i] = successione_Fibonacci[ i – 1 ] + successione_Fibonacci[ i – 2 ]; } for(i = 0; i < 12; i++){ printf("%dn", successione_Fibonacci[ i ]); } system("PAUSE");}
  14. 14. Output Fibonacci 0 1 1 2 3 5 8 13 21 34 55 89 Premere un tasto per continuare . . .
  15. 15. Le matriciLe matrici non sono altro che arraymultidimensionali 0 [0][0] [0][1]righe Notazione C: matrice[righe][colonne] 1 [1][0] [1][1] 0 1 colonne
  16. 16. Gli Array multidimensionali Gli array multidimensionali sono cosi definiti: int tabella_numeri[50][50] (per due dimensioni) int big_D[20][30][10][40] (per più di due dimensioni)
  17. 17. Indicizzazione degli Array multidimensionalisi accede agli elementi di un array multidimensionale nelseguente modo:numero = tabella_numeri[5][32];tabella_numeri[1][23] = 100;
  18. 18. Esempio Matrici#include <stdio.h>#include <stdlib.h>int main(){ int matrice[2][2], i, j; matrice[0][0] = 1; matrice[0][1] = 2; matrice[1][0] = 3; matrice[1][1] = 4; for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) printf("matrice[%d][%d] = %dn", i, j, matrice[ i ][ j ]); system("PAUSE");}
  19. 19. Output Matricimatrice[0][0] = 1matrice[0][1] = 2matrice[1][0] = 3matrice[1][1] = 4Premere un tasto per continuare . . .
  20. 20. Le stringhe In C le stringhe sono definite come array di caratteri. Ad esempio, la seguente istruzione definisce una stringa di 50 caratteri: char name[50];
  21. 21. Gestione delle stringheIl C non ha un sistema maneggevole per costruire le stringhe, così leseguenti assegnazioni NON SONO VALIDE:char firstname[50], lastname[50], fullname[50];firstname = "Mario" /* illegale */lastname = "Rossi" /* illegale */fullname = "Sig."+firstname+lastname /* illegale */Esiste pero una libreria di routines per il trattamento delle stringhe ("<string.h >").
  22. 22. Stampare una stringaPer stampare una stringa si usa printf() con lo specialecarattere di controllo %s:printf("%s", nome);Nota: è sufficiente avere il nome della stringa.
  23. 23. Esempio stampa di una stringa#include <stdio.h>#include <stdlib.h>main(){ char string_nome[80]; printf("inserisci il tuo nome:n"); scanf("%s", string_nome); printf("NOME: %sn", string_nome); //ulteriore modo di stampare il nome printf("NOME IN ALTRO MODO: %sn", &string_nome[0]); system("PAUSE");}
  24. 24. Output stampa di una stringainserisci il tuo nome:antonioNOME: antonioNOME IN ALTRO MODO: antonioPremere un tasto per continuare . . .
  25. 25. il carattere „0‟Al fine di permettere lutilizzo di stringhe con lunghezzavariabile, il carattere 0 viene utilizzato per indicare la fine diuna stringa.In questo modo, se abbiamo una stringa dichiarata di 50caratteri (char name[50];), e la utilizziamo per memorizzare ilnome "Dave", il suo contenuto (a partire da sinistra) sarà laparola Dave immediatamente seguita dal segno di fine stringa0, e quindi tutti gli altri caratteri (fino ad arrivare allalunghezza di 50) risulteranno vuoti.
  26. 26. Esercizio Stringhe Dichiarare un array di 6 elementi di tipo char. Inserire in tale array la stringa “DINO” Stampare a video il contenuto dell‟array di 6 elementi dichiarato in precedenza.
  27. 27. Soluzione esercizio Stringhe#include <stdio.h>#include <stdlib.h>int main(){ char nome[6]; nome[0] = D; nome[1] = I; nome[2] = N; nome[3] = O; printf("prova stampa DINO = %sn", nome); nome[4] = 0; printf("RI-prova stampa DINO = %sn", nome); system("PAUSE");}
  28. 28. Output esercizio Stringhe prova stampa DINO = DINO$³¨☻CÂÇ|¿ # RI-prova stampa DINO = DINO Premere un tasto per continuare . . .
  29. 29. Spiegazione esercizio Stringhechar nome[6]; ? ? ? ? ? ?nome[0] = D;nome[1] = I;nome[2] = N; D I N O ? ?nome[3] = O;nome[4] = „0; D I N O 0 ?Senza „0‟ la printf non può conoscere la fine dellastringa che si vuole stampare, quindi vengono stampati anchevalori ignoti (tipo $³¨☻CÂÇ|¿ #)
  30. 30. Le Funzioniil C considera "main()" come una funzione.La forma generale di una funzione e:returntype function_name (param1, param2, ...){ local variables function code (C statements)}
  31. 31. Tipo di ritornoSe manca la definizione del tipo della funzione("returntype", tipo della variabile di ritorno dellafunzione), il C assume che il ritorno della funzionesia di tipo integer (int);ATTENZIONE: questo può essere una delle causedi problemi nei programmi.
  32. 32. EsempioEsempio di una funzione che calcola la media tra duevalori: argomenti valore di ritornofloat calcolamedia(float a, float b){ float media; media = (a + b) / 2; return(media);}
  33. 33. Eseguire una funzionePer richiamare tale funzione si procede nel seguente modo:main(){ float a = 10, b = 25, risultato; risultato = calcolamedia(a, b); printf("Valore medio = %fn", risultato);}Nota: listruzione "return" porta il risultato della funzione alprogramma principale.
  34. 34. Programma calcola media#include <stdio.h>#include <stdlib.h>float calcolamedia(float a, float b){ float media; media = (a + b) / 2; return(media);}main(){ float a = 10, b = 25, risultato; risultato = calcolamedia(a, b); printf("Valore medio = %fn", risultato);}
  35. 35. DomandaCosa succede se inverto l‟ordine delle funzioni? #include <stdio.h> #include <stdlib.h> main(){ float a = 10, b = 25, risultato; risultato = calcolamedia(a, b); printf("Valore medio = %fn", risultato); } float calcolamedia(float a, float b){ float media; media = (a + b) / 2; return(media); }
  36. 36. Risposta Il compilatore non può sapere cos‟è “calcolamedia” #include <stdio.h> #include <stdlib.h> float calcolamedia(float a, float b);la funzione main(){ float a = 10, b = 25, risultato;prima risultato = calcolamedia(a, b); printf("Valore medio = %fn",va dichiarata risultato); } float calcolamedia(float a, float b){ poi float media; va usata media = (a + b) / 2; return(media); }
  37. 37. Prototipi di funzioniPrima di usare una funzione, il C devericonoscere il tipo di ritorno e il tipo deiparametri che la funzione si aspetta. Va fatta una dichiarazioneLo standard ANSI del C ha introdotto un nuovo e miglioremetodo per fare questa dichiarazione rispetto alle vecchieversioni di C (ricordiamoche le moderne versioni del C aderiscono allo standardANSI).
  38. 38. Dichiarazione di funzione Limportanza della dichiarazione e doppia: - viene fatta per avere un codice sorgente più strutturato e perciò facile da leggere ed interpretare; - permette al compilatore C di controllare la sintassi delle chiamate di funzioni.
  39. 39. Dichiarazione di funzione (2)Fondamentalmente, se una funzione e stata definita prima diessere usata (call) allora è possibile semplicemente usare lafunzione.Nel caso contrario, è obbligatorio dichiarare la funzione;la dichiarazione stabilisce in modo semplice il ritorno dellafunzione ed il tipo dei parametri utilizzati da questa.E buona norma (e solitamente viene fatto) dichiarare tutte lefunzioni allinizio del programma, sebbene non siastrettamente necessario.
  40. 40. Dichiarazione di funzione (3)Per dichiarare un prototipo di funzione bisognasemplicemente stabilire il ritorno della funzione, il nome dellafunzione e tra le parentesi elencareil tipo dei parametri nellordine in cui compaiono nelladefinizione di funzione.Ad esempio: int strlen(char[]);Questo dichiara che una funzione di nome "strlen" ritorna unvalore integer ed accetta una singola stringa come parametro.
  41. 41. Una scorciatoiale funzioni e le variabili possono essere dichiarate sulla stessa lineadi codice sorgente. Questa procedura era molto piu diffusa neigiorni del pre-ANSI C; da allora le funzioni solitamente vengonodichiarate separatamente allinizio del programma. La primaprocedurarisulta ancora perfettamente valida, purchè venga rispettato lordinein cui gli oggetti compaiono nella definizione della funzione.int length, strlen(char[]);dove "length" e una variabile, e "strlen" e la funzione (comenellesempio precedente).
  42. 42. Funzioni “void”Se non si vuole ritornare alcun valore da una funzione è sufficiente dichiararla di tipovoid ed omettere il return.void cento(){ int loop; for (loop = 0; loop < 10; loop++); printf("%dn", loop * loop);}main(){ cento();}Nota: è obbligatorio mettere le parentesi () dopo il nome della funzione anche se non ci sono parametri.
  43. 43. Funzioni ed arrayPossono essere passati alle funzioni come parametri anche array singoli omultidimensionali.Gli array monodimensionali possono essere passati nel seguente modo:float trovamedia(int size,float list[]){ int i; float sum = 0.0; for (i = 0; i < size; i++) sum += list[i]; return(sum/size);}
  44. 44. SpiegazioneNella precedente funzione “trovamedia” ladichiarazione "float list[]" dichiara al C che"list" è un array di float.Non viene specificata la dimensione di un arrayquando è un parametro di una funzione.
  45. 45. Esempio d‟uso per “trovamedia” #include <stdio.h> #include <stdlib.h> //dichiarazione di funzione float trovamedia(int size, float list[]); //main main(){ OUTPUT float numeri[2]; la media e 2.400000 numeri[0] = 1.2; numeri[1] = 3.6; float media = trovamedia(2, numeri); Premere un tasto per continuare . . . printf("la media e %fn", media); system("PAUSE"); } //codice della funzione float trovamedia(int size,float list[]){ int i; float sum = 0.0; for (i = 0; i < size; i++) sum += list[i]; return(sum/size); }
  46. 46. Funzioni ed array multidimensionaliArray multidimensionali possono essere passati allefunzioni nel seguente modo:void stampatabella(int xsize, int ysize, float tabella[][5]){ int x,y; for (x = 0; x < xsize; x++) { for (y = 0; y < ysize; y++) printf(“t%f ”, tabella[x][y]); printf("n"); }}
  47. 47. SpiegazioneNella precedente funzione “stampatabella”, la parte dicodice "float tabella[][5]" dichiara al C che tabella è un arraydi float di dimensioni nx5.E importante notare che dobbiamo specificare la secondadimensione (e le successive) del vettore, ma non la primadimensione.
  48. 48. Riepilogo: array e funzioniriepilogando,nel caso di array singoli non e necessario specificarela dimensione dellarray nella definizione comeparametro della funzione,mentre nel caso di array multidimensionali si puònon specificare solo la prima dimensione.
  49. 49. Esercizio: array e funzioniSi scriva un programma che prenda in ingressoda tastiera 10 interi, li memorizzi in un array,ordini tale array e stampi la lista dei numeriinseriti dall‟utente e la stessa lista ordinata.Esempio:Input: 1 3 2 23 43 521 98 43 9 10Output: 1 2 3 9 10 23 43 43 98 521
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×