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



Relevanta dokument
(n 1)(n) 2 för n 1, dvs att tidskomplexiteten är kvadratisk i värsta fall (n 1) =

Kurskod SMD135 (SMD064) Datum Skrivtid 4 tim

Kurskod SMD135 (SMD064) Datum Skrivtid 4 tim

Recitation 4. 2-D arrays. Exceptions

LULEÅ TEKNISKA UNIVERSITET

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

Support Manual HoistLocatel Electronic Locks

Styrteknik: Binära tal, talsystem och koder D3:1

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

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

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

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

OOP Objekt-orienterad programmering

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)

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

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

Objektsamlingar i Java

Objektorienterad Programmering (TDDC77)

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

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

DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15


Tentamen OOP

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

Tentamen Programmering fortsättningskurs DIT950

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.

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

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

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

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

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Föreläsning 7. Träd och binära sökträd

Kurskod SMD135/167 Datum Skrivtid 4 tim

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

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

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Tentamen i Objektorienterad programmering

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

Exempelsamling Assemblerprogrammering

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

FÖRBERED UNDERLAG FÖR BEDÖMNING SÅ HÄR

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

Make a speech. How to make the perfect speech. söndag 6 oktober 13

Questionnaire for visa applicants Appendix A

denna del en poäng. 1. (Dugga 1.1) och v = (a) Beräkna u (2u 2u v) om u = . (1p) och som är parallell

Tentamen FYTA11 Javaprogrammering

Webbregistrering pa kurs och termin

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

trafiksimulering Intro OU5 trafiksimulering

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

Objektorienterad programmering i Java

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

Chapter 3: Using Classes and Objects

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

Viktig information för transmittrar med option /A1 Gold-Plated Diaphragm

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Preschool Kindergarten

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

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

OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

tentaplugg.nu av studenter för studenter

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

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

Kurskod: TAMS28 MATEMATISK STATISTIK Provkod: TEN1 05 June 2017, 14:00-18:00. English Version

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Modeller, Objekt och Klasser

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

12.6 Heat equation, Wave equation

Isolda Purchase - EDI

Sätt att skriva ut binärträd

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 Inledning. Anmälningskod:

PORTSECURITY IN SÖLVESBORG

Objektorienterad programmering D2

Programmering A. Johan Eliasson

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen Grundläggande programmering

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

Föreläsning 4: Poster

Solutions to exam in SF1811 Optimization, June 3, 2014

Övningar Dag 2 En första klass

1 Comparator & Comparable

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

2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3.

Classes och Interfaces, Objects och References, Initialization

PROGRAMMERING-Java Omtentamina

Föreläsning 11: Rekursion

SMD 134 Objektorienterad programmering

Föreläsning 6: Introduktion av listor

Transkript:

LULEÅ TEKNISKA UNIVERSITET Tentamen i Program och datastrukturer/objektorienterad design Totala antalet uppgifter: 5 Lärare: Håkan Jonsson och Tomas Johansson (1700, 1465) Resultatet anslås senast 2005-05-16 i A-huset. Tillåtna hjälpmedel: Inga. Kurskod SMD135/167 Datum 2005-05-06 Skrivtid 4 tim Bilagor: Klassen Vector. Varje uppgift ges först på svenska och sen på engelska. Eventuella exempel återfinns alltid sist i uppgiften och då endast på engelska. Tänk noga efter vad som ska döljas respektive vara synligt utanför klassen. Var noga med att objekts inre tillstånd inte exponeras så att de kan förändras utifrån där det inte är lämpligt. 1. Some Issues in Programming a) Skriv en rekursiv metod. b) Skriv en metod som använder iteration. c) Klassen A innehåller den publika metoden x(). Klassen B ärver A och innehåller en ny deklaration av x(). Klassen C ärver sen B och innehåller även den en ny deklaration av x(). Samtliga deklarationer av x() har samma typsignatur. Om nu ett program innehåller deklarationen B b = new C(); är det då metoden x() i A, B eller C som anropas då satsen b.x(); utförs? d) Vad skrivs ut av detta C-program? main(){ char s[] = "CSEE"; /* create a string */ char c; char *p; c = s[2]; /* move chars around */ p = &s[2]; --p; s[0] = c; printf("%s\n",s); /* print the string */ e) Vad betyder attributet static då det används vid deklarationen av en variabel? (Förklara gärna med ett exempel om du vill.) a) Write a recursive method. b) Write a method that makes use of iteration.

