LOGO Zadaci

Download LOGO Zadaci

Post on 03-Nov-2015

53 views

Category:

Documents

2 download

Embed Size (px)

DESCRIPTION

LOGO zadaci

TRANSCRIPT

<ul><li><p>6 Zadaci </p><p>U ovom emo poglavlju rijeiti mnoge zadatke kakvi se pojavljuju na natjecanjima. Detaljno emo opisati kako doi do rjeenja. Objasnit emo i neke poznate algoritme. </p><p>6.1 Euklidov algoritam (razlomci) </p><p>Zadatak 1 (Euklidov algoritam). Napiite funkciju gcd :a :b koja nalazi najvei zajedniki djelitelj prirodnih brojeva :a i :b. </p><p>Primjeri za provjeru: </p><p> gcd 5 2 Result: 1 </p><p> gcd 2 3 Result: 1 </p><p> gcd 5 10 Result: 5 </p><p> gcd 20 30 Result: 10 </p><p> gcd 30 45 Result: 15 </p><p> gcd 64 48 Result: 16 </p><p>Rjeenje. Da bismo ovo rijeili, moemo koristiti najstariji poznati algoritam koji potjee jo iz antikih vremena. Jo je Euklid znao da je najvei zajedniki djelitelj brojeva a i b jednak najveem zajednikom djelitelju brojeva a i a b . Tako dolazimo do rjeenja. </p><p>to gcd :a :b if :b = 0 op :a op gcd :b remainder :a :b end </p><p>Zadatak 2. Napiite funkciju lcm :a :b koja nalazi najmanji zajedniki viekratnik prirodnih brojeva :a i :b. </p><p>Primjeri za provjeru: </p></li><li><p>198 LOGO za napredne </p><p> lcm 5 2 Result: 10 </p><p> lcm 2 3 Result: 6 </p><p> lcm 5 10 Result: 10 </p><p> lcm 20 30 Result: 60 </p><p> lcm 30 45 Result: 90 </p><p> gcd 64 48 Result: 192 </p><p>Rjeenje. Koristei rjeenje prethodnog zadatka dolazimo do rjeenja: </p><p>to lcm :a :b op :a*:b/gcd :a :b end </p><p>Zadatak 3. Napiite funkciju skrati :a :b koja skrauje razlomak :a:b</p><p>(ako je to mogue) i vraa listu koja se sastoji od dva broja. Prvi broj je brojnik razlomka, a drugi nazivnik. </p><p>Na primjer, razlomak 6448 moemo skratiti jer su mu i brojnik i nazivnik djeljivi sa </p><p>16 pa imamo 4 643 48</p><p>43</p><p>= . Stoga bi funkcija skrati 64 48 vratila [4 3]. </p><p>Parametri :a i :b su prirodni brojevi. </p><p>Primjeri za provjeru: </p><p> skrati 5 2 Result: [5 2] </p><p> skrati 2 3 Result: [2 3] </p><p> skrati 5 10 Result: [1 2] </p><p> skrati 20 30 Result: [2 3] </p><p> lcm 30 45 Result: [2 3] </p><p> skrati 64 48 Result: [4 3] </p><p>Rjeenje. </p><p>to skrati :a :b make "g gcd :a :b op list :a/:g :b/:g end </p></li><li><p>6. Zadaci 199 </p><p>Zadatak 4. Napiite funkciju zbroji :l1 :l2 koja vraa zbroj dva razlomka :l1 i :l2. Parametri :l1 i :l2 su liste koje se sastoje od dva prirodna broja. Prvi broj svake liste oznaava brojnike, a drugi nazivnike (kao u prethodnom zadatku). </p><p>Primjeri za provjeru: </p><p> zbroji [1 2] [1 2] Result: [1 1] Jer je </p><p>1 1 22 2+ =</p><p>211</p><p>= (to jest 1). </p><p> zbroji [1 2] [1 3] Result: [5 6] Jer je </p><p>1 1 2 3 52 3 6 6</p><p>++ = = . </p><p> zbroji [1 2] [2 1] Result: [5 2] Jer je </p><p>1 2 1 4 52 1 2 2</p><p>++ = = . </p><p> zbroji [1 6] [1 3] Result: [1 2] Jer je </p><p>1 1 1 2 36 3 6</p><p>++ = =6</p><p>12</p><p>= . </p><p>Rjeenje. </p><p>to zbroji :l1 :l2 make "a +(first :l1)*last :l2 (first :l2)*last :l1 make "b *last :l1 last :l2 op skrati :a :b end </p><p>Zadatak 5. Napiite funkciju mnozi :l1 :l2 koja vraa umnoak dvaju razlomaka :l1 i :l2. Parametri :l1 i :l2 su liste koje se sastoje od dva prirodna broja. Prvi broj svake liste oznaava brojnike, a drugi nazivnike (kao u prethodnom zadatku). </p><p>Primjeri za provjeru: </p><p> mnozi [1 2] [1 2] Result: [1 4] Jer je 1 1 12 2 4 = . </p><p> mnozi [1 2] [3 1] Result: [3 2] Jer je </p><p>1 332 2 = . </p></li><li><p>200 LOGO za napredne </p><p> mnozi [1 2] [2 1] Result: [1 1] Jer je </p><p>12</p><p>2 11</p><p>= (to jest 1). </p><p> mnozi [5 6] [3 10] Result: [1 4] Jer je </p><p>56</p><p>310</p><p>14</p><p>= . </p><p>Rjeenje. </p><p>to mnozi :l1 :l2 make "a *first :l1 first :l2 make "b *last :l1 last :l2 op skrati :a :b end </p><p>6.2 Kutovi U ovom emo odjeljku obraditi neke zadatke za rjeavanje kojih bi bilo dobro najprije malo promozgati o kutovima na slici. </p><p>Zadatak 6. Napiite proceduru zvijezda :n :d koja crta zvijezdu sa :n krakova. Svaki vrh je spojen sa 2 nasuprotna vrha (kao na slici 1). Udaljenost nasuprotnih vrhova je :d (kao na slici 1). Kut u vrhu svakog </p><p>kraka je 180:n</p><p>. </p><p>Parametar :n je neparan broj vei od 2, dok je parametar :d broj vei od nule. </p><p>Na primjer na slici 1 je nacrtana zvijezda sa 5 krakova. Jedan od moguih naina da se ona nacrta bio bi da se slijede crvene strelice. </p><p>Primjeri za provjeru: </p><p> cs zvijezda 3 200 cs zvijezda 5 170 </p><p>1</p><p>2</p><p>3</p><p>45</p><p>d</p><p>d</p><p>Slika 1 </p></li><li><p>6. Zadaci 201 </p><p> cs zvijezda 7 150 cs zvijezda 17 200 </p><p>Rjeenje. </p><p>to zvijezda :n :d repeat :n [fd :d rt 180 - 180/:n] end </p><p>Napomena 1*. Ovaj zadatak (injenica da emo ako odaberemo kut od 180n </p><p>stupnjeva takvim redosljedom crtanja dobiti zvijezdu) je posljedica jednog poznatog matematikog teorema (teorema o sredinjem i obodnom kutu). </p><p>Zadatak 7. Napiite proceduru medalja :n :d :kut koja brie ekran i crta zvijezdu s :n krakova. Kut izmeu svaka dva kraka je isti. Duljina brida svakog kraka je :d. Kut u vrhu svakog kraka je :kut. Na slici 1 je 4=:n i 45=:kut . Parametar :n je prirodni broj vei ili jednak od 3, :d je broj vei od nule. Parametar :kut je broj vei od nule, a manji od 180. </p><p>Primjeri za provjeru: </p><p> medalja 4 90 60 medalja 5 120 30 medalja 12 100 20 </p><p>Rjeenje. Bilo bi dobro prvo ustanoviti koliki je kut izmeu svaka dva kraka (na slici 2 kut ). U tu svrhu pogledajmo malo bolje neki krak (na slici 3 jedan krak je zatamnjen). To je u </p><p>45</p><p>d</p><p>Slika 2 </p><p> Slika 3</p></li><li><p>202 LOGO za napredne </p><p>stvari jednakokrani trokut, a u svakom trokutu je zbroj svih kutova 180. Iz toga </p><p>dobijemo 180</p><p>2 = . Budui da nadopunjene (isprekidane) linije ine pravilni </p><p>mnogokut, vrijedi 360 = :n . Iz toga se napokon dobije 2 360 + + = (jer </p><p>ine puni kut). Napokon dobijemo 360180 = +:n :kut . </p><p>Sada vie nije teko napraviti program koji crta traeni lik. </p><p>to medalja :n :d :kut cs make "g_d 180-360/:n+:kut repeat :n [fd :d rt 180-:kut fd :d lt 180-:g_d] end </p><p>Jedno malo drugaije rjeenje moglo bi biti: </p><p>to medalja :n :d :kut repeat :n [fd :d lt :kut bk :d rt :kut] end </p><p>Zadatak 8. Napiite proceduru most :s :d :v koja crta lik kao na slici 4. Lik predstavlja most koji se sastoji od etiri stepenice visine i irine :s i jednog luka. Luk se sastoji od sedam paralelograma sa stranicama duljine :d i :v. Kut izmeu brida prvog paralelograma i horizontale je 30, dok je svakog sljedeeg za 10 manji (pa su bridovi sredinjeg paralelograma paralelni s rubovima ekrana). Lik je simetrian obzirom na sredinji paralelogram. </p><p>Parametri :s, :d i :v su brojevi vei od nule. </p><p>Primjeri za provjeru: </p><p> cs most 20 20 10 cs most 25 10 100 </p><p> cs rt 30 most 15 25 75 cs most 15 15 75 </p><p>30s</p><p>dd</p><p>v</p><p>Slika 4 </p></li><li><p>6. Zadaci 203 </p><p>Rjeenje. </p><p>to paralelogram :v :d :k fd :v rt 90-:k fd :d rt 90+:k fd :v rt 90-:k fd :d bk :d rt 90+:k end </p><p>to most :s :d :v seth 0 repeat 4 [fd :s rt 90 fd :s lt 90] </p><p> (for "i 30 -30 [ paralelogram :v :d :i] -10) rt 90 repeat 4 [fd :s rt 90 fd :s lt 90] end </p><p>Zadatak 9. Napiite proceduru cvijet :d :m :n koja crta :n :m-terokuta (zovimo ih latice), koji se dodiruju vrhovima. Kutovi izmeu najbliih stranica susjednih latica meusobno su jednaki (na slici 5 kut ) i takvi da se prva i posljednja latica takoer dodiruju (tako da sve latice ine cvijet u obliku kruga). </p><p>Ako je broj :m neparan, tada latica (:m-terokut) ima jednu stranicu vie okrenutu prema vanjskoj strani cvijeta (kojeg ine tih :n latica). Na slici 5 2 su stranice okrenute prema unutra, a 3 prema van. (Na slici 5 je primjer za </p><p>5=:m i 8=:n .) Ako je broj :m paran, tada jednak broj stranica mora biti okrenut prema unutranjoj kao i prema vanjskoj strani. </p><p>Parametar :d je broj vei od nule. Parametar :m je prirodan broj vei od 2, a :n prirodan broj vei od 1. </p><p>Primjeri za provjeru: </p><p> cs cvijet 150 3 2 cs cvijet 100 4 4 </p><p> cs cvijet 60 4 7 cs cvijet 50 6 6 </p><p>d</p><p>d</p><p>Slika 5 </p></li><li><p>204 LOGO za napredne </p><p> cs cvijet 20 9 10 cs cvijet 20 16 6 </p><p>Rjeenje. </p><p>to latica :d :m repeat :m[fd :d lt 360/:m] make "i 0 repeat :m/2[fd :d lt 360/:m make "i :i+1] rt :i*360/:m end </p><p>to cvijet :d :m :n repeat :n[latica :d :m rt 360/:n] end </p><p>Zadatak 10. Napiite proceduru atom :n :d :m :r koja crta atom kao na slici 6. Atom se sastoji od :n elektrona. Sredite slike predstavlja jezgru atoma, a vanjski :m-terokuti elektrone. Elektroni su u pravilnom odnosu s jezgrinom spojnicom (na slici 6 jednak je kut na obje strane kut ). Elektroni su pravilno rasporeeni oko jezgre tako da je kut izmeu svaka dva susjedna elektrona jednak . Na slici 6 je primjer kada je :n = 3, a :m = 4. </p><p>Parametri :d i :r su brojevi vei od nule, dok su :m i :n prirodni brojevi vei od dva. </p><p>Primjeri za provjeru: </p><p> cs atom 5 100 3 100 cs atom 8 100 4 70 </p><p> cs atom 12 100 3 100 cs atom 6 100 36 5 </p><p>Rjeenje. </p><p>to elektron :m :a lt 90-180/:m repeat :m[fd :a rt 360/:m] </p><p>d</p><p>r</p><p>Slika 6 </p></li><li><p>6. Zadaci 205 </p><p> rt 90-180/:m end </p><p>to atom :n :d :m :a repeat :n[fd :d elektron :m :a bk :d rt 360 /:n] end </p><p>Zadatak 11. Napiite proceduru sito :d :k :m :n koja crta mreu od :n vodoravnih redova. Svaki se red sastoji od :m pravilnih :k-terokuta duljine stranice :d. Svaka dva susjedna :k-terokuta dodiruju se ili samo vrhom ili samo jednom stranicom. (Svaki :k-terokut je zrcalna slika susjeda s obzirom na paralelu s rubovima ekrana na slici 7 isprekidane linije). </p><p>Na slici 7 je primjer za 5=:k , 4=:m , 3=:n . Neki :k-terokuti su osjenani </p><p>zbog lakeg uoavanja. </p><p>Parametar :d je broj vei od nule. Parametar :k je prirodan broj vei od 2, dok su :m i :n prirodni brojevi. </p><p>Primjeri za provjeru: </p><p> cs sito 180 3 1 1 cs sito 100 4 2 2 </p><p> cs sito 70 3 4 1 cs sito 50 3 1 5 </p><p> cs sito 50 5 4 3 cs sito 20 6 7 4 </p><p> cs sito 20 8 5 5 cs sito 5 36 5 4 </p><p>Rjeenje. </p><p>to jedan pd repeat :k[fd :d lt 360/:k] pu repeat 1+2*int (:k-1)/4[fd :d lt 360/:k] setheading 0-heading rt 180-360/:k end </p><p>to medjured1 if :k&gt;4 [repeat (:k-1)/4[rt 360/:k bk :d]] </p><p>Slika 7 </p></li><li><p>206 LOGO za napredne </p><p> rt 180+360/:k end </p><p>to medjured2 repeat (:k+1)/4[fd :d lt 360/:k] setheading 180-heading rt 180-360/:k repeat (:k-1)/2[fd :d lt 360/:k] end </p><p>to medjured lt 180-360/:k setheading 0-heading if (remainder :i 2)=1 [medjured1] else [medjured2] end </p><p>to red if :k&gt;4 [repeat (:k-1)/4[rt 360/:k bk :d]] repeat :m [jedan] medjured end </p><p>to sito :d :k :m :n rt 90 for "i 1 :n [red] end </p><p>Zadatak 12. Napiite proceduru sunce koja brie ekran i crta lik kao na slici 8. Sunce je kosi kvadrat sa stranicama duljine 60. Iz svake stranice izlaze po dvije zrake koje tu stranicu dijele na jednake dijelove (duljine 20). Iz svakog vrha izlazi po jedna zraka (koja je paralelna s rubom ekrana). Svake dvije susjedne zrake zatvaraju jednak kut. Duljina svake zrake je 90. </p><p>Rjeenje. Najprije odredimo kut izmeu svake dvije zrake. Uoimo prije da imamo ukupno 12 zraka. Produimo li zrake u unutranjost kvadrata (kao na slici 9), uoavamo da je kut izmeu </p><p>90</p><p>90</p><p>90</p><p>60</p><p>60 20</p><p>Slika 8 </p></li><li><p>6. Zadaci 207 </p><p>svake dvije zrake jednak 360 /12 30= (jer se crtanjem svih krakova rotiramo za cijeli krug). Mogli bismo imati varijablu u kojoj pamtimo smjer zrake (varijabla z) te varijablu u kojoj pamtimo smjer crtanja sredita (kvadrata; varijabla k). Ponimo od lijeve vodoravne zrake. </p><p>to sunce cs make "z -90 make "k 45 repeat 4[repeat 3 [seth :z fd 90 bk 90 seth :k fd 20 make "z :z+30] make "k :k+90] end </p><p>Zadatak 13. Napiite proceduru sunce :d :n :l :r koja crta :n-terokut duljine stranice :d. Iz svake stranice :n-terokuta prema van ide odreeni broj linija (zovimo ih zrake). Te zrake dijele stranicu na dijelove jednakih duljina (na slici 10 duljine duine x). Duljina srednje zrake je :l i okomita je na stranicu. Svaka sljedea zraka od srednje prema vrhu kraa je za :r i zakoena za isti kut u odnosu na prethodnu zraku (kutovi izmeu susjednih zraka su isti na slici 10 kut ). Posljednja je zraka ona kojoj je duljina manja od :r i vea ili jednaka nuli. Ona je u vrhu :n-terokuta. </p><p>Kut je takav da se posljednja zraka jedne stranice poklapa sa prvom zrakom susjedne stranice (samo jedna zraka ide iz vrha :n-terokuta). </p><p>Na slici 10 je primjer za 4=:n , 44=:l i 12=:r . Duljine zraka su redom 44, 32, 20 i 8. Iz toga slijedi da je na svakoj stranici 7 zraka te je x</p><p>6=:d , a 15 = . </p><p>Parametri :d i :l su brojevi vei od nule. Parametar :r je broj vei od nule i manji od :l, dok je parametar :n je prirodan broj vei od 2. </p><p>44 - = 32 r32 - = 20</p><p> r</p><p>d x</p><p>x 44</p><p>Slika 10 </p><p>Slika 9 </p></li><li><p>208 LOGO za napredne </p><p>Primjeri za provjeru: </p><p> cs sunce 100 3 150 60 cs sunce 50 4 44 12 </p><p> cs sunce 70 5 150 10 cs sunce 20 7 150 11 </p><p> cs sunce 30 7 150 3 cs sunce 5 36 100 40 </p><p>Rjeenje. </p><p>to zraka :i lt 90-:g_a*:i fd :l-:r*abs :i bk :l-:r*abs :i rt 90-:g_a*:i end </p><p>to zrake for "i 1 2*:broj_zraka [fd :x zraka :i-:broj_zraka] end </p><p>to sunce :d :n :l :r make "broj_zraka int :l/:r make "g_a 360 / :n / (2*:broj_zraka) make "x :d/(2*:broj_zraka) repeat :n[zrake rt 360/:n] end </p><p> Zadatak 14. Napiite proceduru valjak :v :d :n koja crta valjak (tonije prizmu) visine :v. Baza valjka je pravilni :n-terokut sa stranicama duljine :d. Baza je u pravilnom odnosu s bonim bridovima (kutovi baze s oba brida su jednaki na slici 11 oznaeni s ). Da bi se dobio dojam tree dimenzije, jedna se baza u potpunosti vidi, dok je druga nacrtana samo do pola (na slici 11 donja polovica :n-terokuta). </p><p>Na slici 11 je primjer kada :n ima vrijednost 6. </p></li><li><p>6. Zadaci 209 </p><p>Parametar :n je paran prirodni broj vei od 3, dok su parametri :v i :d brojevi vei od nule. </p><p>Primjeri za provjeru: </p><p> cs valjak 120 100 4 cs valjak 100 50 10 cs valjak 100 70 6 cs valjak 20 10 36 cs valjak 120 10 36 </p><p>Rjeenje. </p><p>to valjak :v :d :n bk :v lt 180/:n repeat :n/2 [bk :d lt 360/:n] seth 0 fd :v lt 180/:n repeat :n[fd :d lt 360/:n] end </p><p>Zadatak 15. Napiite proceduru valjak :v :d :n koja crta lik kao na slici 12. Parametri :v, :d i :n su isti kao u prethodnom zadatku. </p><p>Primjeri za provjeru: Budui da je zadatak vrlo slian prethodnom, isti primjeri mogu posluiti. </p><p>Rjeenje. </p><p>to valjak :v :d :n make "kut 180-180/:n for "i 1 :n/2 [seth 0 fd :v bk :v seth :kut fd :d make "kut :kut-360/:n] seth 0 fd :v lt 180/:n repeat :n[fd:d lt 360/:n] end </p><p>v</p><p>d </p><p>Slika 11 </p><p>v</p><p>d </p><p>Slika 12 </p></li><li><p>210 LOGO za napredne </p><p>Zadatak 16. Napiite proceduru kap :n :d koja brie ekran i crta lik kao na slici 13. Lik se sastoji od :n stranica pravilnog mnogokuta s 2 ( 1) :n vrhova. Lik se sastoji od jo dvije stranice (koje su jednako dugake kao i irina lika na slici desno varijabla r). </p><p>Na slici desno je primjer kada :n ima vrijednost 5. </p><p>Parametar :n je prirodan broj vei od 2, dok je parametar :d broj vei od nule. Parametri :n i :d su takvi da lik ne prelazi rubove ekrana. </p><p>Primjeri za provjeru: </p><p> kap 3 100 kap 4 70 </p><p> kap 4 70 kap 30 10 </p><p>Rjeenje. </p><p>to kap :n :d cs bk :d repeat :n-1 [lt 180/(:n-1) bk :d] make "r xcor rt 150 fd :r lt 120 fd :r end </p><p>Zadatak 17. Napiite proceduru lopta :d :s :alfa koja brie ekran i crta putanju lopte koja se odbija od tla. Tlo je horizontalna linija na sredini ekrana. Lopta je izbijena iz sredine ekrana pod kutom :alfa u odnosu na horizontalu brzinom :d. Kada doe do tla odbija pod istim kutom kojim je nabijena, ali je brzina za varijablu :s manja nego kod izbijanja. Odbijanje se nastavlja tako dugo dok je brzina odbijanja vea od </p><p>r</p><p>rr</p><p>d</p><p>d</p><p>d </p><p>Slika 13 </p><p>d</p><p>d - s</p><p>Srediteekrana </p><p> Slika 14 </p></li><li><p>6. Zadaci 211 </p><p>nule. Na slici 14 je primjer lopta 150 50 60. </p><p>Parametri :d i :s su brojevi vei od nule. Parametar :alfa je broj vei od nule i manji od 90. </p><p>Primjeri za provj...</p></li></ul>