Slevový týden - Březen C# týden
Využij náš slevový týden a získej až 30 % bodů navíc zdarma! Zároveň také probíhá C# týden se slevou na e-learning až 80 %
Hledáme fulltime programátora do ITnetwork týmu -100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!

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

Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

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

Bolo by to uložené takto: kniha [cislo_policky] [cislo_knihy_v_da­ne_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.


 

 

Článok pre vás napísal Michael Škrášek
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v C#, PHP a JS.
Predchádzajúci článok
Small Basic - Podmienky
Všetky články v sekcii
SmallBasic
Miniatúra
Nasledujúci článok
Small Basic - Grafická okna
Aktivity (1)

 

 

Komentáre

Avatar
Miroslav Pavlišta:30.4.2017 12:03

potřeboval bych pomoct s tou mapou.když tam napíši to same tak to nedela nic

 
Odpovedať
30.4.2017 12:03
Avatar
Odpovedá na Miroslav Pavlišta
Michael Škrášek:30.4.2017 12:51

Ten samotnej kód nic nedělá, musíš všechny prvky vypsat, nebo vykreslit.

př.

For i = 0 To 10
  mapa[i][10] = "trava"
EndFor

For x = 0 To 10
  For y = 0 To 10
    If mapa[x][y] = "trava" Then
      brush = "Green"
    Else
      brush = "SkyBlue"
    EndIf
    GraphicsWindow.BrushColor = brush
    GraphicsWindow.FillRectangle(x * 20, y * 20, 20, 20)
  EndFor
EndFor
Odpovedať
30.4.2017 12:51
I choose a lazy person to do a hard job. Because that person will find an easy way to do it ... Bill Gates
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 3 správy z 3.