(n 1)(n) 2 för n 1, dvs att tidskomplexiteten är kvadratisk i värsta fall. 0 + 1 + 2 +... + (n 1) =



Relevanta dokument
a) Vad menas helt kort med (a) (beräknings-) problem?

c = s[2]; /* move chars around */ p = &s[2]; *p = *(p-1); --p; *p = *(p-1); s[0] = c; printf("%s\n",s); /* print the string */ English version

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Kurskod D0010E Datum Skrivtid 5tim

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

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

OOP Objekt-orienterad programmering

Tentamen OOP

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

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

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

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

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

TENTAMEN OOP

TENTAMEN OOP

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

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

Objektorienterad Programmering (TDDC77)

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

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

Repetition av OOP- och Javabegrepp

Tentamen i Algoritmer & Datastrukturer i Java

Repetition av OOP- och Javabegrepp

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

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

Datastrukturer. föreläsning 3. Stacks 1

Kurskod SMD135 (SMD064) Datum Skrivtid 4 tim

Kurskod SMD135 (SMD064) Datum Skrivtid 4 tim

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

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

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

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

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

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

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

Objektorienterad Programmering (TDDC77)

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

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

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

TENTAMEN OOP

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

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

List.java. List.java. Printed by Tom Smedsaas

Malmö högskola 2008/2009 CTS

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

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

LULEÅ TEKNISKA UNIVERSITET

TDDC77 Objektorienterad Programmering

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

F4. programmeringsteknik och Matlab

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

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

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

Föreläsning 3. Stack

Classes och Interfaces, Objects och References, Initialization

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

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

Tentamen i Objektorienterad programmering

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

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

DAT043 Objektorienterad Programmering

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

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

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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.

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tentamen i Algoritmer & Datastrukturer i Java

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

c) Vad skrivs ut då nedanstående C-program körs? main(){ int b[7] = {1,2,3,4,0,6,7}, *p, s=0;

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.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Grammatik. BNF-grammatik

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Länkade strukturer, parametriserade typer och undantag

Händelsestyrd simulering. Inledning. Exempel

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Transkript:

LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad design Totala antalet uppgifter: 6 Lärare: Håkan Jonsson, Tomas Johansson, 491700, 491465 Resultatet anslås senast 2006-05-20 i A-huset. Tillåtna hjälpmedel: Inga. Kurskod SMD167 Datum 2006-05-05 Skrivtid 5 tim 1. Teori a) Förklara helt kort skillnaden mellan begreppen problem och instans. (1p) b) Skriv ner två funktioner f 1 (n) och f 2 (n) sådana att f 1 (n) O(n log n) men f 2 (n) O(n log n). (2p) c) I insättningssortering (Insertion Sort) får man i värsta fall lov att spendera i 1 jämförelser mellan element för att hitta var i den sorterade sekvensen som element nummer i ska vara. Om indata totalt består av n element tar metoden därför i värsta fall 0 + 1 + 2 +... + (n 1) jämförelser. Bevisa med induktion över n att 0 + 1 + 2 +... + (n 1) = (n 1)(n) 2 för n 1, dvs att tidskomplexiteten är kvadratisk i värsta fall. 2. Programspråksteori (2p) a) Antag att man i C skriver en funktion void swap(int a,int b) med syftet att två heltalsvariabler ska byta värden med varandra. (a) Varför är detta meningslöst? (0.5p) (b) Hur skulle man istället gjort för att metoden skulle ha avsedd effekt? (0.5p) b) Vad gör följande C-funktion? void mysteryfunction( char* a, char* b ) { while (*a!= \0 ){ a++; while (*b!= \0 ){ *a++ = *b++); (1p) c) Vad betyder det att en variabel deklareras static i Java? (1p) d) Vilken synlighet har en variabel om man inte använder något av nyckelorden public, private, eller protected? (1p) 3. Godisautomat Din uppgift är att skriva en klass som representerar en godisautomat. Automaten innehåller ett antal behållare, som var och en kan innehålla upp till 20 godisbitar. Man kan inte betala med kontanter i godisautomaten, utan måste använda kreditkort. (5p) Anta att klassen Kreditkort, som representerar ett kreditkort, redan är skriven. Klassen innehåller metoden public boolean withdraw(float amount) för att dra pengar från kontokortet. Om uttaget lyckas returnerar metoden true, annars returnerar den false.

