1. feladat: (75 pont)
Mozgások:
Forgások:
Toll helyzet állítások:
Az utasítások x és y paramétere lehet pozitív vagy negatív egész
állandó, változó, valamint állandókból és változókból álló kifejezés (zárójelek
nem szerepelhetnek benne, a változók egymással csak összeadás vagy kivonás
műveletben szerepelhetnek – pl. 3+2*X–4*Y).
Készíts olyan kódoptimalizáló programot, amely a következő átalakításokra
képes:
BACK x BACK y BACK x+y (azonos előjelű x és y, vagy felemelt toll esetén)
FORWARD x BACK y FORWARD x–y (ellenkező előjelű x és y, vagy felemelt toll esetén)
BACK x FORWARD y BACK x–y (ellenkező előjelű x és y, vagy felemelt toll esetén)
LEFT x LEFT y LEFT x+y
RIGHT x RIGHT y RIGHT x+y
LEFT x RIGHT y LEFT x–y
RIGHT x LEFT y RIGHT x–y
DOWN forgások UP forgások (kezdetben felemelt toll esetén)
UP forgások DOWN forgások (kezdetben leengedett toll esetén)
DOWN mozgás, forgás DOWN DOWN mozgás, forgás
UP mozgás, forgás UP UP mozgás, forgás
Az átalakítások közben állandók esetén a műveleteket el is kell
végezni (LEFT 30+30 helyett LEFT 60), a változókat tartalmazó kifejezésekben
pedig össze kell vonni az azonos változókat tartalmazó részkifejezéseket
(pl. LEFT x RIGHT 20 LEFT x helyett LEFT 2*x–20 a helyes).
Az összességében 0 fokos fordulatokat és a 0 elmozdulásokat törölni kell.
Az átalakítandó LOGO program a LOGOx.BE állományban található, sorvégekkel, szóközökkel tetszőlegesen tördelve. Az eredményt a LOGOx.KI állományba kell írni, minden utasítást külön sorba, paraméterétől egyetlen szóközzel elválasztva.