Försättsblad till skriftlig tentamen vid Linköpings Universitet

Relevanta dokument
Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Teoretisk del. Facit Tentamen TDDC (6)

Facit Tentamen TDDC (7)

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Teoretisk del. Facit Tentamen TDDC (6)

TDDC30 Programmering i Java, datastrukturer och algoritmer

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Facit Tentamen TDDC kl (6)

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

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Dugga Datastrukturer (DAT036)

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

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

Tentaupplägg denna gång

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen TEN1 HI

Objektorienterad programmering D2

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

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

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

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

Föreläsning 6: Introduktion av listor

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Objektorienterad programmering i Java

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

TDP Regler

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

Sätt att skriva ut binärträd

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Laboration 10 - NetBeans

kl Tentaupplägg

Tentamen OOP

Tentaupplägg denna gång

Föreläsning 14 Innehåll

Tentamen, EDAA20/EDA501 Programmering

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

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

Objektsamlingar i Java

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen Datastrukturer D DAT 036/DIT960

kl Tentaupplägg

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

Tentamen Datastrukturer (DAT037)

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

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

Laboration 1 - Grunderna för OOP i Java

trafiksimulering Intro OU5 trafiksimulering

Tentamen i Objektorienterad programmering

Redovisning av inlämningsuppgifter

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

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

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.

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

Länkade strukturer, parametriserade typer och undantag

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

Övningar Dag 2 En första klass

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

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

Omtentamen i OOSU2, 21 augusti 2014

Tentamen i Algoritmer & Datastrukturer i Java

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

kl Tentaupplägg

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

Flytt av e-post till OCS

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.

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

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

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

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 till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008

TDDC77 Objektorienterad Programmering

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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.

ORDNA DINA BILDER. Var finns bilderna Var bör de finnas

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

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

kl Tentaupplägg

Tentamen TEN1 HI

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

kl Tentaupplägg

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

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

kl Tentaupplägg

Föreläsning 11. Giriga algoritmer

Transkript:

Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen 2016-03-21 Sal Tid 08:00 12:00 Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter som ingår i tentamen Antal sidor på tentamen (inkl. försättsbladet) Jour/kursansvarig Samling i korridoren vid SU17/18 TDDC30, 725G82 DAT1 Programmering i Java, datastrukturer och algoritmer IDA 6 (4 teoretiska och 2 praktiska) 8 Erik Nilsson Telefon under skrivtid 013-284676 Besöker salen ca kl. - Kursadministratör (namn, telefon, mailadress) Tillåtna hjälpmedel Övrigt Åsa Kärrman, 013-285760, asa.karrman@liu.se Inga Information och frågor hanteras genom Tentaklienten. Preliminära poänggränser: 3: 22 G: 22 4: 30 VG: 33 5: 37

Tentamen TDDC30 2016-03-21 kl 08-12 2 (8) Teoretisk del Anvisningar: Uppgifterna i denna del ska lösas med penna och papper på lösa blad. Vid tentamens slut lämnas svaren till denna del in till tentamensvakterna. Du kan även lämna in till tentavakterna under tentans gång så rättar vi om vi hinner (ingen kompletteringsmöjlighet ges dock). Det är även okej att skicka in svar på teoriuppgifter via tentasystemet (i en textfil per uppgift). Uppgift 2 och 4 kräver dock att ni ritar, så där vill vi ha in svaren på papper. Då svar skrivs på lösa blad, markeras varje deluppgift tydligt markeras. Endast en sida av bladet används. Varje blad markeras högst upp med personnummer och sidnummer. Viktigt: Starta en tentaklient genom att högerklicka på skrivbordet, för att kunna ta del av allmän information och kunna ställa frågor. 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan en instansvariabel och en variabel deklarerad lokalt i en metod? (1p) b) Vad skulle det innebära att konstruktorn i en klass har synlighet protected? (1p) c) Vad är skillnaden mellan en abstrakt klass och ett interface? (1p) d) Vad innebär nyckelordet throws i Java? (1p) e) Varför är det bättre att sätta instans/klassvariabler till private och låta dem kommas åt m.h.a. get-metoder än att låta dem vara public?

