Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni6 pagine

Record

Il documento tratta dei record e delle struct in C++, evidenziando le loro caratteristiche come strutture dati eterogenee. Vengono descritti la definizione, la dichiarazione e le operazioni fondamentali sui record, inclusi accesso ai campi, assegnazione e confronti relazionali. Inoltre, si approfondiscono le strutture dati composte, come record nidificati e vettori di record, con un confronto tra vettori, matrici e record.

Caricato da

Angela celentano
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni6 pagine

Record

Il documento tratta dei record e delle struct in C++, evidenziando le loro caratteristiche come strutture dati eterogenee. Vengono descritti la definizione, la dichiarazione e le operazioni fondamentali sui record, inclusi accesso ai campi, assegnazione e confronti relazionali. Inoltre, si approfondiscono le strutture dati composte, come record nidificati e vettori di record, con un confronto tra vettori, matrici e record.

Caricato da

Angela celentano
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

utfcode

[Link] 3.10 UTF-8 input encoding 13.06.2000


scanner for code UTF-8 installed.

1
I Record e le Struct in C++
Strutture Dati Eterogenee e Operazioni Fondamentali

Appunti di Informatica
21 luglio 2026

Indice
1 I Record: Concetto Generale 3

2 Definizione e Dichiarazione di una struct 3


2.1 Sintassi di Definizione del Tipo . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Dichiarazione e Inizializzazione delle Variabili . . . . . . . . . . . . . . . . 3

3 Operazioni sui Record 4


3.1 1. Accesso ai Campi (Operatore Punto .) . . . . . . . . . . . . . . . . . . 4
3.2 2. Assegnazione Tra Record del Medesimo Tipo . . . . . . . . . . . . . . . 4
3.3 3. Confronti Relazionali (Uguaglianza/Disuguaglianza) . . . . . . . . . . . 4

4 Strutture Dati Composte con Record 5


4.1 1. Record Nidificati (Struct dentro Struct) . . . . . . . . . . . . . . . . . . 5
4.2 2. Vettori di Record (Array di Struct) . . . . . . . . . . . . . . . . . . . . 5

5 Tabella di Confronto: Vettori, Matrici e Record 6

2
1 I Record: Concetto Generale
A differenza dei vettori e delle matrici (che sono strutture dati omogenee), un **record**
è una struttura dati **eterogenea**, composta da un insieme finito di elementi presi anche
da tipi di dato differenti.

• Campi: I singoli elementi che costituiscono un record sono detti campi o membri.

• Identificazione: Ogni campo è identificato da un proprio **nome (identificatore)**


anziché da un indice numerico.

• Allocazione: I campi occupano blocchi contigui o allineati di memoria, con una


dimensione totale pari alla somma delle dimensioni dei singoli campi (più eventuale
padding di allineamento del compilatore).

Matematicamente, un tipo di dato Record R composto da k campi dei tipi T1 , T2 , . . . , Tk


rappresenta il **prodotto cartesiano** dei tipi dei suoi componenti:

R = T1 × T2 × · · · × Tk
Un’istanza r ∈ R è una k-upla ordinata:

r = (v1 , v2 , . . . , vk ) con vi ∈ Ti

2 Definizione e Dichiarazione di una struct


In linguaggio C++, un record viene implementato tramite la parola chiave struct.

2.1 Sintassi di Definizione del Tipo


La definizione del nuovo tipo di dato astratto non alloca memoria; descrive solo il ”mo-
dello” o la ”sagoma” della struttura.
1 struct Persona {
2 string nome ;
3 string cognome ;
4 int eta ;
5 double altezza ; // in metri
6 };
Listing 1: Definizione di un tipo di dato Persona

2.2 Dichiarazione e Inizializzazione delle Variabili


Una volta definito il tipo Persona, è possibile dichiarare ed eventualmente inizializzare
variabili di quel tipo (allocazione di memoria effettiva):