Anta att klassen Candy, som representerar en godisbit, redan är skriven. Klassen innehåller metoden public float getprice() som returnerar priset för godisbiten, och public boolean isold() som returnerar true om godiset är för gammalt, och false om så inte är fallet. För att representera behållarna internt får du använda dig av klassen Bounded- DoubleEndedQueue, som beskrivs i uppgift 4. Du får anta att den klassen redan är färdigskriven. Följande publika metoder och konstruktorer ska ingå i klassen GodisAutomat: public GodisAutomat(int nrofslots): Skapar en godisautomat med nrofslots behållare numrerade från 0 till nrofslots - 1. Alla behållare är tomma från början. public void addcandy(int slot, Candy candy): Fyller på behållare nr slot med godiset candy. Godiset hamnar främst i behållaren. Om behållaren redan är full så ska undantaget RuntimeException kastas. public Candy buy(kreditkort k, slot int): Köper med kortet k den främsta godisbiten från en viss behållare. Kastar undantaget RuntimeException om behållaren är tom eller om kortet har för lite pengar. public void cleanmachine() Rensar bort allt godis som är för gammalt från automaten (med hjälp av metoden isold() i klassen Candy). 4. Köer med två ändar (5p) Nedan beskrivs operationerna i den abstrakta datatypen bounded double-ended queue. Sådana köer innehåller, liksom vanliga köer, element av godtycklig typ men skiljer sig från vanliga köer på två sätt. För det första kan man sätta in respektive ta bort element från båda ändarna av kön. För det andra är deras storlek begränsad av ett heltal. Skriv en klass BoundedDoubleEndedQueue vars instanser är double-ended queue:s. Operationerna ska kasta undantaget RuntimeException om något fel inträffar (som att man försöker ta ut element ur en tom kö eller sätta in ett element i en kö som är full). BoundedDoubleEndedQueue a constructor that takes an integer n as argument and creates an empty double-ended queue that can hold at most n elements. enqueuefront takes an element as argument and inserts it at the front. enqueueback takes an element as argument and inserts it at the back. lastelement returns a reference to the element at the back. firstelement returns a reference to the element at the front. dequeuefront deletes an element from the front. dequeueback deletes an element from the back. isempty returns true if and only if the queue is empty. isfull returns true if and only if the queue can hold no more elements. 5. Listuttryck Grammatiken (5p) <list> ::= "[" <elemseq> "]" <elemseq> ::= <elem> <elemseq > e <elemseq > ::= "," <elem> <elemseq > e <elem> ::= <number> <list>

beskriver listor vars element är tal eller listor. Bokstaven e står för tomma produktionen, dvs att symbolen i vänsterledet ska bytas ut mot ingenting, och <number> står för ett heltal (ett TT_NUMBER i Tokenizer). Några exempel: [1,2,3,4] [1,[9,3]] [] [5,6,7] [[1,2,3,4],[1,[9,3]],[],[5,6,7]] [] [[]] [[[]]] Uppgift: Gör om den bifogade funktionen list ur klassen List i Bilaga 2 så att parsern klarar av att kontrollera att en sträng innehåller en lista. Använd tokenizern i Bilaga 1. Du får gärna deklarera egna metoder, om du skulle vilja det, bara de görs oåtkomliga för andra klasser. 6. World of Camelot (5p) Din uppgift är att skriva klasser för att representera karaktärer i RRMMORPG 1 - spelet World of Camelot. Skriv följande klasser baserat på UML-diagrammet i figur 1: Character +Character(maxHealth:int) +hit(damage:int): void +heal(points:int): void +isalive(): boolean <<Interface>> Beast +dangervalue(): int Knight +Knight(maxHealth:int) +setarmor(strength:int): void +resurrect(): void Dragon +Dragon(maxHealth:int) BlackKnight +BlackKnight(maxHealth:int) Figure 1: UML-diagram för uppgift 6. Gränssnittet Beast, som innehåller metoden int dangervalue(). Den metoden returnerar ett heltalsvärde som anger hur farlig besten är. Klassen Character, vars nuvarande hälsa representeras av ett heltal. Den maximala hälsan anges när klassen skapas. En ny Character har maximal hälsa, och är levande. Metoden hit(int damage) reducerar hälsan med hit enheter. Hälsan kan aldrig bli mindre än 0. Om den når 0 dör karaktären. Metoden heal(int points) ökar på hälsotalet med points enheter, så länge som karaktären inte är död. Hälsan kan aldrig överstiga det maximala värdet. Det 1 Really Really Massive Multiplayer Online Role-Playing Game

betyder till exempel att om hälsan ligger 5 enheter under det maximala värdet, och man anropar heal med argumentet 10, kommer hälsan ändå bara att öka med 5 enheter. Metoden boolean isalive() returnerar true om varelsen lever, och false om så inte är fallet. Klassen Knight, som utökar klassen Character. En riddare kan ha en rustning som skyddar mot skador. En nyskapad riddare har ingen rustning, utan det anges med metoden addarmor(int strength). strength specifierar rustningens effektivitet: när en riddare skadas via metoden hit reduceras skadan med strength enheter. Skadan kan aldrig bli mindre än 0. Om addarmor anropas flera gånger är det det senaste anropet som bestämmer vilken rustning riddaren har. Du får anta att addarmor aldrig anropas med ett negativt argument. Metoden resurrect kan användas för att återuppliva en död riddare, men då halveras den maximala hälsan (och avrundas uppåt). Om riddaren redan lever händer ingenting. Till exempel: om en död riddare med maximal hälsa 25 återupplivas kommer den maximala hälsan, samt den nuvarande hälsan, att sättas till 13. Klassen BlackKnight, som utökar klassen Knight. En svart riddare är den tuffaste sortens riddare. Den beter sig som en vanlig riddare, med den enda skillnaden att texten "It s just a flesh wound!" skrivs ut varje gång riddaren tar skada. Klassen Dragon, som utökar klassen Character och implementerar gränssnittet Beast. En drakes farlighet är lika med skillnaden mellan den maximala och den nuvarande hälsan. (Just det, en drake blir bara farligare ju mer stryk den får.)

BILAGOR 1 Tokenizer package tokenizer; import java.io.*; public class Tokenizer { private StreamTokenizer tokens; protected int type; public static final int ID = 1, NUMBER = 2, RIGHTPAREN = 3, LEFTPAREN = 4, ENDOFFILE = 5, PLUS = 6, MINUS = 7, ASTR = 8, SLASH = 9, AMPERSAND = 10, EXCLAMATION = 11, QUESTION = 12, VERTICAL = 13, HASH = 14, EQUAL = 15, LESS = 16, MORE = 17, PERCENT = 18, LEFTBRACKET = 19, RIGHTBRACKET = 20, COMMA = 21, ILLEGAL = -1; public Tokenizer(Reader input) { tokens = new StreamTokenizer(input); tokens.ordinarychar( - ); tokens.ordinarychar( / ); tokens.ordinarychar( % ); tokens.ordinarychar( # ); public void get() { try { type = tokens.nexttoken(); catch (IOException e) { throw new RuntimeException(e.toString()); public int kind() { switch (type) { case StreamTokenizer.TT_WORD: return ID; case StreamTokenizer.TT_NUMBER: return NUMBER; case StreamTokenizer.TT_EOF: return ENDOFFILE; default: switch ((char) type) { case, : return COMMA; case [ : return LEFTBRACKET; case ] : return RIGHTBRACKET; case ( : return LEFTPAREN; case ) : return RIGHTPAREN; case + : return PLUS; case - : return MINUS; case * : return ASTR; case / : return SLASH; case & : return AMPERSAND; case! : return EXCLAMATION;

case? : return QUESTION; case : return VERTICAL; case # : return HASH; case = : return EQUAL; case < : return LESS; case > : return MORE; case % : return PERCENT; default: return ILLEGAL; public String ident() { return tokens.sval; public double numbervalue() { return (double) tokens.nval; public String tostring() { return tokens.tostring(); protected void ordinarychar(char c) { tokens.ordinarychar(c);

2 List import java.io.*; import tokenizer.tokenizer; public abstract class List { private static Tokenizer token; public static boolean accept(reader input) { token = new Tokenizer(input); token.get(); return list(); private static boolean list() { // your code here