SAD Tabelle Implementazione C++ La tabella Una tabella è una Struttura Astratta di Dati (SAD). Una tabella è un insieme di dati omogenei composti ciascuno da due parti: • chiave; • valore. La chiave identifica univocamente ciascun elemento di una tabella. Il valore descrive il contenuto dell’elemento della tabella. 1AAA AAA 2BBB BBB 3CCC CCC 4DDD DDD 5EEE EEE 6FFF FFF 7GGG GGG 8HHH HHH Esempio di tabella: elenco alunni • Chiave numero d’ordine • Valore cognome, nome, data di nascita 1AAAAAA15/3/1972 2BBB BBB 12/3/1973 3CCC CCC 11/2/1972 4DDDDDD19/7/1972 5EEE EEE 16/3/1973 6FFF FFF 10/2/1972 7GGGGGG16/5/1973 8HHHHHH10/8/1972 Esempio di tabella: elenco articoli • Chiave codice articolo • Valore nome, colore, giacienza 1AAA Verde 25 2ZZZ Giallo60 3CCC Verde 22 4DDD Rosso 8 5JJJ Blu 44 6FFF Verde 52 7MMMVerde 12 8HHH Blu 36 Esempio di tabella: gara sportiva • Chiave numero d’ordine • Valore nome, squadra, punteggio 1AAA Inter 25 2ZZZ Inter 60 3CCC Bari 22 4DDD Roma 8 5JJJ Lazio 44 6FFF Napoli52 7MMMMilan 12 8HHH Parma 36 Tabella e record Ogni tabella è rappresentata graficamente da righe e colonne: • ogni riga individua il record della tabella, cioè la coppia chiave/valore (record); • ogni colonna individua i campi. 1 AAA Inter 25 2 ZZZ Inter 60 3 CCC Bari 22 4 DDD Roma 8 5 JJJ Lazio 44 6 FFF Napoli 52 7 MMMMilan 12 8 HHH Parma 36 Il record Un record è un tipo di dato strutturato organizzato in campi. 1 Angelini Paolo 3A 2 I campi di un record 3 possono essere di tipo 4 differente fra loro. 5 Il record STUDENTE è 6 composto dai campi CODICE, COGNOME, 7 MarcoldiAntonio5B NOME, CLASSE , 8 NASCITA 1995 1993 Il tracciato di un record Il tracciato di un record è la rappresentazione grafica dei campi di cui si compone un record. Ogni campo è definito del suo tipo. Possono esistere record di record! COGNOME NOME CLASSE NASCITA Implementazione del record in C++ struct stud { string cognome; string nome; int annoNascita; }; definizone di un nuovo tipo di dato record stud definizione dei campi del record presenza obbligatoria del ‘;’ ATTENZIONE! La struct definisce il tracciato record, cioè il tipo di dato record! Bisogna creare una variabile di tipo stud. stud studente; definizione di una variabile del tipo record stud Trattamento dei campi di un record Dato un record stud e una variabile studente di tipo stud L’input e l’output dei record avviene un campo alla volta struct stud { string cognome; string nome; int annoNascita; }; stud studente; Esempio: La visualizzazione del cout<<“\ncognome = “<<studente.cognome; record prevede l’output dei cout<<“\nnome = “<<studente.nome; singoli campi cout<<“\nanno di nascita = “<<studente.annoNascita; ESERCIZIO:RECORD LIBRO Codifica un programma in cui definisci un tipo record con tracciato : titolo del libro, costo, numero di pagine; acquisisci poi due libri e comunica tutti i dati di quello che costa di più soluzione Tabelle - vettori di record In particolare parliamo di vettori di record di solito detti tabella perché formati da tante colonne quanti sono i campi del record e da tante righe quanti sono gli elementi dell’array Facendo sempre riferimento al record stud, vogliamo definire 20 studenti di una stessa classe. Perciò scriveremo Tipo base struct stud { string cognome; string nome; int annoNascita; }; stud classe [20]; Nome della tabella dimensione della tabella Esempio di una tabella Come nei vettori le righe sono individuate da un indice di posizione (che parte da 0) mentre ogni riga essendo un record, avrà tutti i campi della struttura indice 0 1 2 3 4 6° record 5 6 Campo nome del 7° record 7 8 9 cognome nome annoNascita Elaborazione di una tabella Nell’elaborazione di una tabella si usano le tecniche già viste per i vettori e per i record. • In quanto vettore, l’elaborazione di ciascuna riga della tabella avviene una alla volta. • Poiché ogni riga è un record, ogni campo deve essere elaborato singolarmente • Il ciclo for (iterazione enumerativa) è, in questi casi, il più adatto Elaborazione di una tabella Acquisizione e visualizzazione della tabella classe int i; // dichiarazione dell’indice for (i = 0; i<20; i++) // ciclo di acquisizione {getline(cin,classe[i].cognome,’\n’); getline(cin,classe[i].nome,’\n’); cin>>classe[i].annoNascita; cin.ignore(1); } for (i = 0; i<20; i++) // ciclo di visualizzazione {cout<<classe[i].cognome<<endl; cout<<classe[i].nome<<endl; cout<<classe[i]. annoNascita <<endl; } struct stud { string cognome; string nome; int annoNascita; }; stud classe [20]; ESERCIZIO: TABELLA BIBLIOTECA Definisci un tipo record con tracciato : titolo del libro, costo, numero di pagine; definisci poi una tabella di 10 libri; acquisisci i libri della tabella e comunica poi tutti i dati ; calcola il prezzo medio dei libri soluzione Esercizio : record libro #include <cstdlib> #include <iostream> #include <string> using namespace std; struct libro { string titolo; float prezzo; int numeroPagine; }; Codifica un programma in cui definisci un tipo record con tracciato : titolo del libro, costo, numero di pagine; acquisisci poi due libri e comunica tutti i dati di quello che costa di più main() { libro L1, L2; cout<<"\nindica i dati del primo libro:"<<endl; cout<<"\ntitolo : "; cin>>L1.titolo; cout<<"\nprezzo : "; cin>>L1.prezzo; cout<<"\npagine : "; cin>>L1.numeroPagine; cout<<"\nindica i dati del secondo libro:"<<endl; cout<<"\ntitolo : "; cin>>L2.titolo; cout<<"\nprezzo : "; cin>>L2.prezzo; cout<<"\npagine : "; cin>>L2.numeroPagine; if(L1.prezzo>L2.prezzo) { cout<<"\nIl libro piu' costo e' "<<L1.titolo; cout<<" con prezzo "<<L1.prezzo; cout<<" e pagine "<<L1.numeroPagine<<endl; } else { cout<<"\nIl libro piu' costo e' "<<L2.titolo; cout<<" con prezzo "<<L2.prezzo; cout<<" e pagine "<<L2.numeroPagine<<endl; } system("PAUSE"); } #include <cstdlib> #include <iostream> #include <string> #define dim 10 using namespace std; struct libro { string titolo; float prezzo; int numeroPagine; }; Esercizio : tabella biblioteca Definisci un tipo record con tracciato : titolo del libro, costo, numero di pagine; definisci poi una tabella di 10 libri; acquisisci i libri della tabella e comunica poi tutti i dati ; calcola il prezzo medio dei libri cout<<"\nVISUALIZZAZIONE DEI LIBRI"; for(i=0;i<dim;i++) { cout<<"\ntitolo : "<<biblioteca[i].titolo; cout<<" prezzo : "<<biblioteca[i].prezzo; cout<<" pagine : "<<biblioteca[i].numeroPagine<<endl; } for(i=0;i<dim;i++) { s=s+biblioteca[i].prezzo; } m=s/dim; cout<<"\nla media dei prezzi e' : "<<m<<endl; int main() { libro biblioteca[dim]; int i=0; float s=0, m=0; system("cls"); cout<<"\nACQUISIZIONE DEI LIBRI"; for(i=0;i<dim;i++) { cout<<"\ntitolo : "; cin>>biblioteca[i].titolo; system("PAUSE"); cout<<"\nprezzo : "; return EXIT_SUCCESS; cin>>biblioteca[i].prezzo; }//fine cout<<"\npagine : "; cin>>biblioteca[i].numeroPagine; }