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

Samankaltaiset tiedostot
Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2, välikoe

Mikä yhteyssuhde on?

Ohjelmointi 2 / 2011 Välikoe / 25.3

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

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

Listarakenne (ArrayList-luokka)

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Olio-ohjelmointi Javalla

14. Poikkeukset 14.1

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

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Metodien tekeminen Javalla

14. Poikkeukset 14.1

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

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

Ohjelmoinnin jatkokurssi, kurssikoe

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

OHJ2k12 välikoe

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

Luokan sisällä on lista

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

Rajapinta (interface)

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

TIETORAKENTEET JA ALGORITMIT

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

Luokat ja oliot. Ville Sundberg

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

Interaktiivinen tarinankerronta

1 Tehtävän kuvaus ja analysointi

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

16. Javan omat luokat 16.1

20. Javan omat luokat 20.1

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

7. Oliot ja viitteet 7.1

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

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

Pakkauksen kokoaminen

Pakkauksen kokoaminen

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

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

YHTEYSSUHDE (assosiation)

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

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

15. Ohjelmoinnin tekniikkaa 15.1

KOHDELUOKAN MÄÄRITTELY

12. Javan toistorakenteet 12.1

Poikkeustenkäsittely

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

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

ITKP102 Ohjelmointi 1 (6 op)

Java ja grafiikka. Ville Sundberg

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

Ohjelmoinnin perusteet, syksy 2006

17. Javan omat luokat 17.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Java-kielen perusteet

Periytyminen (inheritance)

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

public static void main (String [] args)

15. Ohjelmoinnin tekniikkaa 15.1

9. Periytyminen Javassa 9.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Ohjelmointityö 65 Tekstinmuotoilu ohjelma. Dokumentaatio. Aki Heikkinen (155394)

Javan perusteita. Janne Käki

Ohjelmointityö 3. Mikko Laamanen

11. Javan toistorakenteet 11.1

5/20: Algoritmirakenteita III

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Ohjelmoinnin perusteet, kurssikoe

1. Omat operaatiot 1.1

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

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

12. Javan toistorakenteet 12.1

Tietokannat II -kurssin harjoitustyö

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

9. Periytyminen Javassa 9.1

Lista luokan sisällä

Javan GUI Scratchaajalle

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

ITKP102 Ohjelmointi 1 (6 op)

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Rinnakkaisohjelmointi, Syksy 2006

Java-kielen perusteet

ITKP102 Ohjelmointi 1, syksy 2007

Tietorakenteet, laskuharjoitus 4,

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

ITKP102 Ohjelmointi 1, syksy 2007

Mitä poikkeuskäsittely tarkoittaa?

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

UML ja luokkien väliset suhteet

Testivetoinen ohjelmistokehitys

ITKP102 Ohjelmointi 1, syksy 2007

Tietorakenteet, laskuharjoitus 4,

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

11. Javan valintarakenteet 11.1

Transkriptio:

Välikoe / 20.3 Vastaa neljään (4) tehtävään. Jos vastaat 5:een, 4 huonointa arvostellaan. Kunkin tehtävän vastaus eri konseptille. 1. Pöytätesti Pöytätestaa seuraava ohjelma. Tutki ohjelman toimintaa pöytätestillä käyttäen ohessa olevaa pöytätestilomaketta. - 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 rivillä "* = viite" * jokaisen muuttujan päälle joka on viitemuuttuja. - N1 tarkoittaa ensimmäisenä new:llä kekoon luotua oliota. N2 toista jne. - Käytä &-merkkiä olioviitteisiin. (esim. &N3 viittaa N3:een) (6p) /* 01 */ public class Esivaalit { /* 02 */ /* 03 */ public static class Ehdokas { /* 04 */ private int aania; /* 05 */ public static boolean valittu; /* 06 */ /* 07 */ public Ehdokas(int aanestetty) { /* 08 */ aania = ++aanestetty; /* 09 */ valittu =!valittu; /* 10 */ /* 11 */ /* 12 */ public void julista() { /* 13 */ StringBuffer vaalilause = new StringBuffer("Ääniä on"); /* 14 */ vaalilause.append(" "); /* 15 */ System.out.println(vaalilause.toString() + aania--); /* 16 */ /* 17 */ /* 18 */ public void vaittele(ehdokas vv, boolean voitolla) { /* 19 */ if (voitolla) /* 20 */ julista(); /* 21 */ else /* 22 */ vv.julista(); /* 23 */ /* 24 */ /* 25 */ /* 26 */ public static void media(ehdokas eka, Ehdokas toka) { /* 27 */ Ehdokas.valittu =!Ehdokas.valittu; /* 28 */ /* 29 */ /* 30 */ public static void media(string toka, String eka) { vk080320.odt/18.03.2008 1/5

/* 31 */ Ehdokas.valittu = Ehdokas.valittu; /* 32 */ /* 33 */ /* 34 */ public static void main(string[] args) { /* 35 */ Ehdokas eka = new Ehdokas(1000); /* 36 */ Ehdokas toka = eka; /* 37 */ toka.julista(); /* 38 */ eka = new Ehdokas(50); /* 39 */ toka.vaittele(eka, false); /* 40 */ media(toka, eka); /* 41 */ eka = null; /* 42 */ toka.julista(); /* 43 */ /* 44 */ 2. Testien teko a) Kirjoita alla olevaan luokkaan tostring-metodi, jonka avulla testaaminen helpottuu. (2p) b) Testaa alla olevasta luokasta 2 metodia ja sen sisäluokasta 1 metodi (ComTest tai JUnit4). (3p) c) Pitäisikö sisäluokan olla static? Perustelu. import java.io.*; import fi.jyu.mit.ohj2.*; import java.util.stringtokenizer; import java.util.sortedmap; import java.util.treemap; import java.util.set; import java.util.iterator; /** * Luokka sanojen esiintymismäärien laskemiseksi. Toteutettu * TreeMap-luokalla ja erillisellä Laskuri-luokalla. * @author Vesa Lappalainen * @version 1.0, 16.03.2003 */ public class SanatSortedMap { public class Laskuri { private int arvo; public Laskuri(int arvo) { this.arvo = arvo; public void lisaa() { arvo++; public String tostring() { return ""+arvo; SortedMap alkiot = new TreeMap(); public void lisaa(string s) { Laskuri sana = (Laskuri)alkiot.get(s); if ( sana!= null ) { sana.lisaa(); vk080320.odt/18.03.2008 2/5

return; sana = new Laskuri(1); alkiot.put(s,sana); public void tulosta(outputstream os) { PrintStream out = Tiedosto.getPrintStream(os); Set entryset = alkiot.entryset(); for (Iterator i=entryset.iterator(); i.hasnext(); ) out.println(i.next()); public void kasittelerivi(string rivi) { String sana; StringTokenizer st = new StringTokenizer(rivi,",();.:[]{+-"); while ( st.hasmoretokens() ) { sana = st.nexttoken(); lisaa(sana); public void luetiedosto(string tied) throws IOException { BufferedReader fi = Tiedosto.avaa_lukemista_varten(tied); if ( fi == null ) throw new FileNotFoundException("Ei löydy: " + tied); try { String rivi; while ( ( rivi = fi.readline() )!= null ) { kasittelerivi(rivi); finally { fi.close(); 3. Algoritmit Lue alla olevat algoritmit "kissa" ja "koira". Nämä algoritmit tuottavat saman tuloksen eri tavalla laskien. Perustele vastauksesi. a) mikä on ratkaisevin ero näiden toteutuksien välillä? (2p) b) Arvioi algoritmeja luettavuuden kannalta. (2p) c) algoritmisen kompleksisuuden (eli suorituksen tehokkuuden) kannalta. (2p) bonus: mitä algoritmit laskevat public static int kissa (final int n) throws ArithmeticException { if ( n < 0 ) throw new ArithmeticException("Oltava positiivinen"); vk080320.odt/18.03.2008 3/5

if ( n < 2 ) return n; return kissa(n-2) + kissa(n-1); public static int koira (final int n) throws ArithmeticException { if ( n < 0 ) throw new ArithmeticException("Oltava positiivinen"); if ( n == 0 ) return 0; int nykyinen = 1; int vanha = 0; for (int i=1; i<n; i++) { int summa = nykyinen + vanha; vanha = nykyinen; nykyinen = summa; return nykyinen; 4. Tiedostot a) Erota cutlonglines -aliohjelmasta itse toiminnallisuus omaksi aliohjelmakseen. (2p) b) Kerro lyhyesti mitä hyötyä ohjelmalogiikan erottelusta erillisiin aliohjelmiin on. (2p) c) Miten muuttaisit ohjelmaa vielä siten, että sille voitaisiin tuoda parametrina operaatio, joka halutaan tehdä luetuille riveille? (2p) bonus: Mitä muita toiminnallisia osia aliohjelmasta voisi vielä erotella ja miksi? package teht4; import java.io.bufferedreader; import java.io.ioexception; import java.io.printwriter; import fi.jyu.mit.ohj2.tiedosto; public class FileFormatter { public static void cutlonglines(final String infile, final String outfile, final int linelen) throws IOException { BufferedReader in = null; PrintWriter out = null; try { in = Tiedosto.avaa_lukemista_varten(inFile); if (in == null) throw new IOException("Failed to open file: " + infile); out = Tiedosto.avaa_kirjoittamista_varten(outFile); if (out == null) throw new IOException("Failed to open file for writing: " + outfile); String line; vk080320.odt/18.03.2008 4/5

while ((line = in.readline())!= null) { int beginix = 0; int fullchunks = line.length() / linelen + 1; for (int i = 1; i < fullchunks; i++) { int endix = beginix + linelen; out.println(line.substring(beginix, endix)); beginix = endix; out.println(line.substring(beginix)); finally { if (out!= null) out.close(); if (in!= null) in.close(); 5. Matriisin generointi Eräässä demotehtävässä tehtiin aliohjelma matriisinsuurin. Aliohjelma voi epäonnistua mm. jos suurin on jonkin rivin alussa tai lopussa. Ja toki jos suurin on jossakin keskellä. Helpointa testaaminen olisi jos olisi tapa tuottaa kaikki mahdolliset tietyn kokoiset matriisit, jossa suurin on kaikissa mahdollisissa matriisin paikoissa. a) Piirrä 6 erilaista 2x3 matriisia (2 riviä, 3 saraketta), joissa kaikissa suurin alkio on eri paikassa. b) Toteuta (Javalla) tapa tuottaa kaikki tietyn kokoiset matriisit, jossa suurin on ensimmäisellä kutsulla 1. rivin 1. sarakkeessa, 2. kutsulla 1. rivin 2. sarakkeessa ja lopulta m*n:llä kutsulla n:n rivin m:n sarakkeessa. (4p) c) Kirjoita tekemääsi toteutusta käyttäen täydellinen testi matriisinsuurinaliohjelmalle kun matriisin koko on 3x4. vk080320.odt/18.03.2008 5/5