UPOTREBA PETLJI U PROJEKTIMA MIKROBITA.

Petlje su kontrolne strukture koje omogućavaju ponavljanje jednog ili više naredbi određen broj puta ili dok neki uslov nije ispunjen. Ove strukture su ključne za optimizaciju koda i efikasno rešavanje problema, naročito u projektima sa mikrokontrolerima poput Micro:bit-a. U MakeCode okruženju, petlje su lako dostupne na paleti Loops, gde možete birati između različitih vrsta petlji prilagođenih vašim potrebama.
U prethodnom delu tutorijala, koristili smo naredbu "forever", koja izvršava naredbe u svom okviru u beskonačnoj petlji, što je korisno za kreiranje programa koji stalno osluškuju ili reaguju na promene u okruženju. Međutim, MakeCode pruža i druge petlje, poput "repeat", koje omogućavaju preciznu kontrolu broja ponavljanja, i "while", koje ponavljaju blok naredbi dok je određeni uslov tačan.
Kroz ovu lekciju, istražićemo kako možete koristiti različite petlje za upravljanje svetlosnim efektima, brojanje unosa, reagovanje na dugmiće i još mnogo toga. Bez obzira na to da li pravite jednostavan brojač ili kompleksan interaktivni uređaj, razumevanje petlji će vam omogućiti da kreirate efikasan i pouzdan kod za vaš Micro:bit.Pročitajte i članak: Petlje u programskom jeziku C/C++

​Primer 1: Brojač

Zadatak: Zamislite da želite da brojite od 1 do 5 i prikažete broj na LED ekranu:
  1. Otvorite Loops paletu i prevucite while blok na radnu površinu.
  2. Dodajte uslov broj <= 5 u "while" blok koristeći Math i Variables blokove.
  3. Definišite promenljivu broj (paleta Variables) i inicijalizujte je na 1.
  4. Unutar "while" bloka:
    • Koristite Basic → Show Number blok da prikažete broj.
    • Dodajte blok za povećanje promenljive broj za 1 (Variables → Change by).
Rešenje u python-u:
​

let broj = 1
while (broj <= 5) {
basic.showNumber(broj)
    broj += 1
}



​Primer 2: Odbrojavanje do nule

Zadatak: Ispišite na ekranu mikrobita brojeve od neke početne vrednosti do nule.
  1. Kreirajte promenljivu broj i postavite njenu početnu vrednost na 5.
  2. Postavite while blok sa uslovom broj >= 0.
  3. Unutar "while" bloka:
    1. Koristite Basic → Show Number za prikazivanje trenutne vrednosti.
    2. Smanjite vrednost promenljive broj za 1 koristeći Change by (-1).
  4. Nakon "while" petlje, koristite Basic → Show String blok da ispišete tekst "Kraj!".


​Primer 3: Prekid na osnovu senzora

Zadatak: Napraviti da se ikona srca prikazuje na mikrobitu sve dok se ne pritisne taster A.
  1. Dodajte while blok sa uslovom not button A is pressed (paleta Logic → NOT i Input → Button A pressed).
  2. Unutar "while" bloka koristite Basic → Show Icon i izaberite ikonu srca.
  3. Nakon izlaska iz petlje, koristite Basic → Show String blok da ispišete "Start!".

Primer 4: Određivanje delioca nasumičnog broja

Objašnjenje

While petlja se koristi za iteraciju kroz sve moguće delioce broja. Proverava se da li trenutni broj deli zadati broj bez ostatka. Ako je uslov ispunjen, delilac se ispisuje na ekranu, nakon čega se povećava broj koji se proverava. Petlja se završava kada svi brojevi do datog broja budu provereni.

Instrukcije za prevlačenje blokova u MakeCode-u:

  1. Otvorite MakeCode editor: Posetite MakeCode za micro:bit.
  2. Odaberite kategoriju: Kliknite na kategoriju Loops u paleti sa leve strane.
  3. Prevlačenje bloka: Kliknite i prevucite blok while do na radnu površinu u sredini.
  4. Dodavanje uslova: Kliknite na kategoriju Logic, pa prevucite uslov (npr. 0 < 0) u prostor za uslov u bloku while do.
  5. Dodavanje komandi: Dodajte blokove iz drugih kategorija unutar petlje.

​Kod u MakeCode

let broj = 0
let i = 0
input.onButtonPressed(Button.B, function () {
    broj = randint(1, 50)
basic.showNumber(broj)
    i = 1
while (i <= broj) {
if (broj % i == 0) {
basic.showNumber(i)
        }
        i += 1
    }
})

