Stránky neboli dlhú dobu aktualizované. Môžu obsahovať nepresné alebo neaktuálne informácie.
Hľadanie
Rozšírené vyhľadávanie
TOP 7 - stránky
Napaľovacie programy - 108 203x
Free Pascal - Úvod - 65 907x
Lazarus - Kreslenie - 47 467x
Free Pascal - Začiatky - 44 755x
Free Pascal - Podmienky - 37 111x
Free Pascal - Cykly - 36 359x
Internetové prehliadače - 36 218x
Nové v diskusii
Free Pascal - Cykly - štvrtok 31.3.
Lazarus - Začíname - piatok 25.3.
Anketa - streda 2.3.
Navigácia: Programovanie > Free Pascal - Vymenovaný typ

Free Pascal - Vymenovaný typ

Vymenovaný typ (enumerated type) je taký, kde určíme všetky možné hodnoty, aké môže premenná daného typu nadobudnúť. Táto premenná bude obsahovať vždy len jednu z určených hodnôt.

Semafor

Jednoduchý príklad je obyčajný cestný semafor. Môže nadobúdať tri rôzne hodnoty - červená, oranžová, zelená. Najskôr si vytvoríme typ TSemafor. Všetky prijateľné hodnoty vymenujeme v zátvorke, oddeľujeme ich čiarkami. Býva dobrým zvykom dať pred vymenované názvy 2-3 písmená, v našom prípade „sm“ ako semafor. Zabránime tým prípadnému opakovaniu názvov, ktoré by mohlo viesť k chybám.

program vym_typ;
type
 TSemafor = (smCervena, smOranzova, smZelena);

Teraz môžeme vytvoriť premennú Semafor.

var
 Semafor: TSemafor;

Nakoniec môžeme s premennou pracovať.

begin
 Semafor := smCervena;
 if Semafor = smCervena then
  writeln('Este nemozete ist!');
end.

Práca s ordinálnymi premennými

Ordinálny typ je taký, ktorý má presne určené možné hodnoty a tie sú usporiadané v poradí od najmenšieho po najväčší. Každá hodnota má svoj číselný index. Ordinálne sú napríklad celočíselné typy a znak (char). Aj vymenovaný typ je ordinálny. Ukážeme si, ako sa dá s týmito typmi pracovať.

Funkcia Ord vráti číselný index hodnoty, ktorú jej dáme ako parameter.

writeln(Ord(smCervena));

Index prvého prvku vymenovaného typu je nula. Príklad teda vypísal nulu.

Funkcia Pred vráti hodnotu, ktorá sa nachádza v rade hneď pred zadaným prvkom. Succ vráti nasledujúcu možnú hodnotu.

{vypise 0, co je index smCervena}
writeln(Ord(Pred(smOranzova)));

{vypise 2, co je index smZelena}
writeln(Ord(Succ(smOranzova)));

Asi ste si všimli, že premennú vymenovaného typu nemôžeme vypísať. Tak sme aspoň vypísali jej index.

Funkcia Low vráti prvok s najnižším indexom, High zasa ten s najvyšším.

writeln(Ord(Low(smZelena))); // vypise 0
writeln(Ord(High(TSemafor))); // vypise 2

Ako vidíte, funguje to nielen s premennými, ale i s typmi.

Procedúra Inc zvýši hodnotu premennej o 1, Dec ju zníži.

Semafor := smOranzova;
Inc(Semafor);
if Semafor = smZelena then
 writeln('Mozete prejst!');

Všetky spomínané funkcie môžeme použiť na akýkoľvek ordinálny typ.

{premenna i je typu integer}
i := 20;
while i >= 15 do begin
 writeln(i);
 Dec(i);
end;

Príklad postupne vypisoval hodnotu premennej i a znižoval ju o 1.

Vymenovaný typ môžeme porovnávať podobne ako čísla alebo znaky.

writeln(smOranzova < smZelena); // TRUE

Iné spôsoby určenia

Indexy môžeme určiť aj manuálne:

type
 TProza = (prPoviedka = 5, prNovela = 10,
  prRoman = 15, prIne = 20);

Pri určovaní nového vymenovaného typu nemusíme vždy vypisovať všetky možné hodnoty. Stačí určiť prvý prvok, napísať dve bodky a posledný prvok.

type
 TBeznaProza = prPoviedka..prRoman;
 TDvojciferne = 10..99;

Číslo typu TDvojciferne bude môcť nadobúdať hodnoty od 10 po 99 (vrátane).

Premenným môžeme určiť typ aj priamo:

var
 MalePismeno: 'a'..'z';
Hodnotenie
1 2 3 4 5 (ako v škole)
Priemerná známka: 3
Diskusia k tejto stránke Príspevok na túto tému zatiaľ neexistuje. Môžete pridať prvý z nich!
Prejsť do diskusie»
2005-2012, Matúš Sulír, matus.sulir (zav) gmail bodka com. Gen.: 0,0416 s. Valid XHTML, CSS.