KURZ: Sčítání, odčítání, násobení a dělení
- Podrobnosti
- PhDr. Tomáš Jakeš, Ph.D.
- Aktualizováno: 31.01.2014
- Zobrazení: 9647
Mezi základní matematické operace patří sčítání (+), odčítání (−), násobení (*) a dělení (/). Tyto operace lze provádět buďto mezi dvěma či více výstupy ze senzorů, častěji je však využíváme při práci s proměnnými (např. při zjišťování změny natočení motoru oproti předchozímu stavu). Jeden z prvků operace lze též nahradit konstantou. To se nám může hodit např. pro pohyb robota na předem stanovenou vzdálenost. Rozdílem pak zjistíme o kolik a jakým směrem se má robot vydat.
Použití matematických operací v programovacím prostředí
NXT-G
Blok pro základní matematické operace
Rozcestník
Umístění bloku
Základní matematické operace můžeme využít díky bloku Math, který je umístěn v paletě Complete > Data.
Ten obsahuje dva vstupy, vstup A a vstup B, ke kterým lze připojit buďto proměnnou či vstupní senzory. Tyto vstupy jsou podle zvolené operace vykonány a výsledek je umístěn na výstup.
Parametry bloku
Podle zvoleného typu operace (položka Operation či klepnutím na symbol operace) lze zvolit z těchto základních činností bloku:
- Sčítání (Addition) - Sečte vstup A a vstup B a součet umístí na výstup (# = A + B).
- Odčítání (Subtraction) - Od vstupu A odečte vstup B a rozdíl umístí na výstup (# = A − B).
- Násobení (Multiplication) - Vynásobí vstupy A a B a násobek umístí na výstup (# = A · B).
- Dělení (Division) - Vstup A vydělí vstupem B a podíl umístí na výstup (# = A : B).
Tento modul lze použít i pro výpočet odmocniny a absolutní hodnoty čísla . To si však ukážeme v dalších kapitolách.
Pevně zadaná hodnota
Potřebujeme-li upravit hodnotu proměnné či hodnoty získané ze senzoru o určitou předem danou hodnotu, nemusíme využívat konstanty, ale danou hodnotu můžeme doplnit do kolonky příslušného vstupu.
Na příkladu, který je rozveden níže, vidíte vydělení vstupní hodnoty číslem 3.
Poznámka: Používáme-li související hodnotu na více místech programu či ji plánujeme častěji měnit, je vhodnější místo vepsané hodnoty použít konstantu. Budeme tak vytvářet snáze upravitelné programy.
Provádění operace s více vstupy
Potřebujeme-li provést operaci s více vstupy, např. zprůměrovat hodnoty tří senzorů, musíme využít kombinace několika matematických bloků.
Jako jeden ze vstupů druhého bloku použijeme výstup prvního.
RobotC
Příkazy a metody
Rozcestník
- Příklad sčítání
- Příklad odčítání
- Příklad násobení
- Příklad dělení
- Zpracování konstant
- Zpracování více čísel
V programovacím prostředí RobotC můžeme provádět matematické operace přímým matematickým zápisem v anglosazské podobě.
Pro základní matematické operace tedy použijeme následující symboly:
- sčítání (+),
- odčítání (−),
- násobení (*),
- dělení (/).
Deklarace proměnných
Pro představení následujících matematických operací si nejprve zadefinujeme vlastní proměnné. Ty mohou být různých datových typu. Pro snazší pochopení si je přednastavíme na výchozí hodnoty.
//deklarace novych celociselnych promennych int vysledek = 0; //vychozi hodnota 0 int a = 8; //vychozi hodnota 7 int b = 3; //vychozi hodnota 3
V praxi většinou již tyto proměnné před samotnou matematickou operací budete mít vytvořeny a naplněny výstupem některého ze senzorů či tímto výstupem přímo ve vzorci nahradíte příslušnou proměnnou.
Příklad sčítání
Do proměnné vysledek se uloží součet hodnot obsažených v proměnných a a b.
//soucet hodnot vysledek = a + b; //vysledek = 11;
Příklad odčítání
Do proměnné vysledek se uloží rozdíl hodnot obsažených v proměnných a a b.
//rozdil hodnot vysledek = a - b; //vysledek = 5;
Příklad násobení
Do proměnné vysledek se uloží součin hodnot obsažených v proměnných a a b.
//soucin hodnot vysledek = a * b; //vysledek = 24;
Příklad dělení
Do proměnné vysledek se uloží podíl hodnot obsažených v proměnných a a b.
//podil hodnot vysledek = a / b; //pozor! vysledek = 2 nikoli 3;
Upozornění: Pokud je proměnná, do které je ukládán výsledek dělení, celočíselného datového typu (např. int), bude výsledek podílu zkrácen o desetinnou část. Nedochází tedy k jejímu zaokrouhlení dle matematických pravidel, ale pouze k přenosu celé části výsledku.
Příklad: Chceme-li tedy vypočítat podíl čísel 8 : 3, výsledkem bude číslo 2,666.... Podle matematických pravidel by mělo dojít k jeho zaokrouhlení na číslo 3. K tomu však nedojde a desetinná část se ignoruje. Výsledkem tedy bude číslo 2.
Pokud chceme výsledek zaokrouhlit dle matematických pravidel, musíme použít příkaz round.
//podil hodnot a matematicke zaokrouhleni vysledku vysledek = round(a / b); //vysledek = 3;
U reálných datových typů (např. float) k tomuto problému nedochází, jelikož je ukládaná celočíselná i desetinná část.
Zpracování konstant
V uvedeném výrazu lze libovolnou proměnnou nahradit konstantou. Ta se může nacházet buďto přímo ve výrazu (vhodné pro konstanty, které jsou z hlediska času neměnné a nevyskytují se na více místech programu):
//vydeleni poctu otacek motoru 4 (prevodu ozubenych kol) pocetOtacek = nMotorEncoder[motorC] / 4;
nebo zadeklarovaná v definici konstanty, což je vhodné pro konstanty, které se nacházejí na více místech programu a které budeme v průběhu tvorby programu měnit (např. konstanta pro určení meze hluku):
//deklarace promenne a konstanty const int cMezHluku = 65; //deklarace unosne meze int rozdil = 0; //odecteni meze od vystupu zvukoveho senzoru rozdil = SensorValue[zvukovySenzor1] - cMezHluku;
Zpracování více čísel
Při výpočtech někdy potřebujeme zpracovávat více hodnot. Výpočet však nemusíme rozdělovat do více řádků. Stačí nám celý výraz zapsat do jediné řádky. Při zápisu můžeme použít i závorky (), které určují prioritu výpočtu.
//zpracovani vice hodnot prumer = (SensorValue[zvuk1] + SensorValue[zvuk2] + SensorValue[zvuk3]) / 3;