Zápočtový test 17.2.2012

Základní kurs objektově orientovaného programování v C++. Třídy a objekty, zapouzdření, metody, plymorfismus. Abstraktní datové typy, přetěžování. Kontejnery, iterátory, algoritmy. Šablony, generické programování, kompilační polymorfismus. Výjimky. Bezpečné a přenositelné programování, vazby na OS.
Jookyn
Matfyz(ák|ačka) level III
Příspěvky: 115
Registrován: 13. 9. 2008 21:42
Typ studia: Informatika Mgr.

Zápočtový test 17.2.2012

Příspěvek od Jookyn »

Dneska bylo něco jako interpret jazyka...

Příklad vstupu:

Kód: Vybrat vše

AHOJ = BABI * (-3 + HONZA)
A = B-(4+(2/(AHOJ+1)))
#D:\Temp\input2.txt
C = A
A ? -1
Jsou 3 typy příkazů
- řádek s # na začátku znamená include souboru
- řádek s = je přiřazení hodnoty výrazu pravé strany do proměnné uvedené vlevo
- A ? -1 znamená, že pokud je A!=0, skočí se o 1 řádek zpátky apod.

Pokud není proměnná inicializovaná, použije se 0.
Na konci vypsat všechny proměnné (já vypisoval jen ty které byly nějak inicializované, ne defaultní nulou), případně napsat, že nastal cyklus ve skocích (asi by stačilo i kdyby se program jen zacyklil, ale neni to těžký tam hodit nějakou podmínku, že když bude celkový počet vyhodnocení > 1000, tak tam asi je cyklus).


Začátek kódění v 10:25, čas 3 hodiny, je možný, že to bylo prodloužený, já jsem odcházel asi v 12:40 jako první úspěšný (když vim, jak na to, tak jsem většinou dost rychlej, když ne, tak jsem většinou v prdeli :D), takže o dalším průběhu nic nevim.

Co je nutnost je vědět, jak naparsovat výraz z infixu (včetně závorek) do prefixu pomocí zásobníků, snažit se tam vymejšlet nějakej jinej parser je docela cesta do pekel. Jinak tam nic extra těžkýho neni...

Zavoral to kontroloval docela laxně, vzal jsem vstup co byl na tabuli (a upravil ho, aby se nedělilo nulou) a na tom mu to ukázal, zkontroloval jak to mam s cyklama (kde jsem měl poprvé chybu z copypastování), na výsledky proměnných snad ani nekoukal... Došlo mi, že jsem nedělal vůbec prioritu operátorů (ne že by to bylo složitý doplnit, ale nějak jsem na to zapomněl), tu nekontroloval a vlastně ani nevim, jestli jí chtěl implementovat... Pak projel můj kód cca rychlostí 30řádků za sekundu, řekl že je to rozumný (pozastavil se jen na jednou věcí) a bylo to...

Internet byl puštěnej, povolena libovolná reference jazyka...

V příloze přidávam moje řešení, je to asi dost řádků kódu, ale docela roztahuju... Za bezchybovost neručim, za "v rychlosti testově zprasený" kód se omlouvam...
Přílohy
Interpreter.zip
(2.55 KiB) Staženo 356 x
miso

Re: Zápočtový test 17.2.2012

Příspěvek od miso »

Kto by mal zaujem, tu je verzia na cca 200 riadkov, vyhodnocovanie priamo z infixu rekurzivne, bez pouzitia stromov.
http://uloz.to/xb1L9nt/test0-zip
Danstahr
Matfyz(ák|ačka) level I
Příspěvky: 12
Registrován: 26. 1. 2012 18:50
Typ studia: Informatika Bc.

Re: Zápočtový test 17.2.2012

Příspěvek od Danstahr »

Velmi podobná úloha (s příkazy přiřazení do proměnné, vytištění hodnoty výrazu / proměnné a podmíněným skokem) byla i 14.1. od jedné odpoledne.
Odpovědět

Zpět na „NPRG041 Programování v C++“