G L I T V R E Figure 1: A binary tree. c) The class A contains the public method x(). The class B inherits A and contains a new declaration of x(). The class C inherits B and does also contain a declaration of x(). All declarations of x() have the same type signature. If a program contains the declaration B b = new C(); and the statement b.x(); is executed, is it then the method x() i A, B, or C that is invoked? d) What is the output when the following program is run? main(){ char s[] = "CSEE"; /* create a string */ char c; char *p; c = s[2]; /* move chars around */ p = &s[2]; --p; s[0] = c; printf("%s\n",s); /* print the string */ 2. Theory e) What does the attribute static mean when it occurs in the declaration of a variable? (Use an example to explain, if you like.) a) Vad är en dubbellänkad lista och vad är poängen med sådana jämfört med enkellänkade listor? b) Nämn en sorteringsalgoritm vars asymptotiska tidskomplexitet är O(n log n) i medelfallet. c) Binärsökning är ett effektivt sätt att söka efter data i en array, men under vilka förutsättningar? d) I vilket ordning besöks noderna om man går igenom det binära trädet i figur 1 i postorder-ordning?

e) Vad är det som efterfrågas i Handelsresandeproblemet (Traveling Salesman Problem)? a) What is a doubly-linked list, and what is the point of such a list compared with singly-linked lists? b) Give an example of a sorting algortihm that has a time complexity of O(n log n) in the average case. c) Binary search is an effective method to search through an array, but under which circumstances? d) In which order are the nodes visited in if the tree in Figure 1 is traversed in postorder-ordering? e) What is asked for in the Traveling Salesman Problem? 3. Inheritance and Exceptions BankRoll +sum(): int +colours(): Vector +add(c:chip): void +num(colour:string): int +remove(colour:string): void Chip +denomination(): int +colour(): String #change_denomination(denom:int): void RedChip BlueChip BlackChip Figure 2: UML diagram for Problem 3. I ett pokerspelsprogram hanteras bland annat olika sorters spelmarker. Varje sort har en viss färg (en sträng) och valör (ett heltal). Valören hos en sorts spelmarker (dvs alla de enskilda spelmarker som finns av den sorten) kan ändras under spelets gång. Färgen är däremot fix. Skriv följande baserat på figur 2: (a) Den abstrakta klassen Chip för ett slags spelmarker. Denna deklarerar de abstrakta metoderna denomination som ger tillbaka en spelmarkers valör och colour som ger tillbaka en spelmarkers färg samt den konkreta (ickeabstrakta) statiska metoden change_denomination som ändrar valören på ett slags spelmarker (alla existerande spelmarker av den sorten ändrar valör). (b) Klasserna RedChip, BlueChip, BlackChip som alla ärver Chip och vars objekt (enskilda spelmarker) är röda, blå respektive svarta och till att börja med har valörerna 5, 10 respektive 100. (c) Klassen BankRoll som håller reda på en (1) spelares hög med spelmarker och tillhandahåller följande metoder: sum, som ger totala summan av alla spelmarker i högen. colours som ger tillbaka en referens till en Vector med alla de färger som åtminstone en spelmarker i högen har. Klassen Vector (från Java s API) finns bifogad. add som lägger till en spelmarker till högen.

num som ger tillbaka antalet spelmarker i högen som har en viss färg. remove som tar bort en spelmarker av given färg från högen. Om det saknas sådana marker ska programmet kasta ett exception NoSuchElementException. Du får anta att detta exception redan finns deklarerat och kan användas. Tips: En hög som den ovan (en bank roll ) kan t ex representeras med en Vector. In a poker program there is a need to handle poker chips. Each kind of chip has a certain colour (a string) and a denomination (an int). The denomination of a kind of chips (all red chips, for instance) can change. The colour is, however, fixed. Write the following based on Figure 2: (a) The abstract class Chip that represents a general kind of chip. This class declares the abstract methods denomination that returns the current denomination of a chip and colour that returns the colour of a chip. It also contains the concrete (non-abstract) and static method change_denomination that change the denomination of a kind of chips (the result is that all chips of the same colour change their denomination at the same time). (b) The classes RedChip, BlueChip, BlackChip who all extends Chip. Their colours are red, blue and black respectively. To start with their denominations are 5, 10, and 100 respectively. (c) The class BankRoll that keeps track of the pile of chips one (1) player has. It contains the following methods: sum that gives as result the total sum of all chips in the pile. colours that gives back a reference to a Vector-object that holds each colour that at least one chip in the pile has. (Recall that colours are strings.) The class Vector (from the Java API) can be found in the last part of the exam. add that adds a chip to the pile. num that gives as result the total number of chips in the pile of a certain colour. remove that removes one chip of a certain colour from the pile. If there are no chips of the given colour, the exception NoSuchElementException should be thrown. You can assume that the class that represent the exception has already been written. Hint: A pile can be represented as a Vector. 4. Song competition I en melodifestival ingår det ett antal bidrag, som alla kan få poäng. Din uppgift är att skriva en klass som representerar melodifestivaler. Konstrueraren ska ta ett heltal som argument som anger hur många bidrag som ingår i festivalen. Tillför metoden void givepoints(int song, int points) som ger points antal poäng till bidrag nummer song. Bidragen numreras så att det första bidraget får nummer ett, det andra nummer två och så vidare. Du får anta att man aldrig försöker ge poäng till ett bidrag som inte finns. Tillför även metoden int leader() som returnerar numret på det bidrag som har mest poäng. Om flera bidrag har högst poäng får vilket som helst av de bidragen returneras.

Tillför slutligen metoden int amountofpoints() som returnerar hur många poäng som totalt delats ut till alla bidrag i alla melodifestivaler som skapats. A song competition can be said to contain a number of songs, where every song can be awarded points. Your task is to write a class that represents a song competition. The constructor should take an integer as an argument, which specifies the number of songs in the competition. Write the method void givepoints(int song, int points) that gives points number of points to song number song. The songs are numbered so that the first song has number one, the second song has number two and so on. You do not have to consider the case when one tries to give points to a song that does not exist. Also, write the method int leader() that returns the number of the song with the highest number of points. If several songs all have the highest number of points it is ok to return the number of anyone of those songs. Finally, write the method int amountofpoints() that returns the total number of points that has been given to all songs in all song competitions. 5. Can t see the forest for all the trees Skriv en klass BinaryNode som representerar en nod i ett binärt träd. Varje nod kan ha noll, ett, eller två barn, som även de är binära noder. Skriv en metod int height() som returnerar höjden på ett träd som noden är rot i. Om noden saknar barn (vilket betyder att det är ett löv) är höjden 1. Skriv även metoden int size() som returnerar antal noder i det träd noden är rot i. Write a class BinaryNode that represents a node in a binary tree. Every node can have zero, one, or two children, that themselves are binary nodes as well. Write the method int height() that returns the height of the tree that the node in question is the root of. If the node has no children (and therefore is a leaf) the height is 1. Also write the method int size() that returns the number of nodes in the tree that the node in question is the root of. 6. Grammarrays I Java kan man, för att deklarera samt initialisera en heltalsarray, till exempel skriva int[] a = {1,3,5,7; Din uppgift är att, med hjälp av tokenizern i appendix A, skriva en parser som undersöker huruvida en sträng beskriver en heltalsarray, dvs huruvida den följer reglerna fˆr grammatiken; <array> = "{" <array > "" <array > = <num> <array > <array > = "," <num> <array > empty In Java it is possible to declare and initialize an integer array by writing, for example, int[] a = {1,3,5,7;

Your task is to, using the tokenizer in appendix A, write a parser that checks whether a string describes an integer array, or in other words, if it follows the rules of the following grammar: <array> = "{" <array > "" <array > = <num> <array > <array > = "," <num> <array > empty public abstract class ArrayDescription { private static Tokenizer token ; public static boolean accept ( Reader input ){ boolean ok ; token = new Tokenizer ( input ) ; token. get ( ) ; ok = ad ( ) ; return ok ; private static boolean ad (){ // add your code here. Listing 1: ArrayDescription.java

A Tokenizer.java import java. io. ; public class Tokenizer { private StreamTokenizer tokens ; protected i nt type ; public static final int ID = 1, NUMBER = 2, RIGHTPAREN = 3, LEFTPAREN = 4, ENDOFFILE = 5, PLUS = 6, MINUS = 7, ASTR = 8, SLASH = 9, LEFTBRACE = 10, RIGHTBRACE = 11, COMMA = 12, ILLEGAL = 1; public Tokenizer ( Reader input ) { tokens = new StreamTokenizer ( input ) ; 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 Str ea mto kenizer.tt WORD : return ID ; case Str ea mto kenizer.tt NUMBER : return NUMBER; case Str ea mto kenizer. TT EOF : return ENDOFFILE; default : switch ((char) type ) { case ( : return LEFTPAREN; case ) : return RIGHTPAREN; case + : return PLUS; case : return MINUS; case : return ASTR; case / : return SLASH; case { : return LEFTBRACE; case : return RIGHTBRACE; case, : return COMMA; default : return ILLEGAL; public String ident () {return tokens. sval ; public double numbervalue () {return (double) tokens. nval ; public String tostring () {return tokens. tostring ( ); Listing 2: Tokenizer.java