6. diel - Jednoduchá kalkulačka v Scratchi
V minulej lekcii, Načítanie hodnôt od užívateľa v Scratchi , sme sa naučili načítať hodnoty zadané užívateľom a ďalej ich spracovávať.
V dnešnom Scratch tutoriále naučíme mačičiaka počítať 🙂 Vytvoríme si jednoduchú kalkulačku a precvičíme si pri tom témy minulých lekcií, a to načítanie užívateľských vstupov a prácu s premennými. Ku koncu si ešte ukážeme chyby, ktorých sa musíme pre správne fungovanie našej aplikácie vyvarovať.
Jednoduchá kalkulačka
Teraz, keď už vieme načítať vstup a rôzne ho spracovať, poďme si skúsiť napísať sľubovanú kalkulačku 😉 Bude veľmi jednoduchá. Na vstup prídu dve čísla a program potom vypíše výsledky pre sčítanie, odčítanie, násobenie a delenie.
Založíme si nový projekt a klasicky začneme pridaním bloku po kliknutí na (vlajočka):
Z blokov Vnímanie prilepíme blok otázka a prepíšeme
jeho text na Zadej první číslo:
Teraz sa musíme trochu zamyslieť 🙂 Chceme sa opýtať na dve
čísla, ale odpoveď, s ktorou program pracuje je
vždy len jedna. Keď sa teraz spýtame na prvé číslo a
hneď aj na druhé, tak v odpovedi bude vždy iba posledné zadané
číslo. Keby užívateľ zadal číslo 2
a potom číslo
8
, program by nepočítal 2 + 8
, ale
8 + 8
! Ako to teda urobíme?
Použijeme nám známu premennú 😉 Do tej si uložíme prvú odpoveď a do ďalšej premennej potom druhú odpoveď. Takto môže používateľ zadať niekoľko čísel a my s nimi budeme môcť pracovať 🙂 Poďme na to.
Tvorba premenných
V bloku Premenné si vytvoríme premenné cislo1
a
cislo2
:
V programovaní sa pre názvy premenných nikdy nepoužívajú háčiky a čiarky a už vôbec medzery 😉
Teraz vezmeme blok nastav na a prilepíme ho k nášmu programu:
Klikneme na blok otázka v našom programe a stlačíme klávesy Ctrl + C. Potom klikneme kamkoľvek vedľa a stlačíme klávesy Ctrl + V. Časť kódu sa nám nakopíruje:
Blok, ktorý sa nám nakopíroval, si trochu upravíme. Do bloku
otázka napíšeme Zadej druhé číslo:
av bloku
nastav na nebudeme nastavovať premennú cislo1
, ale
cislo2
:
Upravenú časť kódu prilepíme k nášmu súčasnému kódu:
Potom namiesto núl dáme do blokov nastav na bloky odpoveď z blokov Vnímanie:
Operátormi a výpis výsledkov
Teraz už len zostáva, aby nám mačičák výsledky vypočítal. Prejdeme do blokov Vzhľad a prilepíme za seba päť blokov bublina sekúnd:
Ďalej prejdeme do blokov Operátory a pretiahneme si do hlavného okna štyri bloky spoj:
Prepíšeme v nich políčko jablko
postupne na
Součet:
, Rozdíl:
, Součin:
,
Podíl:
Vedľa každého bloku spoj pridáme zodpovedajúcich operátorov. Vedľa súčtu bude operátor plus, a tak ďalej:
Prejdeme do blokov Premennej a do všetkých blokov s operátormi
pridáme na prvé miesto premennú cislo1
a na druhé miesto
cislo2
:
.<>
Každý z operátorov presunieme do zodpovedajúceho bloku spoj na druhú pozíciu:
Bloky spoj teraz presunieme do blokov bublina:
Do posledného bloku bublina napíšeme
Děkuji za možnost procvičit si matematiku!
:
Keď teraz program spustíme, náš mačičák nám príklady, ktoré mu zadáme, pekne vypočíta:
Chyby pri tvorbe kalkulačky
Keď sme lekciu tvorili, napadlo nás niekoľko chýb, ktoré by sme mohli pri tvorbe kalkulačky urobiť. Poďme si ich ukázať a vysvetliť si, prečo sa to tak nerobí 😉
Blok na spájanie
Na sčítanie sme pri kalkulačke použili operátor plus. Spojili sme tak vlastne dve čísla dohromady v jedno. Čo keby sme ale použili namiesto operátora plus blok spoj ? Poďme si to vyskúšať.
Najprv v hornom paneli klikneme na Súbor a Uložiť ako kópiu. Tým sa nám projekt naklonuje. Kópiu môžeme teraz tak trochu rozbiť bez toho, aby sme si zničili našu funkčnú kalkulačku:
Z kópie nášho programu odstránime všetky bloky bublina okrem prvého a posledného:
Teraz vyberieme z bloku spoj operátor plus:
Premenné cislo1
a cislo2
preložíme z bloku
plus do bloku spoj a ten presunieme späť do bubliny:
Keď to urobíme, vidíme, že náš mačičák už tak dobre nesčíta:
Možno si pamätáte, ako sme si hovorili o dátových typoch.
Práve kvôli nim nám kalkulačka teraz nefunguje. Pokiaľ čokoľvek
umiestnime do bloku spoj, aj keď to je potrebné
číslo, Scratch to prevedie na text. V tej chvíli je
jedno, či je v bloku spoj treba 12
a 5
alebo
Ahoj
a mami!
. Scratch vždy hodnoty vezme a jednoducho
ich nalepí hneď za seba. Odpoveď mačičiaka teda vlastne nie je sto
dvadsaťpäť, ale dvanásť päť 😉
Text v sčítacom bloku
Keď sme si ukázali, čo sa stane s číslom v bloku spoj, vyskúšajme si ešte pravý opak. Čo sa stane, keď zadáme text tam, kde sa očakáva číslo? Použijeme niekoľkokrát klávesovú skratku Ctrl + Z, kým nedostaneme do bubliny späť náš operátor plus:
Keď program spustíme a zadáme namiesto čísel text bude odpoveď mačičiaka pomerne neutrálna:
Prečo nám mačičák odpovedal práve 0
? Pokúšame sa
nariadiť počítaču, aby sčítal niečo, čo nie je číslo. Scratch si
pozdrav mačičákovi v sčítacom bloku prevedie na hodnotu NaN
.
Ide o skratku anglického Not a Number, česky nie je
číslo. A pretože náš program nenašiel žiadne čísla na
sčítanie, mačičák teda vyhlási, že výsledok je nula, aj keď by správne
mal povedať, že sme nezadali čísla.
Samozrejme by sme mohli program urobiť tak, aby užívateľovi vyhuboval, keď namiesto čísla zadá text. K tomu ale budeme musieť najskôr poznať podmienky a ďalšie vychytávky programovania, o ktorých sa ešte len budeme učiť. Zatiaľ sa tak len môžeme tešiť, že onedlho zatneme šprýmařům, ktorí náš program rozbíjajú, tipec 😉
Delenie nulou
Nakoniec sa pozrieme, čo sa stane, keď budeme chcieť deliť nulou. Môžeme si to naschvál vyskúšať na skutočnej kalkulačke. Keď budeme chcieť deliť akékoľvek číslo nulou, kalkulačka zahlási chybu:
Nebudeme zabiehať do podrobností, iste už z matematiky vieme, že nulou sa jednoducho deliť nedá. Ako rozdelíme čokoládu medzi nula ľudí? Nijako, pretože ju nemáme medzi koho rozdeliť. Tí ľudia neexistujú, ale musíme medzi nich rozdeliť čokoládu. To je nemožné a presne to nám povie aj kalkulačka. To sme ale odbočili 🙂
Poďme zistiť, ako bude reagovať Scratch, keď to naschvál porušíme.
Najprv nahradíme operátor plus operátorom delené a miesto
Součet:
zadáme do bubliny Podíl:
A teraz skúsime ako druhé číslo zadať nulu:
Ako vidíme, práve sme prišli na trik, ako nášho mačičiaka naučiť po anglicky 🙂
Teraz bez zábavy. Mačičák nám povedal, že výsledok delenia nulou je
Infinity
, po slovensky nekonečno. Podľa názoru niektorých
programátorov by delenie nulou malo tiež vracať NaN
. Iní si
myslia, že hodnota Infinity
je lepšia voľba.
Najjednoduchšie vysvetlenie tejto logiky je asi toto. Majme príklad
12:6
. Asi nás neprekvapí, že výsledok je 2
. Ako sa
môžeme späť dostať k číslu 12
? Povieme si, že
šestka sa zmestí do dvanástky dvakrát. Čo ak túto logiku
teda použijeme pri delení nulou? Koľkokrát sa zmestí 0
do
12
? Nekonečne krát, pretože môžeme stále pridávať nuly,
ale nikdy sa nedostaneme na dvanástku ani iné číslo.
Vidíme, že naša kalkulačka bude potrebovať podobné situácie ešte ošetriť. Na to budeme musieť použiť pokročilejšie triky. Nemusíme si zúfať, v rámci tohto kurzu sa ich spolu ešte všetky naučíme 😉
V budúcej lekcii, Podmienky (vetvenie) v Scratchi , sa naučíme vetviť naše programy pomocou podmienok, popíšeme si relačných operátorov a vytvoríme program, ktorý podľa zadaného veku zistí, či sme dospelí.