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.
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:
- Otvorite Loops paletu i prevucite while blok na radnu površinu.
- Dodajte uslov broj <= 5 u "while" blok koristeći Math i Variables blokove.
- Definišite promenljivu broj (paleta Variables) i inicijalizujte je na 1.
- 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
}
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.
- Kreirajte promenljivu broj i postavite njenu početnu vrednost na 5.
- Postavite while blok sa uslovom broj >= 0.
- Unutar "while" bloka:
- Koristite Basic → Show Number za prikazivanje trenutne vrednosti.
- Smanjite vrednost promenljive broj za 1 koristeći Change by (-1).
- 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.
- Dodajte while blok sa uslovom not button A is pressed (paleta Logic → NOT i Input → Button A pressed).
- Unutar "while" bloka koristite Basic → Show Icon i izaberite ikonu srca.
- Nakon izlaska iz petlje, koristite Basic → Show String blok da ispišete "Start!".
Primer 4: Određivanje delioca nasumičnog broja
- Kada pritisnete dugme B, micro:bit nasumično generiše broj između 1 i 50.
- Broj se ispisuje na ekranu, a zatim micro:bit prikazuje sve njegove delioce jedan po jedan.
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:
- Otvorite MakeCode editor: Posetite MakeCode za micro:bit.
- Odaberite kategoriju: Kliknite na kategoriju Loops u paleti sa leve strane.
- Prevlačenje bloka: Kliknite i prevucite blok while do na radnu površinu u sredini.
- Dodavanje uslova: Kliknite na kategoriju Logic, pa prevucite uslov (npr. 0 < 0) u prostor za uslov u bloku while do.
- 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
}
})
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:
- randint(1, 50): Generiše slučajan broj između 1 i 50.
- Inicijalizacija i: Postavlja promenljivu za delioce na 1.
- while (i <= broj): Petlja se izvršava dok je i manje ili jednako od generisanog broja.
- Provera uslova (if (broj % i == 0)): Proverava da li je trenutni broj delioc.
- Ispis na ekranu (basic.showNumber(i)): Ako je uslov ispunjen, delilac se prikazuje.
- i += 1: Povećava se broj koji se proverava.
Paleta Loops
Opis komandi
- forever: Izvršava kod unutar bloka beskonačno mnogo puta, dok god je micro:bit uključen.
- repeat [n] times: Ponavlja zadati kod određeni broj puta (n).
- while [true] do: Izvršava kod dokle god je uslov u zagradi istinit. Petlja se prekida kad uslov postane netačan.
- for index from [x] to [y]: Iterira kroz određeni raspon vrednosti, pri čemu se varijabla indeksa povećava sa svakim korakom.
- for element value list: Ova petlja iterira kroz svaki element u listi (nizu). Za svaki prolazak petlje, promenljiva value preuzima vrednost trenutnog elementa iz liste. Pogodno za rad sa nizovima kada želite da izvršite radnju za svaki element, poput sabiranja elemenata, ispisivanja, ili drugih operacija.
- every times ms: Ova petlja omogućava izvršavanje koda u zadatim vremenskim intervalima (milisekundama). Korisna je za ponavljajuće radnje poput animacija ili osvežavanja podataka. Vrednost ms određuje koliko često se blokovi unutar petlje ponavljaju.
- break: Koristi se za prekidanje izvršavanja trenutne petlje pre nego što se završi njen definisani ciklus. Izlazi direktno iz petlje. Često se koristi sa uslovima unutar petlje, na primer, da zaustavite petlju kada je pronađen određeni element.
- continue: Preskače preostali kod u trenutnom prolasku petlje i prelazi na sledeći ciklus. Korisno je kada želite da preskočite određene iteracije. Uglavnom se koristi sa if uslovima za preskakanje određenih vrednosti.
Primer 5: Prikazati sve prirodne parne brojeve do neke zadate vrednosti
Kreirajte program za micro:bit koji:
- Pri pokretanju generiše slučajan broj u opsegu od 0 do 50.
- Na događaj shake (tresenje) prikazuje sve parne brojeve do vrednosti tog slučajnog broja.
- (Opcionalno: B verzija) Dodaje funkcionalnost da pritiskom na dugme A generišete novi slučajan broj.
Instrukcije:
Osnovna verzija zadatka:
- Definisanje slučajnog broja:
- Koristite blok set variable to pick random u sekciji Variables i postavite slučajan broj u opsegu od 0 do 50. Ovo dodajte unutar bloka on start.
- 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 number za prikaz na ekranu.
- 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):
- Na on start:
- Postavite promenljivu randomNumber na slučajni broj u opsegu od 0 do 50.
- 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.
- (Opcionalno) Na button A pressed:
- Ponovo postavite randomNumber na slučajni broj.
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:
Instrukcije:
- Kliknite na paletu Loops i prevucite blok forever na radnu površinu.
- U njega prevucite show leds iz palete Basic i upalite sve lampice.
- 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:
Instrukcije:
- 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).
- Postavite prikaz strelice:
- Iz palete Basic prevucite blok show icon unutar petlje.
- U prvom ponavljanju odaberite strelicu koja pokazuje gore (arrow north).
- 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).
- 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.
- Koristite dodatnu petlju ili brojač za automatsko povećanje iteracija.
- Eksperimentišite sa blokovima show LEDs za crtanje prilagođenih oblika umesto predefinisanih ikona.
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:
Instrukcije:
- Prevucite while iz Loops.
- Postavite uslov na true.
- 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:
Instrukcije:
- Koristite for index from 0 to 9 iz Loops.
- 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:
Instrukcije:
- Koristite for index from 0 to 4.
- 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:
Instrukcije:
- Koristite repeat blok i dodajte radio send string sa porukom.
- 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:
Instrukcije:
- Koristite while petlju i postavite uslov za dugme A ili B.
- 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:
Instrukcije:
- Napravite for petlju za pozicije piksela.
- 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:
Instrukcije:
- Koristite on button A pressed i change variable za povećanje brojača.
- 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:
Instrukcije:
- Koristite while da stalno proveravate radio received string.
- 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:
Instrukcije:
- Koristite petlju while sa brojačem piksela.
- Uvećavajte brojač pri svakom koraku.
- Koristite plot za uključivanje piksela i break za izlazak kad brojač dostigne 3.
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:
Instrukcije:
- Koristite for index from 1 to 10.
- Unutar petlje proverite da li je broj neparan (index % 2 != 0).
- Ako jeste, koristite continue da preskočite iteraciju.
- Prikažite preostale brojeve koristeći show number.
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:
Instrukcije:
- Definišite listu boja koristeći set variable to list.
- Koristite for element value in list da iterirate kroz listu.
- Prikazujte svaku boju koristeći show string.
Detaljne instrukcije:
- Definišite listu:
- Idite u paletu Variables i kliknite na Make a Variable. Kreirajte varijablu colors.
- Dodajte blok set [colors] to [ ] iz palete Arrays.
- Kliknite na ikonicu liste u bloku i dodajte elemente: "red", "blue", "green".
- Iterirajte kroz listu:
- Iz palete Loops dodajte blok for element value in list na radnu površinu.
- Postavite varijablu liste colors u odgovarajuće mesto u petlji.
- Prikazivanje elemenata:
- Iz palete Basic dodajte blok show string unutar petlje.
- Umesto statičnog teksta, koristite value kao tekst za prikaz.
14. Odbrojavanje uz pomoć every [time] ms
Zadatak: Napravite odbrojavanje koje svakih 2 sekunde smanjuje broj na ekranu dok ne dosegne 0.
Instrukcije:
Instrukcije:
- Koristite every [2000] ms za vremenski interval.
- Definišite promenljivu brojač i smanjujte je za 1 unutar bloka.
- Prikažite vrednost brojača koristeći show number.
- Zaustavite odbrojavanje kad brojač dostigne 0.
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:
Instrukcije:
- Definišite listu sa koordinatama kao niz parova.
- Koristite for element value in list za prolazak kroz listu.
- Prikazujte piksele koristeći plot sa odgovarajućim koordinatama iz liste.
- Dodajte pauzu između prikaza piksela.
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
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:
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:
Osnovni princip algoritmaGlavna ideja Euklidovog algoritma zasniva se na sledećim činjenicama:
- NZD deli oba broja: Ako su AAA i BBB dva cela broja, tada njihov NZD deli oba broja.
- Ostatak je takođe deljiv sa NZD: Ostatak pri deljenju AAA sa BBB (označen kao qqq) takođe je deljiv sa NZD.
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:
- Podelimo veći broj A sa manjim brojem B, pri čemu dobijamo količnik p i ostatak q.
- Zameni brojeve: Novi A postaje stari B, a novi B postaje q.
- Ponavljaj proces dok q≠0. Kada ostatak postane 0, tada je preostali broj B upravo NZD.
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.
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.
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:
- 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.
- 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.
- 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:
Instrukcije za rešavanje:
- 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.
- Izračunavanje NZD i prikaz:
- Postupak za izračunavanje NZD ostaje isti kao u varijanti A.
Primer rešenja (koristeći blokove):
- on start:
- a = 48
- b = 28
- Prikaz a i b pomoću show number.
- on shake:
- Petlja while (b ≠ 0):
- temp = a
- a = b
- b = temp % b
- Nakon petlje:
- show string "NZD="
- Prikaz a.
- Petlja while (b ≠ 0):
Rešenje u Python-u
Prethodno
|< Kontrolne naredbe u programima mikrobita
|< Kontrolne naredbe u programima mikrobita