VBA – 4# Lekce – Podmínky IF

V této lekci se podíváme na větvení programu pomoci podmínek IF (do češtiny přeloženo KDYŽ). Podmínky jsou nedílnou součástí každého programu pomáhají nám ošetřovat různé možnosti na základě podmínek. Pomocí těchto příkazu jsme potom schopni větvit program v závislosti na vstupních okolnostech.

Obecná syntaxe podmínky

Syntaxe podmínek if vypadá takto.

IF podmínka Then

Blok příkazů VBA

ElseIf

Blok příkazů

End If

Tento příklad ukazuje jenom samostatný blok podmínek a po zkopírování vám nebude fungovat. Kompletní příklady si ukážeme později v této lekci.

If volba = "a" Then
MsgBox "ahoj", vbOKOnly + vbInformation, "Zpráva" 
ElseIf volba = "b" Then MsgBox "nazdar", vbOKOnly + vbInformation, "Zpráva"
Else MsgBox "končím program", vbOKOnly + vbInformation, "Zpráva"
end
End If

Teď si tento kód rozebereme : První řádek by se dal přečíst takto. Pokud (if)  jakákoliv proměnná ( volba) se rovná ( = )  “a“  potom vykonej (then). Pokud tato podmínka nenastane program přeskočí řádky pod ní a zastaví se u řádku elseif . Elseif je obdoba if ale v podmínce ho můžeme využít kolikrát chceme kdežto if se dává jenom na začátek dané podmínky. Z toho vyplývá že třetí řádek se čte úplně stejně jako první. Else značí něco jako „cokoliv jiného“. Takže pokud se volba bude rovnat cokoliv jiného než „a“ nebo „b“ program vykoná řádky pod else. V Tomto případe vykoná příkaz end, který ukončí celý program. Podmínky nemusí vždy obsahovat else nebo elseif. Každý podmínkový blok ale musí být ukončen řádkem End If. A teď již pár slibovaných kompletních příkladů na procvičení podmínek.

Příklady


Sub cisla()
Dim Cislo As Double
Dim Vysledek As String
Cislo = InputBox("zadej číslo")

If Cislo > 0 Then
        Vysledek = "kadné"
    ElseIf Cislo < 0 Then
        Vysledek = "záporné"
    Else  Vysledek = "nula"
End If
MsgBox "Číslo je " + Vysledek
End Sub

Sub porovnání()
Dim a As Double
Dim b As String
a = InputBox("zadej číslo a")
b = InputBox("zadej číslo b")

If a > b Then
      Vysledek = "a je vetší než b"
   ElseIf b > a Then
      Vysledek = "b je vetší než a"
   Else Vysledek = "a = b"
End If

MsgBox Vysledek
End Sub

U tohoto příkladu je v podmínce použitý textový řetězec proto podmínka vypadá if heslo=“vba“(každý textový řetězec se ohraničuje uvozovkami) kdyby to nebylo v uvozovkách program by to bral jako proměnnou. Zkuste si dát zadat do inputboxu textový řetězec vba a potom cokoliv jiného.


Sub heslo()
Dim heslo As String
heslo = InputBox("zadej heslo")
If heslo = "vba" Then
        MsgBox "Zobrazení přísně tajné zrávy :D", vbOKOnly + vbInformation, "TOP sectret"
    Else
        MsgBox "spatně zadané heslo", vbOKOnly + vbInformation, "Smůla"
End If
End Sub

Toto je jenom obdoba předešlého příkladu. Chybí zde příkaz else. Sami se podívejte na rozdíl mezi oběma příklady


Sub heslo_update()
Dim heslo As String
heslo = InputBox("zadej heslo")
If heslo = "vba" Then
        MsgBox "Zobrazení přísně tajné zrávy :D", vbOKOnly + vbInformation, "TOP sectret"
End If
End Sub

Závěr

Tím naše lekce končí podmínky jsou velmi důležitou součástí programování takže jestli něčemu nerozumíte klidně se ptejte v komentářích pod článkem. V příští lekci se podíváme na další možnosti dělení programu pomocí příkazu Select Case.