​Objašnjenje koda:

  1. randint(1, 50): Generiše slučajan broj između 1 i 50.
  2. Inicijalizacija i: Postavlja promenljivu za delioce na 1.
  3. while (i <= broj): Petlja se izvršava dok je i manje ili jednako od generisanog broja.
  4. Provera uslova (if (broj % i == 0)): Proverava da li je trenutni broj delioc.
  5. Ispis na ekranu (basic.showNumber(i)): Ako je uslov ispunjen, delilac se prikazuje.
  6. i += 1: Povećava se broj koji se proverava.

Paleta Loops

Loops paleta komandi u okruženju Makecode
Slika 1: Loops paleta komandi u okruženju Makecode

Opis komandi

Primer 5: Prikazati sve prirodne parne brojeve do neke zadate vrednosti

Kreirajte program za micro:bit koji:
  1. Pri pokretanju generiše slučajan broj u opsegu od 0 do 50.
  2. Na događaj shake (tresenje) prikazuje sve parne brojeve do vrednosti tog slučajnog broja.
  3. (Opcionalno: B verzija) Dodaje funkcionalnost da pritiskom na dugme A generišete novi slučajan broj.

Instrukcije:

Osnovna verzija zadatka:
  1. Definisanje slučajnog broja:
    • Koristite blok set variable to pick random u sekciji Variablesi postavite slučajan broj u opsegu od 0 do 50. Ovo dodajte unutar bloka on start.
  2. Detekcija tresenja:
    • U Input sekciji izaberite blok on shake.
    • Dodajte petlju for index from 0 to randomNumber, gde je randomNumber prethodno definisana promenljiva.
    • Unutar petlje proverite da li je broj paran pomoću uslova (npr. if index % 2 = 0). Ako koristite blokove onda se za izračunavanje ostatatka deljenja koristi blok  <reminder of index/2 >  sa palete Math. Treba ispitati da li je ostatak deljenja index sa br. 2 jednak 0.
    • Ako je broj paran, koristite show numberza prikaz na ekranu.
B verzija zadatka (opciono):
  1. Dodavanje funkcionalnosti za dugme A:
    • Koristite blok on button A pressed iz sekcije Input.
    • Unutar bloka ponovo definišite slučajan broj koristeći set variable to pick random.
Kod u MakeCode-u (tekstualni opis):
  1. Na on start:
    • Postavite promenljivu randomNumber na slučajni broj u opsegu od 0 do 50.
  2. Na on shake:
    • Prođite kroz sve brojeve od 0 do randomNumber pomoću petlje.
    • Proverite da li je broj paran (broj % 2 == 0).
    • Ako jeste, prikažite ga koristeći ekran.
  3. (Opcionalno) Na button A pressed:
    • Ponovo postavite randomNumber na slučajni broj.
Zadatak
Slika 2: Zadatak "Parni brojevi do zadate vrednosti" - rešenje

Zadaci za samostalan rad: 

​1. Paljenje LED lampica (osnovni nivo)

Zadatak: Koristite forever da uključite i isključite sve LED lampice na micro:bitu u intervalu od 1 sekunde.
Instrukcije:
  1. Kliknite na paletu Loops i prevucite blok forever na radnu površinu.
  2. U njega prevucite show leds iz palete Basic i upalite sve lampice.
  3. Dodajte pause (1000 ms) iz Basic, pa zatim clear screen sa još jednim pause.


2. Blok-strelica

​Zadatak: Koristite repeat [5] times da prikažete strelicu koja se menja sa svake strane ekrana (gore, dole, levo, desno).
​Instrukcije:
  1. Dodajte osnovnu petlju:
    • Iz palete Loops prevucite blok repeat [4] times na radnu površinu.
    • Podesite broj ponavljanja na 4 (ili više, po želji).
  2. Postavite prikaz strelice:
    • Iz palete Basic prevucite blok show icon unutar petlje.
    • U prvom ponavljanju odaberite strelicu koja pokazuje gore (arrow north).
  3. Menjajte strelicu po iteraciji:
    • Dodajte blokove if then iz palete Logic unutar petlje kako biste proverili trenutno stanje brojača iteracija.
    • Na primer:
      • Ako je iteracija 1: postavite strelicu gore.
      • Ako je iteracija 2: postavite strelicu desno (arrow east).
      • Ako je iteracija 3: postavite strelicu dole (arrow south).
      • Ako je iteracija 4: postavite strelicu levo (arrow west).
  4. Povećajte jasnoću pomoću pauza:
    • Iz palete Basic dodajte blok pause (ms) nakon svakog prikaza strelice (npr. 500 ms), kako bi korisnici imali dovoljno vremena da vide promenu.
Korisni saveti:

3. Treperenje tačke na ekranu

​Zadatak: Nacrtajte tačku na sredini ekrana koristeći while [true] do, tako da ona naizmenično treperi svake 500 ms.
Instrukcije:
  1. Prevucite while iz Loops.
  2. Postavite uslov na true.
  3. Unutra dodajte show leds sa centralnom tačkom i pause naredbe.

​4. Brojanje od 0 do 9

​Zadatak: Koristite for index from 0 to 9 da ispišete brojeve od 0 do 9 na ekranu micro:bita.
​Instrukcije:
  1. Koristite for index from 0 to 9 iz Loops.
  2. Dodajte show number unutar petlje i povežite broj sa index.


5. Animacija pokretnog piksela

​Zadatak: Nacrtajte piksel koji se pomera horizontalno preko ekrana i vraća na početak koristeći for i pause naredbe.
​Instrukcije:
  1. Koristite for index from 0 to 4.
  2. Unutar petlje koristite plot za uključivanje piksela i pause, a zatim unplot.


6. Radio poruka

Zadatak: Koristite repeat da 10 puta pošaljete poruku "Hello!" putem radio veze.
​Instrukcije:
  1. Koristite repeat blok i dodajte radio send string sa porukom.
  2. Uključite pause nakon svake poruke.


7. Odzivni LED displej

​Zadatak: Koristite while [true] do da prikazujete "A" kad je dugme A pritisnuto, a "B" kad je pritisnuto dugme B.
​Instrukcije:
  1. Koristite while petlju i postavite uslov za dugme A ili B.
  2. Dodajte odgovarajuće show string komande za svaki slučaj.


8. Paljenje lampica po šemi

​Zadatak: Koristite for da upalite i ugasite lampice na ekranu tako da se formira uzorak dijagonale.
​Instrukcije:
  1. Napravite for petlju za pozicije piksela.
  2. Koristite plot za dijagonalne piksele unutar petlje.


9. Povratne informacije putem dugmadi

​Zadatak: Neka micro:bit prikazuje brojač koji se povećava svaki put kad se pritisne dugme A i resetuje kada se pritisne dugme B, koristeći while.
​Instrukcije:
  1. Koristite on button A pressed i change variable za povećanje brojača.
  2. Dodajte reset sa on button B pressed.


10. Radio komunikacija i svetlosni signal

Zadatak: Koristite while [true] do da micro:bit prima poruku putem radio veze i na osnovu nje pali određene LED lampice (npr. poruka "on" pali sve lampice, a "off" ih gasi).
​Instrukcije:
  1. Koristite while da stalno proveravate radio received string.
  2. Dodajte uslov za prikazivanje lampica na osnovu primljene poruke.


11. Upravljanje LED svetlom uz break

Zadatak: Napravite program koji seče petlju kad broj piksela na LED ekranu dostigne 3.
Instrukcije:

12. Preskakanje neparnih brojeva uz continue

Zadatak: Koristite petlju da ispišete samo parne brojeve od 1 do 10. Preskočite neparne brojeve koristeći continue.
​
Instrukcije:

13. Rad sa listama pomoću for element value in list

Zadatak: Prikazati imena boja (npr. crvena, plava, zelena) iz liste jedno po jedno na ekranu.
Instrukcije: ​

Detaljne instrukcije:


14. Odbrojavanje uz pomoć every [time] ms

​Zadatak: Napravite odbrojavanje koje svakih 2 sekunde smanjuje broj na ekranu dok ne dosegne 0.
Instrukcije:

15. Animacija sa kontrolom liste

​Zadatak: Koristite listu koordinata za piksele (npr. [(0,0), (1,1), (2,2)]) i osvetlite ih redom koristeći for element value in list.
Instrukcije:

Određivanje NZD-a pomoću Euklidovog algoritma

Euklidov algoritam

Euklidov algoritam,  jedan je od najstarijih poznatih matematičkih algoritama. Ovaj algoritam se koristi za efikasno pronalaženje najvećeg zajedničkog delioca (NZD) dva ili više celih brojeva. 
Više o Euklidovom algoritmu u jeziku C i C++ pročitajte u članku: Euklidov algoritam

Određivanje najvećeg zajedničkog delioca NZD

Šta je Euklidov algoritam?Euklidov algoritam je jedan od najstarijih i najefikasnijih metoda za pronalaženje najvećeg zajedničkog delioca (NZD) dva cela broja. Razvio ga je drevni grčki matematičar Euklid, a algoritam se i danas koristi u raznim oblastima matematike i informatike zbog svoje jednostavnosti i efikasnosti.
Osnovni princip algoritmaGlavna ideja Euklidovog algoritma zasniva se na sledećim činjenicama:
  1. NZD deli oba broja: Ako su AAA i BBB dva cela broja, tada njihov NZD deli oba broja.
  2. Ostatak je takođe deljiv sa NZD: Ostatak pri deljenju AAA sa BBB (označen kao qqq) takođe je deljiv sa NZD.
To znači da, ako tražimo NZD za brojeve AAA i BBB, možemo koristiti sledeću relaciju:
A=p⋅B+qA gde su p i q celi brojevi, a q je ostatak pri deljenju A sa B.
Kako funkcioniše Euklidov algoritam?Algoritam koristi ponovljeno deljenje:
  1. Podelimo veći broj A sa manjim brojem B, pri čemu dobijamo količnik p i ostatak q.
  2. Zameni brojeve: Novi A postaje stari B, a novi B postaje q.
  3. Ponavljaj proces dok q≠0. Kada ostatak postane 0, tada je preostali broj B upravo NZD.
 Određivanje NZD-a dva broja a i b pomoću Euklidovog algoritma
Slika 3: Određivanje NZD-a dva broja a i b pomoću Euklidovog algoritma
Na slici pod a je prikazan klasičan način određivanja NZD-a i to je u ovom slučaju 4.
Na slici pod b se vidi da se NZD sadrži i u broju 48 i 28, ali i u ostatku deljenja ta dva broja. Dakle, možemo reći da:

48=1*28+20

što odgovara izrazu 1:

A = p*B+q , p i q su celi brojevi

Vidi se na slici pod b) da će B i q biti deljivi sa NZD. Ako sada uzmemo da tražimo NZD za B i q, tj. za 28 i 20 videli bi smo da je NZD isti. Ponavljanjem postupka deljenja prethodnog delioca sa ostatkom deljenja sve dok u jednoj iteraciji ostatak deljenja ne bude nula, doći ćemo do broja koji predstavlja NZD. Poslednji rezultat deljenja je zapravo broj koji tražimo. U našem primeru, to je broj 4. Vidi sliku pod c).
​

Prethodni postupak je poznat kao Euklidov algoritam.Ključni zaključak
​
Ponavljanjem postupka deljenja dok ostatak ne postane nula, dolazimo do NZD-a. U našem primeru, NZD za 48 i 28 je 4.
Euklidov algoritam je jednostavan za implementaciju i lako se može primeniti čak i na mikro:bit uređaju, omogućavajući praktično razumevanje ovog osnovnog matematičkog koncepta.

Primer 3: Određivanje NZD-a za brojeve a i b

Opis zadatka - Varijanta A:

Na micro:bit uređaju, potrebno je inicijalizovati dve promenljive sa vrednostima 48 i 28. Korišćenjem Euklidovog algoritma izračunajte njihov najveći zajednički delilac (NZD). Kada se uređaj protrese (on shake), prikažite NZD na ekranu micro:bita.

Instrukcije za rešavanje:

  1. Postavljanje početnih vrednosti:
    • Pronađite on start blok u paleti Basic.
    • Definišite dve promenljive, a i b, i postavite ih na 48 i 28.
    • Koristite blok show number za prikaz početnih vrednosti.
  2. Primena Euklidovog algoritma:
    • Kreirajte događaj on shake iz palete Input.
    • Unutar ovog događaja dodajte petlju while koja proverava da li je b != 0.
    • Unutar petlje:
      • Sačuvajte vrednost a u privremenoj promenljivoj temp.
      • Postavite a = b.
      • Izračunajte ostatak deljenja temp % b i dodelite ga promenljivoj b.
    • Nakon petlje, vrednost a će biti NZD.
  3. Prikaz NZD:
    • Koristite blok show string za ispis "NZD=".
    • Koristite blok show number za prikaz izračunate vrednosti a.

Opis zadatka- varijanta b

Nadogradite zadatak tako da se vrednosti a i b generišu nasumično u opsegu od 1 do 100. Sve ostale instrukcije ostaju iste.
Instrukcije za rešavanje:
  1. Generisanje slučajnih vrednosti:
    • Umesto fiksnih vrednosti u on start, koristite blok pick random za dodelu nasumičnih brojeva promenljivama a i b.
    • Prikazujte inicijalne vrednosti na ekranu koristeći show number.
  2. Izračunavanje NZD i prikaz:
    • Postupak za izračunavanje NZD ostaje isti kao u varijanti A.

Primer rešenja (koristeći blokove):

Određivanje NZD-a dva broja a i b pomoću Euklidovog algoritma-rešenje zadatka u makecode-u
Slika 4: Određivanje NZD-a dva broja a i b pomoću Euklidovog algoritma-rešenje zadatka u makecode-u

Rešenje u Python-u

Određivanje NZD-a dva broja a i b pomoću Euklidovog algoritma-rešenje zadatka u python-u
Slika 5: Određivanje NZD-a dva broja a i b pomoću Euklidovog algoritma-rešenje zadatka u python-u