Ad eccezzione dei tipi int64 , qword e Real tutti i tipi base sono
ordinali.
I tipi ordinal hanno le caratteristiche seguenti :
1.
I tipi ordinal definiscono insiemi ordinati di valori , ovvero in una
variabile di tipo ordinal è possibile contare i valori in essa contenuti
uno ad uno ed in uno specifico ordine.
Questa caratteristica permette l'uso delle funzioni
Inc : incrementa la variabile
Ord : restituisce l'ordinalità di un valore
Dec : decrementa la variabile
2.
I valori ordinal sono caratterizzati da un valore minimo possibile.
Infatti tentando di applicare la funzione Pred(precedente) sul valore
più piccolo possibile verrà generato un errore di range se il
range check è abilitato.
3.
I valori ordinal sono caratterizzati da un valore massimo possibile.
Infatti tentando di applicare la funzione Succ(successivo) sul valore
più frande possibile verrà generato un errore di range se il
range check è abilitato.
Integers
Sotto vengono riportati i tipi di interi predefiniti :
Integer
ShortInt
SmallInt
LongInt
LongWord
Int64
Byte
Word
Cardinal
QWord
Boolean
ByteBool
LongBool
Char
Nella tabella che segue vengono riportati gli interi predefiniti nel
Free Pascal e i loro range e dimensione.
| Tipo |
Range |
Dimensione in Byte |
| Byte |
0.. 255 |
1 |
| ShortInt |
-128..127 |
1 |
| SmallInt |
-32768..32767 |
2 |
| Word |
0.. 65535 |
2 |
| Integer |
per entrambi SmallInt , longint o int64 |
2,4 o 8 |
| Cardina |
per entrambi word , longword o qword |
2,4 o 8 |
| Longint |
-2147483648.. 2147483647 |
4 |
| Longword |
0.. 4294967295 |
4 |
| Int64 |
-9223372036854775808.. 9223372036854775807 |
8 |
| QWord |
0.. 18446744073709551615 |
8 |
è da notare che i tipi QWord e Int64 non sono dei veri Ordinal e percio'
alcuni construtti del pascal potrebbero non funzionare con questi interi.
Nella modalità predefinita del Free Pascal gli Integer sono mappati
(equivalenti) come dei smallint.
I tipi Cardinal sono sempre mappati come dei longword.
La definizione dei Cardinal e integer può cambiare da
un'architettura ad un'altra e da una modalità del compilatore ad un'altra.
Il Free Pascal , nelle espressioni che contengono tipi diversi di interi ,
effettua automaticamente la loro conversione .
Boolean
Il Free Pascal supporta il tipo Booleano con i suoi due valori predefiniti
True e
False .
Questi sono gli unici due valori che possono essere assegnati ad una variabile
Boolean.
Sono anche supportati i tipi
ByteBool , WordBool e
LongBool.
Nella tabella che segue vengono riportati i tipi boolean predefiniti nel
Free Pascal e la loro dimensione.
| Nome |
Dimensione in byte |
TRUE |
| Boolean |
1 |
1 |
| ByteBool |
1 |
Tutti i valori diversi da zero |
| WordBool |
2 |
Tutti i valori diversi da zero |
| LongBool |
4 |
Tutti i valori diversi da zero |
Assumendo che la variabile B sia di tipo boolean le seguenti sono
assegnazioni valide :
B := True;
B := False;
B := 1<>2; {Il risultato è B := True }
I tipi Enumerated
Il tipo enumerated serve a definire insiemi ordinati di valori.
Il Free Pascal permette l'uso dei tipi enumerated sia in stile
Turbo Pascal
che nello stile del linguaggio
C .
Nello stile del linguagio
C è possibile assegnare un valore ad un
particolare elemento della lista di enumerazione.
Quando vengono utilizzati i tipi enumerati assegnati gli elementi devono
essere in ordine ascendente all'interno della lista o il compilatore
segnalerà un errore.
Le espressioni utilizzate in un elemento enumerato e assegnato devono essere
conosciute già al momento della compilazione.
Quelli che seguono sono tipi enumerati corretti :
Type
Direzioni = ( Nord,Est,Sud,Ovest);
In stile
C :
Type
EnumEsempio = (uno, due, tre , quaranta:=40, quarantuno);
Osservando l'esempio sopra si tenga presente che il valore ordinale
(usare la funzione Ord) di
tre è 3 quello di
quaranta è 40
e quello di
quarantuno è 41 perchè il compilatore fornisce
all'elemento che segue quello che ha avuto un'assegnazione il valore
dell'assegnazione incrementato di uno.
L'assegnazione che segue genera un'errore in aunto le assegnazioni non sono
in ordine ascendente :
Type
EnumEsempio = (uno, due, tre , quaranta:=40, trenta=30);
Per evitare l'errore è necessario mantenere nel corretto ordine le
assegnazioni degli elementi
quaranta e
trenta.
Quando vengono usati i tipi enumerati è necessario tenere a mente i seguenti
punti :
1.
Le funzioni
Pred e
Succ non possono essere utilizzate con questo
tipo di dato.
Il loro utilizza genera un errore di compilazione.
2.
I tipi
Enumerated vengono salvati usando una dimesione di default.
Questo comportamento può essere cambiato utilizzando la direttiva del
compilatore
{$PACKENUM n} che dice al compilatore il numero minimo
di byte da utilizzare per il tipo
Enumerated .
I tipi Subrange
Come dice il nome stesso, questi tipi identificano dei sottoinsiemi di
valori appartenenti ad un altro tipo ordinale che viene definito tipo
base.
Per definire un tipo subrange, si utilizza la seguente sintassi :
Type
DieciNumeri = 1..10;
definisce un tipo subrange di nome DieciNumeri che conterrà i
valori 1, 2, 3, 4, 5, 6, 7, 8, 9,10 .
-