C++ – zápočtová písomka

V pondelok nám oficiálne začalo skúškové a na dnes som mal naplánovanú zápočtovú písomku z programovania v C++.

Náš cvičiaci nám na predposlednom cviku zadal “vzorový príklad” s tým, že toto zadanie je už zhruba päť rokov staré a je o niečo ťažšie, ako sa zadávajú teraz. Úlohou bolo naprogramovať interpret jednoduchého jazyka podobného assembleru.

Jazyk pracoval len s jedným “registrom” a podporoval asi osem inštrukcií, ktoré mohli mať najviac jeden parameter. Na písomke by sme mali na vypracovanie zhruba tri hodiny čistého času, ja som stihol základnú verziu (tzn. s predpokladom ideálneho vstupu bez chýb) vytvoriť za necelých 45 minút.

Po tomto som si povedal, že tohtoročná písomka bude viac menej formalita – veď zadania mali byť ľahšie ako tento interpret. Aké bolo moje prekvapenie, keď som dnes prišiel na písomku a na zadaní stálo:

Podstatou zadania je napísať simulátor jednoduchého procesoru.

Po prečítaní celého zadania (cca jedna strana A4) mi sánka spadla ešte hlbšie. Simulovaný procesor mal mať štyri samostatné 16 bitové registre (AX až DX), pričom každý z nich sa skladá z dvoch samostatných 8 bitových podregistrov (AH/AL až DH/DL). A k tomu ešte existuje “hlavná pamať” o kapacite 256 bytov.

Náš virtuálny procesor mal podporovať až 15 rôznych inštrukcií, pričom počet parametrov sa podľa druhu inštrukcie pohyboval od nula do tri. Plus lahôdka v podobe vety, že niektoré inštrukcie je môžné zavolať s rôznym počtom parametrov. A na vstupe sú všetky čísla vyjadrené hexadecimálne. A mali sme pracovať s predpokladom, že sa nám kód programu nezmestí do pamäte, čím sa trochu šťazuje vyhľadávanie skokov a podobných záležitostí.

Keď k tomu pripočítate, že inštrukcie môžu ako operandy používať hodnoty

  • explicitne zadané vo vstupe (0xABCD)
  • umiestnené v registri (veľkom alebo malom)
  • umiestnené v pamäti
  • umiestnené v pamäti na adrese uloženej v registri
  • umiestnené v pamäti na adrese uloženej v inej časti pamäte

dostávate jeden veľký problém. Myslím, že môžem slobodne prehlásiť, že toto zadanie naozaj nie je jednoduchšie ako to, ktoré nám ukazoval cvičiaci na cviku.

Takmer tri hodiny som búšil do klávesnice, zúrivo ladil, kopíroval, vkladal a sem tam pozrel ho nápovedy a aj tak som to nestihol naprogramovať celé. Takmer úplne som odignoroval existenciu veľkých registrov (aj keď som vedel, ako by som ich implementoval, jednoducho som to nestihol urobiť), nerobil som žiadne kontroly správnosti ani nič podobné a mám podozrenie, že niektoré inštrukcie mi nefungovali.

Ale nakoniec som to obhájil, prehodil som pár slov k organizácii môjho kódu a ako by sa to dalo urobiť lepšie. A pán dozor mi to uznal. Odchádzal som asi tretí úspešný zo skupiny cca dvanástich ľudí (a asi dvaja to vzdali). Z učebne som vyšiel totálne zničený – doslova vyžmýkaný. Ale stálo to za to, o jednu povinnosť menej 🙂

Reklamy

One thought on “C++ – zápočtová písomka

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa / Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa / Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa / Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Odhlásiť sa / Zmeniť )

Connecting to %s