160 likes | 303 Views
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.
E N D
SADTabelle 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.
Esempio di tabella: elenco alunni • Chiave numero d’ordine • Valore cognome, nome, data di nascita
Esempio di tabella: elenco articoli • Chiave codice articolo • Valore nome, colore, giacienza
Esempio di tabella: gara sportiva • Chiave numero d’ordine • Valore nome, squadra, punteggio
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.
Il record Un record è un tipo di dato strutturato organizzato in campi. I campi di un record possono essere di tipo differente fra loro. Il record STUDENTE è composto dai campi CODICE, COGNOME, NOME, CLASSE , NASCITA
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! char 25 char 20 char 3 int 4
definizione dei campi del record definizone di un nuovo tipo di dato record stud presenza obbligatoria del ‘;’ definizione di una variabile del tipo record stud Implementazione del record in C++ struct stud { string cognome; string nome; int annoNascita; }; ATTENZIONE! La struct definisce il tracciato record, cioè il tipo di dato record! Bisogna creare una variabile di tipo stud. stud studente;
La visualizzazione del record prevede l’output dei singoli campi 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:cout<<“\ncognome = “<<studente.cognome; cout<<“\nnome = “<<studente.nome; cout<<“\nanno di nascita = “<<studente.annoNascita; ESERCIZIO:RECORD LIBROCodifica 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 struct stud { string cognome; string nome; int annoNascita; }; stud classe [20]; Facendo sempre riferimento al record stud, vogliamo definire 20 studenti di una stessa classe. Perciò scriveremo dimensione della tabella Tipo base Nome 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 6° record Campo nome del 7° record
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 struct stud { string cognome; string nome; int annoNascita; }; stud classe [20]; 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; } 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; }; 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; 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ù 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 10using namespace std; struct libro { string titolo; float prezzo; int numeroPagine; }; 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; cout<<"\nprezzo : "; cin>>biblioteca[i].prezzo; cout<<"\npagine : "; cin>>biblioteca[i].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; system("PAUSE"); return EXIT_SUCCESS;}//fine