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;
}
Scarica

Tabelle