NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 6 - Jednoduchá kalkulačka ve Scratchi

V minulé lekci, Načítání hodnot od uživatele ve Scratchi, jsme se naučili načítat hodnoty zadané uživatelem a dále je zpracovávat.

V dnešním Scratch tutoriálu naučíme kočičáka počítat 🙂 Vytvoříme si jednoduchou kalkulačku a procvičíme si při tom témata minulých lekcí, a to načítání uživatelských vstupů a práci s proměnnými. Ke konci si ještě ukážeme chyby, kterých se musíme pro správné fungování naší aplikace vyvarovat.

Jednoduchá kalkulačka

Teď, když už umíme načítat vstup a různě ho zpracovat, pojďme si zkusit napsat slibovanou kalkulačku 😉 Bude velmi jednoduchá. Na vstup přijdou dvě čísla a program poté vypíše výsledky pro sčítání, odčítání, násobení a dělení.

Založíme si nový projekt a klasicky začneme přidáním bloku po kliknutí na (vlaječka):

Přidání bloku po kliknutí na vlaječka - Scratch

Z bloků Vnímání přilepíme blok otázka a přepíšeme jeho text na Zadej první číslo:

Blok otázka s výzvou zadej první číslo - Scratch

Teď se musíme trochu zamyslet 🙂 Chceme se zeptat na dvě čísla, ale odpověď, se kterou program pracuje je vždy jenom jedna. Když se teď zeptáme na první číslo a hned i na druhé, tak v odpovědi bude vždy pouze poslední zadané číslo. Kdyby uživatel zadal číslo 2 a pak číslo 8, program by nepočítal 2 + 8, ale 8 + 8! Jak to tedy uděláme?

Použijeme nám známou proměnnou 😉 Do té si uložíme první odpověď a do další proměnné pak druhou odpověď. Takto může uživatel zadat několik čísel a my s nimi budeme moci pracovat 🙂 Pojďme na to.

Tvorba proměnných

V bloku Proměnné si vytvoříme proměnné cislo1 a cislo2:

Proměnné cislo1 a cislo2 - Scratch

V programování se pro názvy proměnných nikdy nepoužívají háčky a čárky a už vůbec mezery 😉

Teď vezmeme blok nastav na a přilepíme ho k našemu programu:

Blok nastav cislo1 na - Scratch

Klikneme na blok otázka v našem programu a zmáčkneme klávesy Ctrl + C. Pak klikneme kamkoliv vedle a zmáčkneme klávesy Ctrl + V. Část kódu se nám nakopíruje:

Nakopírování bloku - Scratch

Blok, který se nám nakopíroval si trochu upravíme. Do bloku otázka napíšeme Zadej druhé číslo: a v bloku nastav na nebudeme nastavovat proměnnou cislo1, ale cislo2:

Změna nakopírovaného bloku - Scratch

Upravenou část kódu přilepíme k našemu současnému kódu:

Přidání nakopírovaného bloku ke stávající části - Scratch

Potom místo nul dáme do bloků nastav na bloky odpověď z bloků Vnímání:

Přidání bloků odpověď do bloků nastav na - Scratch

Operátory a výpis výsledků

Teď už jenom zbývá, aby nám kočičák výsledky vypočítal. Přejdeme do bloků Vzhled a přilepíme za sebe pět bloků bublina sekund:

5 bloků bublina - Scratch

Dále přejdeme do bloků Operátory a přetáhneme si do hlavního okna čtyři bloky spoj:

4 bloky spoj - Scratch

Přepíšeme v nich políčko jablko postupně na Součet:, Rozdíl:, Součin:, Podíl:

přepsané bloky spoj - Scratch

Vedle každého bloku spoj přidáme odpovídající operátory. Vedle součtu bude operátor plus a tak dále:

bloky spoj s bloky operací - Scratch

Přejdeme do bloků Proměnné a do všech bloků s operátory přidáme na první místo proměnnou cislo1 a na druhé místo cislo2:

bloky operací s proměnnými cislo1 a cislo2 - Scratch

Každý z operátorů přesuneme do odpovídajícího bloku spoj na druhou pozici:

bloky operací s proměnnými cislo1 a cislo2 - Scratch

Bloky spoj teď přesuneme do bloků bublina:

bloky spoj v bublinách - Scratch

Do posledního bloku bublina napíšeme Děkuji za možnost procvičit si matematiku!:

blok bublina s textem o matematice - Scratch

Když teď program spustíme, náš kočičák nám příklady, které mu zadáme, pěkně vypočítá:

kočičák počítá příklady - Scratch

Chyby při tvorbě kalkulačky

Když jsme lekci tvořili, napadlo nás několik chyb, které bychom mohli při tvorbě kalkulačky udělat. Pojďme si je ukázat a vysvětlit si, proč se to tak nedělá 😉

Blok na spojování

Pro sčítání jsme u kalkulačky použili operátor plus. Spojili jsme tak vlastně dvě čísla dohromady v jedno. Co kdybychom ale použili místo operátoru plus blok spoj? Pojďme si to vyzkoušet.

Nejprve v horním panelu klikneme na Soubor a Uložit jako kopii. Tím se nám projekt naklonuje. Kopii můžeme teď tak trochu rozbít, aniž bychom si zničili naši funkční kalkulačku:

Uložení projektu jako kopie - Scratch

Z kopie našeho programu odstraníme všechny bloky bublina kromě prvního a posledního:

Úprava programu kalkulačky - Scratch

Nyní vyndáme z bloku spoj operátor plus:

Vyndání operátoru plus - Scratch

Proměnné cislo1 a cislo2 přendáme z bloku plus do bloku spoj a ten přesuneme zpět do bubliny:

Kompletace úpravy programu kalkulačka - Scratch

Když to uděláme, vidíme, že náš kočičák už tak dobře nesčítá:

Kočičák nechápe sčítání - Scratch

Možná si pamatujete, jak jsme si říkali o datových typech. Právě kvůli nim nám kalkulačka teď nefunguje. Pokud cokoliv umístíme do bloku spoj, i když to je třeba číslo, Scratch to převede na text. V tu chvíli je jedno, jestli je v bloku spoj třeba 12 a 5 nebo Ahoj a mami!. Scratch vždy hodnoty vezme a jednoduše je nalepí hned za sebe. Odpověď kočičáka tedy vlastně není sto dvacet pět, ale dvanáct pět 😉

Text ve sčítacím bloku

Když jsme si ukázali, co se stane s číslem v bloku spoj, vyzkoušejme si ještě pravý opak. Co se stane, když zadáme text tam, kde se očekává číslo? Použijeme několikrát klávesovou zkratku Ctrl + Z, dokud nedostaneme do bubliny zpět náš operátor plus:

Úprava programu kalkulačky - Scratch

Když program spustíme a zadáme místo čísel text bude odpověď kočičáka poměrně neutrální:

Kočičák sčítá text - Scratch

Proč nám kočičák odpověděl zrovna 0? Pokoušíme se nařídit počítači, aby sečetl něco, co není číslo. Scratch si pozdrav kočičákovi ve sčítacím bloku převede na hodnotu NaN. Jde o zkratku anglického Not a Number, česky není číslo. A protože náš program nenašel žádná čísla k sečtení, kočičák tedy prohlásí, že výsledek je nula, i když by správně měl říct, že jsme nezadali čísla.

Samozřejmě bychom mohli program udělat tak, aby uživateli vyhuboval, když místo čísla zadá text. K tomu ovšem budeme muset nejdříve znát podmínky a další vychytávky programování, o kterých se teprve budeme učit. Zatím se tak jenom můžeme těšit, že zanedlouho zatneme šprýmařům, kteří náš program rozbíjejí, tipec 😉

Dělení nulou

Nakonec se podíváme, co se stane, když budeme chtít dělit nulou. Můžeme si to naschvál vyzkoušet na skutečné kalkulačce. Když budeme chtít dělit jakékoliv číslo nulou, kalkulačka zahlásí chybu:

Kalkulačka hlásí chybu dělení nulou - Scratch

Nebudeme zabíhat do podrobností, jistě už z matematiky víme, že nulou se prostě dělit nedá. Jak rozdělíme čokoládu mezi nula lidí? Nijak, protože ji nemáme mezi koho rozdělit. Ti lidé neexistují, ale musíme mezi ně rozdělit čokoládu. To je nemožné a přesně to nám řekne i kalkulačka. To jsme ale odbočili 🙂

Pojďme zjistit, jak bude reagovat Scratch, když to naschvál porušíme. Nejprve nahradíme operátor plus operátorem děleno a místo Součet: zadáme do bubliny Podíl:

Úprava programu kalkulačky - Scratch

A nyní zkusíme jako druhé číslo zadat nulu:

Kočičák hlásí Infinity - Scratch

Jak vidíme, právě jsme přišli na trik, jak našeho kočičáka naučit anglicky 🙂

Teď bez legrace. Kočičák nám řekl, že výsledek dělení nulou je Infinity, česky nekonečno. Podle názoru některých programátorů by dělení nulou mělo také vracet NaN. Jiní si myslí, že hodnota Infinity je lepší volba.

Nejjednodušší vysvětlení této logiky je asi toto. Mějme příklad 12:6. Asi nás nepřekvapí, že výsledek je 2. Jak se můžeme zpátky dostat k číslu 12? Řekneme si, že šestka se vejde do dvanáctky dvakrát. Co když tuto logiku tedy použijeme při dělení nulou? Kolikrát se vejde 0 do 12? Nekonečněkrát, protože můžeme pořád přidávat nuly, ale nikdy se nedostaneme na dvanáctku ani jiné číslo.

Vidíme, že naše kalkulačka bude potřebovat podobné situace ještě ošetřit. K tomu budeme muset použít pokročilejší triky. Nemusíme si zoufat, v rámci tohoto kurzu se je spolu ještě všechny naučíme 😉

V příští lekci, Podmínky (větvení) ve Scratchi, se naučíme větvit naše programy pomocí podmínek, popíšeme si relační operátory a vytvoříme program, který podle zadaného věku zjistí, zda jsme dospělí.


 

Předchozí článek
Načítání hodnot od uživatele ve Scratchi
Všechny články v sekci
Scratch
Přeskočit článek
(nedoporučujeme)
Podmínky (větvení) ve Scratchi
Článek pro vás napsal PDoctor
Avatar
Uživatelské hodnocení:
14 hlasů
Aktivity