od TomRiddle » 23. 1. 2018 14:42
Dneska zadával Robert Husák a zadání bylo dost podobné
http://forum.matfyz.info/viewtopic.php?f=423&t=10757.
Měli jsme implementovat interpret jednoduchého dynamicky typovaného jazyka.
Každá proměnná mohla obsahovat string, integer nebo null a měla jít sčítat s jinou a printnout (pravidla níže).
Jazyk měl následující příkazy:
- seti var_name var_value -> do proměnné var_name ulož integer hodnotu var_value (pokud var_value nelze převést na int, ulož 0)
- sets var_name var_value -> do proměnné var_name ulož string hodnotu var_value
- add store_result_var_name left_op_var_name right_op_var_name -> do store_result_var_name ulož výsledek left_op_var_name + right_op_var_name
- echo var_name -> print proměnné var_name na konzoli
Hodnota typu null vzniká pouze pokud se přistupuje k zatím neinicializované proměnné.
Pravidla sčítání:
- null + cokoliv, cokoliv + null -> null
- integer + integer -> klasické sčítání
- string + string, string + integer, integer + string -> konkatenace
Printování:
- integer -> klasicky, např. 42
- string -> klasicky, např. "lorem" (pozor, uvozovky nutné)
- null -> null
Každopádně to byla úloha zaměřená na polymorfismus, virtuální metody atd.
Autorské řešení využívalo
https://en.wikipedia.org/wiki/Double_dispatch.
Přikládám své řešení, které mi zabralo asi 2 hodiny ze 4, které byly k dispozici (odcházel jsem 3.), taky využívalo double dispatch a bylo za plný počet.
https://gist.github.com/MichalPospech/4 ... c13b12a77d
Dneska zadával Robert Husák a zadání bylo dost podobné [url]http://forum.matfyz.info/viewtopic.php?f=423&t=10757[/url].
Měli jsme implementovat interpret jednoduchého dynamicky typovaného jazyka.
Každá proměnná mohla obsahovat string, integer nebo null a měla jít sčítat s jinou a printnout (pravidla níže).
Jazyk měl následující příkazy:
[list][*]seti var_name var_value -> do proměnné var_name ulož integer hodnotu var_value (pokud var_value nelze převést na int, ulož 0)
[*]sets var_name var_value -> do proměnné var_name ulož string hodnotu var_value
[*]add store_result_var_name left_op_var_name right_op_var_name -> do store_result_var_name ulož výsledek left_op_var_name + right_op_var_name
[*]echo var_name -> print proměnné var_name na konzoli[/list]
Hodnota typu null vzniká pouze pokud se přistupuje k zatím neinicializované proměnné.
Pravidla sčítání:[list]
[*]null + cokoliv, cokoliv + null -> null
[*]integer + integer -> klasické sčítání
[*]string + string, string + integer, integer + string -> konkatenace[/list]
Printování:[list]
[*]integer -> klasicky, např. 42
[*]string -> klasicky, např. "lorem" (pozor, uvozovky nutné)
[*]null -> null[/list]
Každopádně to byla úloha zaměřená na polymorfismus, virtuální metody atd.
Autorské řešení využívalo [url]https://en.wikipedia.org/wiki/Double_dispatch[/url].
Přikládám své řešení, které mi zabralo asi 2 hodiny ze 4, které byly k dispozici (odcházel jsem 3.), taky využívalo double dispatch a bylo za plný počet.
[url]https://gist.github.com/MichalPospech/4f233c70e7595449b2d957c13b12a77d[/url]