Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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ý Poličkové grafika
, 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 Poličkové grafika
a dvere Poličkové grafika
(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 Poličkové grafika
. Trochu si ju zmenšíme, nech nemusíme robiť príliš veľké bludisko. Kliknite na tlačidlo Rozmery Poličkové grafika
. Objaví sa okno pre zadanie rozmerov plochy, rozmery sa zadávajú v políčkach. Zadajte šírku plochy 12 a výšku 10.

Poličkové grafika

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):

Poličkové grafika

Základom programu bude cyklus podmienené opakovanie príkazov Poličkové grafika
. 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 Poličkové grafika
. 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 Poličkové grafika
.

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 Poličkové grafika
. 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 Poličkové grafika
, Podskupince logické operácie Poličkové grafika
.

Najskôr teda umiestnite do podmienky cyklu kým platí Poličkové grafika
prvok neplatí-li, že Poličkové grafika
. K nemu pripojte prvok zhodnosť predmetov Poličkové grafika
a do neho vložte prvky predmet na pozíciu s Petrik Poličkové grafika
a Dvere Poličkové grafika
.

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 Poličkové grafika
. Ďalším príkazom bude cyklus podmienené opakovanie príkazov Poličkové grafika
, 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 Poličkové grafika
.

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 Poličkové grafika
. 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 Poličkové grafika
(Je v skupinke ** ** plocha Poličkové grafika
). 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 Poličkové grafika
, Hovoríme mu logický súčet. Nájdete ho v skupinke výpočty Poličkové grafika
, Podskupince logické operácie Poličkové grafika
. 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 Poličkové grafika
. 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 Poličkové grafika
a vstup klávesy (čaká na stlačenie) Poličkové grafika
. Výsledný program vidíte tu:

Poličkové grafika

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á.

Poličkové grafika

Prehoďte medzi sebou prvky vľavo Poličkové grafika
a vpravo Poličkové grafika
. 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ť)

 

Všetky články v sekcii
Poličkové grafika
Článok pre vás napísal Panda38
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programátor C++, WinAPI, ASM.
Aktivity