Autorské riešenie
Túto úlohu budeme riešiť tak, že korytnačka sa nachádza medzi dvoma zastávkami, pričom električka bude prichádzať sprava k zastávke č.2. Vzdialenosť korytnačky od zastávky č.1 je s1, od zastávky č.2 s2 a vzdialenosť električky od zastávky č.2 je s3. Táto situácia je znázornená aj na nasledujúcom obrázku.
Na uloženie rýchlosti korytnačky použijeme premennú vK, rýchlosť električky si budeme pamätať v premennej vE. Všetky požadované informácie, ktoré potrebujeme vedieť, načítame z príkazového riadku a uložíme ich do daných premenných. Ďalej si vytvoríme ešte jednu premennú, a to pomoc. Bude to dvojprvkový zoznam, ktorý bude obsahovať iba hodnoty 0 alebo 1. Ak na prvej pozícii v zozname bude 1, tak to znamená, že korytnačka stihne dobehnúť na 1. zastávku. Podobne, ak bude 1 na druhej pozícii, tak korytnačka stihne dobehnúť na 2. zastávku. Ak by sa na určitej pozícii nachádzala 0, tak by to znamenalo, že korytnačka na danú zastávku nestihne dobehnúť. Poznáme vzťah, ktorý platí medzi veličinami rýchlosť, dráha a čas. My budeme porovnávať čas, za ktorý dobehne korytnačka na prvú a druhú zastávku s časom, za ktorý dôjde električka na prvú a druhú zastávku. Teda vo všeobecnosti paltí, že t=s/v. Vypočítať čas korytnačky k prvej a druhej zastávke nie je problém, pretože všetky hodnoty poznáme. Problém môže nastať so vzdialenosťou električky k zastávke č.1. Musíme si uvedomiť že jej dráha je rovná s1+s2+s3. Teraz už iba porovnáme čas korytnačky a električky k prvej a k druhej zastávke a na základe toho priradíme hodnotu jednotlivých prvkov zoznamu pomoc. Ostáva nám už iba posledná časť, a to vypísanie, ktorú zastávku si korytnačka má vybrať. Tu si pomôžeme s pomocnou premennou pomoc. Ak súčet prvkov zoznamu je 0, tak korytnačka nestihne dobehnúť ani na jednu zastávku. V prípade,že súčet je rovný 1, tak ak je hodnota 1 na prvom mieste zoznamu, tak korytančka stihne dobenúť na 1. zastávku. Druhá možnosť je, ak je hodnota 1 na druhom mieste zoznamu, vtedy korytnačka stihne dobehnúť na 2. zastávku. Posledná možnosť, aká môže nastať je tá, že súčet prvkov zoznamu bude 2. To bude znamenať, že korytnačka stihne dobehnúť na prvú a aj na druhú zastávku. Pri tejto možnosti už iba porovnáme vzdielenosť korytnačky k jednotlivým zastávkam a vyberieme si tú, ktorá je k nej bližšie. Riešenie na základe nášho rozboru v Imagine: ;Imagine
logo
viem zastavka pis [Zadajte rýchlosť korytnačky:] urob "vK citajslovo pis [Zadajte rýchlosť električky:] urob "vE citajslovo pis [Zadajte vzdialenosť korytnačky od 1. zastávky:] urobTu "s1 citajslovo pis [Zadajte vzdialenosť korytnačky od 2. zastávky:] urobTu "s2 citajslovo pis [Zadajte vzdialenosť električky od 2. zastávky:] urobTu "s3 citajslovo urob "pomoc [] ak2 (:s1/:vK)<=((:s1+:s2+:s3)/:vE) [urob "pomoc vlozPrvy 1 :pomoc] [urob "pomoc vlozPrvy 0 :pomoc] ak2 (:s2/:vK)<=(:s3/:vE) [urob "pomoc vlozPosledny 1 :pomoc] [urob "pomoc vlozPosledny 0 :pomoc] ak (pr :pomoc) + (po :pomoc)=0 [pis [Nestihnem dobehnúť ani na jednu zastávku.]] ak (pr :pomoc) + (po :pomoc)=1 [ ak2 pr :pomoc =1 [pis [Stihnem dobehnúť na 1. zastávku.]] [pis [Stihnem dobehnúť na 2. zastávku.]] ] ak (pr :pomoc) + (po :pomoc)=2 [ ak2 :s1<:s2 [pis [Stihnem dobehnúť na 1. zastávku.]] [pis [Stihnem dobehnúť na 2. zastávku.]] ] koniec Riešenie v jazyku Python. Zmena nastale iba v názve premenných, ktoré určujú rýchlosť korytnačky a električky.
Python
def zastavka(): rychlostKoryt=float(input("Zadajte rýchlosť korytnačky:")) rychlostElektr=float(input("Zadajte rýchlosť električky:")) s1=float(input("Zadajte vzdialenosť korytnačky od 1. zastávky:")) s2=float(input("Zadajte vzdialenosť korytnačky od 2. zastávky:")) s3=float(input("Zadajte vzdialenosť električky od 2. zastávky:")) zastavky=[0,0] if (s1/rychlostKoryt)<=((s1+s2+s3)/rychlostElektr): zastavky[0]=1 if (s2/rychlostKoryt)<=(s3/rychlostElektr): zastavky[1]=1 if (zastavky[0]+zastavky[1]==0): print("Nestihnem dobehnúť ani na jednu zastávku na električku.") elif (zastavky[0]+zastavky[1]==1): if zastavky[0]==1: print("Stihnem dobehnúť na 1. zastávku (budem bežať v smere jazdy električky).") else: print("Stihnem dobehnúť na 2. zastávku (budem bežať oproti električke).") else: if s1<s2 : print("Stihnem dobehnúť na 1. zastávku (budem bežať v smere jazdy električky).") else: print("Stihnem dobehnúť na 2. zastávku (budem bežať oproti električke).") Vaše zaujímavé riešenia a najčastejšie chyby Najčastejšia chyba, ktorá sa pri riešení tejto úlohy vyskytla, bolá tá, že žiaci zabudli ošetriť niektoré prípady. Hlavne sa zabúdalo na to, že korytnačka nestihne dobehnúť ani na jednu zastávku. Vyskytlo sa chybné uvažovanie, že ak na prvú nestihnem dobehnúť, tak určite stihnem dobehnúť na druhú zastávku. Taktiež veľkým problémom bola neprehľadnosť kódu. Chválim tých žiakov, ktorý svoj kód patrične okomentovali. Bolo to čitateľné a bolo jasne vidieť, čo daným kódom mysleli. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |