Tehtävät viikolle 2

Tehtävät tehdään pääsääntöisesti "ohjelmointipajassa" eli ohjatusti harjoitussaleissa.

Pakolliset tehtävät on merkitty harmalla taustavärillä. Pakollisuus tarkoittaa oikeastaan hyvin voimakasta suositusta tehtävän tekemiseen. Jos pakollisia jää tekemättä, on suuri riski, että seuraavalla viikolla esitellään asioita jotka oletetetaan jo osatuiksi ja pakollisten tehtävien kautta harjoitelluiksi.

Muutama NetBeans-vihje

Lukusarjat

Tee seuraavat tehtävät while-silmukan avulla:

Yhdestä sataan

Tee ohjelma, joka tulostaa kokonaisluvut väliltä 1–100.

Ohjelman tulostus on seuraava:

1
2
3
(välissä paljon rivejä)
98
99
100

Sadasta yhteen

Tee ohjelma, joka tulostaa kokonaisluvut väliltä 100–1.

Ohjelman tulostus on seuraava:

100
99
98
(välissä paljon rivejä)
3
2
1

Parilliset luvut

Tee ohjelma, joka tulostaa parilliset kokonaisluvut väliltä 2–100.

2
4
6
(välissä paljon rivejä)
96
98
100

Lukuun asti

Kirjoita ohjelma, joka tulostaa kokonaisluvut 1:stä käyttäjän antamaan lukuun asti.

Mihin asti? 3
1
2
3
Mihin asti? 5
1
2
3
4
5

Alaraja ja yläraja

Kirjoita ohjelma, joka kysyy käyttäjältä ensimmäisen ja viimeisen luvun ja tulostaa niiden välissä olevat luvut. Käyttäjä voi antaa ensin pienemmän luvun ja sitten suuremman luvun tai päinvastoin.

Ensimmäinen: 5
Viimeinen: 8
5
6
7
8
Ensimmäinen: 16
Viimeinen: 12
16
15
14
13
12

Matematiikkaa

Summa 1+2+3+...+n

Tee ohjelma, joka laskee summan 1+2+3+...+n, missä n on käyttäjän syöttämä luku.

Ohjelman voi tehdä käyttäen while-silmukkaa. Voit myös tehdä tehtävän laajentamalla 1.4:n toiminnallisuutta summan laskemisella.

Esimerkkitulostuksia:

Mihin asti? 3
Summa 1+2+...+3 on 6
Mihin asti? 7
Summa 1+2+...+7 on 28

Huom: tulostuksen tarkka muoto ei ole tässä eikä seuraavassa tehtävässä kovin oleellinen, tärkeintä on summan laskeminen ja sen tulostaminen.

Summa alku+...+loppu

Muuta edellistä tehtävää siten, että käyttäjä määrää myös summan laskemisen aloituskohdan. Voit olettaa, että käyttäjä antaa ensin pienemmän luvun ja sitten suuremman luvun.

Esimerkkitulostuksia:

Ensimmäinen: 3
Viimeinen: 5
Summa 3+...+5 on 12
Ensimmäinen: 2
Viimeinen: 8
Summa 2+...+8 on 35

Kertoma

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.

Esimerkkitulostuksia:

Anna luku: 3
Luvun 3 kertoma on 6
Anna luku: 10
Luvun 10 kertoma on 3628800

Summa 2^0+2^1+2^2...+2^n

Tee ohjelma, joka laskee summan 2^0+2^1+2^2+...+2^n, missä n on käyttäjän syöttämä luku. Merkintä 2^i tarkoittaa luvun 2 korottamista potenssiin i, esimerkiksi 2^4 = 2*2*2*2 = 16. Javassa merkintä a^b ei ole käytössä, mutta potenssin voi laskea metodilla Math.pow(a, b).

Esimerkkitulostuksia:

Anna luku: 3
2^0+2^1+...+2^3 = 15
Anna luku: 7
2^0+2^1+...+2^7 = 255

Silmukat, lopetus ja muistaminen

Lukujen lukeminen

Tee ohjelma, joka kysyy käyttäjältä lukuja, kunnes käyttäjä antaa luvun -1. Kun käyttäjä syöttää luvun -1, ohjelma tulostaa "Kiitos ja näkemiin!" ja päättyy.

Anna lukuja:
5
2
4
-1
Kiitos ja näkemiin!

Lukujen summa

Laajenna edellistä ohjelmaa siten, että ohjelma ilmoittaa käyttäjän syöttämien lukujen summan. (Lukua -1 ei lasketa mukaan.)

Anna lukuja:
5
2
4
-1
Summa: 11

Lukujen summa ja lukumäärä

Laajenna edellistä ohjelmaa siten, että ohjelma ilmoittaa myös käyttäjien antamien lukujen lukumäärän. (Lukua -1 ei lasketa mukaan.)

Anna lukuja:
5
2
4
-1
Summa: 11
Lukuja: 3

Lukujen keskiarvo

Muuta edellistä ohjelmaa siten, ohjelma ilmoittaa lukujen keskiarvon. (Lukua -1 ei lasketa mukaan.)

Anna lukuja:
5
2
4
-1
Summa: 11
Lukuja: 3
Keskiarvo: 3.666666666666

Parilliset ja parittomat

Laajenna edellistä ohjelmaa siten, että ohjelma ilmoittaa parillisten ja parittomien lukujen määrän. (Lukua -1 ei lasketa mukaan.)

Anna lukuja:
5
2
4
-1
Summa: 11
Lukuja: 3
Keskiarvo: 3.666666666666
Parillisia: 2
Parittomia: 1

Huomio: Ohjelmien tekeminen pienissä paloissa

Tehtävissä 3.1-3.5 tehtiin oikeastaan ainoastaan yksi ohjelma, mutta ohjelman rakentaminen tapahtui hyvin pienissä paloissa. Tämä on ehdottoman suositeltava tapa AINA kun ohjelmoit.

Eli kun teet ohjelmaa, oli se sitten laskaritehtävä tai joku oma projektisi, kannattaa edetä hyvin pienissä paloissa. Älä koskaan yritä ratkaista koko ongelmaa kerralla. Aloita jollain helpolla asialla jonka tiedät varmasti osaavasi, esim. 3.1:ssä keskityttiin aluksi pelkästään siihen, että osataan pysäyttää ohjelma käyttäjän syöttäessä luvun -1. Kun yksi ohjelman osa on saatu toimimaan, voidaan siirtyä ratkaisemaan jotain seuraavaa varsinaisen ongelman osaongelmaa.

Osa kurssin tehtäviä on 3.1-5:n tapaan valmiiksi osiin pilkottuja. Usein jokainen osa kuitenkin pitää vielä pilkkoa ohjelmoinnin kannalta vieläkin pienempiin paloihin. Kannattaa jopa tehdä siten, että lähes jokaisen koodirivin jälkeen suoritetaan ohjelma ja varmistetaan, että ratkaisu on etenemässä haluttuun suuntaan.


Pienin ja suurin

Tee ohjelma (tai laajenna edellistä), joka kysyy käyttäjältä lukuja, kunnes käyttäjä antaa luvun -1. Sitten ohjelma ilmoittaa pienimmän ja suurimman luvun. (Lukua -1 ei lasketa mukaan.)

Anna lukuja:
9
5
2
-1
Pienin: 2
Suurin: 9
Anna lukuja:
5
3
7
8
-1
Pienin: 3
Suurin: 8
Anna lukuja:
4
-1
Pienin: 4
Suurin: 4

Lukusarjat forilla

Tee seuraavat tehtävät for-silmukan avulla:

Yhdestä sataan

Tee ohjelma, joka tulostaa kokonaisluvut väliltä 1–100.

Ohjelman tulostus on seuraava:

1
2
3
(välissä paljon rivejä)
98
99
100

Sadasta yhteen

Tee ohjelma, joka tulostaa kokonaisluvut väliltä 100–1.

Ohjelman tulostus on seuraava:

