Toinen harjoitustyö Sokkelon ratkaiseminen oikean käden säännöllä.
Lausekielinen ohjelmointi II | Syksy 2015 | Jorma Laurikkala2 Yleistä Tehtävä: tee Javalla sokkelon (oikean käden säännöllä) ratkaiseva ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin itse. − Ideoita voi vaihtaa – koodia ei. − Henkilökohtaista ohjausta mikroluokissa ennen joulua ja tammikuussa. − Ohjaajilta voi kysyä sähköpostilla. Palautus WETOon viimeistään perjantaina Testaus tuttuun tapaan julkisilla ja salaisilla testeillä. Tarkka tehtävänanto julki tällä viikolla.
Lausekielinen ohjelmointi II | Syksy 2015 | Jorma Laurikkala3 Sokkeloista Sokkelo koostuu seinistä ja käytävistä. Sokkelon ulkoseinässä on yleensä yksi sisäänkäynti ja yksi uloskäynti. − Matkalla voidaan kohdata esimerkiksi umpikujia. − Labyrintissä on vain yksi yksikäsitteinen reitti alusta loppuun. Harjoitustyössä käsiteltävät sokkelot ovat täydellisiä. − Käytävät eivät muodosta silmukoita eikä sokkeloissa ole saavuttamattomia osia.
Lausekielinen ohjelmointi II | Syksy 2015 | Jorma Laurikkala4 Oikean käden sääntö Pidä kulkiessa seinästä kiinni oikealla kädellä ja käänny oikealle aina, kun vastaan tulee risteävä käytävä. if (voit kulkea oikealle) Käänny oikealle; else if (voit jatkaa kulkemista) Jatka nykyiseen suuntaan; else if (voit kulkea vasemmalle) Käänny vasemmalle; else Käänny takaisin; Oikealle, eteen, vasemmalle ja takaisin suhteessa kulkusuuntaan. − Jos kuljetaan esimerkiksi etelään (alas), vasemmalle on itään. Sääntö toimii vain täydellisissä sokkeloissa.
Lausekielinen ohjelmointi II | Syksy 2015 | Jorma Laurikkala5 Sokkelon esittäminen Merkit symboloivat sokkelon osia. Käytävät ovat yhden merkin levyisiä. − Umpikujassa on pakko kääntyä. Sisään ensimmäisen rivin toisesta paikasta, ulos viimeisen rivin toiseksi viimeisestä paikasta. Sokkelossa tulee olla rivejä ja sarakkeita vähintään kolme kappaletta. − Rivi- ja sarakemäärien oltava parittomia. − Esimerkiksi 5 x 11 sallittu, mutta 10 x 4 ei. Tietorakenne kaksiulotteinen taulukko. − Vain taulukot ovat sallittuja, muita tietorakenteita (lista, puu jne.) ei saa käyttää..o....o..V Kulkematonta käytävää symboloi välilyönti. Sokkelon seinät esitetään pisteillä. Kuljettua käytävää merkitään pienellä o-kirjaimella. Nykyisessä paikassa on kulkusuunnan mukaan joko iso a-kirjain (pohjoinen), suurempi kuin merkki (itä), iso v-kirjain (etelä) tai pienempi kuin merkki (länsi).
Lausekielinen ohjelmointi II | Syksy 2015 | Jorma Laurikkala6 Esimerkki Ohjelma käynnistetään kolmella komentoriviparametrilla: − satunnaislukugeneraattorin siemenluku sekä − rivien ja sarakkeiden lukumäärät. Apuluokka luo siemenluvun määräämällä satunnaisella tavalla halutun kokoisen sokkelon. Pelaaja valitsee toiminnon: kuljetaan yksi askel, ratkaistaan ilman askellusta tai lopetetaan. − Ohjelma pysähtyy myös, kun päästään uloskäynnin paikkaan joko askeltaen tai suoraan..V ) Lähtötilanne. Ollaan sisään- käynnillä nykyisenä suuntana etelä. 2) Otetaan askel. Pieni o-kirjain osoittaa, että lähtöpaikka on käyty. Suuntana etelä. Aloitetaan peli siemenluvulla 2 ja luodaan 5 5 -kokoinen kenttä: java Maze o....V
Lausekielinen ohjelmointi II | Syksy 2015 | Jorma Laurikkala7 Esimerkki.o....o..V ) Otetaan toinen askel. Oikealle (länteen) ei ole voitu tähän mennessä kääntyä, suuntana siten edelleen etelä ja umpikuja..o....o..o...V ) Kolmas askel etelään. Päädytään umpikujaan..o....o..o...A ) Neljäs askel kääntää ratkaisijan tulosuuntaa vastaan (etelään liikuttaessa pohjoiseen), koska ei voitu jatkaa nykysuuntaan. Suunnanosoitin vaihtuu suureksi a- kirjaimeksi..o....o..A...o ) Viides askel otetaan pohjoiseen.
Lausekielinen ohjelmointi II | Syksy 2015 | Jorma Laurikkala8 Esimerkki.o....A..o ) Kuudes askel vie vielä takaisin pohjoiseen..o....o>..o ) Seitsemännellä askeleella havaitaan, että voidaan kääntyä oikealle, joka on pohjoiseen liikuttaessa idässä. Suunnanosoitin vaihtuu suurempi kuin merkiksi..o....oo>..o ) Kahdeksas askel vie ratkaisijan taas vasten seinää..o....ooo..o.V..o ) Yhdeksäs askel. Tällä kertaa voidaan onneksi kääntyä oikealle, joka on itään liikuttaessa etelässä. Suunnanosoitin muuttuu isoksi v- kirjaimeksi.
Lausekielinen ohjelmointi II | Syksy 2015 | Jorma Laurikkala9 Esimerkki.o....ooo..o.o..o.V ) Kymmenes askel kuljettaa etelään suoraan kohti uloskäyntiä..o....ooo..o.o....V. 12) Yhdennellätoista askeleella päästään uloskäynnille. Ohjelma päättyy.