od biosek » 23. 1. 2015 22:53
Zadani bylo Interpret BASICu.
Meli jsme naprogramovat zpracovani soubou .bas, ktery se skladal z 7 moznych prikazu.
Promenna byl nazev promenne, hodnota bylo bud int32 cislo nebo promenna.
Kazdy prikaz byl na radce ve formatu "cislo_instrukce prikaz [nepovinne_argumenty]", prikazy pak vypadali takto:
SET promenna = hodnota
LET promenna = hodnota operace hodnota
INPUT promenna
PRINT [nepovinne_argumenty_oddelene_stredniky]
GOTO cislo_instrukce
END
IF hodnota bin_operace hodnota THEN GOTO cislo_instrukce
Me reseni bylo cca takoveto:
Udelal jsem si abstraktni nadtridu Command, ktera dokazala naparsovat argumenty a vyhodnotit se. Pak jsem implementoval vsechny prikazy jako potomky Commandu.
Trida Program potom obsahovala 2 globalni dictionary (jeden na commandy, druhy na promenne) a int hodnotu na jake instrukci prave jsem.
Hlavni beh programu pak jen nacetl soubor, vytvoril pro kazdy radek instanci instrukce a zpracovaval vsechny instrukce v jejich poradi dokud se nenarazilo na prikaz END. (samozrejme mohli nastat skoky pres GOTO nebo IF)
Meli jsem na reseni 3 hodiny a take 5 vstupnich datovych testovacich souboru.
Nejrychlejsi kolega predemnou skoncil uz za 1 hodinu.
Ja vse stihl napsat za 1,5 hodiny, za dalsi hodinu jsem si udelal testy pro prilozene soubory a odladil vsechny chyby, takze jeste byla pekna 0.5hod rezerva na svacinu.
Zadani bylo Interpret BASICu.
Meli jsme naprogramovat zpracovani soubou .bas, ktery se skladal z 7 moznych prikazu.
Promenna byl nazev promenne, hodnota bylo bud int32 cislo nebo promenna.
Kazdy prikaz byl na radce ve formatu "cislo_instrukce prikaz [nepovinne_argumenty]", prikazy pak vypadali takto:
SET promenna = hodnota
LET promenna = hodnota operace hodnota
INPUT promenna
PRINT [nepovinne_argumenty_oddelene_stredniky]
GOTO cislo_instrukce
END
IF hodnota bin_operace hodnota THEN GOTO cislo_instrukce
Me reseni bylo cca takoveto:
Udelal jsem si abstraktni nadtridu Command, ktera dokazala naparsovat argumenty a vyhodnotit se. Pak jsem implementoval vsechny prikazy jako potomky Commandu.
Trida Program potom obsahovala 2 globalni dictionary (jeden na commandy, druhy na promenne) a int hodnotu na jake instrukci prave jsem.
Hlavni beh programu pak jen nacetl soubor, vytvoril pro kazdy radek instanci instrukce a zpracovaval vsechny instrukce v jejich poradi dokud se nenarazilo na prikaz END. (samozrejme mohli nastat skoky pres GOTO nebo IF)
Meli jsem na reseni 3 hodiny a take 5 vstupnich datovych testovacich souboru.
Nejrychlejsi kolega predemnou skoncil uz za 1 hodinu.
Ja vse stihl napsat za 1,5 hodiny, za dalsi hodinu jsem si udelal testy pro prilozene soubory a odladil vsechny chyby, takze jeste byla pekna 0.5hod rezerva na svacinu.