Tässä tehtävässä harjoitellaan erityisesti seuraavia asioita:
Tee Eclipseen uusi projekti, jonka nimi on tehtava8_4. Luo sitten tähän projektiin moduuli rahamuunnin ja kirjoita siihen ohjelma, joka ratkaisee alla kuvatun ongelman.
Ulkomaanpuhelu Suomesta Yhdysvaltoihin maksoi vuonna 1979 noin 15 markkaa minuutilta. Vuonna 1989 vastavalmistunut diplomi-insinööri sai palkkaa noin 9000 markkaa kuukaudessa. Kuinka paljon nämä summat ovat nykyrahassa, kun euromuunnoksen lisäksi otetaan huomioon rahan arvon muutos vuodesta 1979 tai 1989 nykyhetkeen? Tässä tehtävässä kirjoitat ohjelman, joka osaa vastata tämäntapaisiin kysymyksiin.
Ohjelmasi käyttää apuna tiedostoa, joka sisältää muunnoskertoimet. Näiden kertoimien avulla voidaan muuttaa eri vuosien rahasumma vuoden 2012 rahaksi. (Koska vuoden 2013 tilastoja ei ole vielä saatavilla, tässä tehtävässä muutetaan raha-arvot vastaamaan vuoden 2012 arvoa.) Katso esimerkkkitiedostoa kertoimet1.txt. Se sisältää jokaisella rivillä vuoden ja tätä vastaavan kertoimen. Vuosi ja kerroin on erotettu toisistaan kaksoispisteellä. Kerroin kertoo, millä luvulla sitä vastaavan vuoden rahasumma on kerrottava, jotta saataisiin sen arvo vuonna 2012.
Tehtävänäsi on kirjoittaa ohjelma, joka lukee tiedostossa (sen nimi kysytään käyttäjältä) annetut vuodet ja kertoimet sekä tallentaa ne sanakirja-rakenteeseen. Tämän jälkeen ohjelma pyytää käyttäjää antamaan vuoden ja rahasumman. Ohjelma laskee ja tulostaa vastaavan rahasumman arvon vuoden 2012 rahassa.
Osa kerrointiedostoista sisältää myös virheellisiä rivejä. Niiden käsittelystä on kerrottu tarkemmin alempana.
Kerrointiedoston pitää olla samassa hakemistossa ohjelmasi kanssa.
Ohjelman rakennetta ei ole tässä määrätty sen tarkemmin, vaan saat itse suunnitella, mitä funktioita kirjoitat ohjelmaasi. Älä kuitenkaan kirjoita koko ohjelmaa yhdeksi pääohjelmaksi, vaan käytä myös muita funktioita järkevästi.
Ohjelman on selviydyttävä seuraavista virhetilanteista:
Tiedoston rivi N on virheellinen.Jos taas osien lukumäärä rivillä on oikea, mutta joko vuosiluku ei ole kokonaisluku tai kerroin desimaaliluku, ohjelma tulostaa virheilmoituksen
Virheellinen luku rivilla N.Molemmissa tapauksissa N on sen rivin numero, jolla virheellinen syöte on (tiedoston ensimmäisen rivin numero on 1). Ohjelma kuitenkin jatkaa tiedoston seuraavien rivien käsittelyä normaalisti ja tallentaa sanakirjarakenteeseen virheettömiä rivejä vastaavat vuodet ja kertoimet. Voit testata ohjelmasi toimintaa virheellisiä rivejä sisältävillä tiedostoilla esimerkiksi tiedoston kertoimet2.txt avulla.
Huomaa, että try-except-rakenteita voi kirjoittaa myös sisäkkäin samaan tapaan kuin sisäkkäisiä if-käskyjä.
Rahan arvon kehitystä voidaan seurata monilla eri mittareilla, jotka antavat vähän erilaisia tuloksia. Voidaan tutkia esimerkiksi palkkojen kehittymistä tai valittujen tuotteiden hintojen kehittymistä. Tässä tehtävässä käytetyt kerrointiedostot perustuvat Tilastokeskuksen Rahanarvonkerrointaulukkoon. Taulukko on laadittu elinkustannusindekisn perusteella.
Tehtävän alussa mainittu ulkomaanpuhelun hintatieto perustuu tehtävän laatijan muistikuvaan vuonna 1979 soitetusta Amerikan-puhelusta. Hinta voi olla markan tai kaksi pielessä, mutta hintaluokka on oikea.
Palauta Gobliniin tiedosto rahamuunnin.py.
Jos sinusta on vaikeaa saada ohjelma toimimaan oikein kaikissa virhetilanteissa, voit palauttaa ohjelman, joka toimii oikein virheettömillä tiedostoilla. Goblin antaa tällaisesta ratkaisusta osan pisteistä.
[ohjelman suoritus alkaa] Anna kertoimet sisaltavan tiedoston nimi. kertoimet1.txt Minka vuoden rahasummaa tarkastellaan? 1970 Kerro muunnettava rahasumma. 100.0 Sen arvo vuonna 2012 on 140.74 euroa. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa, tiedosto ei sisallä kerrointa annetulle vuodelle] Anna kertoimet sisaltavan tiedoston nimi. kertoimet1.txt Minka vuoden rahasummaa tarkastellaan? 1850 Kerro muunnettava rahasumma. 50.0 Ohjelmalta puuttuu antamasi vuoden muuntokerroin. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa, virheellinen syöte] Anna kertoimet sisaltavan tiedoston nimi. kertoimet1.txt Minka vuoden rahasummaa tarkastellaan? 1960 Kerro muunnettava rahasumma. suuri Et antanut oikeaa vuotta tai rahasummaa. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa, virheellinen syöte] Anna kertoimet sisaltavan tiedoston nimi. kertoimet1.txt Minka vuoden rahasummaa tarkastellaan? kauan sitten Et antanut oikeaa vuotta tai rahasummaa. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa, tiedostoa ei löydy] Anna kertoimet sisaltavan tiedoston nimi. kertoimet3.txt Tiedoston kertoimet3.txt lukeminen ei onnistu. Ohjelma paattyy. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa, tiedosto sisältää virheitä] Anna kertoimet sisaltavan tiedoston nimi. kertoimet2.txt Virheellinen luku rivilla 16. Tiedoston rivi 67 on virheellinen. Tiedoston rivi 96 on virheellinen. Virheellinen luku rivilla 101. Virheellinen luku rivilla 111. Minka vuoden rahasummaa tarkastellaan? 1995 Kerro muunnettava rahasumma. 1200.0 Sen arvo vuonna 2012 on 270.48 euroa. [ohjelman suoritus päättyy]
Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta