Ovládání, operátory a proměnné

V minulé lekci Ovládání a operátory jsme nakousli téma oranžových bloků pro ovládání toku programu. S těmito bloky jsou spojené další bloky – zelené bloky pro operátory a tmavě oranžové bloky pro tvorbu a používání proměnných. V dnešní lekci si něco povíme o zbytku oranžových bloků ze skupiny ovládání, které jsme minule v zájmu jednoduchosti výkladu vynechali. Jedná se o bloky, kterými je možné tvořit takzvané podmínkové příkazy (toto téma jsme naťukli v minulé lekci v souvislosti s cykly s podmínkou, takže byste již měli tak trošku tušit o co půjde).

S podmínkovými příkazy úzce souvisí právě bloky operátorů a proměnných. Takže abychom mohli plnohodnotně používat podmínkové příkazy je zapotřebí zmínit se i o těchto dvou skupinách příkazů. Jinak lekce o tvorbě podmínek a cyklů doporučuji nepřeskakovat, protože jsou základem pro tvorbu programů a pokud přeskočíte, stejně se budete vracet :-).

Operátory

Je tedy načase, pořádně se pustit do bloků, které všechno propojují tak, aby to fungovalo a to jsou „Operátory„.

Operátory použité v podmínkových příkazech

Podmínkové bloky naleznete v oranžové sekci „Ovládání“. Jsou to ty dva bloky jejichž popiska začíná slovem „když“. A skutečně je jejich principem spustit nějakou programovou sekvenci, pokud se něco stane. Tedy „když“ se něco stane „tak“ proveď následující kroky. To něco co se stane nazýváme podmínkou a podmínku byste měli umístit v šestihranném poli ba horní liště podmínkového příkazu. Podobně jako u cyklu říkáme že i podmínkový příkaz má své tělo (což jsou stejně jako u cyklu s podmínkou bloky vložené dovnitř do podkovy podmínkového příkazu).

Podmínkové a logické operátory a příklady jejich použití

Zelené operátory jsou takovou tou maltou s jejíž pomocí lze spojovat podmínku (vloženou do šestihranného otvoru v podmínkovém příkazu). Protože jednou ze základních operací, kterou počítače doopravdy umí je porovnávání, používáme tento typ operace pro tvorbu operátorů. Pro porovnávání používáme bloky operátorů se značkami =, < a >. Můžeme si vše vyjádřit i verbálně – Když se něco rovná nějaké hodnotě tak proveď to co máš v tělu podmínky. Nebo třeba když je něco větší než tak… a tak dále, věřím, že tento princip je snad jasný.

Konstrukce podmínkových příkazů tak, jak jsme si doteď povídali, je tou nejjednodušší, nejzákladnější konstrukcí podmínek. Podmínky umíme samozřejmě udělat daleko složitější (někdy je zapotřebí, aby program reagoval na hodně složitou situaci). K tomu nám slouží tři logické operátory se slovy a. nebo a ne. Na předchozím obrázku naleznete příklad použití takového logického operátoru. Když se podíváte na příklad použití vidíte, že se logické operátory používají ve spojení se základními operátory.

Popis příkladů: V prvním případě postava na kterou je tento příkaz navázán změní barvu jakmile se postava na scéně na ose x dostane do vzdálenosti větší než 50. Samozřejmě, že tento příklad je jen částí kódu. Aby se realizoval je třeba jej ještě v programu spustit, což můžeme provést buď událostí, nebo třeba průběhem cyklu.

Druhým příkladem jsem demonstroval již složitější chování. Postava změní barvu, pokud se dostane buď na souřadnice větší než 50, nebo na souřadnice menší než -50. Ano dohadujete se správně, pokud se postava bude pohybovat v koridoru na souřadnicích mezi -50 a 50, barvu nezmění. Jistě vás již napadá, jak by se to dalo použít třeba ve hře.

Operátory použité v konstrukci matematických výrazů a výpočtů

