Autorské riešenie
Pri riešení úlohy si musíme uvedomiť v akom vzťahu sú hmotnosti a hmotnostné percentá pôvodného, pridaného a výsledného slaného roztoku. Pri výpočtoch sa častejšie používajú hmotnostné zlomky, ktorých hodnoty sú od 0 do 1. Ak máme pôvodný slaný roztok s hmotnosťou m1 a hmotnostným zlomkom w1, tak hmotnosť soli v tomto roztoku je m1·w1. Ak nemu pridáme roztok s hmotnosťou m2 a hmotnostným zlomkom w2, dostaneme výsledný roztok s hmotnosťou m = m1 + m2 a s hmotnosťou soli m1·w1 + m2·w2. Ak označíme w hmotnostný zlomok výsledného roztoku, tak pre celkovú hmotnosť soli platí vzťah: m·w = m1·w1 + m2·w2.
Vzťahy medzi hmotnosťami a hmotnostnými zlomkami 2 roztokov a výsledného roztoku Podľa zadania úlohy poznáme hodnoty m1, w1, m, w a potrebujeme vypočítať hodnoty m2, w2. Tie si vyjadríme z vyššie uvedených vzťahov: m2 = m - m1 w2 = (m·w - m1·w1) / (m - m1) Aby sme dostali správne výsledky potrebujeme ošetriť vstupné a výstupné hodnoty, a to, aby hodnoty hmotností boli nezáporné a hodnoty hmotnostných zlomkov boli medzi 0 a 1. Kedže na vstupe sú hmotnostné percentá, tak hmotnostné zlomky z nich dostaneme po predelení hodnotou 100 a na výstupe vynásobíme hmotnostné zlomky hodnotou 100, aby sme dostali výsledné hmotnostné percento. Procedúra vypocet so 4 parametrami (hmotnosť a hmotnostné percento pôvodného roztoku a tiež výsledného roztoku), môže v jazyku Imagine Logo vyzerať napríklad takto: ;Imagine Logo A riešenie úlohy v jazyku Python môže vyzerať napríklad takto: #Python def vypocet(m1, wp1, m, wp): ''' Pre zadane hmotnosti a hmotnostne percenta povodneho a vysledneho roztoku vypocita hmotnost a hmotnostne percento pridaneho roztoku :param m1: hmotnost povodneho roztoku :type m1: float :param wp1: hmotnostne percento povodneho roztoku :type wp1: float :param m: hmotnost vysledneho roztoku :type m: float :param wp: hmotnostne percento vysledneho roztoku :type wp: float :rtype: list ''' w1 = wp1 / 100 w = wp / 100 kladne = (m1 > 0) and (w1 > 0) and (m > 0) and (w > 0) minimalne = ((m * w - m1 * w1) >= 0) and ((m - m1) > 0) maximalne = (m * w - m1 * w1) <= (m - m1) if kladne and minimalne and maximalne: m2, w2 = (m - m1), 100 * (m * w - m1 * w1) / (m - m1) return [m2, w2] else: return "Úloha nemá riešenie pre zadané vstupy" print(vypocet(100, 30, 200, 10)) print(vypocet(100, 30, 200, 15)) print(vypocet(100, 30, 200, 50)) print(vypocet(100, 30, 200, 65)) print(vypocet(100, 30, 200, 70)) Táto súťažná úloha z chemickej problematiky je zameraná na použitie logického myslenia a dôslednosť uvažovania (ošetrenie vstupov a výstupov), na precvičenie použitia procedúr s výstupom, resp. funkcií s parametrami, na precvičenie práce s príkazmi priradenia, vetvenia a zloženými podmienkami. Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy sa zapojilo 6 tímov kategórie EXPERT a 2 tímy kategórie GURU. 3 tímy (ruzove lentilky, aa, jm&jm) získali plný počet bodov, k čomu im gratulujeme. Súťažiaci dosiahli priemerný počet bodov 4,8 z možných 6 bodov. 4 tímy riešili úlohu v jazyku Python a 4 tímy v jazyku Imagine Logo. V riešeniach sme zaregistrovali nasledovné chyby:
|
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |