Rješenja čitalaca


Pravila rješavanja:

1) Svako rješenje koje radi i prođe testiranje dobiva 100 bodova.

Zatim slijede pravila za negativne bodove:

2) Svaka globalna varijabla (globalni MAKE) -10 bodova.

3) Svaki upotreba MAKE (pa makar i na lokalnoj varijabli) koja mijenja vrijednost varijable unutar jedne procedure (ili jedne invokacije procedure) oblika: make "x :x + :a (ili tako nekako) -10 bodova.

4) Svako (nepotrebno) pretvaranje liste u array (recimo radi sortiranja) -10 bodova. (Niti jedan zadatak neće trebati array).

5) FOR, WHILE, DO i REPEAT petlje se ne kažnjavaju. Ipak imajte na umu da takove konstrukcije obično zahtjevaju promjenu varijabli sa MAKE - što se kažnjava!

6) Većina zadataka će tražiti da procedura outputira rezultat, a ne da ga procedura koja računa sama ispiše. Pazite na to -10 bodova.

U slučaju da nema kaznenih bodova - ostaje naša subjektivna procjena (obično će bolje biti kraće ili možda jasnije)

Rješenje zadatka Dubina:

Riješio:
David Blažević
učenik 8. razreda
OŠ. "Zamet" Rijeka

to flatten1 :lst
if empty? :lst [op []]
op se first :lst flatten1 bf :lst
end

to lat :lst
if empty? :lst [op "true]
if list? first :lst [op "false]
op lat bf :lst
end

to dubina :lst
if lat :lst [op 1]
op sum 1 dubina flatten1 :lst
end

Ovo je moje rješenje zbog toga što nam ovaj tjedan nitko nije poslao svoje rješenje...........Čista konstrukcijska rekurzija
Znači glavna procedura je dubina koja u stop liniji pita da li je lista :lst LAT (List of Atoms) tj. da li se sastoji samo od riječi........Ako nije onda doda 1 i pozove dubinu ali sa jednim nivoom lista manje........flatten1 makne jedan nivo lista...... To je to........

Rješenje zadatka Max:

Rješio:
LOVRO ŽMAK
učenik 7b razreda
OŠ "RIKARD KATALINIĆ JERETOV OPATIJA"

to obradi :rij
if empty? :rij then stop
if (count :rij)>:s then make "s (count :rij)
if list? first :rij then for "k 1 (count :rij) [obradi (item :k :rij)] 
obradi bf :rij
end

to maxi :i
if empty? :i then stop 
if list? first :i then obradi first :i 
maxi bf :i
end

to max :i
nodraw ct
if not list? :i then [pr [krivi unos] stop] make "s (count :i) maxi :i
op :s
end

Rješenje zadatka izravnaj:

Rješio:
Radan Škorić
razred: 7e
OŠ "Rikard Katalinić Jeretov" Opatija

to cisti :l
if emptyp :l [op :li]
ifelse listp first :l ~
	[localmake "o cisti first :l] ~
	[make "li lput first :l :li]
op cisti bf :l
end

to izravnaj :list
if not listp :list [pr [krivi unos!] stop]
make "li []
op cisti :list
end

Zbog globalne varijable i dva make-a na njoj -20 bodova.
Kako to izbjeći polgedajte u našim rješenjima.
Ocjena 80 bodova.


Napisao: Hrvoje.Blazevic@bbm.hr
David.Blazevic@posluh.hr
Fredi.Glavan@public.srce.hr