PROG2 Tenta 2011-05-21 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP och DSV1:P2



Relevanta dokument
PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP och DSV1:P2

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP och DSV1:P2

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

SP:PROG3 HT12 Tenta

Programmering för språkteknologer II, HT2014. Rum

Tentamen OOP

Tentamen i Programmering grundkurs och Programmering C

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

OOP Objekt-orienterad programmering

Tentamen i Objektorienterad programmering

Tentamen, EDAA20/EDA501 Programmering

ANVÄND NAVIGATIONEN I CAPITEX SÄLJSTÖD

kl

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

Lösningsförslag till tentamen

Föreläsning 7. Träd och binära sökträd

Du ska nu skapa ett litet program som skriver ut Hello World.

Vi skall skriva uppsats

OOP Omtenta

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Föreläsning 14 Innehåll

Föreläsning 10. ADT:er och datastrukturer

OOP Tenta

Föreläsning 3: Händelsestyrda program och användargränssnitt

Lösningar för tenta 3 DAT043,

TIMREDOVISNINGSSYSTEM

DAT043 Objektorienterad Programmering

ANVÄNDARHANDLEDNING FÖR

Objektsamlingar i Java

ELEV- HANDLEDNING (Ansökan via webben)

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningsförslag till tentamen

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

OOP Tentamen

Mera om generik. Innehåll. Generik och arv Wildcards Vektorer och generik Generiska metoder. EDA690 (Mera om generik) HT / 24

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Malmö högskola 2007/2008 Teknik och samhälle

OOP Omtenta

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

DATASAMORDNING NYHETERNA I CHAOS Utbildning Chaos/Handledning - Nyheterna i Chaos 3/

Laboration 24 Databasen MySQL och java

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

729G04 - Hemuppgift, Diskret matematik

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Programmera en NXT Robot

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Handbok Ämnesprov 2016 Lärarinmatning I Dexter Åk 3. Uppdaterad: /HL Version: IST AB

Gissa det hemliga talet

Snabbslumpade uppgifter från flera moment.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Grundläggande programmering med C# 7,5 högskolepoäng

TENTAMEN OOP

Idag: Dataabstraktion

Lösningsförslag till tentamen

Träning i bevisföring

4-3 Vinklar Namn: Inledning. Vad är en vinkel?

PROGRAMMERING A VB6 UTVECKLINGSVERKTYGET VISUAL BASIC

Manual för BPSD registret. Version 6 /

Distribuerade system. CORBA eller RMI

2D1310, 2D1311 Programmeringsteknik Tentamen (1p) 3 maj 2001, kl

Menys webbaserade kurser manual för kursdeltagare. Utbildningsplattform: Fronter

Objektorienterad programmering i Java

Lathund, procent med bråk, åk 8

Lösningsförslag till tentamen

Lösningsförslag till tentamen

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

Tentamen, EDA501 Programmering M L TM W K V

TIMREDOVISNINGSSYSTEM

TENTAMEN OOP

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Webb-bidrag. Sök bidrag på webben Gäller från

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 29 november 2003 kl , sal D34.

Repetition av OOP- och Javabegrepp

SA33 - Val av kurser inom program m terminsreg

Objektorienterad programmering D2

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Föreläsning 2. Länkad lista och iterator

Java M1 V2 L2 K2 TM W. Tentamen i Programmering , kl LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap.

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Repetition av OOP- och Javabegrepp

Tentamen FYTA11 Javaprogrammering

Dugga Datastrukturer (DAT036)

OOP Tentamen

912 Läsförståelse och matematik behöver man lära sig läsa matematik?

OOP Tentamen

Hur skapar man formula r

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Transkript:

DSV SU/KTH sid 1 (6) PROG2 VT11 PROG2 Tenta 2011-05-21 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP och DSV1:P2 Tentan består av tre uppgifter. Max poäng är 30. För betyget E (godkänd) krävs minst 18 poäng och minst en poäng på varje uppgift. Betygen A-D ges enligt betygskriteria i Daisy och på omstående sida. Hjälpmedel: Tillåtna hjälpmedel är medhavda böcker om Java. Anvisningar: Skriv endast på ena sidan av bladen. Påbörja varje ny uppgift på nytt blad. Skriv tydligt - oläsbara svar beaktas inte. Även icke fullständiga lösningar beaktas. Kommentera gärna era lösningar. Lösningsförslag kommer att presenteras i delkursens FC-konferens. Lycka till!

