le struct con il c. cosa sono ? variabili strutturate come i vettori … … ma che superano una...
Post on 02-May-2015
218 Views
Preview:
TRANSCRIPT
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?
top related