Pascal – #6 Podmínky

V této lekci se naučíme podmínkám. Podmínky se v programu používají k rozhodování a větvení programu. Například pokud uživatel zadá číslo, udělej něco, pokud uživatel zadá písmeno, udělej něco, pokud zadá znak, udělej něco jiného atd. Podmínky jsou nedílnou součástí každého programovacího jazyku. Je to jedna z nejdůležitějších věcí. V podstatě nejde napsat žádný větší program bez užití podmínek. Proto je velmi důležité je pochopit. Nemějte však, strach v zásadě se nejedná o nic složitého. Tolik tedy na úvod. Teď si pojďme ukázat, jak to bude vypadat v praxi.

Boolenovský výraz

Řekněme si co to je boolenovský výraz, stručně řečeno, je to takový výraz, na který se dá odpovědět ANO – NE respektive PRAVDA – NEPRAVDA. Příklad takového boolenovského výrazu je například následující  10>6 v tomto případě se jedná o ANO nebo také PRAVDU. Další možný příklad by byl 5=7 tady se však jedná o NEPRAVDU. Místo čísel však můžeme užít také proměnné, které uživatel naplní daty až za chodu programu např. a<b zde nelze na první pohled rozhodnout jedná se však také o boolenovský výraz stejně tak jako například zde x=‘A‘ tady se pro změnu ptáme, zda je v proměnné x načtený znak „A“.

Obecná syntaxe podmínky:

If (boolenovský vyraz) then
Begin

 Vykonávané příkazy;
 Vykonávané příkazy;

End;

Pojďme si to teď popsat slovy. Na začátek si řekneme, že tomuto celému se rozhodovací blok nebo taky podmínkový blok. Teď již na překlad. IF v překladu znamená ‚pokud‘ nebo taky ‚když‘. První řádek by se tedy dal přečíst takto. Pokud boolenovský výraz je pravda potom. Následující řádky jsou již blok příkazů, tak jak jsme již zvyklí například z lekce o cyklech. Pokud boolenovský výraz na začátku není pravda program skočí až na řádek s End;. Toto byla jen velice jednoduchá ukázka pojďme si ukázat něco trochu složitějšího. A tím jsou složené podmínky.

Obecná syntaxe Složené podmínky:

If (boolenovský vyraz) then
Begin

  Vykonávané příkazy;
  Vykonávané příkazy;

End

Else if (boolenovský vyraz) then
Begin

  Vykonávané příkazy;
  Vykonávané příkazy;

End;

Zde dochází k tomu, že program testuje první boolenovský výraz a pokud neplati, tak neskočí hned na konec celého bloku podmínek, ale řeší boolenovský výraz následující za slovem Else If pokud je pravda vykoná jeho příkazový blok, pokud ani ten neplatí tak hledá další boolenovský výraz za Else IF pokud žádný takový nenajde skočí na konec a pokračuje v dalším chodu programu.

Zde si ještě řekneme, že pokud by byl první boolenovský výraz platil tak by se již druhý výraz ani nekontroloval a vykonaly by se pouze příkazy následující po prvním boolenovském výrazu. Dále je důležité vědět, že Počet Else if v podmínce není omezen a můžeme ho tedy využít, kolikrát chceme. Zde si povšimneme ještě jedné zvláštnosti pascalu, že před end, za kterým následuje else se nepíše ‚;‘. Pokud bychom znak napsali, compilator by hlásil chybu.  Aby toho nebylo málo, čeká nás ještě třetí typ struktury. Ten vypadá opět podobně

Obecná syntaxe Podmínka S ELSE na konci:

If (boolenovský vyraz) then
Begin

  Vykonávané příkazy;
  Vykonávané příkazy;

End;

Elseif (boolenovský vyraz) then
Begin

  Vykonávané příkazy;
  Vykonávané příkazy;

End

Else
Begin

  Vykonané příkazy;

End;

