4. diel - Small Basic - Cykly, funkcie a polia
V minulom tutoriále o Small Basicu sme sa naučili používať podmienky. V dnešnom dieli sa zameriame na cykly a tým doplníme veľkú časť našej základnej programátorské výbavy.
Cykly
Keď chcete v programe niečo opakovať, napr. Vypísať čísla od 1 do 100, tak je určite lepší spôsob ako začať písať pod seba:
TextWindows.WriteLine(1) TextWindows.WriteLine(2) ...
Práve na to sa používajú cykly Sú hneď dva typy cyklov - For a While.
For
For je cyklus s pevne stanoveným počtom opakovaní. Zapíšeme ho takto:
For i = 1 To 10 TextWindow.WriteLine(i) EndFor
Program vypíše čísla od 1 do 10. Cyklus prebehne 10x a riadi ho tzv. Riadiacej premenná i. V každom priebehu cyklu sa do aj pripočíta jednotka. Začína na hodnote 1 a končí na hodnote 10 (pokiaľ je neuvedieme inak). Premennou aj samozrejme v cykle nemusíme využívať.
While
Cyklus while nám opakuje kód kým platí podmienka.
promenna = 0 While promenna = 0 .... EndWhile
Cyklus sa bude opakovať tak dlho, dokiaľ bude v premennej hodnota 0.
Poľa
Predstavte si, že si chcete uložiť nejaké údaje o viac prvkoch. Napr. chcete v pamäti uchovávať 10 čísel, políčka šachovnice alebo mena 50tich užívateľov. Asi vám dôjde, že v programovaní bude nejaká lepšia cesta, než začať búšiť premenné Užívateľ 1, Užívateľ 2 ... až uzivatel50. Nehľadiac na to, že ich môže byť potrebné 1000. A ako by sa v tom potom hľadalo? Brrr, takze nie
Ak potrebujeme uchovávať väčšie množstvo premenných rovnakého typu, tento problém nám rieši poľa. Môžeme si ho predstaviť ako rad priehradiek, kde v každej máme uložený jeden prvok. Priehradky sú očíslované tzv. Indexy, prvý má index 1.
promena[1] = "toto je promena 1" promena[2] = "toto je promena 2"
Ak niekto nevie ako sa píšu hranaté zátvorky:
- ALT GR (pravý alt) + F = [
- ALT GR + G =]
Využitie cyklu ako ukladanie do poľa
Pre hromadnú prácu s prvkami v poli sa často využíva cyklov.
Naplňme poľa náhodnými číslami od 1 do 500:
For i = 1 To 5 cisla[i] = Math.GetRandomNumber(500) TextWindow.Write(cisla[i] + " ") EndFor TextWindow.WriteLine("")
Uveďme si ešte nejaký zaujímavejšie príklad. Napr. máte 10 tlačidiel a nebudete ich chcieť vypisovať. Uložíte si do súboru mená tlačidiel, každé meno na ďalší riadok. Postupne budete načítať mená zo súboru (kód je skôr taká ukážka do budúcnosti).
For i = 1 To 10 button[i] = Controls.AddButton(File.ReadLine(Program.Directory + "\jmena_tlacitek.dat", i), 10, i * (26 + 10)) Constrols.SetSize(button[i], 100, 26) EndFor
Trieda Array
Small Basic nám poskytuje triedu Array s niekoľkými užitočnými funkciami. Poďme sa na ne pozrieť:
Zistíme, či je premenná pole:
Array.IsArray(promenna)
výstup:
True nebo False
Alebo napríklad či existuje index v poli:
Array.ContainsIndex(pole, index)
Výstupom bude znova:
True nebo False
Ďalej sa opýtajme, či dané pole obsahuje hodnotu:
Array.ContainsValue(pole, hodnota)
Výstupom bude zas a znova:
True nebo False
Dvojrozmerné pole
Pokiaľ si jednorozmerné pole môžeme predstaviť ako rad priehradiek, dvojrozmerné pole by vyzeralo ako tabuľka. Prvky si predstavte ako knižky v poličke zoradené za sebou - každá knižka v poličke má číslo + každá polička má číslo:
Bolo by to uložené takto: kniha [cislo_policky] [cislo_knihy_v_dane_policce]
kniha[1][1] = "nazev teto knihy" kniha[1][2] = "nazev teto knihy" ... kniha[2][1] = "nazev teto knihy" ... kniha[10][8] = "nazev teto knihy" ...
Príklad
Tvoríte hru a máte mapu ako pole 10x10 prvkov. Na každom poli potrebujete
uložiť názov prvku, teda čo na tom mieste je. Za pomoci dvojrozmerných
polí uložíte súradnice X a Y do indexov
promena [y] [x] = ...
For i = 1 to 10 For j = 1 to 10 mista[i][j] = "trava" Endfor EndFor mista[5][5] = "zed"
Kód vyššie naplní celú mapu trávou a nakoniec umiestni doprostred jednu stenu.
Nečíselné indexované pole
Pole nemusíme indexovať číselne, ale môžeme zvoliť stringové indexy. Tie možno jednoducho využiť napr. Pre uloženie vekov osôb:
veky["Karel"] = 14 veky["David"] = 12 veky["Lenka"] = 22
Alebo pokojne aj celých osôb, ak bude pole dvojrozmerné:
lide["Karel"]["vek"] = 14 lide["Karel"]["pohlavi"] = "M" lide["Karel"]["email"] = "[email protected]" lide["David"]["vek"] = 12 lide["David"]["pohlavi"] = "M" lide["David"]["email"] = "[email protected]"
Sub (Procedúra)
Procedúra či podprogram je ohraničený kód, ktorý sa vykoná keď funkciu niekde v programe zavoláte. Používa sa pokiaľ využívate nejaký kód na viacerých miestach (predsa ho nebudete písať viackrát), alebo napr. Pri reakcii na udalosť (napr. Kliknutie na tlačidlo, kliknutie na klávesu, posunutie myši ...)
Procedúru deklarujeme ako:
Sub nazev_procedury ... 'kód procedury EndSub nazev_procedury() 'tímto názvem poté proceduru zavoláte
V procedúrach môžete používať premenné z programu:
Sub ahoj TextWindow.WriteLine("Ahoj " + kdo) EndSub TextWindow.Write("Napište své jméno v 5. pádě: ") kdo = TextWindow.Read() ahoj()
Ukážme si, ako možno priradiť procedúru kliknutí udalosti kliknutia myši (malá ochutnávka k budúcom dielam, kde začneme grafické rozhranie).
GraphicsWindow.Title = "Klikátor" GraphicsWindow.MouseDown = kliknuti Sub kliknuti GraphicsWindow.ShowMessage("Ahoj", "MBox") EndSub
Na druhom riadku je napísaná udalosť MouseDown. Toto je udalosť, ktorá sa stane po kliknutí myšou. Udalosti sa ukladajú do premenných. Po kliknutí myši vyskočí Message Box a nakoniec musíte aj Sub ukončiť pomocou EndSub, ako u podmienok cyklov, ...
Nabudúce sa pozrieme na triedy TextWindow, Network a Math.