3
1 // Dichiarazione semplice
2 Persona studente1 ;
3

4 // Dichiarazione con inizializzazione posizionale ( C ++11


aggregate initialization )
5 Persona studente2 = { " Mario " , " Rossi " , 18 , 1.75};
Listing 2: Dichiarazione e inizializzazione di istanze

3 Operazioni sui Record


3.1 1. Accesso ai Campi (Operatore Punto .)
L’accesso diretto ad un singolo campo di una struct avviene tramite l’**operatore di
selezione diretta** (punto .).

[Link]

1 // Assegnazione singola
2 studente1 . nome = " Giulia " ;
3 studente1 . cognome = " Bianchi " ;
4 studente1 . eta = 17;
5

6 // Input e Stampa diretta di un campo


7 cout << " Inserisci l ’ altezza di " << studente1 . nome << " : " ;
8 cin >> studente1 . altezza ;
9

10 cout << " Studente : " << studente1 . cognome << " " << studente1 .
nome << endl ;
Listing 3: Lettura e scrittura dei campi

3.2 2. Assegnazione Tra Record del Medesimo Tipo


È possibile assegnare direttamente un record a un altro dello stesso tipo. Il compilatore
esegue una copia **bit a bit** (o campo per campo) di tutti i membri.

R1 ← R2 ⇐⇒ ∀i, R1 .campoi = R2 .campoi

1 Persona studente3 ;
2 studente3 = studente2 ; // Copia automatica di tutti i campi
Listing 4: Assegnazione diretta di record

3.3 3. Confronti Relazionali (Uguaglianza/Disuguaglianza)


Nota importante: In C++ standard **non** sono definiti automaticamente gli opera-
tori di confronto (==, !=, <) tra due struct. I confronti devono essere effettuati campo
per campo o sovraccaricando gli operatori (operator overloading).

4
1 // Verifica se due studenti hanno lo stesso cognome e nome
2 if ( studente1 . cognome == studente2 . cognome && studente1 . nome ==
studente2 . nome ) {
3 cout << " I due studenti sono omonimi . " << endl ;
4 }
Listing 5: Confronto manuale tra record

4 Strutture Dati Composte con Record


4.1 1. Record Nidificati (Struct dentro Struct)
Un campo di un record può essere a sua volta un altro record.
1 struct Data {
2 int giorno ;
3 int mese ;
4 int anno ;
5 };
6

7 struct Studente {
8 string matricola ;
9 Persona anagrafica ; // Campo di tipo Persona
10 Data dataNascita ; // Campo di tipo Data
11 };
12

13 // Accesso a campi annidati


14 Studente s ;
15 s . anagrafica . nome = " Laura " ;
16 s . dataNascita . anno = 2005;
Listing 6: Uso di record nidificati

4.2 2. Vettori di Record (Array di Struct)


L’unione di vettori e record permette di rappresentare collezioni di entità complesse
(equivalente ad una tabella di database).
1 const int MAX = 100;
2 Studente classe [ MAX ];
3 int N = 30;
4

5 // Scansione e azzeramento dell ’ anno di nascita per tutti gli


studenti
6 for ( int i = 0; i < N ; i ++) {
7 cout << " Matricola studente " << i << " : " << classe [ i ].
matricola << endl ;
8 }
Listing 7: Gestione di un vettore di record

5
5 Tabella di Confronto: Vettori, Matrici e Record

Caratteristica Vettore Matrice Record (struct)


Omogeneità Omogenea Omogenea Eterogenea
Indicizzazione Un indice (i) Due indici (i, j) Nome del campo
Acceso al singolo elemento O(1) O(1) O(1)
Assegnazione diretta No (richiede ciclo) No (richiede ciclo) P Sı̀ (A = B)
Dimensione fisica N × size(T ) R · C × size(T ) size(Ti ) + padding

Tabella 1: Confronto tra le principali strutture dati lineari e composte.

Potrebbero piacerti anche