Petr v bludisku
Petřík na svojich potulkách prišiel do veľkého bludisko. Nemôže nájsť cestu von, musíme mu pomôcť. Hľadanie cesty bludiskom je jeden z často riešených algoritmizačních problémov. Použijeme obvyklú metódu - Petřík sa bude snažiť držať steny po pravej ruke, kým nenájde východ z bludiska von.
Začneme vytvorením nového programu. V okne programov stlačte tlačidlo
Nový
, Ako meno programu zadajte Cesta.
V poli Spoločné premenné a funkcie pripravíme dva
predmety pre bludisko - stenu a dvere. Mohli by sme si ich namaľovať, ale
radšej ich znamená ukradnúť už hotové z programu
Bludisko, ktorý je súčasťou Lite verzia Petra (u plnej
verzie Petra také predmety nájdete vo vzorovej knižnici predmetov). Vráťte
sa do okna programov a otvorte program Bludisko. V skupine
predmety (v poli Spoločné premenné a
funkcie) nájdite prvky múr
a dvere
(jedno ktoré, či pre Petríka alebo pre Lucku) a pretiahnite ich do poľa
Knižnica premenných a funkcií, do skupiny prvkov
predmet. Tým ste ich uložili do knižnice. Teraz sa vráťte
späť do programu Cesta. Roztvorte v knižnici skupinku
predmet a pretiahnite z nej prvky dvere a
stenu do poľa Spoločné premenné a funkcie.
Prvky prípadne premenujte na Dvere a
Múr.
Teraz vytvoríme plochu bludisko. Dvakrát kliknite na prvok
plocha
. Trochu si ju zmenšíme, nech nemusíme robiť príliš veľké bludisko.
Kliknite na tlačidlo Rozmery
. Objaví sa okno pre zadanie rozmerov plochy, rozmery sa zadávajú v
políčkach. Zadajte šírku plochy 12 a výšku
10.
Použite predmety Dvere a Múr a vytvorte bludisko podľa obrázku (pripomínam, že ľavé tlačidlo prvky presúva a pravej kopíruje - to platí aj pri editácii plochy):
Základom programu bude cyklus podmienené opakovanie
príkazov
. Chceme totiž, aby Petřík neustále opakoval svoje kroky po bludisku až do
okamihu, keď nájde dvere. V podmienke cykle použijeme prvok predmet
na pozíciu s Petrik
. Je podobný prvku predmet pred Petrík s tým rozdielom, že
sa vzťahuje k predmetu na políčku, na ktorom stojí Petřík. Nájdete ho v
podskupince Petřík - rozšírenie
.
Podmienku cyklu by sme mohli slovne vyjadriť: "Kým nie je
na pozíciu s Petrik predmet dverí, opakuj ...". Slovo nie je
nám dáva najavo, že potrebujeme opak testu na zhodnosť predmetov. Na tento
účel je určený prvok neplatí-li, že
. Prvku sa hovorí logická negácia a funguje tak, že
prevráti výsledok porovnávacej operácie z áno na
nie a z nie na áno. Nájdeme
ho v skupinke výpočty
, Podskupince logické operácie
.
Najskôr teda umiestnite do podmienky cyklu kým platí
prvok neplatí-li, že
. K nemu pripojte prvok zhodnosť predmetov
a do neho vložte prvky predmet na pozíciu s Petrik
a Dvere
.
V tele cyklu chceme zabezpečiť, aby Petřík prechádzal bludiskom tak, že
sa bude neustále držať steny po pravej ruke. Na začiatku cyklu nechajte
Petríka otočiť najskôr vpravo príkazom vpravo
. Ďalším príkazom bude cyklus podmienené opakovanie
príkazov
, Vložte ho za príkaz vpravo. Cyklus zaistí otáčanie
Petríka doľava tak dlho, kým pred sebou nenájde priechodné políčko. Preto
umiestnite do cyklu prvok vľavo
.
V podmienke druhého (vnútorného) cyklu budeme testovať, či je pred
Petrík nepriechodné políčko a či sa teda má Petřík ešte pootočiť
doľava. Prvým z nepriechodných políčok bude Múr
. Petřík nemôže prejsť ešte cez jednu prekážku, a to cez okraj plochy
okna. Okraj plochy okna môžeme testovať jedným zvláštnym predmetom -
okraj plochy
(Je v skupinke ** ** plocha
). Zvláštne je v tom, že to nie je dátová premenná, ale konštanta,
pretože jej obsah nemôžeme meniť. Jej hodnotu môžeme uchovávať v
premenných a testovať, ale nemôžeme ju zobraziť položením na plochu.
Potrebujeme teda pomocou dvoch testov predmetov pred Petrík vyjadriť
formuláciu "Kým je pred Petrík Múr alebo ich pred
Petrik okraj plochy, opakuj Vľavo". Slovo alebo je opäť
logický prvok - alebo
, Hovoríme mu logický súčet. Nájdete ho v skupinke
výpočty
, Podskupince logické operácie
. Vložte prvok alebo do podmienky cyklu a pridajte dve
nákupný predmetov pred Petrik, sa múrov as
okrajom.
Petřík je teraz otočený smerom na voľné políčko, takže nám zostáva
doplniť posledný prvok do hlavného cyklu - krok
. Prvok zaistí popojítí Petríka vpred na nájdené voľné políčko.
Nakoniec zaistíme, aby sa Petřík po nájdení cieľa na nás otočil a
čakal na stlačenie klávesy. Za hlavné cyklus preto doplňte prvky
vľavo
a vstup klávesy (čaká na stlačenie)
. Výsledný program vidíte tu:
Program spustite. Petřík prebieha celé bludisko, až nakoniec dorazí k východu. Schválne sme mu dali východ hneď za roh po ľavej strane, ale pretože to nevie, snaží sa nájsť východ vpravo a tak mu to dlho trvá.
Prehoďte medzi sebou prvky vľavo
a vpravo
. Ako iste tušíte, zmenili sme metódu hľadania východu tak, že sa Petřík
bude držať ľavej steny namiesto pravej. V našom bludisku nájde východ
oveľa skôr.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 280x (129.39 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Petr (sú obsiahnuté v EXE súbore, ktorý možno v programe priamo otvoriť)