4. diel - Podmienky a vetvenia v Batch
V predchádzajúcom cvičení, Riešené úlohy k 3. lekcii Batch, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
Z minulého dielu už vieme vytvárať premenné a ukladať si do nich nejaké hodnoty. Dokonca vieme i ukladať vstup od užívateľa. Často sa však stáva, že sa potrebujeme rozhodovať a následne reagovať na rôzne situácie. Napríklad podľa zadania užívateľa meniť beh programu. Od toho sú podmienky - na základe zadaných informácií sa program rozhodne, ako bude postupovať ďalej. Takouto podmienkou môže byť napríklad - 1> 2, alebo premenná vstup = niečomu.
Zápis podmienky
Podmienku môžeme zapísať pomocou kľúčového slova
if
Potom nasleduje logický výraz. Pokiaľ je tento výraz pravdivý, vykoná sa nasledujúci príkaz.
Skúsme si to! Vytvorte si program porovnani.bat a vložte do neho základnú štruktúru. Skúsme si porovnať, či sa číslo 15 rovná číslu 5. Rodová sa označuje dvojitým znakom rovnosti.
if 15 == 5 echo Rovnaji se!
Program spustí. Program nám nič nevypíše. Ako nám rozum napovedá, číslo 15 sa nerovná číslu 5, preto je prázdna obrazovka správny výsledok. Čo keď chceme užívateľovi vypísať správu, že sa čísla nerovnajú? K tomu slúži kľúčové slovo:
else
Len by som rád upozornil, že v prípade, že chceme else použiť, musíme dať príkazy do zátvoriek. Upravte preto náš program do tejto podoby:
if 15 == 5 (echo Rovnaji se!) else (echo Nerovnaji se!)
Ak program spustíme teraz, zistíme, že nám vypíše, že sa čísla nerovnajú.
Relačné operátory
operátor | zápis | Príklad | matematický zápis |
rovná sa | == alebo EQU | 5 == 2 alebo 5 EQU 2 | 5 = 2 |
nerovná sa | NEQ | 5 NEQ 2 | 5 ≠ 2 |
menšie | LSS | 5 LSS 2 | 5 <2 |
Menšie alebo rovné | Leq | 5 Leq 2 | 5 ≤ 2 |
väčšia | GTR | 5 GTR 2 | 5> 2 |
Väčšie alebo rovné | GEQ | 5 GEQ 2 | 5 ≥ 2 |
Vytvorte si program s názvom deleni.bat a vložte do neho základnú štruktúru.
Ako prvú vec sa užívateľovi prestavíme a vytiahneme z neho obe čísla.
echo Vitej v kalkulacce ktera umi jen delit :) set /p prvni=Zadej prvni cislo: set /p druhe=Zadej druhe cislo:
Teraz zistíme, či sa druhé číslo rovná nule. Ak áno, vypíšeme užívateľovi hlášku, že nulou nie je možné deliť. V opačnom prípade vypíšeme výsledok operácie. Najskôr vás napadá, ako to urobíme. Jednoducho - vytvoríme si pomocnú premennú "vysledok", do ktorej budeme ukladať výsledok. Pokiaľ bude druhé číslo nulové, pri vytváraní premennej nenastavíte žiadny prepínač. Ak číslo nulové nie je, pridáme prepínač / a (pre matematickú operáciu).
if %druhe%==0 (set vysledek=Nulou nelze delit!) else (set /a vysledek=%prvni%/%druhe%) echo Vysledek teto operace je: %vysledek%
Program uložíme a spustíme.
Vetvenia
Tu sa už dostávame k samotnej zmene chodu nášho programu. Vetvenie programu sa v Batch vykonáva pomocou príkazu:
goto
Ako už názov príkazu napovedá, jedná sa o "skok" na inú časť programu, napríklad na začiatok. Cieľové umiestnenia (label) sa označuje nasledujúcim spôsobom:
:ciloveUmisteni
A na toto umiestnenie môžeme "preskočiť" už zmieneným príkazom goto:
goto cisloveUmisteni
Jednoduchá kalkulačka
Pamätáte si náš programík Jednoduchá kalkulačka z minulej lekcie? Poďme ho trochu vylepšiť! Stiahnite si zdrojový kód tohto programu (môžete ho nájsť pod minulým článkom).
Ešte pripomeniem, čo tento program robí. Na začiatku si program vyžiada 2 čísla, a následne vypíše ich súčet, rozdiel, súčin a podiel. Potom program počká na stlačenie klávesy a skončí.
Poďme tento program upraviť - skúsme urobiť to, že namiesto ukončenie sa program spýta, či si užívateľ želá, aby bol program spustený znova. Ako možnosti vstupu budeme mať napríklad "Áno" alebo "Nie". Pre zjednodušenie - ak bude vstup "Áno", program spustíme znova, ak bude vstup čokoľvek iné, program ukončíme.
Ako na to? Jednoducho. Kalkulačka sa na začiatku predstavuje a potom žiada zadanie dvoch čísel. Medzi riadok s výpisom a zadaním (predsa sa nebudeme predstavovať pri každom znovu-spustení) vložte label:
:zacatek
Teraz sa presunieme na príkaz "pause> núl" na konci programu. Tento príkaz zmažeme, namiesto neho budeme písať rozhodovanie. Najprv musíme užívateľovi oznámiť, že sa bude rozhodovať. Pre prehľadnosť vložíme prázdny riadok.
echo. echo Prejete si program spustit znovu ?
A pridáme čítanie vstupu:
set /p pokracuj=Zadej Ano nebo Ne:
Tak, teraz máme načítaný vstup od užívateľa. Prejdeme k rozhodovanie - ak je vstup rovný "Áno", preskočíme na label "zacatek".
if %pokracuj%==Ano goto zacatek
Ak sa vstup rovná čomukoľvek inému, program pôjde ďalej. Ďalej však nič nie je, preto program skončí.
Program uložíme a vyskúšame. Všimnime si, že užívateľ musí zadať "Áno" - podmienka je tzv. Case-sensitive (citlivé na veľkosť písmen). Pokiaľ toto nechcete, vložte za kľúčové slovo "if" prepínač / i. Podmienka teraz bude vyzerať takto:
if /i %pokracuj%==Ano goto zacatek
A náš program je hotový.
Vylepšená kalkulačka
Založíme si nový súbor, ktorý sa bude volať Vylepšený-kalkulacka.bat. Vložíme si doň základnú štruktúru.
Tento program vypíše zoznam dostupných operácií a podľa zadania užívateľa operáciu vykoná. Tiež si skúsime ošetriť vstup od užívateľa, aby napr. Nedelili nulou.
V úvode privítame používateľa, vytiahneme z neho dve čísla, vypíšeme mu zoznam operácií a vyzveme ho na zadanie čísla operácie. Pred zadávaním čísel a pred zadávaním operácie si vytvoríme label, ktorý neskôr využijeme.
echo Vitej v kalkulacce! :zadavani set /p prvni=Zadej prvni cislo: set /p druhe=Zadej druhe cislo: echo. echo 1 - scitani echo 2 - odcitani echo 3 - nasobeni echo 4 – deleni :operace set /p operace=Zadej cislo operace:
Teraz prejdeme k vetvenie programu. Zadáme si podmienky.
if %operace%==1 goto scitani if %operace%==2 goto odcitani if %operace%==3 goto nasobeni if %operace%==4 goto deleni
Teraz nám program bude "skákať" podľa toho, čo používateľ chce . Vytvoríme si labely s akciami.
:scitani set /a vysledek=%prvni%+%druhe% goto vypis :odcitani set /a vysledek=%prvni%-%druhe% goto vypis :nasobeni set /a vysledek=%prvni%*%druhe% goto vypis :deleni if %druhe%==0 goto zadavani set /a vysledek=%prvni%/%druhe% goto vypis
Po zadaní program skočí na label s akciou, kde spočíta výsledok a uloží ho do premennej "vysledok". Potom skočí na label "vypis", kde si výsledok vypíšeme. Všimnite si, že u delenie kontrolujeme, či sa druhé číslo nerovná nule. Ak áno, skáčeme späť na zadanie. Teraz si vytvoríme label "vypis", kde užívateľovi vypíšeme výsledok.
:vypis echo. echo Vysedek operace je %vysledek%
Skúste do položky operácie zadať čokoľvek iné - napríklad nejaký text. Program jednoducho pôjde ďalej, ako by tu neboli žiadne podmienky ani labely. Čo s tým? Je to jednoduchšie, než by ste čakali. Pod podmienky vložíme skok na zadanie operácie.
goto operace
Na konci nesmieme zabudnúť na možnosť znovu spustiť program. Spýtajme sa teda užívateľa, či chce program spustiť znova.
echo. set /p pokracuj=Prejes si program spustit znovu ? Ano nebo ne: if /i %pokracuj%==Ano goto zadavani
výsledok:
Máme hotovo, program je ako vždy k stiahnutiu nižšie.
V nasledujúcom cvičení, Cvičenie k 4. lekcii Batch, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 439x (1.31 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Batch