Fondamenti di Informatica Riassunto Funzioni Passaggio di parametri
- Slides: 14
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
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 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 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 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]. 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 dati astratta che denota una collezione ordinata di oggetti 8
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 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 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; 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*/ 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 (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
- Fondamenti di informatica 2
- Marco schaerf
- Giovanni danese
- La storia dell'informatica riassunto
- Cometa halley 1986
- Reazione di riduzione
- Indovinello veronese mappa concettuale
- Il passaggio dalla preistoria alla storia
- Componenti principali di un computer
- Esercizi calorimetria
- Fondamenti di automatica benvenuti
- Dal latino alle lingue romanze mappa concettuale
- Genotipo
- Fondamenti di automatica unife
- Impedenzimetro