Johdatus ohjelmointiin, harjoitustehtävät

Syksy 2006

Harjoitukset tiistaisin tiedepuiston mikroluokassa 247. R1 kello 10-12, R2 kello 12-14, ja R3 kello 14-16.

Harjoitustehtävät palautetaan ennen demoja demonpitäjälle sähköpostiosoitteeseen jo2006@cs.joensuu.fi. Tehdyiksi voi merkitä vain ne harjoitukset jotka on palauttanut sähköpostilla!

Viikko 4 (3.10)

Harjoituksissa opittavat asiat:

Tehtävä 1 (1p.)

Määritellään seuraavat kiintoarvot:

freshman = 1              # aloitusvuosi
sophomore = 2             # kandiopintoja
junior = 3                # kandiopintoja
senior = 4                # maisteriopintoja
gradstudent = 5           # maisteriopintoja
aloitusvuosi = freshman
kandivuosi = junior       # vuosi jona valmistutaan kandiksi
graduvuosi = gradstudent  # vuosi jona valmistutaan maisteriksi
opintokk = 9              # vuodessa on 9 opintokuukautta
opintoraha = 259.02       # opintotuki on 254e 2snt
op_per_vuosi = 40         # vuodessa saadaan 40 opintopistettä   

1a) Päättele tai kokeile millaisia arvoja, merkkijonoja tai joukkoja seuraavat lauseet tuottavat. Päättele myös mitä tyyppiä tulos on (kokonaisluku, desimaaliluku, merkkijono, kokonaislukujoukko):

   
   kehote = "Anna vuosikurssi väliltä " + str(freshman) + " ja " + str(gradstudent) + "."
   yhteenlaskettavat = range(4,10)
   tuki_vuodessa = opintokk*opintoraha
   opintopisteen_hinta = int(tuki_vuodessa/op_per_vuosi)
   opintovuodet = range(aloitusvuosi,graduvuosi+1)
   op_hinta_str = str(opintopisteen_hinta)
   maisteriopintovuodet = range(kandivuosi+1,graduvuosi)

Mikä tai mitkä edellisistä määrittelyistä olivat ehkä(?) jollain tapaa vääriä tai muuten kummallisia? Miksi? Miten niitä pitäisi muuttaa?

1b) Seuraavissa lauseissa ei saa käyttää numeroita! (Eli lauseissa saa olla vain edellä määriteltyjä vakioiden tunnuksia sekä Python-kielen operaattoreita ja merkkejä kuten +, -, ", str, (), jne.) Katso mallia kohdan 1a muuttujan kehote määrittelemisestä. Huomaa että str()-komennon sulkujen sisällä voi olla muuttujia, laskutoimituksia, jne.

Tee lauseet joissa käytetään hyväksi yllämainittuja kiintoarvoja ja jotka tuottavat

Kokeile muuttujien arvoja tulostamalla ne print-komennolla.

Tehtävä 2 (1p)

Seuraavassa ohjelmassa on useita virheitä. Korjaa ohjelmaa niin että se toimii oikein.

# Ohjelma joka pyytää käyttäjältä kaksi kokonaislukua,
# laskee yhteen nuo luvut ja kaikki niiden välillä olevat
# kokonaisluvut, ja tulostaa vastauksen.

summa = -999  # kokooja; tähän muuttujaan kerätään lukujen summa
  
alku = input("Anna ensimmäinen   luku: ")
loppu = input("Anna viimeinen luku: ")
   
yhteenlaskettavat = range(alku, loppu)

for x in yhteenlaskettavat:
    summa = summa + x

print "Lukujen ", alku, "...", str(loppu),
print "summa on ", summa
Tehtävä 3 (1p)

Muuta edellistä ohjelmaa siten, että ohjelmassa käytetään askeltavan toiston (for) sijaan alkuehtoista toistoa (while).

Mieti lisäksi mitkä ovat muuttujien roolit tässä ohjelmassa.

Tehtävä 4 (2p)

Kokonaisesta, toimivasta ohjelmasta saa kaksi pistettä; osittain toimivasta ohjelmasta saa yhden pisteen. Käytä vastauksessa 1. tehtävän kiintoarvoja.

Tee uusi ohjelma joka ensiksi kysyy monesko opintovuosi opiskelijalla on menossa, ja sitten kysyy jokaista opintovuotta kohti montako opintopistettä opiskelija sai tuona vuonna. Lopuksi ohjelma laskee ja tulostaa (1) opiskelijan yhteenlaskettujen opintopisteiden määrän ja tavoitemäärän, (2) varoituksen jos opiskelija on jäljessä aikataulusta.

Ohjelman suoritus voi näyttää esimerkiksi tältä:

>>> ================================ RESTART ================================
>>> 
Kuinka mones opintovuosi on menossa: 3
Montako op:tä sait 1. vuonna: 32
Montako op:tä sait 2. vuonna: 29
Montako op:tä sait 3. vuonna: 27
Sait yhteensä 88 opintopistettä.
Tavoite 3 vuodessa on 120op.
Olet jäljessä tavoitteesta 32op.
>>> 

...tai esimerkiksi tältä:

>>> ================================ RESTART ================================
>>> 
Kuinka mones opintovuosi on menossa: 2
Montako op:tä sait 1. vuonna: 58
Montako op:tä sait 2. vuonna: 65
Sait yhteensä 123 opintopistettä.
Tavoite 2 vuodessa on 80op.
Olet hyvin aikataulussa.
>>> 
Tehtävä 5 (1p)

Tule harjoituksiin katsomaan PlanAni-esimerkki "tuplat".

Lähetä vastaukset ennen ensimmäisiä demoja (10:15) yhdessä sähköpostissa demonpitäjälle.