Zde nám ke konci přibylo slovo Else, zde si opět povšimneme, že na řádku před else není za end znak ‚;‘. Druhá zvláštnost je, že se neuvádí žádný boolenovský výraz z logiky věci tedy platí, že všechny příkazy napsané za else se vykonají vždy. Else je však volitelné nemusí být v podmínce vůbec obsaženo. Většinou se jedná o koncové řešení, které pouze vypíše zprávu na obrazovku. Else by se dalo přeložit jako, pokud nastane cokoliv jiného než výše uvedené boolenovské vyrazy pak dělej následující příkazy.

Příklad 1

Tak dost bylo teorie, pojďme si ukázat, jak to funguje v praxi. Tím to pochopíte stejně nejlépe. Jako první si ukážeme zcela jednoduchý rozhodovací blok. V nadcházejícím příkladu program rozhodne zda uživatel zadal číslo větší menší než nula a nebo samotnou nulu.

Program IF1;
Uses crt;

Var a : integer;

Begin
Clrscr;
 Readln(a);

 If a > 0 then
 Begin
   Writeln('číslo vetší jak nula');
 End

 Else if a < 0 then
 Begin
   Writeln('číslo mensi jak nula') ;
 End

Else Writeln('zadané číslo je nula');

Repeat until keypressed;

End.

Logické operátory:

V druhé části lekce si ještě řekněme něco o logických operátorech, které můžeme v podmínkách využít.

OR: jedná se o logické nebo.

AND: by se dalo přeložit jako ‚a současně‘

Použití těchto operátoru v podmínkách je pak následující:

If( (boolenovský výraz) OR( boolenovský výraz)) then

taková to podmínka se provede, pokud alespoň jeden boolenovský příkaz bude pravda.

If( (boolenovský výraz) AND ( boolenovský výraz)) then

taková to podmínka se provede jen a pouze pokud budou oba boolenovské výrazy pravda

Komplexní Příklad

Vše si ukážeme hned na dalších dvou příkladech, které budou demonstrovat vše co jsme se dnes naučili. Tentokrát se bude jednat o program, kterému zadáme tři rozměry reprezentující hrany trojúhelníku, a program rozhodne, zda je vůbec možné tento trojúhelník sestavit a poté vypíše, zda se jedná o rovnoramenný rovnostranný nebo obecný trojúhelník. Při rozhodování, zda je možné sestrojit, použijeme pravidla, že součet kterýchkoliv stran musí být větší než strana třetí

Program trojuhelnik;

   uses crt;

   var a : integer;
       b : integer;
       c : integer;

 begin
     clrscr;
     Writeln('načti 3 strany trojúhelníku');
     readln(a,b,c);

              if ((a+b<c) or (b+c<a) or (c+a<b)) then
              begin
                  Writeln('Trojuhelnik nelze sestrojit');
              end
              else if  (a=b) or (b=c) or (c=a) then
              begin
                  Writeln('Rovnoramený');
              end
              else if (a=b) and (a=c) then
              begin
                  Writeln('Rovnostranný');
              end
              else Writeln('Obecný');

           repeat until keypressed;

        end.

Příklad 3

Další program neukazuje nic nového spíše procvičuje použití podmínek a logického operátoru AND.

program IF2;
 uses crt;
 var x : integer;

Begin
 clrscr;
  Writeln('Zadej cislo x od 0 do 100');
  Readln(x);
  If (x>=0) and (x<=50) then
  begin
    writeln('Zadane cislo je v intervalu od 0 do 50 včetně') ;
  end
  else if (x>=51) and (x<=100)then
  begin
    writeln('Zadane cislo je v intervalu 51 a 100');
  end
  else writeln('nezadali jste číslo v rozsahu od 0 do 100 zkuste znova');

  repeat until keypressed;

  end.

Závěr

Z dnešní lekce je to již vše. Měli byste tedy chápat obecnou strukturu podmínek if vědět kdy použít složitější podmínky s else if a else. Dále byste měli vědět, co je to boolenovský výraz. Měli byste chápat spojení boolenovských výrazů pomocí logických operátorů AND a OR. Případně si sami můžete zkusit vymyslet nějaký prográmek či pouze nějakou jinou variantu na to co jsme si dnes ukázali.

V příští lekci se podíváme na opět na cykly, které budou tentokrát ukončovány podmínkou.