Tämä ei ole uusin versio kurssista. Katso myös Ohjelmoinnin MOOC 2019: https://ohjelmointi-19.mooc.fi.
Tehtävät

Kertaustehtäviä osiin 1-7 liittyen

Tällä sivulla on kertaustehtäviä materiaalin osiin 1-7 liittyen. Kertaustehtävät saa ladattua TMC:stä. Tehtävät eivät missään nimessä kata kaikkea osien 1-7 sisällöstä, vaan ne toimivat lisäkertauksena kurssin aihepiiriin.

Kertaustehtävissä ei ole automaattisia testejä mukana, eli palauta niitä sitä mukaa kun saat tehtävän toimimaan toivotusti. Mieti myös minkälaisilla syötteillä tehtävän toimintaa kannattaa testata.

Kertaustehtävät eivät ole "pakollisia", eikä niitä tarvitse tehdä esimerkiksi MOOCin kautta opiskelupaikkaa haettaessa. Ne toimivat ensisijaisesti kertaustehtävinä kokeita varten ja muistuttavat kurssisisältöjä mieleen osallistujille, jotka ovat tehneet ohjelmoinnin perusteet -kurssin (osat 1-7) joskus aikaisemmin ja hyppäävät suoraan ohjelmoinnin jatkokurssille mukaan.

Toisto- ja ehtolauseet

Toteuta ohjelma, joka kysyy käyttäjältä lukua, ja tulostaa sen kerrottuna yhdellä, kahdella jne seuraavasti.

Luku: 2

1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
Luku: 7

1 * 7 = 7
2 * 7 = 14
3 * 7 = 21
4 * 7 = 28
5 * 7 = 35
6 * 7 = 42
7 * 7 = 49
8 * 7 = 56
9 * 7 = 63
10 * 7 = 70

Tee ohjelma, joka lukee käyttäjältä lukuja, ja tulostaa sen jälkeen kolmella jaollisten syötteiden summan. Ohjelman lopettaa lukemisen kun käyttäjä syöttää tyhjän merkkijonon.

Luku: 3
Luku: 5
Luku: 27
Luku: 3301
Luku: 3
Luku:

Kolmella jaollisten lukujen summa: 33
Luku: 1
Luku: 2
Luku: 5
Luku: 

Ei kolmella jaollisia lukuja

Tee ohjelma, joka lukee käyttäjältä luvun, ja pyöristää pyöristää sen ylöspäin lähimpään viidellä jaolliseen lukuun.

Luku: 3
Pyöristys: 5
Luku: 5
Pyöristys: 5
Luku: 27
Pyöristys: 30

Kirjoita ohjelma, joka kysyy käyttäjältä vuosilukua, ja tulostaa sen jälkeen vuosilukua seuraavat 5 karkausvuotta. Karkausvuoden laskemiseen löytyy ohjeita Wikipediasta.

Syötä vuosiluku: 1999
Karkausvuodet: 2000, 2004, 2008, 2012, 2016
Syötä vuosiluku: 2016
Karkausvuodet: 2016, 2020, 2024, 2028, 2032
Syötä vuosiluku: 2084
Karkausvuodet: 2084, 2088, 2092, 2096, 2104

Fibonaccin luvut ovat lukuja, jotka ovat aina kahden edeltävän luvun summa. Ensimmäiset kaksi lukua ovat 1 ja 1, jota seuraa luvut 2, 3, 5, 8 jne. Toteuta ohjelma, joka tulostaa halutun määrän Fibonaccin lukuja.

Montako lukua tulostetaan: 5
1, 1, 2, 3, 5
Montako lukua tulostetaan: 11
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89

McDonaldsissa voi ostaa nugetteja neljän, kuuden, yhdeksän ja kahdenkymmenen nugetin pakkauksissa. Kirjoita ohjelma, jolle annetaan luku, ja joka kertoo käyttäjälle onko annettua määrää mahdollista ostaa.

Nugetteja: 3
Ostaminen ei ole mahdollista
Nugetteja: 8
Ostaminen on mahdollista
Nugetteja: 9
Ostaminen on mahdollista
Nugetteja: 11
Ostaminen ei ole mahdollista
Nugetteja: 24
Ostaminen on mahdollista

Kirjoita ohjelma, joka kysyy käyttäjältä suorakulmion leveyttä ja korkeutta, ja tulostaa x-merkeistä muodostuvan suorakulmion.

Leveys: 4
Korkeus: 2

xxxx
xxxx
Leveys: 4
Korkeus: 3

xxxx
xxxx
xxxx

Kirjoita ohjelma, joka kysyy käyttäjältä maton leveyttä ja korkeutta, ja tulostaa x-merkeistä koostuvan maton, jonka joka toisella rivillä joka toinen merkki on o.

Leveys: 4
Korkeus: 2

xxxx
xoxo
Leveys: 5
Korkeus: 5

xxxxx
xoxox
xxxxx
xoxox
xxxxx

Kirjoita ohjelma, joka kysyy käyttäjältä maton leveyttä ja korkeutta, ja tulostaa maton seuraavia sääntöjä noudattaen. Säännöt ovat tärkeysjärjestyksessä, ja tärkeintä sääntöä tulee noudattaa aina ensin:

  • joka toisella rivillä joka toinen merkki on o
  • joka kolmannella rivillä joka kolmas merkki on z
  • joka viidennellä rivillä joka viides merkki on s
  • kaikki muut merkit ovat x-muotoisia
Leveys: 5
Korkeus: 3

xxxxx
xoxox
xxzxx
Leveys: 7
Korkeus: 7

xxxxxxx
xoxoxox
xxzxxzx
xoxoxox
xxxxsxx
xozoxox
xxxxxxx

Tee ohjelma, joka kysyy salmiakin korkeutta, jonka jälkeen se tulostaa "salmiakin".

Korkeus: 1

*
Korkeus: 5

  *
 * *
*   *
 * *
  *
Korkeus: 6

  *
 * *
*   *
*   *
 * *
  *
Korkeus: 7

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

Metodeja ja listoja

Tee metodi public static boolean esiintyykoListallaKerran(ArrayList<Integer> luvut, int luku), joka palauttaa arvon true jos luku esiintyy listalla kerran, muuten arvon false.

Tee metodi public static boolean esiintyykoListallaKolmesti(ArrayList<Integer> luvut, int luku), joka palauttaa arvon true jos luku esiintyy listalla tasan kolme kertaa, muuten arvon false.

Tee metodi public static boolean loytyykoLuvutValilta(ArrayList<Integer> luvut, int alku, int loppu), joka palauttaa arvon true jos listalla löytyy kaikki luvut lukujen alku ja loppu väliltä, muuten metodi palauttaa arvon false.

Merkkijonojen käsittelyä

Kirjoita ohjelma, joka kysyy käyttäjältä merkkijonoa, ja tulostaa sen jälkeen merkkijonon jokaisen merkin erikseen.

Merkkijono: hello world!
h
e
l
l
o

w
o
r
l
d
!

Kirjoita ohjelma, joka kysyy käyttäjältä syötettä ja kertoo sen jälkeen onko syöte palindromi.

Syöte: saippuakauppias
Syöte on palindromi
Syöte: nakkikauppias
Syöte ei ole palindromi

Parittoman pituisissa palindromeissa on jakajamerkki. Toteuta ohjelma, joka selvittää palindromin jakajamerkin.

Syöte: saippuakauppias
Palindromin jakajamerkki on k
Syöte: saippuakivikauppias
Palindromin jakajamerkki on v
Syöte: aa
Ei jakajamerkkiä
Syöte: nauris
Ei palindromi

Oliot

Toteuta luokka Piste, jolla on oliomuuttujat double x ja double y, sopiva konstruktori, sekä metodit public double getX() ja public double getY(). Toteuta tämän jälkeen luokalle metodi public double etaisyys(Piste toinen), joka laskee pisteen etäisyyden toisesta pisteestä. Kahden pisteen etäisyyden laskemiseen löytyy esimerkiksi apua Wikipediasta.

Toteuta luokka Ympyra, jolla on oliomuuttujat double x, double y sekä double sade. Muuttuja x kuvaa ympyrän keskipisteen x-koordinaattia, muuttuja y ympyrän keskipisteen y-koordinaattia sekä sade ympyrän sädettä. Toteuta tämän jälkeen metodi public boolean osuuko(Ympyra toinen), joka palauttaa true jos ympyrä osuu toiseen ympyrään. Edellisestä tehtävästä on tässä hyötyä.

Olioita listalla

Ohjelmoi luokka Tehtava. Tehtavalla tulee olla tieto tehtävästä (merkkijono) sekä tieto siitä, onko tehtävä tehty. Luokan tulee toimia seuraavasti.

Tehtava t = new Tehtava("Korjaa kokeet");
System.out.println(t);
t.asetaTehdyksi();
System.out.println(t);
t.asetaTekemattomaksi();
System.out.println(t);
Korjaa kokeet (ei tehty)
Korjaa kokeet (tehty)
Korjaa kokeet (ei tehty)

Toteuta tämän jälkeen luokka Tehtavalista, joka toimii seuraavasti.

Tehtavalista tl = new Tehtavalista();
tl.lisaa("Käy kaupassa");
System.out.println(tl);
tl.asetaTehdyksi("Käy kaupassa");
System.out.println(tl);
Tehtava t = tl.annaTehtava("Käy kaupassa");
t.asetaTekemattomaksi();
tl.lisaa("Imuroi");
System.out.println(tl);
Tehtävät
* Käy kaupassa (ei tehty)

Tehtävät
* Käy kaupassa (tehty)

Tehtävät
* Käy kaupassa (ei tehty)
* Imuroi (ei tehty)

Toteuta luokka Palaute, joka saa konstruktorin parametrina tekstikuvauksen sekä välillä 1-5 olevan arvosanan. Luokan tulee toimia esimerkiksi seuraavasti.

Palaute p = new Palaute("Kiitti letuista", 2);
System.out.println(p)
(2/5) Kiitti letuista

Kirjoita tämän jälkeen luokka Palauteanalyytikko, jolle voidaan lisätä palautteita. Palauteanalyytikon tulee tarjota seuraavat metodit:

  • public void add(Palaute p) -- lisää palautteen analysoitavaksi
  • public double palautteidenKeskiarvo() -- laskee palautteiden keskiarvon ja palauttaa sen. Mikäli palautteita ei ole, palauta arvo -1
  • public ArrayList<Palaute> palautteetValilta(int alku, int loppu) -- palauttaa kaikki palautteet, joiden arvosana on annetulla välillä
  • public String toString() -- tulostaa kaikki palautteet
Palauteanalyytikko pa = new Palauteanalyytikko();
pa.add(new Palaute("Kiitti letuista", 2));
pa.add(new Palaute(“Kiitti letuista ja hillosta”, 4));

System.out.println(pa.palautteidenKeskiarvo());
System.out.println();
System.out.println(pa.palautteetValilta(3, 5));
System.out.println();
System.out.println(pa);
3.0

[(4/5) Kiitti letuista ja hilloista]

Palautteet:
* (2/5) Kiitti letuista
* (4/5) Kiitti letuista ja hillosta

Hajautustaulu

Kirjoita ohjelma, joka kysyy käyttäjältä merkkijonoa, ja tulostaa sen jälkeen merkkijonon morsekoodina. Morseaakkoset löytyvät wikipediasta: https://fi.wikipedia.org/wiki/S%C3%A4hk%C3%B6tys

Sana: hei
.... 
.
..
Sana: hah
.... 
.-
....

Toteuta ensin luokka Suorakulmio, joka saa konstruktorin parametrina x-koordinaatin, y-koordinaatin, leveyden ja korkeuden. Tee tämän jälkeen luokka Ruudukko, johon suorakulmioita voi lisätä, ja joka piirtää kaikki suorakulmiot ruudukossa. Ohjelman tulee toimia seuraavasti:

Ruudukko r = new Ruudukko();
r.lisaa(new Suorakulmio(0, 0, 2, 3));
System.out.println(r);
xx
xx
xx
Ruudukko r = new Ruudukko();
r.lisaa(new Suorakulmio(0, 0, 2, 3));
r.lisaa(new Suorakulmio(3, 2, 4, 2));
System.out.println(r);
xx
xx
xx xxxx
   xxxx
Ruudukko r = new Ruudukko();
r.lisaa(new Suorakulmio(0, 0, 2, 3));
r.lisaa(new Suorakulmio(3, 2, 4, 2));
r.lisaa(new Suorakulmio(5, 0, 1, 1));
System.out.println(r);
xx   x
xx
xx xxxx
   xxxx

Sisällysluettelo