Pascal/Gestione avanzata dei dati: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Update syntaxhighlight tags - remove use of deprecated <source> tags
 
Riga 6:
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'''''.
<br/>La sintassi è
<sourcesyntaxhighlight lang=pascal>
type
nome: valori_possibili;
</syntaxhighlight>
</source>
che definisce il tipo di dato ''nome''.
<br/>Per indicare quindi che una variabile è del tipo ''nome'' si usa la sintassi:
<sourcesyntaxhighlight lang=pascal>
var
variabile:nome;
</syntaxhighlight>
</source>
 
=== 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:
<sourcesyntaxhighlight lang=pascal>
type nome:(elemento_1, elemento_2,...,elemento_n);
</syntaxhighlight>
</source>
 
dove elemento_1,elemento_2,...,elemento_n sono i possibile valori che possono assumere le variabili del tipo di dato ''nome'' elencati in ordine.
<br/>Per fare un esempio, possiamo definire un tipo:
 
<sourcesyntaxhighlight lang=pascal>
type mesi: (gen, feb, mar, apr, mag, giu, lug, ago, sett, ott, nov, dic);
</syntaxhighlight>
</source>
 
e dichiarare due variabili
 
<sourcesyntaxhighlight lang=pascal>
var mese_di_nascita_luigi, mese_di_nascita_gianni:mesi;
</syntaxhighlight>
</source>
 
Se nel corso del programma poniamo
 
<sourcesyntaxhighlight lang=pascal>
mese_di_nascita_luigi:= feb;
mese_di_nascita_gianni:= ago;
</syntaxhighlight>
</source>
 
avremo che: l'istruzione <code>writeln(mese_di_nascita_luigi);</code> stampa sullo schermo ''feb''; l'espressione <code>mese_di_nascita_luigi < mese_di_nascita_gianni</code> restituisce TRUE, in quanto feb precede ago nella lista dei mesi indicata nella dichiarazione. Allo stesso modo <code>giu > set</code> restituisce invece FALSE.
Riga 47:
=== Subrange ===
I '''''subrange''''' sono tipi di dati che sono definiti come sottoinsiemi di altri tipi. Ad esempio:
<sourcesyntaxhighlight lang=pascal>
type
cifra: 0..9
mese_primaverile: mar..giu;
lettera: 'a'..'z';
</syntaxhighlight>
</source>
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
Riga 59:
 
Una volta definito, lo possiamo utilizzare:
<sourcesyntaxhighlight lang=pascal>
var mese: mese_primaverile;
</syntaxhighlight>
</source>
In questo caso ad esempio si possono effettuare dichiarazioni come <code>mese := mar;</code> ma non <code>mese := ott;</code>.
 
Riga 68:
 
Vediamo come dichiarare gli insiemi con un esempio:
<sourcesyntaxhighlight lang=pascal>
var giorni_liberi: SET OF integer;
</syntaxhighlight>
</source>
Possiamo altrimenti scrivere:
<sourcesyntaxhighlight lang=pascal>
type giorni_del_mese: SET OF integer;
var giorni_liberi : giorni_del_mese;
</syntaxhighlight>
</source>
Ma il risultato è lo stesso.
Per inizializzare un insieme usiamo la sintassi:
<sourcesyntaxhighlight lang=pascal>
giorni_liberi := [1,3..7, 10..25, 29];
giorni_liberi := []; {insieme vuoto}
</syntaxhighlight>
</source>
Si noti l'uso di un ''range'' nell'assegnazione. La sintassi generale è quindi per un insieme <code>[el1, el2, el3..el7, ...]</code>.
 
=== 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.
<sourcesyntaxhighlight lang=pascal>
[1, 3, 4] + [3, 9..11] = [1, 3, 4, 9..11]
[5, 7, 19, 22] - [22] = [5, 7, 19]
Riga 94:
[5, 7, 19, 22] * [22] = [22]
[5, 7, 19, 22] * [23] = []
</syntaxhighlight>
</source>
Per verificare se un elemento è in un insieme, usiamo l'operatore IN:
<sourcesyntaxhighlight lang=pascal>
if 1 in giorni_liberi then
...
</syntaxhighlight>
</source>
 
È possibile anche confrontare gli insiemi: