Typy i zbiory





Typy
W Pascalu mamy do dyspozycji kilka typów standardowych (string, integer, itp.). Możliwe jest także definiowanie własnych typów. Podobnie jak zmienne, typ może być np.: typu integer (wiem, że to trochę głupio brzmi), typu okrojonego, tablicowego lub (o czym zaraz będzie mowa) typu wyliczeniowego, zbiorowego. Przykłady deklaracji
type calk=integer;
sto=1..100;
tabl=array[1..10] of integer;
Żeby można było wykorzystać dane typy w programie trzeba zadeklarować zmienne dane typu:
var x:calk;
z:sto;
q:tabl;

Ciekawą rzeczą są typy wyliczeniowe. Deklarujemy je w taki sposób: type dni= (poniedziałek, wtorek, sroda, czwartek, piatek, sobota, niedziela) Jeszcze ciekawsze jest to, że na bazie takiego typu możemy zdefiniować typy okrojone:
type dni= (poniedziałek, wtorek, sroda, czwartek, piatek, sobota, niedziela); weekend= sobota..niedziela;
Niestety wartości typów wyliczeniowych nie są zamknięte w pierścień i nie można zdefiniować typu okrojonego typ= sobota..poniedziałek;

Teraz, żeby wykorzystać typ "dni" musimy zadeklarować odpowiednią zmienną: var dzien:dni;
Przypisanie wartości do takiej zmiennej wygląda tak:
dzien:=wtorek {wielkość liter nie ma znaczenia i możemy wpisać np.: WtOReK }

Elementy w takim typie są uporządkowane, więc możemy za pomocą funkcji ord pobrać numer danego elementu
dzien:=wtorek;
ord(dzien) {zwroci 1, bo poniedziałek jest elementem nr. 0} Ponadto funkcja succ zwróci następny element, a pred- poprzedni (o ile te elemtenty istnieją)

Zbiory
W Pascalu można definiować zbiory składające się z różnych elementów. Za pomocą operator in można sprawdzać przynależność danego elementu do zbioru:
if x in [10,30,230] then x:=0;
Czyli jeżeli wartość "x" jest w zbiorze składającym się z liczb 10, 30,230 to przyjmuje wartość 0;
Dozwolone jest także użycie np. takigo zbioru:
['a'..'z', 'A'..'Z']
Czyli zbioru liter.


Ponadto można deklarować typy typu zbiorowego.
Aby to zrobić należy najpierw zdefiniować typ bazowy:
type dni= (poniedziałek, wtorek, sroda, czwartek, piatek, sobota, niedziela);
A następnie, zbiorowy:
zbior_dni: set of dni
Możliwe jest także zadeklarowaniu typu zbiorowego w oparciu o typ standardowy:
liczbyc: set of integer;
Kolejnym krokiem jest deklaracja odpowiedniej zmiennej var q: zbior_dni;
Przypisanie wartości danemu zbiorowy odbywa się tak:
q:=[poniedzialek];
Do tego zbioru można dodać kolejny element:
q:=q+[wtorek]; {teraz w zbiorze q będzie poniedziałek i wtorek}
lub odjąć:
q:=q-[poniedziałek];
Zbiór może być pusty:
q:=[ ];
Zbiory można ze sobą porównywać za pomocą operatorów ">", "<", "<=", ">=", "=", "<>".
Oprócz przedstawionej już różnicy i sumy zbiorów, można jeszcze otrzymać część wspólną zbiorów:
q:=[poniedzialek, sroda..piatek, niedziela];
q:=q* [poniedzialek, sroda sobota]; {częścią wspólną będzie poniedziałek i sroda}

Ponadto można sprawdzić czy w danym zbiorze jest dany element:
if poniedziałek in q then cos_tam;

W Turbo Pascalu i w Delphi istnieją procedury:
include(nazwa_zbioru, nazwa_elementu); {dodaje element do zbioru}
exclude(nazwa_zbioru, nazwa_elementu); {odejmuje element ze zbioru}