Le struct con il C. Cosa sono ? Variabili strutturate come i vettori … … ma che superano una...

Post on 02-May-2015

220 views 2 download

Transcript of Le struct con il C. Cosa sono ? Variabili strutturate come i vettori … … ma che superano una...

Le struct con il C

Cosa sono ?

Variabili strutturate

come i vettori …

… ma che superano una limitazione dei vettori

Vettori

12 3 -2 4 5 6 7 8 9

fabio luca alex vika tea maia

Dati omogenei

Struct

Singola variabile formata da

molti Dati NON omogenei

167

Rossi

Mario

12.8

True

field (campo)

Struct

E’ poi semplice definire

array di struct

167

Rossi

Mario

12.8

True

168

Verdi

Sandro

8.8

False

169

Bianchi

Achille

0

False

170

Neri

Mario

9

True

167

Rossi

Ugo

13

True

struct dipendenti{ int matricola;

string cognome;string nome;double assenzeMedie;bool stagionale;

}

167

Rossi

Mario

12.8

True

struct dipendenti{ int matricola = 0;

string cognome = “”;string nome;double assenzeMedie;bool stagionale;

}

ISO C++ proibisce l’inizializzazione

struct dipendenti{ int matricola; string cognome; string nome; double assenzeMedie; bool stagionale; }

L’identificatore della struct viene poi usato per dichiarare variabili che rispettano quel modello:

dipendenti dip1, dip2;

0

“”

“”

0

false

Ma è possibile assegnare valori in fase di dichiarazione come per gli array:

dipendenti dip1 =

{167, “Rossi”, “Mario”, 12.8, false};

Per accedere ai campi (field) di una struct si utilizza la cosiddetta notazione ‘punto’:

dipendenti dip;dip.matricola = 167;dip.cognome = “Rossi”;dip.nome = “Mario”;dip.assenzeMedie = 12.8;dip.stagionale = false;

167

Rossi

Mario

12.8

false

I valori possono essere assegnati / usati in tutti i modi che conoscete essere validi per le variabili semplici:

cin >> dip.matricola;dip1.cognome = dip2.cognome;dip.nome = variabileStringa;dip.assenzeMedie = media();cout << dip.nome; if (dip1.nome == dip2.nome) ...

E’ possibile copiare tutti i campi da una struct ad un’altra con un solo assegnamento:

dip1 = dip2

Possiamo dichiarare quante variabili ‘dipendente’ vogliamo:

dipendenti dip1;dipendenti dip2;dipendenti tarzan;dipendenti fantozzi;

ATTENZIONE!!

dipendenti.nome = …

Si possono molto efficacemente combinare

array e struct

dipendenti personale[100];

Array di struct

personale[i].cognome = “…”

Oppure … una struct contenente vettori

struct Classe{ string sigla; //4aITIS int numeroAlunni;

string NomiAlunni[35];} Classe c; …c.NomiAlunni[i] = “…”;

Ed ora un esercizio che mette tutto insieme

Si vuole gestire un catalogo dei propri MP3. Il catalogo può essere salvato e riletto

da disco. Si possono ritrovare i dati sugli MP3

cercando per titolo (anche solo una sua parte)

Dati Richiesti

titoloautore

durata (secondi)url (download)

Esempio di file contenente i dati del catalogo MP3

Nome File: mp3.txt

Roc BoysJay-Z182www.mp3.com/topTen/01.mp3 D.A.N.C.E.Justice190www.justice.com/clips/dance.mp3

Interfaccia del programma

Menu principale

1 – Carica catalogo da disco2 – Salva catalogo su disco3 – Aggiungi MP34 – Ricerche9 – Fine programma

Funzioni scritte dal prof. - 1

FILESstring leggiRiga(string pathFile); restituisce #FINITO# a fine file

registraRiga(string pathFile, string riga);

elimina(string pathFile);

Ogni riga del file corrisponde ad un dato; è possibile preparare qualche dato in partenza con il blocco note.

Funzioni scritte dal prof. – 2

STRINGHEstring maiuscolo(string s);string minuscolo(string s);string intToString(int n);bool cercaStringa(string cercata, string cercaQui)

Funzioni libreria standard

STRINGHEint atoi(string s);

Questioni da affrontare - 1

Dimensionare il vettore: a priori non si sa quanti mp3 ci sono nel file … come fare ?

Sarebbe interessante dimensionare il vettore in modo da poter sempre aggiungere almeno altri 500 mp3 prima di essere costretti a far ripartire il programma

Questioni da affrontare - 2

Il file contiene stringhe di testoma la durata nella struct è un int;

come comportarsi?