Autorské riešenie
[stiahni [imp][py]]

  • Počet riešiteľov: 8 / 8 = 100 %

  • Úspešnosť riešenia:  4,8 / 6 = 79,6 %

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.

roztoky s hmotnostami a hmotnostnymi zlomkami

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

viem vypocet :m1 :wp1 :m :wp
; m1 - hmotnosť 1. roztoku
; wp1 - hmotnostné percento 1. roztoku
; m - hmotnosť výsledného roztoku
; wp - hmotnostné percento výsledného roztoku
  urobTu "w1 :wp1 / 100
  urobTu "w :wp / 100
  urobTu "kladne (zároveň :m1 > 0 :w1 > 0 :m > 0 :w > 0)
  urobTu "minimalne (zároveň (:m * :w - :m1 * :w1) >= 0
                             (:m - :m1) > 0)
  urobTu "maximalne (:m * :w - :m1 * :w1) <= (:m - :m1)

  ak2 (zároveň :kladne :minimalne :maximalne) [
    urobTu "m2 :m - :m1
    urobTu "w2 100 * (:m * :w - :m1 * :w1) / :m2
    výsledok zoznam :m2 :w2
  ][
    výsledok [Úloha nemá riešenie]
  ]
koniec

;? zobraz vypocet 100 30 200 10 ---> Úloha nemá riešenie
;? zobraz vypocet 100 30 200 15 ---> [100 0]
;? zobraz vypocet 100 30 200 50 ---> [100 70]
;? zobraz vypocet 100 30 200 65 ---> [100 100]
;? zobraz vypocet 100 30 200 70 ---> Úloha nemá riešenie

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:

  • neošetrili ste vstupné hodnoty (kladnosť zadaných hmotností m, m1 a hmotnostných percent w, w1, aby neboli menšie ako 0% alebo väčšie ako 100%) a tiež výstupné (vypočítané) hodnoty m2, w2,
  • na vstupe ste rátali s hmotnostnými zlomkami, nie hmotnostými percentami.