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

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

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.

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

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

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

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

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

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

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

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

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

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

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

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

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.

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

Tentamen i Programmeringsteknik I

Tentamen i Programmeringsteknik I

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

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

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

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

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

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.

Del A (obligatorisk för alla)

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

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.

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

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

Del A (obligatorisk för alla)

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Tentamen i Programmeringsteknik I

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Tentamen i Programmeringsteknik I, ES,

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Tentamen. Lösningsförslag

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen, EDAA20/EDA501 Programmering

Laboration A Objektsamlingar

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Tentamen OOP

TENTAMEN OOP

Malmö högskola 2008/2009 CTS

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

TENTAMEN OOP

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

DAT043 Objektorienterad Programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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.

Del A (obligatorisk för alla)

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Tentamen FYTA11 Javaprogrammering

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

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]

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Tentamen i Grundläggande programmering STS, åk 1 fredag

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

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

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.

Chapter 4: Writing Classes/ Att skriva egna klasser.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Att skriva till och läsa från terminalfönstret

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen i Programmering

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

Objektorienterad programmering i Java

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

Lösningsförslag övning 2.

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

Föreläsning REPETITION & EXTENTA

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

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Transkript:

Tentamen Programmeringsteknik I 2014-10-17 Skrivtid: 0800-1300 Hjälpmedel: Java-bok 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. Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer och pin-kod (eller namn om du saknar sådan) på alla papper. Skriv inte längst upp i vänstra hörnet - det går inte att läsa där efter sammanhäftning. Fyll i försättssidan fullständigt. Det är principer och idéer som är viktiga. Skriv så att du övertygar examinator om att du har förstått dessa även om detaljer kan vara felaktiga. Alla uppgifter gäller programmeringsspråket Java och programkod skall skrivas i Java. Koden skall vara läslig dvs den skall vara vettigt strukturerad och indenterad. Namn på variabler, metoder, klasser etc skall vara beskrivande men kan ändå hållas ganska korta. Observera att poängavdrag bland annat kan göras för icke-privata instansvariabler, dålig läslighet, upprepning av identisk kod och underlåtenhet att utnyttja given eller egen tidigare skriven metod. Det är tillåtet att lägga till egna metoder om så behövs. Sådana metoder skall dokumenteras och motiveras. De skall också ha en bra design och t ex inte förstöra objektens integritet. Det är totalt 30 poäng på skrivningen. Betygsgränser: 16 räcker säkert till 3, 22 säkert till 4, 27 säkert till 5. Lycka till! Torsten och Tom

Uppgifter 1. Nedanstående, inte helt korrekta, klass skall representera en tärning: En tärning har alltså två attribut: antal sidor som ges när tärningen skapas och ett värde tilldelas varje gång tärningen slås (metoden roll) När main-metoden körs är det meningen att utskriften ska se ut på följande sätt: Dice with 7 sides: 1, 4, 3, 4, 4, 4, 3, 6, 1, 6, 1, 1, 7, 5, 7, 4, 1, 1, 4, 3, a) När programmet kompileras erhålles följande felutskrifter: 2 errors found: File: Dice.java [line: 11] Error: Dice.java:11: possible loss of precision found : double required: int File: Dice.java [line: 24] Error: Dice.java:24: unexpected type required: variable found : value 1

Vad är det som är fel och vad skall det stå? På rad 11 så är this.vale av typen int medan det som står till höger är av typen double. En sådan tilldelning är illegal. Högersidan måste explicit omvandlas till heltalstyp vilket görs med typomvandlingsoperatorn (int): this.value = (int)(math.random()*this.numberofsides + 1); Observera att hela det gamla högerledet måste sättas inom parentes annars verkar bara (int) på Math.random vilket alltid kommer bli 0. b) När dessa kompileringsfel rättats ger en körning följande utskrifter: Dice with 7 sides: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, Eftersom detta resultat erhålles varje gång programmet körs är slutsatsen att det måste vara något fel i koden. Vad är felet? Förklara resultatet! Rätta felet! (2p) Felet ligger på rad 6 (i konstruktorn). Eftersom det står (int) framför numberofsides så blir detta en lokal variabel i konstruktorn som inte ändrar på instansvariabeln numberofsides. Lösning är att ta bort (int). Anmärkning: Om man missade att sätta parenteser kring det gamla högerledet i föregående uppgift så får man också svaret 1 men det räcker alltså inte som förklaring. 2. Nedanstående (del av) klass skall representera en mängd med 6-sidiga tärningar. 2

Antalet tärningar ges alltså när objekt skapas. a) När klassen kompileras kommer följande felutskrift: 1 error found: File: SetOfDice.java [line: 10] Error: SetOfDice.java:10: cannot find symbol symbol : variable numberofdice location: class Dice[] Vad är felet och vad skall det stå? På rad 10 finns ingen numberofdice. Den numberofdice som finns i konstruktorn är ett namn på den formella parametern och den finns bara i konstruktorn. Problemet kan lösas på två sätt: Antingen deklarerar man en instansvariabel med namnet numberofdice och ger den värde i konstruktorn: this.numberofdice = numberofdice eller så använder man arraylängden på rad 10: for (int i=0; i<thedice.length; i++) b) När felet är rättat går programmet att kompilera men körning ger följande resultat java.lang.nullpointerexception at SetOfDice.toString(SetOfDice.java:11) at java.lang.string.valueof(string.java:2826) at java.io.printstream.println(printstream.java:771) at SetOfDice.main(SetOfDice.java:21) Vad är fel? Rätta felet så att programmet producerar en utskrift i stil med: 3

(2, 6, 1, 4, 5, 2, 1, 6, 2, 5) Instansvariabeln thedice är en array som skapas i konstruktorn. Arrayens komponenter har dock inte skapas utan alla dessa blir satta till null. I konstruktorn måste man alltså gå igenom alla komponenter och tilldela dem ett Dice-objekt: for (int i=0; i<numberofdice; i++) { this.thedice[i] = new Dice(6); 3. Du skall skriva en klass Article som representerar en artikel i ett varulager. En vara skall ha ett artikel-id (heltal), ett antal (heltal) som anger hur många exemplar av denna vara som finns och ett pris (flyttal). Skriv klassen Article med följande a) Tre instansvariabler för artikel-id, antal och pris. b) En konstruktor som tar emot artikel-id, antal och pris c) En konstruktor som tar emot artikel-id och pris och som sätter antal till 0. d) get-metoder för antal och pris. e) En tostring-metod. Se körexemplet nedan! f) En metod setprice(double newprice) som ger en vara ett nytt pris. g) En metod addnumber(int number) som ökar antalet exemplar med number h) En public boolean equals(article a) som returnerar true om denna vara har samma idummer som varan a, annars false. Testprogram: Utskrifter: public static void main(string[] args) { Article a = new Article(2526, 10, 5.52); Article b = new Article(1357, 100, 565.25); Article c = new Article(1357, 44, 489); System.out.println("a: " + a); System.out.println("b: " + b); System.out.println("c: " + c); a.addnumber(5); System.out.println("a: " + a); System.out.println("a.equals(b): " + a.equals(b)); System.out.println("a.equals(c): " + a.equals(c)); System.out.println("b.equals(c): " + b.equals(c)); a: <2526, 10, 5.52> b: <1357, 100, 565.25> c: <1357, 44, 489.0> a: <2526, 15, 5.52> a.equals(b): false a.equals(c): false b.equals(c): true a.setprice(a.getprice()*2); // Double the price System.out.println("a: " + a); a: <2526, 15, 11.04> 4

(8p) public class Article { private int id; private int number; private double price; public Article(int id, int number, double price) { this.id = id; this.number = number; this.price = price; public Article(int id, double price) { this.id = id; this.number = 0; this.price = price; public int getid() { // Efterfrågades inte här men behövs i uppgift 4 return id; public int getnumber() { return number; public double getprice() { return price; public void setprice(double newprice) { price = newprice; public void addnumber(int n) { number += n; public String tostring() { return "<" + id + ", " + number + ", " + price + ">"; public boolean equals(article a) { return this.id == a.id; 4. Skriv klassen Store som lagrar ett antal Article-objekt. Ett Store-objekt skall ha ett namn (String) och ett varulager (en ArrayList med Article-objekt). Klassen skall ha följande: 5

a) En konstruktor som tar emot butikens namn och skapar ett (tomt) varulager. public class Store { private String name; private ArrayList<Article> storage; public Store(String name) { this.name = name; this.storage = new ArrayList<Article>(); b) En print-metod som fungerar enligt nedanstående körexemplet. public void print() { System.out.println("\nContents of " + this.name); for (Article a: this.storage) { System.out.println(a); eller, med en annan variant av for-satsen: for (int i=0; i<this.storage.size(); i++) { System.out.println(a.get(i)); c) En metod int searchindex(int id) som returnerar index för vara med angivet artikel-id eller -1 om varan inte finns. private int searchindex(int id) { for (int i=0; i<this.storage.size(); i++) { if (this.storage.get(i).getid()==id) { return i; return -1; d) En metod int Article search(int id) som returnerar varan med angivet artikel- 6

id eller null om varan inte finns. public Article search(int id) { int index = this.searchindex(id); if (index == -1) { return null; else { return this.storage.get(index); // Use the method above e) En metod boolean addnewarticle(int id, int number, double price) som lägger in en ny vara med angivet id, antal och pris. Varan skall läggas sist i varulagret. Om varan redan finns skall en utskrift göras och inget ändras. Om det gick bra att lägga in varan skall metoden returnera true, annars false. public boolean addnewarticle(int id, int number, double price) { Article article = this.search(id); if (article!=null) { System.out.println("*** Already in storage: " + id); return false; else { this.storage.add(new Article(id, number, price)); return true; f) En metod double totalvalue()) som beräknar och returnerar det totala värdet av varulagret dvs summan av produkterna av varje artikels antal och pris. public double totalvalue() { double sum = 0; for (Article a: this.storage) { sum += a.getprice()*a.getnumber(); return sum; Se testprogrammet på nästa sida! 7

Testprogram: Store store1 = new Store("Lisas livs"); store1.addnewarticle(256, 3, 54.); store1.addnewarticle(213, 7, 126.); store1.addnewarticle(156, 18, 17.70); store1.print(); store1.addnewarticle(256, 30, 25); store1.print(); System.out.println("Article 156: " + store1.search(156)); System.out.println("213 is at index " + store1.searchindex(213)); System.out.println("Total value: " + store1.totalvalue()); Utskrifter: Contents at Lisas livs <256, 3, 54.0> <213, 7, 126.0> <156, 18, 17.7> Already in storage: 256 Contents at Lisas livs <256, 3, 54.0> <213, 7, 126.0> <156, 18, 17.7> Article 156: <156, 18, 17.7> 213 is at index 1 Total value: 1362.6 5. I föregående uppgift lades nya artiklar in sist i arraylistan. Vanligt är dock att man vill hålla listan sorterad. a) Skriv en metod boolean insertnewarticle(int id, int antal, double price) som fungerar som metoden addnewarticle ovan, men ser till att listan blir sorterad i ordning efter artikel-id. En förutsättning för att det skall fungera är alltså att man hela tiden använder den metoden för att lägga till nya varor. Så här kan en körning alltså se ut: Testprogram: Store store2 = new Store("Arnes livs"); store2.insertnewarticle(5, 3, 25.50); store2.insertnewarticle(2, 7, 126.); store2.insertnewarticle(6, 18, 17.70); store2.insertnewarticle(1, 30, 25); store2.insertnewarticle(3, 9, 9); store2.print(); Utskrifter: Contents of Arnes livs <1, 30, 25.0> <2, 7, 126.0> <3, 9, 9.0> <5, 3, 25.5> <6, 18, 17.7> store2.insertnewarticle(3, 9, 9); store2.print(); *** Already in storage: 3 Contents of Arnes livs <1, 30, 25.0> <2, 7, 126.0> <3, 9, 9.0> <5, 3, 25.5> <6, 18, 17.7> 8

public void insertnewarticle(int id, int number, double price) { // Find the position int i = 0; while (i<storage.size() && id>storage.get(i).getid()) { i++; // Check if it is a new article if (i==storage.size() id<storage.get(i).getid()) { storage.add(i, new Article(id, number, price)); else { System.out.println("*** Already in storage: " + id); Observera att ordningen på testerna både i while- och if-satserna är väsentlig! b) Skriv en metod Store order() som skapar ett nytt Store-objekt där varorna är sorterade. Koden Store store3 = store1.order(); store3.print(); skall alltså skapa ett nytt Store-objekt med samma namn och samma varor som store1 men där varorna är lagrade sorterade på artikel-id. public Store order() { Store orderedstore = new Store(this.name); for (Article a: storage) { orderedstore.insertnewarticle(a.getid(), a.getnumber(), a.getprice()); return orderedstore; 9