Autorské riešenie
Podľa zadania úlohy poznáme celkový počet zapísaných voličov (spolu) a priebežné spočítané hlasy troch kandidátov v zostupnom poradí (a, b, c; a > b > c). Pre priebežne spočítané hlasy a, b, c a zvyšok hlasov (zvyšok; zvyšok = spolu - (a + b + c)) môžu nastať rôzne situácie týkajúce sa konečného poradia kandidátov, ktoré sú zachytené nižšie v tabuľke. Veľmi užitočnou pomôckou pre určenie konečného poradia kandidátov pre uvedené sitácie sú diagramy s farebnými stĺpcami predstavujúcimi množstvo hlasov kandidátov - A (zelený stĺpec), B (červený stĺpec), C (modrý stĺpec) a zvyšné zatiaľ nezapočítané hlasy (žltý stĺpec nad červeným alebo modrým stĺpcom).
Na základe tohto rozboru vytvoríme programy v Imagine Logu a Pythone, ktoré pre zadané 4 hodnoty hlasov zachytávajú 11 uvedených situácií s možným konečným poradím kandidátov volieb. Procedúra vysledky so 4 parametrami (celkovým počtom zapísaných voličov, počtami priebežne získaných hlasov 3 kandidátmi na prezitenta), môže v jazyku Imagine Logo vyzerať napríklad takto: viem vysledky :spolu :a :b :c viem start Riešenie úlohy v jazyku Python môže vyzerať napríklad takto: def vysledky(spolu, a, b, c): ''' vypočíta a vypíše možné konečné poradie jednotlivých kandidátov :param spolu: celkový počet voličov :type spolu: int :param a: počet získaných hlasov kandidáta A :type a: int :param b: počet získaných hlasov kandidáta B :type b: int :param c: počet získaných hlasov kandidáta C :type c: int :rtype hlaska: str ''' zvysok = spolu - (a + b + c) if a > b + zvysok: if b > c + zvysok: hlaska = "A bude na 1. mieste, B bude na 2. mieste, C bude na 3. mieste." else: if b == c + zvysok: hlaska = "A bude na 1, mieste, B bude na 2. mieste, \ C bude na 2. alebo 3. mieste." else: hlaska = "A bude na 1. mieste, B bude na 2. alebo 3. mieste, \ C bude na 2. alebo 3. mieste." else: if a == b + zvysok: if b > c + zvysok: hlaska = "A bude na 1. mieste, B bude na 1. alebo 2. mieste, \ C bude na 3. mieste." else: if b == c + zvysok: hlaska = "A bude na 1. mieste, B bude na 1. alebo 2. mieste, \ C bude na 2. alebo 3. mieste." else: hlaska = "A bude na 1. mieste, B bude na 1. alebo 2. alebo \ 3. mieste, C bude na 2. alebo 3. mieste." else: if b > c + zvysok: hlaska = "A bude na 1. alebo 2. mieste, B bude na 1. alebo 2. mieste,\ C bude na 3. mieste." else: if b == c + zvysok: hlaska = "A bude na 1. alebo 2. mieste, B bude na 1. alebo \ 2. mieste, C bude na 2. alebo 3. mieste." else: if a > c + zvysok: hlaska = "A bude na 1. alebo 2. mieste, B bude na 1. alebo \ 2. alebo 3. mieste, C bude na 2. alebo 3. mieste." else: if a == c + zvysok: hlaska = "A bude na 1. alebo 2. mieste, B bude na 1. \ alebo 2. alebo 3. mieste, C bude na 1. alebo 2. alebo 3. mieste." else: hlaska = "A bude na 1. alebo 2. alebo 3. mieste, \ B bude na 1. alebo 2. alebo 3. mieste, C bude na 1. alebo 2. alebo 3. mieste." return hlaska print(vysledky(250, 100, 80, 60)) print(vysledky(260, 100, 80, 70)) print(vysledky(265, 100, 80, 70)) print(vysledky(270, 100, 90, 70)) print(vysledky(260, 100, 80, 60)) print(vysledky(270, 100, 80, 70)) print(vysledky(270, 100, 90, 60)) print(vysledky(280, 100, 90, 70)) print(vysledky(285, 100, 90, 70)) print(vysledky(290, 100, 90, 70)) print(vysledky(300, 100, 90, 70)) Táto súťažná úloha je zameraná na použitie logického myslenia a dôslednosť uvažovania (rozlíšenie rôznych situácií), na precvičenie použitia procedúry s parametrami a s výstupom, resp. funkcie s parametrami, na precvičenie práce s príkazmi viacnásobne vnoreného vetvenia a príkazu priradenia. Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy sa zapojilo 11 tímov kategórie EXPERT. Žiaden tím nezískal plný počet bodov. Najdôslednejšie riešenie odovzdal tím Bojovník Macek. Uvedená úloha bola pre súťažiacich vešmi náročná, lebo v nej dosiahli priemerný počet bodov 1,8 z možných 6 bodov. V jazyku Python riešilo úlohu 6 tímov a v jazyku Imagine Logo 5 tímov. V riešeniach sme zaregistrovali nasledovné chyby:
Odporúčame súťažiacim, aby nabudúce pri riešení úloh si vykreslili možné prípady a zotriedili ich v tabuľke ako je to uvedené v autorskom riešení. Rovnako odporúčame namiesto procedúr s výpisom používať funkcie vracajúce výslednú hodnotu, ktorú môžme nielen vypísať, ale aj inak spracovať. |
|||||||||||||||||||||||||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |