Kierros 4, tehtävä 2

Pituusmuunnos (150 p)

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

Tee Eclipseen uusi projekti, jonka nimi on tehtava4_2, ja tähän projektiin moduuli pituusmuuntaja. Kirjoita moduuliin alla olevan kuvauksen mukainen ohjelma, jonka avulla käyttäjä voi muuttaa jalkoina ja tuumina ilmoitetun pituuden senttimetreiksi.

USAlaiset ilmoittavat ihmisten pituuden jalkoina ja tuumina. (Esimerkiksi 5 jalkaa 6 tuumaa.) Tässä tehtävässä kirjoitetaan ohjelma, jonka avulla näin ilmoitetut ihmisten pituudet voi muuntaa senttimetreiksi. Kirjoita ohjelmaan funktio tee_pituusmuunnos, joka pyytää käyttäjän antamaan pituuden jalkoina ja tuumina. Molemmat ovat kokonaislukuja. Funktio muuntaa annetun pituuden senttimetreiksi ja tulostaa sen. Tulostusta ei tarvitse muotoilla, vaan funktio tulostaa pituuden Python-tulkin käyttämällä oletustarkkuudella.

Yksi tuuma on 2,54 senttimetriä. Yksi jalka on 12 tuumaa. Kirjoita funktio niin, että se hyväksyy vain välillä 1-9 olevat jalkojen määrät ja vain välillä 0-11 olevat tuumien määrät. Jos toinen tai molemmat käyttäjän antamat arvot eivät ole sallitulla välillä (rajalla olevat arvot hyväksytään), funktio tulostaa Luvut eivat ole oikealla valilla!, eikä tee muuta. Tarkistus tehdään kuitenkin vasta sen jälkeen, kun sekä jalkojen että tuumien määrä on luettu käyttäjältä.

Kirjoita sitten pääohjelma, joka kutsuu tee_pituusmuunnos-funktiota. Kun funktio on suoritettu kerran, pääohjelma kysyy käyttäjältä, haluaako hän jatkaa ohjelman suoritusta. Jos käyttäjä haluaa jatkaa, hän antaa 1:sen; jos käyttäjä ei halua jatkaa, hän antaa 0:n. Kirjoita kuitenkin pääohjelma niin, että ohjelma jatkuu aina, kun käyttäjä antaa jonkun muun kokonaisluvun kuin 0. Jos käyttäjä haluaa jatkaa ohjelman suoritusta, funktiota tee_pituusmuunnos kutsutaan uudelleen. Tätä toistetaan niin kauan, kunnes käyttäjä ei enää halua jatkaa. Siinä vaiheessa ohjelma tulostaa Ohjelman suoritus paattyy.

Huomaa, että kaikki tarvittavat tiedot pyydetään (jatkokysymystä lukuunottamatta) ja tulostetaan funktiossa tee_pituusmuunnos. Funktiolla ei siis ole parametreja eikä se palauta mitään arvoa. Pääohjelmassa ainoastaan kutsutaan funktiota sekä kysytään, haluaako käyttäjä jatkaa ohjelman suoritusta. Lisäksi pääohjelma tulostaa Ohjelman suoritus paattyy. siinä vaiheessa, kun käyttäjä ei enää halua jatkaa ohjelman suoritusta. (Tämä voi tuntua kokeneemmasta ohjelmoijasta oudolta, mutta tässä tehtävässä on nimenomaan tarkoitus aloittaa funktioiden kirjoittaminen yksinkertaisella funktiolla niin, että vielä ei tarvitse osata käyttää parametreja ja paluuarvoja.)

Vinkki: Voit kirjoittaa ensin pyydetyn funktion ja pääohjelman, joka kutsuu pyydettyä funktiota ainoastaan kerran. (Tällaista ratkaisua ei voi vielä palauttaa Goblinille, mutta voit itse testata ohjelman toimintaa ajamalla sitä Eclipsessä.) Kun olet saanut tämän ohjelman toimimaan oikein, lisää pääohjelmaan toistokäsky, joka kysyy, haluaako käyttäjä jatkaa ohjelman suoritusta.

Ohjelmasi pitää siis antaa virheilmoitus silloin, jos käyttäjän antamat arvot eivät ole sallituilla väleillä, mutta ohjelman ei tarvitse varautua siihen, että käyttäjä ei anna jalkoja tai tuumia kokonaislukuna. Testaa ohjelmaasi useita kertoja eri arvoilla ajamalla sitä itse Eclipsessä, ennen kuin palautat ratkaisusi Gobliniin. Palauta Gobliniin tiedosto pituusmuuntaja.py.

Goblin tarkistaa, että palauttamassasi ohjelmassa todella on funktio tee_pituusmuunnos, joka toimii edellä kuvatulla tavalla. Goblin ei hyväksy palautustasi, jos funktio on nimetty toisin tai sen toiminta ei muuten vastaa annettua kuvausta.

Esimerkki ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Ohjelma muuttaa pituuden senteiksi.
Montako jalkaa (1-9)?
6
Montako tuumaa (0-11)?
3
Pituus on 190.5 cm.
Haluatko jatkaa (1 = kylla / 0 = ei)?
1
Montako jalkaa (1-9)?
5
Montako tuumaa (0-11)?
3
Pituus on 160.02 cm.
Haluatko jatkaa (1 = kylla / 0 = ei)?
1
Montako jalkaa (1-9)?
0
Montako tuumaa (0-11)?
5
Luvut eivat ole oikealla valilla!
Haluatko jatkaa (1 = kylla / 0 = ei)?
1
Montako jalkaa (1-9)?
7
Montako tuumaa (0-11)?
-1
Luvut eivat ole oikealla valilla!
Haluatko jatkaa (1 = kylla / 0 = ei)?
0
Ohjelman suoritus paattyy.
[ohjelman suoritus päättyy]

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