App Inventor II - Zanke

App Inventor II - Zanke

Avtor: Milan Brumec

Učni cilji: Poznam osnovne programske konstrukte in jih smiselno uporabljam: Prireditveni stavek in spremenljivke, Odločitveni (pogojni) stavek, Seznam, Zanka, Funkcija (procedura).

Nadzor izvajanja aplikacij – vejanje in zankanje

V prejšnjih poglavjih smo videli, da je aplikacija linearno zaporedje funkcij ali pa, da vsebujejo bloke, ki se izvajajo samo pod določenimi pogoji. Bloki ponavljanj so še en primer, kjer se aplikacija ne izvaja linearno. Tako kot if in else if bloki omogočajo vejanje programa, omogočajo bloki ponavljanj da se program izvaja v zanki, to je, da izvede zaporedoma nekaj funkcij in nato skoči nazaj in te funkcije ponovno izvaja kot kaže slika 1.

(slika 20_1n.png)
Slika 1: Blok za ponavljanje povzroči da program deluje v zanki.

Doslej ste preučili aplikacije v kateri je programski števec začel na vrhu in (pogojno) izvaja operacije od vrha navzdol. Z bloki ponavljanj programski števec zanka nazaj na vrh in ponovno opravlja enake operacije. App Inventor nudi nekaj blokov ponavljanj vključujoč for each in while blok na katera bomo bolj osredotočeni. foreach uporabimo kadar želimo izvajati funkcijo nad vsakim elementom nekega seznama. Če imate na primer seznam telefonskih številk, lahko neki tekst pošljete na vsako od teh številk.

Blok while je bolj splošen kot for each. Z njim lahko programirate bloke da se ponavljajo dokler ni izpolnjen nek pogoj. Z while zanko lahko izračunate matematične formule kot so na primer; seštej prvih n števil ali pa faktoriela on n. Zanko while lahko uporabite tudi kadar obdelujete dva seznama simultano; z for each lahko naenkrat obdelujete le en seznam.

Primer s kopiranjem blokov

V poglavju o pogojnih stavkih smo izdelali aplikacijo, ki je klicala naključni telefonsko številko iz seznama. Klicanje naključne številke je lahko včasih uspešno, vendar včasih nihče ne odgovori. Druga strategija bi lahko bila ta, da vsem pošljete tekst »Thinking of you!« in počakate kdo bo prvi (ali najlepše) odgovoril.

En način da izdelamo tako aplikacijo je, da preprosto kopirate bloke za pošiljanje teksta za eno številko in jo potem prilepite za vsakega prijatelja, ki mu ga želite poslati kot kaže slika 2.

(slika 20_2.png)
Slika 2: Kopiranje in lepljenje blokov za pošiljanje SMS za željene številke.

Copy-paste metoda je še v redu, če lepimo le nekaj blokov. Če pa imamo opravka z veliko količino podatkov (številk) ali podatki, ki se spreminjajo, ne bomo uporabili copy-paste metode vsakič ko se katera številka pojavi na novo ali izbriše.

Primer z zanko for each

Blok for each omogoča boljšo rešitev. Definirajmo spremenljivko phoneNumbers z vsemi številkami in nato vstavimo v for each blok bloke ki želimo da se izvedejo (za eno številko). Slika 3 prikazuje rešitev s for each.

(slika 20_3.png)
Slika 3: Uporaba for each zanke za izvajanje blokov za vsak element v seznamu.

To kodo lahko preberemo tako: »Za vsak element (telefonsko številko) v seznamu phoneNumbers, nastavi objekt Texting1.PhoneNumber na trenutno telefonsko številko in pošlji sporočilo (SendMessage).

Na vrhu for each bloka navedete seznam, ki bo obdelan. Blok ima prav tako vgrajeno spremenljivko. Privzeto se vgrajena spremenljivka imenuje »item«. Lahko ji pustite to ime ali pa tudi spremenite. Spremenljivka vsebuje trenutni element iz seznama ki bo obdelan.

Če ima seznam tri elemente, se bodo bloki v zanki izvedli trikrat.

Podrobnejši pogled na zanko

(slika 20_3.png)

Poglejmo si podrobneje mehanizem for each zanke, saj je poznavanje zank temelj programiranja. Ko uporabnik tapne na gumb TextAllButton je prva operacija ki se sproži blok set Texting1.Message, ki nastavi sporočilo na »Thinking of you«. Ta blok se izvede samo enkrat.

Potem se začne blok for each. Preden se začnejo izvajati ugnezdeni bloki se spremenljivka item nastavi na vrednost prvega elementa v seznamu phoneNumbers (111-1111). Potem se bloki znotraj for each zanke izvedejo prvič. Lastnost Texting1.PhoneNumber je nastavljena na vrednost spremenljivke item (111-1111) in sporočilo je poslano.

Ko se izvede zadnji blok v for each zanki (Texting.SendMessage) se aplikacija vrne nazaj na vrh for each zanke in spremenljivka item avtomatsko dobi novo vrednost iz seznama (222-2222). Dve operaciji znotraj for each se potem ponovita, pošlje se sporočilo »Thinking of you« na 222-2222.

Aplikacija se potem vrne nazaj in spet nastavi spremenljivko item na naslednji element v seznamu (333-3333). Operacije se ponovijo in tretjič se pošlje SMS.

Ker je aplikacija dosegla zadnji element v seznamu, se zanka for each na tej točki ustavi oz. program skoči iz zanke. To pomeni da se program nadaljuje z bloki pod for each zanko. V našem primeru ni več nobenega bloka, torej se program zaključi.

Zanka while-do

Zanka while-do je za uporabo malo težja kot for each. Prednost bloka while-do je v njenegovi splošnosti. For each se ponavlja čez seznam, while pa se ponavlja tako dolgo dokler je za to izpolnjen pogoj. Pogojni test vrne vrednost true ali false. While-do blok že vsebuje pogojni test tako kot blok if. Če je test bloka while true, potem aplikacija izvede notranje bloke se vrne na začetek in ponovno izvede test. Tako dolgo kot je test true, tako dolgo se izvajajo (ponavljajo) notranji bloki v zanki. Ko je test false, aplikacija skoči iz zanke in nadaljuje s bloki ki sledijo (spodnjimi).

Uporaba while-do zanke za izračun enačbe

Imamo primer uporabe bloka while-do ki ponavlja operacije. Kaj misliš da delajo bloki na sliki 6? En način da izveš je, da slediš korakom izvajanja vsakega bloka in spremljaš vrednosti spremenljivk.

(slika 20_6.png)
Slika 6: Lahko poveš kaj delajo ti bloki?

Bloki znotraj zanke while-do se bodo ponavljali vse dokler je spremenljivka number manjša ali enaka spremenljivki N. V tej aplikaciji je N nastavljen na vrednost, ki jo uporabnik vtipka v besedilni okvir (NTextBox).

0%
0%