PROG2 Tenta 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 och DSV1:P2

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

SP:PROG3 HT12 Tenta

TENTAMEN OOP

TENTAMEN OOP

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

Lösningsförslag till tentamen

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

OOP Tentamen

OOP Tentamen

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

DAT043 Objektorienterad Programmering

Föreläsning 14 Innehåll

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

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

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Föreläsning 10 Innehåll

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

OOP Tenta

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

OOP Tentamen

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

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Tentamen. Lösningsförslag

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

Interfacen Set och Map, hashtabeller

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

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

OOP Omtenta

Tentamen i Programmering

Diskutera. Hashfunktion

Föreläsning 11 Innehåll

OOP Omtenta

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

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

Lösningsförslag till tentamen

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Lösningar för tenta 3 DAT043,

Inlämningsuppgift och handledning

Tentamen OOP

Objektorienterad programutveckling, fk

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

17.9 Funktioner för avbildningstabeller

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

Tentamen i Objektorienterad programmering

Tentamen, EDAA10 Programmering i Java

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

OOP Tenta

Tentamen FYTA11 Javaprogrammering

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

PROGRAMMERINGSTEKNIK TIN212

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Lösningsförslag till tentamen

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lösningsförslag till tentamen

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

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

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

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

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

Lösningsförslag till tentamen

Repetition av OOP- och Javabegrepp

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

OOP Exempel Tentamen 2007

Tentamen, EDA501 Programmering M L TM W K V

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

Repetition av OOP- och Javabegrepp

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lösningsförslag till tentamen

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

Objektorienterad Programmering (TDDC77)

Lösningsförslag till tentamen

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

Lösningar för tenta 2 DAT043,

Algoritmer och datastrukturer 2012, fo rela sning 8

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540)

Laboration A Objektsamlingar

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Föreläsning 9 Innehåll

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Laboration 13, Arrayer och objekt

TENTAMEN OOP

Lösningsförslag till tentamen FYTA11 Javaprogrammering

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

Transkript:

DSV SU/KTH sid 1 (6) PROG2 VT12 PROG2 Tenta 2012-06-01 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP och DSV1: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å 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 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) Det är ju populärt att springa långdistanslopp, t.ex. är drygt 21000 löpare anmälda till Stockholm Marathon imorgon lördag 2012-06-01. När man springer långdistanslopp och vill klara av loppet på en viss tid kan det vara bra att ha med sig en remsa där man för varje kilometer ser vid vilken tid (sedan starten) man bör passera kilometer-markeringen man antar då konstant fart genom hela loppet. Denna uppgift handlar om ett program för skapande av en sådan remsa. Programmet ska skapa ett fönster som ser ut så här: I listan upptil anges fyra alternativa lopp som användaren ska välja ett utav: Maraton på 42.2 km, Halvmaraton på 21.1 km, Lidingöloppet på 30 km eller Hässelbyloppet på 10 km. Sedan ska användaren mata in den tid hon vill springa loppet på uppdelat i timmar och minuter, se ovan till vänster där användaren vill springa Hässelbyloppet på 1:15. Sedan kan användaren klicka på knappen "Skriv mellantider", varvid programmet ska visa en dialogruta med följande utseende: Alltså för varje kilometer, vid vilken tid sedan starten man ska passera. För de andra loppen blir utskriften givetvis mycket längre. Om inmatningsfälten innehåller något annat än siffror så ska en dialogruta med ett felmeddelande visas. Samma gäller om minutfältet innehåller ett värde som är större än 59. Något annat behöver inte kontrolleras. Du behöver inte heller bry dig om formattering av tidsangivelserna. Beräkningar av tidsangivelser görs enklast genom att räkna om tiden till totalminuter (timmar * 60 + minuter), räkna ut mellantider i minuter och omvandla tillbaka till timmar (totalminuter / 60) resp. minuter (totalminuter % 60). På nästa sida finns koden för ett program som skapar ett fönster enligt ovan, men saknar all funktionalitet. Modifiera/komplettera detta program så att det beter sig enligt beskrivningen ovan.

