Autorské riešenie
Pri riešení tejto úlohy musíme zohľadniť niekoľko podmienok súčasne:
Odkiaľ teda začneme úlohu riešiť?
Od akého rozmeru začneme? Najväčší možný rozmer je taký, že na vyplnenie šírky použijeme dva malé a jeden veľký štvorec.
Označme si hľadanú dĺžku strany malého štvorca x a pomer nech je pomer dĺžok strán štvorcov. Pre šírku potom platí: x + pomer × x + x = sirka Po úprave: x = sirka / (pomer + 2) Nezabúdajme, že x by malo byť celé číslo (celý počet milimetrov). Výslednú dĺžku zaokrúhlime. Časť programu môže vyzerať nasledovne: ;Imagine logo #Python def velkostVzorky1(sirka, dlzka, pomer): x = sirka // (2 + pomer) Ďalšou podmienkou je, aby strana malého štvorca bola aspoň 1 mm. Ak x bude aspoň 1 overme, či takto vyplníme celú šírku. Ak sa pozrieme na opakovanie vzorky zistíme, že sa opakuje dvojica malý a veľký štvorec. Nakoniec sa ešte pridá jeden malý štvorec.
Ak od celej šírky odpočítame stranu malého štvorca, rozdiel musí byť deliteľný súčtom strán malého a veľkého štvorca. ;Imagine logo #Python def velkostVzorky1(sirka, dlzka, pomer): x = sirka // (2 + pomer) while x >= 1: print (x) if (sirka - x) % (x + pomer * x) == 0: #vieme, ze vzorka vyplnila celu sirku Podobne overíme či vzorka dokáže vyplniť celú dĺžku. Ak áno, máme riešenie: x a x×pomer. Ak nie, zmenšíme stranu malého štvorca o 1 mm a pokračujeme v overovaní. Výsledok môže vyzerať nasledovne: ;Imagine logo def velkostVzorky1(sirka, dlzka, pomer): x = sirka // (2 + pomer) while x >= 1: print (x) if (sirka - x) % (x + pomer * x) == 0: #vieme, ze vzorka vyplnila celu sirku if (dlzka - x) % (x + pomer * x) == 0: return x, pomer * x x = x - 1 Všimnime si jednu vec. Podľa zadania má procedúra, resp. funkcia zistiť vhodné rozmery štvorcov. Nikde nie je napísané, čo by s nimi mala spraviť. Môže ich vypísať, môže ich vložiť do nejakého textového políčka a pod. V našom riešení sme sa rozhodli, že procedúra (funkcia) tieto hodnoty vráti. Vráti ich ako dvojicu. V Imagine logu je to zoznam, v Pythone n-tica. V čom je toto rozhodnutie lepšie? Ak by procedúra (funkcia) výsledok vypísala, už ho nevieme ďalej použiť. Ak procedúra (funkcia) výslednú hodnotu vráti, vieme s touto hodnotou ďalej pracovať. Vieme ju vypísať, vieme ju použiť ako súčasť ďalších výpočtov a pod. Takto sa procedúra (funkcia) stane univerzálnejšie použiteľnou. A na koniec ešte jedna poznámka. Ak riešenie neexistuje, procedúra (funkcia) vráti prázdny zoznam (n-ticu). Možeme to chápať podobne ako v matematike. Ak úloha nemá riešenie, riešením je prázdna množina. Vaše zaujímavé riešenia a najčastejšie chyby Na riešenie tejto úlohy sa nepodujal nikto. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |