Le struct con il C Cosa sono Variabili
Le struct con il C
Cosa sono ? Variabili strutturate come i vettori … … ma che superano una limitazione dei vettori
Vettori 12 3 -2 fabio luca 4 alex 5 6 vika 7 8 tea Dati omogenei 9 maia
Struct 167 Rossi Mario 12. 8 True field (campo) Singola variabile formata da molti Dati NON omogenei
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 E’ poi semplice definire array di struct
167 Rossi Mario 12. 8 True struct dipendenti { int matricola; string cognome; string nome; double assenze. Medie; bool stagionale; }
ISO C++ proibisce l’inizializzazione struct dipendenti { int matricola = 0; string cognome = “”; string nome; double assenze. Medie; bool stagionale; }
struct dipendenti { int matricola; string cognome; string nome; double assenze. Medie; bool stagionale; } L’identificatore della struct viene poi usato per dichiarare variabili che rispettano quel modello: dipendenti dip 1, dip 2; 0 “” “” 0 false
Ma è possibile assegnare valori in fase di dichiarazione come per gli array: dipendenti dip 1 = {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. assenze. Medie = 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; dip 1. cognome = dip 2. cognome; dip. nome = variabile. Stringa; dip. assenze. Medie = media(); cout << dip. nome; if (dip 1. nome == dip 2. nome). . .
E’ possibile copiare tutti i campi da una struct ad un’altra con un solo assegnamento: dip 1 = dip 2
Possiamo dichiarare quante variabili ‘dipendente’ vogliamo: dipendenti dip 1; dipendenti dip 2; 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; //4 a. ITIS int numero. Alunni; string Nomi. Alunni[35]; } Classe c; … c. Nomi. Alunni[i] = “…”;
Ed ora un esercizio che mette tutto insieme Si vuole gestire un catalogo dei propri MP 3. Il catalogo può essere salvato e riletto da disco. Si possono ritrovare i dati sugli MP 3 cercando per titolo (anche solo una sua parte)
Dati Richiesti titolo autore durata (secondi) url (download)
Esempio di file contenente i dati del catalogo MP 3 Nome File: mp 3. txt Roc Boys Jay-Z 182 www. mp 3. com/top. Ten/01. mp 3 D. A. N. C. E. Justice 190 www. justice. com/clips/dance. mp 3
Interfaccia del programma Menu principale 1 – Carica catalogo da disco 2 – Salva catalogo su disco 3 – Aggiungi MP 3 4 – Ricerche 9 – Fine programma
Funzioni scritte dal prof. - 1 FILES string leggi. Riga(string path. File); restituisce #FINITO# a fine file registra. Riga(string path. File, string riga); elimina(string path. File); Ogni riga del file corrisponde ad un dato; è possibile preparare qualche dato in partenza con il blocco note.
Funzioni scritte dal prof. – 2 STRINGHE string maiuscolo(string s); string minuscolo(string s); string int. To. String(int n); bool cerca. Stringa(string cercata, string cerca. Qui) Funzioni libreria standard STRINGHE int atoi(string s);
Questioni da affrontare - 1 Dimensionare il vettore: a priori non si sa quanti mp 3 ci sono nel file … come fare ? Sarebbe interessante dimensionare il vettore in modo da poter sempre aggiungere almeno altri 500 mp 3 prima di essere costretti a far ripartire il programma
Questioni da affrontare - 2 Il file contiene stringhe di testo ma la durata nella struct è un int; come comportarsi?
- Slides: 24