Další velkou skupinkou zelených operátorů jsou operátory sloužící ke skládání matematických výrazů, funkcí a výpočtů. A nenechte se mýlit používají se také hodně často. Od podmínkových operátorů se liší kulatými okraji. Tvůrci scratche tím chtějí naznačit, že se nedají vložit do šestihranných polí, která jsou určená pro logické a podmínkové operátory. Vložit se dají pouze do polí s kulatými okraji (ano i do těch polí, která jsou v podmínkových a logických operátorech).

Matematické operátory a příklad jejich použití

Operátory pro matematické výpočty lze použít buď pro tvorbu základních jednoduchých výpočtů (bloky s funkcí sčítání, odečítání, násobení a dělení), ale je možné je použít pro dělení se zbytkem, zaokrouhlování a celou řadu matematických operací, které naleznete na bloku s roletkou „abs“. Matematické operace jsou řazené abecedně (proto začínáme absolutní hodnotou), ale bude fungovat samozřejmě vše co na roletce nastavíte.

Zajímavou funkcí je i možnost generování náhodného čísla v zadaném intervalu.

Popis příkladů: První konstrukce vždy po průběhu v programu posune postavu po ose x o 10. Použít lze samozřejmě i opakovaně v cyklu. Podobně funguje i další příklad, který zase pro změnu může otáčet postavou v záporném směru.

Zajímavým příkladem, který by vás, pokud jej vyzkoušíte, mohl pobavit je příklad s klouzáním z náhodné souřadnice, na náhodnou souřadnici v rozsahu na x i y od -100 do 100. Takto si můžete například nastavit náhodný pohyb strážce hlídajícího místnost v bludišti.

Operátory použité pro práci s řetězci

Někdy při programování potřebujeme pracovat s textem, neboli s textovými řetězci (jak chytře říkají lidé od IT). Texty potřebujeme spojovat, potřebujeme je také analyzovat a dávat třeba dohromady jako výstup s dalšími programovými bloky. K těmto legráckám nám poslouží operátory pro práci s řetězci.

Řetězcové operátory a příklad jejich použití

Scratch nabízí řetězcové operátory určené pro spojování dvou textových řetězců (to je vhodné když chceme do textových bublin spojit více textů. Umožňuje také přímo vyříznout určitý znak z textového řetězce (pokud tuto funkci použijete v cyklu můžete například postupně hláskovat slovo). Můžete také zjistit délku textového řetězce (cyklus pro hláskování by měl vědět kolikrát by měl proběhnout). A také můžete zjistit, jestli slovo obsahuje určitý znak.

Příklad použití: První konstrukce ukazuje příklad propojení textu s proměnnou souřadnice. Po aktivaci si postava myslí na to na jakém konkrétním místě scény se právě nachází. Pro druhou konstrukci jsem vymyslel příklad, kdy se „dozvídá“ postava jaké písmeno má na klávesnici stisknout uživatel, aby mohl pokračovat dál. Poslední příklad ukazuje použití podmínky s řetězcovým operátorem – schválně bude výsledkem zamňoukání, nebo nebude? 🙂

Příklad použití řetězcových proměnných v programu, ve kterém jsem kocoura naučil hláskovat. Program můžete na scratchi nalézt zde.

Podmínkové příkazy

O podmínkových příkazech jsme se již něco napovídali a proto jen na závěr doplním, co jsem ještě nezmínil. Podmínkové příkazy jsou v sekci „Ovládání“ dva. Jeden umožňuje konstrukci podmínky typu jedna jediná reakce na podmínku. Druhý blok umožňuje dvě reakce na podmínku. Jedna reakce na variantu, když je podmínka splněná a druhá reakce pokud podmínka splněná není (viz. následující obrázek).

Podmínkové příkazy a příklady použití

Příklady použití: Náš ukecaný kocour bloudí po scéně a komentuje svůj pohyb. V prvním případě nám sdělí jen že jsme překročili souřadnici x na hranici 50. Ve druhém případě nám sdělí totéž, ale navíc ještě průběžně bude hlásit, že je v pořádku.

Vkládání podmínkových příkazů do podmínkových příkazů

Podmínkové příkazy se mohou podobně jako cykly vkládat jeden do druhého. Lze tímto způsobem vyrobit i velmi složitý strom reakcí různé varianty stavů v programu (viz. následující grafika). Pokud se tyto příkazy píší pomocí textového kódu mohou být poměrně složité, v blokové verzi programování, kdy se používají grafické bloky je to přeci jen přehlednější a neudělá se taková spousta chyb.

Podmínkové příkazy můžeme vkládat do sebe

Příklad použití: Vymyslel jsem si variantu programu (možná že ho i použiji :-)), kdy je kocour pilot, sedí v letadle a navigátor ho ze země pomocí rádia naviguje. Umí mu hlásit, když je moc vpravo, když je moc vlevo a také ho umí pochválit, když letí pěkně prostředkem.

Proměnné

Pokud tvoříte program (ve scratchi mu říkáme scénář), potřebujete čas od času pracovat se stavy, hodnotami, prostě s daty. Data potřebujete někam odkládat, potřebujete je načítat a tak vůbec. Pro tuto aktivitu se používají proměnné, což jsou vlastně takové paměťové schránky, které si, abychom mohli programu říci s kterými daty chceme pracovat, nějak pojmenováváme.

My jsme již vlastně s proměnnými pracovali, například již v lekci o blocích ve složce „Pohyb„, kde jsme používali proměnné x, y, a směr, které scratch přímo nabízí a sám do nich vkládá aktuální hodnoty polohy na ose x a y a úhel (směr), který postava zaujímá. Proměnné můžete nalézt i ve skupině „Vzhled„, nebo „Zvuk„. Tyto proměnné jsou scratchem přímo definované pro určitý typ hodnoty, většinou se souvislostí k postavě.

My si ale umíme vytvořit svou proměnnou, kterou si umíme i nadefinovat. Pro tento účel se používá příkazů ve složce „Proměnné„. Pokud na ní kliknete, věnujte pozornost tlačítku „Vytvoř proměnnou„. Pokud tuto volbu spustíte, otevře se vám menu, které vám nabídne možnost tvorby nové proměnné a hlavně možnost nastavit také i vlastnosti nové proměnné (viz. následující obrázek).

Menu pro tvorbu nové proměnné

Jako první vám menu nabídne možnost tvorby jména nové proměnné. Obvykle se nesmí používat ve jménu proměnné číslo na začátku, písmena s diakritikou, nebo mezera. Scratch nemá problém ani s jednou touto situací, takže lze proměnné nazývat celkem jakkoliv. Přesto v zájmu orientace doporučuji názvy používat krátké proměnných, pokud možno i výstižné. Zlepší se orientace v kódu programu.

Po názvu proměnné je ještě třeba nastavit i typ proměnné. Nastavení může ovlivnit rychlost se kterou program bude pracovat (čím větší data jsou do proměnné vložena, tím déle s nimi program pracuje – ovšem je to v mikrosekundách, takže zas tak moc se z toho nemusíte hroutit). Nicméně proto také musíme definovat, jestli se data týkají všech postav v programu, nebo jen jedné postavy. Výhoda volby, kdy je proměnná určená pro všechny postavy tkví v tom, že postavy mohou přes tuto proměnnou sdílet stavy, nevýhoda je, že tento typ proměnné logicky více zatěžuje systém než když proměnnou nastavíme jen pro jednu postavu.

Jinou kapitolou jsou cloudové proměnné (ty se vám zobrazí pouze když jste přihlášený ke svému účtu). Cloudové proměnné si systém na rozdíl od předchozích pamatuje (respektive si pamatuje hodnotu, která je do nich vložená). Do cloudových proměnných lze vkládat pouze čísla (něco od scratche o cloudových proměnných)

Projekt „Ukázková proměnná“

Práci s proměnnou si můžete prohlédnout v projektu „ukázková proměnná“, který můžete nalézt zde. V rámci tohoto programu jsem vytvořil proměnnou pod názvem „Ukázková proměnná“. Oválný bloček se zaškrtávátkem je přímo daná proměnná, kterou můžete v programu použít, jak potřebujete. Zaškrtávátko před proměnnou je příkaz, aby se obsah proměnné ukazoval přímo v předváděcím oknu programu. Tato volba se používá při demonstracích, nebo při ladění programu, kdy potřebujeme vidět programu trošku do karet a vědět s jakým obsahem proměnné zrovna pracuje.

Uprostřed máte ukázkový (poněkud nesmyslný) kód, který ukazuje základní bloky pro práci s proměnnou. Prvním blokem je volna „nastav proměnnou„. Většinou se používá na začátku programu, když potřebujeme napevno říci s jakými hodnotami v proměnných má program začínat. Samozřejmě, že tento blok můžete podle potřeby použít i vprostřed kódu.

Druhým blokem je blok umožňující změnu hodnot proměnné. Je určený pro práci s čísly. Funguje tak, že k předchozímu obsahu proměnné přidá (podle toho, jakou operaci tam nastavíte) hodnotu, kterou vložíte do políčka.

Příklad: Uprostřed naleznete kód s příkladem. Všímejte si hlavně bloků pro práci s proměnnými (těmi tmavě oranžovými), stavu ukázkové proměnné v okně programu a samozřejmě si hlídejte souvislost mezi fungováním programu navenek a obsahem proměnné. Program začíná nastavením proměnné na výchozí hodnotu. Tou je hodnota 0. Pak program dvě sekundy počká a k původnímu obsahu přičte číslo 1. Následuje podmínka, kdy program zkontroluje má-li ukázková proměnná hodnotu 1. Pokud má spustí přehrávání zvuku mňoukání, pokud ne neudělá nic. Sledujte jak se v průběhu programu mění v okénku obsah proměnné.

Ukázkové programy

Prvním ukázkovým programem je taková „skoro“ hra, kterou jsem pojmenoval „Kostka“. Program můžete nalézt zde a nebo si jej můžete vyzkoušet přímo z článku.

Program Kostka

V tomto programu si můžete prohlédnout, jak funguje použití generátoru náhodných čísel, jak pracují proměnné a jak je možné prověřit podmínkovým blokem stav zvolené proměnné. Dohromady by měl program pracovat takto – startem programu se spustí změny čísel na postavě kostka (jednotlivé stavy jsou jednotlivé kostýmy). Program spustí cyklus a nepřetržitě náhodně (v rozsahu 1-6) mění s půlsekundovými přestávkami kostým postavy a obsah proměnné „hod“. Tuto fázi je možné zastavit stiskem klávesy „t“. Poté program zkontroluje, jestli jste trefili číslo 1. Pokud ano přičte hodnot 1 ke skóre (proměnná „trefa“). Pokud jedničku netrefíte nic se nestane. Kostku můžete znovu spustit stiskem klávesy „z“. Nechal jsem v programu úmyslně zaškrtnutou možnost zobrazování obsahu proměnných, abyste měli možnost sledovat jejich hodnotu při běhu programu.

Druhým ukázkovým programem je program „Počítání s kocourem“, který můžete vyzkoušet zde, nebo samozřejmě přímo v textu lekce.

Program Počítání s kocourem

V programu Počítání s kocourem si kocour hraje na pana učitele a nabízí vám možnost spočítat plochu čtverce, nebo kruhu. Pro to, aby mohl vše spočítat se vás ale musí zeptat jestli chcete spočítat plochu čtverce, nebo kruhu a také se musí dozvědět velikost strany čtverce, nebo poloměr kruhu. Když se dozví co potřebuje vše spočítá a výsledek vám ohlásí.

V tomto programu doporučuji proklikat se ke kódu programu a prohlédnout si ho, Je komentovaný. Program je demonstrací toho, jak lze uživatelem do programu vkládat do proměnných hodnoty a jak s těmito proměnnými dál pracovat. A také jak je možné prezentovat uživateli výsledek celého procesu.

Úkoly:

1, Vytvořte si svojí vlastní proměnnou a zkuste ji použít v nějakém jednoduchém programu.

2, Zkuste vytvořit nějaký program, ve kterém by se kocour mohl rozhodovat mezi několika volbami, třeba aby přímo uživatel rozhodl do jakého rohu scény má kocour jít.

3, Zkus vytvořit program s házecí kostkou, nebo ruletou, který by pokaždé náhodně vylosoval jiné číslo.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *