Větvení programů - příkaz if

Velmi často je potřeba v programech na základě nějaké podmínky (například výběru, hodnoty proměnné a podobně) vykonat buď jeden příkaz (příkazy) nebo druhý příkaz (příkazy), neboli příkazy jedné nebo druhé větve (proto větvení programů). V Delphi se používá, podobně jako v jiných programovacích jazycích, příkaz if (jestliže).

Princip použití příkazu if je poměrně jednoduchý:
if podmínka then příkaz1 else příkaz2;
přeloženo do "lidštiny" - jestliže je splněna podmínka, potom vykonej příkaz1 jinak vykonej příkaz2. Všimněte si, že je středník (oddělovač příkazů) až na konci příkazu, to proto, že jde o jeden celistvý příkaz. Druhou část else je možné vynechat, pak to znamená, že při splnění podmínky je vykonaný příkaz1, jinak se neděje nic.
Konkrétní příklady:
if a>b then label1.caption:='první číslo je větší' else label1.caption:='druhé číslo je větší';
(jestliže proměnná a je větší než proměnná b vypiš do label1 text: první číslo je větší, jinak tam vypiš, že druhé číslo je větší (a co když budou stejná :-)?))
if edit1.text='0' then edit2.text='zadej větší číslo než nulu'
(jestliže je v edit1 nula potom vypiš do edit2 text zadej větší číslo než nulu.
Jako operátory je možné použít například < , > , >= , <= , <> .

Jedním typickým příkladem využití příkazu if je vykonávání příkazů podle vybrané volby například s využitím komponenty ComboBox. Doplníme aplikaci z minulé lekce o možnost výběru čtverce nebo obdélníka pro výpočet obvodu (ukázka):

Větvení programu pomocí komponenty ComboBox


Oproti minulé lekci přidáme ještě jeden Edit pro případné zadání délky druhé strany (u obdélníka) a právě komponentu ComboBox (rozbalovací seznam) pro výběr geometrického objektu (čtverce nebo obdélníka). Podobnou komponentou jako ComboBox je ListBox, seznam stringů, který je na rozdíl od ComboBoxu rozbalený, proto se na něj musí v návrhu počítat s větším prostorem. Ostatní vlastnosti a události jsou téměř stejné. Položku ze seznamu můžete vybrat obvyklým způsobem nebo tak, že ji vypíšete do políčka.

Základní vlastností ComboBoxu je Items (položky seznamu). Položky mohou být doplňované programově nebo v návrhu aplikace, což zkusíme nyní. Pokud kliknete dvakrát vedle vlastnosti Items, otevře se String List Editor (editor seznamu textů), do kterého můžete položky (každou na jeden řádek) zapsat (viz obrázek).
V ukázce je využita také vlastnost Text - text, který se ukáže při prvním zobrazení, v ukázce je prostě prázdný.
Nyní už můžeme přikročit k vlastnímu programování, při kliknutí na tlačítko vypočti chceme, aby se v Edit3 zobrazil obvod vybraného obrazce se stranami z Edit1 případně Edit2. Abychom počítali obvod správného obrazce, využijeme vlastnost ItemIndex ComboBoxu, což je pořadí vybrané položky (jsou číslované od nuly). Události OnClick tlačítka vypočti upravíme proceduru:
procedure TForm2.Button1Click(Sender: TObject);
begin
if combobox1.itemindex=0 then edit3.Text:=inttostr(4*strtoint(edit1.Text));
if combobox1.itemindex=1 then edit3.Text:=inttostr(2*strtoint(edit1.Text)+2*strtoint(edit2.Text));
end;

Příkaz
if combobox1.itemindex=0 then edit3.text:=inttostr(4*strtoint(edit1.Text));
znamená - jestliže je v comboboxu vybraná položka číslo 0 (první), potom do edit3 vypiš čtyřnásobek edit1 (s příslušnými převody textu na číslo a obráceně)
Takto doplněná aplikace už funguje, zkusíme upravit ještě jednu "drobnost" (velké věci se vždycky skládají z maličkostí :-) ). Políčka pro zadávání stran jsou dvě, ale pro obvod čtverce stačí jedna hodnota. Zařídíme to tak, aby při vybrání čtverce nebylo políčko pro zadání druhé strany přístupné. Dostupnost komponent je určena vlastností Enable, která může mít hodnotu true (je dostupná) nebo false (není dostupná). Chceme tedy při změně (OnChange) Comboboxu nastavit Enable komponenty Edit2 na false, pokud je vybraný čtverec.
Komponentě Combobox1 upravíme událost OnChange:
procedure TForm2.ComboBox1Change(Sender: TObject);
begin
if combobox1.itemindex=0 then edit2.enabled:=false else edit2.enabled:=true;
end;
Jestliže byla vybraná položka číslo 0 (první, tedy čtverec), potom edit2 nebude dostupný, jinak dostupný bude.

Aplikaci ukládej do složky s názvem lekce5

Úkoly:

Základní úloha:

Vytvoř aplikaci podle textu lekce a doplň ještě výpočty obsahů.


Úloha na plus (za každý další útvar jedno plus):

Doplň aplikaci o možnost výpočtu obvodů a obsahů dalších geometrických útvarů.


Úloha na jedničku:

Doplň úlohu na plus o ilustrační obrázky vybraných útvarů.


Úloha pro experty a námět na žákovskou odbornou činnost:

Rozšiř tuto aplikaci i na objemy a povrchy tak, aby obsáhla co nejvíce geometrických objektů probíraných na ZŠ.