Ohjelmointi 1 / 2009

Demo 5 / 12.10

Tehtävät

V1.

Tee Ville-tehtävät: 4.1, 4.2, 4.3, 4.4, 5.1, 5.4, 9.1

T1.

Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (ComTest ja/tai JUnit), saat merkitä yhden lisäpisteen.

1.

M: 15. Toistorakenteet: Ota edellisen kerran guru-tehtävänLuvutGraafisesti.java mallivastaus ja muuta sitä niin, että piirraKuva -aliohjelma piirtää taulukon suu­rimmat arvot punaisella ympyrällä, pienimmät vihreällä ympyrällä ja loput mustilla ympy­röillä.

2.

M: 15. Toistorakenteet: Edellistä matkien tai edelliseen lisäten tee toinen (kuormitettu, overloaded) aliohjelma piirraKuva, jolle viedään taulukon lisäksi parametrina luku, jota pienemmät arvot piirretään vihreällä ja toinen luku, jota suuremmat arvot piirretään punaisel­la (yhtäsuuruus mukana). Voitko tehdä tehtävän 1 käyttäen tätä aliohjelmaa? Voiko tätä käyttäen piirtää myös samanlaisen kuvan kuin edellisen kerran Guru-tehtävässä?

3.

M: 14. Taulukot: Ota luennolla tehty taulukkomalli: Taulukot.java ja muuta se sellaiseksi, että siinä on aliohjelma tulostaYli(taulukko,raja), joka tulostaa taulukosta kaikki ne luvut, jotka ylittävät annetun rajan (päätä itse ja hoida kommentoinnilla, että kuuluuko raja tulostet­taviin vai ei). Tee vastaava funktio summaYli(taulukko,raja), joka pa­lauttaa rajan ylittävien taulukon lukujen summan.

4.

M: 15. Toistorakenteet: Tee aliohjelma tulostaKertotaulu(n), joka tulostaa n:n kertotaulun for -silmukalla. Esimerkiksi tulostaKertotaulu(3) tulostaisi:
 1 * 3 =   3
 2 * 3 =   6
 3 * 3 =   9
 4 * 3 =  12
 5 * 3 =  15
 6 * 3 =  18
 7 * 3 =  21
 8 * 3 =  24
 9 * 3 =  27
10 * 3 =  30
Tee vielä tulostaKertotauluWhile(n,m), joka tulostaa n:än kertotaulusta m-riviä. Toteutus while-silmukalla. Esimerkiksi tulostaKertotauluWhile(3,5) tulostai­si:
 1 * 3 =   3
 2 * 3 =   6
 3 * 3 =   9
 4 * 3 =  12
 5 * 3 =  15
Tee sama vielä do-while -silmukalla. Mitä tulostakertotauluDoWhile(6,0); tulostaa jos ei tehdä mitään erikoislisäyksiä? Mitä pitäisi lisätä?

5.

M: 14. Taulukot: Tee funktioaliohjelma summaa(luvut), joka laskee yhteen taulukossa olevat parilliset luvut ja vähentää niistä parittomat luvut. Funktio palauttaa tuon summan. Aloita kirjoittamalla pääohjelma, jossa mietit kuinka aliohjelmaa kutsutaan.

6.

Tee funktio(aliohjelma) alkaaIsolla(sana), joka palauttaa true jos parametrinä viety merkkijono alkaa isolla kirjaimella. Tee tätä käyttäen ohjelma, joka komentoriviltä käyttäen toimii seuraavasti (vinkki: Character-luokka, args-taulukko):
java demo5.AlkaaIsolla kissa Kana Koira kettu Mato 2Kanaa
Isolla alkaa:
 1. argumentti = Kana
 2. argumentti = Koira
 4. argumentti = Mato
Eclipsessä F11 -ajoa varten argumentteja voi antaa seuraavasti:
Oletetaan että ohjelma on jo kerran Eclipsessä ajettu ja sen nimi
on AlkaaIsolla
  Run/Debug Configurations/AlkaaIsolla/Arguments
ja sitten kirjoitetaan halutut komentorivin parametrit 
Program Arguments -kohtaan.         

B1.

M: 14. Taulukot: Tee funktioaliohjelma moodi(luvut), joka etsii taulukon yleisimmän luvun. Jos joku eniten esiintyviä on yhtä monta, niin silloin ensimmäisenä vastaantuleva tulkitaan yleisimmäksi. Mieti ensin tarkasti kuinka itse ratkaisit tämän ongelman (eli mieti algoritmi). Et tarvitse aputaulukkoja välttämättä, vaan tehtävän voi ratkaista muutamalla apumuuttujal­la. Tämä on yksi keskiluvuista. Toinen on keskiarvo. Kirjoita tätäkin varten funktioaliohjel­ma. Kolmas keskiluvuista on mediaani, eli aineiston keskimmäinen alkio. Tätä ei vielä tar­vitse tehdä. Mitä mediaanin laskemiseksi pitäisi ensin tehdä? Katso vaikka Wikipediasta keskiluku.

GURU-tehtävät

G1-2

Tehtävässä 2 voi vielä joku haluta vaihtaa värejä. Parametrilistat kasvavat tällöin kohtuutto­man pitkiksi. Yksi hyvä ratkaisu on tehdä ympyröiden piirtäjästä olio. Tee tarvittava luokka niin, että alla oleva pääohjelma toimii:
    public static void main(String[] args) {
        double luvut2[] = {1.9,3,2,2.4,1.2,2.6,3.2,3.1};
        Window ikkuna = new Window(600,400);
        ikkuna.scale(0,-1,luvut2.length,4);
        ikkuna.add(new Axis(100,100,0));

        TaulukkoYmpyroina t2 = new TaulukkoYmpyroina(luvut2);
        ikkuna.add(t2);
        t2.setMinColor(Color.BLUE).setMaxColor(Color.ORANGE).
           setColor(Color.PINK).setR(0.4).setMin(2).setMax(3);
        
        ikkuna.showWindow();

    }