Kierros 8, tehtävä 4

Molekyylimassat (300 p)

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

Tee Eclipseen uusi projekti, jonka nimi on tehtava8_4, ja luo tähän projektiin moduuli molekyyli. Kirjoita moduuliin ohjelma, jonka avulla käyttäjä voi laskea haluamiensa molekyylien molekyylimassoja. Tarkempi kuvaus ohjelmasta on annettu alla.

Ohjelmasi käyttää apuna tiedostoa, joka sisältää alkuaineiden atomimassoja. Katso esimerkkkitiedostoa massoja1.txt. Tiedostossa on annettu yhdellä rivillä yhden alkuaineen atomimassa niin, että ensin on alkuaineen kemiallinen merkki, sitten kaksoispiste ja tämän jälkeen alkuaineen atomimassa atomimassayksiköissä (amu). Ohjelmasi pyytää käyttäjää antamaan molekyylin kemiallisen kaavan. Kaava annetaan siten, että kaavassa alkuaine ja sen jäljessä tuleva atomien lukumäärä erotetaan toisistaan kaksoispisteellä. (Jos lukumäärä on yksi, kaksoispiste ja lukumäärä puuttuvat kaavasta.) Eri alkuaine-lukumääräyhdistelmät puolestaan erotetaan toisistaan tavuviivalla. Esimerkiksi veden kemiallinen kaava esitetään muodossa H:2-O ja etanolin C:2-H:5-O-H. Ohjelma tutkii kaavasta, kuinka monta atomia mitäkin alkuainetta siinä esiintyy, ja laskee molekyylimassan laskemalla molekyylissä olevien atomien atomimassat yhteen. Ohjelman ei tarvitse osata toimia oikein silloin, jos molekyylikaavassa esiintyy sulkuja tai negatiivisia kokonaislukuja.

Kirjoita ohjelmasi siten, että se ensin lukee atomimassat sisältävän tiedoston, ja sijoittaa atomimassat sanakirjarakenteeseen, jossa avaimena on alkuaineen kemiallinen merkki ja arvona alkuaineen atomimassa. Tämän jälkeen ohjelma pyytää käyttäjältä sen molekyylin kemiallisen kaavan, jonka molekyylimassa lasketaan. Kun molekyylimassa on laskettu ja tulostettu kahden desimaalin tarkkuudella, ohjelma kysyy käyttäjältä, haluaako hän jatkaa. Ohjelma jatkaa uuden molekyylikaavan kysymisellä, jos käyttäjän vastaus on jokin muu kuin pieni tai suuri e-kirjain. Katso tarkemmin esimerkkijoista, mitä ohjelman pitää tulostaa eri vaiheissa. Lopuksi ohjelma tulostaa "Ohjelma paattyy."

Molekyylimassat sisältävän tiedoston pitää olla samassa hakemistossa ohjelmasi kanssa. Oikea hakemisto on koulun Linux-koneissa tyohakemisto/tehtava8_4/src/, missä tyohakemisto on Eclipsessä käyttämäsi työtilan (workspace) hakemisto.

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 atomimassojen järkevyyttä muuten kuin että ne ovat desimaalilukuja (myös kokonaisluvut kelpaavat), tai molekyylikaavoissa esiintyviä atomien lukumäärien järkevyyttä muuten kuin että ne ovat kokonaislukuja.

Palautus

Testaa ohjelmasi toimintaa monta kertaa ajamalla sitä itse Eclipsessä ennen ohjelman palautusta. Voit käyttää testauksessa apuna tiedostoja massoja1.txt, massoja2.txt ja massoja3.txt. Tallenna ne samaan hakemistoon ohjelmasi kanssa.

Palauta Gobliniin tiedosto molekyyli.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]
Anna tiedoston nimi?
massoja1.txt
Anna molekyylikaava.
H:2-O
Yhdisteen H:2-O molekyylimassa on 18.02 amu.
Haluatko jatkaa (k/e)?
k
Anna molekyylikaava.
H-N-O:3
Yhdisteen H-N-O:3 molekyylimassa on 63.01 amu.
Haluatko jatkaa (k/e)?
K
Anna molekyylikaava.
C:2-H:5-O-H
Yhdisteen C:2-H:5-O-H molekyylimassa on 46.07 amu.
Haluatko jatkaa (k/e)?
e
Ohjelma paattyy.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedostossa virheellisia rivejä]
Anna tiedoston nimi?
massoja2.txt
Virhe: 
Virhe: S:32.065:ylimaaraista
Virhe: Al
Anna molekyylikaava.
H:2-O
Yhdisteen H:2-O molekyylimassa on 18.02 amu.
Haluatko jatkaa (k/e)?
k
Anna molekyylikaava.
Si-Ni
Yhdisteen Si-Ni molekyylimassa on 86.79 amu.
Haluatko jatkaa (k/e)?
k
Anna molekyylikaava.
Al-Ag
Alkuaineen atomimassa puuttuu: Al
Haluatko jatkaa (k/e)?
E
Ohjelma paattyy.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedostossa atomimassa, jota
ei voida tulkita luvuksi]
Anna tiedoston nimi?
massoja3.txt
Virheellinen atomimassa. Ohjelma paattyy.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedostoa ei löydy]
Anna tiedoston nimi?
massoja
Virhe tiedoston massoja lukemisessa. Ohjelma paattyy.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, osassa molekyylikaavoja virheitä]
Anna tiedoston nimi?
massoja1.txt
Anna molekyylikaava.
H:2:3-O
Virhe molekyylikaavassa.
Haluatko jatkaa (k/e)?
k
Anna molekyylikaava.
H:roskaa-O
Virhe molekyylikaavassa.
Haluatko jatkaa (k/e)?
K
Anna molekyylikaava.
-A
Alkuaineen atomimassa puuttuu: 
Haluatko jatkaa (k/e)?
k
Anna molekyylikaava.
I:2
Alkuaineen atomimassa puuttuu: I
Haluatko jatkaa (k/e)?
k
Anna molekyylikaava.
H:2-S-O:4
Yhdisteen H:2-S-O:4 molekyylimassa on 98.08 amu.
Haluatko jatkaa (k/e)?
e
Ohjelma paattyy.
[ohjelman suoritus päättyy]

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