You are on page 1of 36

NAREDBA ST HT DRAW FD BK RT LT 90 HOME PU PD PE PPT CS BYE, QUIT, EXIT PERSPECTIVE WRAP UPPITCH DOWNPITCH LEFTROLL RIGHTROLL SETTURTLE SETPC

FOREACH FIRST LAST COUNT MAKE pen up pen down penrase pen paint clearscreen forward back right left showturtle hideturtle

ZNAENJE Postavlja kornjau na ekran Uklanja kornjau s ekrana Brie trenutne crtee na raunalu Pomie kornjau naprijed Pomie kornjau natrag Okree kornjau udesno Okree kornjau ulijevo Postavlja kornjau na poetni poloaj Podie olovku kornjae Sputa olovku kornjae Brie pojedinanu crtu Vraa olovku pisati Brie cijeli ekran Izlazi iz programa Postavlja kornjau u 3D nain crtanja Postavlja kornjau u 2D nain crtanja Uzdizanje za postavljeni kut Poniranje za postavljeni kut Naginjanje lijevo za postavljeni kut Naginjanje desno za postavljeni kut Zadaje broj kornjaa Postavlja boju pera kornjae Omoguuje rad s viestrukim kornjaama Prvo slovo rijei ili liste Zadnje slovo rijei ili liste Broj znakova rijei ili liste

NAREDBE PROGRAMSKOG JEZIKA MSW LOGO Za kompletan tools- naredbi za MSW LOGO idte na ovaj link. Koristite google prevoditelj primjerice:

Primitivi struktura podataka


Konstruktori
word
WORD word1 word2 (WORD word1 word2 word3 ...)

outputira rijec formiranu spajanjem inputa.

list
LIST thing1 thing2 (LIST thing1 thing2 thing3 ...)

outputira listu ciji clanovi su inputi, a koji mogu biti bilo koji Logo podatak (rijec, lista ili niz).

sentence
SENTENCE thing1 thing2 SE thing1 thing2 (SENTENCE thing1 thing2 thing3 ...) (SE thing1 thing2 thing3 ...)

outputira listu ciji clanovi su inputi, ako ti inputi nisu liste, ili clanovi inputa, ako su ti inputi liste.

fput
FPUT thing list

outputira listu jednaku drugom inputu sa dodanim novim clanom, prvim inputom na pocetku.

lput
LPUT thing list

outputira listu jednaku svom drugom inputu sa jednim novim clanom, prvim inputom dodanim na kraju.

array
ARRAY size (ARRAY size origin)

outputira array (niz) od broja size clanova (mora biti pozitivan integer), od kojih je svaki pocetno prazna lista. Clanovi niza mogu biti izabrani sa ITEM i promijenjeni sa SETITEM. Prvi clan niza, je clan broj 1 ukoliko origin (ishodiste) nije dan kao prvi index. (Tipicno 0 se

unosi kao ishodiste, ako se origin upotrijebi.) Array se ispisuje sa PRINT i prijateljima, a moze biti unesena, u viticastim zagradama; oznacite ishodiste sa {a b c}@0. See section item ; section setitem ; section print

mdarray
MDARRAY sizelist (MDARRAY sizelist origin) (library procedura)

outputira multi-dimenzionalni niz. Prvi input mora biti lista od jednog ili vise pozitivnih integera. Drugi input, ako je prisutan, mora biti jedan integer koji odredjuje ishodiste za sve dimenzije niza. Primjer: (MDARRAY [3 5] 0) outputira dvo-dimenzionalni niz ciji clanovi idu od [0 0] do [2 4].

listtoarray
LISTTOARRAY list (LISTTOARRAY list origin) (library procedura)

outputira niz iste velicine kao i inputirana lista, ciji clanovi su clanovi input liste.

arraytolist
ARRAYTOLIST array (library procedura)

outputira listu ciji su clanovi, clanovi inputirane array (niza). Prvi clan liste je prvi clan arraya, bez obzira na ishodiste array-a.

combine
COMBINE thing1 thing2 (library procedura)

ako je thing2 rijec, outputira WORD thing1 thing2. Ako je thing2 lista, outputira FPUT thing1 thing2. See section word ; section fput

reverse
REVERSE list (library procedura)

outputira listu ciji clanovi su clanovi inputirane liste, ali u obrnutom redosljedu.

gensym
GENSYM (library procedura)

outputira unikatnu rijec svaki puta kada se pozove. Rijeci su oblika G1, G2, itd.

Data selektori
first
FIRST thing

ako je input rijec, outputira prvi znak iz rijeci. Ako je input lista, outputira prvi clan liste. Ako je input niz, outputira ishodiste niza (tj., INDEX od prvog clana niza).

firsts
FIRSTS list

outputira listu koja sadrzi FIRST od svakog clana input liste. Greska je ako je bilo koji clan input liste prazan. (Sama input lista moze biti prazna, u kom slucaju je i output prazan.) To bi moglo biti napisano kao
to firsts :list output map "first :list end

ali je dano kao primitiv da ubrza iteracijske alate MAP, MAP.SE, i FOREACH.
to transpose :matrix if emptyp first :matrix [op []] op fput firsts :matrix transpose bfs :matrix end

See section map ; section map.se ; section foreach

last
LAST wordorlist

ako je input rijec, outputira zadnji znak iz rijeci. Ako je input lista, outputira zadnjeg clana liste.

butfirst
BUTFIRST wordorlist BF wordorlist

ako je input word (rijec), outputira rijec koja sadrzi sve osim prvog znaka u inputu. Ako je input lista, outputira listu koja sadrzi sve osim prvog clana inputa.

butfirsts
BUTFIRSTS list BFS list

outputira listu koja sadrzi BUTFIRST od svakog clana od input liste. Greska je ako je bilo koji clan liste prazan ili je niz. (Sam input moze biti prazan, u kojem slucaju je i output prazan.) To se moze napisati kao
to butfirsts :list output map "butfirst :list end

ali je dodan kao primitiv da bi ubrzao iteracijske alate MAP, MAP.SE, i FOREACH. See section map ; section map.se ; section foreach

butlast
BUTLAST wordorlist BL wordorlist

ako je input rijec (word), outputira rijec koja sadrzi sve osim zadnjeg znaka u inputu. Ako je input lista, outputira listu koja sadrzi sve osim zadnjeg clana inputa.

item
ITEM index thing

ako je thing rijec, outputira indeksirani znak iz rijeci. Ako je thing lista, outputira indeksirani clan te liste. Ako je thing niz, outputira indeksirani clan niza. Index pocinje sa 1 za rijeci i liste; pocetak indeksa za nizove je odredjen kada je taj niz stvoren.

mditem
MDITEM indexlist array (library procedura)

outputira clana multidimenzionalnog niza array izabranog pomocu liste brojeva iz indexlist .

pick
PICK list (library procedura)

outputira slucajno izabrani clan inputirane liste.

remove
REMOVE thing list (library procedura)

outputira kopiju liste sa svakim clanom jednakim sa thing izvadjenim.

remdup
REMDUP list (library procedura)

outputira kopiju liste sa izvadjenin duplikatima clanova. Ako su dva ili vise clanova inputirane liste jednaki, najdesniji od njih ostaje u outputu.

quoted
QUOTED thing (library procedura)

outputira svoj input, ako je lista; outputira input sa dvostrukim navodnikom na pocetku, ako je rijec.

Data mutatori
setitem
SETITEM index array value

komanda. Zamijeni index-irani clan array (niza) sa novom value (vrijednoscu). Osigura da rezultirajuci niz nije cirkularan, tj., value ne moze biti lista ili niz koji sadrzi array.

mdsetitem
MDSETITEM indexlist array value (library procedura)

komanda. Zamijeni clan niza array izabranog pomocu indexlist sa novom vrijednoscu value.

.setfirst
.SETFIRST list value

komanda. Promijeni prvi clan liste list u value. UPOZORENJE: Primitivi cije ime pocinje sa tockom su OPASNI. Ne preporucuje se upotreba pocetnicima. Upotreba .SETFIRST moze dovesti do cirkularnih lista, sto ce natjerati neke Logo primitive u beskonacnu petlju; neocekivane promjene drugih data struktura koje dijele prostor sa listom koja se modificira; i gubitke u memoriji kada se cirkularna struktura oslobodi (GC-ira).

.setbf
.SETBF list value

komanda. Promijeni butfirst od list u vrijednost value. UPOZORENJE: Primitivi cije ime pocinje sa tockom su OPASNI. Ne preporucuje se upotreba pocetnicima. Upotreba .SETBF moze dovesti do cirkularnih lista, sto ce natjerati neke Logo primitive u beskonacnu petlju; neocekivane promjene drugih data struktura koje dijele prostor sa listom koja se modificira; padanje Loga i coredumps (unix), ako butfirst od liste nije i sam lista; i gubitke u memoriji kada se cirkularna struktura oslobodi (GC-ira).

.setitem
.SETITEM index array value

komanda. Promijeni index-irani clan array u value, kao SETITEM, ali bez provjere za cirkularnost. UPOZORENJE:Primitivi cije ime pocinje sa tockom su OPASNI. Ne preporucuje se upotreba pocetnicima. Upotreba .SETITEM moze dovesti do cirkularnih nizova, sto ce natjerati neke Logo primitive u beskonacnu petlju; i gubitke u memoriji kada se cirkularna struktura oslobodi (GC-ira). See section setitem

push
PUSH stackname thing (library procedura)

komanda. Doda thing na stack -- koji je vrijednost varijable cije ime je stackname. Ta varijabla mora imati za vrijednost listu; inicijalna vrijednost je prazna lista. Novi clanovi se dodaju na pocetak liste.

pop
POP stackname (library procedura)

outputira element stacka koji je zadnji gurnut na stack (stack je vrijednost varijable sa imenom stackname) i ujedno brise taj element iz stacka.

queue
QUEUE queuename thing (library procedura)

komanda. Doda thing na queue (red) koji je vrijednost varijable queuename. Ta varijabla mora za vrijednost imati listu; inicijalna vrijednost mora biti prazna lista. Novi clanovi se dodaju na kraj liste.

dequeue
DEQUEUE queuename (library procedura)

outputira najstariji elemenat stavljen u QUEUE (red) cije je ime queuename i izvadi taj elemenat iz reda.

Predikati
wordp
WORDP thing WORD? thing

outputira TRUE ako je input rijec, inace FALSE.

listp
LISTP thing LIST? thing

outputira TRUE ako je input lista, inace FALSE.

arrayp
ARRAYP thing ARRAY? thing

outputira TRUE ako je input array, inace FALSE.

emptyp
EMPTYP thing EMPTY? thing

outputira TRUE ako je input prazna rijec ili lista, inace outputira FALSE.

equalp
EQUALP thing1 thing2 EQUAL? thing1 thing2 thing1 = thing2

outputira TRUE ako su inputi jednaki, inace FALSE. Dva broja su jednaka ako imaju istu numericku vrijednost. Dvije nebrojcane rijeci su jednake ako imaju iste znakove u istom redosljedu. Ako postoji varijabla CASEIGNOREDP cije je vrijednost TRUE, tada se veliko slovo smatra jednako odgovarajucem malome (to je standardni slucaj). Dvije liste su jednake ako su im clanovi jednaki. Niz je jedino jednak sam sebi; dva odvojeno stvorena niza nisu nikada jednaka, cak i ako svi njihovi clanovi jesu jednaki. (Vazno je znati da li dva izraza imaju isti niz kao svoju vrijednost jer su nizovi promjenjivi; ako, na primjer, dvije varijable imaju isti niz kao svoju vrijednost, tada pozivajuci SETITEM na jednom mijenjamo automatski i drugi.) See section caseignoredp ; section setitem

beforep
BEFOREP word1 word2 BEFORE? word1 word2

outputira TRUE ako word1 dolazi prije word2 po ASCII redu (za rijeci od slova, po abecedi). Razlikovanje velikih i malih slova ovisi o vrijednosti CASEIGNOREDP. Pazite, ako su inputi brojevi, rezultat ne mora biti isti kao sa LESSP; na primjer, BEFOREP 3 12 je FALSE jer 3 dolazi iza 1 po ASCII tablici. See section caseignoredp ; section lessp

.eq
.EQ thing1 thing2

