Ohjelmointi 2, välikoe

Samankaltaiset tiedostot
Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmointi 2 / 2011 Välikoe / 25.3

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin jatkokurssi, kurssikoe

OHJ2k12 välikoe

Mikä yhteyssuhde on?

Olio-ohjelmointi Javalla

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

ITKP102 Ohjelmointi 1 (6 op)

Metodien tekeminen Javalla

9. Periytyminen Javassa 9.1

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

1. Mitä tehdään ensiksi?

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Periytyminen (inheritance)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

4. Luokan testaus ja käyttö olion kautta 4.1

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

ITKP102 Ohjelmointi 1 (6 op)

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Java-kielen perusteet

Sisältö. 22. Taulukot. Yleistä. Yleistä

Luokat ja oliot. Ville Sundberg

Listarakenne (ArrayList-luokka)

Javan perusteita. Janne Käki

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

16. Javan omat luokat 16.1

9. Periytyminen Javassa 9.1

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Luokan sisällä on lista

15. Ohjelmoinnin tekniikkaa 15.1

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

1 Tehtävän kuvaus ja analysointi

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Ohjelmoinnin perusteet, kurssikoe

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

7. Oliot ja viitteet 7.1

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Ohjelmistotekniikan menetelmät, koe

Java-kielen perusteita

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

YHTEYSSUHDE (assosiation)

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

KOHDELUOKAN MÄÄRITTELY

Sisältö. 2. Taulukot. Yleistä. Yleistä

Testivetoinen ohjelmistokehitys

1. Omat operaatiot 1.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

ITKP102 Ohjelmointi 1 (6 op)

Rajapinta (interface)

Java kahdessa tunnissa. Jyry Suvilehto

7. Näytölle tulostaminen 7.1

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

7/20: Paketti kasassa ensimmäistä kertaa

17. Javan omat luokat 17.1

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Interaktiivinen tarinankerronta

C:\MyTemp\ohj1\ohjdemot\k2012\demot\vastaukset\demo11\PP1\TokaPisin.cs 1 using System; 2 using System.Collections.Generic; 3 using System.

Ohjelmoinnin perusteet Y Python

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Lista luokan sisällä

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

12. Javan toistorakenteet 12.1

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

public static void main (String [] args)

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Ohjelmoinnin perusteet, syksy 2006

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Java-kielen perusteet

Taulukot. Jukka Harju, Jukka Juslin

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

14. Poikkeukset 14.1

Tietokannat II -kurssin harjoitustyö

13. Loogiset operaatiot 13.1

Metodien tekeminen Javalla

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Pakkauksen kokoaminen

14. Poikkeukset 14.1

Transkriptio:

Ohjelmointi 2, välikoe 21.3.2014 Vastaa neljään tehtävään kuudesta siten, että jokainen tehtävä tulee omalle konseptilleen. Mikäli vastaat useampaan kuin neljään tehtävään, pisteiden laskussa huomioidaan neljä heikointa tehtävää. Vastauksissa saa tarvittaessa käyttää kurssille tehtyjä kirjastoja (Ali.jar, GUI.jar ja graphics.jar) sekä tietysti Javan omia kirjastoja. Pienet epätarkkuudet parametrien järjestyksessä yms. sallitaan, jos ei ulkoa ihan tarkkaan muista kutsujen muotoa. TEHTÄVÄ 1. Luokan täydennys Tässä on esitelty luokat Kana ja Kanala. Täydennä luokat siten, että Kanala-luokassa oleva pääohjelma toimii. Pääohjelmasta löytyy yhteensä neljä TODO-kohtaa, jotka pitää tehdä. Testejä ei tarvitse kirjoittaa. public class Kana { private String nimi; private int muniaviikossa = 0; * Palautetaan kanan nimi * @return kanan nimi public String getnimi() { return nimi; * Palautetaan kanan tuotantokyky eli munia/viikko * @return kuinka monta munaa kana munii viikossa public int getmuniaviikossa() { return muniaviikossa; public class Kanala { private ArrayList<Kana> kanat; public Kanala() { kanat = new ArrayList<Kana>(); * Lisää kanan kanalaan * @param lisattavakana lisattava kana public void lisaakana(kana lisattavakana) { kanat.add(lisattavakana); Ohjelmointi 2, välikoe 21.3.2014 1/7

* Testataan luokkia Kanala sekä Kana. * @param args ei käytössä. public static void main(string[] args) { // TODO a) Kirjoita Kana-luokalle tarvittavat muodostajat. Kana kana1 = new Kana("Klaara", 3); Kana kana2 = new Kana("Kotkot", 6); Kana kana3 = new Kana("Juniori"); // TODO b) Muokkaa Kana-luokkaa siten, että seuraavat tulostukset toimivat System.out.println(kana1); // Tulostus: Klaara munii 3 munaa/viikko. System.out.println(kana2); // Tulostus: Kotkot munii 6 munaa/viikko. System.out.println(kana3); // Tulostus: Juniori munii 0 munaa/viikko. // TODO c) Lisää Kana-luokaan compareto-metodi, joka toimii esitetyllä // tavalla. Vertailu tehdään munintamäärän perusteella. if(kana1.compareto(kana2) < 0) System.out.println(kana2.getNimi() + " munii useammin kuin " + kana1.getnimi()); if(kana1.compareto(kana2) > 0) System.out.println(kana1.getNimi() + " munii useammin kuin" + kana2.getnimi()); if(kana1.compareto(kana2) == 0) System.out.println(kana1.getNimi() + " ja " + kana2.getnimi() + " munivat yhtä usein"); Kanala kanala = new Kanala(); kanala.lisaakana(kana1); kanala.lisaakana(kana2); kanala.lisaakana(kana3); // TODO d) Lisää Kanala-luokalle puuttuvat metodit. System.out.println("Kanalan tuotantokyky on: " + kanala.munienmaaraviikossa() + " munaa/viikko"); // Tulostus: Kanalan tuotantokyky on 9 munaa/viikossa // Paras munija on se, joka munii eniten viikossa. Kana parasmunija = kanala.parasmunija(); if(parasmunija!= null) { System.out.println("Kanalan paras munija on: " + parasmunija.getnimi()); //Tulostus: Kanalan paras munija on: Kotkot TEHTÄVÄ 2. Testaus ja aliohjelmat a) Tee ComTest tai JUnit-testit b-kohdan ailohjelmalle. Muista erilaiset erikoistapaukset! Testien tarkoitus on myös dokumentoida miten erilaisissa erikoistapauksissa toimitaan. (2p) Ohjelmointi 2, välikoe 21.3.2014 2/7

b) Tee funktioaliohjelma pisimmanjalyhimmanerotus. PisimmanJaLyhimmanErotus palauttaa kaksiulotteisen String taulukon lyhyimmän ja pisimmän Stringin välisen ylijäämän. Eli jos taulukon lyhyin String olisi he ja pisin peruna, palauttaisi aliohjelma runa ja jos lyhyin String olisi nero ja pisin kissa, palauttaisi ohjelma a. (4p) Seuraavan pääohjelman tulisi toimia: public static void main(string[] args){ String[][] teksteja = {{"a", "matikkaa", {"kissa","koira" ; String erotus = pisimmanjalyhimmanerotus(teksteja); System.out.println(erotus); //Tulostaa: atikkaa String[][] lisaateksteja = {{, {"","koira", {"lentokone", "laiva" ; erotus = pisimmanjalyhimmanerotus(lisaateksteja); System.out.println(erotus); //Tulostaa: lentokone TEHTÄVÄ 3. Teoria (Mika) Vastaa seuraaviin kysymyksiin lyhyesti. a. Mitä eroa on while- ja do-while-silmukalla? b. Olkoon alustettu seuraava kaksiulotteinen taulukko: int ruudukko[][] = {{6, 9, 4, {-2, 5, 8, {0, -7, 3; Mitä seuraavalla rivillä tapahtuu? System.out.println(ruudukko[1][2] + ruudukko[2][3]); c. Mitä merkitsee, jos luokan metodin esittelyrivi alkaa sanalla private? d. Mitä tarkoittaa käsite "saantimetodi"? e. Olemassa olevia luokkia voi käyttää hyväkseen koostamisella ja/tai perinnällä. Miten nämä kaksi tapaa eroavat toisistaan? f. Olkoon int a = 1; int b = 3; int c = -5; Mitkä ovat tällöin seuraavien lausekkeiden arvot? b + 2 * a - c c + a / b Entä mitkä ovat seuraavien lausekkeiden totuusarvot? b < 3 * a (b < c) (-a < -c) Ohjelmointi 2, välikoe 21.3.2014 3/7

TEHTÄVÄ 4. Pöytätesti Tutki ohjelman toimintaa pöytätestillä käyttäen ohessa olevaa pöytätestilomaketta. Merkitse muuttujien kohdalle muuttujan arvo, jos se on muuttunut. Tulostuksen voi merkitä usealle riville mikäli tila ei riitä, mutta se tulee aloittaa oikealta suoritusriviltä.merkitse tulostukseen välilyönnit alleviivalla tms. jotta tarkastaja voi laskea välilyönnit helposti. Käytä merkinnöissä seuraavia merkkejä: & = viittaus (esim. &N1 viittaa N1-olioon keossa, N1 = 1. new:llä luotu olio) Merkitse * jokaisen muuttujan päälle joka on viitemuuttuja. ROSKA = olio muuttuu roskaksi. Iso X tai harmaa "suttaus" muuttujan kohdalle jos sitä ei ole olemassa. tostring-metodin palauttaman merkkijonon voit käsitellä ilman että "luot" sille tilaa keosta (koska sitä käytetään vain yhteen tulostukseen). /* 01 package vk; /* 02 /* 03 Karkkipussiluokka /* 04 @SuppressWarnings("all") /* 05 public class Karkkipussi { /* 06 /* 07 Tikkariluokka /* 08 public static class Tikkari { /* 09 private StringBuilder tikkari = new StringBuilder(""); /* 10 private String maku; /* 11 private boolean syoty; /* 12 /* 13 /* 14 /* 15 * Alustaa tikkarin /* 16 * @param nimi Nimi, joka tikkarille annetaan /* 17 * @param maku Maku, joka tikkarille annetaan /* 18 /* 19 public Tikkari(StringBuilder nimi, String maku) { /* 20 if (nimi!= null) this.tikkari = nimi; /* 21 this.maku = maku; /* 22 syoty = false; /* 23 /* 24 /* 25 /* 26 /* 27 * Merkitään tikkari syödyksi /* 28 * @param maara paljonko syöty /* 29 /* 30 public void herkuttele(int maara) { /* 31 if (syoty) /* 32 return; /* 33 syoty =!syoty; /* 34 maara--; tikkari.append(" " + maara); /* 35 /* 36 /* 37 /* 38 /* 39 * Palauttaa tikkarin tiedot merkkijonona /* 40 /* 41 @Override Ohjelmointi 2, välikoe 21.3.2014 4/7

/* 42 public String tostring() { /* 43 if (syoty) return "Tikkari: " + tikkari + maku /* 44 + ", mutta se onkin jo mennyt parempiin suihin ; /* 45 return "Tikkari: " + tikkari + maku /* 46 + " löytyy vielä pussista ja on valmiin syötäväksi ; /* 47 /* 48 /* 49 /* 50 /* 51 * @param args Ei käytössä /* 52 /* 53 public static void main(string[] args) { /* 54 int maara = 0; /* 55 Tikkari tikkari = new Tikkari(null, ""); /* 56 maara++; /* 57 StringBuilder nekku = new StringBuilder("Chupa Chups"); /* 58 tikkari.herkuttele(maara); /* 59 System.out.println(tikkari); /* 60 String maku = "Omena"; /* 61 Tikkari tikkari2 = new Tikkari(nekku, maku); /* 62 maara++; /* 63 System.out.println(tikkari2.toString()); /* 64 tikkari2.herkuttele(maara); /* 65 System.out.println(tikkari2.toString()); /* 66 System.out.println(maara); /* 67 /* 68 /* 69 TEHTÄVÄ 5. Perintä (Matias) Tee luokka MetsaAlue, joka perii alla olevan OmistusAlue-luokan, ja sisältää tarvittavat privaatit attribuutit sekä metodit, jotta alla oleva pääohjelma toimii ja tulostaa oikein. Yliluokan muodostajaan pääsee käsiksi super-viitteellä. Luokka tulee omaan MetsaAlue.java-tiedostoon samaan pakettiin kuin OmistusAlue. Kommentteja eikä testejä ei tarvitse kirjoittaa, mutta annotaatiot (@Override) tulee merkitä. package valikoe; * OmistusAlue-luokka, joka pitää sisällään tiedon alueen pinta-alasta ja omistajasta * @author mp * @version 15.03.2014 public class OmistusAlue { private final static int ALOITUS_ALA = 10; protected double pintaala; private String omistaja; * Muodostaja OmistusAlue-luokalle * @param omistaja alueen omistaja merkkijonona public OmistusAlue(String omistaja) { pintaala = ALOITUS_ALA; this.omistaja = omistaja; Ohjelmointi 2, välikoe 21.3.2014 5/7

* Palauttaa omistusalueen omistajan * @return omistusalueen omistajan public String getomistaja(){ return omistaja; * Asettaa parametrina annetun omistajan omistajaksi * @param omistaja omistaja, joka halutaan asettaa public void setomistaja(string omistaja){ this.omistaja = omistaja; * Palauttaa merkkijonona omistusalueen tiedot @Override public String tostring(){ return "Alaa on yhteensä " + pintaala + "neliömetriä, omistaja " + omistaja; * Testipääohjelma * @param args ei käytössä public static void main(string[] args){ MetsaAlue alue = new MetsaAlue("Kalle Kala", "koivu", "erinomainen"); alue.valtaaalaa(); System.out.println(alue); // Tulostaa: Metsäalueella lääniä yhteensä 20.0 neliömetriä // täynnä puulajia koivu ja kunto on erinomainen. Omistaja on Kalle Kala. alue.valtaaalaa(); alue.vaihdaomistaja("seppo Särki"); System.out.println(alue); // Tulostaa: Metsäalueella lääniä yhteensä 40.0 neliömetriä // täynnä puulajia koivu ja kunto on erinomainen. Omistaja on Seppo Särki. TEHTÄVÄ 6. Tiedoston luku ja kirjoitus (Teemu) Tutkit tietokonettasi ja löydät sieltä liisanlinkit.txt-tiedoston. Tiedoston ensimmäisellä rivillä on otsikko, sitten on tyhjä rivi ja sen jälkeen n kappaletta linkkejä. Tiedoston sisältö on seuraava: Liisan linkkilista http://www.google.fi = hirmusen hyvä hakukone http://www.iltalehti.fi = Täältä luetaan uutiset http://www.jyu.fi = Yliopiston sivut https://korppi.jyu.fi/kotka/course/student/opiskurssit.jsp?status=1 = Kurssit korpissa Ohjelmointi 2, välikoe 21.3.2014 6/7

Tee ohjelma, joka 1. lukee em. tiedoston 2. kirjoittaa samalla toiseen.html-päätteiseen tiedostoon linkit siten, että ne toimivat selaimessa klikattaessa. Älä lue liisanlinkit.txttiedostoa listaan tai muuhun tietorakenteeseen vaan käsittele jokainen rivi välittömästi rivin lukemisen jälkeen. Ohjeita html-tiedoston tekemiseen: Html-tiedoston saat tehtyä tulostamalla.html-päätteisen tiedoston alkuun rivit <!DOCTYPE html> <html><head> <title>linkkilista</title> <meta charset="utf-8"> </head><body> ja tiedoston viimeiseksi rivin </body></html> Body-tagien (<body>...</body>) väliin tehdään otsikkorivi sekä jokaisesta linkistä oma rivi seuraavasti: <h1>tähän sivun otsikko</h1> ja <a href="tähän tulee sivun osoite">tähän tulee sivun nimi</a><br> Liisan linkkilistan ensimmäinen linkki olisi tällöin <a href="http://www.google.fi">hirmusen hyvä hakukone</a><br> Eräs ohjelma liisanlinkit.txttiedoston käsittelemiseen tuottaa seuraavanlaisen html-tiedoston: <!DOCTYPE html> <html><head> <title>linkkilista</title> <meta charset="utf-8"> </head><body> <h1>liisan linkkilista</h1> <a href="http://www.google.fi">hirmusen hyvä hakukone</a><br> <a href="http://www.iltalehti.fi">täältä luetaan uutiset</a><br> <a href="http://www.jyu.fi">yliopiston sivut</a><br> <a href="https://korppi.jyu.fi/kotka/course/student/opiskurssit.jsp?status=1">kurssit korpissa</a><br> </body></html> Ohjelmointi 2, välikoe 21.3.2014 7/7