PROG2 Tenta 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, 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

SP:PROG3 HT12 Tenta

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

TENTAMEN OOP

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

Lösningsförslag till tentamen

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

OOP Tenta

OOP Tentamen

OOP Tentamen

TENTAMEN OOP

Laboration 24 Databasen MySQL och java

DAT043 Objektorienterad Programmering

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

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

OOP Tentamen

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Lösningsförslag tentamen FYTA11 Java

Mer om grafiska komponenter. Händelsestyrda program

Lösningar för tenta 3 DAT043,

Lösningsförslag till tentamen

Tentamen FYTA11 Javaprogrammering

Tentamen. Lösningsförslag

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

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

Lösningsförslag till tentamen

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

TENTAMEN OOP

OOP Omtenta

Tentamen, EDAA10 Programmering i Java

OOP Omtenta

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

kl

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

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 3: Händelsestyrda program och användargränssnitt

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamen i Programmering

Laboration 13, Arrayer och objekt

Tentamen OOP

Lösningsförslag till tentamen FYTA11 Javaprogrammering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

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

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

OOP Exempel Tentamen 2007

PROGRAMMERINGSTEKNIK TIN212

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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 Programmeringsteknik För Ing. - Java, 5p

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

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

Laboration 15 Grafiskt användargränssnitt

Lösningsförslag till tentamen

OOP Objekt-orienterad programmering

Repetition av OOP- och Javabegrepp

Malmö högskola 2008/2009 CTS

LÖSNINGSFÖRSLAG TENTAMEN

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

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

Tentamen för TTIT71 Programmering kl Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

Repetition av OOP- och Javabegrepp

OOP Tenta

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)

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Lösningsförslag till tentamen

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Lösningsförslag till tentamen

PROGRAMMERINGSTEKNIK för F1 och TM1 (TIN212)

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

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

2 b) Följande finns definierat: import java.awt.*; public class Uppgift1b public static void main(string[] mupp) Color färg = Color.blue; Bil[] bilar

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.

Tentamen FYTA11 Javaprogrammering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

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

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Objektorienterad programutveckling, fk

Rita Egna Bilder, Timer

OOP Objekt-orienterad programmering

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

OOP Omtenta

Transkript:

DSV SU/KTH sid 1 (7) PROG2 PROG2 Tenta 2014-06-03 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 (11 poäng) Denna uppgift går ut på att komplettera ett litet program för beräkning av bränslekostnad. Programmet ska skapa ett fönster med ett utseende som försöker likna en bensinpump: De tre knapparna i mitten anger vilken sorts bränsle man vill köpa: blyfri bensin, E85-etanol eller dieselolja. Blyfri bensin förekommer i två varianter: 95-oktanig och 98-oktanig vilket man väljer med radioknappar under knappen för blyfri bensin. Användaren ska mata in hur mycket bränsle (i liter, heltal) hen vill köpa i textfältet med rubriken "Volym:" och trycka på någon av knapparna, varpå programmet ska beräkna beloppet och visa det efter rubriken "Belopp:": Bränslepriserna ska vara hårdkodade i programmet enligt följande tabell: Blyfri 95 Blyfri 98 E85 Diesel 14.63 15.28 9.29 14.17 Om volym-fältet inte innehåller siffror när användaren trycker på någon av knapparna ska det stå "FEL!" efter rubriken "Belopp:". På nästa sida finns koden som du ska komplettera.

