Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Ohjelmointi 2 / 2011 Välikoe / 25.3

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmointi 2, välikoe

Mikä yhteyssuhde on?

Metodien tekeminen Javalla

Olio-ohjelmointi Javalla

Ohjelmoinnin jatkokurssi, kurssikoe

Rajapinta (interface)

Ohjelmistotekniikan menetelmät, koe

OHJ2k12 välikoe

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

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

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

Java-API, rajapinnat, poikkeukset, UML,...

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

9. Periytyminen Javassa 9.1

Luokan sisällä on lista

1 Tehtävän kuvaus ja analysointi

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Interaktiivinen tarinankerronta

Luokat ja oliot. Ville Sundberg

Java-kielen perusteet

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Javan perusteita. Janne Käki

Ohjelmoinnin perusteet, syksy 2006

ITKP102 Ohjelmointi 1 (6 op)

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

9. Periytyminen Javassa 9.1

Ohjelmointi 1 C#, kevät 2013,

Java kahdessa tunnissa. Jyry Suvilehto

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

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

17. Javan omat luokat 17.1

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

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

20. Javan omat luokat 20.1

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

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

1. Omat operaatiot 1.1

ITKP102 Ohjelmointi 1, syksy 2007

Java-kielen perusteita

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

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

ITKP102 Ohjelmointi 1, syksy 2007

Listarakenne (ArrayList-luokka)

Ohjelmointityö 3. Mikko Laamanen

Periytyminen (inheritance)

1. Mitä tehdään ensiksi?

ITKP102 Ohjelmointi 1, syksy 2007

ITKP102 Ohjelmointi 1, syksy 2007

5. HelloWorld-ohjelma 5.1

ITKP102 Ohjelmointi 1 (6 op)

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

Olio-ohjelmointi 2. välikoe HYV5SN

11. Javan valintarakenteet 11.1

Java-kielen perusteet

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

Tietorakenteet, laskuharjoitus 7,

Tietorakenteet (syksy 2013)

11. Javan valintarakenteet 11.1

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

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

16. Javan omat luokat 16.1

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

YHTEYSSUHDE (assosiation)

Ohjelmoinnin perusteet, kurssikoe

public static void main (String [] args)

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

7. Oliot ja viitteet 7.1

Interaktiivinen tarinankerronta

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

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

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Javan GUI Scratchaajalle

Metodien tekeminen Javalla

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

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

KOHDELUOKAN MÄÄRITTELY

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

15. Ohjelmoinnin tekniikkaa 15.1

ITKP102 Ohjelmointi 1 (6 op)

7. Näytölle tulostaminen 7.1

14. Poikkeukset 14.1

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. 14. Poikkeukset. Johdanto. Johdanto

ITKP102 Ohjelmointi 1 Tentti

Testivetoinen ohjelmistokehitys

7/20: Paketti kasassa ensimmäistä kertaa

14. Poikkeukset 14.1

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

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

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

Java-kielen perusteita

Transkriptio:

Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään liittyvää tehtävää. Aikaa 4 tuntia. Jokainen vastaus omalle paperilleen, bonustehtävät voi kirjoittaa samalle. Tehtävistä 1-6 SAA vastata vain 4:ään. Jos vastaa useampaan, niin 4 HUONOINTA arvostellaan. 1. Keskimaassa kuhisee. Selvitä pöytätestillä kuka on Keski-Maan ykkösvelho. Täytä liitteenä annettava pohja, jota on täytetty hieman alkuun malliksi. (6p) - Merkitse harmaaksi ne alueet, jolloin muuttujaa ei ole olemassa. - Ruutuun merkintä vain jos muuttujan arvo muuttuu tai olio muuttuu roskaksi. - Merkitse iso R-kirjain kun olio muuttuu roskaksi. - Merkitse * jokaisen muuttujan päälle joka on viitemuuttuja. - N1 tarkoittaa ensimmäistä kekoon luotua oliota. N2 toista jne. - Käytä &-merkkiä olioviitteisiin. (esim. &N1 viittaa N1:een) - Aikasi säästämiseksi sinun ei tarvitse kirjoittaa ohjelman koko riviä, vaan pelkkä rivinumero riittää - Ole tarkkana sillä koodissa on samanimisiä muuttujia eri rooleissa - Huomaa merkitä myös aliohjelmien/metodien lokaalien muuttujien muutokset. /*01public class KeskiMaa2 { /*02 /*03 public static class Velho { /*04 /*05 private int mana; /*06 private int kunto; /*07 /*08 public Velho(int mana, int kunto) { /*09 this.mana = mana; /*10 this.kunto = kunto; /*11 /*12 /*13 public void teeloitsu(velho velho, int voimakkuus) { /*14 if(mana >= voimakkuus) { /*15 this.mana -= voimakkuus; /*16 velho.osuma(voimakkuus); /*17 /*18 /*19 /*20 public void osuma(int voimakkuus) { /*21 this.kunto -= voimakkuus; /*22 System.out.println("Osuma voimalla " + voimakkuus); /*23 /*24 /*25 public boolean onkuollut() { /*26 return (kunto <= 0); /*27 /*28 /*29 /*30 /*31 public static void main(string[] args) { demovk1.odt/12.04.2010 1/8

Ohjelmointi 2 / 2010 Välikoe / 26.3 /*32 Velho gandalf = new Velho(5,10); /*33 Velho saruman = new Velho(5,5); /*34 /*35 saruman.teeloitsu(gandalf, 4); /*36 /*37 Velho merlin = saruman; /*38 /*39 merlin.teeloitsu(gandalf, 5); /*40 /*41 if(gandalf.onkuollut()) { /*42 System.out.println("Gandalf kuoli"); /*43 gandalf = null; /*44 else { /*45 gandalf.teeloitsu(saruman,5); /*46 gandalf = merlin; /*47 /*48 /*49 if(saruman.onkuollut()) { /*50 System.out.println("Saruman kuoli"); /*51 saruman = null; /*52 /*53 /*54 2. a) On annettu kaksi kokonaislukujonoa. Kirjoita sanallisesti tarkka algoritmi, joka laskee ensimmäisestä jonosta kaikkien jälkimmäisen jonon esiintymien lukumäärän. Alla ComTest -esimerkki "käytöksestä". Jos jotakin esimerkkitapauksia puuttuu, "määrittele" niiden toiminta vastaavasti. 3p. * @example * <pre name="test"> * int [] t1 = {1, 2, 3, 1, 2, 3; * int [] t2 = {1, 2; * int [] t3 = {3, 1; * laskeesiintymat(t1,t2) === 2; * laskeesiintymat(t1,t3) === 1; * </pre> b) Toteuta a)-kohdan algoritmi Javalla. (3p) 3. a) Muodosta luokka Opiskelija ja täydennä luokkaa Ainejarjesto siten, että alla oleva pääohjelma toimii. (4p) b) Piirrä kuva ohjelman tietorakenteesta pyydetyissä kohdissa (2p) public interface Jasen { public String annanimesi(); public class Ainejarjesto implements Jasen { private Jasen[] jasenet; *Testipääohjelma *@param args ei käytössä demovk1.odt/12.04.2010 2/8

Ohjelmointi 2 / 2010 Välikoe / 26.3 public static void main(string[] args) { Ainejarjesto Linksutin = new Ainejarjesto("Linksutin"); Ainejarjesto miinus = new Ainejarjesto("Miinus"); //Piirrä kuva tietorakenteesta System.out.println(Linksutin); Linksutin.lisaaJasen(new Opiskelija("Mikko")); Linksutin.lisaaJasen(new Opiskelija("Ansku")); Linksutin.lisaaJasen(new Opiskelija("Sauli")); Linksutin.lisaaJasen(new Opiskelija("Eetu")); Linksutin.lisaaJasen(miinus); //Piirrä kuva tietorakenteesta System.out.println(Linksutin); yllä oleva pääohjelma tulostaa: Linksutin jäseniä 0 Linksutin jäseniä 5 Mikko Ansku Sauli Eetu Miinus 4. a) Mitä seuraava aliohjelma yrittää tehdä? (2p) public static int[ ][ ] teejuttu(int[ ][ ] a, int b) { int[ ][ ] c; for (int i; i<a.length; i++) for (int j; j<a.length; j++) c[j][i] = a[j][i] * b; return c; b) Mitä siinä on mielestäsi vialla, jos mitään? (2p) c) Toteuta itse vastaava metodi, mutta paremmin. Perustele (lyhyesti) miksi oma tapasi on parempi. (2p) 5. Toteuta metodit, joiden avulla voidaan lukea tekstitiedostosta muotoa 1 1 1 2 1 2 6 6 6 oleva kokonaislukumatriisi, kertoa se kokonaisluvulla ja kirjoittaa uusi matriisi tiedostoon. Testiohjelman int[ ][ ] matriisi = luematriisi("matriisi.txt"); demovk1.odt/12.04.2010 3/8

Ohjelmointi 2 / 2010 Välikoe / 26.3 matriisi = kerromatriisikokonaisluvulla(matriisi, 2); kirjoitamatriisi(matriisi, "matriisi2.txt"); tulisi tuottaa matriisi2.txt -niminen tiedosto, jonka sisältö olisi seuraavanlainen: 2 2 2 4 2 4 12 12 12 Määrittele itse mahdolliset poikkeustapaukset ja niiden käytös. (6p) 6. Liitteessä on kuva ja neljän eri luokan osittainen Java-koodi. Täydennä kommentoidut kohdat (6 kpl) siten, että saat aikaan kuvassa esitetyt oliot ja viitteet olioiden välille. "Merkitse vastaukseesi selvästi täydentämiesi kohtien numerot. (6p) B1. Kerro onko alla olevista lauseista joku oikein/väärin ja miksi (Jasen-luokan sisältö ei juurikaan vaikuta kysymyksen asetteluun, oletetaan sen kuitenkin olevan luokka, ei rajapinta ja sisällöltään vähän kuten kurssin malliohjelmassa) (2p): Jasen jasenet[] = (Jasen)(new Object[10]); Jasen jasenet[] = (Jasen [])(new Object[10]); Jasen jasen = (Jasen)(new Object()); B2. Mitä tarkoittaa Javassa extends ja mitä implements. Molemmilla voidaan toteuttaa mm. polymorfismi, mutta mikä niillä on erona koodin kirjoittamisen kannalta? (1p) demovk1.odt/12.04.2010 4/8

Ohjelmointi 2 / 2010 Liite 1 Liite 1 demovk1.odt/12.04.2010 5/8

Ohjelmointi 2 / 2010 Liite 1 Kauppa.java * Testaa Kuitti- ja Tuote-luokkia. * @author Ville Lahtinen public class Kauppa { * Testaa Kuitti- ja Tuote-luokkia. * @param args ei käytössä public static void main(string[] args) { Tuote shampoo; Tuote saippua; Tuote pulveri; Kuitti kuitti1; Kuitti kuitti2; // KOHTA 1: Täydennä tarvittava ohjelmakoodi. kuitti1.lisaa(shampoo, 1); kuitti1.lisaa(shampoo, 1); kuitti1.lisaa(saippua, 2); kuitti1.lisaa(pulveri, 1); Kuitti.java import java.util.calendar; * Kuitti, joka säilyttää tuoterivejä * @author Ville Lahtinen public class Kuitti { private static int KASVATUS = 5; private Tuoterivi[] tuoterivit = new Tuoterivi[KASVATUS]; private int lkm = 0; private Calendar pvmjaaika = Calendar.getInstance(); * Etsii tietorakenteesta tuoterivin, jolla on tuote. * @param tuote tuote, jolla etsitään * @return tuoterivi, jolla on tuote. Jos riviä ei löydy, * palautetaan null. private Tuoterivi etsituoterivi(tuote tuote) { // KOHTA 2: Täydennä tarvittava ohjelmakoodi. * Kasvattaa tietorakenteen kokoa. private void kasvata() { Tuoterivi[] uusi = new Tuoterivi[tuoterivit.length + demovk1.odt/12.04.2010 6/8

Ohjelmointi 2 / 2010 Liite 1 KASVATUS]; for (int i = 0; i < lkm; i++) { uusi[i] = tuoterivit[i]; tuoterivit = uusi; // KOHTA 3: Kirjoita JavaDoc-kommentti. public void lisaa(tuote tuote, int maara) { // KOHTA 4: Täydennä tarvittava ohjelmakoodi. * Lisää tuoterivin tietorakenteeseen. * @param tuoterivi lisättävä tuoterivi private void lisaa(tuoterivi tuoterivi) { if (lkm >= tuoterivit.length) { kasvata(); tuoterivit[lkm] = tuoterivi; lkm++; Tuoterivi.java * Säilyttää tuotetietoa ja kappalemäärää. * @author Ville Lahtinen public class Tuoterivi { private Tuote tuote; private int maara; * Alustaa uuden tuoterivin. * @param tuote tuote, jonka tiedot rivi säilyttää * @param maara tuotteen määrä public Tuoterivi(Tuote tuote, int maara) { this.tuote = tuote; this.maara = maara; * Kertoo, liittyykö tuoterivi tuotteeseen. * @param tuote tuote, johon verrataan * @return true, jos tuoterivi liittyy tuotteeseen, muuten false public boolean omistatko(tuote tuote) { // KOHTA 5: Täydennä tarvittava ohjelmakoodi. * Lisää tuotteen kappalemäärää. * @param maara lisättävä määrä demovk1.odt/12.04.2010 7/8

Ohjelmointi 2 / 2010 Liite 1 public void lisaamaaraa(int maara) { this.maara += maara; Tuote.java * Säilyttää tuotteen nimeä ja hintaa. * @author Ville Lahtinen public class Tuote { private String nimi; private double hinta; * Alustaa uuden tuotteen. * @param nimi tuotteen nimi * @param hinta tuotteen kappalehinta public Tuote(String nimi, double hinta) { this.nimi = nimi; this.hinta = hinta; // KOHTA 6: Lisää tarvittava metodi (1 kpl). // Muista myös JavaDoc-kommentti! demovk1.odt/12.04.2010 8/8