DSV SU/KTH sid 2 PROG2 Tentan betygsätts i A/B/C/D/E/Fx/F-skalan enligt följande kriteria: A - Samtliga lösningar är felfria (förutom uppenbara små misstag), fullständiga, genomförda med användning av de på kursen presenterade Java-teknikerna och lämpliga klasser/metoder ur Javas standardbibliotek. Lösningarna tar hänsyn till alla i uppgiftstexten angivna situationer och innehåller alla i uppgiftstexten begärda felkontroller. Däremot behöver de inte innehålla andra felkontroller eller ta hänsyn till andra situationer än de som angetts i uppgiftstexten. B - Som för betyget A utom att någon eller ett par lösningar kan innehålla något grövre misstag eller underlåta att ta hänsyn till någon enstaka angiven situation eller någon enstaka begärd felkontroll. C - Lösningarna är i princip korrekta men kan vara behäftade med fel och/eller underlåta att ta hänsyn till någon enstaka angiven situation eller begärd felkontroll. Lösningarna kan vara mer omständiga än nödvändigt (t.ex. skrivna med egen kod där standardklasser/-metoder kunde ha använts). D - Som för betyget C utom att någon eller några av lösningar kan innehålla grövre fel av principiell karaktär. Lösningarna kan även innehålla grövre syntaktiska misstag (t.ex. sammanblandning med andra språk med liknande syntax). E - Som för betyget D utom att de flesta eller alla lösningar är behäftade med grövre fel av principiell karaktär. Icke desto mindre måste lösningarna visa grundläggande förståelse för problemet och åtminstone en ansats till korrekt lösning. Fx - Som för E ovan utom att någon eller lösning är helt felaktig eller saknas. F - Flera lösningar är helt felaktiga eller saknas. Betyget Fx innebär att studenten kan komplettera examinationen med en extra inlämningsuppgift för att få godkänt på aktuell tentamen (E men ej högre betyg). Kompletteringsuppgiften måste lämnas in enligt angiven deadline och kan endast användas för att få betyget E på den här tentan.

DSV SU/KTH sid 3 PROG2 Uppgift 1 (9 poäng) Uppgiften går ut på att komplettera ett litet program för bokning av biobiljetter (givetvis mycket förenklat). Programmet ska skapa ett fönster med följande utseende: Rutorna representerar stolar i biosalongen (överst finns bara en JLabel med vit bakgrund för att visa var bioduken finns). Stolarna är ordnade i 10 rader med 8 stolar i varje rad. Stolarna är numrerade från 1 överst till vänster till 80 nederst till höger (radvis), men det syns inte på skärmen. Användaren ska kunna klicka på rutor med texten "Ledig" och då ska texten ändras till "Bokad". Om användaren klickar på en ruta där det står "Bokad" så ändras texten tillbaka till "Ledig". När användaren har bestämt sig för vilka platser hon vill ha klickar hon på knappen "Boka" då ändras de rutor som var markerade med "Bokad" till "Upptagen" och en meddelanderuta med de valda platsnumren visas: Nu kan nästa användare boka platser, men då är givetvis de platser som bokats av tidigare användare upptagna (markerade med "Upptagen"). Rutor som är markerade med "Upptagen" ska inte reagera på användarens klickningar alls (kan ordnas genom att ta bort lyssnaren från en upptagen plats eller genom att göra setenabled(false) på den). Medan en användare väljer platser kan alltså fönstret se ut så här: där aktuell användare har valt men ännu inte bokat två platser på rad 5 (plats 36 och 37). På nästa sida finns koden som du ska komplettera.

DSV SU/KTH sid 4 PROG2 Nedan finns koden till klassen Bio som du ska komplettera (radnumreringen ingår inte i koden, den är till för att du enkelt skall kunna förklara var du gör tillägg/ändringar): 1 import javax.swing.*; 2 import java.awt.*; 3 4 class Plats extends JButton{ 5 private int nr; 6 public Plats(int nr){ 7 this.nr = nr; 8 9 public int getnr(){ 10 return nr; 11 12 13 14 class Bio extends JFrame{ 15 Bio(){ 16 super("din Bio"); 17 JPanel salongen = new JPanel(); 18 salongen.setlayout(new GridLayout(10, 8)); 19 for(int i=0; i < 80; i++){ 20 Plats p = new Plats(i); 21 p.settext("ledig"); 22 salongen.add(p); 23 24 add(salongen); 25 JPanel north = new JPanel(); 26 add(north, BorderLayout.NORTH); 27 north.setbackground(color.white); 28 north.setopaque(true); 29 north.add(new JLabel("Duken")); 30 JPanel south = new JPanel(); 31 add(south, BorderLayout.SOUTH); 32 south.add(new JButton("Boka")); 33 setdefaultcloseoperation(exit_on_close); 34 setsize(750,300); 35 setvisible(true); 36 37 38 public static void main(string[] args){ 39 new Bio(); 40 41

DSV SU/KTH sid 5 PROG2 Uppgift 2 (9 poäng) Tidningar och andra periodiska publikationer identifieras med ett nummer som kallas ISSN (International Standard Serial Number). Det är ett åttasiffrigt nummer som brukar presenteras som två fyrsiffriga nummer med bindesträck emellan, t.ex. har Dagens Nyheter ISSN 1101-2447. Den sista siffran är en kontrollsiffra som dock kan vara 10 och då presenteras som ett X (t.ex. har Dagens Industri ISSN 0346-640X). Nedan finns en klass som tänks representera ISSN (bortse från att det saknas felkontroller): public class ISSN{ private int part1, part2; private String checkdig; public ISSN(int part1, int part2, String checkdig){ this.part1=part1; this.part2=part2; this.checkdig=checkdig; public String tostring(){ return "ISSN " + part1 + "-" + part2 + checkdig; a) Objekt av ovanstående klass ska givetvis kunna användas som nycklar i olika Map:ar där två objekt med samma värden ska betraktas som lika. Komplettera klassen ISSN så att den kan användas som nyckeltyp i HashMap resp. TreeMap. b) En annan klass representerar information om tidningar, klassen ser ut så här: public class Tidning{ private ISSN issn; private String namn; private int upplaga; Tidning(ISSN issn, String namn, int upplaga){ this.issn = issn; this.namn = namn; this.upplaga = upplaga; public ISSN getissn(){ return issn; public String getnamn() { return namn; public int getupplaga() { return upplaga; public String tostring() { return issn.tostring()+" "+namn+" "+upplaga; Man behöver nu en metod static void lista(map<issn, Tidning> tidningar, int sortordning); Metoden ska skriva ut alla tidningar i Map:en tidningar i den sorteringsordning som framgår av argumentet sortordning: om sortordning är 0 ska tidningarna i utskriften vara sorterade på ISSN, om den är 1 ska de vara sorterade efter namn och om den är 2 ska de vara sorterade efter upplagan (de med störst upplaga först). Utskriften ska göras till System.out.

DSV SU/KTH sid 6 PROG2 Uppgift 3 (12 poäng) I litteraturen om datastrukturer beskrivs en enkel datastruktur med namnet Bag som inte finns i Javas standardbibliotek. En Bag är som en Set (mängd) utom att den inte filtrerar bort dubbletter - man kan addera samma (eller snarare lika) element flera gånger och de lagras i Bag:en lika många gånger som man adderat dem. En Bag brukar även kallas MultiSet. Man skulle kunna implementera en Bag med hjälp av en ArrayList eller LinkedList (de tillåter ju dubletter) men då blir alla operationer långsamma för att avgöra om ett element finns i Bag:en eller inte måste man söka sekvensiellt efter elementet. Ett annat sätt (som du ska använda här) att implementera en Bag men inte offra effektivitet är att använda en snabb datastruktur (hashtabell eller träd) som inte tillåter dubletter, men att tillsammans med varje element lagra en uppgift om hur många gånger elementet finns i Bag:en. Utåt kan det verka som om det finns många lika element i Bag:en men internt finns varje element bara en gång, tillsammans med en räknare. Denna uppgift går ut på att skriva ett generiskt gränssnitt (interface) Bag<E> som deklarerar funktionaliteten (metoderna) hos en Bag (se nedan för beskrivning av funktionaliteten) samt en generisk klass HashBag<E> som implementerar denna funktionlitet med hjälp av någon hashtabell-baserad samling (alltså HashSet eller HashMap). Den generiska parametern E är typen av objekt som hanteras i Bag:en. Gränssnittet Bag<E> och klassen HashBag<E> ska ligga i ett paket med namnet bags. Funktionalitet hos en Bag ska vara följande: add - tar som argument ett objekt av den typ som hanteras i Bag:en och adderar objektet till Bag:en. Returnerar ingenting. contains - tar som argument ett objekt av den typ som hanteras i Bag:en och returnerar true om det i Bag:en finns ett (eller flera) element som är lika med argumentobjektet, false annars. count - tar som argument ett objekt av den typ som hanteras i Bag:en och returnerar hur många element som är lika med argumentobjektet som finns i Bag:en (en int) remove - tar som argument ett objekt av den typ som hanteras i Bag:en och tar bort från Bag:en ett element som är lika med argumentobjektet. Om det fanns flera sådana element så tas alltså bara ett av dem bort, de övriga är kvar (internt minskas endast en räknare med 1 det är bara när räknaren skulle ha blivit 0 som man verkligen tar bort elementet). Metoden returnerar ingenting. Om det inte fanns något element i Bag:en som var lika med argumentobjektet ska undantaget NoSuchElementException genereras

Lösningsförslag PROG2 VT11 Tenta 2011-05-21 Uppgift 1 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; class Plats extends JButton{ private int nr; public Plats(int nr){ this.nr = nr; public int getnr(){ return nr; class Bio extends JFrame{ Set<Plats> bokadeplatser = new HashSet<Plats>(); Bio(){ super("din Bio"); JPanel salongen = new JPanel(); salongen.setlayout(new GridLayout(10, 8)); PlatsLyss pl = new PlatsLyss(); for(int i=0; i < 80; i++){ Plats p = new Plats(i); p.settext("ledig"); p.addactionlistener(pl); salongen.add(p); add(salongen); JPanel north = new JPanel(); add(north, BorderLayout.NORTH); north.setbackground(color.white); north.setopaque(true); north.add(new JLabel("Duken")); JPanel south = new JPanel(); add(south, BorderLayout.SOUTH); JButton bokabutton = new JButton("Boka"); south.add(bokabutton); bokabutton.addactionlistener(new BokaLyss()); setdefaultcloseoperation(exit_on_close); setsize(750,300); setvisible(true); class PlatsLyss implements ActionListener{ public void actionperformed(actionevent ave){ Plats p = (Plats)ave.getSource(); if (p.gettext().equals("bokad")){ p.settext("ledig"); bokadeplatser.remove(p); else { p.settext("bokad"); bokadeplatser.add(p);

Lösningsförslag PROG2 HT10 Tenta 2011-05-21 class BokaLyss implements ActionListener{ public void actionperformed(actionevent ave){ String str = "Du har bokat följande platser: "; for(plats p : bokadeplatser){ p.settext("upptagen"); p.setenabled(false); str += p.getnr() + " "; bokadeplatser.clear(); JOptionPane.showMessageDialog(null, str); public static void main(string[] args){ new Bio(); Uppgift 2 a) public class ISSN implements Comparable<ISSN>{ private int part1, part2; private String checkdig;... public boolean equals(object other){ if (other instanceof ISSN){ ISSN o = (ISSN)other; return part1 == o.part1 && part2 == o.part2 && checkdig.equals(o.checkdig); else return false; public int hashcode(){ return part1*1000000 + part2*100 + checkdig.hashcode(); public int compareto(issn other){ int cmp = part1 - other.part1; if (cmp!= 0) return cmp; cmp = part2 - other.part2; if (cmp!= 0) return cmp; return checkdig.compareto(other.checkdig);

Lösningsförslag PROG2 HT10 Tenta 2011-05-21 b) import java.util.*; class TidningISSNCmp implements Comparator<Tidning>{ public int compare(tidning t1, Tidning t2){ return t1.getissn().compareto(t2.getissn()); class TidningNamnCmp implements Comparator<Tidning>{ public int compare(tidning t1, Tidning t2){ return t1.getnamn().compareto(t2.getnamn()); class TidningUpplagaCmp implements Comparator<Tidning>{ public int compare(tidning t1, Tidning t2){ return t2.getupplaga() - t1.getupplaga(); static void lista(map<issn, Tidning> tidningar, int sortordning){ List<Tidning> tlista = newarraylist<tidning>(tidningar.values()); Comparator<Tidning> cmp = null; switch(sortordning){ case 0: cmp = new TidningISSNCmp(); break; case 1: cmp = new TidningNamnCmp(); break; case 2: cmp = new TidningUpplagaCmp(); break; Collections.sort(tLista, cmp); for(tidning t : tlista) System.out.println(t); Uppgift 3 package bags; public interface Bag<E>{ void add(e elem); boolean contains(e elem); int count(e elem); void remove(e elem); package bags; import java.util.*; public class HashBag<E> implements Bag<E>{ private HashMap<E, Integer> data = new HashMap<E, Integer>(); public void add(e elem){ Integer counter = data.get(elem); if (counter == null) counter = new Integer(1); else counter = new Integer(counter + 1); data.put(elem, counter);

Lösningsförslag PROG2 HT10 Tenta 2011-05-21 public boolean contains(e elem){ return data.containskey(elem); public int count(e elem){ Integer counter = data.get(elem); return (counter == null)? 0 : counter; public void remove(e elem){ Integer counter = data.get(elem); if (counter == null) throw new NoSuchElementException(); if (counter == 1) data.remove(elem); else data.put(elem, counter - 1); // HashBag