outputira TRUE ako su oba inputa isti podatak, tako da aplicirajuci mutator na jednome mijenjamo istovremeno i drugoga. Inace outputira FALSE, cak i ako su inputi isti po vrijednosti. UPOZORENJE: Primitivi cija imena pocinju sa tockom su OPASNI. Ne preporucuje se njihova upotreba pocetnicima. Upotreba mutatora moze dovesti do cirkularnih data struktura (struktura podataka), beskonacnih petlji ili padanja Loga.

memberp
MEMBERP thing1 thing2 MEMBER? thing1 thing2

ako je thing2 lista ili niz, outputira TRUE ako je thing1 EQUALP sa nekim clanom od thing2, inace FALSE. Ako je thing2 rijec, outputira TRUE ako je thing1 rijec od jednog znaka EQUALP sa jednim od znakova u thing2, inace FALSE. See section equalp

substringp
SUBSTRINGP thing1 thing2 SUBSTRING? thing1 thing2

ako je thing1 ili thing2 lista ili niz, outputira FALSE. Ako je thing2 rijec, outputira TRUE ako je thing1 EQUALP sa podstringom (podrijeci) od thing2, inace FALSE. See section equalp

numberp
NUMBERP thing NUMBER? thing

outputira TRUE ako je input broj, inace FALSE.

backslashedp
BACKSLASHEDP char BACKSLASHED? char

outputira TRUE ako je input-irani znak unesen u Logo sa backslash-em (\) ispred njega ili izmedju vertikalnih crta (|) da se sprijeci njegovo uobicajeno sintakticko znacenje, inace outputira FALSE. (Outputira TRUE samo ako je znak backslash-irani space, tab, newline, ili jedan od ()[]+-*/=<>":;\~?| )

Upiti
count
COUNT thing

outputira broj znakova u inputu, ako je input rijec; outputira broj clanova u inputu, ako je input lista ili niz. (Za niz, to moze ali i ne mora biti index zadnjeg clana, ovisno o ishodistu niza.)

ascii
ASCII char

outputira integer (izmedju 0 i 255) koji oznacava input znak u ASCII kodu. Prevodi kontrolne znakove kao backslash-irane (\) interpunkcije i vraca kod za odgovarajucu interpunkciju bez backslash-a. (Usporedi sa RAWASCII.)

rawascii
RAWASCII char

outputira integer (izmedju 0 i 255) koji stoji za inputirani znak u ASCII kodu. Interpretira kontrolne znakove kao same sebe. Za nalazenje ASCII koda bilo koje kombinacije na tastaturi, upotrebite RAWASCII RC.

char
CHAR int

outputira znak koji zamjenjuje ASCII kod dan sa inputom int. Input mora biti integer od 0 do 255. See section ascii

member
MEMBER thing1 thing2

ako je thing2 rijec ili lista i ako bi MEMBERP sa istim inputima outputirao TRUE, outputira dio thing2 od prve pojave thing1 do kraja. Ako bi MEMBERP outputirao FALSE, outputira praznu rijec ili listu, ovisno o tipu thing2. Greska je ako je thing2 niz. See section memberp

lowercase
LOWERCASE word

outputira kopiju inputirane rijeci, ali sa svim velikim (uppercase) slovima promijenjenim u odgovarajuca mala (lowercase) slova.

uppercase
UPPERCASE word

outputira kopiju inputirane rijeci, ali sa svim malim slovima promijenjenim u odgovarajuca velika.

standout
STANDOUT thing

outputira rijec, koja ce -- ispisana, izgledati kao input -- ali u standout modu (modu koji se istice; boldface, reverse video ili ono sto vas terminal radi kada naglasava). Rijec sadrzi terminal-specificne specijalne znakove na pocetku i kraju; izmedju je rijec koja se ispisuje (kao da se ispisuje sa TYPE) od inputa. Output je uvijek rijec, cak i kada je input neki drugi oblik, ali moze ukljucivati i razmake i druge formatirajuce znakove. Paznja: rijec outputirana od STANDOUT dok Logo radi na jednom terminalu, vjerojatno nece imati zeljeni efekt, ako se ispise na drugom tipu terminala. Na Macintoshu, nacin na koji STANDOUT radi je nekompatibilan sa upotrebom znakova ciji je ASCII kod veci od 127. Zato, morate izabrati: Instrukcija
CANINVERSE 0

onemogucava STANDOUT, ali omogucava ispisivanje znakova iznad 127, a instrukcija


CANINVERSE 1

vraca standardnu situaciju u kojoj je STANDOUT omogucen, ali znakovi iznad 127 ne mogu biti ispisani.

parse
PARSE word

outputira listu koja bi nastala da je inputirana rijec bila unesena sa READLIST operacijom. Tj., PARSE READWORD ima istu vrijednost kao READLIST za iste ucitane znakove. See section readlist ; section readword

runparse
RUNPARSE wordorlist

outputira listu koja bi bila rezultat da su inputirana rijec ili lista unesene kao instrukcijska linija; znakovi, kao infiks operatori i zagrade su samostojeci clanovi outputa. Podliste od liste koja se RUNPARSE-ira nisu same RUNPARSE-irane.

MALO ZA PODSJETNIK

KORNJAIN.SVIJET je grafiki ekran na zaslonu monitora. Kornjaa je grafiki pokaziva kojim upravljamo grafikim procedurama. Ovdje emo se zabavljati procedurama za kontrolu grafike i vidjeti primjere programa. Na poetku upoznajemo karakteristike grafikog ekrana pomou jednog zadatka.

ZADATAK ZA UENJE I UPOZNAVANJE KARAKTERISTIKA GRAFIKIH EKRANA U "MSW Logo-u" valja, sa to manje instrukcija (zapovjedi koje upisujemo kornjai u komanderu), dotaknuti sve strane kornjainog svijeta (sjever - jug istok - zapad, i sjeveroistok - jugoistok - jugozapad - sjeverozapad). Postoje instrukcije za kretanje po tom svijetu: fd, bk, rt i lt. Svaka od njih se rabi tako da uz nju napiemo i odgovarajui broj odvojen razmakom. Nakon upisane instrukcije pritiskom na tipku "enter" (ili na gumb "Execute") pokreemo kornjau. Instrukcije se mogu pisati i u obliku liste, to znai da ih ima vie i sve su odvojene razmacima. Kornjaa e ekati na "enter" te ih redom posluno izvesti. Mogue rjeenje zadatka za doticanje sjevera, istoka, juga i zapada bi mogla biti instrukcijska lista: cs fd 200 home rt 90 fd 200 home rt 180 fd 200 home rt 270 fd 200 home Nakon svakog kretanja komandom home kornjau direktno vraamo u sredinu ekrana, a ona doavi tamo okree glavu prema sjeveru. Primijetit ete da kornjain svijet (papir po kome crta) nije uvijek pravilan kvadrat. To je ee pravokutnik kome u "MSW Logo-u" moemo mijenjati veliinu. Osim toga pozicija kornjaine kue (home) se mijenja ako kliznikim trakama to uinimo. Zbog toga rjeenje zadatka nije nimalo jednostavno. U "UCB Logo-u" za Windows 95/98/NT imamo slinu oteavajuu okolnost, ali barem home poloaj ne moemo pomaknuti. Najjednostavnije rjeenje zadatka je za inaicu "UCB Logo" za DOS (postoje dvije za osnovnu memoriju i za extended memoriju). Tu ne moemo promijeniti dimenzije grafikog ekrana, tj. dimenzije kornjainog

svijeta. Pa bi pronalaenje pravih brojeva uz procedure iz gornje instrukcijske liste bilo konano. Evo rjeenja za tu verziju Logo-a: cs fd 290 home rt 90 fd 390 home rt 180 fd 200 home rt 270 fd 390 home Ako paljivije prouite brojeve uz proceduru fd za kretanje prema sjeveru i prema jugu, vidjet ete da nisu isti. Oni za kretanje prema istoku i zapadu su isti. "UCB Logo" je tako postavljen da pri samom pokretanju ulazimo u ekran u kome je vidljiv samo tekst (text screen) i on zauzima itav zaslon monitora. Komanda za prelazak u taj ekran ts moe se koristiti u Logo programima. U ekran koji prikazuje i pisanu instrukciju i kornjain svijet (split screen), ulazimo pokretanjem bilo koje grafike procedure (fd, rt, cs, home ili druge) ili upisom komande ss (split screen). Postoji i ekran koji pokazuje samo crte i daje mu maksimalne dimenzije. Meutim, zbog tednje memorije u DOS verziji, on se momentalno pretvara u split screen im se neto ispisuje kao tekst. Kako je Logo tako zamiljen da nakon svake instrukcije prikae poruku o eventualnoj greki ili prompt znak (ovdje je to upitnik) za slijedei upis, ekran za grafiku (full screen) biti e vidljiv samo dok traje proces crtanja. Provjerite upisom slijedee instrukcijske liste: cs fs repeat 20 [repeat 1000 [fd 1] rt 90] gdje je fs komanda za prelazak u full screen ekran. Budite strpljivi i promatrajte to se dogaa. Na kraju je FS zamjenjen sa SS i izgubili smo dio crtea. Naravno, ova ogranienja s grafikom "MSW Logo" ne poznaje, ali poznaje ogranienja u radu s tekstualnim ekranom (on ga uope nema- ima prozor "Commander" kao lo nadomjestak). Vratimo se rjeenju naeg zadatka. Ostalo nam je dotaknuti sjeveroistok, jugoistok, jugozapad i sjeverozapad. Ako bi glavni prozor "MSW Logo-a" namjestili kao kvadrat, to bi bilo jednostavno. Pokuajte sami. Jedini problem i dalje ostaje koliko koraka kornjaa mora uiniti da bi dola do zadanih strana svijeta. etiri kornjaina cilja su se postavila u kutove prozora. Ta idealna situacija se narui im promijenimo prozor u oblik pravokutnika. Sada je teko dotaknuti zadane strane svijeta jer se vie ne nalaze tono u kutovima prozora. Stoga, pokuajmo umjesto toga doi do sva etiri kuta. Zbog pojednostavljenja itave prie, poveajmo prozor do maksimalnih dimenzija i pretpostavimo da je va monitor namjeten na 800 puta 600 tokica (pixel-a) na zaslonu. Evo rjeenja: cs rt 57 fd 450 home lt 57 fd 450 home rt 123 fd 450 home lt 123 fd 450 home OGRADA OKO SVIJETA Ako vam komander smeta, moete ga slobodno pomaknuti i promijeniti mu veliinu ili ga "minimizirati". Iskoristit emo postojei crte (poput slova x) i

pokazati jo jednu karakteristiku ove verzije Logo-a. U izborniku Zoom moete klikati na opcije In Out i Normal. Mislim da Vam je sve jasno. Veliina papira je vea od vidljivog i pri maksimalnom poveanju prozora. Stoga postoje i kliznici. Kliknite na opciju Normal i upiite: cs rt 41 fd 100000 Nakon toga kliknite na opciju Out dva puta otvorivi izbornik na opciji Zoom. Vidite kako je kornjaa ila do ruba svijeta i nakon toga odlazila na suprotnu stranu kako bi nastavila kretanje. Suprotna strana istoku, ako se kornjaa kree tako da crta vodoravnu crtu, je zapad. Sjeveru je jug. Ako kornjaa prilazi rubu aktivnog svijeta crtajui kosu crtu, moemo dobiti neoekivane rezultate. U svakom sluaju valja eksperimentirati. Dakle, postoji jedan veliki prostor oko njenog aktivnog svijeta koji ona ne posjeuje jer je ukljuen "wrap mode". On se ukljuuje komandom wrap, a pri pokretanju logo-a je ve postavljen. Upiite slijedeu instrukciju: window fd 1000 Komandom window ukljuili smo mod koji pretvara kornjain svijet u beskonanu plou. U ovom modu kornjau u jednom trenutku ne vidimo vie i moemo je najbre vratiti s home. Pazite da se ne izgubi u tuini. Ako to elite po svaku cijenu sprijeiti ukljuite mod koji stvara ogradu oko kornjainog svijeta komandom "fence". Napiite: cs fence rt 90 fd 300 i pritisnite tipku enter, te nakon toga upiite: fd 500 Pojavit e se poruka "turtle out of bounds", to znai da je kornjaa izvan dozvoljenih granica postavljenih komandom fence. Postoji jo i komanda kojom kornjain svijet pretvaramo iz ploe u pravi svemir. Znai iz dvodimenzionalnog u trodimenzionalni. O tome emo u nekom od slijedeih nastavaka. Vratimo sada sve u normalu opcijom Normal u izborniku Zoom i komandom cs. KORNJAINI PAPIRII U svom svijetu kornjaa ne pria, ali moe ispisivati poruke na papiriima komandom label. Ako elimo na mjestu gdje trenutno stoji kornjaa ispisati rije, upiemo u komander komandu label i uz nju poevi s znakom navoda eljenu rije. Zgodno je to e rije biti ispisana u ovisnosti od smjera kornjaine glave (heading). Osim toga moemo rabiti sva slova koja su postavljena na

Vaem raunalu, mijenjati im dimenzije i boju. Upiite slijedee linije instrukcija i nakon svake pritisnite enter. cs label "Logo cs label "Logo lt 90 label "Logo lt 90 label "Logo lt 90 label "Logo lt 45 fd 50 label "Logo rt 90 setpc 5 pu fd 100 pd label [Dosta je Logo-a] Pokuajte analizirati napisano i sliku. Vano je uoiti razliku izmeu ispisa rijei i reenica komandom label. Kada elimo da kornjaa ispie papiri na kome je rije, ispred rijei stavimo znak navoda. Ako elimo papiri s reenicom, eljenu reenicu stavimo u pravokutne zagrade. Reenica se u Logo-u zove List, a rije Word. Mnogo toga nismo rekli o komandi label i raznim mogunostima, ali budete li strpljivi ita stranica, saznat ete. Sada jednostavno utipkajte donju instrukcijsku listu i pokuajte odgonetnuti znaenje pojedine procedure. cs pu repeat 300 [fd random 300 seth random 360 setpc random 15 label "Logo] pd KORNJAA KAO SLIKAR Jedna vrlo lijepa sposobnost Logo-a je ubacivanje gotovih crtea u obliku bitmap-a. To su crtei koji mogu nastati u nekom alatu za crtanje (pbrush.exe, paint.exe ili drugi) ili se mogu dobiti skeniranjem. Oni se ubacuju u kornjain svijet opcijom Bitmap, Load. Tako moete crtati podloge za vae logo programe pomou alata za crtanje, a kornjau uposliti da po tim podlogama radi razne stvari. Mogu je i obrnut postupak. Naime, neke crtee koje moete jednostavnim programom pomou kornjae nacrtati, vrlo teko ete dobiti crtaim alatom. ak se i "svemogui" CorelDRAW moe u nekim situacijama sakriti pred kornjaom i programiranjem u Logo-u. Kako ipak nita nije svemogue, zato ne koristiti prednosti jednog i drugog u "svemoguoj kombinaciji". Izvoz crtea u kornjainom svijetu postiemo s Bitmap, Save ili Bitmap, SaveAs opcijama. Pomou Bitmap, Active Area opcije namjetamo veliinu izreska koji elimo spremiti na vrsti disk ili tiskati na papir. LOGO PROGRAMIRANJE Prve komande i zatvaranje MSW Logo-a Kod pokretanja Logo-a aktivan bi trebao biti glavni prozor.

Komander je neaktivan i njegova naslovna traka je sive boje. Kako bi mogli upisati prve komande, moramo aktivirati komander. To inimo tako da kliknemo na jedan od njegovih dijelova. Najbolje je kliknuti na bijelu traku na dnu u koju unosimo same komande. Upiimo: repeat 10 [print item sum 1 random 4 [Rijeka Opatija Zagreb Osijek]] Moramo paziti na tonost, inae moemo dobiti poruku o greki. Pravokutne zagrade i razmaci su vani. Neemo objanjavati kako smo dobili to to jesmo nakon pritiska na enter, niti to smo to utipkali. Vaan nam je ispis u prozoru komandera. Vidljiva su dva ili tri naziva grada (ovisi koliko je velik, bolje reeno visok, komander). Sada emo poveati prozor komandera tako da vidimo vie naziva. Imena gradova na vaem raunalu mogu biti drugim redom poredana jer smo upisali komandu "random" za sluajni izbor. Ako dovoljno poveate komander, vidjeti e se na upis i nakon toga redom nazivi gradova. Moe biti jo uvijek vidljiva i kornjaa u neaktivnom glavnom prozoru. elite li ponoviti onu komandnu liniju koju ste ve jednom napisali, nije potrebno ponovo je pisati. Dovedite mia do linije u sivom dijelu komandera (povijest komandera) gdje je vidljiva komandna linija koju smo upisivali i kliknite jednom na nju. To e je prebaciti u "Input Box" komandera, nakon ega moemo pritisnuti enter i ponovo izvesti isto. Ako pri klikanju na liniju u sivom dijelu kliknemo dva puta, ona se odmah i izvodi bez dopunskog pritiskanja entera. Pretpostavljate emu slui jedan, a emu dvostruki klik. Ako liniju prebacimo u input box, moemo je izmijeniti ili dopuniti. Promijenite liniju u: repeat 10 [print [Rijeka Opatija Zagreb Osijek]] Nakon pritiska na tipku enter ili na gumb "Execute" dobiti emo novi ispis u komanderu. Ako elimo vidjeti itavu povijest komandera, moemo kliknuti na gumb za maksimalno poveavanje prozora (Maximize). Komander e prekriti itav zaslon, a ako elimo u prvi plan dobiti glavni prozor, moramo pritisnuti gumb "Restore". Dakle, glavni prozor ne moe prekriti komanderski prozor. Ovo je normalno, jer komander slui kao veza izmedu nas i Loga. On moe smetati ako imamo crte u

glavnom prozoru, a elimo ga u potpunosti pregledati. Tada emo ga minimizirati. Sadraj komandera moete pomou standardnih windows cut-copy-paste funkcija prebacivati iz aplikacije u aplikaciju posredstvom windowsovog "Clipboard-a". MSW Logo moemo zatvoriti pomou komande "bye" ili putem izbornika "File" i opcije "Exit". Kornjaa koja se nalazi u sredini u home poloaju, odgovara na grafike komande. Svakim upisom odgovarajue komande i pritiskom na enter moemo rezultat vidjeti kao trag kretanja. Ako elimo kornjau pomaknuti s trenutnog poloaja, moemo to postii ili upisom komande FD (forward) ili BK (back). Nije vano je li pisano velikim ili malim slovima. Pored svake moramo upisati i broj koraka. Tako: fd 100 pomie kornjau za 100 koraka (tokica na zaslonu ili pixela) unaprijed u smjeru koji je odreden poloajem glave kornjae (heading). Kad ukljuimo logo heading je 0. On se izraava stupnjevima. U svijet kornjae se zbog lakeg snalaenja uvode strane svijeta. Tako heading 0 odgovara sjeveru, 90 istoku, 180 jugu, 270 zapadu i 360 ponovo sjeveru. Komande kojima mijenjamo usmjerenje glave kornjae su RT (right) i LT (left), uz koje upisujemo za koliko stupnjeva se kornjaa treba okrenuti. Ako je logo tek pokrenut i napiemo: rt 45 kornjaa je okrenuta prema sjevero-istoku.

Zadatak za vjebu Va zadatak je napisati i otkriti kojim najmanjim brojem komandi moemo iz home poloaja (kornjaa do njega dolazi i komandom CS ili clearscreen, a pri tomu izbrie crte na papiru) dotaknuti sjever, istok, jug i zapad. Isto tako pokuajte to uiniti za sjevero-istok, jugo-istok, jugo-zapad i sjevero-zapad. Ugodnu zabavu!

Ako ste odustali, evo to moramo! Naalost, rjeenje zadatka kojeg smo postavili nije jednostavno, ali e nam ta situacija dobro doi da poblie upoznamo kornjain svijet. Rekli smo da postoje instrukcije za kretanje po tom svijetu: fd, bk, rt i lt. Svaka od njih se rabi tako da uz nju napiemo i odgovarajui broj odvojen razmakom. Nakon upisane instrukcije pritiskom na tipku "enter" (ili na gumb "Execute") pokreemo kornjau. Vidjeli smo da se instrukcije mogu pisati i u obliku liste, to znai da ih ima vie i sve su odvojene razmacima. Kornjaa e ekati na "enter", te ih redom posluno izvesti. Mogue rjeenje zadatka za doticanje sjevera, istoka, juga i zapada bi mogla biti instrukcijska lista: cs fd 200 home rt 90 fd 200 home rt 180 fd 200 home rt 270 fd 200 home Nakon svakog kretanja komandom home kornjau direktno vraamo u sredinu ekrana, a ona doavi tamo okree glavu prema sjeveru. Primijetit ete da kornjain svijet (papir po kome crta) nije uvijek pravilan kvadrat. To je ee pravokutnik kome u "MSW Logo-u" moemo mijenjati veliinu. Osim toga mogua pozicija kornjaine kue (home) se naizgled mijenja ako kliznikim trakama to uinimo. Zbog toga rjeenje zadatka nije nimalo jednostavno. U "UCB Logo-u" za Windows imamo slinu okolnost, ali home poloaj ne moemo pomaknuti. Najjednostavnije rjeenje zadatka je za inaicu "UCB Logo" za prastari DOS (postoje dvije za osnovnu memoriju i za extended memoriju). Tu ne moemo promijeniti dimenzije grafikog ekrana, tj. dimenzije kornjainog svijeta. Pa bi pronalaenje pravih brojeva uz procedure iz gornje instrukcijske liste bilo konano. Evo rjeenja za tu verziju Logo-a: cs fd 290 home rt 90 fd 390 home rt 180 fd 200 home rt 270 fd 390 home Ako paljivije prouite brojeve uz proceduru fd za kretanje prema sjeveru i prema jugu, vidjet ete da nisu isti. Oni za kretanje prema istoku i zapadu su isti. "UCB Logo" je tako postavljen da pri samom pokretanju ulazimo u ekran u kome je vidljiv samo tekst (text screen) koji zauzima itav zaslon

monitora. Komanda za prelazak u taj ekran "ts" moe se koristiti u Logo programima. U ekran koji prikazuje i pisanu instrukciju i kornjain svijet (split screen) ulazimo pokretanjem bilo koje grafike procedure (fd, rt, cs, home ili druge) ili upisom komande "ss" (split screen). Postoji i ekran koji pokazuje samo crte i daje mu maksimalne dimenzije. Medutim, zbog tednje memorije u DOS verziji, on se momentalno pretvara u split screen im se neto ispisuje kao tekst. Kako nakon svake instrukcije Logo prikae poruku o eventualnoj greki ili prompt znak (ovdje je to upitnik) za slijedei upis, ekran za grafiku (full screen) biti e vidljiv samo dok traje proces crtanja. Provjerite upisom slijedee instrukcijske liste: cs fs repeat 20 [repeat 1000 [fd 1] rt 90] gdje je fs komanda za prelazak u full screen ekran. Budite strpljivi i promatrajte to se dogada. Na kraju je FS zamijenjen sa SS i izgubili smo dio crtea. Naravno, "MSW Logo" ova ogranienja s grafikom ne poznaje, ali poznaje ogranienja u radu s tekstualnim ekranom (on ga uope nema- ima prozor "Commander" kao nadomjestak). Vratimo se rjeenju naeg zadatka i MSWLogu. Ostalo nam je dotaknuti sjeveroistok, jugoistok, jugozapad i sjeverozapad. Ako bi glavni prozor "MSW Logo-a" namjestili kao kvadrat, to bi bilo jednostavno. Pokuajte sami. Jedini problem i dalje ostaje koliko koraka kornjaa mora uiniti da bi dola do zadanih strana svijeta. Eetiri kornjaina cilja su se postavila u kutove prozora. Ta idealna situacija se narui im promijenimo prozor u oblik pravokutnika. Sada je teko dotaknuti zadane strane svijeta jer se vie ne nalaze tono u kutovima prozora. Stoga, pokuajmo umjesto toga doi do sva etiri kuta. Zbog pojednostavljenja itave prie, poveajmo prozor do maksimalnih dimenzija i pretpostavimo da je va monitor namjeten na 800 puta 600 tokica (pixela) na zaslonu. Evo rjeenja: cs rt 57 fd 450 home lt 57 fd 450 home rt 123 fd 450 home lt 123 fd 450 home Ograda oko svijeta Ako vam komander smeta, moete ga slobodno pomaknuti i

promijeniti mu veliinu ili ga "minimizirati". Iskoristit emo postojei crte (poput slova x) i pokazati jo jednu karakteristiku ove verzije Logo-a. U izborniku Zoom moete klikati na opcije In Out i Normal. Mislim da Vam je sve jasno. Veliina papira je vea od vidljivog i pri maksimalnom poveanju prozora. Stoga postoje i kliznici. Kliknite na opciju Normal i upiite: cs rt 41 fd 100000 Nakon toga kliknite na opciju Out dva puta otvorivi izbornik na opciji Zoom. Vidite kako je kornjaa ila do ruba svijeta i nakon toga odlazila na suprotnu stranu kako bi nastavila kretanje. Suprotna strana istoku, ako se kornjaa kree tako da crta vodoravnu crtu, je zapad. Sjeveru je jug. Ako kornjaa prilazi rubu aktivnog svijeta crtajui kosu crtu, moemo dobiti neoekivane rezultate. U svakom sluaju valja eksperimentirati. Dakle, postoji jedan veliki prostor oko njenog aktivnog svijeta koji ona ne posjeuje jer je ukljuen "wrap mode". On se ukljuuje komandom "wrap", a pri pokretanju loga je ve izabran. Upiite slijedeu instrukciju: window fd 1000 Komandom window ukljuili smo mod koji pretvara kornjain svijet u beskonanu plou. U ovom modu kornjau u jednom trenutku ne vidimo vie i moemo je najbre vratiti s home. Pazite da se ne izgubi u tudini. Ako to elite po svaku cijenu sprijeiti ukljuite mod koji stvara ogradu oko kornjainog svijeta komandom "fence". Napiite: cs fence rt 90 fd 300 i pritisnite tipku enter, te nakon toga upiite: fd 500 Pojavit e se poruka "turtle out of bounds", to znai da je kornjaa izvan dozvoljenih granica postavljenih komandom fence. Postoji jo i komanda kojom kornjain svijet pretvaramo iz ploe u pravi svemir. Znai iz dvodimenzionalnog u trodimenzionalni. O tome emo u nekom od slijedeih nastavaka ovog teksta. Vratimo sve u normalu opcijom Normal izbornika

Zoom i komandom cs.

Kornjaini papirii U svom svijetu kornjaa ne pria, ali moe ispisivati poruke na papiriima komandom label. Ako elimo na mjestu gdje trenutno stoji kornjaa ispisati rije, upiemo u komander komandu label i uz nju poevi s znakom navoda eljenu rije. Zgodno je to e rije biti ispisana u ovisnosti od smjera kornjaine glave (heading). Osim toga moemo rabiti sva slova koja su postavljena na Vaem raunalu, mijenjati im dimenzije i boju. Upiite slijedee linije instrukcija i nakon svake pritisnite enter. cs label "NeT cs label "NeT lt 90 label "NeT lt 90 label "NeT lt 90 label "NeT lt 45 fd 50 label "NeT rt 90 setpc 5 pu fd 100 pd label [Dosta je NeT-a] (slika 2 kao prilog "slika2_gif)

Pokuajte analizirati napisano i sliku. Vano je uoiti razliku izmedu ispisa rijei i reenica komandom label. Kada elimo da kornjaa ispie papiri na kome je rije, ispred rijei stavimo znak navoda. Ako elimo papiri s reenicom, eljenu reenicu stavimo u pravokutne zagrade. Reenica se u Logo-u zove "List", a rije "Word". Mnogo toga nismo rekli o komandi label i raznim mogunostima, ali budete li strpljivi ita ovih stranica, saznat ete. Sada jednostavno utipkajte donju instrukcijsku listu i pokuajte odgonetnuti znaenje pojedine procedure. cs pu repeat 300 [fd random 300 seth random 360 setpc random 15 label "HRskole] pd

U Logu se komande zovu "Procedures" ili procedure, a ima ih raznih vrsta i s raznim brojem ulaznih parametara, tj. ulaznih podataka. Evo jo jednog primjera (vidi sliku dolje) t se moe vrlo jednostavno postii pomou Loga. Evo rjeenja kojeg treba upisati u editor. Editor se ukljuuje s klikom na "Edall" u komanderskom prozoru ili izbornikom File, Edit. to zadatak cs repeat 18[repeat 20 [fd 1 rt 1] lt 90 setpc random 6 label "Logo rt 90] end Kornjaa kao slikar

Jedna vrlo lijepa sposobnost Logo-a je ubacivanje gotovih crtea u obliku bitmap-a. To su crtei koji mogu nastati u nekom alatu za crtanje (MS Paint ili drugi) ili se mogu dobiti skeniranjem. Oni se ubacuju u kornjain svijet s Bitmap, Load. Tako moete crtati podloge za vae logo programe pomou alata za crtanje, a kornjau uposliti da po tim podlogama radi razne stvari. Mogu je i obrnut postupak. Naime, neke crtee koje moete nacrtati pomou kornjae jednostavnim programiranjem, vrlo teko ete dobiti crtaim alatom. ak se i "svemogui" CorelDRAW moe mnogim situacijama sakriti pred kornjaom i programiranjem u Logu. Kako ipak nita nije svemogue, zato ne koristiti prednosti jednog i drugog u "svemoguoj kombinaciji". Izvoz crtea u kornjainom svijetu postiemo s Bitmap, Save. Pomou Bitmap, Active Area namjetamo veliinu izreska koji elimo spremiti na vrsti disk ili tiskati na papir.

Objanjenje IF-a Heres how you use IF. Since IF knows what you mean, you dont have to use the word THEN. TO SPIDERWEB :N IF :N > 100 [STOP] HEXAGON :N SPIDERWEB :N + 10 END Look at that first line in this new procedure. When the turtle reads this line, it learns that IF :N is greater than 100, then stop drawing. IF provjerava uvjet... ako je zadovoljen, izvrava ono iza IF-a. IFELSE je "ulanani" IF, tj. daje ti mogunost nastavljanja IF-a na IF... (poduvjetovanje) IFELSE tf instructionlist1 instructionlist2 If the first input has the value TRUE, then IFELSE runs the second input. If the first input has the value FALSE, then IFELSE runs the third input. WHILE i FOREACH su naredbe ponavljanja, tj. programske "petlje" koje odreeni dio naredbi koji slijedi izvravaju dok je odreeni uvjet zadovoljen. OP prekida proceduru u kojoj se nalazi. LPUT se koristi za stvaranje lista gdje se novi lan dodaje na kraj liste. __________________

FOR petlja!

Osim REPEAT petlje LOGO ima jo nekoliko razliitih naredbi za rad s petljama. Pogledajmo kako radi FOR petlja: Opi oblik naredbe FOR: FOR [i :br1 :br2 :korak] [...naredbe...] Objanjenje: Za svaki :i koji poinje od broja :br1 i ide do broja :br2 tako da se svaki sljedei :i poveava za navedeni korak, napravi naredbe koje se nalaze u uglatim zagradama. Ako je korak poveavanja broja :i 1, onda korak moemo i ispustiti. Primjer: FOR [i 1 4] [pr :i] Objanjenje: Za svaki :i koji ide od 1 do 4 (korak je 1) ispii vrijednost :i. Rezultat bi bio: 1 2 3 4 Nekoliko zadataka s nepoznanicama:

1. Napravi program koji crta pravilan mnogokut koji ima :n stranica duljine :d. Napomena: kod zakretanja kornjae moramo voditi rauna da

cijeli krug ima 360 stupnjeva i da je kut okretanja kornjae 360/:n 2. Napravi program koji crta :k pravokutnika jedan na drugome. Stranice pravokutnika su :a i :b. 3. Napravi program koji crta mreu od :k redova kvadrata. U svakom redu ima :m kvadrata. Duljina stranice kvadrata je :a. Nepoznanice ili varijable!

Zadatak nam je napraviti program koji crta pravokutnik razliitih dimenzija. Kao to znamo da bi mogli nacrtati pravokutnik potrebna nam je stranica a i stranica b. Zbog toga e program za crtanje pravokutnika koristiti dvije nepoznanice: jednu za stranicu a i drugu za stranicu b. Pogledajmo primjer programa koji crta pravokutnike raznih veliina:

Razne veliine likova - NEPOZNANICE ili VARIJABLE!

Podsjetimo se kako piemo programe kojima dajemo veliinu slike tek pri njihovom izvravanju.

Npr. elimo napraviti program koji crta kvadrate razliitih veliina. Umjesto broja koji oznaava veliinu stranice kvadrata koristiti emo slovo :a za kojeg emo rei da je to nepoznanica ili varijabla koja oznaava duljinu stranice kvadrata. Mogli smo koristiti i nekog drugo slovo ili rije. U MSW Logu je vano da ispred imena nepoznanice obavezno moramo staviti dvotoku (:a). Pogledajmo sada primjer programa za crtanje kvadrata razliitih veliina.

Nakon to je program napisan u editoru, moemo izai iz editora i u komandnom redu LOGO-a napisati KVADRAT 100, te

pritisnuti tipku ENTER. Nacrtati e se kvadrat koji ima stranice veliine 100. Ukoliko napiemo KVADRAT 50, nacrtati e se kvadrat stranica 50. Probajte nacrtati kvadrate razliitih veliina. Naravno, LOGO ima mogunost koristiti vie od jedne nepoznanice ili varijable. Ali o tome drugi put.

Zadaci za vjebu!

1. Pomou naredbe REPEAT napravi program koji crta lik kao na slici i spremi ga pod imenom LIK.

2. Pomou naredbe REPEAT napravi prvo niz kvadrata, a zatim i est zarotiranih nizova kvadrata kao na slici. Program s naredbama za rotirane nizove spremi pod imenom ROTACIJA.

20.01.2008. u 17:18 1 Komentara Print # ^ ponedjeljak, 14.01.2008. Spremanje programa !!!

Sigurno ste ve primjetili da kad zatvorite program LOGO izgubite sve ono to ste napisali u Editoru. Ponovnim startanjem programa LOGO editor je potpuno prazan. Kako bi ipak mogli sauvati programe koje napiemo u editoru i koji bi nam mogli i drugi dan trebati pohraniti emo programe na disk

raunala i vidjeti kako ih kasnije ponovo pozvati. Ukoliko elimo pohraniti na disk tada biramo naredbu Save ili SaveAs u glavnom izborniku LOGO programa. Nakon toga biramo mjesto (mapu) na disku gdje elimo pohraniti program i dodijeljujemo mu eljeno ime. Za pozivanje programa biramo naredbu Load iz glavnog izbornika i nakon toga traimo program koji elimo ponovo pokretati u LOGO-u. Nakon load-anja u editoru e se nalaziti naredbe programa kojeg smo odabrali.

14.01.2008. u 12:35 1 Komentara Print # ^ Rjeenja zadataka s REPEAT naredbom

Kod rjeavanja prvog zadatka koji treba nacrtati niz od 5 kvadrata napravila sa dva mala programia. Prvom

programiu sam dala ime kvadrat i on je zaduen za crtanje jednog kvadrata. Drugom programiu sam dala ime niz_kvadrata i on crta niz kvadarata, ali tako da koristi ve gotov program kvadrat koji sam prije pripremila. Na slian nain rijeila sam i ostala dva zadatka. Ako ima pitanja ubacite u komentar. Napomena: Ime programa svatko moe sam odrediti, ali je dobro da ime programa podsjea na ono to program treba nacrtati ili napraviti. Osim toga u imenu programa ne smiju biti prazna mjesta ili specijalni znakovi. (niz_kvadrata - tu sam crticom spojila dvije rijei kako bi ime programa bilo bez praznih mjesta)

14.01.2008. u 12:17 0 Komentara Print # ^

etvrtak, 10.01.2008. Zadaci s naredbom REPEAT!

Evo nekoliko zadataka koje moe rijeiti pomou naredbe REPEAT. 1. Napravi program koji crta niz od 5 kvadrata. Duljina stranice kvadarata neka bude 50.

2. Napravi program koji crta 6 esterokuta u nizu duljine stranica 50.

Napomena: Kod crtanja esterokuta kornjau mora okretati za 60 stupnjeva. Puni krug ima 360 stupnjeva. Ako 360 podijelimo sa 6 stranica koliko ima esterokut dobiti emo 60 stupnjeva. 3. Napravi program koji crta 4 pravokutnika u nizu. Jedna stranica pravokutnika je 30, a druga stranica pravokutnika

iznosi 60.

Naredba MAKE!

Oblik naredbe MAKE: MAKE "var1 vrijednost Naredbu MAKE koristima kada elimo u nekoj nepoznanici ili varijabli sauvati odreenu vrijednost. Mogli bi to usporediti s ladicom u koju privremeno spremamo dragocijenu vrijednost. Primjeri: MAKE "a 1 --> neka a postane 1 a=1 MAKE "b "informatika --> neka b postane "inormatika b = "informatika

You might also like