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.

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 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 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

Tentamen i Programmeringsteknik I

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.

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 ä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

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

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

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

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.

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

Del A (obligatorisk för alla)

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

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.

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

Tentamen i Programmeringsteknik I

LyckaTill önskar Anna

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

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.

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.

TENTAMEN OOP

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

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Presentation av trafiksimuleringsprojektet

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]

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

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

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)

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

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

Föreläsning 3-4 Innehåll

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

PROGRAMMERING-Java TENTAMINA

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

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

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

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

Tentamen i Programmeringsteknik I, ES,

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Tentamen i Programmeringsteknik MN

Tentamen OOP

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

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

Malmö högskola 2008/2009 CTS

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Objektorienterad programmering i Java

Föreläsning 8: Exempel och problemlösning

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

Tentamen i Programmering

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

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

Presentation av trafiksimuleringsprojektet

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

TENTAMEN OOP

Föreläsning 4 Innehåll

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

2D1342 Programkonstruktion för F1, ht 2006

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

Föreläsning 3. Stack

public boolean containskey(string key) { return search(key, head)!= null; }

Laboration A Objektsamlingar

TENTAMEN OOP

Föreläsning 6: Metoder och fält (arrays)

OOP Objekt-orienterad programmering

Rekursion och induktion för algoritmkonstruktion

Tentamen. Lösningsförslag

Redovisning av inlämningsuppgifter

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Transkript:

Tentamen Programmeringsteknik I 2012-06-04 Skrivtid: 1400-1700 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. Programkod 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. Det är totalt 30 poäng på skrivningen. Betygsgränser: 15 ger säkert 3, 21 ger säkert 4, 26 ger säkert 5. Lycka till! Tom 1

Uppgifter 1. För vart och ett av punkterna A till H skall du ange det alternativ 1-14 som passar. Ange bara ett alternativ! Om du tycker att flera alternativ passar så välj det som passar bäst! 1. Måste ha en konstruktor 2. double A. lokal variabel B. instansvariabel C. formell parameter D. aktuell parameter E. while-sats F. omslagsklass G. primitiv datatyp H. villkorsuttryck (boolskt uttryck) 3. true 4. String 5. Deklareras i en metodkropp 6. ArrayList 7. Deklareras i ett metodhuvud 8. En iterationskonstruktion 9. array 10. En lyssnare 11. Kan ha olika värden för olika objekt 12. Anges vid metodanrop 13. x = 4 14. Ingen beskrivning passar bra (4p) 2

