Helsingin yliopisto / Tietojenkäsittelytieteen laitos / 581325-0 Ohjelmoinnin perusteet
Copyright © 2008 Arto Wikla. Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten kaupallisilla tai muilla kursseilla, on kielletty.

4. harjoitukset 23.-26.9.2008

Aiheita: ... ja lisää metodeita, ensimmäiset omat oliot ...

  1. Laadi metodi laskeSyottoKarvo, jolle annetaan luettavien lukujen lukumäärä parametrina. Metodi laskee ja tulostaa syöttölukujen keskiarvon. Laadi myös pääohjelma, joka tarjoaa keskiarvojen laskentapalvelun. Yhdellä käyttökerralla pitää voida laskea useampia keskiarvoja. Tässä tehtävässä saat olettaa, että syötteet annetaan virheettöminä.

  2. Ohjelmoi double-arvon palauttava metodi potenssiin, jonka arvona on double-parametri korotettuna int-parametrin ilmoittamaan potenssiin. Myös negatiiviset potenssit ovat mahdollisia. Sovitaan, että tässä tehtävässä mikä tahansa arvo (myös nolla!) potenssiin nolla on yksi. (Muistutus: Negatiiviset potenssit ovat positiivisten käänteislukuja, esim. potenssi(10.0, -1) on 1/10.0, potenssi(10.0, -2) on 1/100.0, jne., )

    Suunnittele ja toteuta myös pääohjelma, joka tarjoaa käyttäjälle "potenssien laskentapalvelun".

  3. Yksinkertaisessa radiossa on vain kolme säädintä: päälle/pois-kytkin, voimakkuuden säädin (arvot 0, 1, ..., 9) ja kuunneltavan kanavan valinta (2300.0, ..., 26100.0).

    Mallinna radio luokkana Radio. Säätimet toteutetaan metodeina, eli ns. aksessoreina. Luokassa on oltava myös aksessorit, joilla radion tilaa voi tutkia. Tietorakenteet (muuttujat) pidetään tietenkin Radio-olion käyttäjältä piilossa. Niihin pääsee siis käsiksi vain säädellysti aksessoreja käyttäen. Miten virheelliset käyttöyritykset hoidetaan? Miten metodit siis toimivat, jos annetaan virheellinen voimakkuus tai kanava?

    Testaa Radio-luokkaa laatimalla pääohjelma, joka "käyttää radioita". Tässä tehtävässä ei tarvitse varautua ei-numeerisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.

    "Mallinnus" tässä tarkoittaa vain sitä, että säätimiä voi säätää ja niiden arvoja tutkia aksessorimetodeilla Ohjelman kytkeminen todellisen radion käyttöliittymäksi olisi ihan toinen juttu... Käytä kurssimateriaalin esimerkkiä Kuulaskuri ratkaisusi mallina.

  4. Sekuntilaskuri tuntee sekunnit, minuutit ja tunteja vuorokauden verran. Laskuri voi vain edetä. Kun sekunnit ylittävät arvon 59 yhdellä, minuutit kasvavat ja sekunnit nollataan. Kun minuutit ylittävät arvon 59 yhdellä, tunnit kasvavat ja minuutit nollataan. Kun laskuri ylittää arvon 23:59:59 (23 tuntia, 59 minuuttia, 59 sekuntia), aloitetaan uudelleen arvosta 0:0:0. Laskuri siis laskee: 0:0:0, 0:0:1, ..., 0:0:59, 0:1:0, 0:1:1, 0:1:2, ..., 0:59:57, 0:59:58, 0:59:59, 1:0:0, 1:0:1,..., 23:59:58, 23:59:59, 0:0:0

    Toteuta luokka Sekuntilaskuri

    Varusta luokka metodilla toString(), jonka ansiosta olion arvo saadaan tulostettua muodossa tunnit:minuutit:sekunnit, siis esimerkiksi "14:7:53".

    Laadi erillinen pääohjelmaluokka Sekuntilaskuri-luokan "testaamiseen". Tässä pääohjelmassa ei tarvitse varautua virheellisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.

  5. Lämpötilan maksimin ja minimin rekisteröintiin käytetään laitetta MinMax. Laitteelle syötetään lämpötiloja ja siltä voidaan milloin tahansa kysyä toistaiseksi korkeinta ja toistaiseksi matalinta lämpötilaa. Kun laite otetaan käyttöön, se on alkutilassa, ja mittareiden näytöllä ei ole merkitystä. Heti ensimmäisen mittaustuloksen jälkeen laite antaa järkeviä tuloksia. Laite voidaan myös myöhemmin asettaa alkutilaan uuden mittaussarjan rekisteröintiä varten. Laitteelta voidaan kysyä, onko se alkutilassa vai voiko sen ilmoittamiin lämpötiloihin luottaa.

    Toteuta laite luokkana MinMax, jolla on konstruktorin lisäksi seuraavat aksessorit:

    Laadi luokkaan myös pääohjelmametodi, joka havainnollistaa ja testaa luokan toimintaa. Tässä tehtävässä ei tarvitse varautua ei-numeerisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.

    Huomaa ettei laitteen alkutilaa voi päätellä esimerkiksi siitä, että minimi ja maksimi olisivat nollassa. Onhan nimittäin mahdollista, että pitkälläkin mittausjaksolla lämpötila pysyttelee sitkeästi nollassa ja suurin ja pienin mitattu lämpötila todella on 0o C! Totuusarvoinen yksityinen kenttä voisi olla hyvä idea alkutilassa olon tietämiseen...


Takaisin harjoitussivulle.