100
99
98
(välissä paljon rivejä)
3
2
1

Parilliset luvut

Tee ohjelma, joka tulostaa parilliset kokonaisluvut väliltä 2–100.

2
4
6
(välissä paljon rivejä)
96
98
100

Lisää silmukoista

Tähtien tulostus

Tee ohjelma, joka tulostaa käyttäjän antaman määrän tähtiä.

Kuinka monta tähteä? 5
*****
Kuinka monta tähteä? 8
********

Suorakulmion tulostus

Tee ohjelma, joka tulostaa suorakulmion, jonka leveyden ja korkeuden käyttäjä antaa.

Vihje: Tee kaksi sisäkkäistä silmukkaa.

Anna leveys: 4
Anna korkeus: 3
****
****
****
Anna leveys: 10
Anna korkeus: 5
**********
**********
**********
**********
**********

Portaikon tulostus

Tee ohjelma, joka tulostaa portaikon, jonka kerrosten määrän käyttäjä antaa.

Kuinka monta kerrosta? 3
*
**
***
Kuinka monta kerrosta? 5
*
**
***
****
*****

Kuusen tulostus

Tee ohjelma, joka tulostaa kuusen, jonka korkeuden käyttäjä antaa.

Anna korkeus: 3
  *
 ***
*****
  *
Anna korkeus: 5
    *
   ***
  *****
 *******
*********
    *

PIN-koodi

PIN-koodissa on neljä numeroa väliltä 1–9. Tee ohjelma, joka tulostaa järjestyksessä kaikki PIN-koodit.

Vihje: Tee neljä sisäkkäistä silmukkaa!

1111
1112
1113
(välissä paljon rivejä)
5629
5631
5632
(välissä paljon rivejä)
9997
9998
9999

Taulukon läpikäyntiä

Taulukko alusta loppuun

Tee ohjelma, joka tulostaa taulukossa olevat luvut alusta loppuun.

Taulukko määritellään koodin alussa seuraavasti:

int [] taulukko = {5, 1, 3, 4, 2};

Ohjelman tulostus on seuraava:

5
1
3
4
2

Jos taulukon määrittely muuttuu, myös ohjelman toiminnan tulee muuttua. Eli kirjoita silmukkasi siten, että ne toimivat kaikenlaisille taulukoille. Taulukon alkioiden määrän kertoo taulukko.length. Toinen ratkaisu on käyttää for-each-silmukkaa.

int [] taulukko = {2, 7, 3};
2
7
3

Taulukko lopusta alkuun

Tee ohjelma, joka tulostaa taulukossa olevat luvut lopusta alkuun.

Taulukko määritellään koodin alussa seuraavasti:

int [] taulukko = {5, 1, 3, 4, 2};

Ohjelman tulostus on seuraava:

2
4
3
1
5

Taulukko tähtinä

Tee ohjelma, joka tulostaa taulukon lukuja vastaavat määrät tähtiä.

Taulukko määritellään koodin alussa seuraavasti:

int [] taulukko = {5, 1, 3, 4, 2};

Ohjelman tulostus on seuraava:

*****
*
***
****
**

Taulukon lukujen summa

Tee ohjelma, joka tulostaa taulukon lukujen summan.

Taulukko määritellään koodin alussa seuraavasti:

int [] taulukko = {5, 1, 3, 4, 2};

Ohjelman tulostus on seuraava:

15

Tyylikäs tulostus

Tee ohjelma, joka tulostaa taulukossa olevat luvut tyylikkäästi. Lukujen väliin tulee pilkku ja välilyönti. Viimeisen luvun jälkeen ei kuitenkaan tule pilkkua.

Taulukko määritellään koodin alussa seuraavasti:

int [] taulukko = {5, 1, 3, 4, 2};

Ohjelman tulostus on seuraava:

5, 1, 3, 4, 2

Lukujen paikan vaihtaminen

Tee ohjelma, joka antaa käyttäjälle mahdollisuuden vaihtaa kahden luvun paikkaa taulukossa.

Taulukko määritellään koodin alussa seuraavasti:

int [] taulukko = {5, 1, 3, 4, 2};

Esimerkkisyötteitä:

Taulukon sisältö: 5, 1, 3, 4, 2
1. kohta: 0
2. kohta: 1
Taulukon sisältö: 1, 5, 3, 4, 2
Taulukon sisältö: 5, 1, 3, 4, 2
1. kohta: 1
2. kohta: 3
Taulukon sisältö: 5, 4, 3, 1, 2

Mitä ohjelmasi tekee, jos käyttäjä antaa virheellisen syötteen?

Onko luku taulukossa?

Tee ohjelma, joka kertoo, onko käyttäjän antama luku taulukossa.

Taulukko määritellään koodin alussa seuraavasti:

int [] taulukko = {7, 2, 4, 8};

Esimerkkitulostuksia:

Anna luku: 4
Luku on taulukossa.
Anna luku: 3
Lukua ei ole taulukossa.

Onko sana taulukossa?

Tee ohjelma, joka kertoo, onko käyttäjän antama sana taulukossa.

Taulukko määritellään koodin alussa seuraavasti:

String [] taulukko = {"apina", "banaani", "cembalo"};

Esimerkkitulostuksia:

Anna sana: apina
Sana on taulukossa.
Anna sana: siili
Sanaa ei ole taulukossa.

Muista, mitä erityistä on merkkijonojen vertailussa!

Taulukko käyttäjältä

Lukujen kääntäminen

Tee ohjelma, joka kysyy käyttäjältä lukujen määrän ja joukon lukuja. Sitten ohjelma tulostaa luvut käänteisessä järjestyksessä.

Kuinka monta lukua? 4
Anna luvut:
4
2
8
1
Käänteinen järjestys:
1
8
2
4

Lukujen järjestäminen

Javassa on valmiina paljon kaikenlaista hyödyllistä. Viime viikolla käytettiin vakiota Math.PI, joka sisältää piin arvon, sekä metodia Math.max(luku1, luku2), joka palauttaa kahdesta luvusta suuremman.

Javassa on myös valmis metodi taulukon järjestämiseen. Myöhemmin kurssilla opimme, kuinka taulukon voi järjestää ilman valmista metodia.

Seuraava komento järjestää taulukon, jonka nimi on luvut:

   Arrays.sort(luvut);

Huom: Komennon käyttäminen vaatii, että ohjelmatiedoston yläosassa lukee seuraava määrittely:

import java.util.Arrays;

Jos unohdat import-rivin, NetBeans tarjoaa apua sen kirjoittamiseen. Kokeile klikata punaisella alleviivatun koodirivin vasempaan laitaan ilmestyvää lampun kuvaa...

Tee ohjelma, joka kysyy käyttäjältä lukujen määrän ja joukon lukuja. Tämän jälkeen ohjelma tulostaa luvut järjestyksessä.

Kuinka monta lukua? 4
Anna luvut:
5
2
8
1
Luvut järjestyksessä:
1
2
5
8

Sanojen kysely

Tee ohjelma, joka kysyy käyttäjältä sanoja, kunnes käyttäjä antaa saman sanan uudestaan. Voit olettaa, että käyttäjä antaa korkeintaan 1000 sanaa.

Anna sana: porkkana
Anna sana: selleri
Anna sana: nauris
Anna sana: lanttu
Anna sana: selleri
Annoit saman sanan uudestaan!

Sanataulukko

Tee ohjelma, joka kysyy käyttäjältä sanoja taulukkoon. Tämän jälkeen käyttäjä voi tarkistaa, onko tietty sana taulukossa. Ohjelma päättyy, kun käyttäjä kysyy sanaa "pois".

Kuinka monta sanaa? 3
Anna sana: apina
Anna sana: banaani
Anna sana: cembalo
Nyt voit kysyä sanoja.
Anna sana: banaani
Sana on taulukossa.
Anna sana: kurpitsa
Sana ei ole taulukossa.
Anna sana: cembalo
Sana on taulukossa.
Anna sana: pois
Hei hei!