NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Lekce 4 - Podmínky a větvení v Batchi

V předešlém cvičení, Řešené úlohy k 3. lekci Batche, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Z minulého dílu již umíme vytvářet proměnné a ukládat si do nich nějaké hodnoty. Dokonce umíme i ukládat vstup od uživatele. Často se však stává, že se potřebujeme rozhodovat a následně reagovat na různé situace. Například podle zadání uživatele měnit běh programu. Od toho jsou podmínky – na základě zadaných informací se program rozhodne, jak bude postupovat dále. Takovou podmínkou může být například – 1 > 2, nebo proměnná vstup = něčemu.

Zápis podmínky

Podmínku můžeme zapsat pomocí klíčového slova

if

Poté následuje logický výraz. Pokud je tento výraz pravdivý, provede se následující příkaz.

Zkusme si to! Vytvořte si program porovnani.bat a vložte do něj základní strukturu. Zkusme si porovnat, zda se číslo 15 rovná číslu 5. Rovnost se označuje dvojitým rovnítkem.

if 15 == 5 echo Rovnaji se!

Program spusťme. Program nám nic nevypíše. Jak nám rozum napovídá, číslo 15 se nerovná číslu 5, proto je prázdná obrazovka správný výsledek. Co když chceme uživateli vypsat zprávu, že se čísla nerovnají? K tomu slouží klíčové slovo:

else

Jen bych rád upozornil, že v případě, že chceme else použít, musíme dát příkazy do závorek. Upravte proto náš program do této podoby:

if 15 == 5 (echo Rovnaji se!) else (echo Nerovnaji se!)

Pokud program spustíme nyní, zjistíme, že nám vypíše, že se čísla nerovnají.

Podmínky s if a else v batchi - Příkazový řádek a dávkové soubory

Relační operátory

Operátor Zápis Příklad Matematický zápis
Rovná se == nebo EQU 5 == 2 nebo 5 EQU 2 5 = 2
Nerovná se NEQ 5 NEQ 2 5 ≠ 2
Menší LSS 5 LSS 2 5 < 2
Menší nebo rovno LEQ 5 LEQ 2 5 ≤ 2
Větší GTR 5 GTR 2 5 > 2
Větší nebo rovno GEQ 5 GEQ 2 5 ≥ 2

Zkusme si nyní vytvořit program, který bude dělit zadané číslo nějakým jiným číslem. Naším úkolem bude zjistit, zda druhé číslo není rovno nule. Jak jistě víte, nulou dělit nelze. A pokud to nevíte, tak jste se to právě dozvěděli :-).

Vytvořte si program s názvem deleni.bat a vložte do něj základní strukturu.

Jako první věc se uživateli přestavíme a vytáhneme z něj obě čísla.

echo Vitej v kalkulacce ktera umi jen delit :)
set /p prvni=Zadej prvni cislo:
set /p druhe=Zadej druhe cislo:

Nyní zjistíme, zda se druhé číslo rovná nule. Pokud ano, vypíšeme uživateli hlášku, že nulou není možné dělit. V opačném případě vypíšeme výsledek operace. Nejspíše vás napadá, jak to uděláme. Jednoduše – vytvoříme si pomocnou proměnnou „vysledek“, do které budeme ukládat výsledek. Pokud bude druhé číslo nulové, při vytváření proměnné nenastavíme žádný přepínač. Pokud číslo nulové není, přidáme přepínač /a (pro matematickou operaci).

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.

Dělení v Batchi - Příkazový řádek a dávkové soubory

Větvení

Zde se již dostáváme k samotné změně chodu našeho programu. Větvení programu se v Batchi provádí pomocí příkazu:

goto

Jak již název příkazu napovídá, jedná se o „skok“ na jinou část programu, například na začátek. Cílové umístění (label) se označuje následujícím způsobem:

:ciloveUmisteni

A na toto umístění můžeme „přeskočit“ již zmíněným příkazem goto:

goto cisloveUmisteni

Jednoduchá kalkulačka

Pamatujete si náš prográmek Jednoduchá kalkulačka z minulé lekce? Pojďme jej trochu vylepšit! Stáhněte si zdrojový kód tohoto programu (můžete jej najít pod minulým článkem).

Ještě připomenu, co tento program dělá. Na začátku si program vyžádá 2 čísla, a následně vypíše jejich součet, rozdíl, součin a podíl. Poté program počká na stisk klávesy a skončí.

