====== 3. úkol - Calculator ======
Vaším třetím úkolem bude vytvoření plnohodnotné kalkulačky. Soubor se kalkulačkou nazvěte: calculator.py a nahrajte do [[https://cw.felk.cvut.cz/upload|Odevzdávacího systému]].
Pozor: K vyhodnocení se využívá Python 3.
===== Zadání =====
Vytvořte soubor calculator.py, v kterém naimplementujte následující funkce/operace (v závorce název funkce a počet parametrů, která funkce potřebuje):
- Sčítání (addition 2)
- Odčítání (subtraction 2)
- Násobení (multiplication 2)
- Dělení (division 2)
- Výpočet modula (modulo 2, v našem případě mohou být použita pouze varianty při kterých platí x>=y a y > 0)
- Výpočet druhé mocniny čísly (secondPower 1)
- Výpočet n-té mocniny čísla (power 2 pořadí: mocněnec, mocnitel, v našem případě mohou být použiti pouze kladní mocnitelé (nula je kladná)) - vracejte typ float.
- Výpočet druhé odmocniny z čísla (secondRadix 1, odmocninu lze provést pouze z kladného celého čísla splňující: x>0)
- Magický výpočet (magic 4) - operace bude vysvětlena
- Hlavní ovládací funkce (control 5) - funkce bude vysvětlena
Každá z výše uvedených funkcí vrací na výstupu výpočet. V případě, že výpočet nelze provést tak funkce vyhodí vyjímku ValueError('This operation is not supported for given input parameters').
K implementaci použijte tuto šablonu: {{:courses:b6b36zal:zadani:calculator.py|}}
* Zamyslete se jaké jsou situace, za kterých nelze výpočet provést u všech výše zmíněných funkcí. Berte v úvahu i mezi výpočty.
* Jelikož některé operace nejsou komutativní, tak pořadí operandů odpovídá pořadí parametrů v hlavičce funkce (např.: substraction(a, b) provádí (a - b) a ne (b - a)).
* Nezapomeňte na řádné přetypování proměnných.
==== Magický výpočet ====
Na vstupu přijímá 4 parametry x,y,z,k . Funkce nejprve spočítá x+k=l, y+z=m a pote vypocte ((l/m) + 1)=z. Hodnotu v proměnné z vrátí na výstupu.
==== Hlavní ovládací funkce ====
Na vstupu přijímá 5 parametrů a,x,y,z,k, na výstupu je výpočet konkrétní operace. Proměnná a určuje, která z operací se má zavolat. Funkce vždy obdrží v proměnné a textovou hodnotu na jejím základě se rozhodne co za funkci zavolat. Mapování je následující:
* ADDITION = funkce číslo 1 (addition)
* SUBTRACTION = funkce číslo 2 (subtraction )
* MULTIPLICATION = funkce číslo 3 (multiplication )
* DIVISION = funkce číslo 4 (division )
* MOD = funkce číslo 5 (modulo)
* POWER = funkce číslo 7 (power)
* SECONDRADIX = funkce číslo 8 (second radix)
* MAGIC = funkce číslo 9 (magic)
Parametry x,y,z,k se poté předají konkrétní funkci v pořadí v jakém byly obdrženy. Pokud funkce vyžaduje pouze jeden parametr předá se jí proměnná x, pokud dva parametry předají se jí x,y pokud čtyři parametry předají se ji x,y,z,k. Příklad volání:
control('ADDITION', 2,3,4,5) zavolá funkci addition(2,3), která udělá 2+3 = 5. Funkce control tedy vrátí hodnotu 5.
control('SUBTRACTION', 2,3,4,5) zavolá funkci subtraction (2,3), která udělá 2-3 = -1. Funkce control tedy vrátí hodnotu -1.
control('DIVISION', 1,0,4,5) zavolá funkci division (1,0), která udělá 1/0 = nulou nelze dělit. Funkce tedy vyhodí vyjímku dle zadání: ValueError('This operation is not supported for given input parameters')
Funkce control podporuje pouze funkce vypsané v mapování - pokud by chtěl uživatel volat jakoukoliv jinou funkce tak systém vyhodí opět vyjímku: ValueError('This operation is not supported for given input parameters')
==== Hodnocení ====
Za úlohu lze získat maximálně 2 body.
* Kalkulátor obsahuje všechny potřebné funkce včetně vstupů a výstupů a tyto funkce provádí správně výpočty včetně správnosti magické funkce. (1b)
* Kalkulátor má správně implementovanou kontrolní funkci control a tato funkce produkuje správné výsledky (1b)
Za každý započatý týden po deadline (termínu odevzdání) je penalizace 2 body. Záporné body neudělujeme.
Aby jste nemuseli chodit na cvičení, v kterém je tato úloha zadána, tak je potřeba úlohu odevzdat před cvičením a mít za ní plný počet bodů.
==== Termín odevzdání ====
Úterní cvičení: 24.10.2017
Páteční cvičení: 27.10.2017
Vždy před začátkem vašeho cvičení.