|
|
|
# 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)
|
|
|
|
``` |