Cykly a return v Lua

Ostatní jazyky Lua Cykly a return v Lua

For

V lua existují dva typy cyklů for a while. For se zapisuje takto for <promena> = <odkdy>,<dokdy> do end:

for i = 1,3 do
  print("ahoj svete")
end

Pozn. na rozdíl od C-like jazyků Lua začíná od 1 ne od 0.

Vypíše do konzole 3krát ahoj svete.

While

zápis: while <podmínka> do end

exit = 1 -- vytvoříme proměnou exit a dáme jí hodnotu 1
  while not exit == 3 do -- cyklus zkontroluje jestli  exit nemá hodnotu 3
    print("ahoj svete") -- vypíše ahoj svete
    exit = exit + 1 -- přičteme k exit 1
  end

Pozn. Lua nezná ++ ani --

Kalkulačka

Kalkulačku by tedy šlo napsat také s pomocí cyklu a to takhle.

exit = false
  while not exit do --Šlo by také napsat  while not exit == true do ale v případě že proměnné přiřadíme logickou hodnotu true/false můžeme == vynechat.
   print("první číslo")
   cislo = io.read()
   print("zadej druhé cislo")
   cislo2 = io.read()
   print("zadej operaci")
   operace = io.read();
   if operace == "+" then
     print(cislo + cislo2)
    elseif operace == "-" then
     print(cislo - cislo2)
    elseif operace == "*" then)
     print(cislo * cislo2)
    elseif operace == "/" then
     print(cislo / cislo)
    else --příkazy po else se provedou v případě že operace nesplňuje if ani žádný z elseif.
     print("spatna operace")
   end
    print("chcete zadat další příklad ano/ne")
    roz = io.read()
   if roz == "ne" then
     exit = true
   end
  end

Kalkulačka má však jednu chybu a to že není takzvaně blbuvzdorná tedy že program spadne když zadáte špatný vstup. Abychom toho dosáhly a přitom kalkulačku neznepřehlednily ukážeme si další zajímavou věc na funkcích. Vytvoříme si funkci ziskejvstup() která bude vstup validovat.

function ziskejvstup()
    exit = false
    while not exit do
      vstup = io.read()
      if not tonumber(vstup) ==  nil then -- Funkce tonumber je součástí standardních knihoven lua tedy ---je přístupná ve všech lua programech.
       -- programu stejně jako standardní knihovna funkcí io ze které je funkce io.read().
       -- tonumber se normálně používá v případě že je potřeba převést textový řetězec na číslo.
       -- Ovšem díky tomu že vrací nil když se převod nepovede se dá použít k validaci vstupu.
       print("nezadali jste číslo")
       vystup() -- Tato funkce bude vysvětlena níže.
       else
        return tonumber(vstup)-- Vrátíme vstup převedený na číslo.
      end
    end

K validaci vstupu operace vytvoříme další funkci a ještě další funkci, která umožní vystoupit z programu po každém špatném vstupu.

function vystup()
  print("byl zadán neplatný vstup")
  print("chcete ukončit program? (Ano pro ukončeni cokoli pro pokračování.)")
  vstup = io.read()
  if vstup == "ano" then
   os.exit(1)--ukončíme program s kódem 1 (program byl ukončen bez chyby).
  end
end
function ziskejoperaci()
 exit = false
 while not exit do
  vstup = io.read()
  if vstup == "+" then
    return "+"
  elseif vstup == "-" then
    return "-"
  elseif vstup == "*" then
    return "*"
  elseif vstup == "/" then
    return "/"
  else
   print("neznámá operace")
   vystup()
   end
 end
end

Kalkulačka z tohoto dílu pak vypadá takhle.

 function vystup()
  print("byl zadán neplatný vstup")
  print("chcete ukončit program? (Ano pro ukončeni cokoli pro pokračování.)")
  vstup = io.read()
  if vstup == "ano" then
   os.exit(1)--ukončíme program s kódem 1 (program byl ukončen bez chyby).
  end
end
function ziskejoperaci()
 exit = false
 while not exit do
  vstup = io.read()
  if vstup == "+" then
    return "+"
  elseif vstup == "-" then
   return "+"
  elseif vstup == "*" then
     return "*"
  elseif vstup == "/" then
    return "/"
  else
   print("neznámá operace")
   vystup()
   end
 end
end
  function ziskejvstup()
    exit = false
    while not exit do
      vstup = io.read()
      if not tonumber(vstup) ==  nil then -- Funkce tonumber je součástí standardních knihoven lua tedy je přístupná .
       -- programu stejně jako standardní knihovna funkcí io ze které je funkce io.read().
       -- tonumber se normálně používá v případě že je potřeba převést textový řetězec na číslo.
       -- Ovšem díky tomu že vrací nil když se převod nepovede se dá použít k validaci vstupu.
       print("nezadali jste číslo")
       else
        return tonumber(vstup)-- Vrátíme vstup převedený na číslo.
      end
    end
    function main()
      exit = false
      while not exit do
       print("zadejte první číslo")
       cislo = ziskejvstup()
       print("zadej druhe číslo")
       cislo2 = ziskejvstup()
       print("zadejte operaci")
       operace = ziskejoperaci()
       if operace == "+" then
         print(cislo + cislo2)
      elseif operace == "-" then
         print(cislo - cislo2)
      elseif operace == "*" then
         print(cislo * cislo2)
     elseif operace == "/" then
         print(cislo / cislo2)
    else
      print("neznama operace")
      vystup()
      end
     end
    end
    main();

Abychom byli z funkcemi hotovi ukážu ještě poslední věc a to argumenty.

function zvetsi(cislo,o)--dáme funkci argumenty
cislo = cislo + o --argument je vlastně proměnná takže můžeme použít tohle.
return cislo
end

 

  Aktivity (1)

Článek pro vás napsal Richard H.
Avatar
Autor se věnuje programování v Javě C# C++ a občas i v Lua

Jak se ti líbí článek?
Celkem (2 hlasů) :
3.53.53.53.5 3.5


 


Miniatura
Předchozí článek
Lua - Cvičení #1
Miniatura
Všechny články v sekci
Lua

 

 

Komentáře

Avatar
Tomáš Pařízek:

Zatím nikdo nevložil komentář - buď druhý!

 
Odpovědět 23.11.2015 14:49
Avatar
Richard H.
Redaktor
Avatar
Odpovídá na Tomáš Pařízek
Richard H.:

Buď třetí xD

Editováno 23.11.2015 19:10
Odpovědět 23.11.2015 19:10
Malý užitečný manuál je vždy lepší než bichle k ničemu.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.