Každopádně v půl jedný to neměl asi nikdo. Já jsem odevzdával cca 10 minut před začátkem dalšího zápočtového testu (ve 14:00). Přede mnou bylo asi tak 3 - 5 úspěšných. Celkovou úspěšnost netuším, ale asi nic moc.
O co šlo?
V podstatě to byla úloha, kterou by šlo za hodinku vyřešit v unixovém awkčku. Jedinej problém byl, že se to mělo udělat v C++.
Stručně: Naprogramujte preprocesor pro direktivy #include, #define, #ifdef (#elifdef/#else/#end).
Méně stručně aneb co všechno to musí umět:
Parametry příkazové řádky: aplikace.exe vstupniSoubor.txt vystupniSoubor.txt
Parametry maker:
Kód: Vybrat vše
#define makro(arg1,arg2,arg3) Parametry makra byly arg1, arg2 a arg3.
Takto se makro pouzije: $makro(jedna,dva,tri)
Kód: Vybrat vše
Takto se makro pouzije: Parametry makra byly jedna, dva a tri.
Kód: Vybrat vše
// soubor a.txt
#include "b.txt"
Kód: Vybrat vše
// soubor b.txt
#include "c.txt"
Kód: Vybrat vše
// soubor c.txt
#include "a.txt" <-- CYKLUS! Musí být odhalen!
Kód: Vybrat vše
#define C
#ifdef A
#include "a.txt"
A je definovano.
#elifdef B
#include "b.txt"
B je definovano.
#else
#define D
A ani B nebylo definovano.
#end
#ifdef D
D je definovano.
#end
Kód: Vybrat vše
A ani B nebylo definovano.
D je definovano.
Makro v makru:
Kód: Vybrat vše
#define makro1 $mak
#define makro2 ro3
#define makro3 Ahoj! Jak se mas?
$makro1$makro2
Kód: Vybrat vše
Ahoj! Jak se mas?
- V názvu makra (definice) mohou být jen alfanumerické znaky (dokonce jsme to mohli dělat i bez čísel, ale to bylo asi zbytečné zjednodušení).
- Chyby na vstupu (kromě zacyklení) nebylo třeba nějak extra řešit (něco jako volání makra se špatným počtem parametrů se nějak neřešilo).
- Mezi výrazem #define a názvem makra, stejně tak mezi názvem makra a samotným "rozvinutím" může být libovolný počet bílých znaků (kromě newlinu).
- Samotné "rozvinutí" makra je nutné zachovat tak, jak je (tj. vč. případných znaků tabulátoru, mezer apod. - to je vcelku logické, jinak by nešly do maker dávat mezery).
- Makro uvnitř makra se nesmí rozvinout přímo v definici, ale až při použití.
- Je povoleno (a je to i nutné) procházet vstupní soubor vícekrát.