Pojďme tento program upravit – zkusme udělat to, že místo ukončení se program zeptá, zda si uživatel přeje, aby byl program spuštěn znovu. Jako možnosti vstupu budeme mít například „Ano“ nebo „Ne“. Pro zjednodušení – pokud bude vstup „Ano“, program spustíme znovu, pokud bude vstup cokoliv jiného, program ukončíme.

Jak na to? Jednoduše. Kalkulačka se na začátku představuje a poté žádá zadání dvou čísel. Mezi řádek s výpisem a zadáním (přece se nebudeme představovat při každém znovu-spuštění) vložte label:

:zacatek

Nyní se přesuneme na příkaz „pause > nul“ na konci programu. Tento příkaz smažeme, místo něj budeme psát rozhodování. Nejprve musíme uživateli sdělit, že se bude rozhodovat. Pro přehlednost vložíme prázdný řádek.

echo.
echo Prejete si program spustit znovu ?

A přidáme čtení vstupu:

set /p pokracuj=Zadej Ano nebo Ne:

Tak, nyní máme načtený vstup od uživatele. Přejdeme k rozhodování – pokud je vstup roven „Ano“, přeskočíme na label „zacatek“.

if %pokracuj%==Ano goto zacatek

Pokud se vstup rovná čemukoliv jinému, program pojede dál. Dál ale nic není, proto program skončí.

Program uložíme a vyzkoušíme. Všimněme si, že uživatel musí zadat „Ano“ - podmínka je tzv. Case-sensitive (citlivá na velikost písmen). Pokud toto nechcete, vložte za klíčové slovo „if“ přepínač /i. Podmínka nyní bude vypadat takto:

if /i %pokracuj%==Ano goto zacatek

A náš program je hotový.

Podmínka pokračování programu v Batch - Příkazový řádek a dávkové soubory

Vylepšená kalkulačka

Založíme si nový soubor, který se bude jmenovat vylepsena-kalkulacka.bat. Vložíme si do něj základní strukturu.

Tento program vypíše seznam dostupných operací a podle zadání uživatele operaci provede. Také si zkusíme ošetřit vstup od uživatele, aby např. nedělil nulou.

V úvodu přivítáme uživatele, vytáhneme z něj dvě čísla, vypíšeme mu seznam operací a vyzveme jej k zadání čísla operace. Před zadáváním čísel a před zadáváním operace si vytvoříme label, který později 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:

Nyní přejdeme k větvení programu. Zadáme si podmínky.

if %operace%==1 goto scitani
if %operace%==2 goto odcitani
if %operace%==3 goto nasobeni
if %operace%==4 goto deleni

Nyní nám program bude „skákat“ podle toho, co uživatel chce :-). Vytvoříme si labely s akcemi.

: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 zadání program skočí na label s akcí, kde spočítá výsledek a uloží jej do proměnné „vysledek“. Poté skočí na label „vypis“, kde si výsledek vypíšeme. Všimněte si, že u dělení kontrolujeme, zda se druhé číslo nerovná nule. Pokud ano, skáčeme zpět na zadání. Nyní si vytvoříme label „vypis“, kde uživateli vypíšeme výsledek.

:vypis
echo.
echo Vysedek operace je %vysledek%

Zkuste do čísla operace zadat cokoliv jiného – například nějaký text. Program prostě pojede dál, jako by tu nebyly žádné podmínky ani labely. Co s tím? Je to jednodušší, než byste čekali. Pod podmínky vložíme skok na zadání operace.

goto operace

Na konci nesmíme zapomenout na možnost znovu spustit program. Zeptejme se tedy uživatele, zda chce program spustit znovu.

echo.
set /p pokracuj=Prejes si program spustit znovu ? Ano nebo ne:
if /i %pokracuj%==Ano goto zadavani

Výsledek:

Skoky v Batchi - Příkazový řádek a dávkové soubory

Máme hotovo, program je jako vždy ke stažení níže.

V následujícím cvičení, Řešené úlohy ke 4. lekci Batche, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 439x (1.31 kB)
Aplikace je včetně zdrojových kódů v jazyce Batch

 

Předchozí článek
Řešené úlohy k 3. lekci Batche
Všechny články v sekci
Příkazový řádek a dávkové soubory
Přeskočit článek
(nedoporučujeme)
Řešené úlohy ke 4. lekci Batche
Článek pro vás napsal Neaktivní uživatel
Avatar
Uživatelské hodnocení:
136 hlasů
Tento uživatelský účet již není aktivní na základě žádosti jeho majitele.
Aktivity