Fondamenti di Informatica Riassunto Funzioni Passaggio di parametri

  • Slides: 14
Download presentation
Fondamenti di Informatica ØRiassunto ØFunzioni ØPassaggio di parametri ØFunzioni ricorsive ØPuntatori come valore di

Fondamenti di Informatica ØRiassunto ØFunzioni ØPassaggio di parametri ØFunzioni ricorsive ØPuntatori come valore di ritorno da funzione 6/16/2021 1

Esercitazione 5 Ø Cosa vedremo oggi? Ø Ø 6/16/2021 Strutture Lista di strutture 2

Esercitazione 5 Ø Cosa vedremo oggi? Ø Ø 6/16/2021 Strutture Lista di strutture 2

Strutture Ø Ø 6/16/2021 Cos’è una struttura? Una struttura è una collezione contenente una

Strutture Ø Ø 6/16/2021 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 3

Strutture Ø Come si definisce una struttura? Un punto nel piano cartesiano è definito

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. Definisco una struttura di Struct elemento{ tipo elemento float ascissa; float ordinata; Nella struttura deifnisco due }; variabili float typedef struct elemento Punto; struct elemento=Punto 6/16/2021 4

Strutture Ø Ø Come uso una struttura? Posso usare una struttura come una qualunque

Strutture Ø Ø Come uso una struttura? Posso usare una struttura come una qualunque altra variabile. Posso definire una variabile di tipo Punto elemento_del_piano; Oppure definire un’array di variabili 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/16/2021 5

Strutture Ø Scriviamo un programma che, dati due punti sul piano cartesiano, ne calcola

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… 6/16/2021 6

Strutture #include <stdio. h> #include <math. h> /*includo la libreria per SQRT*/ scanf("%f", &punti[0].

Strutture #include <stdio. h> #include <math. h> /*includo la libreria per SQRT*/ scanf("%f", &punti[0]. ordinata); printf("Inserisci l'ascissa del secondo punto: n"); scanf("%f", &punti[1]. ascissa); /*definisco una struttura formata da due campi float*/ printf("Inserisci l'ordinata del secondo punto: n"); struct elemento { scanf("%f", &punti[1]. ordinata); float ascissa; float ordinata; dist=distanza(punti[0], punti[1]); }; /*chiamo distanza*/ typedef struct elemento Punto; /*passando le strutture come parametri*/ /*questo TIPO di struttura la chiamo Punto*/ printf("La distanza fra i due punti e': %fn", dist); system("pause"); 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*/ float distanza(Punto p 1, Punto p 2) { float delta 1 = p 1. ascissa - p 2. ascissa; float delta 2 = p 1. ordinata - p 2. ordinata; return sqrt((delta 1*delta 1)+(delta 2*delta 2)); } /*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"); 6/16/2021 7

Strutture e liste Ø Ø 6/16/2021 Cos’è una lista? Una lista è una struttura

Strutture e liste Ø Ø 6/16/2021 Cos’è una lista? Una lista è una struttura dati astratta che denota una collezione ordinata di oggetti 8

Strutture e liste Ø Implementiamo una lista di punti Definisco una struttura, di typedef

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

Strutture e liste Ø Possiamo immaginare una lista composta in questo modo: 3 45

Strutture e liste Ø Possiamo immaginare una lista composta in questo modo: 3 45 0 2 4 32 Ogni elemento della lista è una struttura 6/16/2021 10

Strutture e liste Ø Scriviamo un programma che permetta di inserire, visualizzare e cancellare

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 Input 23, 5 Output 32, 65 0, 7 2, 4 6/16/2021 11

#include <stdio. h> struct elemento{ /*definisco una struttura formata da tre campi*/ int ascissa;

#include <stdio. h> 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 opzionen"); printf("1) Inserisci nuovo punton"); printf("2) Cancella ultimo punton"); printf("3) Stampa lista corrente dei puntin"); printf("4) Termina programman"); 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 nuovamentenn"); } }while (scelta!=4); 6/16/2021 } Strutture e liste 12

punto* inserisci(punto *first){ int asc, ord; punto *q; /*dichiaro un puntatore a struttura punto*/

punto* inserisci(punto *first){ int asc, ord; punto *q; /*dichiaro un puntatore a struttura punto*/ printf("n. Inserisci le coordinate del nuovo punton"); 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("n. Memoria 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("n. Nessun elemento nella lista. nn"); else{ p=first->next; /*metto in p il valore next della strutt. puntata da first*/ free(first); /*deallocazione della memoria*/ } return p; } /***************************************/ 6/16/2021 13

void stampa(punto *first){ int cont=1; punto *q; /*dichiaro un puntatore alla struttura punto*/ if

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++; } } 6/16/2021 14