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 suurimmat arvot punaisella ympyrällä, pienimmät vihreällä ympyrällä ja loput mustilla ympyrö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 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.
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 tulostettaviin vai ei). Tee vastaava funktio
summaYli(taulukko,raja), joka palauttaa 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) tulostaisi:
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 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.
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();
}