TYPY STRUKTURALNE W PASCALU
Typy strukturalne w Pascalu reprezentują 4 rodzaje struktur: tablice, rekordy, zbiory i pliki. Ograniczeniem rozmiaru jest ok. 64 kB pamięci (65520 B).
Typ tablicowy składa się z ustalonej liczby elementów tego samego typu składowego (prosty lub łańcuchowy) albo strukturalny. Za pomocą tablic przedstawia się regularne struktury danych np. wektory czy macierze. Dostęp do elementów uzyskuje się za pomocą indeksowania, wyrażeniem zgodnym i będącym w zakresie zdefiniowanego typu tablicowego. Np.:
Type wektor =Array [0..100] Of Integer;
macierz2=Array [1..20] Of Array [1..50] Of Real;
macierz3=Array [1..10,1..20,1..30] Of Real;
tablica =Array [Boolean, 1..20,znak] Of Char; {=Array [Boolean] Of Array[1..20] Of Array [znak] Of Char;}
Typ rekordowy - rekordem w Pascalu nazywamy złożoną strukturę danych, której składowe, nazywane polami, mogą być różnych typów. Poszczególne pola mogą same być strukturami złożonymi. Definicja typu rekordowego określa dla każdego pola jego typ i identyfikator. Rozpoczyna się słowem kluczowym record, po którym następują deklaracje pól, kończy się słowem kluczowym end; Kolejne deklaracje oddziela się średnikami. Ostatnia z nich może być wariantowa (składa się z kluczowego słowa case wyróżnik of wykaz-wariantów). Przykłady zmiennych rekordowych:
Type data=Record
rok : Integer;
miesiac : 1..12; {*typy okrojone}
dzien : 1..31
end;{data}
posiadanie={posiada,nie_posiada};{typ porządkowy}
dana=Record
nazwisko:String [20];
imie :String [15];
data_ur :data;
adres :String[30];
Case dzieci:posiadanie Of
posiada :(data_ur_dziecka:Array[1..10] Of data;
nie_posiada:(znak:Char)
End;{dana}
Typ zbiorowy jest zbiorem potęgowym danego typu rzeczywistego, tzn. jest zbiorem wszystkich podzbiorów tego typu w tym także typu pustego. Definicja ma postać: type identyfikator-typu = Set Of typ-porządkowy; Liczba elementów typu porządkowego, będącego typem bazowym w takiej definicji nie może przekraczać 256, przy czym ich liczby porządkowe muszą należeć do przedziału 0..255. Wartości typu zbiorowego podaje się przez wypisanie listy elementów danego zbioru oddzielonych przecinkami w nawiasach kwadratowych. Zapis [] oznacza zbiór pusty. Np.:
type
dzien_pracy=Set Of [poniedzialek, wtorek, sroda, czwartek, piatek];
znaki =Set Of Char;
male_litery=Set Of 'a'..'z';
miesiac =[sty, lut, mar, kwi, maj, cze, lip, sie, wrz,
paz, lis, gru];
z_mies =Set Of miesiac;
Var nazwa_mies : miesiac;
z_nazw : z_mies;
Typ plikowy jest ciągiem elementów tego samego typu, liczba jego składowych jest zmienna. Reprezentuje fizyczny zbiór danych o dostępie sekwencyjnym. Oznacza to, że aktualnie mamy dostęp do 1 elementu, a do innych można dotrzeć po wykonaniu odpowiednich operacji. Zależy od przebiegu programu, skojarzenia pliku z fizycznym zbiorem danych (na dysku, wyprowadzanych na drukarkę itp). Definicja:
type id_pliku = File Of typ-elementow; id_pliku = File;
typ-elementów oznacza identyfikator dowolnego typu prostego, opis typu porządkowego, strukturalnego lub wskaźnikowego. Istnieje predefiniowany plik tekstowy o nazwie Text, którego elementami są wiersze podzielone na znaki. Na końcu wiersza wstawiona jest para znaków CR/LF (carriage return, line feed = powrót karetki, zmiana linii), koniec pliku znaczy znak ^Z. Pliki tekstowe służą do obsługi dostępnych zbiorów fizycznych przy pomocy klawiatury, monitora, drukarki. Np.:
type dane =File Of Integer;
wyniki =File Of Real;
complex=Record
re, im : Real
End;
var daty : File Of data; {patrz wcześniej}
zesp : File Of complex;
Typy wskaźnikowe - w przeciwieństwie do wcześniej omówionych typów prostych i strukturalnych, które istnieją przez cały czas wykonywania tej części programu, gdzie zostały zadeklarowane (zmienne statyczne) - istnieją zmienne dynamiczne reprezentujące obiekty, dla których pamięć jest przydzielana i zwalniana na wyraźne żądanie. Zmienne te nie posiadają identyfikatorów, a odwołanie do nich następuje przy pomocy wskaźnika. Wartościami wskaźników są elementy typu wskaźnikowego, określające adresy zmiennych dynamicznych. Definicja: Type id_typu=^id_typu_bazowego; gdzie ostatnia nazwa określa typ, którego dane będą wskazywane przez zmienne definiowanego typu wskaźnikowego. Np.:
Type wskaznik=^zapis;
zapis=Rekord
naglowek:Char; tekst:String[30]; numer:Integer
End;{zapis}
Var karta:zapis; {zmienna, która mo*e przybierać wartości typu zapis}
Istnieje predefiniowany typ Pointer, którego zmienne nie wskazują konkretnego typu, są jednak zgodne z dowolnym innym typem wskaźnikowym. Słowo kluczowe nil - oznacza stałą tego typu nie określającą żadnego adresu (adres pusty).
1