ZADACI ZA GRADSKO NATJECANJE IZ INFORMATIKE U OPATIJI 1997./98.

OSNOVNA ŠKOLA PROGRAMSKI JEZIK “PCLOGO”

ZADATAK “KORDI.LGO”

15 BODOVA

Napisati proceduru “kordi” koja crta vodoravnu os koordinatnog sustava obilježenu slovom x i okomitu os obilježenu slovom y, ali samo pozitivne vrijednosti (prvi kvadrant). Nakon toga traži se od korisnika da upiše redom šest brojeva. Za odsječak na osi x obilježen s 0 (sjecište obiju osi), y će imati prvu vrijednost iz niza. Za broj 1 na osi x, vrijednost za os y će biti drugi broj u upisanom nizu od šest brojeva. I tako dalje do vrijednosti 5 na osi x, koja će imati za os y posljednji (šesti) upisani broj. Sve točke nastale na taj način moraju biti spojene crtom, poput grafa. Sjecište osi je točno u sredini zaslona (ekrana), a točke na x i y osi udaljene jedna od druge za 30 piksela (kornjačina koraka). Nije potrebno označavati posebno te točke-vrijednosti na osima x i y.

Primjeri rada sa slikama:
? kordi? kordi
?UPIŠITE BROJEVE?UPIŠITE BROJEVE
? 1 2 1 2 1 2? 5 4 1 2 3 5

rješenje:

    to osi
    seth 0 fd 200 tt "y bk 200 rt 90 fd 300 tt"x bk 300
    end
    to crtaj :n :niz
    if empty? :niz [stop]
    setxy list 30*:n 30*(first :niz)
    crtaj :n+1 bf :niz
    end
    to kordi
    pr [upisite niz od sest brojeva] osi crtaj 0 rl
    end

TESTIRANJE ZADATKA “KORDI.LGO”

MAXIMALNO BODOVA: 15
 

SLUČAJ: BODOVI
AKO SE NACRTA SAMO KOORDINATNI SUSTAV BEZ OZNAKE X i Y + 2
AKO SE NACRTA KOORDINATNI SUSTAV SAMO S JEDNOM OZNAKOM (ili X ili Y) +1
ili
ILI AKO SE NACRTAJU OBJE OZNAKE i X i Y +2
AKO SE POJAVI PORUKA PRIJE UNOSA PODATAKA, npr. PORUKA “UPISITE BROJEVE” ili SLIČNA +1
AKO SE PODACI UNOSE JEDAN PO JEDAN, A NE ODJEDNOM +2
ili
AKO SE PODACI UNOSE ODJEDNOM U NIZU +5
AKO SE CRTAJU TOČNO TOČKE, ALI NE SVE +2
ili

AKO SE CRTAJU TOČNO SVE TOČKE

+5

KOD TESTIRANJA TOČNOSTI CRTANJA UPISATI:
?kordi?kordi?kordi
UPIŠITE BROJEVEUPIŠITE BROJEVE UPIŠITE BROJEVE
? 1 1 1 1 1 5 ? 0 1 2 3 4 5 ? 5 1 5 1 5 0

zadatak i rješenje: Fredi Glavan, prof.


ZADATAK “ZAMJENI.LGO”

30 BODOVA

Napisati proceduru “zamjeni” koja traži riječ i jedno slovo iza nje. Ona sve samoglasnike u riječi zamjeni sa tim slovom ispisujući novu riječ, te ispiše koliko zamjena je bilo.

Ako se ne upiše ništa nakon pozivanja procedure “zamjeni”, ispisuje se na zaslonu (ekranu) upozorenje: upisite nesto! Ako se upiše krivi podatak, a ne jedna riječ i do nje jedno slovo, ispiše se:

pogresan upis!

Ako se upiše npr. Riječ: otorinolaringlologija i slovo: i

Treba se dobiti na zaslonu:

ITIRINILIRINGILIGIJI

BROJ ZAMJENA JE 10

PRIMJER RADA ZA GORNJI SLUČAJ: ? zamjeni? otorinolaringlologija i

ITIRINILIRINGILIGIJI

BROJ ZAMJENA JE 10

 

