Ohjelmointi 2 / 2011 Välikoe / 25.3

Samankaltaiset tiedostot
Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Ohjelmointi 2, välikoe

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Metodien tekeminen Javalla

Ohjelmoinnin jatkokurssi, kurssikoe

OHJ2k12 välikoe

Olio-ohjelmointi Javalla

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

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

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

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

Java-kielen perusteet

Mikä yhteyssuhde on?

Taulukot. Jukka Harju, Jukka Juslin

1 Tehtävän kuvaus ja analysointi

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet, kurssikoe

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

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

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

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

Listarakenne (ArrayList-luokka)

ITKP102 Ohjelmointi 1 (6 op)

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

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

Ohjelmistotekniikan menetelmät, koe

Ohjelmoinnin perusteet Y Python

Luokan sisällä on lista

1. Mitä tehdään ensiksi?

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

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op)

1. Omat operaatiot 1.1

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

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

public static void main (String [] args)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

9. Periytyminen Javassa 9.1

ITKP102 Ohjelmointi 1 (6 op)

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

Ohjelmoinnin perusteet, syksy 2006

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Rajapinta (interface)

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

Testivetoinen ohjelmistokehitys

20. Javan omat luokat 20.1

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

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

9. Periytyminen Javassa 9.1

Luokat ja oliot. Ville Sundberg

ITKP102 Ohjelmointi 1 (6 op)

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 )

17. Javan omat luokat 17.1

KOHDELUOKAN MÄÄRITTELY

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

TIETORAKENTEET JA ALGORITMIT

Java-kielen perusteet

Javan perusteita. Janne Käki

7. Näytölle tulostaminen 7.1

Taulukoiden käsittely Javalla

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Ohjelmoinnin perusteet Y Python

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmoinnin perusteet Y Python

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

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

Tietokannat II -kurssin harjoitustyö

Periytyminen (inheritance)

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

13. Loogiset operaatiot 13.1

Poikkeustenkäsittely

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

Metodien tekeminen Javalla

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

YHTEYSSUHDE (assosiation)

Lista luokan sisällä

Ohjelmointityö 3. Mikko Laamanen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Osoitin ja viittaus C++:ssa

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Harjoitustyö: virtuaalikone

Luokan muodostimet (Constructors)

JUnit ja EasyMock (TilaustenKäsittely)

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

5. HelloWorld-ohjelma 5.1

14. Poikkeukset 14.1

Javan GUI Scratchaajalle

7. Oliot ja viitteet 7.1

11. Javan toistorakenteet 11.1

Java-kielen perusteet

11. Javan valintarakenteet 11.1

Transkriptio:

Välikoe / 25.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-5 SAA vastata vain 4:ään. Jos vastaa useampaan, niin 4 HUONOINTA arvostellaan. 1. Tutki alla olevaa koodia ja tee valmiiksi annettua pohjaa käyttäen pöytätesti ohjelmalle. Merkinnät tulee tehdä vain jos muuttujan arvo muuttuu. Väritä harmaaksi myös ne kohdat, joissa muuttujaa ei ole olemassa. Pöytätestin pohjalomakkeella on annettu muutama merkintä jo valmiiksi. (6p) - Aikasi säästämiseksi sinun ei tarvitse kirjoittaa ohjelman koko riviä, vaan pelkkä rivinumero riittää - Huomaa merkitä myös aliohjelmien/metodien lokaalien muuttujien muutokset. Käytä merkinnöissä seuraavia merkkejä: & = viittaus (esim. &N1 viittaa N1-olioon keossa, N1 = 1. new) Merkitse * jokaisen muuttujan päälle joka on viitemuuttuja. ROSKA = olio muuttuu roskaksi /*1 public class YdinVoimala { /*2 private Reaktori paareaktori; /*3 private Reaktori varareaktori; /*4 private String tila = "NORMAALI"; /*5 /*6 public YdinVoimala(Reaktori varareaktori) { /*7 this.paareaktori = new Reaktori(); /*8 this.varareaktori = varareaktori; /*9 /*10 /*11 public void maajarisee(int sateilynmaara) { /*12 sateilynmaara += 3; /*13 /*14 if (paareaktori!= null && varareaktori!= null) { /*15 this.paareaktori.riko(); /*16 this.varareaktori.riko(); /*17 this.paareaktori = null; /*18 this.varareaktori = null; /*19 /*20 tila = "KATASTROFI"; /*21 /*22 /*23 public void arvioi() { /*23 System.out.println(tila); /*25 /*26 /*27 public static void main(string args[]) { /*28 Reaktori varareaktori = new Reaktori(); /*29 YdinVoimala fukushima = new YdinVoimala(varaReaktori); /*30 int sateilynmaara = 0; /*31 fukushima.maajarisee(sateilynmaara); /*32 fukushima.arvioi(); demovk1.odt/26.03.2011 1/7

/*33 fukushima.maajarisee(sateilynmaara=3); /*34 System.out.println(sateilynMaara); /*35 /*36 /*37* /*38 class Reaktori { /*39 boolean rikki = false; /*40 /*41 public void riko() { /*42 this.rikki = true; /*43 /*44 2. Tehtävä 3. Testaaminen. Alla olevassa listauksessa on kolme aliohjelmaa: vaihda, käännä ja lajittele. Testien luonnissa saat käyttää ComTestia tai JUnitia. ComTestin === vastaa JUnitin assertequalsia niin, että 1 === 2 ja assertequals(1,2) on samanarvoisia. Pyri b- ja c-kohdin testeissä mahdollisimman täydelliseen testaamiseen. Testaa olennaisesti taulukon jokaista alkiota, eli pelkästään kahden alkion vertaaminen ei riitä. 2a) Testivetoinen kehitys. Toteuta vaihda-aliohjelman runko sen testien perusteella. (2p) 2b) Luo kaanna-aliohjelmalle testi. (2p) 2c) Luo lajittele-aliohjelmalle testi. (2p) * Vaihtaa taulukon alkioiden a ja b arvojen paikkaa. * * @param taulukko Muutettava taulukko. * @param a Vaihdettavista alkioista ensimmäisen indeksi. * @param b Vaihdettavista alkioista toisen indeksi. * <pre name="test"> * int[] taulukko = {1, 2, 3, 4; * vaihda(taulukko, 1, 3); * Arrays.toString(taulukko) === "[1, 4, 3, 2]"; * </pre> public static void vaihda(int[] taulukko, int a, int b) { // TODO: Toteuta. * Kääntää taulukon ympäri vaihda-aliohjelmaa käyttäen. * @param taulukko Käännettävä taulukko * @return Käännetty taulukko public static int[] kaanna(int[] taulukko) { // Pidä alkuperäinen taulukko ennallaan int[] kaannetty = Arrays.copyOf(taulukko, taulukko.length); int alku = 0, loppu = kaannetty.length - 1; while (alku < loppu) { vaihda(kaannetty, alku++, loppu--); return kaannetty; demovk1.odt/26.03.2011 2/7

* Lajittelee taulukon O(n²) ajassa. Lisäyslajittelu. * * @param alkup Lähtötaulukko * @return lajiteltu Lajiteltu taulukko public static int[] lajittele(int[] alkup) { int[] lajiteltava = Arrays.copyOf(alkup, alkup.length); int j, lukumaara = lajiteltava.length; for (int i = 1; i < lukumaara; i++) { j = i; // Lajittele alkiot j:stä vasemalle. while (j > 0 && lajiteltava[j] < lajiteltava[j - 1]) { vaihda(lajiteltava, j, j - 1); j--; return lajiteltava; 3. M3U on tiedostoformaatti soittolistojen tallentamiseen. M3U-tiedostot ovat tekstimuotoisia tiedostoja sisältäen soittolistan toistettavien kohteiden sijainnit. Tehtävä käsittelee Extended M3U -tiedostoja, jotka voivat sisältää myös kommentteja. Näissä tiedostoissa kommenttirivit alkavat aina #-merkillä. Tiedostomuoto: #EXTM3U #EXTINF:150, ArtistiX - KappaleX C:\musiikki\raita1.mp3 C:\musiikki\raita2.mp3 #EXTINF:-1, Nettiradio http://www.example.org/foo.ogg #EXTINF:-1, Ohjelmoinnin luento http://kurssit.it.jyu.fi/tiep111/2011/luento/ohj2_luento02a.mp4 Yllä on esimerkki extended M3U -tiedostosta. Ensimmäinen rivi on tiedoston otsake ja aina samanlainen kuin yllä (#EXTM3U). Tämän jälkeen luetellaan soittolistan tiedostot allekkain. Jokainen tiedosto voidaan varustaa ylimääräisellä informaatiolla merkitsemällä se #EXTINF-merkinnän jälkeen. Merkinnän jälkeen tulee kappaleen pituus sekunteina, jonka jälkeen kappaleen tiedot (pilkulla erotettuna). Virtautetuissa medioissa käytetään yleensä negatiivista pituutta (-1), jolloin soitto-ohjelma jättää pituuden huomiotta. Yllä olevaa esimerkkitiedostoa apunasi käyttäen, tee ohjelma, joka demovk1.odt/26.03.2011 3/7

3a) lukee m3u-tiedoston ja tarkistaa tiedoston oikeellisuuden, ts. että tiedostosta löytyy vähintään otsake. Jos tiedosto sisältää osoitteita medioihin, täytyy niihin mahdollisesti liittyvä EXTINF-määrittely löytyä osoiterivin yläpuolelta. EXTINF-määrittelyjä sallitaan vain yksi per osoite. Mahdollisia virhetilanteita ovat ainakin otsakkeen puuttuminen ja osoitteen puuttuminen. (3p) Esim. tiedosto vika.m3u, jonka sisältö on #EXTINF:0,Radio aiheuttaisi ohjelmassa vaikkapa seuravanlaisen tulosteen: Tiedosto huonolista.m3u on viallinen: - Otsake puuttuu (#EXTM3U) - Kohteen 'Radio' osoite puuttuu 3b) tulostaa tiedostossa olevien soittolistan kohteiden osoitteet. (3p) Esimerkkitiedostoa käyttämällä pitäisi tulostuksen olla seuraavan kaltainen: C:\musiikki\raita1.mp3 C:\musiikki\raita2.mp3 http://www.example.org/foo.ogg http://kurssit.it.jyu.fi/tiep111/2011/luento/ohj2_luento02a.mp4 Ota huomioon tilanteet, joissa tiedosto ei aukeakaan. Tiedoston nimi on soittolista.m3u. 4. Tässä on osa yrityksen mahdollista postipakettien hallintajärjestelmää. Täydennä kaikki tehtävän kohdat (a-f) ohjeiden mukaan. Huomioithan, että luokka ei ole vielä valmis, joten id-arvoa ja osoitetta ei vielä käytetä missään, vaikka niitä valmiissa versiossa käytetään. Tässä tehtävässä tähän ei tarvitse reagoida. (6p) * Postipaketti * * Tallentaa sisälleen tavaroita taulukkoon. * @author Taistelujarmo * @version 0.1 public class Postipaketti { private Tavara[] sisalto; private int lkm; private int id; private String osoite; // Tehtävä a): // Täydennä konstruktori ja sen kommentit, huomioi mahdolliset // virhetilaneet. Konstruktorissa pitää luoda sisalto-muuttujan // taulukko, johonka mahtuu koko-parametrin verran tavaroita. * * @param koko Paljonko mahtuu tavaraa sisään maksimissaan public Postipaketti(int maxkoko) { demovk1.odt/26.03.2011 4/7

// Tehtävä b): // Tutki miten aliohjelma toimii, ja täydennä kommentit * public void lisaa(tavara tavara) { if ( lkm >= sisalto.length ) return; sisalto[lkm] = tavara; lkm++; // Tehtävä c): // Täydennä ohjelma kommentin määrittelemällä tavalla * Palauttaa indeksiä vastaavan tavaran. * Jos menee ohi taulukosta, tai kohdalla on null, palautuu null * @param i haettava indeksi * @return indeksin kohdalla oleva tavara tai null public Tavara gettavara(int i) { // Tehtävä d): // Täydennä silmukan sisältö, jotta ohjelma toimii kommenttien // määrittelemällä tavalla * Hakee vaarallisimman ehdokkaan * Jos samaa vaarallisuutta on, haetaan ensimmäinen vastaava * @return Vaarallisin ehdokas public Tavara haevaarallisin() { TESTI SIITÄ, ETTÄ JOS MITÄÄN ALKIOTA EI OLE Tavara ehdokas = sisalto[0]; for () { return ehdokas; * Tavara-luokka * Tietää tavaran nimen ja vaarallisuuden * @author Taistelujarmo * @version 0.01 public class Tavara { private String nimi; private int vaarallisuus; * Alustaa tavaran demovk1.odt/26.03.2011 5/7

public Tavara() { nimi = "Default"; * Palauttaa tavaran nimen * @return Tavaran nimi public String getnimi() { return nimi; // Tehtävä e): // Tee metodi public void setnimi(string nimi) {.. ja kommentit // Huomioi, että Tavaran nimi ei saa olla null! public void setnimi(string nimi) { // Tehtävä f): // Tee metodi public void setvaarallisuus(int vaarallisuus) {.. // ja tee kommentit. Vaarallisuus on oltava välillä 0-5 public void setvaarallisuus(int vaarallisuus) { * Palauttaa paketin vaarallisuuden * @return Vaarallisuusarvo public int getvaarallisuus() { return vaarallisuus; 5. Edellinen koodi oli osa yrityksen paketinhallintajärjestelmää. Piirrä kuva tietorakenteesta edellisen tehtävän koodien perusteella. Piirrä kuvaan myös postipakettien säilöminen itse tehtyyn dynaamiseen taulukkoon, joka sisältää alkio-taulukon ja siitä käytössä olevan lkm. Tyhjään järjestelmään lisätään alla olevat 4 lähetettyä pakettia. Kuva tilanteesta missä nämä 4 pakettia on lisätty. Muista olla tarkkana osoittimien suunnasta (nuolet merkittävä). Kuva on siis OLIO-kuva tietorakenteesta, ei UML-kuva. (6p) paketin id maxkoko osoite sisältö (vaarallisuus) 1 1 Taitoniekantie 9 100kg perunoita(0) 2 3 Perhonkatu 2 Moottorisaha(3), jätesäkkejä(0) 4 1 Vanhaistentie 1 Uudet sterkat(0) 5 2 Rajatie 32 Tappajajänis(5) demovk1.odt/26.03.2011 6/7

demovk1.odt/26.03.2011 7/7