TIPO DI DATO RECORD
Il tipo di dato record è stato introddotto inizialmente per
rappresentare registrazioni/schede (record in inglese) in un archivio, per
esempio le registrazioni/schede dell'anagrafe.
È un tipo molto comune, ed è presente praticamente in
tutti i linguaggi di programmazione, anche se a volte è
chiamato in modi diversi.
- valori
- I valori di un tipo di dato record sono gli elementi di un prodotto
cartesiano
A1 x ... x An, dove n è maggiore o uguale ad uno
e per i=1, ..., n Ai è un insieme.
Usualmente ogni componente di un tipo record, detta campo (field in
inglese),
è identificata da un nome.
Assumiamo che ID1, ..., IDn siano i nomi delle varie componenti.
- costanti
- Le costanti del tipo di dato, cioè i modi di descrivere le
ennuple seguono o uno stile posizionale, cioè si danno i valori dei
vari campi in ordine, oppure sono elenchi di coppie: nome del campo valore.
Comunque molti linguaggi non offrono modi di rappresentare questi valori,
per esempio il Pascal.
-
operazioni
- In un tipo record esistono sola n operazioni: le n proiezioni del
prodotto cartesiano, dette selezione delle componenti.
Di solito sono indicate con il postfisso .IDi.
Per esempio (a1, ...,an).IDi ritorna ai.
Il tipo record in C
Nel linguaggio C i record sono detti strutture e si introducono
attraverso una dichiarazione di tipo
della forma
struct IDENTIFIER { TYPE1 IDENTIFIER1 ;
...
TYPEn IDENTIFIERn ;
} ;
- IDENTIFIER
- è il nome della struttura;
- IDENTIFIER1, ..., IDENTIFIERn
- sono i nomi dei campi della struttura, e TYPE1, ..., TYPEn
sono rispettivamente i loro tipi.
Dopo questa dichiarazione IDENTIFIER è il nome di un tipo
che può essere usato per dichiarare variabili, parametri di
funzioni o come componente di altri tipi strutturati.
Diverse componenti con lo stesso tipo possono essere dichiarate in modo
compatto da
TYPE IDENTIFIER1, ..., IDENTIFIERk;
invece che da
TYPE IDENTIFIER1;
...
TYPE IDENTIFIERk;
Le operazione di selezione delle componenti si indicano nel modo usuale.
È possibile inizializzare le variabili di tipo struct elencando i
valori delle componente in ordine, separati da virgole e racchiusi da
parentesi graffe.
ESEMPIO
- I numeri complessi
-
/*******************************************/
/* IL TIPO DI DATO NUMERI COMPLESSI */
/*******************************************/
struct COMPLEX { float Reale, Imm ; };
/*il tipo dei numeri complessi */
const COMPLEX i = { 0, 1 };
/*la costante i */
COMPLEX Somma_C(COMPLEX c1, COMPLEX c2)
/*somma di due numeri complessi */
{
COMPLEX sum;
sum.Reale = c1.Reale + c2.Reale;
sum.Imm = c1.Imm + c2.Imm;
return sum;
}
COMPLEX Prodotto_C(COMPLEX c1, COMPLEX c2)
/*prodotto di due numeri complessi */
{
COMPLEX prod;
prod.Reale = (c1.Reale * c2.Reale) - (c1.Imm * c2.Imm);
prod.Imm = (c2.Imm * c1.Reale) + (c2.Reale * c1.Imm);
return prod;
}
...
ESERCIZI
- Completare il tipo di dato dei numeri complessi con funzioni per
eseguire le altre operazioni rilevanti e per leggere e stampare tali valori.
Scrivere poi un piccolo main per controllare se tale realizzazione funziona.
- Dare una nuova realizzazione del tipo di dato numeri complessi, dove
il tipo, le costanti e le operazioni hanno esattamente gli stessi nomi di
prima, ma
dove i numeri complessi sono realizzati usando le coordinate polari.
Controllare questa nuova realizzazione usando lo stesso main definito
nell'esercizio 1.
- Dare una terza realizzazione del tipo di dato complessi non
utilizzando le strutture del C, ma gli altri tipi di dato del linguaggio,
dove
il tipo, le costanti e le operazioni hanno esattamente gli stessi nomi
che nei casi precedenti.
Controllare questa nuova realizzazione usando lo stesso main definito
nell'esercizio 1.
-
Definire un tipo di dato per rappresentare le date, nella forma giorno,
mese ed anno, usando le strutture del C.
Le operazioni dovranno comprendere Domani, Ieri, Precede, Segue, lettura e
stampa in vari formati.
Discutere se avete il problema dell'anno 2000.
In caso affermativo, date un'atra implementazione senza il problema,
altrimenti datene un'altra
con il problema.
-
Definire un tipo di dato usando le strutture del C per rappresentare delle
schede anagrafiche, che contengono nome, cognome, data di nascita, sesso
titolo di studio, ed indirizzo.