Warning: Declaration of action_plugin_captcha::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /var/www/fs3/43/helixryf/public_html/tenttiwiki/lib/plugins/captcha/action.php on line 0

Warning: Cannot modify header information - headers already sent by (output started at /var/www/fs3/43/helixryf/public_html/tenttiwiki/lib/plugins/captcha/action.php:0) in /var/www/fs3/43/helixryf/public_html/tenttiwiki/inc/auth.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /var/www/fs3/43/helixryf/public_html/tenttiwiki/lib/plugins/captcha/action.php:0) in /var/www/fs3/43/helixryf/public_html/tenttiwiki/inc/actions.php on line 207
ohjelmoinnin_perusteet_mooc_5_op - Tenttiwiki
Tenttiwiki

Ohjelmoinnin perusteet (MOOC, 5 op)

23.1.2015

Voit lyhentää komennon System.out.println kirjoittamalla sout ja käyttää muitakin lyhenteitä, mikäli selität lyhenteen jokaisessa paperissa, jossa sitä käytät. Voit olettaa kaikissa tehtävissä ohjelman rungon olevan sama, kuin tehtävässä 2.

  • Tehtävä 1. (6 p) Teoriaa. Vastaa jokaiseen kohtaan lyhyesti ja ytimekkäästi, ja anna jokaisesta kohdasta myös konkreettinen esimerkki. Koko tehtävän vastauksen pituudeksi riittää noin kaksi sivua.
    • Mitä ovat olio ja luokka? Miten oliot liittyvät luokkiin ja miten luokat liittyvät olioihin?
    • Mikä on staattinen metodi?
    • Mitä tarkoitetaan metodin ja konstruktorin kuormittamisella?
  • Tehtävä 2. (12 p) Ohjelmoinnin perusasiat

Tämän ja seuraavan tehtävän kohdissa voit olettaa, että ohjelman runko on seuraava:

import java.util.Scanner;
public class Ohjelma {
    public static void main(String[] args) {
        Scanner lukija = new Scanner(System.in);
      
        // int luku = Integer.parseInt( lukija.nextLine() );
        // String rivi = lukija.nextLine();
    }
}
  • Tee ohjelma joka lukee käyttäjältä positiivisen kokonaisluvun ja pyöristää sen seuraavaan kymmenellä jaolliseen lukuun. Esimerkkejä:
Anna numero: 7
Pyöristetty: 10

Anna numero: 41
Pyöristetty: 50

Anna numero: 20
Pyöristetty: 20
  • Tee ohjelma, joka lukee positiivisen kokonaisluvun käyttäjältä ja tulostaa luvut yhdestä annettuun lukuun portaikkona. Viimeinen rivi voi tulostua vain osittain. Esimerkkejä:
Anna luku: 10
1
2 3
4 5 6
7 8 9 10

Anna luku: 23
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23
  • Tee ohjelma joka lukee annetun määrän verran lukuja käyttäjältä. Voit olettaa, että vain yksi luku esiintyy vain kerran ja muut toistuvat. Tehtävänäsi on tunnnistaa vain kerran annettu luku. Esimerkkejä:
Kuinka monta? 5
Anna lukuja:
2
3
2
2
2
Tulos: 3

Kuinka monta? 8
Anna lukuja:
7
3
9
3
3
8
7
9
Tulos: 8
  • Tehtävä 3. (12 p) Tehtävässä tehdään oluiden ja panimoiden tietoja käsittelevä sovellus.
    • (5 p) Ohjelmoi ensin luokka Olut. Oluella tulee olla oliomuuttujat jotka tallentavat oluen nimen, tyylin ja lakoholiprosentin, sekä tiedon siitä onko olut tuatnnossa vai ei. Luokan tulee toimia seuraavasti:
public class Olut {
    public static void main (String[] args) {
        Olut olut = new Olut("Karhu", "Lager", 4.7);
        System.out.println(olut);
        olut.poistaTuotannosta();
        System.out.println(olut);
    }
}
  

Tulostuu:

Karhu (Lager) 4.7% tuotannossa: on
Karhu (Lager) 4.7% tuotannossa: ei

Tee siis luokalle

  • Konstruktori, jolla asetetaan oluen nimi, tyyli ja alkoholiprosentti. Jokainen olut on luontihetkellä tuotannossa.
  • Metodi toString(), joka palauttaa oluen tekstiesityksen (yo. esimerkin tapaan muotoiltuna)
  • Metodi poistaTuotannosta(), jonka kutsumisen jälkeen olut ei ole enää tuotannossa.

Edellisten lisäksi oluella tulee olla metodit

  • onTuotannossa(), joka palauttaa true jos olut on tuotannossa ja muuten false
  • getTyyli(), joka palauttaa oluen tyylin
  • getNimi(), joka palauttaa olen nimen
  • (7 p) Ohjelmoi luokka Panimo.

Panimolla on nimi (joka asetetaan konstruktorissa) ja panimoon liittyy joukko Olut-olioita, jotka panimo tallettaa ArrayList-tyyppiseen oliomuuttujaan. Ohjelmoi luokalle seuraavat metodit:

  • public void uusiOlut(String nimi, String tyyli, double prosentti), luo panimolle parametrien tiedot omaavan oluen.
  • public void tiedot() tulostaa panimon tiedot allaolevan esimerkin mukaisesti muotoiltuna.
  • public void poistaTuotannosta(String oluenNimi), poistaa parametrina määritellyn nimisen oluen tuotannosta.

Seuraava pääohjelma havainnollistaa panimon käyttöä:

public static void main(String[] args){
    Panimo panimo = new Panimo("Mikkeller");
    panimo.uusiOlut("American Dream", "Pils", 4.2);
    panimo.uusiOlut("Dark Horizon", "Stout", 15);
    panimo.uusiOlut("Tjekket Pils", "Pils", 4.7;
    
    panimo.tiedot();
    
    panimo.uusiOlut("Santa's Little Helper", "Porter", 9);
    panimo.poistaTuotannosta("Dark Horizon");
    
    System.out.println("");
    panimo.tiedot();
}

Ohjelman tulostus oikein toteutetuilla luokilla on:

Mikkeller
Oluita yhteensä 3, joista tuotannossa 3
Valmistetut tyylit: Pils Stout
Oluet:
 American Dream (Pils) 4.2% tuotannossa: on
 Dark Horizon (Stout) 15.0% tuotannossa: on
 Tjekket Pils (Pils) 4.7% tuotannossa: on

Mikkeller
Oluita yhteensä 4, joista tuotannossa 3
Valmistetut tyylit: Pils Stout Porter
Oluet:
 American Dream (Pils) 4.2% tuotannossa: on
 Dark Horizon (Stout) 15.0% tuotannossa: ei
 Tjekket Pils (Pils) 4.7% tuotannossa: on
 Santa's Little Helper (Porter) 9.0% tuotannossa: on

ArrayList:n käyttöohje:

  • Konstruktori public ArrayList<T>() luo uuden ArrayList-olion, jossa listan alkiot ovat tyyppiä T.
  • public boolean add(T x) lisää listan loppuun olion x.
  • public int get(int i) palauttaa listan alkion kohdasta i.
  • import-rivi on import java.util.ArrayList

järjestettyjen listan osien välissä ei saa olla rivivaihtoja. jos sisään tekee toisen listan, pitää se sisentää, eli jokaisen rivin eteen lyödään kaksi välilyöntiä, niinkuin yllä.