Tentamen TDDC30 2016-03-21 kl 08-12 3 (8) 2. (6p) "Datastrukturer" a) Antag att vi har ett binärt träd BT som ser ut som i bilden nedan. I vilken ordning besöker man elementen i BT om man använder sig av i) Level-ordertraversering? ii) In-ordertraversering? 52 3 5 1 4 76 b) Antag att vi har en prioritetskö PQ med heltal som nycklar och strängar som värden. PQ är implementerad med en min-heap. Beskriv vad som händer och rita heapen efter varje steg då vi kör följande operationer (i ordningen uppifrån och ned). PQ är tom från början. PQ.insert(3, "Risk"); PQ.insert(8, "Fia"); PQ.insert(5, "Poker"); PQ.removeMin(); PQ.insert(1, "Yatzy"); PQ.removeMin(); 7 c) Fältet A har följande element: 1, 4, 5, 6, 7, 10, 15, 20. Rita upp det binära träd vars fältrepresentation motsvarar A.

Tentamen TDDC30 2016-03-21 kl 08-12 4 (8) 3. (6p) "Tidskomplexitet" a) Ange och motivera tidskomplexiteten för följande metoder för ett binärt sökträd: (3p) * Metoden add(e) som lägger till ett element e i trädet. * Metoden remove(e) som tar bort ett element ur trädet. * Metoden root() som returnerar elementet som ligger i trädets rot. b) Ange tidskomplexiteten i värsta fallet, med avseende på n, för följande metoder. (n är alltid ett positivt heltal.) int looper1(int n) { int sum = 0; for (int i = 0; i < n/2; ++i) { sum = sum + i; return sum; int looper2(int n) { int sum = 0; for (int i = 0; i < 10; ++i) { sum = sum + looper1(n); return return sum; int addsums(int n) { return looper1(n) + looper2(n); c) Förenkla följande uttryck för tidskomplexitet: (1p) O(2nlog(n) + n²) O(log(n))

Tentamen TDDC30 2016-03-21 kl 08-12 5 (8) 4. (6p) "Algoritmer" a) Sortera värdena [ 5 5 1 4 3 4 0 5 ] med shellsort med lucksekvensen 4, 2, 1. Var noga med att ange vad som sker i varje steg, så att det går att följa processen från början till slut. Sorteringen ska leda till stigande ordning, d.v.s. 1, 2, 3, o.s.v. Ange tydligt vad som sker under sorteringen. b) Sortera värdena [ 2 5 8 7 1 3 6 ] med shaker-sort. Sorteringen ska leda till stigande ordning, d.v.s. 1, 2, 3, o.s.v. Ange tydligt i svaret hur hela fältet ser ut innan varje platsbyte, samt vilka index som är på väg att byta plats, med maximalt ett byte per steg. c) Vad innebär det att en sorteringsalgoritm är in-place? Ge exempel på en sorteringsalgoritm som kan implementeras in-place, och en som inte kan implementeras in-place (utan att försämra tidskomplexiteten).

Tentamen TDDC30 2016-03-21 kl 08-12 6 (8) Praktisk del Anvisningar: Uppgifterna i denna del ska lösas på dator. När alla uppgifter är lösta ska uppgifterna skickas in via tentasystemet. Tänk på att bifoga alla filer som behövs för att köra programmet för uppgift 5 resp. 6. Du kan också exportera projektet som en zip-fil och skicka in denna. Viktigt: Starta en tentaklient genom att högerklicka på skrivbordet, för att kunna ta del av allmän information och kunna ställa frågor. Försök att lösa alla uppgifter så långt som möjligt. Om du inte kan lösa en uppgift, förenkla uppgiften. Glöm i så fall inte att beskriva förenklingen med en tydlig kommentar i koden. Poängavdrag ges beroende på förenklingens storlek. Tänk på läsbarhet och namngivning, och även på variablers och metoders synlighet. Ni behöver inte skriva javadoc för er kod. Skapa ett projekt i Eclipse för vardera uppgift. Vanligtvis finns det givna filer för uppgifterna. De givna filerna ligger i mappen given_files. Om det bara är en javafil är det enklast att kopiera in koden till ditt projekt. Om det är projektfiler så kan du importera till Eclipse, File Import, sedan General Existing projects into workspace, klicka sedan i Select archive file och välj Browse, och välj sedan arkivfilen i given_files. Därefter kan ni välja vilja projekt ni vill importera från arkivet. Här är några vanliga unixkommandon: ls cd mappnamn cd.. cp från till lista alla filer i den mappen du står byt till mapp gå upp ett steg kopiera fil BONUS: Om du har bonus från labserien så får du lika många bonuspoäng som avklarade poäng i den praktiska delen (dock maximalt 5 poäng). Om du exempelvis får 3 poäng på den praktiska delen så får du ytterligare 3 bonuspoäng. 6 poäng och mer ger alltså bara 5 bonuspoäng. Du kan förstås ej överskrida tentans maxpoäng.

Tentamen TDDC30 2016-03-21 kl 08-12 7 (8) 5. (10p) Videobutiken Du har blivit anlitad av videobutiksbolaget Hollyvoodo AB för att skapa ett datasystem för deras verksamhet. Företaget har flera butiker ute i landet. För detta system behöver du skapa klasser för DVD-filmer, BluRay-filmer (och andra saker som går att hyra, t.ex. tv-spel) och för själva butiken. Här är ett översiktligt klassdiagram: Rentable 1..N 1 HollyvoodoStore DVD BluRay VideoGame I mappen given_files finns ett litet testprogram där vi visar hur det är tänkt att man skall instansiera de olika objekten och hur man skall kunna använda dem. a) Implementera klasserna i diagrammet ovan så att första delen av testprogrammet går att köra. Alla instanser av typen Rentable har namn (en sträng) och ett antal dagar (ett heltal) som man får hyra den. DVD:er får hyras i tre dagar. BluRay-filmer får hyras i två dagar. TV-spel får hyras i en vecka. Instanser av typen HollyvoodoStore har adresser (en sträng) och ett godtyckligt antal Rentable-objekt. Klassen behöver även en metod add som lägger till Rentable-objekt till butikens utbud. Slutligen behövs en metod rent som tar in namnet på det som kunden vill hyra och returnerar motsvarande Rentable-objekt, samtidigt skall butiken säga (skriva ut i terminalen) om hur många dagar som objektet skall lämnas tillbaka till butiken. I testprogrammet har vi skrivit kommentarer för att du skall se hur det skall se ut. (TIPS: Tänk på att strängars innehåll jämförs med metoden compare). Tänk på att hålla instansvariabler privat. Det skall inte gå att skapa instanser av typen Rentable, endast dess subtyper. Tänk på i vilken klass du lägger implementation. (5p) b) Du skall nu lägga till lite felhantering till systemet. Om man försöker hyra något som inte finns i butikens utbud skall butiken kasta ett undantag av typen NoSuchRentableException. Undantaget skall ärva från klassen Exception (ej från RuntimeException). Undataget skall på något sätt lagra namnet på det objekt som inte kunde hyras. Uppdatera testprogrammet så att det fungerar för koden som du har lagt till. (Denna deluppgift kan lösas oberoende av deluppgift c). c) För butikens stamkunder skall det nu gå att iterera över butikens utbud. Låt klassen HollyvoodoStore implementera interfacet Iteraterable. Skapa klassen HollyvoodoIterator som implementerar Iterator. Metoden hasnext() skall returnera sant så länge det finns Rentableobjekt som inte hyrts, falskt annars. Metoden next() skall hyra nästa Rentable-objekt i butiken. Metoden remove() behöver inte göra något speciellt. (Du kan t.ex. skriva ut "funkar inte"). (Denna deluppgift kan lösas oberoende av deluppgift b). (3p)

Tentamen TDDC30 2016-03-21 kl 08-12 8 (8) 6. (10p) Biltvätten En mack har anlitat dig för att göra ett datorsystem till deras biltvätt. De har själva fått ihop klassen Car (finns i mappen given_files). Du skall nu implementera klassen CarWash. Mackens biltvätt är ganska avancerad! Det är i princip en lång tunnel som klarar av godtyckligt många bilar åt gången. Det är givet att bilar kommer ut ur tvätten i samma ordning som de körs in. a) Implementera följande metoder: driveintowash(car) Tar en bil som parameter och kör in den i biltvätten längst bak. getoutofwash() Tar bilen som är längst fram i tvätten och kör ut den (returneras). noofcarsinwash() Returnerar antalet bilar i tvätten just nu. Samtliga metoder skall ha tidskomplexitet O(1). (4p) b) Macken har nu lanserat sin biltvätt på ett mer allmänt sett. De tänker nu bygga liknande tvättar för andra typer av objekt, t.ex. cyklar, gruvutrustning, pengar. För att lösa detta skall du göra en ny klass Wash (döp om din CarWash-klass) och göra denna generisk. Man skall alltså nu kunna instansiera en Wash på följande sätt: Wash<Car> mycarwash = new Wash<Car>(); (Denna deluppgift kan lösas oberoende av övriga deluppgifter.) (3p) c) Du skall nu ändra metoden driveintowash så att den även tar en heltalsparameter howdirty. Ändra strukturen i CarWash (eller Wash om du har gjort del b) så att när man anropar getoutofwash så får man ut det objekt som har minst värde på howdirty. Metoderna får inte ha högre tidskomplexitet än O(n). (3p) (Denna deluppgift kan lösas oberoende av övriga deluppgifter.)