(Muutettu viimeksi 15.9.2011, sivu perustettu 25.8.2011.)
Toisen viikon harjoitukset liittyvät oppimateriaalin lukuihin 1 Algoritmeja: 18-23.
Kaikki harjoitustehtävät on syytä tehdä. Jotkin tehtävät on merkitty keltaisella värillä. Ne ovat ehkä hieman muita haastavampia. Ilman niitäkin harjoituksista voi saada maksimipisteet, mutta ne lasketaan silti mukaan harjoituspisteitä määrättäessä – ne voivat siis korvata joitakin haasteettomampia tehtäviä tms. Mutta ennen kaikkea noista keltaisista tehtävistä sitä vasta oppiikin!
Huom:
// 2. harjoitukset, tehtävä 1.3, Oili Opiskelija
Tässä harjoitellaan pääasiassa oppimateriaalin kohtaa 1 Algoritmeja: aliluvut 18-20.
Ohjelma tulostaa parittomat luvut väliltä 1-99 nousevassa järjestyksessä.
Käytä tässä tehtävässä while
-lausetta ja muuttujaa, joka
askeltaa kahden välein.
Tulosta metodilla System.out.println eli tulosta
ns. standarditulosvirtaan.
1 3 5 7 ... 99
Tulosta luvut 1-100 laskevassa järjestyksessä
Käytä tässä tehtävässä while
-lausetta ja muuttujaa, joka
askeltaa alaspäin.
Tulosta metodilla System.out.println.
100 99 ... 2 1
Tulosta lukuvut ykkösestä alkaen annettuun rajaan saakka. Kysy raja ponnahdusikkunalla ja tulosta metodilla System.out.println.
1 2 3 4 5 6
Tulosta parilliset luvut annettuun rajaan asti Kysy raja ponnahdusikkunalla ja tulosta metodilla System.out.println.
2 4 6 8 10
Kirjoita ohjelma, joka kysyy käyttäjältä ensimmäisen ja viimeisen luvun ja tulostaa ne ja niiden välissä olevat luvut. Käyttäjä voi antaa ensin pienemmän luvun ja sitten suuremman luvun tai päinvastoin.
Tulostus standarditulosvirtaan:
5 6 7 8
Tulostus standarditulosvirtaan:
16 15 14 13 12
Tee ohjelma, joka kysyy kuukauden numeron ponnahdusikkunan avulla ja tulostaa seuraavien 12 kuukauden numerot standarditulosvirtaan metodeilla System.out.println ja System.out.print:
Seuraavat 12 kuukautta ovat: 10 11 12 1 2 3 4 5 6 7 8 9
Ohjelma kysyy käyttäjän ikää niin kauan, kun käyttäjä ei ymmärrä antaa ikää, joka on väilliä 0-130. Käytä toistolausetta, jonka ehtona on syötetyn iän tarkistus.
Liian suuri:
Liian pieni:
Osui:
Käytä tämän tehtäväsarjan toimittamiseen palautusautomaattia! Ohje sivun alussa.
Myös tässä harjoitellaan pääasiassa oppimateriaalin kohtaa 1 Algoritmeja: aliluvut 18-20.
Toteuta tämän sarjan tehtävät ponnahdusikkunoin. Päätä itse ohjelman nimi ja ikkunoiden sisällön yksityiskohdat.
Tee ohjelma, joka laskee summan 1+2+3+...+n, missä n on käyttäjän syöttämä luku.
Jos käyttäjä esimerkiksi antaa luvun 3, ohjelma tulostaa ikkunan, jossa on 6, koska 1+2+3=6. Ja jos käyttäjä antaa vaikkapa luvun 7 ohjelma tulostaa 28 koska 1+2+3+4+5+6+7=28.
Muokkaa edellistä tehtävää siten, että käyttäjä määrää myös summan laskemisen aloituskohdan. Saat olettaa, että käyttäjä antaa ensin pienemmän luvun ja sitten suuremman luvun.
Jos käyttäjä syöttää vaikkapa luvut 3 ja 5, ohjelma tulostaa ikkunan, jossa on 12, koska 3+4+5=12.
Tee ohjelma, joka laskee luvun n kertoman. Kertoma n! lasketaan kaavalla 1*2*3*...*n. Esimerkiksi 4! = 1*2*3*4 = 24. Lisäksi on määritelty, että 0! = 1.
Jos käyttäjä syöttää vaikkapa luvun 4, ohjelma tulostaa ikkunan, jossa on 24, koska 1*2*3*4=24.
Käytä tämän tehtäväsarjan toimittamiseen palautusautomaattia! Ohje sivun alussa.
Edelleen harjoitellaan pääasiassa oppimateriaalin kohtaa 1 Algoritmeja: aliluvut 18-20.
Harjoitellaan toistolauseita ja merkkien tulostamista. Muista että System.out.print("*"); tulostaa yhden tähden vaihtamatta riviä! Niinpä seuraava samanlainen lause tulostaa tähden edellisen perään. Muista myös, että System.out.println(); tulostaa (eli aiheuttaa) pelkän rivinvaihdon.
Nämä ohjelmat kyselevät tietoja ponnahdusikkunoin ja tulostavat standarditulosvirtaan.
Ohjelma tulostaa käyttäjän pyytämän määrän tähtiä.
Tulostus:
*****
Tulostus:
********
Ohjelma tulostaa tähtisuorakulmion, jonka leveyden ja korkeuden käyttäjä antaa.
Tulostus:
**** **** ****
Tulostus:
********** ********** ********** ********** **********
Ohjelma tulostaa tähtiportaikon, jonka korkeuden käyttäjä antaa.
Tulostus:
* ** ***
Tulostus:
* ** *** **** *****
Ohjelma tulostaa tähtikuusen, jonka korkeuden käyttäjä antaa. Muista miten System.out.print(" "); tulostaa yhden välilyönnin vaihtamatta riviä.
Tulostus:
* *** ***** *
Tulostus:
* *** ***** ******* ********* *
Käytä tämän tehtäväsarjan toimittamiseen palautusautomaattia! Ohje sivun alussa.
Tässä harjoitellaan pääasiassa oppimateriaalin kohtaa 1 Algoritmeja: aliluvut 18-23.
Tee ohjelma, joka kysyy ponnahdusikkunan avulla käyttäjältä kokonaislukuja, kunnes käyttäjä antaa luvun 0. Kun käyttäjä syöttää luvun 0, ohjelma tulostaa "Kiitos ja näkemiin!" ja päättyy.
Käyttäjä antaa vielä vaikkapa viisi lukua ja lopuksi nollan:
Ohjelma toteaa:
Laajenna edellistä ohjelmaa siten, että ohjelma ilmoittaa käyttäjän syöttämien lukujen lukumäärän. Lopetusnollaa ei lasketa mukaan lukumäärään.
Syötteet annetaan kuin edellä. Lopuksi ohjelma ilmoittaa:
Laajenna edellistä ohjelmaa siten, että ohjelma laskee ja ilmoittaa lukujen lukumäärän lisäksi lukujen summan.
Syötteet annetaan kuin edellä. Lopuksi ohjelma ilmoittaa:
Negatiivisten ja positiivisten kokonaislukujen määrä: Ohjelma pyytää käyttäjältä kokonaislukuja. Luku nolla ilmaisee, että syöttöluvut loppuivat. Ohjelman tehtävänä on laskea syötteen positiivisten ja negatiivisten lukujen lukumäärä:
Vihje: Käytä yhtä muuttujaa laskemaan positiivisten lukumäärää ja toista negatiivisten.
Ohjelma pyytää käyttäjältä kokonaislukuja. Luku nolla ilmaisee, että syöttöluvut loppuivat. Ohjelman tehtävänä on selvittää ja tulostaa arvoltaan pienin ja arvoltaan suurin syöttöluku. Ohjelma keskustelee käyttäjän kanssa edellisen tehtävän tapaan.
Vihje: Laadi ohjelma vaiheittain: Tee ensin versio, joka etsii suurimman syöttöluvun ja laajenna sitten ohjelma löytämään myös pienin.
Vihje: Käytä jotain muuttujaa, joka muistaa jo luetuista luvuista "toistaiseksi suurimman", ja jos luetaan vieläkin suurempi luku, vaihda tuon muuttujan arvo vastaamaan muuttunutta tilannetta.
Huomaa että nolla on nyt erikoistapaus, se ei tässä tehtävässä ole "suurin" eikä "pienin". Jos heti syötetään nolla, ohjelma ilmoittaa, että lukuja ei ollut. Jos syötetään vain yksi luku ja sen jälkeen heti nolla, tuo ainoa syöttöluku on sekä pienin että suurin.
Laadi ohjelma, jolla voi laskea ei negatiivisten liukulukujen keskiarvon. Lukujen määrää ei tiedetä ennalta. Ensimmäinen syötetty negatiivinen luku on loppumerkki. Loppumerkkiä ei saa laskea mukaan keskiarvoon. Ohjelman on toimittava myös, jos ensimmäisenä syötetään negatiivinen luku. Se tarkoittaa ettei syötetäkään ensimmäistäkään varsinaista syöttölukua. Ohjelma keskustelee käyttäjän kanssa ponnahdusikkunoin. Suunnittele yksityiskohdat itse.
Tee ohjelma, joka ensin lukee kaksi kokonaislukua, alarajan ja ylärajan. Sitten ohjelma lukee syöttölukuja ja kirjoittaa jokaisen välillä alaraja–yläraja olevan syöttöluvun luettuaan ilmoituksen "Osui!", muiden kohdalla "Huti!". Ohjelman suoritus päättyy, kun luvuksi syötetään nolla. Lopuksi ohjelma tulostaa tilaston osumista.
Tässä harjoitellaan pääasiassa oppimateriaalin kohtaa 1 Algoritmeja: aliluku 21.
Kivi-paperi-sakset-pelissä on kaksi pelaajaa. Kumpikin valitsee yhtä aikaa yhden noista kolmesta vaihtoehdosta. Kivi voittaa sakset, sakset voittavat paperin, paperi voittaa kiven. Toteuta peli siten, ettei tietokonetta voi voittaa, se valitsee aina voittajavaihtoehdon. (On kyllä aika epäreilua, että kone saa tehdä valintansa tietäen ihmisen vastauksen!)
Ohjelma kysyy:
Vastauksesta riippuen ohjelma vastaa:
Varaudu myös siihen, että ohjelman käyttäjä keskeyttää vastaamisen ikkunan nurkan rastilla.
Java-kirjaston työkalu Math.random() palauttaa arvonaan double-tyyppisen satunnaisluvun puoliavoimelta väliltä [0, 1). Tämä tarkoittaa, että nollakin voi tulla, mutta tasan yksi ei enää ole mahdollinen.
Esimerkiksi seuraavalla logiikalla voi toteuttaa arvonnan kolmen vaihtoehdon välillä:
double arvottuLuku = Math.random(); if (arvottuLuku < 1.0/3.0) // 1. vaihtoehto else if (arvottuLuku < 2.0/3.0) // 2. vaihtoehto else // 3. vaihtoehto
Muokkaa edellisen tehtävän ärsyttävän ylivoimaisesta kivi-paperi-sakset-pelistä reilu versio. Tietokone siis arpoo oman vastauksensa ja ilmoittaa tuloksen, joka voi nyt olla "Voitit!" ja "Voitin!"
Huom: Tämän tehtävän vihjeissä oli mielenkiintoisia ja opettavaisia mokia!
Muokkaa edellisen tehtävän kivi-paperi-sakset-peli sellaiseksi, että sillä voi pelata monta kierrosta:
Peruskysymys on nyt:
Kun peli loppuu, ohjelma näyttää tulostilaston:
Ohjelma kysyy kuukauden ja vastaa kertomalla, mikä vuodenaika on:
Valitaan elokuu:
Varaudu myös siihen, että ohjelman käyttäjä keskeyttää vastaamisen Cancel-nappulalla tai ikkunan nurkan rastilla.
Ohjelmalla voi selvittää, montako päivää annetussa kuukaudessa on. Jos kysytään helmikuun päivälukumäärää, ohjelma tarvitsee tiedon myös vuosiluvusta voidakseen ottaa karkausvuodet huomioon. Muokkaa ohjelma edellisestä! Myös karkausvuoden toteaminen on jo ohjelmoitu. Käytä hyväksesi!
Tässä tapauksessa ohjelman pitää tietää myös vuosiluku:
Lopputulos: