V této lekci rozšíříme své znalosti o proměnných.
Lekce č.4
V této lekci rozšíříme své znalosti o proměnných.
Ordinální datové typy
Jsou to takové typy u kterých jdou jednotlivé hodnoty za sebou v dané posloupnosti. To znamená že se vždy ví která hodnota je předcházející a která následující. Patří sem všechny celočíselné typy znaky a ještě některé další. Aby jste tomu lépe rozuměli. Prostě to znamená že číslu jedna následuje dvojka nebo třeba před znakem 'C' je vždy znak 'B'.
V Delphi je pro práci s ordinálními typy zavedeno 5 funkcí:
>Ord: zjistí ordinální hodnotu
prvku. Např. ord(1)
vrátí hodnotu
jedna protože před jedničkou je nula a tudíž je druhá v pořadí (ordinální
hodnota se počítá také od nuly).
ord('A')
vrátí hodnotu 65 protože je 66 v pořadí).
>Pred: vrací hodnotu která
předchází hodnotě uvedené v závorce. Takže
pred(1)
vrací hodnotu 0 a
pred('A')
vrací znak @ protože jeho ordinální hodnota je
jednu menší než u znaku A.
>Succ: Je opakem Pred a vrací
následující hodnotu. Succ(1)
=2 a
Succ('A')
='B'.
>High: Vrací nejvyšší možnou
hodnotu kterou může proměnná daného typu mít. Tedy
High(byte)
=255.
>Low: Tato funkce je opakem
funkce High takže Low(byte)
=0.
Příklad použití: dejme tomu že chceme proměnné typu byte přiřadit druhou nejvyšší hodnotu:
var
i:byte;
begin
i:=High(byte);
i:=Pred(i);
Button1.Caption:=IntToStr(i);
end;
Tato funkce nám tedy vypíše na
tlačítko hodnotu 254. Ale co se stane když chceme proměnné přiřadit hodnotu o
jednu vyšší než je její maximální kapacita? Nejlepší bude když si to zkusíte;)
místo i:=Pred(i);
stačí zapsat
i:=Succ(i);
Jak sami jistě vidíte
proměnné se přiřadila hodnota 0. Ano po překročení maximální hodnoty začala
proměnná narůstat od její nejnižší hodnoty. Pokud vám přijde že to může vést k
těžko odhalitelným chybám ve vašich budoucích tak stačí v hlavním panelu
kliknout na Project->Options a v kartě Compiler zaškrtněte
Range Checking. Nyní když spustíte program a pokusíte se překročit maximální
hodnotu proměnné tak vám Delphi nahlásí nemilou chybu.
Typické neordinální datové typy jsou reálné. Jak jistě víte platí že mezi čísli 0,5 a 1,0 je nekonečně mnoho prvků.
Řetězce
Pro práci s textem budeme používat
proměnou typu string. Protože téměř všechny vlastnosti komponent které
pracují textem jsou typu string. Tím nám odpadne namáhavé přetypování. A
občas i s typem Char který je velký 1byt a vejde se do něj tedy 255 znaků.
Řetězce se do proměnných ukládají pomocí '. Pokud tedy máme proměnnou s
typu string a chceme do ní uložit nějaký text tak to bude vypadat takto:
s:='text';
Kdyby jsme to zapsali bez
apostrofů tak by si Delphi myslel že do proměnné s chceme uložit
proměnnou text. Už jsme si řekli o funkci Ord která slouží k převedení
znaků na číselnou hodnotu. Jejím opakem je funkce Chr která vrací znak takže
Chr(65)
='A'.Všechny znaky a jejich
hodnota je uložena v mezinárodní tabulce ASCII.
Přetypování
Již jsme si ukázali jak přetypovat z typu integer na typ string pomocí funkce IntToStr. Funguje to i naopak pokud chceme typ string převést na integer poslouží k tomu funkce StrToInt. Ale má to jeden háček pokud do proměnné typu string přiřadíte nějaký znak a pokusíte se jí přetypovat na Integer tak program nahlásí potupnou chybu. Samozřejmě je spoustu dalších funkcí na přetypování ale teď nás nemusí zajímat protože se budeme snažit vyhýbat potřebě přetypovávat. Jinak jsou všechny způsoby přetypování popsány v Helpu Delphi tak kdyby vás to moc zajímalo tak se tam můžete kouknout;)
Logické datové typy
Proměnné tohoto ordinálního typu mohou mít pouze dvě hodnoty. Pro ně jsou předdefinované dvě konstanty True a False. Delphi nabízí 4 logické datové typy mi ale budeme používat pouze ty Boolean jak už jsem řekl může mít hodnoty pouze True nebo False a je velký 1byt. Proměnné těchto typů se používají hlavně k vyhodnocování různých situací. Hodně se o nich budeme bavit v příští kapitole.
Úkol
Za úkol vytvořte program který při jeho spuštění vypíše největší a nejmenší možnou hodnotu 3 datových typů. Nic náročného;) Úkoly posílejte stejným způsobem jako u minulé lekce.