PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK: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 och DSV1: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

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

SP:PROG3 HT12 Tenta

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

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

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

kl

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

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

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Lösningsförslag till tentamen

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

Lösningsförslag till tentamen

Tentamen OOP

OOP Omtenta

Mer om grafiska komponenter. Händelsestyrda program

Lösningar för tenta 3 DAT043,

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

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

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers

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

Laboration 15 Grafiskt användargränssnitt

Lösningsförslag till tentamen

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers. Exempel: FlowLayout. Klassen FlowLayout

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

Lösningsförslag till tentamen

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Tentamen i Objektorienterad programmering

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

MVC-mönstret. model-view-control i Swing

Laboration 24 Databasen MySQL och java

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

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

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

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

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

OOP Tenta

OOP Objekt-orienterad programmering

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Tentamen i Objektorienterad programmering

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Lösningsförslag till tentamen

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

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

OOP Omtenta

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

OOP Tentamen

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lösningsförslag till tentamen

OOP Objekt-orienterad programmering

DAT043 Objektorienterad Programmering

OOP Tentamen

Tentamen, EDAA20/EDA501 Programmering

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Rita Egna Bilder, Timer

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen, EDA501 Programmering M L TM W K V

Properties. Användbara metoder som kan anropas i propertychanged:

OOP Tentamen

OOP Objekt-orienterad programmering

Lösningsförslag till tentamen

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Laboration 13, Arrayer och objekt

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

Tentamen, EDAA10 Programmering i Java

Tentamen i Programmering

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Redovisning av inlämningsuppgifter

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

Tentamen FYTA11 Javaprogrammering

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

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

Objektorienterad programutveckling, fk

Objektorienterad programmering i Java

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsnings 9 - Exceptions, I/O

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

Föreläsning 14 Innehåll

Lösningsförslag till tentamen

OOP Tenta

OOP Omtenta

TENTAMEN OOP

Transkript:

DSV SU/KTH sid 1 (6) PROG2 VT13 PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 Tentan består av tre uppgifter. Max poäng är 38. För betyget E (godkänd) krävs minst 23 poäng och minst en poäng på varje uppgift. Betygen A-D ges enligt betygskriteria i Daisy och på nästa 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. 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 och med kod som är klar, effektiv och inte onödigt omständlig. 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. Lösningarna kan vara något mer omständliga än nödvändigt. 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ändliga ä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 ett par 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 - En lösning är helt felaktig eller saknas medan de övriga lösningar ä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. 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 aktuella tentan.

DSV SU/KTH sid 3 PROG2 Uppgift 1 (12 poäng) Denna uppgift går ut på att komplettera ett program för en självbetjäningskassa i en liten livsmedelsbutik. Kassan visar följande fönster för en kund (bilden till vänster): Meningen är att en kund ska kunna mata in ett antal 1 i textfältet nedtill och klicka i rutan som anger varan kunden har köpt. Rutorna representeras av knappar (objekt av klassen JButton). Programmet räknar ut beloppet (multiplicerar antalet med varans pris (se nedan)), skriver ut varan, antalet och beloppet i en rad i textarean och adderar beloppet totalbeloppet för kunden (se bilden ovan till höger). Om textfältet med antal inte är ifyllt med numerisk information när användaren klickat i en ruta ska ett felmeddelande visas: Knappen Ny kund överst ska bara nollställa totalbeloppet och blankställa textarean. Varornas priser är fasta och ska vara hårdkodade enligt följande: Gurka Paprika Tomat Mjölk Yoghurt Grädde Bröd Müsli Kakor 11.70 46.30 27.35 7.50 15.50 13.72 23.20 27.30 13.00 På nästa sida finns koden till en klass Kassa som skapar ett sådant fönster. Tyvärr saknas funktionaliteten inget händer när man klickar i rutorna o.s.v. Prisuppgifterna saknas också. Din uppgift är att komplettera klassen Kassa så att den fungerar enligt ovanstående. Fortsättning på nästa sida 1 I den här butiken säljs allting styckevist

