Kierros 8, tehtävä 4

Rahalaskuri (300 p)

Tässä tehtävässä harjoitellaan erityisesti seuraavia asioita:

Tee Eclipseen uusi projekti, jonka nimi on tehtava8_4. Luo sitten tähän projektiin moduli rahalaskuri ja kirjoita siihen ohjelma, joka ratkaisee alla kuvatun ongelman.

Ulkomaanpuhelu Suomesta Yhdysvaltoihin maksoi vuonna 1979 noin 15 markkaa minuutilta. Kuinka paljon se on nykyrahassa, kun euromuunnoksen lisäksi otetaan huomioon rahan arvon muutos vuodesta 1979 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 2010 rahaksi. (Koska vuoden 2011 tilastoja ei ole vielä saatavilla, tässä tehtävässä muutetaan raha-arvot vastaamaan vuoden 2010 arvoa.) Katso esimerkkkitiedostoa rahakertoimet1.txt. Se sisältää jokaisella rivillä vuoden ja tätä vastaavan kertoimen. Vuosi ja kerroin on erotettu toisistaan puolipisteellä. Kerroin kertoo, millä luvulla sitä vastaavan vuoden rahasumma on kerrottava, jotta saataisiin sen arvo vuonna 2010.

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 2010 rahassa.

Osa kerrointiedostoista sisältää myös virheellisiä rivejä eli rivejä, jotka eivät ole kuvatussa muodossa tai sisältävät esimerkiksi tekstiä lukujen paikalla. Kun ohjelma kohtaa tällaisen rivin, se tulostaa virheilmoituksen

Tiedostossa virhe rivilla N.
missä N on sen rivin numero, jolla virheellinen syöte on (tiedoston ensimmäisen rivin numero on 1). Ohjelma kuitenkin jatkaa toimintaansa normaalisti virheellisen rivin jälkeen ja tallentaa sanakirjarakenteeseen virheettömiä rivejä vastaavat vuodet ja kertoimet. Voit testata ohjelmasi toimintaa virheellisiä rivejä sisältävillä tiedostoilla esimerkiksi tiedoston rahakertoimet2.txt avulla.

Kerrointiedoston pitää olla samassa hakemistossa ohjelmasi kanssa. Oikea hakemisto on Unix-koneissa tyohakemisto/tehtava8_4/src/, missä tyohakemisto on Eclipsessä käyttämäsi työtilan (workspace) hakemisto.

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.

Virhetilanteiden käsittely

Ohjelman on selviydyttävä seuraavista virhetilanteista:

Katso esimerkkiajoista tarkemmin, millainen ohjelman tulostuksen pitää olla eri virhetilanteissa. Ohjelman ei tarvitse tarkistaa tiedostosta luettujen tai käyttäjän antamien vuosilukujen järkevyyttä muuten kuin että ne ovat kokonaislukuja.

Huomaa, että try-except-rakenteita voi kirjoittaa myös sisäkkäin samaan tapaan kuin sisäkkäisiä if-käskyjä.

Huomautuksia rahan arvon kehityksestä

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.

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.

Palautus

Palauta Gobliniin tiedosto rahalaskuri.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ä.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Mista tiedostosta kertoimet luetaan?
rahakertoimet1.txt
Minka vuoden rahasumman arvon haluat tietaa?
1902
Anna muunnettava rahasumma.
1000.0
Summan arvo vuonna 2010 on 4198.50 euroa.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedosto ei sisallä kerrointa
annetulle vuodelle]
Mista tiedostosta kertoimet luetaan?
rahakertoimet1.txt
Minka vuoden rahasumman arvon haluat tietaa?
1850
Anna muunnettava rahasumma.
155.8
Ohjelmalla ei ole tietoa antamasi vuoden rahan arvosta.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, virheellinen syöte]
Mista tiedostosta kertoimet luetaan?
rahakertoimet1.txt
Minka vuoden rahasumman arvon haluat tietaa?
1960
Anna muunnettava rahasumma.
paljon
Vuosi tai rahasumma on annettu vaarassa muodossa.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, virheellinen syöte]
Mista tiedostosta kertoimet luetaan?
rahakertoimet1.txt
Minka vuoden rahasumman arvon haluat tietaa?
kauan sitten
Vuosi tai rahasumma on annettu vaarassa muodossa.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedostoa ei löydy]
Mista tiedostosta kertoimet luetaan?
olematon.txt
Virhe tiedoston olematon.txt lukemisessa. Ohjelma paattyy.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedosto sisältää virheitä]
Mista tiedostosta kertoimet luetaan?
rahakertoimet2.txt
Tiedostossa virhe rivilla 5.
Tiedostossa virhe rivilla 12.
Tiedostossa virhe rivilla 46.
Tiedostossa virhe rivilla 64.
Tiedostossa virhe rivilla 73.
Tiedostossa virhe rivilla 99.
Tiedostossa virhe rivilla 102.
Minka vuoden rahasumman arvon haluat tietaa?
1985
Anna muunnettava rahasumma.
300.0
Summan arvo vuonna 2010 on 90.18 euroa.
[ohjelman suoritus päättyy]

Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta