Autorské riešenie V úlohe bolo potrebné navrhnúť postup, pomocou ktorého vypíšeme odchody autobusu v pravidelných rozostupoch (intervaloch). Vieme, že prvý autobus odíde presne o siedmej hodine a posledný čo najneskôr pred sedemnástou hodinou. Medzi siedmou a sedemnástou hodinou uplynie 600 minút. Celkový počet odchodov je uvedený v textovom poli text1. Chceme preto zistiť, aké veľké rozostupy medzi dvoma odchodmi zvoliť tak, aby bol zachovaný celkový počet odchodov a zároveň posledný autobus odišiel čo najneskôr pred sedemnástou (rozostupy preto chceme zvoliť čo najväčšie). Nakreslíme si takýto obrázok. Z obrázka je jasné, že počet odchodov je o 1 väčší ako počet intervalov (rozostupov) medzi prvým a posledným odchodom. Preto veľkosť rozostupov určíme pomocou nasledujúceho príkazu:
urobtu "rozostup cpodiel 10*60 text1-1 Ak poznáme veľkosť jedného rozostupu, ľahko zistíme, že posledný autobus niekedy odíde aj oveľa skôr ako o 17:00. Výpočtom si môžeme overiť, že presne o 17:00 odíde posledný autobus len v prípade, ak celkový počet odchodov je 21, 25, 26, 31 alebo 41 (celkový počet odchodov v projekte nadobúda len hodnoty od 20 do 49). V spomínaných prípadoch výraz 10*60/(text1-1) predstavuje celé číslo. Overte si tiež, že časový rozdiel medzi posledným odchodom a časom 17:00 môže byť väčší ako veľkosť rozostupu! V časti Vaše zaujímavé riešenia ponúkame správne vysvetlenie, ktoré zaslal vo svojom riešení jeden z tímov. Ak máme zistenú veľkosť rozostupov, ostáva nám správne vypočítať čas jednotlivých odchodov. V tejto časti môže byť postup rôzny. V našom riešení postupne zvyšujeme pomocnú premennú pomocna a po každom zvýšení o hodnotu rozostupu prevedieme čas na hodiny a minúty pomocou príkazov cpodiel a zvyšok. Treba si tiež uvedomiť, že hodiny začíname počítať od hodnoty 7.
urobtu "pomocna 0 Ostáva nám naprogramovať výpis všetkých odchodov na pracovnú plochu. Je potrebné mať na pamäti tieto skutočnosti:
urobtu "retazec " Prechod na novú hodinu si vieme kontrolovať pomocou premennej staraHodina, v ktorej si budeme pamätať hodinu predchádzajúceho odchodu. Ak sa hodina nového odchodu bude líšiť, premennú reťazec vypíšeme pomocou procedúry pridajRiadokDoVypisu a vymažeme všetko, čo v nej bolo.
ak (:staraHodina <> :hodina) [ Výsledná procedúra vypisOdchodov môže vyzerať nasledovne:
viem vypisOdchodov Pozrite si príklad cestovného plánu pre 46 celkových odchodov bez grafických efektov: Vaše cestovné plány vrátane grafických efektov sú v galérii obrázkov k tejto úlohe. Vaše zaujímavé riešenia: Každé riešenie bolo svojím spôsobom zaujímavé a aj keď sa niekde objavil malý nedostatok, vynahradili ste ho pekným spracovaním v inej časti úlohy. Pripájame jeden zaujímavý komentár, ktorý nám zaslal vo svojom riešení jeden z tímov. Uvádzame ho doslovne tak, ako bol uvedený v zdrojovom kóde:
;------ Odchody autobusov sa normalne pisu v minutach. Preto by aj intervaly mali byt v minutach.
Moze vsak nastat situacia, ze autobusy prestanu chodit prilis skoro. Napriklad v pripade
kde pocet odchodov je 43, interval vychadza 13.95.. v minutach. Nemoze to vsak byt 14 minut,
najviac 13. Zaokruhlujeme na minuty, pretoze casy autobusov sa bezne uvadzaju v minutach
a intervaly maju byt rovnake. V tomto pripade by autobusy namiesto 10 hodin jazdili iba
13*43/60 = 9.32 hodin. Odchody v rámci jednej hodiny niektorí z Vás overovali takýmto príkazom:
kym [zaroven :minuta < 60 :pocet < :odchody] Na spájanie reťazcov v rámci jedného riadku ste využívali príkazy slovo a veta:
urobtu "retazec (veta :retazec (veta :hodina ": :minuta) ",)
alebo takisto aj príkaz vlozpo:
urobtu "retazec vlozpo :hodina :retazec Niektorí z Vás nevyužívali pripravenú procedúru pridajRiadokDoVypisu, ale odchody vypisovali do vytvoreného textového poľa pomocou príkazov pisaniedotextu a pripis:
pisaniedotextu "text5 pripis :hodiny Jeden z tímov vytvoril navyše špeciálnu procedúru generujNazov, ktorá pre každý riadok vo výpise vygenerovala názov autobusu:
viem generujNazov Najčastejšie nedostatky:
| ||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |