| 
 | 
 | 
# Skúška 17.1.2022
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
- Je povolené používať Internet na vyhľadanie informácii týkajúcich sa syntaxe jazyka C#, metód a pod. Nie je povolené komunikovať cez Internet (ani inak) s použitím mailu, chatu, Facebooku, Discordu a pod. Porušenie tohto zákazu je dôvodom pre vylúčenie zo skúšky s hodnotením 0 bodov. Nie je povolená žiadna forma plagiátorstva (čiastkové riešenia problémov môžete použiť, v takomto prípade uveďte do komentárov URL).
 | 
 | 
 | 
 | 
- V prípade, že bude odhalený pokus o podvod, všetci zúčastnení na podvode budú vylúčení zo skúšky s hodnotením 0 bodov.
 | 
 | 
 | 
 | 
- Ak sú v zadaní uvedené mená pre premenné a metódy používajte presne tie mená, ktoré sú uvedené v zadaní.
 | 
 | 
 | 
 | 
- Dodržanie rovnakých podmienok, ako platili pri zápočte.
 | 
 | 
 | 
 | 
- Uznané bude len riešenie, ktoré je možné skompilovať a spustiť na testovacom počítači (na ktorom sa budú spúšťať všetky zadania).
 | 
 | 
 | 
 | 
- Hotové zadanie odovzdajte cez MS Teams) - nezabudnite pred zabalením dať clean solution (a vymazať skrytý priečinok .vs)
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
---
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Na vypracovanie zadania máte 60 minút. Body sa prideľujú iba ak je študent schopný obhájiť svoj kód, nestačí, že to je napísané.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
## Úloha 1
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
(25 bodov)
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Vytvorte si rozhranie
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
```csharp
 | 
 | 
 | 
 | 
public interface IOperation
 | 
 | 
 | 
 | 
{
 | 
 | 
 | 
 | 
    double Calculate(double value1, double value2, char operation);
 | 
 | 
 | 
 | 
}
 | 
 | 
 | 
 | 
```
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Vytvorte si triedy `Add, Substract, Multiply, Divide` (všetky 4 implementujú rozhranie `IOperation`)
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Ďalej si vytvorte triedu `Calculator`:
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
```csharp
 | 
 | 
 | 
 | 
public class Calculator
 | 
 | 
 | 
 | 
{
 | 
 | 
 | 
 | 
    double Calculate(double value);
 | 
 | 
 | 
 | 
    void SetOperation(IOperation operation);
 | 
 | 
 | 
 | 
    void Reset();
 | 
 | 
 | 
 | 
}
 | 
 | 
 | 
 | 
```
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Pomocou návrhového vzoru __strategy__ implementujte v triede `Calculator` fungovanie kalkulačky:
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
- kalkulačka má v pamäti uložené 1 číslo (na začiatku je to 0) a aktuálnu operáciu (na začiatku +)
 | 
 | 
 | 
 | 
- `Calculate` aplikuje zvolenú operáciu na číslo uložené v pamäti a číslo dodané v ako parameter
 | 
 | 
 | 
 | 
- výsledok sa:
 | 
 | 
 | 
 | 
  - uloží do pamäti kalkulačky
 | 
 | 
 | 
 | 
  - použije sa ako návratová hodnota metódy
 | 
 | 
 | 
 | 
- Reset nastaví kalkulačku do východzieho stavu
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Vstup čítajte z klávesnice; vzhľadom na časovú limitáciu nie je potrebné kontrolovať platnosť vstupu.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
## Úloha 2
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
(15 bodov)
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Ak bude na vstupe z klávesnice písmeno f:
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
- načítajte si súbor `numbers.txt` - čísla sú uložené vo formáte `a operacia b`
 | 
 | 
 | 
 | 
- vypočítajte príklady pomocou kalkulačky z prvej úlohy
 | 
 | 
 | 
 | 
- uložte vyriešené úlohy do súboru `results.txt`
 | 
 | 
 | 
 | 
- `numbers.txt` obsahuje 70 000 záznamov, nenačítavajte ich naraz, ale priebežne | 
 | 
 | 
 | 
\ No newline at end of file |