Random. Premenná


Doteraz sme pracovali s takými programami, ktoré sa správali veľmi presne. Občas sa nám však môže stať, že budeme potrebovať náhodný výber. Lazarus, resp. Pascal má pre tento účel vyhradenú funkciu Random, ktorá má jeden parameter - celé číslo, prostredníctvom ktorého počítaču oznámime, z akej veľkej množiny bude náhodný výber realizovať. Každé zavolanie funkcie Random(N) vyberie číslo od 0 po N-1, t. j. jedno z N rôznych hodnôt. Predstavme si, že  pracujeme s hracou kockou, na ktorej sú čísla od 0 do 5 a vždy, keď chceme náhodnú hodnotu Random(6), hodíme si kockou a dostaneme číslo, ktoré na tejto kocke padlo.

Ukážeme si to na príklade (obr. 36). Do formulára vložíme grafickú plochu (Image1 zo záložky Additional) a tlačidlo Button1 (zo záložky Standard). Po (každom) stlačení tlačidla sa do grafickej plochy vykreslí úsečka s náhodnými súradnicami X a Y (obr. 37).

obr. 36 Funkcia Random
obr. 36 Funkcia Random


pričom:

  • Random (150) predstavuje súradnicu X a zvolí niektoré číslo v rozmedzí 0 až 149.
  • Random (200) predstavuje súradnicu Y a zvolí niektoré číslo v rozmedzí 0 až 199.

Skúsme podobným spôsobom nakresliť štvorec (nezabúdajme, že má 4 parametre) (obr. 38). 

Vidíme, že po spustení programu a niekoľkých stlačení tlačidla, program nevykreslí štvorce, ale obdĺžniky rôznych veľkostí (obr. 39).

obr. 39 Vykresľovanie obdĺžnika miesto štvorca
obr. 39 Vykresľovanie obdĺžnika miesto štvorca


Za každým použitím funkcie Random dostávame iný výsledok. Vyberú sa dvojice dvoch rôznych náhodných čísel, a preto program kreslí miesto štvorcov obdĺžniky. My však potrebujeme, aby si program zapamätal prvé náhodné číslo a použil ho na oboch miestach v príkaze Rectangle. V programovaní sa aj na tento účel používajú premenné.

Premenná je časť operačnej pamäte. Každá premenná má svoje meno - identifikátor, ktorý:

  • nesmie začínať číslicou
  • nesmie sa zhodovať s niektorým kľúčovým slovom (napr. begin, end, procedure, a pod.)
  • mal by čo najlepšie vyjadrovať hodnotu (napr. Vyska, Sucet, Polomer,...)
  • na všetkých miestach by mal mať použitý rovnaký zápis (napr. nie vyska, VYSka, Vyska), keďže Lazarus nerozlišuje veľké a malé písmená

Aby sme mohli používať premenné v programe, musíme počítač požiadať, aby nám pre ne vyhradil pamäťové miesta (priradil operačnú pamäť) a pomenovať ich. Toto nastáva pri deklarácii premennej. V programe potom už len používame mená premenných a systém vie, s ktorou časťou operačnej pamäte má pracovať. Deklarácia teda znamená fyzické priradenie operačnej pamäte pre premennú a jej dočasné pomenovanie identifikátorom.

Deklarácia

  • začína slovíčkom var (angl. variable - premenná), v časti programu medzi slovíčkami procedure a begin
  • za ním nasledujú identifikátory oddelené od seba čiarkami (napr. a, b, c,...
  • potom nasleduje dvojbodka
  • za ňou typ premenných

Aby systém vedel, aký veľký priestor v operačnej pamäti má vymedziť pre premennú je dôležité, aby poznal typ premennej (resp. údajový typ). Ten nám zároveň určuje, aké hodnoty do nej smieme ukladať (obr. 40). Lazarus, resp. Pascal používa jednoduché a zložené typy premenných. Medzi jednoduché patria typy pre celé (Integer) a reálne (Real) čísla, znak (Char) a logické hodnoty (Boolean). Zložené typy sú pre reťazec znakov (String), pole (Array), súbor (File), záznam (Record) a množinu (Set). 


obr. 40 Deklarácia premennej
obr. 40 Deklarácia premennej


V programe medzi riadkami begin a end už môžeme s premennou/premennými pracovať: môžeme do nich nejakú hodnotu vložiť (pomocou priraďovacieho príkazu := ) a ďalej ich používať v aritmetických výrazoch, kde uvedieme ich meno. Priraďovací príkaz vyzerá takto (obr. 41): 


obr. 41 Priradenie hodnoty do premennej
obr. 41 Priradenie hodnoty do premennej


Do premennej vložíme novú hodnotu. Ak v nej už predtým nejaká hodnota uložená bola, tak tá sa prepíše a program pracuje s novou priradenou hodnotou. Hodnota však nemusí byť len pevne stanovené číslo, ale môže byť daná napríklad ako aritmetický výraz, ktorý môže obsahovať aj premennú. Vtedy sa najskôr tento výraz vyhodnotí (počítač vyráta jeho hodnotu) a až táto výsledná hodnota sa potom priradí. Napríklad ak sú našimi premennými A, B, C, tak im môžeme priradiť takéto hodnoty:

A := 200;

B := A + 50;

C := A * B + 10;

Aritmetické výrazy v programovaní sa vyhodnocujú rovnako ako v matematike, teda násobenie (hviezdička *) a delenie (slovo div alebo znak lomka /) majú prednosť pred súčtom (plus +) alebo rozdielom (mínus -). Ak chceme vyhodnocovať zložitejší výraz, použijeme (ako v matematike) okrúhle zátvorky. Pre lepšiu čitateľnosť odporúčame medzi operátory (+, -, *, div) a operandy (premenné a konštanty) vkladať medzery.

Pozn. Pri aritmetickom výraze delenie používame div vtedy, ak ide o celočíselné delenie so zvyškom po delení mod (napr. 10 div 3 = 3 a zvyšok po delení  10 mod 3 = 1). Premenná je údajového typu Integer. Znak lomka (/) používame pri desatinnom delení (napr: 15,6 / 3 = 5,2). Premenná je údajového typu Real.

Prvý typ premennej, s ktorým sa naučíme pracovať bude Integer (skratka Int), teda budeme pracovať s celými číslami.

Teraz, keď už vieme, ako deklarujeme premenné a priraďujeme im hodnoty, môžeme pomocou nich nakresliť napr. náhodne veľké štvorce s náhodnými X-ovými a Y-ovými súradnicami. Najskôr zadeklarujeme (pomocou slovíčka var) tri premenné: A - strana štvorca, X - x-ová súradnica, Y - y-ová súradnica. Následne každej z premenných priradíme hodnotu. Ako posledné napíšeme príkaz na kreslenie štvorca (Rectangle) s jeho vstupnými parametrami (riešenie: obr. 42)

Po spustení programu (F9) a niekoľkých kliknutiach na tlačidlo Button1 vidíme, že do grafickej plochy sa vykresľujú štvorce rôznych veľkostí s rôznou polohou (obr. 43).

obr. 43 Štvorce náhodnej veľkosti s náhodnou polohou
obr. 43 Štvorce náhodnej veľkosti s náhodnou polohou


Podobne môžeme postupovať aj pri kreslení elíps, kruhov, či úsečiek. Skúste namiesto štvorcov kresliť kružnice rovnakej veľkosti s rôznou polohou.


Doteraz sme funkciu Random používali len na generovanie náhodných bodov v rovine. Okrem toho môžeme náhodne generovať farbu, hrúbky čiar, dĺžky strán obrazcov, náhodnú veľkosť textu a pod.

Na príklade si ukážeme ako môžeme náhodne generovať farby štetca, pera a hrúbky čiar (obr. 44). Použijeme aj špeciálny príkaz Randomize, ktorý nastaví generátor náhodných čísel na naozaj úplne náhodnú hodnotu. Tento príkaz umiestnime na začiatok procedúry. 

V programe sme na generovanie náhodnej farby použili príkaz Random(clWhite), pretože clWhite má najväčší kód farby. Môžeme predpokladať, že všetky farby sú namiešané z troch základných farieb (Model RGB, t. j. Red, Green, Blue) a výsledná farba závisí od toho, ako je v nej zastúpená každá z týchto troch farieb. Toto zastúpenie vyjadrujeme číslom od 0 po 255. Na "skladanie" jednotlivých farieb Lazarus používa funkciu RGBToColor, ktorej zadáme tri čísla od 0 po 255 a ona nám "namieša" príslušnú farbu (predstavme si, ako by sme pracovali na výtvarnej so štetcom a sami si namiešavali nové farby). Pozrime si, ako sú preddefinované najčastejšie používané farby:

clBlack = RGBToColor (0, 0, 0)

clWhite = RGBToColor (255, 255, 255)

clRed = RGBToColor (128, 0, 0)

clBlue = RGBToColor (0, 0, 255)

clGreen = RGBToColor (0, 128, 0)

Ak by sme chceli generovať náhodnú farbu číselným zápisom, príkaz by vyzeral takto:

Image1.Canvas.Brush.Color := Random (256 * 256 * 256);

a príkaz pre úplne náhodnú farbu by mohol vyzerať aj takto:

Image1.Canvas.Brush.Color := RGBToColor (Random (256), Random (256), Random (256));

alebo 

Image1.Canvas.Brush.Color := Random (clWhite);

Už viackrát sme použili v programe komentár, ktorý sa najčastejšie používa na písanie poznámok priamo do programu. Tam, kde chceme komentár písať, dáme na začiatok riadka dve lomky (tesne za sebou //) a text za týmito dvoma lomkami program ďalej ignoruje. "Zakomentovať" môžeme aj riadok, prípadne viac riadkov príkazu. Komentár nám môže neskôr pomôcť pri zorientovaní sa v programe (napr. po dlhšom čase, keď už si nepamätáme, čo presne mal program/príkaz urobiť).

Na ďalšom príklade si precvičíme prácu s textom a funkciu Random. Do grafickej plochy pomocou stlačenia tlačidla budeme vypisovať text Lazarus, Pascal, FreePascal, ktorým budeme meniť nastavenia typu, štýlu, výšky a veľkosti písma a každé sa zobrazí po stlačení iného tlačidla (budeme potrebovať tri tlačidlá). Do formulára vložíme aj tlačidlá na mazanie plochy a ukončenie programu (riešenie: obr. 45). 

Po spustení programu a niekoľkých stlačení tlačidiel získavame (obr. 46):


obr. 46 Výpis textu na náhodnej polohe
obr. 46 Výpis textu na náhodnej polohe
Vytvorte si webové stránky zdarma! Táto stránka bola vytvorená pomocou služby Webnode. Vytvorte si vlastný web zdarma ešte dnes! Vytvoriť stránky