Proměnné (práce s proměnnou)
• datové typy,
• přetypování,
• čtení a zápis proměnné.

KURZ: Čtení a zápis proměnné

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 LoopBig 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).

 

cteni zapis promenne

 

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  ConstantDragged 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 MoveDragged 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.

 

konstanta cteni


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 NumberToTextDragged Number to Text.

Number to text

 

Programový blok NumberToTextDragged Number to Text obsahuje dva konektory pro propojení s dalšími bloku:

Number 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 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.

Pretypovani priklad

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)
 

1 1 1 1 1 1 1 1 1 1 Hodnocení 5.00 (1 hodnocení)

KURZ: Práce s proměnnými a datovými typy

Seznam článků kapitoly

  1. Datové typy
  2. Vytvoření proměnné nebo konstanty
  3. Čtení a zápis proměnné

Úvod

V programování pracujeme s různými typy dat. Někdy potřebujeme použít číselnou hodnotu, jindy zase textový řetězec nebo pouze jeden znak. Obory hodnot a jejich rozsah jsou proto v programování definovány takzvanými datovými typy. Jejich definování v programovacích prostředích NXT-G a RobotC spolu s příklady naleznete v kapitole Datové typy.

Kapitola Vytvoření proměnné nebo konstanty se, jak již název napovídá, zabývá vytvořením a možnostmi využití v obou programovacích prostředích. Naleznete zde návod pro jejich definování a na jednoduchým příkladech je zde vysvětleno jejich použití.

Poslední kapitola nazvaná Čtení a zápis proměnné je pojata praktičtějším způsobem. Naleznete zde jednoduché příklady, na kterých je vysvětleno, kdy a jakým způsobem se v obou programovacích prostředích využívají proměnné a konstanty. Naleznete zde také vysvětlení zda v NXT-G či RobotC existuje nějaká možnost změny datového typu neboli přetypování.

1 1 1 1 1 1 1 1 1 1 Hodnocení 3.00 (2 hodnocení)

KURZ: Datové typy

Datový typ je informace pro počítač či řídící jednotku NXT, která udává, jak mají být data uložená v proměnné či konstantě chápána. Všechny datové typy jsou určeny oborem hodnot a výpočetními operacemi, které s nimi lze provádět. Každý z datových typů nabývá také určitého rozsahu hodnot. Tím, že si vytvoříme proměnnou nebo konstantu a přiřadíme jí určitý datový typ také vyjadřujeme, kolik paměťového prostoru bude vyžadovat.

Datové typy nejčastěji používané V PROGRAMOVACÍCH PROSTŘEDÍCH

NXT-G

Datové typy v NXT-G

V programovacím prostředí NXT-G se využívají tři základní datové typy. Jejich volba se provádí při definování proměnné (více o vytváření proměnné v kapitole Vytvoření proměnné či konstanty), kterou nalezneme v horním menu v záložce Edit pod volbou Define Variables. Po zvolení, či vytvoření nové proměnné zde můžeme kromě jména proměnné volit i její datový typ ze tří možností:

  • Logic - logický datový typ, který nabývá pouze dvou hodnot True (Pravda) a False (Nepravda).
  • Number - datový typ využívaný při práci s číselnými hodnotami.
  • Text - datový typ určený pro práci s řetězci znaků.

Promenna NXTG

Datový typ Logic využijeme v situacích, kdy budeme potřebovat jasně určit, zda došlo k vykonání určitému jevu nebo splnění nějaké podmínky. Může se jednat o natočení robota do určité polohy. V této situaci nás bude zajímat pouze to, zda byl tento pohyb vykonán či nikoliv. Návratovou hodnotou tedy bude buď Pravda nebo Nepravda.

V případě, že budeme zpracovávat určitou číselnou hodnotu, pracovat s výstupními hodnotami senzorů vrácenými v podobě čísla nebo provádět například matematické operace, použijeme datový typ Number.

Datový typ Text slouží pro práci s řetězci znaků a využijeme ho nejčastěji v případech, kdy budeme chtít nějakou informaci vypsat na displej. Může se jednat i o číselnou hodnotu, kterou si nejprve převedeme na textové vyjádření a následně vypíšeme.

RobotC

Datové typy v RobotC

V programovacím prostředí RobotC máme k dispozici více datových typů než v NXT-G. Při jejich použití je proto dobré promýšlet, s jak vysokými hodnotami budeme pracovat. Pokud například budeme pracovat s hodnotami od 0 do 100, je zbytečné deklarovat si pro tyto potřeby proměnné, které budou nabývat datového typu Integer. Stačil by nám datový typ Byte, který nabývá rozsahu od -128 do 127.

Ze všech datových typů uvedených v tabulce níže můžeme zmínit čtyři až pět nejpoužívanějších. Jedná se o datový typ integer pro celá čísla, string pro řetězce znaků či logický datový typ boolean. Dále patří mezi často používané datový typ float, který definuje všechna reálná čísla, která jsou také někdy označována jako čísla s pohyblivou řádovou čárkou. Při přiřazování hodnot do proměnné tohoto datového typu musíme dbát na to, abychom číslo zapisovali správně a to s řádovou tečkou namísto čárky. Přehled všech datových typů pro programové prostředí RobotC znázorňuje následující tabulka.

  

Datový typ Popis Příklad Deklarace v kódu
Boolean  Logický datový typ nabývající hodnot True a False. true, false bool
Byte  Celá čísla od -128 do 127  10, -102 byte
Char  Celá čísla od -128 do 127. Jejich hodnota může být vyjádřena pomocí znaku.  42 = "B" char
Float  Reálná čísla (čísla s pohyblivou řádovou čárkou).  -123, 0.56, 3.0, 
1000.07
float
Long  Celá čísla od -2,147,483,648 do 2,147,483,647.  -6 521, 258 long
Integer  Kladná a záporná celá čísla včetně nuly od -2,147,483,648 do 2,147,483,647.  -25, -1, 0, 15, 269 int
Short  Celá čísla od -32,768 do 32,767.  -2586, -6, 15, 6352 short
String  Řetězec znaků obsahující čísla, písmena nebo symboly.  priklad23 string
Word  Celá čísla od -32,768 do 32,767.   -2586, -6, 15, 6352 word
Ubyte  Celá čísla nabývající pouze kladných hodnot od 0 do 255.  0, 35, 168 ubyte
Void Datový typ, který nemá návratovou hodnotu. - void

 Poznámka: datové typy zvýrazněné tučně patří mezi v programování nejčastěji používané.

 

Datové typy jsou definovány pro každý programovací jazyk a dělí se do několika kategorií. Rozlišujeme datové typy ordinální, což jsou takové, u kterých je jednoznačně určen předchůdce i následovník každé hodnoty a také neordinální, u kterých tomu taky není. Mezi nejčastěji používané ordinální datové typy patří logická hodnota (boolean)celé číslo (integer) a znak (char). Z neordinálních datových typů je jedním z nejčastěji využívaných datový typ definující reálná čísla (real). V programování se ale setkáme i s dalšími datovými typy jako je pole (array) nebo řetězec znaků (string).


Práce s polem

Programovací jazyk RobotC umožňuje díky podobnosti s jazykem C pracovat stejným způsobem s polem. Pole je místo v paměti určené pro objekty, které nabývají stejného datového typu. O jaký typ dat se jedná, je definováno datovým typem pole. Pole mají různou velikost a jejich začátek je označen ukazatelem, narozdíl od konce, který určen není.

Deklarace pole se skládá ze tří částí. Jedná se o datový typ, kterého budou jeho hodnoty nabývat, název pole a jeho rozsah.

Příklad deklarace pole datového typu integer. Pole obsahuje 5 prvků, které jsou definovány v závorce.

 
int pole[5] = {0,1,2,3,4};
 

Praktické využití pole si ukážeme na příkladu, ve kterém budeme zaznamenávat hodnoty ze světelného senzoru. Konstrukci programu vidíte níže. Nadeklarovali jsme si pole datového typu integer, které obsahuje 100 prvků. Následně pomocí cyklu for() provádíme zápis do pole po 1 vteřině.

 
// deklarace senzoru
#pragma config(Sensor, S1, light, sensorLightActive) 
 
 
task main()
{
// deklarace pole (100 prvku)
int values[100];
 
// cyklus pro zaznam 100 hodnot ze senzoru do pole
for(int i = 0; i < 100; i++){
 values[i] = SensorValue[light];
 wait1Msec(1000);
}
}
 

 

1 1 1 1 1 1 1 1 1 1 Hodnocení 1.00 (1 hodnocení)

KURZ: Vytvoření proměnné nebo konstanty

Během programování nepracujeme pouze s příkazy, ale také s hodnotami, které v příkazech používáme. Tyto hodnoty ukládáme do proměnných či konstant. Jedná se o úložiště informace a dat. Pro každou proměnnou musí být v paměti rezervován paměťový prostor. Kolik datového prostoru pro použítí definované proměnné potřebujeme, určujeme deklarováním datového typu, kterého proměnná nabývá (více v kapitole Datové typy). I když se v dnešní době nemusíme díky velké kapacitě pamětí ohlížet na to, zda disponujeme dostatkem paměťového prostoru, je vhodné deklarování proměnné či konstanty důležitou věcí. Nevhodnou volbou datového typu bude naše proměnná v paměti zaujímat zbytečně velký prostor, než který by ve skutečnosti pro její použití stačil. Správné použití proměnných či konstant a jejich deklarace je tak vizitkou programátora a také nepsaným pravidlem při vytváření budoucího programu.

Vytváření proměnných či konstant v PROGRAMOVACÍCH PROSTŘEDÍCH

NXT-G

Použití proměnných a konstant

Rozcestník


Definování proměnné nebo konstanty

Volbu pro nadefinování nové proměné či konstanty nalezneme v horní liště menu v záložce Edit pod volbami Define Variables (pro proměnné) a Define Constants (pro konstanty).

Definovani promenne

Po kliknutí na možnost Define Variables (definování proměnných) se otevře nové dialogové okno pro její vytvoření či editaci. V defaultním nastavení programovacího prostředí jsou již nadefinovány tři proměnné, od každého datového typu jedna. Definování proměnné se provede kliknutím na tlačítko Create. Následně je nutné zadat název proměnné a zvolit, jakého bude datového typu.

Variable definovani

Deklarace konstanty se provádí vybráním možnosti Define Constants (definování konstant). Po zvolení se otevře příslušné dialogové okno. Konstanta, narozdíl od proměnné, nabývá určité hodnoty. Kromě jejího jména (Name) a datového typu (Datatype), je tedy nutné zadat ještě hodnotu, které bude nabývat (Value). Pracovat s konstantami lze pomocí tří tlačítek. Create slouží k vytvoření nové konstanty, Edit k úpravě již existující a Delete k odstranění.

Constant definovani


Umístění bloku

Programový blok pro vytvoření nové proměnné se nazývá VariableDragged Variable a nalezneme ho v paletě  icon complete Complete > Data Data.

 

POUŽITÍ PROMĚNNÉ PRO ČTENÍ 

 

Variable blok

 

Blok  VariableDragged Variable je možné využít ke čtení hodnoty, kterou máme v proměnné uloženou nebo k zápisu do ní. Pokud ho chceme využít pro čtení, musíme v parametrech bloku, v sekci Action, zaškrtnout volbu Write. U programového bloku se v tomto případě zpřístupní pouze výstupní konektor pro propojení s dalšími bloky. Jeho využitím můžeme číst hodnotu uloženou v proměnné a využívat ji dále v našem programu.

 

Použití proměnné pro zápis

 

promenna zapis

 

Pokud v parametrech bloku VariableDragged Variable v sekci Action zaškrneme volbu Write, zvolíme, že budeme proměnnou používat pro zápis. Díky tomu se zpřístupní jak vstupní, tak výstupní konektor bloku. Můžeme tak do proměnné ukládat například hodnoty snímané senzorem, které pak dále využijeme nebo výsledků různých výpočtů.

 

Popis bloku

Programový blok pro použití proměnné má pouze jeden konektor pro propojení s dalšími bloky.

Number Value - vyjadřuje hodnotu pro čtení proměnné nebo zápis do ní.

 

Parametry bloku

Variable

List: seznam nadefinovaných proměnných, ze kterých je možné volit (Name označuje její název, Type datový typ proměnné).

Action: volba, kterou vyjadřujeme, zda se bude z proměnné číst nebo se do ní bude zapisovat.

Value: pole, které slouží k zadání hodnoty proměnné (sekce je aktivní pouze v případě vybrání zápisu (Write) v sekci Action.

 


Použití konstanty

Programový blok pro vytvoření nové konstanty nazývá ConstantDragged Constant a nalezneme ho v paletě  icon complete Complete > Data Data.

Constant blok

 

POPIS BLOKU

Programový blok pro použití konstanty má pouze jeden konektor pro propojení s dalšími bloky.

NumberValue - vyjadřuje hodnotu pro čtení konstanty nebo zápisu do ní.

 

PARAMETRY BLOKU

Constant

Action: sekce, ve které si volíme, zda chceme použít již nadeklarovanou kontantu ze seznamu (Choose from list) nebo vytvořit vlastní (Custom). Sekce je aktivní pouze v případě, že existuje alespoň jedna již nadeklarovaná konstanta v seznamu.

Data Type: pole pro definování datového typu nově vytvářené konstanty.

Value: sekce, která slouží k zadání hodnoty deklarované konstanty.

Name: pole, ve kterém se zadává název nové konstanty.

RobotC

POUŽITÍ PROMĚNNÝCH A KONSTANT

Rozcestník


Deklarace proměnné

Deklarace proměnné v programovacím prostředí RobotC se skládá ze dvou částí. První je datový typ, kterého nabývá a druhá název proměnné. V našem příkladu je deklarována proměnná rychlost, která je datového typu integer.

 
 int rychlost;
 

Přiřazení do proměnné

Při přiřazování přidáváme do dříve deklarované proměnné konkrétní hodnotu. V programovacím prostředí RobotC je operátorem pro přiřazení znaménko =. V příkladu je proměnné rychlost, která byla nadeklarována jako integer, přiřazena hodnota 100. V druhé části je další možné použití proměnné, kdy do proměnné a přiřazujeme hodnotu proměnné b navýšenou o 3.

 
 rychlost = 100;
 
 a = b + 3;
 

Použití proměnné

Poté, co je proměnná deklarována, případně je do ní přiřazena nějaká hodnota, je možné ji použít v programu. Globálně deklarovaná proměnná může v programu nahrazovat opakované vyjadřování určité hodnoty.

Všechny tři kroky si nyní popíšeme na jednoduchém příkladu. V úvodu je nadeklarována proměnná rychlost datového typu integer. Do této proměnné je v dalším kroku přiřazena hodnota 100. Tato proměnná je v posledním kroku přiřazena dvěma motorům, čímž jsme docilili toho, že se oba motory budou otáčet vpřed s maximální rychlostí. Tento pohyb je ještě upraven příkazem wait1Msec(), kterým je docíleno toho, že se budou otáčet pouze 2 vteřiny.

 
task main()
{ 
 int rychlost;
 
 rychlost = 100;
 
 motor[motorC] = rychlost;
 motor[motorB] = rychlost;
 wait1Msec(2000);
}
 

Použití konstanty

Narozdíl od proměnné, která může svoji hodnotu měnit a být používána k různým dynamickým výpočtům, tak od konstanty se očekává určitá fixní hodnota, které bude nabývat a která se nebude měnit (například hodnota pí - 3,14). V programovacím prostředí RobotC se k deklarování konstanty používá klíčové slovo const. Stejně jako u proměnné, musí být i u konstanty určen datový typ, kterého bude nabývat. Poslední součástí deklarace konstanty je přiřazení její hodnoty pomocí operátoru =. Následné použití konstanty v programu je již stejné jaké u proměnné.

 
 const int rychlost = 50;
 

 

1 1 1 1 1 1 1 1 1 1 Hodnocení 5.00 (3 hodnocení)