Tässä tehtävässä harjoitellaan erityisesti seuraavia asoita:
Tee Eclipseen uusi projekti, jonka nimi on tehtava5_2 ja tähän projektiin moduuli kalenteri. Kirjoita moduuliin ohjelma, joka tulostaa yhden kuukauden kalenterin alla olevan mallin mukaisesti:
Toukokuu ma ti ke to pe la su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Käyttäjä kertoo, minkä kuukauden kalenteri tulostetaan, montako päivää tässä kuukaudessa on, sekä mikä on kuukauden ensimmäisen päivän viikonpäivä. Viikonpäivä ilmaistaan numeroin siten, että 1 tarkoittaa maanantaita ja 7 sunnuntaita. Ohjelmalla ei siis tarvitse olla itsellään tietoa eri kuukausien päivien lukumäärästä, vaan tarvittava tieto saadaan käyttäjältä.
Kirjoita ohjelmaan seuraava funktio:
Ensimmäiseksi kannattaa tulostaa kuukauden nimi ja viikonpäivät
sisältävä otsikkorivi omille riveilleen. Tämän jälkeen kannattaa
tulostaa tyhjiä paikkoja tarvittava määrä sen mukaan, mistä
viikonpäivästä kuukausi alkaa. Huomaa, että voit tulostaa samalle
riville asioita usealla eri print
-käskyllä, jos kirjoitat
print
-käskyn loppuun (yhdellä kerralla tulostettavien
asioiden jälkeen) pilkun. Tällöin print
-käsky lisää
tulostettavan asian jälkeen yhden välilyönnin, mutta ei rivinvaihtoa.
(Sopivan välilyöntimäärän tulostamisen voi hoitaa myös sopivalla
merkkijonon "kertolaskulla", mutta koska merkkijono-operaatioita ei ole
käyty kurssilla läpi siinä vaiheessa, kun tätä tehtävää on tarkoitus
tehdä, on tulostus neuvottu tässä ja tehty esimerkkiratkaisussa ilman
kertolaskuoperaatiota.)
Itse päivien numeroiden tulostamisen voi tehdä esimerkiksi kahdessa
sisäkkäisessä silmukassa, joista sisempi tulostaa yhden viikon
kaikki päivät (jälleen kannattaa käyttää apuna pilkkua
print
-operaation yhteydessä) ja ulompi
pitää huolen siitä, että kaikki kuukauden viikot tulevat tulostettua.
Apuna voi käyttää kahta eri kokonaislukumuuttujaa, joista toinen
pitää kirjaa siitä, missä viikonpäivässä ollaan menossa, ja toinen
kirjaa siitä, missä kuukauden päivässä ollaan menossa.
Toinen vaihtoehto on käyttää vain yhtä toistokäskyä ja tutkia
aina jakojäännöksen avulla, koska on aika vaihtaa riviä. (Rivinvaihdon
saa aikaiseksi kirjoittamalla print
-käskyn ilman
mitään muuta tulostettavaa.)
Kuukauden viimeisen päivän jälkeen tulostetaan rivinvaihto. Viimeistä riviä ei siis "täydennetä" lisäämällä viimeisen päivän jälkeen ylimääräisiä välilyöntejä.
Ohjelmasi voi olettaa, että käyttäjä antaa sille järkevän kuukauden päivien lukumäärän. Jos käyttäjän antama kuukauden aloitusviikonpäivä ei ole välillä 1-7, ohjelman on tulostettava virheilmoitus "Viikonpaivan on oltava valilla 1-7." ja lopetettava toimintansa. Ohjelman ei tarvitse varautua muihin virheellisiin syötteisiin. Muista huolehtia siitä, että ohjelmasi tulostaa rivinvaihdon myös viimeisen viikon jälkeen.
Testaa jälleen ohjelmaasi ajamalla sitä itse Eclipsessä useilla eri arvoilla ja tarkistamalla, että kalenteri näyttää oikealta. Kun ohjelmasi näyttää toimivan oikein, palauta Gobliniin tiedosto kalenteri.py.
[ohjelman suoritus alkaa] Ohjelma tulostaa yhden kuukauden kalenterin. Anna kuukauden nimi. Toukokuu Montako paivaa kuukaudessa on? 31 Mika on 1. paivan viikonpaiva (1 = ma, 7 = su)? 6 Toukokuu ma ti ke to pe la su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa] Ohjelma tulostaa yhden kuukauden kalenterin. Anna kuukauden nimi. Syyskuu Montako paivaa kuukaudessa on? 30 Mika on 1. paivan viikonpaiva (1 = ma, 7 = su)? 3 Syyskuu ma ti ke to pe la su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa] Ohjelma tulostaa yhden kuukauden kalenterin. Anna kuukauden nimi. Tammikuu Montako paivaa kuukaudessa on? 31 Mika on 1. paivan viikonpaiva (1 = ma, 7 = su)? 0 Viikonpaivan on oltava valilla 1-7. [ohjelman suoritus päättyy]
Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta