Ulazna vrijednost N mora biti veća od 0. Otvorite datoteku 65Avje1.lgo koju ste spremili prošli sat. Upišite u naredbeni redak: Kocka se nije nacrtala, već je Logo "odgovorio": Zašto? Zadali smo da treba nacrtati -1 kocku! Ulazna vrijednost N mora biti veća od 0. kocka -1 50 4 REPEAT ne voli -1 za ulaznu vrijednost in KVADRATI [REPEAT :N [NIZ_KVADRATA :N :A FD :A]]
Ulazna vrijednost N mora biti veća od 0. Kako to učiniti? Logo mora ODLUČITI može li sa zadanom ulaznom vrijednosti N nacrtati kocku PRIJE crtanja…. ako je N>0 onda KOCKA :N :A :BOJA inače izlaz(N mora biti veći od 0)
5.A. Programski jezik Logo Odluke u programu
Grafički, u dijagramu tijeka naredbu odluke prikazujemo u rombu
Naredba odluke u Logu: provjeri uvjet ako je istina to crtaj_kocku :n :a :boja test :n>0 iftRUE[kocka :n :a :boja] iffALSE[pr "|Zadaj broj malih kocaka N>0|] end provjeri uvjet ako je istina naredbe koje treba izvršiti za N>0 ako je laž naredbe koje treba izvršiti za N NIJE veći od 0
TEST IFTRUE IFT [ ] IFFALSE IFF [ ] Oblik naredbe odluke: Mali engleski rječnik: if – ako true – istina false - laž TEST logički uvjet IFTRUE IFT [ naredbe koje se izvršavaju ako je uvjet istinit ] IFFALSE IFF [ ] naredbe koje se izvršavaju ako je uvjet lažan
Možemo li sada nacrtati svaku kocku? cs crtaj_kocku 2.5 40 6 Neće se nacrtati kocka jer N nije cijeli broj veći od 1. Ne mogu se nacrtati dvije i pol male kocke na svakom bridu. cs crtaj_kocku 3 40.5 6 Nacrtat će se velika kocka sastavljena od malih kocaka kojima je duljina brida 40.5. cs crtaj_kocku 2 40 6.5 Logo će javiti pogrešku jer broj boje mora biti prirodni broj ili 0.
Naredba za ispis PR 2+2 4 PR 13-5 8 PR 13-(7+2) PR 4*5 20 PR 12/3 PR REMAINDER 14 3 2 PR [DOBAR DAN!] DOBAR DAN! PR (PRINT) naredba za ispis u naredbenom prozoru. Računske operacije u Logu: računska operacija znak u Logu zbrajanje + oduzimanje - množenje * dijeljenje / ostatak pri dijeljenju REMAINDER
Naredba odluke u Logu < > = <> <= >= PR 3<5 Logički operatori u Logu PR 3<5 TRUE PR 4>9 FALSE PR 3+8=15 PR 3+8=11 Matematika LOGO < > = <> <= >=
INT :broj – vraća broj bez decimalnih mjesta ROUND :broj – zaokružuje broj na najbliži cijeli broj
DIJAGRAM TIJEKA ALGORITAM ako je N>0 onda ako je BOJA < 0 onda BOJA = slučajan(16) KOCKA :N :A BOJA inače izlaz(N mora biti veći od 0.)
Program: TO CRTAJ_KOCKU :N :A :BOJA MAKE "N ROUND :N MAKE "BOJA ROUND :BOJA TEST :N>1 IFT[IF :BOJA<0 [MAKE "BOJA RANDOM 16] KOCKA :N :A :BOJA] IFF [PR "|ZADAJ BROJ MALIH KOCAKA N>0.|] END
Vježba 3. Napišite program JEDNAKI :A :B koji će provjeriti jesu li dva broja A i B jednaka ili nisu.
DIJAGRAM TIJEKA ALGORITAM ulaz(a,b) ako je a=b onda izlaz(Brojevi su jednaki) inače izlaz(Brojevi su različiti)
Program: TO JEDNAKI :A :B TEST :A=:B IFTRUE [PR "|BROJEVI SU JEDNAKI|] IFFALSE [PR "|BROJEVI SU RAZLIČITI|] END
Vježba 4. Napišite program USPOREDI :A :B koji uspoređuje dva broja A i B.
ALGORITAM DIJAGRAM TIJEKA ulaz(a,b) ako je a>b onda izlaz(a > b) inače ako je a<b onda izlaz(a < b) inače izlaz(a = b)
Program: TO USPOREDI :A :B TEST :A>:B IFT [PR (SE :A "> :B)] IFF [TEST :A<:B IFT [PR (SE :A "< :B)] IFF [PR (SE :A "= :B)]] END
Vježba 5. Napišite program VODORAVNO :A :B koji crta pravokutnik tako da mu je dulja stranica uvijek vodoravno, a kraća okomito.
Program: TO PRAVOKUTNIK :A :B REPEAT 2 [FD :B RT 90 FD :A RT 90] END TO VODORAVNO :A :B TEST :A>:B IFT [PRAVOKUTNIK :A :B] IFF [PRAVOKUTNIK :B :A] END
Vježba 6. Na početku sata tjelesne i zdravstvene kulture učenici trebaju stati „u vrstu“ po visini. Tri najbolja prijatelja Matej, Ivan i Luka, među najvišim učenicima u razredu, svaki sat se prepiru tko će stati prvi u red. Napišite program koji će ispisati ime učenika koji treba stati prvi u redu, ako su ulazne vrijednosti programa PRVI :M :I :L njihove visine koje su izmjerili danas ujutro. PRVI 150 151 152 PRVI U REDU: LUKA PRVI 153 151 152 PRVI U REDU: MATEJ PRVI 153 154 152 PRVI U REDU: IVAN
ift[PR "|PRVI U REDU: MATEJ|] test :NAJ = :I PROGRAM ALGORITAM NAJ = M ako je I > NAJ onda NAJ = I ako je L > NAJ onda NAJ = L ako je NAJ = M onda izlaz(MATEJ) ako je NAJ = I onda izlaz(IVAN) ako je NAJ = L onda izlaz(LUKA) to PRVI :M :I :L MAKE "NAJ :M test :I > :NAJ ift[make "NAJ :I] test :L > :NAJ ift[make "NAJ :L] test :NAJ = :M ift[PR "|PRVI U REDU: MATEJ|] test :NAJ = :I ift[PR "|PRVI U REDU: IVAN|] test :NAJ = :L ift[PR "|PRVI U REDU: LUKA|] end Nacrtaj dijagram tijeka.
TKO ŽELI ZNATI VIŠE DODATNI PRIMJERI
Problem 1. Napiši program koji crta niz od N kvadrata duljine stranice A. Prije početka crtanja kornjaču pomaknemo uz lijevi rub grafičkog prozora. Niz kvadrata crta se samo ako čitav stane u grafički prozor. Ako je N*A>600, treba ispisati poruku "Niz kvadrata ne stane u grafički prozor.", a inače nacrtati niz kvadrata.
Rješenje: TO CRTAJ.NIZ :N :A PU LT 90 FD 300 RT 90 PD TEST :N*:A>600 IFT[PR [NIZ KVADRATA NE STANE U GRAFIČKI PROZOR.]] IFF [NIZ.KVADRATA :N :A] END TO KVADRAT :A REPEAT 4 [FD :A RT 90] TO NIZ.KVADRATA :N :A REPEAT :N [KVADRAT :A RT 90 FD :A LT 90]
Problem 2. Program treba nacrtati lik s N vrhova stranice duljine A, ako je broj vrhova N veći od 2, a inače ispisati poruku "Lik ima barem 3 vrha."
Rješenje: TO LIK :N :A TEST :N>2 IFT [REPEAT :N[FD :A RT 360/:N]] IFF [PR [Lik ima barem 3 vrha.]] END