Ohjelmointi 1 / 2008

Demo 5 / 13.10

Tehtävät

1.
Silmukat: Ota edellisen kerran guru-tehtävän mallivastaus LuvutGraafisesti.java ja muuta sitä niin, että piirraKuva -aliohjelma piirtää taulukon suurimmat arvot punaisella ympyrällä, pienimmät vihreällä ympyrällä ja loput mustilla ympyröillä.
2.
Silmukat: 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 punaisella (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.
Taulukot: Tee edellistä aliohjelmaa käyttäen ohjelma, joka kysyy käyttäjältä kuuden kuukauden keskilämmöt (kuut 1-6) ja piirtää niistä kuvan niin, että alle nollan olevat kuut piirretään vihreällä ympyrällä ja yli 10 asteen kuut piirretään punaisella ympyrällä. Kuusi kuukautta siksi, että kukaan ei jaksa testata syöttämällä 12 kuukauden tulokset. Ohjelma pitää kuitenkin olla helposti muutettavissa 12 kuukauden versioksi.
4.
Silmukat: Tee aliohjelma kertotaulu(n), joka tulostaa n:n kertotaulun for -silmukalla. Esimerkiksi kertotaulu(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ä kertotauluWhile(n,m), joka tulostaa n:än kertotaulusta m-riviä. Toteutus while -silmukalla. Esimerkiksi kertotauluWhile(3,5) tulostaisi:
 1 * 3 =   3
 2 * 3 =   6
 3 * 3 =   9
 4 * 3 =  12
 5 * 3 =  15
Tee sama vielä do-while -silmukalla. Mitä tulostaa kertotauluDoWhile(6,0); jos ei tehdä mitään erikoislisäyksiä? Mitä pitäisi lisätä?
5.
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.
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 apumuuttujalla. Tämä on yksi keskiluvuista. Toinen on keskiarvo. Kirjoita tätäkin varten funktioaliohjelma. Kolmas keskiluvuista on mediaani, eli aineiston keskimmäinen alkio. Tätä ei vielä tarvitse tehdä. Mitä mediaanin laskemiseksi pitäisi ensin tehdä? Katso vaikka Wikipediasta keskiluku.
B1.
Tee funktioaliohjelma 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.         

GURU-tehtävät

G1-2
Tehtävässä 2 voi vielä joku haluta vaihtaa värejä. Parametrilistat kasvavat tällöin kohtuuttoman 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();

    }
Kannattaa ottaa uusin Graphics.jar käyttöön.