Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati...

14
Strutture dati Strutture dati In linguaggio C In linguaggio C

Transcript of Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati...

Page 1: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Strutture datiStrutture datiIn linguaggio CIn linguaggio C

Page 2: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

StruttureStruttureSpesso gli algoritmi lavorano su insiemi di dati eterogeneiSpesso gli algoritmi lavorano su insiemi di dati eterogenei

Per esempio, per descrivere le caratteristiche di uno studente potremmo Per esempio, per descrivere le caratteristiche di uno studente potremmo utilizzare le variabili utilizzare le variabili

classe, sezione, cognome, nome e votoFinale, classe, sezione, cognome, nome e votoFinale,

rispettivamente di tipo int, char, array di char (stringa) e float.rispettivamente di tipo int, char, array di char (stringa) e float.

Sarebbe più naturale utilizzare una sola variabile in cui memorizzare tutti gli Sarebbe più naturale utilizzare una sola variabile in cui memorizzare tutti gli elementi dell’aggregazione. elementi dell’aggregazione.

E’ quindi necessario definire un nuovo tipo dato, che è un’aggregazione di E’ quindi necessario definire un nuovo tipo dato, che è un’aggregazione di tipi dati eterogenei.tipi dati eterogenei.

In informatica spesso si fa riferimento a un’aggregazione di dati di tipo In informatica spesso si fa riferimento a un’aggregazione di dati di tipo eterogeneo con il termine record (registrazione) e ai suoi elementi con il eterogeneo con il termine record (registrazione) e ai suoi elementi con il termine campo del record.termine campo del record.

Nel linguaggio C/C++ un’aggregazione di dati di tipo eterogeneo è una Nel linguaggio C/C++ un’aggregazione di dati di tipo eterogeneo è una struttura e ogni suo elemento un membro della struttura.struttura e ogni suo elemento un membro della struttura.

Page 3: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

structstruct struct studentestruct studente

{{

int classe;int classe;

char sezione;char sezione;

char cognome[15];char cognome[15];

char nome[15];char nome[15];

float votoFinale;float votoFinale;

};};

Page 4: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Nuovi tipi di datoNuovi tipi di datoLa dichiarazione di un tipo di dato è simile nei vari linguaggi (tranne La dichiarazione di un tipo di dato è simile nei vari linguaggi (tranne per piccole differenze sintattiche)per piccole differenze sintattiche)

La dichiarazione non alloca spazio in memoria e non definisce alcuna La dichiarazione non alloca spazio in memoria e non definisce alcuna variabile.variabile.

Una volta dichiarato il tipo studente si possono definire variabili di Una volta dichiarato il tipo studente si possono definire variabili di quel tipo:quel tipo:

struct studente iscritto;struct studente iscritto;

iscritto è una variabile strutturata, composta da cinque parti: una di iscritto è una variabile strutturata, composta da cinque parti: una di tipo int, classe, una di tipo char, sezione, due di tipo stringa (array tipo int, classe, una di tipo char, sezione, due di tipo stringa (array di char), cognome e nome, una di tipo float, votoFinale.di char), cognome e nome, una di tipo float, votoFinale.

La dichiarazione di una variabile di tipo struttura alloca la memoria La dichiarazione di una variabile di tipo struttura alloca la memoria necessaria a contenere i suoi elementi, ciascuno in base al proprio necessaria a contenere i suoi elementi, ciascuno in base al proprio tipo di dato.tipo di dato.

Page 5: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Sintassi in CSintassi in CDichiarazione di un nuovo tipo di dato:Dichiarazione di un nuovo tipo di dato:struct strutturastruct struttura{{

tipo1 membro1;tipo1 membro1;tipo2 membro2;tipo2 membro2;......tipo3 membroN;tipo3 membroN;

};};

Dichiarazione di variabiliDichiarazione di variabilistruct struttura variabile1, variabile2.. variabileN;struct struttura variabile1, variabile2.. variabileN;

EsempioEsempiostruct studente iscritto, a, b;struct studente iscritto, a, b;

Page 6: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Sintassi Sintassi alternativa in Calternativa in C

Dichiarazione di variabili di un nuovo Dichiarazione di variabili di un nuovo tipo di dato:tipo di dato:struct strutturastruct struttura

{{tipo1 membro1;tipo1 membro1;

tipo2 membro2;tipo2 membro2;

......

tipo3 membroN;tipo3 membroN;

} variabile1, variabile2.. variabileN;} variabile1, variabile2.. variabileN;

Page 7: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Esempio d’usoEsempio d’usoPer fare riferimento ai campi di una variabile Per fare riferimento ai campi di una variabile di tipo struttura si utilizza l’operatore punto. di tipo struttura si utilizza l’operatore punto.

Sintassi:Sintassi:variabileStruttura.membrovariabileStruttura.membro

Esempi:Esempi:iscritto.classe = 3;iscritto.classe = 3;iscritto.sezione = ‘A’;iscritto.sezione = ‘A’;strcpy(iscritto.cognome =,“Bianchi”);strcpy(iscritto.cognome =,“Bianchi”);strcpy(iscritto.nome ,“Francesca”);strcpy(iscritto.nome ,“Francesca”);iscritto.votoFinale = 8.5;iscritto.votoFinale = 8.5;

Page 8: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Strutture Strutture annidateannidate

struct residenzastruct residenza

{{char char

indirizzo[35];indirizzo[35];char citta'[30];char citta'[30];char prov[2];char prov[2];char char

telefono[15];telefono[15];

};};

struct studentestruct studente

{{int classe;int classe;char sezione;char sezione;char cognome[15];char cognome[15];char nome[15];char nome[15];struct residenza struct residenza

recapito;recapito;float votoFinale;float votoFinale;

};};

Page 9: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Esempio d’usoEsempio d’usoLa struttura studente ha il campo La struttura studente ha il campo recapito di tipo struttura residenza.recapito di tipo struttura residenza.

Se stud1 è una variabile di tipo Se stud1 è una variabile di tipo studente, per fare riferimento al studente, per fare riferimento al numero di telefono dello studente si numero di telefono dello studente si scrive stud1.recapito.telefonoscrive stud1.recapito.telefono

Page 10: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Array di structArray di structUn array di struct Un array di struct rappresenta un insieme di rappresenta un insieme di entità dello stesso tipo, per entità dello stesso tipo, per esempio tutti gli studenti di esempio tutti gli studenti di un istituto. un istituto.

Si ottengono oggetti che Si ottengono oggetti che rappresentano aggregazioni rappresentano aggregazioni omogenee (gli array) di omogenee (gli array) di oggetti eterogenei (le oggetti eterogenei (le strutture. strutture.

struct studente struct studente istituto[100];istituto[100];

L’esempio definisce un L’esempio definisce un array composto da 100 array composto da 100 elementi omogenei di tipo elementi omogenei di tipo studentestudente

Page 11: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

struct come struct come parametriparametri

Una variabile di tipo stuct può essere Una variabile di tipo stuct può essere passata come parametro ad una passata come parametro ad una funzionefunzione

In questo caso è necessario che la In questo caso è necessario che la dichiarazione della struttura sia globale dichiarazione della struttura sia globale (visibile dal programma e dalla funzione(visibile dal programma e dalla funzione

EsempioEsempio

void visualizzaStudente(struct studente s)void visualizzaStudente(struct studente s)

Page 12: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Passaggio per Passaggio per indirizzoindirizzo

Una variabile di tipo struct puù essere passata per Una variabile di tipo struct puù essere passata per indirizzoindirizzo

EsempioEsempio

void leggiStudente(struct studente *s)void leggiStudente(struct studente *s)

In questo caso il riferimento ad un campo della In questo caso il riferimento ad un campo della struttura all’interno della funzione sarà per struttura all’interno della funzione sarà per esempio:esempio:

(*s).sezione (*s).sezione il campo sezione della struttura all’indirizzo sil campo sezione della struttura all’indirizzo s

Esempio di inputEsempio di input

scanf("%d",&(*s).classe);scanf("%d",&(*s).classe);

Page 13: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Notazione Notazione alternativaalternativa

Nell’esempio precedente è possibile Nell’esempio precedente è possibile utilizzare al posto di (*s).sezioneutilizzare al posto di (*s).sezione

La notazione s->sezioneLa notazione s->sezione

In pratica (*struttura). Può essere In pratica (*struttura). Può essere sostituito da struttura->sostituito da struttura->

Page 14: Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.

Una funzione che Una funzione che ritorna un valore ritorna un valore

di tipo structdi tipo structstruct studente leggiStud()struct studente leggiStud()

{{

struct studente s;struct studente s;

printf("Inserisci la classe dello studente: ");printf("Inserisci la classe dello studente: ");

scanf("%d",&s.classe);scanf("%d",&s.classe);

// ...// ...

return s;return s;

}}

Che viene chiamata per esempio: Che viene chiamata per esempio: s1 = leggiStud();s1 = leggiStud();