KURZ: Čtení a zápis proměnné
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 16.03.2014
- Zobrazení: 8824
Během programování budeme často využívat hodnoty, které budeme ukládat do proměnných nebo konstant. Záležet bude hlavně na tom, zda chceme pracovat s hodnotou, která se bude průběžně měnit či s hodnotou konstantní. Jejich použití je v programovacích prostředích NXT-G a RobotC odlišné, a proto má tato kapitola za úkol vám tuto problematiku přiblížit prakticky. Na konkrétních konstruktech můžete vidět reálné příklady použití v programování.
Čtení a zápis proměnné, čtení konstanty, přetypování
NXT-G
Čtení a zápis proměnné
Jaký je rozdíl mezi použitím proměnné pro čtení a zápis jsme si vysvětlili v teoretické části. Nyní si na jednoduchém konstruktu vysvětlíme, jak je použít prakticky. Na obrázku můžete vidět cyklus Loop, který je řízen splněním logické podmínky. Podmínka je závislá na měření intenzity hluku zvukovým senzorem. Na úvod programu si nadeklarujeme proměnnou Vstup, do níž přiřadíme určitou hodnotu. Tuto hodnotu poté budeme porovnávat s hodnotou snímanou zvukovým senzorem. U zvukového senzoru jsme si nadeklarovali určitou hodnotu sloužící k porovnání. Pokud je hodnota zjištěná senzorem vyšší, než než hodnota proměnné Vstup, je splněna podmínka úspěšného vykonání cyklu. Zjištěná hodnota je pak díky propojení portů programových bloků uložena do proměnné Vystup. Na tomto jednoduchém příkladu bychom chtěli ukázat možnosti využití proměnných pro čtení (proměnná Vstup) a pro zápis (proměnná Vystup).
Poznámka: Další možností využití proměnných může být například ukládání vnitřního stavu zařízení vykonávajícího určitý program. Může jít o natočení robota pod určitým úhlem a podobně pro předejití zbytečným pohybům.
Čtení konstanty
Konstanta je narozdíl do proměnné pevně stanovená hodnota, která je do ní přiřazena v úvodní deklaraci či průběhu programu. V programovacím prostředí NXT-G je konstanta reprezentována blokem Constant. Na obrázku můžete vidět konstantu, do níž je uložena hodnota natočení motoru ve stupních. Tato hodnota je následně přiřazena pomocí vstupního konektoru bloku Move, který následně provede natočení o úhel uložený v konstantě Stupne. Konstantu bychom mohli použít libovolně na dalších místech programu. Nemuseli bychom tedy znovu zadávat ručně u každého bloku požadovaný úhel natočení, ale stačila by pouze úvodní deklarace konstanty.
Přetypování proměnné
V programovacím prostředí NXT-G můžeme svým způsobem registrovat možnost přetypování proměnné. Jedná se o změnu datového typu hodnoty proměnné v průběhu programu. Setkáváme se s ním například při vypisování číselné hodnoty na displej. Abychom mohli číslo takto vypsat, musíme jej nejprve převést z číselné hodnoty na textovou. K tomu slouží v programovacím prostředí NXT-G blok Number to Text.
Programový blok Number to Text obsahuje dva konektory pro propojení s dalšími bloku:
Number - vstupní konektor bloku, na který je přivedena hodnota v číselném vyjádření určená k převodu na textové vyjádření.
Text - výstupní konektor, na kterém je již hodnota reprezantována jako datový typ Text.
Na obrázku můžete vidět vzorové propojení bloků při převodu číselné hodnoty na textovou.
RobotC
ČTENÍ A ZÁPIS PROMĚNNÉ
Programovací jazyk RobotC je, narozdíl od NXT-G, prezentován v textové podobě pomocí příkazů a metod. Použití proměnných je proto využito v podobě parametrů příkazů nebo hodnot. Praktické použití si ukážeme na příkladu, ve kterém zvukový senzor snímá hodnotu zvuku v okolí a pokud je hodnota vyšší než hodnota uložená v proměnné vstup, zapíše tuto hodnotu do proměnné vystup. V úvodu je nadeklarován zvukový senzor. Následně je provedena také deklarace obou proměnných. Do proměnné vstup jsme přiřadili hodnotu 20, která bude sloužit k porovnání s hodnotou snímanou senzorem. Vyžadujeme, aby byl zápis do proměnné proveden pouze v případě, že bude hodnota vyšší než 20. Budeme tedy potřebovat použít podmínku if(). Podmínka pro splnění uvedená v závorce tedy musí být, že hodnota zjištěná senzorem je větší než hodnota v proměnné vstup. Použijeme tedy příkaz SensorValue() a podmínka bude vypadat následovně - SensorValue(zvukovy)>vstup. Do těla podmínky poté umístíme příkaz, který bude proveden při jejím splnění. Jedná se o přiřazení hodnoty do proměnné vystup, tedy - vystup = SensorValue(zvukovy). Jelikož chceme, aby se snímání senzorem provádělo neustále, umístíme celou podmínku do nekonečného cyklu while().
Na tomto příkladu vidíme rozdíl mezi možnostmi čtení a zápisu do proměnné. V prvním případě, kdy porovnáváme hodnotu zjištěnou senzorem s hodnotou v proměnné, musíme přečíst hodnotu v ní uloženou. V druhém případě poté zapisujeme hodnotu ze senzoru do proměnné vystup.
#pragma config(Sensor, S1, zvukovy, sensorSoundDB) //*!!Code automatically generated by 'ROBOTC' configuration wizard !!*// task main() { int vstup = 20; int vystup; while(true) { if (SensorValue(zvukovy)>vstup) { vystup = SensorValue(zvukovy); } } }
ČTENÍ KONSTANTY
Jak prakticky využít v programovacím prostředí RobotC konstantu, si také ukážeme na jednoduchém konstruktu. Nadeklarujeme si konstantu vykon, ktera bude datového typu integer. Přiřadíme si do ní hodnotu například 50. Následně budeme v programu potřebovat, aby se robot pohyboval směrem vpřed s využitím pohybu dvou motorů. Pokud budeme zapisovat tento úkon v programu několikrát, je pro nás řešením právě konstanta. Tato hodnota se v průběhu programu nemění a my ji tak nemusíme u každého příkazu zadávat znovu. Použijeme pouze její název jako zde, kde jsme do příkazu motor[] přiřadili pouze nazev konstanty vykon. Budeme-li chtít změnit hodnotu intenzity otáčení motorů, změníme pouze hodnotu uloženou v konstantě vykon.
const int vykon = 50; motor[motorA] = vykon; motor[motorB] = vykon;
PŘETYPOVÁNÍ PROMĚNNÉ
V programovacím prostředí RobotC můžeme používat přetypování proměnné. Přetypování je změna datového typu, kterého proměnná nabývá, na jiný datový typ. Můžeme se zde setkat se dvěma druhy přetypování. Jedná se implicitní a explicitní.
Implicitní přetypování
Implicitní přetypování se provádí v případě, že potřebujeme přetypovat proměnnou s nižším rozsahem na proměnnou s vyšším rozsahem. Při tomto úkonu nedochází ke ztrátě informací a přetypování je provedeno automaticky. Pořadí datových typů podle velikosti pro implicitní přetypování je následující: byte > short > int > long > float.
int a = 5; float b = 3.267; float c; c = a + b; // implicitni pretypovani (promenna a bude prevedena na float 5.000)
Explicitní přetypování
Explicitní přetypování se provádí při změně proměnné s vyšším rozsahem na proměnnou s nižším rozsahem. Musíme při něm uvést cílový datový typ. Při explicitním přetypování navíc dochází ke ztrátě informací. Pořadí datových typů pro provedení přetypování je následující: float > long > int > short > byte.
float a = 5.3; int b; b = (int)a; // explicitni pretypovani (do proměnné b se uloží oříznuté a, tedy 5)