Zaokrouhlování

Lua má sbírku hotových matematických funkcí jménem math. Voláte je stejně jako print: napíšete název a za něj do závorek hodnoty. Na rozdíl od print ale nic nevypisují. Spočítají výsledek a vrátí ho: předají ho zpátky programu, který ho může vypsat nebo uložit do proměnné.

Dvě z nich zaokrouhlují:

  • math.floor(x) zaokrouhlí dolů, k podlaze (anglicky floor): math.floor(3.7) je 3.
  • math.ceil(x) zaokrouhlí nahoru, ke stropu (ceil je zkratka anglického ceiling, strop): math.ceil(3.2) je 4.

Obě vrátí celé číslo. Tak se taky zbavíte .0 po dělení:

local vaha = 7.6    -- dýně v kilogramech
print(math.floor(vaha))
print(math.ceil(vaha))
print(10 / 2)
print(math.floor(10 / 2))

Vypíše:

7
8
5.0
5

Dolů znamená směrem k menším číslům, i pod nulou: math.floor(-3.5) je -4.

Funkci, která by zaokrouhlila na nejbližší celé číslo, Lua nemá. math.round(7.6) skončí chybou attempt to call a nil value (field 'round'): v math nic jménem round není, a tak není co zavolat. Na nejbližší celé číslo zaokrouhlíte tak, že přičtete 0,5 a zaokrouhlíte dolů:

print(math.floor(7.6 + 0.5))
print(math.floor(7.4 + 0.5))

Vypíše:

8
7

Tři další užitečné funkce:

  • math.max(a, b, …) vrátí největší z hodnot, které jí dáte, a math.min(a, b, …) nejmenší. Hodnot jim můžete dát, kolik chcete.
  • math.abs(x) vrátí absolutní hodnotu: číslo bez znaménka minus. math.abs(-3) je 3.
local rano = -3    -- stupně
local poledne = 5
print(math.max(rano, poledne, 2))
print(math.min(rano, poledne, 2))
print(math.abs(rano - poledne))

Vypíše:

5
-3
8

Teplota stoupla o 8 stupňů. rano - poledne je -8 a math.abs z rozdílu udělá kladné číslo, ať odečítáte v jakémkoli pořadí.

math.min a math.max se hodí i pro meze. Ema má například 7 záhonů, takže i s 10 balíčky semínek jich zaseje nanejvýš math.min(balicky, 7).

Pokyny

Spusťte program. Ema nemůže jít ke studni 5,625krát: musí tam jít šestkrát a při poslední cestě nese konev jen zčásti plnou. Zaokrouhlete počet cest nahoru pomocí math.ceil, aby program vypsal:

Cesty ke studni: 6

Na konci programu vypište, kolik nejvíc vajec slepice snesly za jeden den. Použijte math.max se všemi třemi proměnnými:

Cesty ke studni: 6
Nejvíc vajec za den: 9

Na další řádek vypište průměrný počet vajec za den, zaokrouhlený dolů: sečtěte všechny tři dny, součet vydělte 3 a zaokrouhlete dolů pomocí math.floor. (Bez zaokrouhlení by to bylo 6.6666666666667.)

Cesty ke studni: 6
Nejvíc vajec za den: 9
Průměr: 6 vajec denně

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

4/10