2. Nedan finns en klass Clock som representerar en klocktid i timmar, minuter och sekunder. Konstruktorn sätter initialvärden på tiden. Metoden tick() ökar klockslaget med en sekund. Metoden skall också hantera minut- och timgränser så att minutoch sekundvärdena alltid ligger mellan 0 och 59. Se körexemplet! main-metoden testar klassen genom att stega fram ett antal gånger och hämtar och skriver klockslagen vid lite olika tidpunkter. a) Skriv klar konstruktorn (2p) b) Skriv klar metoden tick (4p) c) Vilka värden har instansvariablerna efter det sista, felaktiga, konstruktoranropet? (2p) Koden: public class Clock { private int sec; private int min; private int hour; public Clock(int hour, int min, int sec) { if (min<0 min>=60 sec<0 sec>=60 hour<0) { System.out.println("Illegal initial values for Clock"); else { // Uppgift a public int getsec() { return sec; public int getmin() { return min; public int gethour() { return hour; public void tick() { /* Uppgift b */ public static void main(string[] args) { Clock c = new Clock(0, 59, 57); for (int i = 1; i<=100; i++) { c.tick(); if ( i<6 i%13==0) System.out.format("%d:%02d:%02d\n", c.gethour(), c.getmin(), c.getsec()); System.out.format("%d:%02d:%02d\n", c.gethour(), c.getmin(), c.getsec()); c = new Clock(0, -10, 123); // Uppgift c: Vilka värden har instansvariablerna nu? Output: 0:59:58 0:59:59 1:00:00 1:00:01 1:00:02 1:00:10 1:00:23 1:00:36 1:00:49 1:01:02 1:01:15 1:01:28 1:01:37 Illegal initial values for Clock Anm: Det är inte nödvändigt att förstå hur format-metoden fungerar. Den hämtar tim-, minut- och sekundvärden med hjälp av get-metoderna och skriver sedan ut dessa värden (med inledande nolla vid behov) 3

3. En stack är en mekanism för att lagra och hämta poster på så sätt att den senast lagrade, ännu ej uttagna, posten är den som står på tur att tas ut. Det är alltså en slags kö där den som kommit sist får lämna först. Man kan lika det vid en trave där man alltid både lägger och hämtar överst. (Ett annat namn är LIFO som står för Last In, First Out. En vanlig kö kallas med andra ord en FIFO First In, First Out.) Nedan finns (delar av) en klass som implementerar en stack med hjälp av en array. För enkelhetens skull lagrar denna stack heltal i verkligheten har man vanligen andra datatyper. I koden finns också en main-metod och angiven output. import java.util.scanner; public class Stack { private int [] stack; // För att lagra värdena private int ; // Antal lagrade värden tillika index för första lediga plats /** Skapa en stack med plats för n värden */ public Stack(int n) { /* Uppgift a */ /** Lagra ett nytt värde överst på stacken */ public void push(int v) { /* Uppgift b */ /** Hämta översta värdet från stacken och ta bort det */ public int pop() { /* Uppgift c */ /** Lagra ett värde överst på stacken. Utöka arrayen vid behov */ public void safepush(int v) { /* Uppgift d */ public String tostring() { String ret = ""; for (int i= 0; i<; i++) ret = ret + stack[i] + " "; return "[ " + ret + "]"; /** Returnera antalet lagrade element tillika index för första lediga plats */ public int size() { return ; public static void main(string[] arg) { Scanner sc = new Scanner(System.in); Stack s = new Stack(8); // Se fig 1 s.push(3); System.out.println("Efter en push : " + s); // Se fig 2 s.push(7); s.push(5); s.push(8); System.out.println("Efter ytterligare 3 push: " + s); // Se fig 3 System.out.println("Första pop ger värdet : " + s.pop()); System.out.println("och stackutseendet : " + s); // Se fig 4 System.out.print("Poppa resten: "); while (s.size()>0) System.out.print(s.pop() + " "); System.out.println(); /** Output: Efter en push : [ 3 ] Efter ytterligare 3 push: [ 3 7 5 8 ] Första pop ger värdet : 8 och stackutseendet : [ 3 7 5 ] Poppa resten: 5 7 3 */ Förklarande figurer finns på nästa sida. 4

Arrayens utseende efter konstruktorn (fig 1): 0 1 2 3 4 5 6 7 efter första push (fig 2): 3 0 1 2 3 4 5 6 7 använd del efter ytterligare tre push (fig 3): 3 7 5 8 0 1 2 3 4 5 6 7 använd del och efter första pop (fig 4): 3 7 5 8 0 1 2 3 4 5 6 7 använd del (Värdet 8 finns kvar i arrayen men inte i den använda delen.) a) Implementera konstruktorn Stack(int n) så att den skapar en stack med plats för n tal. (2p) b) Skriv klar metoden push(int v) som lagrar v överst på stacken. Om stacken är full skall en felutskrift ges och inget lagras. (3p) c) Skriv klar metoden pop() som tar bort det översta värdet från stacken och returnerar det ( tar bort betyder att värdet inte skall returneras igen - det går ju inte att fysiskt ta bort array-emenetet). Ge felutskrift om operationen inte går att utföra! (3p) d) Skriv klar metoden safepush(int v) som gör som push men, vid behov, utökar stacken med en faktor 2. I exemplet innebär det att stacken vid det nionde anropet av safepush utökas till 16 platser. Det som redan finns lagrat skall givetvis finnas med i den utökade stacken. (4p) 5

4. En köteoretiker som är lite osäker på teorin vill experimentera med hjälp av tidsstegad datorsimulering. Vid varje tidsteg är sannolikheten a (0 < a < 1) att det anländer ett objekt till kön. Oberoende av detta försöker man vid varje tidssteg med sannolikheten b (0 < b < 1) ta ut en ett objekt ur kön. (Om kön är tom går det naturligtvis inte ta ut något.) Teoretikern vill veta hur många objekt som kommit ut ur kön och hur lång tid de i genomsnittligt tillbringat i kön. Nedan finns klassen Queue som representerar en kö med objekt av typen Qelem. Dokumentationen saknas dock varför man bör läsa koden för att förstå vad den gör. Skriv en klass Simulation med en main-metod. Metoden skall läsa in två sannolikheter a och b, skapa ett Queue-objekt och genomföra simuleringen i 500 tidssteg. Vid vart hundrade tidssteg skall programmet skriva hur många objekt som tagits ut samt hur lång tid dessa i genomsnitt har tillbringat i kön. Se exempelkörningen! Klasserna Queue och Qelem: import java.util.arraylist; public class Queue { private ArrayList<Qelem> q; public Queue() { q = new ArrayList<Qelem>(); public void put(qelem e) { q.add(e); public class Qelem { private int borntime; public Qelem(int born) { borntime = born; public int getborn() { return borntime; public Qelem get() { Qelem e = q.get(0); q.remove(0); return e; public int size() { return q.size(); Exempel på körresultat: Ankomstsannolikhet: 0.5 Uttagssannolikhet : 0.5 Tidssteg: 100 Antal element ut: 49 Genomsnittstid : 3.3061225 Tidssteg: 200 Antal element ut: 88 Genomsnittstid : 11.261364 Tidssteg: 300 Antal element ut: 142 Genomsnittstid : 14.697183 Tidssteg: 400 Antal element ut: 188 Genomsnittstid : 20.122341 Tidssteg: 500 Antal element ut: 234 Genomsnittstid : 25.41453 (6p) 6