KURZ: Sčítání, odčítání, násobení a dělení

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 Data Math, který je umístěn v paletě Paleta Complete Complete > DataOperations Data.

Blok Math

Ten obsahuje dva vstupy, vstup AA a vstup BB, 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 genericNumber.

 

Parametry bloku

NXT-G Panel matematických operací

Podle zvoleného typu operace (položka Operation či klepnutím na symbol operace) lze zvolit z těchto základních činností bloku:

  • Symbol sčítáníSčítání (Addition) - Sečte vstup A a vstup B a součet umístí na výstup (# = A + B).
  • Symbol odčítáníOdčítání (Subtraction) - Od vstupu A odečte vstup B a rozdíl umístí na výstup (# = A − B).
  • Symbol násobeníNásobení (Multiplication) - Vynásobí vstupy A a B a násobek umístí na výstup (# = A · B).
  • Symbol dělení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 Symbol odmocniny a absolutní hodnoty čísla Symbol absolutní hodnoty. 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.

Matematický modul - využití vložené hodnoty

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 

Math - kombinace více vstupů

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


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;
 

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)

Nemáte oprávnění přidat komentář.
Komentáře mohou přidávat pouze registrovaní uživatelé, kteří neporušují pravidla diskuze.