DSV SU/KTH sid 4 PROG2 Nedan finns koden till klassen Bensin 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 Bensin extends JFrame{ 5 6 Bensin(){ 7 super("bensin"); 8 9 JPanel mitten = new JPanel(); 10 mitten.setlayout(new GridLayout(1,3,5,5)); 11 add(mitten, BorderLayout.CENTER); 12 13 JPanel radioknappar = new JPanel(); 14 ButtonGroup bg = new ButtonGroup(); 15 JRadioButton bf95button = new JRadioButton("95",true); 16 radioknappar.add(bf95button); 17 bg.add(bf95button); 18 JRadioButton bf98button = new JRadioButton("98"); 19 radioknappar.add(bf98button); 20 bg.add(bf98button); 21 JPanel blyfripanel = new JPanel(); 22 blyfripanel.setlayout(new BorderLayout()); 23 blyfripanel.add(radioknappar, BorderLayout.SOUTH); 24 blyfripanel.add(new JButton("Blyfri")); 25 mitten.add(blyfripanel); 26 mitten.add(new JButton("E85")); 27 mitten.add(new JButton("Diesel")); 28 29 JPanel nere = new JPanel(); 30 nere.add(new JLabel("Volym:")); 31 nere.add(new JTextField(10)); 32 nere.add(new JLabel("Belopp:")); 33 nere.add(new JLabel("0")); 34 add(nere, BorderLayout.SOUTH); 35 36 setdefaultcloseoperation(exit_on_close); 37 setsize(400, 250); 38 setvisible(true); 39 40 41 public static void main(string[] args){ 42 new Bensin(); 43 44

DSV SU/KTH sid 5 PROG2 Uppgift 2 (11 poäng) I ett Java-program vill man representera personer identifierade med personnummer. Personnr resp. personer representeras med objekt av följande två klasser (klassen Personnr behöver kompletteras i denna uppgift): class Personnr{ private int datum, nr; // födelsedatum resp. löpnr public Personnr(int datum, int nr){ this.datum = datum; this.nr = nr; public int getdatum(){ return datum; public int getnr(){ return nr; public String tostring() { return ""+datum+"-"+nr; // Personnr class Person{ private Personnr pnr; private String namn; private double provvärde; public Person(Personnr pnr, String namn, double provvärde){ this.pnr = pnr; this.namn = namn; this.provvärde = provvärde; public Personnr getpnr() { return pnr; public String getnamn() { return namn; public double getprovvärde() { return provvärde; public String tostring() { return pnr+" "+namn; // Person a) Man vill kunna samla Person-objekt identifierade med Personnr i olika Map:ar. För att detta ska fungera måste klassen Personnr förberedas - modifiera klassen Personnr så att den kan användas som nyckel i både HashMap och TreeMap. b) Man behöver nu en metod public static void skrivut(map<personnr, Person> folk, int ordning); som ska kunna skriva ut information om personerna i Map:en folk i den sorteringsordning som framgår av argumentet ordning: om ordning är 0 så ska folk vara sorterade i stigande ordning efter personnr (äldsta först) om den är 1 så ska folk vara sorterade i avtagande ordning efter personnr (yngsta först) om den är 2 så ska de vara sorterade i alfabetisk ordning efter namn om den är 3 så ska de vara sorterade i stigande ordning efter provvärdet Utskriften ska ske till System.out. Skriv metoden skrivut.

DSV SU/KTH sid 6 PROG2 Uppgift 3 (16 poäng) Denna uppgift går ut på att skriva ett generiskt gränssnitt (interface) Matrix<E> (matris på svenska) och en generisk klass SparseMatrix<E> (gles matris) som implementerar detta gränssnitt. Bakgrund: en matris är ju en tvådimensionell uppställning av element i rader och kolumner, t.ex. På nästa sida finns koden för en klass FullMatrix där en sådan matris har byggts in i en klass och där elementen är strängar istället för int:ar. Den har en konstruktor som tar som argument antalet rader och antalet kolumner. Den har också metoderna get som tar radnummer och kolumnnummer och returnerar strängen på den platsen set som tar radnr, kolumnnr och en sträng och sätter strängen på den platsen i matrisen tostring som returnerar en lång sträng med radvis textrepresentation av matrisen I många tillämpningar behöver man matriser som är mycket stora men glesa, d.v.s. på de flesta platser har de inga värden. Man kan då spara på minnesutrymme genom att endast lagra värden för de platser som inte är tomma, och lagra deras radnummer och kolumnnummer också. Ovanstående matris skulle då kunna lagras på något sätt så här: Din uppgift är att skriva en sådan klass SparseMatrix som utåt beter sig precis som FullMatrix men som internt lagrar bara sådana element som har fått ett värde (genom anrop av metoden set). Du får själv välja hur elementen ska lagras internt, men helst ska man snabbt kunna hitta ett element om man vet dess rad och kolumn. SparseMatrix ska vara generisk: elementypen ska kunna vara vilken referenstyp som helst. Metoden get ska returnera elementet på den angivna raden och kolumnen, om man inte har lagrat något där så ska den returnera null. Om radnr eller kolumnr är större än de värden man har angett till konstruktorn ska undantaget IndexOutOfBounds kastas. Metoden set ska lagra angivet värde så att det kan hittas med den angivna raden och kolumnen. Även den ska kasta undantaget IndexOutOfBounds om radnr eller kolumnnr är större än de som angetts till konstruktorn. Glöm inte att även utrusta SparseMatrix med metoden tostring() den returnerade strängen ska innehålla radvis representation av matrisen på samma sätt som FullMatrix:s tostring() gör. De saknade värdena ska visas med strängen "null" (Java omvandlar null-refrenser till denna sträng). Skriv dessutom ett generiskt gränssnitt (interface) Matrix som ska deklarera funktionaliteten hos SparseMatrix och FullMatrix (om FullMatrix hade gjorts generisk). Se till att din SparseMatrix deklarerar att den uppfyller detta gränssnitt.

DSV SU/KTH sid 7 PROG2 Nedan följer koden för klassen FullMatrix. Din SparseMatrix ska alltså ha samma funktionalitet och bete sig på samma sätt utåt, men internt ska den lagra bara de elementen som har fått ett värde. Dessutom ska den vara generisk: elementtypen ska vara generisk parameter istället för att vara String. public class FullMatrix{ private int norows, nocols; private String[][] data; public FullMatrix(int rows, int cols){ norows = rows; nocols = cols; data = new String[noRows][noCols]; public String get(int rindex, int cindex){ return data[rindex][cindex]; public void set(int rindex, int cindex, String value){ data[rindex][cindex] = value; public String tostring(){ String str = ""; for(int i = 0; i < norows; i++){ for(int j = 0; j < nocols; j++) str += data[i][j] + " "; str += "\n"; return str;

Lösningsförslag PROG2 tenta 2014-06-03 Uppgift 1 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; class Bensin extends JFrame{ static final String[] SORTER={"Blyfri95","Blyfri98","E85","Diesel"; static final double[] PRISER={14.73, 15.13, 10.48, 15.29; Map<String, Double> sortpris = new HashMap<String, Double>(); JRadioButton bf95knapp, bf98knapp; JTextField volymfält; JLabel belopplabel; Bensin(){ super("bensin"); for(int i=0; i<sorter.length; i++) sortpris.put(sorter[i], PRISER[i]); JPanel mitten = new JPanel(); mitten.setlayout(new GridLayout(1,3,5,5)); add(mitten, BorderLayout.CENTER); JPanel radioknappar = new JPanel(); ButtonGroup bg = new ButtonGroup(); bf95knapp = new JRadioButton("95",true); radioknappar.add(bf95knapp); bg.add(bf95knapp); bf98knapp = new JRadioButton("98"); radioknappar.add(bf98knapp); bg.add(bf98knapp); JPanel blyfripanel = new JPanel(); blyfripanel.setlayout(new BorderLayout()); blyfripanel.add(radioknappar, BorderLayout.SOUTH); KnappLyss kl = new KnappLyss(); JButton bfknapp = new JButton("Blyfri"); blyfripanel.add(bfknapp); bfknapp.addactionlistener(kl); mitten.add(blyfripanel); JButton e85knapp = new JButton("E85"); mitten.add(e85knapp); e85knapp.addactionlistener(kl); JButton dieselknapp = new JButton("Diesel"); mitten.add(dieselknapp); dieselknapp.addactionlistener(kl); JPanel nere = new JPanel(); nere.add(new JLabel("Volym:")); volymfält = new JTextField(10); nere.add(volymfält); nere.add(new JLabel("Belopp:")); belopplabel = new JLabel("0"); nere.add(belopplabel); add(nere, BorderLayout.SOUTH); setdefaultcloseoperation(exit_on_close); setsize(400, 200); setvisible(true);

Lösningsförslag PROG2 tenta 2014-06-03 class KnappLyss implements ActionListener{ public void actionperformed(actionevent ave){ try{ int volym = Integer.parseInt(volymFält.getText()); JButton b = (JButton)ave.getSource(); String sort = b.gettext(); if (sort.equals("blyfri")) sort += (bf95knapp.isselected())? "95" : "98"; double belopp = volym * sortpris.get(sort); belopplabel.settext(string.format("%.2f", belopp)); catch(numberformatexception e){ belopplabel.settext("fel!"); public static void main(string[] args){ new Bensin(); Uppgift 2 a) class Personnr implements Comparable<Personnr>{ private int datum, nr; public Personnr(int datum, int nr){ this.datum = datum; this.nr = nr; public int getdatum(){ return datum; public int getnr(){ return nr; public String tostring() { return ""+datum+"-"+nr; public boolean equals(object other){ if (other instanceof Personnr){ Personnr pnr = (Personnr)other; return datum == pnr.datum && nr == pnr.nr; else return false; public int hashcode(){ return datum*10000 + nr; public int compareto(personnr other){ int cmp = datum - other.datum; if (cmp!= 0) return cmp; return nr - other.nr;

Lösningsförslag PROG2 tenta 2014-06-03 b) class PnrStigandeCmp implements Comparator<Person>{ public int compare(person p1, Person p2){ return p1.getpnr().compareto(p2.getpnr()); class PnrAvtagandeCmp implements Comparator<Person>{ public int compare(person p1, Person p2){ return p2.getpnr().compareto(p1.getpnr()); class NamnCmp implements Comparator<Person>{ public int compare(person p1, Person p2){ return p1.getnamn().compareto(p2.getnamn()); class ProvCmp implements Comparator<Person>{ public int compare(person p1, Person p2){ if (p1.getprovvärde() < p2.getprovvärde()) return -1; else if (p1.getprovvärde() > p2.getprovvärde()) return 1; else return 0; public static void skrivut(map<personnr, Person> folk, int ordning){ List<Person> lista = new ArrayList<Person>(folk.values()); switch(ordning){ case 0: Collections.sort(lista, new PnrStigandeCmp()); break; case 1: Collections.sort(lista, new PnrAvtagandeCmp()); break; case 2: Collections.sort(lista, new NamnCmp()); break; case 3: Collections.sort(lista, new ProvCmp()); break; default: throw new IllegalArgumentException("Fel ordningskod!"); for(person p : lista) System.out.println(p);

Lösningsförslag PROG2 tenta 2014-06-03 Uppgift 3 public interface Matrix<T>{ T get(int rindex, int cindex); void set(int rindex, int cindex, T value); import java.util.*; class SparseMatrix<T> implements Matrix<T>{ private int norows, nocols; private Map<Integer, T> data = new HashMap<Integer, T>(); public SparseMatrix(int rows, int cols){ norows = rows; nocols = cols; public T get(int rindex, int cindex){ if (rindex > norows cindex > nocols) throw new IndexOutOfBoundsException(); int key = rindex * nocols + cindex: return data.get(key); public void set(int rindex, int cindex, T value){ int key = rindex * nocols + cindex: data.put(key, value); public String tostring(){ String str = ""; for(int i = 0; i < norows; i++){ for(int j = 0; j < nocols; j++) str += get(i,j) + " "; str += "\n"; return str;