Typy danych
Typy danych w Turbo Pascal
Typy proste
Typy porządkowe
Typ wyliczeniowy
Typy całkowite
Typy logiczne
Typ znakowy
Typy okrojone
Typy rzeczywiste
Typy łańcuchowe
Typy strukturalne
Typy tablicowe
Typ rekordowy
Typ zbiorowy
Typ plikowy
Typy wskaźnikowe
Typy proceduralne
Typ obiektowy
Typy proste w języku Turbo
Pascal
Typy proste są podstawowymi typami
języka Turbo Pascal i za ich pomocą
określa się bardziej złożone struktury
danych. Wszystkie typy proste składają
się ze skończonego i uporządkowanego
zbioru wartości. Dzięki temu na
wartościach tych typów możemy m.in.
wykonywać operacje porównań.
Typy porządkowe w języku
Turbo Pascal
Typami porządkowymi nazywamy wszystkie typy
proste z wyjątkiem typów rzeczywistych.
Wyróżnienie to jest spowodowane faktem, że typy
rzeczywiste często nie mogą występować w
kontekście dozwolonym dla innych typów prostych.
Dla wartości każdego typu porządkowego są
określone wartości poprzednie i następne (z
wyjątkiem wartości krańcowych). Do typów
porządkowych zaliczamy:
Typ wyliczeniowy
Typy całkowite
Typy logiczne
Typ znakowy
Typy okrojone
Typ wyliczeniowy
Typ wyliczeniowy stosuje się zwykle dla zbiorów o
niewielkiej liczbie elementów, na których nie wykonuje się
operacji arytmetycznych. Definicja jednego typu
wyliczeniowego jest następująca:
TYPE identyfikator_typu = (lista_identyfikatorów);
Elementy typu wyliczeniowego są uporządkowane zgodnie
z kolejnością ich wyliczenia w definicji typu i posiadają
liczby porządkowe odpowiednio 0,1,2 itd.
Przyklady:
TYPE Uczniowie = (Antek, Franek, Zenek); {Antek ma 0,
Franek ma 1, a Zenek 2}
P_roku = (wiosna, lato, jesien, zima);
Typy całkowite
Typy całkowite są w języku Pascal predefiniowane i nie
wymagają opisu w programie. Wszystkie typy całkowite są
podzbiorami zbioru liczb całkowitych. Wśród typów
całkowitych wyróżniamy:
ShortInt, przedział od -128 do 127
Byte, przedział od 0 do 255
Integer, przedział od -32768 do 32767
Word, przedział od 0 do 65535
LongInt, przedział od -2147483648 do 2147483647
Przyklad, przypuśćmy, że zdefiniowaliśmy nowy typ:
TYPE Liczba = Integer;
W takim razie poniższa deklaracja :
var i,j: Liczba;
jest równoważna deklaracji
var i,j: Integer;
Typy logiczne
Standardowymi typami logicznymi są typy
Boolean,
ByteBool,
WordBool
LongBool.
Wartości typów logicznych są oznaczone za
pomocą dwu predefiniowanych literałów (stałych):
True i False, oznaczających odpowiednio wartości
logiczne fałsz i prawda, przy czym w sensie
uporządkowania stała False poprzedza stałą True.
Liczbami porządkowymi elementów typu Boolean
są tylko 0 (False) i 1 (True). Elemanty pozostałych
typów logicznych mogą posiadać inne (wyższe)
liczby porządkowe.
Typ znakowy
Do oznaczenia typu znakowego
służy predefiniowany identyfikator
Char. Elementami typu znakowego
są znaki ASCII, z których każdy jest
pamiętany w jednym bajcie pamięci.
Typy okrojone
Typy okrojone służą do ograniczania
zakresów wartości dowolnego z dotychczas
opisanych typów porządkowych. Definicja
jednego typu okrojonego ma postać:
TYPE identyfikator_typu = stała .. stała;
Pierwsza stała podaje ograniczenie dolne i
nie może być większa od drugiej -
ograniczenia górnego. Stałe te muszą być
tego samego typu porządkowego.
Przyklad:
TYPE Litery = 'A' .. 'Z';
Typy rzeczywiste
Do typów prostych należą także standardowe
typy rzeczywiste, które jednak nie są typami
porządkowymi. Każdy z dostępnych typów
rzeczywistych jest dyskretnym i skończonym
podzbiorem zbioru liczb rzeczywistych.
Dostępnych jest pięć standardowych typów
rzeczywistych o następujących
predefiniowanych identyfikatorach:
Real, elementy zajmują po 6 bajtów pamięci
Single, typ o pojedyńczej długości (4 bajty pamięci)
Double, typ o podwójnej długości (8 bajtów pamięci)
Extended, typ o rozszerzonej długości (10 bajtów pamięci)
Comp, elementy to liczby całkowite z przedziału
od -2
63
+1 do 2
63
-1
Typy łańcuchowe
Typy łańcuchowe służą do reprezentowania ciągu
znaków, w tym niewidocznego znaku spacji.
Elementami typu łańcuchowego są łańcuchy o
długości od 0 do długości podanej w definicji typu
łańcuchowego. Typ ten definiuje się następująco:
TYPE identyfikator_typu = String[rozmiar];
lub
TYPE identyfikator_typu = String;
gdzie rozmiar jest liczbą typu Byte.
Brak wyspecyfikowania rozmiaru powoduje domyślne
przyjęcie długości 255 znaków (warość maksymalna).
Przykład:
TYPE Nazwisko = String[20];
Typy strukturalne
Typy strukturalne stosuje się do opisu
obiektów złożonych, przy czym dany obiekt
możemy opisać na kilka różnych sposobów.
Każdy z typów strukturalnych definiowany
jest przez podanie typów składowych i
metody strukturalizacji, która zarazem
określa sposób dostępu do elementów
składowych. W ogólności definicja
pojedynczego typu strukturalnego ma
postać:
TYPE Identyikator_typu =
Opis_typu_strukturalnego;
przy czym opis typu
strukturalnego może być opisem typu.
Typy tablicowe
Typ tablicowy, a konkretnie tablica składa się z ustalonej liczby
elementów tego samego typu, zwanego typem składowym, który
może być zarówno typem prostym lub łańcuchowym, jak i typem
strukturalnym. Za pomocą tablic są reprezentowane regularne
układy danych, np. wektory i macierze. Dostęp do poszczególnych
elementów tablic uzyskuje się za pomocą indeksowania. Indeksem
może być dowolne wyrażenie, którego wartość jest zgodna w sensie
przypisania z typem indeksowym. Dopuszczalny zakres indeksów
jest podany w definicji typu tablicowego. Definicja pojedynczego
typu tablicowego ma postać:
TYPE Identyfikator_typu = array[typy_indeksowe] of typ_składowy;
gdzie typy indeksowe są opisami typu porządkowego (z wyjątkiem
typu LongInt), przy czym poszczególne opisy oddziela się
przecinkami. Typ składowy oznacza dowolny typ.
Przykłady:
TYPE Macierz = array[1..20,1..30] of Real;
Tablica = array[Boolean,1..20,znak] of Char;