rješenje:

    to zamjeni
    local "r1 make "r1 rl if empty? :r1 [pr [upisite nesto!] stop]
    local "s make "s last :r1
    if (or (not ((count :r1)=2)) \
    (not (word? (first :r1))) \
    (not (word? :s)) ((count :s)>1)) \
    [pr [pogresan upis!] stop]
    preradi first :r1 last :r1 0
    end
    to preradi :lista :slovo :br
    if empty? :lista [pr " (pr [broj zamjena je] :br) stop]
    if samoglas (first :lista) \
    [type :slovo preradi bf :lista :slovo :br+1] \
    else [type first :lista preradi bf :lista :slovo :br]
    end
    to samoglas :sam
    if member? :sam [a e i o u] [op "true] else [op "false]
    end
     

TESTIRANJE ZADATKA “ZAMJENI.LGO”

MAXIMALNO BODOVA: 30
 

SLUČAJ UNOSA:

ISPIS:

BODOVI

? zamjeni

ana e

ENA

BROJ ZAMJENA JE (netočan i mjenja samo prvo slovo)

+1

ili

? zamjeni

ana e

ENA

BROJ ZAMJENA JE 1 (točan, ali mjenja samo prvo slovo)

+2

? zamjeni

ivana k

KVKNK

BROJ ZAMJENA JE (netočan, ali mjenja sva slova)

+5

ili

? zamjeni

ivana k

KVKNK

BROJ ZAMJENA JE 3 (točan i mjenja sva slova)

+10

? zamjeni

otorinolaringologija e

ETERENELERENGELEGEJE

BROJ ZAMJENA JE (netočan, ali mjenja sva slova)

+ 3

ili

? zamjeni

otorinolaringologija e

ETERENELERENGELEGEJE

BROJ ZAMJENA JE 10

+ 6

? zamjeni

(pritisak na enter)

UPISITE NESTO!

+2

? zamjeni

iva i mara k

POGRESAN UPIS!

+2

? zamjeni

iva ka

POGRESAN UPIS!

+2

? zamjeni

[iva iva] k

POGRESAN UPIS!

+2

? zamjeni

[iva iva] [k k]

POGRESAN UPIS!

+2

? zamjeni

[iva k]

POGRESAN UPIS!

+2

zadatak i rješenje: Fredi Glavan, prof.


ZADATAK “TROKUTI.LGO”

30 BODOVA

Izradi program čija glavna procedura crta na sredini ekrana jedan jednakostraničan trokut. Dužina stranice trokuta se unosi pozivom procedure TROKUTI :A . Trokut mora biti popunjen bojom a njegova središnjica ( pola visine trokuta ) mora biti u sredini ekrana (slika 1 ).

Sada se crta drugi trokut koji ima zajedničku stranicu AB s prvim trokutom ( slika 2.). Drugi trokut započinje rotaciju oko prvog trokuta na slijedeći način :
- u smjeru kazaljke na satu,
- u točki A je vezan za prvi trokut, - ne ostavlja trag za sobom, nego imamo dojam animcije,
- kada se potpuno nasloni na stranicu AC rotirajući se trokut veže za točku C i nastavlja rotaciju,
- kada se potpuno nasloni na stranicu CB rotirajući se trokut veže za točku B i nastavlja rotaciju.

Na kraju rotirajući trokut završava svoj put i postavlja se gdje je bio na početku. Obrati pažnju da glavni trokut bude na sredini ekrana.Isto tako pokušaj kontrolirati unošenje nepoznanice :A . Ako je nepoznanica : A prevelika i animacija se ne može prikazati u potpunosti program se prekida.

NAPOMENA:

Oznake vrhova i prikaz smjera kretanja trokuta na slikama služe da pojasne zadatak i nije ih potrebno prikazivati. Boja ekrana mora biti crna a boja kornjače bijela.

testiranje zadatka:
 

? trokuti 80
? trokuti 160
? trokuti 200 (prekida se program jer crtež izlazi izvan zaslona)

rezultati testiranja

bodova

sve se obavlja

30

u 3. testu se ne prekida program

25

glavni trokut nije u sredini zaslona

20

rotirajući trokuti se ne brišu

10

rotirajući se trokut ne pojavljuje na stranicama glavnog

5

nacrtan je samo glavni trokut

1

 

provjera točnosti sredine trokuta

Kod poziva trokuti 116, pola visine iznosi 50 što znači ako idemo fd 50 dolazimo na vrh trokuta odnosno s bk 50 na dno trokuta

 

rješenje:

    TO TRO :A
    MAKE "B (SQRT (:A*:A-:A/2*:A/2))/2
    PU BK :B RT 90 BK :A/2
    MAKE "T GETXY
    PD REPEAT 3[FD :A LT 120]
    PU HOME PD FILL
    SETXY :T RT 90
    END
    TO ROTACIJA
    REPEAT 9[PD REPEAT 3[FD :A RT 120] WAIT 15 PE \
    REPEAT 3[FD :A RT 120] RT 240/9 ASK 2[TRO :A PU HOME]]
    RT 60 PD REPEAT 3[FD :A LT 120]
    END
    TO TROKUTI :A
    CS HT PD
    IF :A>160 [PR [PREVELIKI UNOS, PONOVO ]]
    FS TRO :A
    REPEAT 3[ROTACIJA FD :A RT 180]
    PU HOME TRO :A
    END

zadatak i rješenje: Boris Turjak, prof.


 

ZADATAK “BOCANJE.LGO”

25 BODOVA

Napiši program proceduru "bocanje" koja crta vodoravnu crtu na ekranu i prikazuje igralište za boćanje i bulin koji se kod pokretanja procedure "bocanje" uvijek nalazi na drugom mjestu po x osi pozitivna vrijednost na desnoj strani ekrana (sl.1).

Napiši proceduru "igrac1 : bacanje" koja će balotu igrača 1 što više približiti bulinu i kod pokretanja procedure treba biti prikazano odakle igrač baca bulin. Igrač se i uvijek nalazi na drugom mjestu po x osi negativna vrijednost (lijeva strana ekrana).

Napiši proceduru "igrac2 : bacanje" koja će balotu igrača 2 što više približiti bulinu. Kod pokretanja procedure treba biti prikazano odakle igrač baca bulin. Igrač se uvijek nalazi na drugom mjestu po x osi negativna vrijednost (lijeva str. Ekrana) (sl.2).

Nakon što si pokrenuo procedure "bocanje " , "igrac1 : bacanje" i proceduru "igrac2 : bacanje " trebaš dobiti sliku koja je balota bliže bulinu i ispis koji je igrač pobjedio. Pobjednik je onaj igrač čiji je balun bliži bulinu (sl.3). Ako je udarac prejak na ekranu dobiti ćeš ispis "balota izvan igrališta ".

Program snimi pod imenom "boćanje. Lgo ".

 

slika 1

kod pokretanja procedure bocanje bulin se nalazi na pozitivnoj vrijednosti koordinate x, uvjek na drugom mjestu

 

slika 2

kod pokretanja procedure igrac2 balota igrača 1 je vidljiva kao i položaj igrača 2

 

slika 3
igrac1 40
igrac2 42
igrac1 je pobjedio
 

rješenje:

    to igrac1
    st make "a1 random 5 make "c1 random 200 make "b1 :a1 - :c1
    pu setx :b1 pd type[unesi jacinu udarca za prvog igraca]
    make "j1 read setheading 90 pu repeat :j1 [fd 1]
    make "pol1 xcor pd
    if or (xcor>300) (xcor<0) [pr[balota je izasla iz igralista] stop]
    stampoval 10 10 fd 10 ht
    end
    to igrac2
    st make "a2 random 5 make "c2 random 200 make "b2 :a2-:c2
    pu setx :b2 pd type[unesi jacinu udarca drugog igraca]
    make "j2 read setheading 90 pu repeat :j2 [fd 1]
    make "pol2 xcor pd
    if or (xcor>300) (xcor<0) [pr[balota je izasla iz igralista] stop]
    stampoval 10 10 fd 10 ht
    end
    to igraliste
    ht pu setx -300 pd setx 300 make "balun random 280 setx :balun
    make "balun xcor pu sety 10 pd stampoval 10 10
    igrac1 igrac2
    make "rez1 abs(:pol1)-abs(:balun) make "rez2 abs(:pol2)-abs(:balun)
    if :rez1<:rez2 then print [prvi igrac je pobjedio]
    if :rez2<:rez1 then print [drugi igrac je pobjedio]
    if :rez2=:rez1 then print [jednaki su]
    end

zadatak i rješenje: Boris Bolšec, prof.