La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Fondamenti di Informatica

Presentazioni simili


Presentazione sul tema: "Fondamenti di Informatica"— Transcript della presentazione:

1 Fondamenti di Informatica
Riassunto Funzioni Passaggio di parametri Funzioni ricorsive Puntatori come valore di ritorno da funzione 17/04/2017

2 Esercitazione 5 Cosa vedremo oggi? Strutture Lista di strutture
17/04/2017

3 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 17/04/2017

4 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 tipo elemento Struct elemento{ float ascissa; float ordinata; }; typedef struct elemento Punto; Nella struttura deifnisco due variabili float struct elemento=Punto 17/04/2017

5 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]); 17/04/2017

6 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… 17/04/2017

7 Strutture #include <stdio.h> scanf("%f",&punti[0].ordinata);
#include <math.h> /*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)); 17/04/2017

8 Strutture e liste Cos’è una lista?
Una lista è una struttura dati astratta che denota una collezione ordinata di oggetti 17/04/2017

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

10 Strutture e liste Possiamo immaginare una lista composta in questo modo: 3 45 4 2 32 Ogni elemento della lista è una struttura 17/04/2017

11 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 17/04/2017

12 Strutture e liste #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 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"*/ case 3: stampa(primo); /*chiamo stampa passando il puntatore "primo"*/ case 4: default: printf("Scelta non corretta; inserisci nuovamente\n\n"); } }while (scelta!=4); Strutture e liste 17/04/2017

13 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; 17/04/2017

14 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++; } 17/04/2017


Scaricare ppt "Fondamenti di Informatica"

Presentazioni simili


Annunci Google