| 
 | 
 | 
# Skúška 24.1.2022
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
- Je povolené používať svoj (už existujúci) kód a tiež 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 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é názvy tried, premenných a metód, používajte presne tie mená, ktoré sú uvedené v zadaní.
 | 
 | 
 | 
 | 
- Dodržanie bodov uvedených v podmienkach akceptácie zadania – rovnaké podmienky 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).
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
---
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Na vypracovanie zadania máte 60 minút. __Použite konzolovú aplikáciu__. Body sa prideľujú iba ak je študent schopný obhájiť svoj kód, nestačí, že to je napísané.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Ak používate kód prebraný z internetu, je __nutné uviesť zdroj__.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
## Úloha 1
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
(30bodov)
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Vytvorte si rozhranie
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
```csharp
 | 
 | 
 | 
 | 
public interface IFileSystemComponent
 | 
 | 
 | 
 | 
{
 | 
 | 
 | 
 | 
    void DisplayInfo(); //implementovat v ulohe 2, podla potreby moze byt oznacena ako abstract
 | 
 | 
 | 
 | 
    void SetLevel(int level); //NEPOVINNE - na zjednodusenie prace, aby ste vedeli, na akej urovni sa nachadza
 | 
 | 
 | 
 | 
    string GetName();
 | 
 | 
 | 
 | 
    int GetSize();
 | 
 | 
 | 
 | 
}
 | 
 | 
 | 
 | 
```
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Implementujte návrhový vzor __composite__ - existujú dva spôsoby, ako ho implementovať. Podľa toho, ktorý ste si zvolili:
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
- Vytvorte si buď triedu `FileSystemComponent` alebo triedy `File` a `Directory`; v oboch prípadoch sa bude rozširovať rozhranie `IFileSystemComponent`
 | 
 | 
 | 
 | 
- pridajte nasledujúce metódy na vhodné miesto (závisí, ktorý spôsob robíte) v horeuvedených triedach:
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
```csharp
 | 
 | 
 | 
 | 
void Add(IFileSystemComponent component);
 | 
 | 
 | 
 | 
void Remove(IFileSystemComponent component);
 | 
 | 
 | 
 | 
IEnumerable<IFileSystemComponent> GetChildNodes(); //vrati zoznam vnorenych uzlov
 | 
 | 
 | 
 | 
```
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
## Úloha 2
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
(10 bodov)
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Pridajte si triedu
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
```csharp
 | 
 | 
 | 
 | 
public class OutputWriter
 | 
 | 
 | 
 | 
{
 | 
 | 
 | 
 | 
    public static OutputWriter GetInstance()
 | 
 | 
 | 
 | 
    {
 | 
 | 
 | 
 | 
        //magic
 | 
 | 
 | 
 | 
    }
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
    void WriteLine(string line)
 | 
 | 
 | 
 | 
    {
 | 
 | 
 | 
 | 
        //more magic
 | 
 | 
 | 
 | 
    }
 | 
 | 
 | 
 | 
}
 | 
 | 
 | 
 | 
```
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
a implementujte ju ako __singleton__. Vo funkcií `WriteLine` zabezpečte výpis na obrazovku.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Implementujte metódu `DisplayInfo` tak, aby ste dostali obdobný výpis (__súbory si zvoľte vlastné - nech sú aspoň 3 úrovne hierarchie__):
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
```text
 | 
 | 
 | 
 | 
home/ (13k)
 | 
 | 
 | 
 | 
  user/ (13k)
 | 
 | 
 | 
 | 
    .bashrc (4k)
 | 
 | 
 | 
 | 
    .bash_history (9k)
 | 
 | 
 | 
 | 
mnt/ (9013k)
 | 
 | 
 | 
 | 
  memes/ (9001k)
 | 
 | 
 | 
 | 
    memes.zip (9001k)
 | 
 | 
 | 
 | 
  work/ (12k)
 | 
 | 
 | 
 | 
    Sokoban/ (12k)
 | 
 | 
 | 
 | 
      main.c (3k)
 | 
 | 
 | 
 | 
      MAKEFILE (1k)
 | 
 | 
 | 
 | 
      sokoban.c (7k)
 | 
 | 
 | 
 | 
      sokoban.h (1k)
 | 
 | 
 | 
 | 
``` |