# Pascal/Gestione avanzata dei dati

Pascal
Copertina Tutti i moduli · Sviluppo
    Copertina
* IntroduzionePascal/Introduzione
* AlgoritmiPascal/Algoritmi
* VariabiliPascal/Variabili
* Input e outputPascal/Input e Output
* Tipi di dati e operatoriPascal/Tipi di dati
* Gestione avanzata dei datiPascal/Gestione avanzata dei dati
* CommentiPascal/Commenti
* Librerie e funzioni predefinitePascal/Librerie e funzioni predefinite
* Istruzioni di controlloPascal/Istruzioni di controllo
* ArrayPascal/Array
* Metodo top-down, procedure e funzioniPascal/Metodo top-down, procedure e funzioni
* Programmazione ad oggettiPascal/Programmazione ad oggetti
** Concetti fondamentaliPascal/Concetti fondamentali
** I modificatori public, private e protectedPascal/I modificatori public, private e protected
** Costruttori e distruttoriPascal/Costruttori e distruttori
** Override, metodi virtuali e classi astrattePascal/Override, metodi virtuali e classi astratte
** Il Turbo VisionPascal/Il Turbo Vision
* StrumentiPascal/Strumenti
* EserciziPascal/Esercizi
Modifica il sommario
In questo capitolo tratteremo tipi di dati più complessi e che utilizzeremo meno frequentemente

## Tipi di dati definiti dall'utente

Abbiamo già visto prima che per dichiarare una variabile si deve specificare un tipo (ad esempio, integer o real) per indicare quali valori può assumere. In alcuni casi può essere utile ricorrere a tipi di dati non predefiniti, ma creati dall'utente: si può ricorrere quindi ad una dichiarazione di tipo con la parola riservata type. La sintassi è
che definisce il tipo di dato nome. Per indicare quindi che una variabile è del tipo nome si usa la sintassi:

### Tipi enumerativi

Il più semplice tipo di dichiarazione type è quella dei tipi enumerativi, che consentono cioè un numero ristretto di valori, definiti singolarmente dall'utente:
dove elemento_1,elemento_2,...,elemento_n sono i possibile valori che possono assumere le variabili del tipo di dato nome elencati in ordine. Per fare un esempio, possiamo definire un tipo:
e dichiarare due variabili
Se nel corso del programma poniamo
avremo che: l'istruzione writeln(mese_di_nascita_luigi); stampa sullo schermo feb; l'espressione mese_di_nascita_luigi < mese_di_nascita_gianni restituisce TRUE, in quanto feb precede ago nella lista dei mesi indicata nella dichiarazione. Allo stesso modo giu > set restituisce invece FALSE.

### Subrange

I subrange sono tipi di dati che sono definiti come sottoinsiemi di altri tipi. Ad esempio:
Abbiamo definito tre dati subrange: il primo tipo permette tutti i numeri dallo 0 al 9, il secondo tutti i mesi primaverili (da marzo a giugno) e il terzo tutti i caratteri da "a" a "z". Come si può intuire:
* una definizione di un subrange è costituita da un limite inferiore e uno superiore
* un subrange non è valido se il limite inferiore è maggiore o uguale a quello superiore (ad esempio non è valido il subrange 9..5)
* i due limiti devono essere dello stesso tipo di dato (interi, char, o anche definiti dall'utente, come nel caso di mese_primaverile che è un subrange del tipo mesi definito in precedenza)
Una volta definito, lo possiamo utilizzare:
In questo caso ad esempio si possono effettuare dichiarazioni come mese := mar; ma non mese := ott;.

## Insiemi

Vediamo ora un altro tipo di dato non molto utilizzato, ma che può risultare comodo in alcune occasioni: gli insiemi, che in Pascal sono molto simili al concetto di insieme in matematica; dato un insieme A di oggetti di un insieme di dati B, ogni oggetto di B appartiene o non appartiene ad A.
Vediamo come dichiarare gli insiemi con un esempio:
Possiamo altrimenti scrivere:
Ma il risultato è lo stesso. Per inizializzare un insieme usiamo la sintassi:
Si noti l'uso di un range nell'assegnazione. La sintassi generale è quindi per un insieme [el1, el2, el3..el7, ...].

### Operazioni con gli insiemi

Le operazioni fattibili con gli insiemi sono le stesse in matematica: ad esempio, "+" corrisponde all'unione, "-" alla differenza e "*" all'intersezione.
Per verificare se un elemento è in un insieme, usiamo l'operatore IN:
È possibile anche confrontare gli insiemi:
* =: restituisce true se i due insiemi sono uguali;
* <>: restituisce true se i due insiemi sono diversi;
* <=: restituisce true se il primo insieme è sottoinsieme del secondo (il secondo contiene il primo);
* >=: contrario di <=