La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

21/06/20151 Fondamenti di Informatica  Riassunto  Funzioni  Passaggio di parametri  Funzioni ricorsive  Puntatori come valore di ritorno da funzione.

Presentazioni simili


Presentazione sul tema: "21/06/20151 Fondamenti di Informatica  Riassunto  Funzioni  Passaggio di parametri  Funzioni ricorsive  Puntatori come valore di ritorno da funzione."— Transcript della presentazione:

1 21/06/20151 Fondamenti di Informatica  Riassunto  Funzioni  Passaggio di parametri  Funzioni ricorsive  Puntatori come valore di ritorno da funzione

2 21/06/20152 Esercitazione 5  Cosa vedremo oggi?  Strutture  Lista di strutture

3 21/06/20153 Strutture  Cos’è una struttura?  Una struttura è una collezione contenente una o più variabili, di uno o più tipi, raggruppate da un nome comune. Le strutture consentono di trattare come un unico oggetto un insieme di variabili correlate

4 21/06/20154 Strutture  Come si definisce una struttura? Un punto nel piano cartesiano è definito da due valori: uno per le ascisse e l’altro per le ordinate. Struct elemento{ float ascissa; float ordinata; }; typedef struct elemento Punto; Definisco una struttura di tipo elemento Nella struttura deifnisco due variabili float struct elemento=Punto

5 21/06/20155 Strutture  Come uso una struttura?  Posso usare una struttura come una qualunque altra variabile. Posso definire una variabile di tipo Punto Punto elemento_del_piano; Oppure definire un’array di variabili Punto Punto punti[2]; E far riferimento ai campi come: punti[0].ascissa punti[0].ordinata Inoltre posso passare le variabili Punto come parametri ad una funzione distanza(punti[0],punti[1]);

6 21/06/20156 Strutture  Scriviamo un programma che, dati due punti sul piano cartesiano,ne calcola la distanza L’utente inserirà i valori x e y dei due punti che verranno gestiti tramite una struttura e il programma restituirà la distanza fra P e Q Vediamo il codice…

7 21/06/20157 Strutture #include #include /*includo la libreria per SQRT*/ /*definisco una struttura formata da due campi float*/ struct elemento { float ascissa; float ordinata; }; typedef struct elemento Punto; /*questo TIPO di struttura la chiamo Punto*/ float distanza(Punto, Punto); /*il prototipo funzione*/ void main(void) { Punto punti[2]; /*def un vettore di due elementi*/ /*ogni elemento è una struttura Punto*/ float dist; /*definisco la varibile dist */ system("cls"); /*pulisco lo schermo*/ /*metto i valori nei campi delle strutture*/ printf("Inserisci l'ascissa del primo punto: \n"); scanf("%f",&punti[0].ascissa); printf("Inserisci l'ordinata del primo punto: \n"); scanf("%f",&punti[0].ordinata); printf("Inserisci l'ascissa del secondo punto: \n"); scanf("%f",&punti[1].ascissa); printf("Inserisci l'ordinata del secondo punto: \n"); scanf("%f",&punti[1].ordinata); dist=distanza(punti[0],punti[1]); /*chiamo distanza*/ /*passando le strutture come parametri*/ printf("La distanza fra i due punti e': %f\n",dist); system("pause"); } float distanza(Punto p1, Punto p2) { float delta1 = p1.ascissa - p2.ascissa; float delta2 = p1.ordinata - p2.ordinata; return sqrt((delta1*delta1)+(delta2*delta2)); }

8 21/06/20158 Strutture e liste  Cos’è una lista?  Una lista è una struttura dati astratta che denota una collezione ordinata di oggetti

9 21/06/20159 Strutture e liste  Implementiamo una lista di punti typedef struct elemento{ int ascissa; int ordinata; struct elemento *next; }; typedef struct elemento punto; Definisco una struttura, di tipo elemento, formata da 3 campi I primi due campi sono variabili intere Il terzo campo è un puntatore ad una struttura elemento struct elemento=punto

10 21/06/ Strutture e liste  Possiamo immaginare una lista composta in questo modo: Ogni elemento della lista è una struttura

11 21/06/ Strutture e liste  Scriviamo un programma che permetta di inserire, visualizzare e cancellare delle coppie di punti da una lista in modo da implementare il funzionamento di uno stack 2,4 23,5 32,65 0,7 Input Output

12 21/06/ Strutture e liste #include struct elemento{ /*definisco una struttura formata da tre campi*/ int ascissa; int ordinata; struct elemento *next; /*questo campo contiene un ptr ad una struttura*/ }; typedef struct elemento punto; punto* inserisci(punto *); /*prototipi di funzione*/ punto *cancella(punto *first); void stampa(punto *first); void main(void){ int scelta; punto *primo=NULL; /*Puntatore a punto, inizializzato a NULL*/ do{ printf("Scegli la tua opzione\n"); printf("1) Inserisci nuovo punto\n"); printf("2) Cancella ultimo punto\n"); printf("3) Stampa lista corrente dei punti\n"); printf("4) Termina programma\n"); scanf("%d",&scelta); switch(scelta){ case 1: primo=inserisci(primo); /*chiamo inserisci passando il puntatore "primo"*/ break; case 2: primo=cancella(primo); /*chiamo cancella passando il puntatore "primo"*/ break; case 3: stampa(primo); /*chiamo stampa passando il puntatore "primo"*/ break; case 4: break; default: printf("Scelta non corretta; inserisci nuovamente\n\n"); } }while (scelta!=4); }

13 21/06/ punto* inserisci(punto *first){ int asc,ord; punto *q; /*dichiaro un puntatore a struttura punto*/ printf("\nInserisci le coordinate del nuovo punto\n"); printf("Ascissa="); scanf("%d",&asc); printf("Ordinata="); scanf("%d",&ord); q=(punto *)malloc(sizeof(punto)); /*allocazione dinamica memoria per il nuovo elemento*/ if (q==NULL) { /*verifico che l'allocazione abbia avuto successo*/ printf("\nMemoria esaurita!\n"); return(first); } q->ascissa=asc; /*inserisco nei campi della struttura puntata da q i valori*/ q->ordinata=ord; q->next=first; /*inserimento in testa*/ printf("Punto (%d,%d) inserito con successo.\n",q->ascissa,q->ordinata); return q; } /******************************************************************************/ punto *cancella(punto *first){ punto *p; /*dichiaro un puntatore alla struttura punto*/ if (first==NULL) printf("\nNessun elemento nella lista.\n\n"); else{ p=first->next; /*metto in p il valore next della strutt. puntata da first*/ free(first); /*deallocazione della memoria*/ } return p; } /******************************************************************************/

14 21/06/ void stampa(punto *first){ int cont=1; punto *q; /*dichiaro un puntatore alla struttura punto*/ if (first==NULL) printf("La lista e' vuota.\n"); else for(q = first; q != NULL; q = q-> next){ printf("%d -- (%d,%d)\n",cont,q->ascissa,q->ordinata); cont++; }


Scaricare ppt "21/06/20151 Fondamenti di Informatica  Riassunto  Funzioni  Passaggio di parametri  Funzioni ricorsive  Puntatori come valore di ritorno da funzione."

Presentazioni simili


Annunci Google