DSV SU/KTH sid 4 PROG2 Nedan finns koden till klassen Mellantider som du ska modifiera/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). Koden är skriven i Java 6 men du får skriva din lösning i Java 7 om du vill. 1 import java.awt.*; 2 import javax.swing.*; 3 import javax.swing.border.*; 4 5 class Mellantider extends JFrame{ 6 static final String[] LOPPTYP = {"Maraton", "Halvmaraton", 7 "Lidingöloppet", "Hässelbyloppet"; 8 JList lopplista = new JList(LOPPTYP); 9 10 Mellantider(){ 11 super("mellantider"); 12 setlayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS)); 13 lopplista.setborder(new LineBorder(Color.BLACK)); 14 lopplista.setselectionmode(listselectionmodel.single_selection); 15 add(lopplista); 16 add(new JLabel("Måltid:")); 17 JPanel fältpanel = new JPanel(); 18 add(fältpanel); 19 fältpanel.add(new JLabel("tim:")); 20 fältpanel.add(new JTextField(5)); 21 fältpanel.add(new JLabel("min:")); 22 fältpanel.add(new JTextField(5)); 23 JPanel knapppanel = new JPanel(); 24 add(knapppanel); 25 knapppanel.add(new JButton("Skriv mellantider")); 26 setdefaultcloseoperation(exit_on_close); 27 setsize(250,200); 28 setvisible(true); 29 30 31 public static void main(string[] args){ 32 new Mellantider(); 33 34

DSV SU/KTH sid 5 PROG2 Uppgift 2 (12 poäng) I ett Java-program där man bl.a. behöver hålla reda på olika personers adresser används följande klass för att representera en adress: class Adress{ private String ort; private int postnr; private String gata; public Adress(String ort, int postnr, String gata){ this.ort = ort; this.postnr = postnr; this.gata = gata; public String getort() { return ort; public int getpostnr() { return postnr; public String getgata() { return gata; Objekt av denna klass hanteras i följande TreeMap, med personernas namn som nyckel: Map<String, Adress> adresslista = new TreeMap<String, Adress>(); Nu visar det sig att man ofta behöver ta fram alla personer som bor på en viss adress och att man vill effektivisera denna operation genom att skapa en Map där adressen är nyckeln och samlingen av alla personer som har denna adress utgör värdet. Denna nya Map bör vara en HashMap, den ska skapas ur den ursprungliga Map:en adresslista med en metod makenamesperaddressmap. Din uppgift är att a) se till att klassen Adress ovan kan användas som nyckel i en HashMap. Givetvis ska olika Adress-objekt som innehåller samma värden betraktas som lika b) skriva metoden makenamesperaddressmap. Metoden ska ta den ursprungliga Map:en adresslista som argument och ur den skapa och returnera den nya Map:en, där adresser är nycklar och samlingar av alla namn på denna adress är värden. Obs att olika namn i den ursprungliga Map:en adresslista kan ha samma adress! Metoden makenamesperaddressmap bör vara statisk, men du behöver inte bry dig om vilken klass den ligger i (skriv bara metoden).

DSV SU/KTH sid 6 PROG2 Uppgift 3 (14 poäng) Denna uppgift går ut på att skriva en generisk klass ArrayMap<K,V> som implementerar ett förenklat gränssnitt Map<K,V>. I Javas standardbibliotek finns ju en Map-implementering med hjälp av hashtabell (HashMap) och en annan med hjälp av binärt sökträd (TreeMap), men det saknas en Map-implementering med hjälp av en array (eller ArrayList). Det finns dock inget som hindrar en sådan implementering (utom att den blir ganska ineffektiv jämfört med de andra). Du ska skriva klassen ArrayMap<K,V>. Den generiska parametern K står för nyckeltypen, medan V står för värdetypen. Klassen ska ligga i ett paket med namnet maps. ArrayMap ska implementera ett förenklat gränssnitt Map<K,V> som ser ut så här: public interface Map<K, V>{ V put(k key, V value); V get(k key); V remove(k key); Set<K> keyset(); Collection<V> values(); Implementeringen ska göras så att ArrayMap internt har en inre klass (motsvarande Map.Entry, men den behöver inte heta så) vars objekt ska representera nyckel/värde-par (innehålla två referenser - en till nyckeln och en till värdet) samt en ArrayList av sådana par-objekt. Metoden put ska söka sekventiellt igenom ArrayList:en för att se om ett par med denna nyckel redan finns. Om det finns så ersätts det gamla värdet med det nya, och det gamla värdet returneras. Om det inte finns så skapas ett nytt objekt av par-klassen med referenser till nyckeln och värdet, och det nya paret stoppas in sist i ArrayListen - put ska i sådana fall returnera null. Att två nycklar är lika avgörs med hjälp av nyckelobjektens metod equals. Metoden get ska söka sekventiellt i ArrayListen efter ett par med denna nyckel. Hittas nyckeln så returneras motsvarande värde, hittas inte nyckeln så returneras null. Metoden remove ska söka efter paret med angiven nyckel och ta bort nyckel/värde-paret från ArrayList:en. Om nyckeln inte hittas ska undantaget NoSuchElementException kastas. Metoderna keyset() resp. values() ska returnera en mängd resp. en samling med nyckelobjekten resp. värde-objekten.

Lösningsförslag PROG2 VT12 tenta 2012-06-01 Uppgift 1 class Mellantider extends JFrame{ static final String[] LOPPTYP = {"Maraton", "Halvmaraton", "Lidingöloppet", "Hässelbyloppet"; JList lopplista = new JList(LOPPTYP); static final double[] DISTANCES = {42.2, 21.1, 30, 10; JTextField timmarfält, minuterfält; Mellantider(){ super("mellantider"); setlayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS)); lopplista.setborder(new LineBorder(Color.BLACK)); lopplista.setselectionmode(listselectionmodel.single_selection); add(lopplista); add(new JLabel("Måltid:")); JPanel fältpanel = new JPanel(); add(fältpanel); fältpanel.add(new JLabel("tim:")); timmarfält = new JTextField(5); fältpanel.add(timmarfält); fältpanel.add(new JLabel("min:")); minuterfält = new JTextField(5); fältpanel.add(minuterfält); JPanel knapppanel = new JPanel(); add(knapppanel); JButton b = new JButton("Skriv mellantider"); knapppanel.add(b); b.addactionlistener(new SkrivutLyss()); setdefaultcloseoperation(exit_on_close); setsize(250,200); setvisible(true); class SkrivutLyss implements ActionListener{ public void actionperformed(actionevent ave){ try{ int tim = Integer.parseInt(timmarFält.getText()); int min = Integer.parseInt(minuterFält.getText()); if (min > 59){ JOptionPane.showMessageDialog(null, "Fel minuter!"); return; int sek = tim * 60 + min; int loppindex = lopplista.getselectedindex(); double kmtid = sek / DISTANCES[loppIndex]; String str = ""; for(int km = 1; km < DISTANCES[loppIndex]; km++){ int tid = (int)(km * kmtid) str += km + " - " + String.format("%01d",tid / 60)+":"+ String.format("%02d",tid % 60) + "\n"; ; int tid = (int)(distances[loppindex] * kmtid); str += DISTANCES[loppIndex] + " - " + String.format("%01d",tid / 60)+":"+ String.format("%02d",tid % 60) + "\n"; ; JOptionPane.showMessageDialog(null, str); catch(numberformatexception e){ JOptionPane.showMessageDialog(null, "Ej numeriskt!"); public static void main(string[] args){ new Mellantider();

Lösningsförslag PROG2 VT12 Tenta 2012-06-01 Uppgift 2 a) class Adress{ private String ort; private int postnr; private String gata; public Adress(String ort, int postnr, String gata){ this.ort = ort; this.postnr = postnr; this.gata = gata; public String getort() { return ort; public int getpostnr() { return postnr; public String getgata() { return gata; public String tostring(){ return gata + " " + postnr + " " + ort; public boolean equals(object other){ if (other instanceof Adress){ Adress a = (Adress)other; return ort.equals(a.ort) && postnr == a.postnr && gata.equals(a.gata); else return false; public int hashcode(){ return ort.hashcode() * 100000 + postnr + gata.hashcode(); b) static Map<Adress, List<String>> makenamesperaddressmap(map<string, Adress> adresslista){ Map<Adress, List<String>> nymap = new HashMap<Adress, List<String>>(); for(map.entry<string, Adress> me : adresslista.entryset()){ String namn = me.getkey(); Adress adress = me.getvalue(); List<String> namnlista = nymap.get(adress); if (namnlista == null){ namnlista = new ArrayList<String>(); nymap.put(adress, namnlista); // if namnlista.add(namn); // for return nymap; // makenamesperaddressmap

Lösningsförslag PROG2 VT12 Tenta 2012-06-01 Uppgift 3 package maps; import java.util.*; public class ArrayMap<K,V> implements Map<K,V>{ private class Pair{ K key; V value; Pair(K key, V value){ this.key = key; this.value = value; private ArrayList<Pair> data = new ArrayList<Pair>(); private int find(k sought){ for(int i = 0; i < data.size(); i++) if (data.get(i).key.equals(sought)) return i; return -1; public V put(k key, V value){ int pos = find(key); V oldvalue = null; if (pos == -1) data.add(new Pair(key, value)); else { Pair p = data.get(pos); oldvalue = p.value; p.value = value; return oldvalue; public V get(k key){ int pos = find(key); if (pos == -1) return null; else return data.get(pos).value; public V remove(k key){ int pos = find(key); if (pos == -1) throw new NoSuchElementException("Ej hittad vid remove"); Pair p = data.remove(pos); return p.value; public Set<K> keyset(){ Set<K> kset = new HashSet<K>(); for(pair p : data) kset.add(p.key); return kset; public Collection<V> values(){ List<V> vlist = new ArrayList<V>(); for(pair p : data) vlist.add(p.value); return vlist;