DSV SU/KTH sid 4 PROG2 Här följer koden till klassen Kassa (radnumreringen ingår ej i koden, den är till för att du enkelt ska kunna ange var ni gör tillägg/ändringar): 1 import javax.swing.*; 2 import java.awt.*; 3 4 class Kassa extends JFrame{ 5 final String[] VAROR = {"Gurka", "Paprika", "Tomat", 6 "Mjölk", "Yoghurt", "Grädde", 7 "Bröd", "Müsli", "Kakor"; 8 9 public Kassa(){ 10 super("kassa"); 11 JPanel north = new JPanel(); 12 add(north, BorderLayout.NORTH); 13 14 JButton nykundknapp = new JButton("Ny kund"); 15 north.add(nykundknapp); 16 17 JPanel center = new JPanel(); 18 center.setlayout(new GridLayout(2,1)); 19 add(center, BorderLayout.CENTER); 20 JPanel knappar = new JPanel(); 21 center.add(knappar); 22 knappar.setlayout(new GridLayout(3,3,10,10)); 23 for(int i = 0; i < VAROR.length; i++){ 24 JButton b = new JButton(VAROR[i]); 25 knappar.add(b); 26 27 JTextArea display = new JTextArea(); 28 center.add(new JScrollPane(display)); 29 30 JPanel south = new JPanel(); 31 add(south, BorderLayout.SOUTH); 32 south.add(new JLabel("Antal: ")); 33 south.add(new JTextField(5)); 34 south.add(new JLabel("Totalbelopp = ")); 35 south.add(new JLabel("0")); 36 37 setdefaultcloseoperation(exit_on_close); 38 setsize(300, 300); 39 setvisible(true); 40 41 42 public static void main(string[] args){ 43 new Kassa(); 44 45

DSV SU/KTH sid 5 PROG2 Uppgift 2 (13 poäng) Detta handlar om en stor flygplats där olika flyg mot flera destinationer kan starta vid samma klockslag. I ett program för hantering av detta representeras destionationer med strängar (namn på staden) medan klockslag representeras med objekt av följande klass: class Klocka{ private int timme, minuter; public Klocka(int timme, int minuter){ this.timme = timme; this.minuter = minuter; public String tostring(){ return timme+":"+minuter; Klockslag för avgångar mot de olika destinationerna samlas i en Map, t.ex. Map<String, List<Klocka>> departures = new HashMap<String, List<Klocka>>(); En utskrift av informationen i denna Map skulle kunna se ut så här: Wien 7:20 9:50 11:45 16:40 London 7:20 10:35 11:45 12:20 15:40 16:40 Krakow 10:35 Oslo 7:20 8:35 9:50 10:35 12:20 16:40 Nu behöver man en metod som tar en sådan Map som argument och "vänder på den": metoden ska skapa och returnera en ny Map där man för varje klockslag med avgångar kan se vart flygen går. Metoden ska ha följande signatur: static Map<Klocka,List<String>> vändmap(map<string,list<klocka>> orgmap); En utskrift av informationen i den nya Mapen skulle kunna se ut så här: 7:20 Wien London Oslo 8:35 Oslo 9:50 Wien Oslo 10:35 London Krakow Oslo 11:45 Wien London 12:20 London Oslo 15:40 London 16:40 Wien London Oslo Obs! dock att din metod inte ska göra någon utskrift utan skapa och returnera en ny Map. Vid en genomgång av den nya Map:en ska informationen vara sorterad efter klockslagen. Ordningen mellan destinationer för ett visst klockslag är oväsentlig. Ur den nya Mapen ska man som vanligt kunna få fram en lista med destinationer för ett visst klockslag, t.ex.: List<String> destinationer = nyamapen.get(new Klocka(10, 35)); och få en lista med strängarna "London", "Krakow", "Oslo". Du får göra tillägg till klassen Klocka om du behöver det.

DSV SU/KTH sid 6 PROG2 Uppgift 3 (13 poäng) Denna uppgift går ut på att skriva en generisk klass SortedHashMap<K,V> som ska implementera ett förenklat gränssnitt Map<K,V>. Bakgrund: en HashMap är mycket snabb på att lagra ett nyckel/värde-par och på att söka upp ett värde med ledning av en nyckel, men när man går igenom alla nycklar eller värden så kommer dessa i en konstig ordning 2. Ofta är snabbheten är viktig när man söker efter värden, men inte lika viktig vid andra operationer, som genomgång av alla nycklar eller värden, eller lagring av nytt nyckel/värde-par. Man kan alltså göra en datastrukturklass som internt använder en HashMap för sökningar, men kompletterar andra operationer på något sätt så att nycklar och värden presenteras i sorteringsordning efter nycklarna vid genomgång. Skriv klassen SortedHashMap<K,V> som ska implementera följande förenklade Mapgränssnitt: public interface Map<K,V>{ V get(k key); V put(k key, V value); Set<K> keyset(); Collection<V> values(); Metoderna i SortedHashMap ska bete sig på följande sätt: get tar emot en nyckel och returnerar motsvarande värde eller null om nyckeln inte finns lagrad. Denna metod måste vara lika effektiv som motsvarande metod i HashMap put tar emot en nyckel och ett värde och lagrar dessa. Om denna nyckel redan finns så ersätts det gamla värdet med det nya. Metoden returnerar det gamla värdet eller null om nyckeln inte fanns lagrad. Denna metod behöver inte vara lika effektiv som motsvarande metod i HashMap keyset returnerar en mängd med alla nycklar, mängden ska vara sorterad i nycklarnas naturliga ordning. Denna metod får vara mindre effektiv än motsvarande metod i HashMap. values returnerar en samling (egentligen en lista) med alla värden, värdena i samlingen ska vara i samma ordning som motsvarande nycklar har i ett keyset. Metoden får vara mindre effektiv än motsvarande metod i HashMap. Av de generiska typparametrarna för SortedHashMap står K för nyckeltypen och V för värdetypen. Obs att nycklarna måste kunna jämföras med varandra (annars kan man ju inte prata om sorteringsordning). Detta måste man ange som krav på nyckeltypen K när man deklarerar klassen SortedHashMap. 2 Ordningen bestäms som bekant av nycklars hashcode och HashMap:ens kapacitet

Lösningsförslag PROG2 VT13 tenta 2013-06-07 Uppgift 1 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; class Kassa extends JFrame{ private static final String[] VAROR = {"Gurka", "Paprika", "Tomat", "Mjölk", "Yoghurt", "Grädde", "Bröd", "Müsli", "Kakor"; private static final double[] PRISER = {11.7,46.3,27.3,7.5,15.0, 13.7,23.2,27.3,13.0; private JTextField antalfält; private JLabel belopplabel; private double totalt = 0.0; private Map<String,Double> prislista = new HashMap<>(); private JTextArea area = new JTextArea(); Kassa(){ super("kassa"); for(int i = 0; i < VAROR.length; i++) prislista.put(varor[i], PRISER[i]); JPanel north = new JPanel(); add(north, BorderLayout.NORTH); JButton nykundknapp = new JButton("Ny kund"); north.add(nykundknapp); nykundknapp.addactionlistener(new NyKundLyss()); JPanel center = new JPanel(); add(center, BorderLayout.CENTER); center.setlayout(new GridLayout(2,1)); JPanel knappar = new JPanel(); center.add(knappar); knappar.setlayout(new GridLayout(3,3,10,10)); VaraLyss varalyss = new VaraLyss(); for(int i=0; i<varor.length; i++){ JButton b = new JButton(VAROR[i]); knappar.add(b); b.addactionlistener(varalyss); center.add(new JScrollPane(area)); JPanel south = new JPanel(); add(south, BorderLayout.SOUTH); south.add(new JLabel("Antal: ")); antalfält = new JTextField(5); south.add(antalfält); south.add(new JLabel("Totalbelopp = ")); belopplabel = new JLabel(""+totalt); south.add(belopplabel); setdefaultcloseoperation(exit_on_close); setsize(300, 300); setvisible(true); // Kosntruktorn

Lösningsförslag PROG2 VT13 tenta 2013-06-07 class NyKundLyss implements ActionListener{ public void actionperformed(actionevent ave){ totalt = 0; belopplabel.settext(""+totalt); antalfält.settext(""); area.settext(""); // actionperformed // NyKundLyss class VaraLyss implements ActionListener{ public void actionperformed(actionevent ave){ try{ JButton b = (JButton)ave.getSource(); String vara = b.gettext(); int antal = Integer.parseInt(antalFält.getText()); double belopp = antal * prislista.get(vara); area.append(vara + " " + antal + " " + String.format("%.2f", belopp) + "\n"); totalt += belopp; belopplabel.settext(string.format("%.2f",totalt)); catch(numberformatexception nfe){ JOptionPane.showMessageDialog(null, "Fel antal!"); // catch // actionperformed // VaraLyss public static void main(string[] args){ new Kassa(); // main // Kassa

Lösningsförslag PROG2 VT13 tenta 2013-06-07 Uppgift 2 class Klocka implements Comparable<Klocka>{ private int timme, minuter; public Klocka(int timme, int minuter){ this.timme = timme; this.minuter = minuter; public String tostring(){ return timme+":"+minuter; public int compareto(klocka other){ int cmp = timme - other.timme; if (cmp!= 0) return cmp; else return minuter - other.minuter; static Map<Klocka,List<String>> vändmap(map<string,list<klocka>> orgmap){ Map<Klocka, List<String>> resultat = new TreeMap<>(); for(map.entry<string, List<Klocka>> me : orgmap.entryset()){ String dest = me.getkey(); List<Klocka> tider = me.getvalue(); for(klocka kl : tider){ List<String> dests = resultat.get(kl); if (dests == null){ dests = new ArrayList<String>(); resultat.put(kl, dests); dests.add(dest); // for Klocka // for Map.Entry return resultat;

Lösningsförslag PROG2 VT13 tenta 2013-06-07 Uppgift 3 import java.util.*; class SortedHashMap<K extends Comparable<K>, V> implements Map<K,V>{ private Map<K, V> hashmap = new HashMap<K, V>(); private Map<K,V> treemap = new TreeMap<K, V>(); public V get(k key){ return hashmap.get(key); public V put(k key, V value){ V oldvalue = hashmap.put(key, value); treemap.put(key, value); return oldvalue; public Set<K> keyset(){ return new TreeSet<K>(treeMap.keySet()); public Collection<V> values(){ return new ArrayList<V>(treeMap.values());