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

Lekce 4 - Small Basic - Cykly, funkce a pole

V minulém tutoriálu o Small Basicu jsme se naučili používat podmínky. V dnešním dílu se zaměříme na cykly a tím doplníme velkou část naší základní programátorské výbavy.

Cykly

Když chcete v programu něco opakovat, např. vypsat čísla od 1 do 100, tak je určitě lepší způsob než začít psát pod sebe:

TextWindows.WriteLine(1)
TextWindows.WriteLine(2)
...

Právě na to se používají cykly :) Jsou hned dva typy cyklů - For a While.

For

For je cyklus s pevně stanoveným počtem opakování. Zapíšeme ho takto:

For i = 1 To 10
    TextWindow.WriteLine(i)
EndFor

Program vypíše čísla od 1 do 10. Cyklus proběhne 10x a řídí ho tzv. řídící proměnná i. V každém průběhu cyklu se do i přičte jednička. Začíná na hodnotě 1 a končí na hodnotě 10 (pokud je neuvedeme jinak). Proměnnou i samozřejmě v cyklu nemusíme využívat.

While

Cyklus while nám opakuje kód dokud platí podmínka.

promenna = 0
While promenna = 0
    ....
EndWhile

Cyklus se bude opakovat tak dlouho, dokud bude v proměnné hodnota 0.

Pole

Představte si, že si chcete uložit nějaké údaje o více prvcích. Např. chcete v paměti uchovávat 10 čísel, políčka šachovnice nebo jména 50ti uživatelů. Asi vám dojde, že v programování bude nějaká lepší cesta, než začít bušit proměnné uzivatel1, uzivatel2... až uzivatel50. Nehledě na to, že jich může být třeba 1000. A jak by se v tom potom hledalo? Brrr, takle ne :)

Pokud potřebujeme uchovávat větší množství proměnných stejného typu, tento problém nám řeší pole. Můžeme si ho představit jako řadu přihrádek, kde v každé máme uložený jeden prvek. Přihrádky jsou očíslované tzv. indexy, první má index 1.

promena[1] = "toto je promena 1"
promena[2] = "toto je promena 2"

Pokud někdo neví jak se píší hranaté závorky:

  • ALT GR (pravý alt) + F = [
  • ALT GR + G = ]

Využití cyklu jako ukládání do pole

Pro hromadnou práci s prvky v poli se často využívá cyklů.

Naplňme pole náhodnými čísly od 1 do 500:

For i = 1 To 5
  cisla[i] = Math.GetRandomNumber(500)
  TextWindow.Write(cisla[i] + " ")
EndFor
TextWindow.WriteLine("")

Uveďme si ještě nějaký zajímavější příklad. Např. máte 10 tlačítek a nebudete je chtít vypisovat. Uložíte si do souboru jména tlačítek, každé jméno na další řádek. Postupně budete načítat jména ze souboru (kód je spíše taková ukázka do budoucna).

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

Třída Array

Small Basic nám poskytuje třídu Array s několika užitečnými funkcemi. Pojďme se na ně podívat:

Zjistíme, jestli je proměnná pole:

Array.IsArray(promenna)

Výstup:

True nebo False

Nebo třeba zda existuje index v poli:

Array.ContainsIndex(pole, index)

Výstupem bude znovu:

True nebo False

Dále se zeptejme, zda dané pole obsahuje hodnotu:

Array.ContainsValue(pole, hodnota)

Výstupem bude zas a znovu:

True nebo False

Dvourozměrné pole

Pokud si jednorozměrné pole můžeme představit jako řadu přihrádek, dvourozměrné pole by vypadalo jako tabulka. Prvky si představte jako knížky v poličce seřazené za sebou - každá knížka v poličce má číslo + každá polička má číslo:

knihovna - SmallBasic

Bylo by to uložené takto: kniha[cislo_policky][cislo_kni­hy_v_dane_polic­ce]

kniha[1][1] = "nazev teto knihy"
kniha[1][2] = "nazev teto knihy"
...
kniha[2][1] = "nazev teto knihy"
...
kniha[10][8] = "nazev teto knihy"
...

Příklad

Tvoříte hru a máte mapu jako pole 10x10 prvků. Na každém poli potřebujete uložit název prvku, tedy co na tom místě je. Za pomoci dvourozměrných polí uložíte souřadnice X a Y do indexů `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 výše naplní celou mapu trávou a nakonec umístí doprostřed jednu zeď.

Nečíselně indexované pole

Pole nemusíme indexovat číselně, ale můžeme zvolit stringové indexy. Ty lze jednoduše využít např. pro uložení věků osob:

veky["Karel"] = 14
veky["David"] = 12
veky["Lenka"] = 22

Nebo klidně i celých osob, pokud bude pole dvourozměrné:

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 (Procedura)

Procedura či podprogram je ohraničený kód, který se vykoná když funkci někde v programu zavoláte. Používá se pokud využíváte nějaký kód na více místech (přeci ho nebudete psát vícekrát), nebo např. při reakci na událost (např. kliknutí na tlačítko, kliknutí na klávesu, posunutí myši ...)

Proceduru deklarujeme jako:

Sub nazev_procedury
    ... 'kód procedury
EndSub

nazev_procedury() 'tímto názvem poté proceduru zavoláte

V procedurách můžete používat proměnné z programu:

Sub ahoj
    TextWindow.WriteLine("Ahoj " + kdo)
EndSub

TextWindow.Write("Napište své jméno v 5. pádě: ")
kdo = TextWindow.Read()
ahoj()

Ukažme si, jak lze přiřadit proceduru kliknutí události kliknutí myši (malá ochutnávka k příštím dílům, kde začneme grafické rozhraní).

GraphicsWindow.Title = "Klikátor"
GraphicsWindow.MouseDown = kliknuti
Sub kliknuti
  GraphicsWindow.ShowMessage("Ahoj", "MBox")
EndSub

Na druhém řádku je napsaná událost MouseDown. Toto je událost, která se stane po kliknutí myši. Události se ukládají do proměnných. Po kliknutí myši vyskočí Message Box a nakonec musíte i Sub ukončit pomocí EndSub, jako u podmínek cyklů, ...

Příště se podíváme na třídy TextWindow, Network a Math.


 

Předchozí článek
Small Basic - Podmínky
Všechny články v sekci
SmallBasic
Přeskočit článek
(nedoporučujeme)
Small Basic - Grafická okna
Článek pro vás napsal Michael Škrášek
Avatar
Uživatelské hodnocení:
6 hlasů
Autor se věnuje programování v C# a Kotlinu.
Aktivity