Cos’è un vettore ?Un vettore è un insieme finito di N variabili dello stesso tipo,ognuna identificata da un indice intero ...
Formato:tipo nome_vettore[numberOfElements];Quando si definisce un vettore, bisognaspecificarne:       il tipo dei suoi el...
Array multidimensionali  Non è un nuovo tipo, ma si definiscono come vettori divettoriDichiarazione di vettori multidimens...
Array multidimensionaliAccesso agli elementi di una matriceEsempio:int i, mat[3][4];...i = mat[0][0]; //elemento di riga 0...
Esempio: lettura e stampa di matrice#include <stdio.h>#define RIG 2#define COL 3int main() {   int mat[RIG][COL];   int i,...
Tipi strutturati in CStrutture (Record)
Strutture• Una struttura è una collezione di variabili finitanonnecessariamente dello stesso tipo, ognuna identificatadaun...
Definizione di struttureEsempio di definizione di struttura:  struct persona        { char nome[20];          int età;    ...
Dichiarazione di variabilistruttura                             p1 e p2 sono variabili di tipo struct personaEsempio:     ...
Campi di una struttura• devono avere nomi univoci all’interno di una struttura• strutture diverse possono avere campi con ...
Accesso ai campi di una struttura• Una volta definita una variabile struttura, si accede ai singoli  campi mediante la not...
Operazioni sulle strutture• Si possono assegnare variabili di tipo struttura a variabilidello  stesso tipo struttura.     ...
• Esempio: struct card               {                 int valore;                 char seme;                 };– La parol...
Esempio• PROBLEMA: leggere le coordinate di un punto in unpiano e  modificarle a seconda dell’operazione richiesta      1....
Esempio#include <stdio.h>main() {         struct punto{float x,y;} P;         unsigned int op;         float Dx, Dy;      ...
Funzioni in C
Modello cliente/servitoreServitore:• Un qualunque ente computazionale capace di nascondere la  propria organizzazione inte...
Comunicazione cliente/servitore•Lo scambio di informazioni tra un cliente e un servitorepuò avvenire  in modo esplicito tr...
Interfaccia di una funzione•L’interfaccia (o prototipo) di una funzione comprende             nome della funzione         ...
Funzioni: esempio Cint max (int x, int y ){if (x>y) return x ;else return y;}• Il simbolo max denota il nome della funzion...
Comunicazione cliente/servitore• Il cliente passa informazioni al servitore mediante una serie di   parametriParametri for...
Funzioni: esempio parametri
Comunicazione cliente/servitoreLegame tra parametri attuali e parametriformali:• effettuato al momento della chiamata, inm...
Esempio          All’atto di questa          chiamata della funzione,          si effettua un legame tra:          xez    ...
Esempio:           All’atto della chiamata           della funzione si effettua           il legame tra:            xe5   ...
Information hiding• La struttura interna (corpo) di una funzione è  completamente inaccessibile dall.esterno• Così facendo...
Definizione di funzione in C<tipoValore> <nome>(<parametri-formali>) {     <corpo>                                        ...
Definizione di funzione in C <tipoValore> <nome>(<parametri-formali>) {       <corpo>                                     ...
Funzioni: nascita e morte• All’atto della chiamata:  l’esecuzione del cliente viene sospesa e il  controllo passa al servi...
Chiamata di funzione• La chiamata di funzione è un.espressione della forma      <nomefunzione> ( <parametri-attuali> )• do...
Funzioni: esempio         Parametri formaliint max (int x, int y ){                                    SERVITORE    if (x>...
Risultato di una funzione• L’istruzione return provoca la restituzione del  controllo al cliente, unitamente al valore del...
Funzioni: esempio         Parametri formaliint max (int x, int y ){                                SERVITORE    if (x>y) r...
RiassumendoAll’atto dell’invocazione di una funzione:• si crea una nuova attivazione (istanza) del servitore• si alloca la...
Passaggio dei parametriIn generale, un parametro può essere trasferito dal cliente al servitore: • per valore o copia (by ...
Passaggio per valore• Si trasferisce una copia del valore del parametro attuale          cliente
Passaggio per valore• Si trasferisce una copia del valore del parametro attuale                                           ...
Passaggio per riferimento• Si trasferisce un riferimento al parametro attuale          cliente
Passaggio per valore• Si trasferisce una riferimento al parametro attuale                                                 ...
Passaggio dei parametri in C• In C, i parametri sono trasferiti sempre e solo  per valore (by value)    si trasferisce una...
Upcoming SlideShare
Loading in...5
×

Lezione 10 (21 marzo 2012)2

319

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
319
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lezione 10 (21 marzo 2012)2

  1. 1. Cos’è un vettore ?Un vettore è un insieme finito di N variabili dello stesso tipo,ognuna identificata da un indice intero compreso fra 0 e N-1
  2. 2. Formato:tipo nome_vettore[numberOfElements];Quando si definisce un vettore, bisognaspecificarne: il tipo dei suoi elementi; c[0] il nome; c[1] il numero dei suoi elementi; c[2] c[3] c[4] Esempio: c[5] int c[12]; c[6] float mio_vettore[3284]; c[7] c[8] c[9] c[10] c[11]
  3. 3. Array multidimensionali Non è un nuovo tipo, ma si definiscono come vettori divettoriDichiarazione di vettori multidimensionali<tipo-elementi> <nome-array> [lung_1][lung_2]…[lungN]; Per ogni dimensione i l’indice va da 0 a lung_i-1Esempio:int mat[3][4]; array bidimensionale di 3 righe per 4colonne (ovvero matrice 3 X 4)
  4. 4. Array multidimensionaliAccesso agli elementi di una matriceEsempio:int i, mat[3][4];...i = mat[0][0]; //elemento di riga 0 e colonna 0 (primo elemento)mat[2][3] = 24; //elemento di riga 2 e colonna 3 (ultimo elemento)mat[2][1] = mat[0][0] * mat[1][3];• Come per i vettori, l’unica operazione possibile sullematrici è l’accesso agli elementi tramite l’operatore [ ]
  5. 5. Esempio: lettura e stampa di matrice#include <stdio.h>#define RIG 2#define COL 3int main() { int mat[RIG][COL]; int i, j; /* lettura matrice */ printf("Lettura matrice %d x %d;n", RIG, COL); for (i = 0; i < RIG; i++) for (j = 0; j < COL; j++) scanf("%d", &mat[i][j]); /* stampa matrice */ printf("La matrice e:n"); for (i = 0; i < RIG; i++) { for (j = 0; j < COL; j++) printf("%6d ", mat[i][j]); printf("n"); } system(“PAUSE”); return 0; }
  6. 6. Tipi strutturati in CStrutture (Record)
  7. 7. Strutture• Una struttura è una collezione di variabili finitanonnecessariamente dello stesso tipo, ognuna identificatadaun nome•Una struttura (o record) serve quindi per aggregareelementi(anche di tipo diverso) sotto un unico nome.Sintassi struct <etichetta> { <definizione-di-variabili> };
  8. 8. Definizione di struttureEsempio di definizione di struttura: struct persona { char nome[20]; int età; float stipendio; };• ATTENZIONE: La definizione della struttura non provocaallocazione di memoria, ma introduce un nuovo tipo di dato
  9. 9. Dichiarazione di variabilistruttura p1 e p2 sono variabili di tipo struct personaEsempio: elenco è un array di 50 elementi di tipo struct personastruct persona p1, p2;struct persona elenco[50];• Una variabile di tipo struttura può essere dichiarata contestualmentealla definizione della struttura.• In questo caso si può anche omettere l’etichetta di struttura. d1 e d2 sono variabili di tipo struct datastruct data { int giorno; int mese; int anno;} d1,d2;
  10. 10. Campi di una struttura• devono avere nomi univoci all’interno di una struttura• strutture diverse possono avere campi con lo stesso nome• i nomi dei campi possono coincidere con nomi di variabili o funzioni• possono essere di tipo diverso (semplice o altre strutture)• un campo di una struttura non può essere del tipo struttura che sista Esempi definendo corretti int x; struct a { char x; int y; }; struct b { int w; float x; }; ERRORE struct s { int a; struct s next; };
  11. 11. Accesso ai campi di una struttura• Una volta definita una variabile struttura, si accede ai singoli campi mediante la notazione puntata struct data {struct punto { int giorno, mese, anno; int x, y; } d1, d2 ;} p1, p2 ; …… d1.giorno = 25;p1.x = 10; d1.mese = 12;p1.y = -2; d1.anno = 2003;p2.x = 5; printf(“%d-%d-%d”, d1.giorno,p2.y = 7; d1.mese, d1.anno); • Ogni campo si usa come una normale variabile del tipo corrispondente a quello del campo
  12. 12. Operazioni sulle strutture• Si possono assegnare variabili di tipo struttura a variabilidello stesso tipo struttura. Esempio: struct data d1, d2; ... d1 = d2;• Non è possibile effettuare il confronto tra due variabilidi tipo struttura. Esempio: struct data d1, d2; if (d1 == d2) ... Errore!
  13. 13. • Esempio: struct card { int valore; char seme; };– La parola chiave struct introduce la definizione della struttura– card è il nome della struttura ed è usato per dichiarare variabili di quel tipo di struttura– card contiene due membri della struttura: un intero che contiene il valore della carta, ed un carattere che contiene l’iniziale del suo seme (‘c’, ‘q’, ‘f’, ‘p’)– I membri della stessa struttura devono avere nomi diversi, mentre membri di diverse strutture possono avere lo stesso nome (poi capiremo perché).– Ogni definizione di struttura deve terminare con ;
  14. 14. Esempio• PROBLEMA: leggere le coordinate di un punto in unpiano e modificarle a seconda dell’operazione richiesta 1. proiezione sull’asse X 2. proiezione sull’asse Y 3. traslazione di DX e DY• Specifica: • leggere le coordinate di input e memorizzarle in una struttura • leggere l’operazione richiesta • effettuare l’operazione • stampare il risultato
  15. 15. Esempio#include <stdio.h>main() { struct punto{float x,y;} P; unsigned int op; float Dx, Dy; printf("ascissa? "); scanf("%f",&P.x); printf("ordinata? "); scanf("%f",&P.y); printf("%sn","operazione(0,1,2,3)?"); scanf("%d",&op); switch (op) { case 1: P.y=0;break; case 2: P.x=0; break; case 3: printf("%s","Traslazione?”); scanf("%f%f",&Dx,&Dy); P.x=P.x + Dx; P.y=P.y + Dy; break; default: ; } printf("%sn",“Le nuove coordinate sono "); printf("%f %fn",P.x,P.y); }
  16. 16. Funzioni in C
  17. 17. Modello cliente/servitoreServitore:• Un qualunque ente computazionale capace di nascondere la propria organizzazione interna• presentando ai clienti una precisa interfaccia per lo scambio di informazioniCliente:• qualunque ente in grado di invocare uno o più servitori per svolgere il proprio compito
  18. 18. Comunicazione cliente/servitore•Lo scambio di informazioni tra un cliente e un servitorepuò avvenire in modo esplicito tramite le interfacce stabilite dalservitore in modo implicito tramite aree-dati accessibili adentrambi, ossia l’ambiente condiviso
  19. 19. Interfaccia di una funzione•L’interfaccia (o prototipo) di una funzione comprende nome della funzione lista dei parametri tipo del valore da essa denotato• Esplicita il contratto di servizio fra cliente e servitore•Cliente e servitore comunicano quindi mediante i parametri trasmessi dal cliente al servitore all’atto della chiamata il valore restituito dal servitore al cliente
  20. 20. Funzioni: esempio Cint max (int x, int y ){if (x>y) return x ;else return y;}• Il simbolo max denota il nome della funzione• Le variabili intere x e y sono i parametri della funzione• Il valore restituito è un intero int
  21. 21. Comunicazione cliente/servitore• Il cliente passa informazioni al servitore mediante una serie di parametriParametri formali: sono specificati nella dichiarazione del servitore esplicitano il contratto fra servitore e cliente indicano che cosa il servitore si aspetta dal clienteParametri attuali: sono trasmessi dal cliente all’atto della chiamata devono corrispondere ai parametri formali in numero, posizione e tipo
  22. 22. Funzioni: esempio parametri
  23. 23. Comunicazione cliente/servitoreLegame tra parametri attuali e parametriformali:• effettuato al momento della chiamata, inmodo dinamicoTale legame: vale solo per l’invocazione corrente vale solo per la durata della funzione
  24. 24. Esempio All’atto di questa chiamata della funzione, si effettua un legame tra: xez ye4
  25. 25. Esempio: All’atto della chiamata della funzione si effettua il legame tra: xe5 yez
  26. 26. Information hiding• La struttura interna (corpo) di una funzione è completamente inaccessibile dall.esterno• Così facendo si garantisce protezione dell’informazione (information hiding)• Una funzione è accessibile solo attraverso la sua interfaccia
  27. 27. Definizione di funzione in C<tipoValore> <nome>(<parametri-formali>) { <corpo> La forma base è: } return <espressione>;<parametri-formali> o una lista vuota: void o una lista di variabili (separate da virgole)visibili solo entro il corpo della funzione<tipoValore> deve coincidere con il tipo del valore restituito dalla funzione Può non esservi valore restituiti, in tal caso il tipo è void
  28. 28. Definizione di funzione in C <tipoValore> <nome>(<parametri-formali>) { <corpo> La forma base è: } return <espressione>;• Nella parte corpo possono essere presenti: definizioni e/o dichiarazioni locali (parte dichiarazioni) e un insieme di istruzioni (parte istruzioni)• I dati riferiti nel corpo possono essere costanti, variabili, oppure parametri formali• Allinterno del corpo, i parametri formali vengono trattati come variabili
  29. 29. Funzioni: nascita e morte• All’atto della chiamata: l’esecuzione del cliente viene sospesa e il controllo passa al servitore• Il servitore “vive” solo per il tempo necessario a svolgere il servizio• Al termine, il servitore “muore”, e l’esecuzione torna al cliente
  30. 30. Chiamata di funzione• La chiamata di funzione è un.espressione della forma <nomefunzione> ( <parametri-attuali> )• dove: <parametri-attuali> ::= [ <espressione> ] { , <espressione> }
  31. 31. Funzioni: esempio Parametri formaliint max (int x, int y ){ SERVITORE if (x>y) return x ; else return y; Definizione} della funzione main() { CLIENTE int z = 8; int m; Chiamata m = max ( z, 4); } della funzione Parametri attuali
  32. 32. Risultato di una funzione• L’istruzione return provoca la restituzione del controllo al cliente, unitamente al valore della espressione che la segue.• Eventuali istruzioni successive alla return non saranno mai eseguite int max (int x, int y ){ if (x>y) return x ; else return y; }
  33. 33. Funzioni: esempio Parametri formaliint max (int x, int y ){ SERVITORE if (x>y) return x ; else return y; Definizione} della funzione main() { CLIENTE int z = 8; int m; Chiamata m = max ( z, 4); } della funzione Risultato
  34. 34. RiassumendoAll’atto dell’invocazione di una funzione:• si crea una nuova attivazione (istanza) del servitore• si alloca la memoria per i parametri (e le eventuali variabili locali)• si trasferiscono i parametri al servitore• si trasferisce il controllo al servitore• si esegue il codice della funzione
  35. 35. Passaggio dei parametriIn generale, un parametro può essere trasferito dal cliente al servitore: • per valore o copia (by value) si trasferisce il valore del parametro attuale • per riferimento (by reference) si trasferisce un riferimento al parametro attuale
  36. 36. Passaggio per valore• Si trasferisce una copia del valore del parametro attuale cliente
  37. 37. Passaggio per valore• Si trasferisce una copia del valore del parametro attuale Valore (copiato) di z copia Ogni azione fatta su w è locale al servitore Istanza del servitore cliente servitore
  38. 38. Passaggio per riferimento• Si trasferisce un riferimento al parametro attuale cliente
  39. 39. Passaggio per valore• Si trasferisce una riferimento al parametro attuale Riferimento a z (indirizzo) riferimento x x Ogni azione fatta su w è In realtà fatta sulla Istanza del variabile z servitore del cliente cliente servitore
  40. 40. Passaggio dei parametri in C• In C, i parametri sono trasferiti sempre e solo per valore (by value) si trasferisce una copia del parametro attuale, non l’originale tale copia è strettamente privata e locale a quel servitore il servitore potrebbe quindi alterare il valore ricevuto, senza che ciò abbia alcun impatto sul cliente
  1. A particular slide catching your eye?

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

×