IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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:

knižnica - SmallBasic

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.


 

Predchádzajúci článok
Small Basic - Podmienky
Všetky články v sekcii
SmallBasic
Preskočiť článok
(neodporúčame)
Small Basic - Grafická okna
Článok pre vás napísal Michael Škrášek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v C# a Kotlinu.
Aktivity