Tietorakenteet, laskuharjoitus 7,

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

Ohjelmoinnin jatkokurssi, kurssikoe

Rajapinta (interface)

Ohjelmointi 2 / 2010 Välikoe / 26.3

Mikä yhteyssuhde on?

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

Ohjelmoinnin perusteet, kurssikoe

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

Ohjelmistotekniikan menetelmät, koe

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

Metodien tekeminen Javalla

Listarakenne (ArrayList-luokka)

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

Luokan sisällä on lista

7. Näytölle tulostaminen 7.1

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

YHTEYSSUHDE (assosiation)

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Olio-ohjelmointi Javalla

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

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

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Ohjelmoinnin perusteet Y Python

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Java-kielen perusteet

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

public static void main (String [] args)

Javan GUI Scratchaajalle

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

Lista luokan sisällä

16. Javan omat luokat 16.1

1 Tehtävän kuvaus ja analysointi

Javan perusteita. Janne Käki

1. Omat operaatiot 1.1

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

Ohjelmointi 2, välikoe

Tietorakenteet, laskuharjoitus 6,

Java-kielen perusteita

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

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

11. Javan valintarakenteet 11.1

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

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

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

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

Tietokannat II -kurssin harjoitustyö

20. Javan omat luokat 20.1

11. Javan valintarakenteet 11.1

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

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

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

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

Taulukoiden käsittely Javalla

Luokat ja oliot. Ville Sundberg

Testivetoinen ohjelmistokehitys

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

JAVA-OHJELMOINTI 3 op A274615

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

9. Periytyminen Javassa 9.1

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

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Ohjelmoinnin perusteet Y Python

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ältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Java ja grafiikka. Ville Sundberg

Ohjelmointi 2 / 2011 Välikoe / 25.3

13. Loogiset operaatiot 13.1

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

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

Java-kielen perusteita

Interaktiivinen tarinankerronta

TIETORAKENTEET JA ALGORITMIT

OHJ2k12 välikoe

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

1. Olio-ohjelmointi 1.1

Ohjelmoinnin perusteet, syksy 2006

3. Binääripuu, Java-toteutus

12. Javan toistorakenteet 12.1

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

Periytyminen (inheritance)

58131 Tietorakenteet ja algoritmit (syksy 2015)

9. Periytyminen Javassa 9.1

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

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

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

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

17. Javan omat luokat 17.1

Tietorakenteet, laskuharjoitus 8, malliratkaisut

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

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

Java-kielen perusteet

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

Transkriptio:

Tietorakenteet, laskuharjoitus 7, 14.-19.3. 1. "Tira meets software engineering, osa 1" Lue luentomonisteen kalvot 233-236. Toteuta luokka Opiskelijarekisteri joka tarjoaa seuraavat palvelut: opiskelijoiden lisääminen rekisteriin opiskelijan tietojen haku nimen perusteella opiskelijoiden tietojen haku numeron perusteella kaikkien opiskelijanumeroiden tulostus, tulostus tapahtuu suuruusjärjestyksessä aakkosjärjestyksessä tapahtuva nimien tulostus Molempien hakuoperaatioiden täytyy toimia ajassa O(log n) jos rekisterissä on n opiskelijaa. Tämän takia rekisterin sisäisessä toteutuksessa tulee käyttää Javan TreeMapolioita. Tulostusoperaatioiden tulisi toimia ajassa O(n) eli niissä ei saa tehokkuussyistä kutsua järjestämisoperaatiota. Huom: jos Opiskelijarekisteri-luokan koodi uhkaa kasvaa yli 40 riviseksi tai jonkun metodisi pituus alkaa ylittää 5 rivitä, taidat olla keksimässä pyörää uudelleen. Eli muista luottaa Java API:in! Seuraavassa testipääohjelma: public static void main(string[] args) { Opiskelijarekisteri rekisteri = new Opiskelijarekisteri(); rekisteri.lisaaopiskelija(new Opiskelija("Wikla", "011")); rekisteri.lisaaopiskelija(new Opiskelija("Lokki", "012")); rekisteri.lisaaopiskelija(new Opiskelija("Ukkonen", "013")); rekisteri.lisaaopiskelija(new Opiskelija("Niklander", "014")); rekisteri.lisaaopiskelija(new Opiskelija("Mikkola", "015")); rekisteri.lisaaopiskelija(new Opiskelija("Smart", "016")); rekisteri.lisaaopiskelija(new Opiskelija("Harjulehto", "017")); System.out.println("haetaan nimen perusteella"); while ( true ){ String haettava = lukija.nextline(); if ( haettava.equals("") ) break; Opiskelija haettu = rekisteri.haenimenperusteella(haettava); System.out.println( haettu ); System.out.println("haetaan opiskelijanumeron perusteella"); while ( true ){ String haettava = lukija.nextline(); if ( haettava.equals("") ) break; Opiskelija haettu = rekisteri.haenumeronperusteella(haettava); System.out.println( haettu ); 1

rekisteri.tulostanimetaakkosjarjestyksessa(); rekisteri.tulostaopiskelijanumerot(); Luokan Opiskelija koodi: import java.util.arraylist; import java.util.random; public class Opiskelija { private String nimi; private String opnro; private ArrayList<String> arvosanat; private static String[] kurssit = { "JTKT", "OhPe", "OhJa" ; public Opiskelija(String nimi, String opnro) { this.nimi = nimi; this.opnro = opnro; arvosanat = new ArrayList<String>(); Random r = new Random(); for ( String k :kurssit ) { arvosanat.add(k + " "+ r.nextint(6) ); public String getopnro() { return opnro; public String getnimi() { return nimi; public String tostring() { String arvosmj = ""; for ( String arvos : arvosanat ) { arvosmj += " "+ arvos + "\n"; return nimi + " ("+opnro+")\n" + arvosmj; 2

2. "Tira meets software engineering osa 2" Yritys maksaa kuukausittaista korvausta yrityksessä töissä oleville sekä yrityksen alihankkijoille. Alihankkijat ovat normaaleja yrityksiä, eli niiden palkkalistoilla on henkilöitä ja lisäksi niillä voi olla alihankkijoita. Toteuta tietorakenneratkaisu, jonka avulla yrityksen koko palkkasumma saadaan selville. Palkkasumma koostuu työntekijöiden palkoista sekä alihankkijoiden palkkasummista. Alihankkijoiden palkkasummat taas koostuvat niiden työntekijöiden tai alihankkijana olevien yritysten palkkasummasta. Määrittele rajapinta Palkittava jonka sekä Työntekijät että Yritykset toteuttavat: public interface Palkittava { int palkka(); Ohje: älä keksi pyörää uudestaa vaan lue Ohjelmoistojen mallintamisen monisteen http://www.cs.helsinki.fi/u/mluukkai/ohmas10/ohma.pdf luku 3.8 "Esimerkki monimutkaisemman rakenteen mallintamisesta". Seuraavassa esimerkki, joka näyttää miten tietorakenneratkaisun tulisi toimia: public static void main(string[] args) { Yritys nokia = new Yritys(); nokia.lisaapalkollinen(new Tyontekija(2000)); nokia.lisaapalkollinen(new Tyontekija(3000)); nokia.lisaapalkollinen(new Tyontekija(3000)); nokia.lisaapalkollinen(new Tyontekija(4500)); nokia.lisaapalkollinen(new Tyontekija(10000)); Yritys comptel = new Yritys(); comptel.lisaapalkollinen(new Tyontekija(1800)); comptel.lisaapalkollinen(new Tyontekija(1850)); comptel.lisaapalkollinen(new Tyontekija(3000)); nokia.lisaapalkollinen(comptel); Yritys salocomp = new Yritys(); salocomp.lisaapalkollinen(new Tyontekija(1700)); salocomp.lisaapalkollinen(new Tyontekija(1750)); salocomp.lisaapalkollinen(new Tyontekija(2200)); nokia.lisaapalkollinen(salocomp); Yritys shelectr = new Yritys(); for (int i = 0; i < 100; i++) { shelectr.lisaapalkollinen(new Tyontekija(15)); 3

Yritys jingjang = new Yritys(); for (int i = 0; i < 1000; i++) { jingjang.lisaapalkollinen(new Tyontekija(3)); shelectr.lisaapalkollinen(jingjang); nokia.lisaapalkollinen(shelectr); System.out.println("Palkkasummat"); System.out.println("Comptel: " + comptel.palkka() + " euroa"); System.out.println("Salocomp: " + salocomp.palkka() + " euroa"); System.out.println("Shanghai Electronics: " + shelectr.palkka() + " euroa"); System.out.println("JingJang: " + jingjang.palkka() + " euroa"); System.out.println("Nokian palkkasumma: " + nokia.palkka() + " euroa"); Tulostuu: Palkkasummat: Comptel: 6650 euroa Salocomp: 5650 euroa Shanghai Electronics: 4500 euroa JingJang: 3000 euroa Nokia: 39300 euroa Huomaa, miten nokian palkolliset muodostavat esimerkissä puumaisen rakenteen. Osa puun solmuista on normaaleja työntekijöitä, osa taas edustaa alihankkijayrityksiä. nokia / \ \ \ salocomp comptel shanghaielectronics t1... tn / \ / \ \ t1... tn t1... tn t1... tn jingjang / \ t1... tn Ideana tietorakenteessa on, että sen käyttäjän ei tarvitse tuntea puun "solmuina" olevien olioiden tarkkaa tyyppiä vaan ainoastaan se, että jokaisella on metodi palkka(). Myös puun juuri käyttäytyy samalla tavalla. Eli käyttäjän kannalta oli yrityksen henkilöstöä edustavassa puussa miten monta alihankkijaa ja työntekijää tahansa, koko puu toimii samoin. Vastaava tapa eli ns. composite pattern on hyvin yleinen olio-ohjelmoinnissa. Esim. Swing-käyttöliittymät noudattavat samaa periaatetta. Kaikki käyttöliittymäelementit totauttavat rajapinnan Component. Yksi elementti esim. koko sovelluksen GUI:ta 4

vastaava JFrame voi sisältää monia rajapinnan Component toteuttavia elementtejä, esim. nappeja, tekstikenttiä ym. Kun JFrame-elementille kutsutaan esim. metodia setlocation, siirtyy JFrame uuteen kohtaan näyttöä ja samalla siirtyvät "rekursiiivisesti" kaikki JFramen sisältämät komponentit sopivasti ilman että sovelluksen tarvitsee niitä erikseen siirrellä. Seuraavia tehtäviä varten joudut lukemaan osoitteesta olevan B+-puita esittelevän monisteen osoitteesta http://www.cs.helsinki.fi/group/java/k11/tira/b.pdf 3. Esitä tärkeimmät välivaiheet, kun allaolevaan B + -puuhun lisätään avaimet 33, 25, 19, 43 ja 49. 47 11 31 61 66 5 8 11 21 29 31 45 47 51 53 57 61 63 66 79 81 87 91 4. Aluksi tyhjään B + -puuhun lisään avaimet 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ja 12 (tässä järjestyksessä). Esitä lopputulos ja tärkeimmät välivaiheet, kun solmun maksimikoko on 2t = 4. 5. Esitä tärkeimmät välivaiheet kun tehtävän 3 B + -puusta poistetaan avaimet 5, 8 ja 47. 6. Poista vielä avain 45 edellisen tehtävän jälkeen tuloksena olevasta puusta. Näytä jälleen kaikki mielenkiintoiset välivaiheet 5