Infix-muodossa oleva lauseke voidaan muuntaa postfix-muotoon (esim. lauseke 3*(2+4) olisi postfix muodossa 3 2 4 + *), jossa operaattorit esiintyvät operandiensa jälkeen. Tehtävänä on simuloida annetun postfix-muodossa olevan lausekken arvon laskenta pinon avulla.
Tämä tehtävä toimii tutoriaalina järjestelmään. Katso Ohjeet-välilehdeltä lisää ohjeita.
Tämä tehtävä toimii tutoriaalina järjestelmään. Tehtävän avulla voit testata käyttämäsi selainympäristön toimivuutta. Alapuolelle pitäisi latautua Java-applet (lataaminen saattaa kestää ensimmäisellä kerralla jopa muutaman minuutin riippuen tietokoneen ja verkkoyhteyden nopeudesta), jossa on seuraavat osat:
- Tekstikenttä (jossa teksti "Calculate the value of the postfix expression using the operand stack."), jonka avulla välitetään tehtäväkohtaista informaatiota. Jos tehtäväkohtaista informaatiota ei ole, niin tekstikenttää ei näytetä. Tekstikenttä voi olla sijoitettuna joko appletin ylälaitaan tai appletin vasempaan laitaan tehtäväkohtaisten tietorakenteiden viereen.
- Alasvetovalikko (Font size), jolla voi muuttaa kirjasinkokoa.
- Animaattoripaneeli, jossa painikkeet omassa ratkaisussa liikkumista varten taaksepäin (Backward), eteenpäin (Forward), ratkaisun alkuun (Begin) ja ratkaisun loppuun (End).
- Kolme toimintopainiketta, joilla voi alustaa tehtävän uudelleen (Reset), katsoa mallivastausta (Model answer) sekä palauttaa ratkaistun tehtävän (Submit).
- Alue, johon ilmestyvät tehtäväkohtaiset tietorakenteet (tässä taulukko otsikolla "PostFix expression" ja pino "Operand Stack").
Tehtävä
Infix-muodossa oleva lauseke voidaan muuntaa postfix-muotoon (esim. lauseke 3*(2+4) olisi postfix muodossa 3 2 4 + *), jossa operaattorit esiintyvät operandiensa jälkeen. Tehtävänä on simuloida annetun postfix-muodossa olevan lausekken arvon laskenta pinon avulla. Laskenta voidaan suorittaa yksinkertaisen algoritmin avulla, joka lukee syötteen (taulukon) kerran vasemmalta oikealle ja joka pitää välituloksia pinossa.
Vedä- ja pudota (drag & drop) taulukossa olevat alkiot järjestyksessä pinoon. Operandin pudottaminen pinoon (ks. algoritmin rivi 2) lisää sen pinon päällimmäiseksi. Operaattorin pudottaminen pinoon (ks. algoritmin rivit 3-3.3) poistaa pinosta kaksi päällimmäistä alkiota, suorittaa operaattorin määräämän laskutoimituksen ja lisää saadun vastauksen pinoon (tässä siis yhdellä käyttöliittymäoperaatiolla voidaan "suorittaa" monta algoritmin riviä kerralla). Kun kaikki alkiot on käsitelty, pinossa on ainoastaan yksi lukuarvo, joka vastaa lausekkeen arvoa.
Tarkista ratkaisusi menemällä Animaattorissa ratkaisun alkuun (Begin) ja käymällä vastaus läpi askel-askeleelta (Forward), kunnes tulet jälleen ratkaisun lopputilaan.
Palauta ratkaisusi painamalla Submit-painiketta. Mikäli verkkoyhteys toimii oikein, pitäisi ruutuun ilmestyä viesti-ikkuna, jossa on tehtävästä saadut pisteet.
Tarkastele tehtävän mallivastausta (Model answer). Huomaa, että voit tarvittaessa mennä mallivastauksen alkuun samalla tavalla kuin oman ratkaisusi tarkastuksessa. Mikäli ratkaisussasi oli virhe, voit yrittää etsiä virheellisen kohdan vertaamalla malliratkaisua ja omaa ratkaisuasi askel-askeleelta.
Alusta tehtävä uudelleen (Reset). Huomaa, että evaluoitava lauseke on nyt hiukan erilainen kuin edellisellä kerralla ja näin ollen tehtävän ratkaisukin on erilainen. Voit ratkaista nyt tehtävän uudelleen, kunnes olet tyytyväinen tulokseesi. Tehtävistä saaduista pisteistä jäävät voimaan aina parhaat pisteet. Huomaa kuitenkin, että tehtävän palautuskertoja on saatettu joissain tehtävissä (joillain tehtäväkierroksilla, joillain kursseilla, joinain vuosina) rajoittaa. Tällöin tehtävän alustaminen/mallivastauksen katsominen ei ole aina edes mahdollista ennen tehtävän palauttamista. Tehtäviä voi silti aina ratkoa ja em. rajoitukset vaikuttavat vain saatuihin pisteisiin. Voit siis aina harjoitella tehtävän ratkaisemista järjestelmällä (myös määräajan mentyä umpeen tai palautuskertojen loputtua) eikä siitä ole mitään haittaa.