Rubriky
Nezařazené

Microbití srdce II – Proměnné a výpočty

Tento článek volně navazuje na článek od Petry Boháčkové „Micro:bit a frekvence„, který je dle mého názoru dobrým vstupem do programování microbitu. Dále bych jej rozšířil podtitulem „Počítat mají stroje a ne lidé“.

V dalším textu budu předpokládat, že jste program z předchozího odkazu dokázali vytvořit a dále na něj navážeme. Necháme Microbita vše vypočítat za nás. Využijeme k tomu proměnné a nějaké matematické operace. Na začátek si vytvoříme proměnnou třeba s názvem „tep“.

A do našeho kódu vložíme blok „Nastav ___ na ___“, kde je předvolena proměnná „tep“ a napíšeme zde hodnotu našeho tepu. Třeba 70.

Vše ostatní už budeme jen počítat. Dále jsme potřebovali převést náš tep, který udává počet úderů srdce za minutu na frekvenci. Takže jsme tep vydělili 60, protože minuta má 60 sekund.

Vytvoříme si novou proměnnou, kterou můžeme nazvat „frekvence“ a do našeho kódu vložíme další blok „Nastav ___ na ___“. Vybereme, že budeme nastavovat proměnnou „frekvence“ ale dále už nebudeme psát konkrétní číslo ale budeme chtít nastavit hodnotu „tep“/60. To uděláme tak, že otevřeme matematické funkce a najdeme si dělení.

To přetáhneme do bloku „Nastav frekvenci na ___“ do pozice, kde jsme v předchozím případě psali jen číslo. Do druhé pozice této funkce napíšeme jednoduše číslo 60. A do první pozice přetáhneme proměnnou „tep“.

Dále vypočítáme stejným způsobem i periodu. Víme že perioda je převrácená hodnota frekvence. To znamená že perioda = 1 / frekvence. Vytvoříme si další proměnnou s názvem „perioda“ a nastavíme jí na tuto hodnotu.

Nakonec ještě potřebujeme vypočítat polovinu této periody abychom ji mohli použít při zobrazování srdce. Takže si vytvoříme ještě další proměnnou třeba s názvem „perioda2“, kterou nastavíme na hodnotu „perioda“ / 2.

Teď už jen zbývá použít hodnotu „perioda2“ a vložit ji do obou bloků „čekej“.

Problém s jednotkami a použití stejné proměnné znovu

Teoreticky máme už hotovo ale když kód spustíme, tak zjistíme, že se chová nějak divně. Prodleva mezi zobrazením srdce je moc krátká. Je to proto, že blok „čekej“ očekává hodnotu v milisekundách ale náš výpočet vychází v sekundách. Není nic jednoduššího než převést sekundy na milisekundy násobením 1000.

Tentokrát si ale už nebudeme vytvářet novou proměnnou abychom jich neměli zbytečně moc ale využijeme opět proměnnou „perioda2“, které jen upravíme hodnotu. Použijeme opět blok „nastav ___ na ___“. Kde jako proměnnou zvolíme „perioda2“ a jako hodnotu vložíme matematický příkaz násobení, ve kterém použiju hodnotu „perioda2“ x 1000.

Tento příkaz nedává matematicky moc smysl ale v programátorském jazyce to znamená: Vynásob aktuální hodnotu uloženou v proměnné „perioda2“ tisícovkou a výsledek opět ulož do proměnné „perioda2“.

Takto je možné měnit hodnotu v proměnné libovolněkrát. Jen si dávejte pozor na pořadí příkazů. Kdybych teď poslední dva příkazy „nastav proměnnou perioda2 na …“ prohodil, tak mi nebudou fungovat stejně.

Vylepšení I

Možná někoho napadlo, že když je vše umístěno v bloku „opakuj stále“, tak se musí pořád dokola vypočítávat výsledná perioda. Vzhledem k tomu, že se tato hodnota po celou dobu programu nemění, tak je zbytečné komplikovat Microbitovi život neustálým počítáním, které bude mít pořád stejný výsledek.

Celý výpočet můžete přesunout do bloku „Při startu“. Díky tomu se výpočet provede jen jednou a pak se už jen používá uložená hodnota při čekání.

Vylepšení II

Možná někoho napadne, že když se dají proměnné libovolněkrát přepisovat, tak k čemu jich máme tolik? Nestačila by jen jedna? Teoreticky stačila jen by kód nebyl tolik přehledný a na první pohled by nešlo poznat co popisuje. Ale můžeme to zkusit. Náš kód by pak mohl vypadat třeba takto:

Ponechal jsem si jen proměnnou „tep“, do které zapíšu jaký tep chci zobrazit a všechny ostatní proměnné jsem nahradil jedinou proměnnou s názvem „pauza“, kterou neustále přepisuji jinými hodnotami.

Vylepšení III

A proč vlastně proměnnou „pauza“ pořád přepisovat? Nešlo by to vypočítat vše najednou? Jasně že šlo. Všechny výpočty je možné provést při jediném nastavení proměnné. Celý kód by pak mohl vypadat takto:

A pokud je někdo dobrý matematik, tak by si mohl všimnout, že se nám tady vyskytuje výpočet 1 : (tep : 60), který je možné zjednodušit na 60 : tep a ušetřit si jeden blok. Výsledek pak bude vypadat takto:

A možná někoho napadne k čemu je tam vlastně to dělení dvojkou a násobení tisícem. Když už zjednodušujeme tak pořádně… Co třeba takto?

Pěkně zjednodušený kód dalo by se říct. Ale schválně kdo z vás pozná co se tam vlastně děje? A pokud víte. Zeptám se vás. Co bych měl změnit kdybych tu pauzu nechtěl v dalším kódu použít jen 2x ale 3x, tak aby mi srdce tepalo stále stejně?

Najednou by se tam objevilo číslo 20000. Kdo mi řekne proč? Každé zjednodušení tohoto typu má svou daň v tom, že snižuje čitelnost kódu. Není proto vždy ku prospěchu zjednodušovat vše do maximální míry.

Závěrem

K čemu je to celé dobré? Když máte výpočet v samotném programu tak můžete jednoduše změnit hodnotu proměnné „tep“ a celá simulace se ihned změní. Nemusíte už nic znovu přepočítávat. Kdybyste totéž chtěli udělat v programu z předchozího článku, tak byste museli vzít do ruky kalkulačku a vše znovu přepočítat podle jiného tepu. To zabere nejen váš čas ale můžete někde udělat i chybu. A jak jistě víte. Tep rozhodně není pořád stejný ale záleží na tom jak náročnou činnost právě děláte.

Doporučuji vyzkoušet si nejen základní program ale také všechny vylepšení a pokud něčemu nerozumíte, tak se zeptejte svého učitele.

Rubriky
Nezařazené

Ahoj všichni!

Vítejte ve WordPressu. Toto je váš první příspěvek. Můžete ho upravit, nebo smazat a postupně pak začít s tvorbou vlastního webu.