Typy zmiennych w języku Turbo Paskal
Typ zmiennej określa jej wewnętrzną reprezentację w pamięci komputera (liczbę bajtów zajmowanych przez zmienną, zakres dopuszczalnych wartości i dokładność reprezentacji) oraz zestaw operacji, które można na niej wykonywać. Z wyjątkiem typu string, wszystkie one należą do tzw. typów prostych (nie dających się rozbić na prostsze typy).
Najważniejsze typy dostępne w Turbo Pascalu
Nazwa | Znaczenie | Zakres wartości | Przykład |
---|---|---|---|
integer | liczba całkowita ze znakiem | -32768..+32767 | -14574 |
real | liczba rzeczywista | 2.9*10-39..1.7*1038 | 1.23245e17 |
char | znak | znaki o kodach 0..255 | 'a' |
string | napis (łańcuch, ciąg znaków) | ciąg do 255 znaków | 'Napis' |
boolean | wartość logiczna | prawda (true) lub fałsz (false) | false |
word | słowo | 0..65535 | 56412 |
byte | bajt | 0..255 | 127 |
shortint | krótka liczba całkowita ze znakiem | -128..+127 | -13 |
longint | długa liczba całkowita ze znakiem | -2147483648..+2147483647 | -1986734234 |
single | krótka liczba rzeczywista | 1.5*10-45..3.4*1037 | 3.14e01 |
double | długa liczba rzeczywista | 5.0*10-324..1.7*10308 | -1.8e+234 |
extended | bardzo długa liczba rzeczywista | 3.4*10-4932..1.1*104932 | 4.5e2345 |
comp | bardzo długa liczba całkowita | -9.2*1018..9.2*1018 | 6e12 |
pointer | wskaźnik | 0000h:0000h..FFFFh:FFFFh | $1234:ABCD |
Cztery pierwsze typy wymienione w tabeli stanowią podstawowy zestaw, którym posługujemy się podczas pisania programów. Typy całkowite (integer, word, shortint, byte, longint), typ znakowy (char) oraz logiczny (boolean) tworzą z kolei grupę tzw. typów porządkowych (ang. ordinal types), w ramach których określona jest relacja porządku (czyli kto przed kim, a kto po kim).
Typy całkowite używane są w programach do reprezentacji liczników, adresów i indeksów tablic oraz zawartości komórek pamięci (byte i word). Ze względu na specyficzną reprezentację wewnętrzną liczb całkowitych przekroczenie zakresu dopuszczalnego dla danego typu powoduje "przeskoczenie" na drugi koniec zakresu (np. dodanie 1 do 32767 da w wyniku -32768). Efekt ten zwykle nie jest sygnalizowany przez kompilator i może prowadzić do dość dziwacznego zachowania programów. Aby go uniknąć, można zastosować pojemniejszy typ (np. longint).
Drugą obszerną grupę tworzą typy rzeczywiste, przeznaczone do przechowywania wartości niecałkowitych i realizacji większości bardziej złożonych obliczeń matematycznych. W większości przypadków zadowalające rezultaty osiąga się przy użyciu liczb typu real, jednak dla poprawy dokładności, powiększenia zakresu wartości i przyspieszenia obliczeń warto odwołać się do jednego z pozostałych typów. Ich wykorzystanie wymaga zadeklarowania użycia w programie tzw. koprocesora arytmetycznego (specjalnego układu przeznaczonego do operowania na liczbach rzeczywistych, dostępnego jako oddzielny układ lub wbudowanego w procesory 486DX i "lepsze") albo tzw. emulatora, czyli specjalnego podprogramu "udającego" koprocesor. Aby było możliwe odwołanie się do koprocesora, należy włączyć opcję Numeric Processing - 8087/80287 w polu dialogowym Options-Compiler, zaś włączenie emulacji realizuje znajdująca się poniżej opcja Emulation. Alternatywą jest umieszczenie w programie tzw. dyrektyw kompilatora, mających odpowiednio postać {$N+} i {$E+}.
Typy znakowy i łańcuchowy wykorzystywane są do reprezentowania napisów i wszelkiej informacji "słownej". Typ boolean pozwala na przechowywanie wartości logicznych, wykorzystywanych do sterowania działaniem programu, zaś typ wskaźnikowy (pointer) używany jest w operacjach na zawartości pamięci komputera (nieco dziwny zapis $1234:ABCD oznacza adres komórki pamięci w postaci szesnastkowej, sygnalizowanej znakiem $).