# Zkouška 26.1.2018

<{ForumPost(poster="Host", timestamp=2018-01-29 13:35:36)}>
Měli jsme naimplementovat postfixní kalkulačku, která navíc podporovala multinomy (např. x^2 + xy + z^3, zkrátka víc proměnných).  
  
V postfixním zápise se například 1 + 1 zapíše jako 1 1 +. Ideální implementace je ukládat výrazy na stack.  
  
Na vstupu mohli být (oddělené alespoň jedním whitespacem) následující výrazy:  
**číslo** (kladné i záporné, stačila velikost int) = uloží se na vrchol stacku  
**proměnná** (string skládající se jen z písmen) = uloží se na vrchol stacku  
**+** = sečíst poslední dva výrazy a na stacku je nahradit jejich součtem  
**-** = odečíst poslední dva výrazy a na stacku je nahradit jejich rozdílem  
***** = vynásobit poslední dva výrazy a na stacku je nahradit jejich součinem  
**?** = vypsat poslední výraz na stacku  
**#** = dropnout poslední výraz na stacku  
**^číslo** = umocnit poslední výraz na zadané číslo (stačilo implementovat cyklem)  
**@proměnná** = derivace posledního výrazu podle zadané proměnné  
**=proměnná** = dosadit za proměnnou v předposledním výrazu poslední výraz  
  
Z posledních tří stačilo implementovat jenom dva. Zadávající napověděl, že výrazy je nejlepší ukládat jako mapu <term, koeficient termu> a term zase jako mapu <proměnná, její mocnina>. Stejné termy se samozřejmě měli sečíst.  
  
Dával 0-30 bodů za základní funkce, dalších 0-20 bodů za poslední tři složitější funkce a navíc 0-10 bodů za hezký kód (const reference a tak)
<{/ForumPost}>

