Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)



Relevanta dokument
Tentamen 1 (6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Programkonstruktion. Tentamen,

Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen,

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

Programkonstruktion. Tentamen,

Dugga Datastrukturer (DAT036)

Programkonstruktion. Tentamen,

Föreläsning 6: Introduktion av listor

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

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

Objektorienterad programmering D2

Sätt att skriva ut binärträd

Programkonstruktion och Datastrukturer

Tentamen TEN1 HI

Tentaupplägg denna gång

Tentamen, EDA501 Programmering M L TM W K V

Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen. x y (x > 0) (y > 0) xy > 0 Domän D = R

Tentamen OOP

Grunderna i stegkodsprogrammering

Enkäten inleds med några frågor om demografiska data. Totalt omfattar enkäten 85 frågor år år år. > 60 år år.

TDDC74 Programmering, abstraktion och modellering DUGGA 2

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad

Programmering II (ID1019) :00-11:00

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Björn Abelli Programmeringens grunder med exempel i C#

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

Föreläsning 1 & 2 INTRODUKTION

TDP Regler

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

Textsträngar från/till skärm eller fil

Låt eleverna öva på att dra slutsatser om textens handling genom att leta ledtrådar i texten.

Tentamen i Realtidsprogrammering

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

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

FÖRELÄSNING 1 ANALYS MN1 DISTANS HT06

Föreläsning 11. Giriga algoritmer

Föreläsning 8: Intro till Komplexitetsteori

Programmeringsteknik med C och Matlab

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

1. 20 identiska bollar skall delas ut till fem flickor och fem pojkar. På hur många olika sätt kan detta ske om

Frågebanker, frågeuppsättningar och slumpvisa block

"if"-satsen. Inledande programmering med C# (1DV402)

Övningsuppgifter #11, Programkonstruktion och datastrukturer

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

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

Bygga hus med LECA-stenar

Objektsamlingar i Java

SI-möte #10, Programkonstruktion och Datastrukturer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

Programmering II (ID1019) :00-17:00

Grafer. 1 Grafer. Grunder i matematik och logik (2015) 1.1 Oriktade grafer. Marco Kuhlmann

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

Uppgift 1 ( Betyg 3 uppgift )

Tentamen i Matematisk statistik Kurskod S0001M

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Tentaupplägg denna gång

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2011/12 moment 9 Sida 1 Uppdaterad

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

SMD 134 Objektorienterad programmering

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 9 Exempel

Övningar Dag 2 En första klass

Tentamen i Objektorienterad programmering

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Statistisk undersökningsmetodik (Pol. kand.)

Programmering A. Johan Eliasson

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

Introduktion. Exempel Övningar Lösningar 1 Lösningar 2 Översikt

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 9 Om högre ordningens funktioner. PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad

Tentamen: Programutveckling ht 2015

729G04 Programmering och diskret matematik

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

Att använda pekare i. C-kod

Studiehandledning till. MMA121 Matematisk grundkurs. Version

Tentamen, EDAA10 Programmering i Java

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Programmeringsolympiaden 2012 Kvalificering

Tentamen, EDAA20/EDA501 Programmering

UMEÅ UNIVERSITET 26 april 2002 Instutionen för datavetenskap. Grafproblem. Laboration 4, Datastrukturer och Algoritmer VT02

DSV A Procedurell programmering 5 poäng Tentamen

Programmering II (ID1019) :00-12:00

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

OOP Omtenta

Programmering II (ID1019) :00-12:00

Hur kör vi egentligen en undersökning om trafikanters beteende och nya hastighetsgränser utifrån en bussförares perspektiv?

Välkommen till QuickQuest 2.0!

Datastrukturer och algoritmer

Skapa test med fritextfrågor

ISP-verktyget i WebOodi

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Eleven kan genomföra undersökningar utifrån givna planeringar och för då utvecklade resonemang om. 4-5 korrekta observationer

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Språket Python - Del 1 Grundkurs i programmering med Python

Omtentamen i DV & TDV

Anvisning för ARVI-systemet för dig som matar in personbedömningar

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

Transkript:

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Lars-Henrik Eriksson Fredag 5 april 2013, kl 14:00 17:00, i Polacksbackens skrivsal Hjälpmedel: Inga. Inte heller elektronisk utrustning. Hjälp: Läraren kommer att besöka skrivsalen c:a klockan 15:00. Anvisningar: Markera i tabellen nedan inte mer än ett svar per fråga genom att kryssa över bokstaven för det svarsalternativ som du väljer. Lämna bara in denna sida. Det är inte meningen att du skall lämna kommentarer till dina svar. Om du tycker att någon fråga är oklar eller felaktig, markera frågenumret med en på den här sidan, och förklara på baksidan av detta blad vad du menar att problemet är och vilka antaganden du gjort för att kunna svara på frågan. betyg 3 U betyg 4 betyg 5 Fråga Svar Fråga Svar 1 A B C D E 2 A B C D E 3 A B C D E 4 A B C D E 5 A B C D E 6 A B C D E 7 A B C D E 8 A B C D E 9 A B C D E 10 A B C D E 11 A B C D E 12 A B C D E 13 A B C D E 14 A B C D E 15 A B C D E 16 A B C D E 17 A B C D E 18 A B C D E 19 A B C D E 20 A B C D E Din tentakod:......................................................................................

Frågeunderlag En del av frågorna kommer att behandla ett problem som handlar om att söka i en tidtabell för en busslinje, tågförbindelse eller liknande. Man vill hitta den förbindelse som avgår från en viss plats efter ett visst klockslag. Ta följande utdrag ur en tidtabell för tågen Uppsala Stockholm som exempel. Uppsala Knivsta Märsta Stockholm 08:09 08:20 08:28 08:49 12:09 12:20 12:28 12:49 16:09 16:20 16:28 16:49 20:09 20:20 20:28 20:49 Tidtabellen anger alltså bl.a. att det går ett tåg från Uppsala kl. 08:09 som passerar Knivsta 08:20, Märsta 08:28 och kommer till Stockholm 08:49. Tidtabellen representeras som en lista av förbindelser. Varje förbindelse representeras som en lista av tider för varje station. Tiderna representeras som heltal med timmar som hundratal. 1220 representerar alltså klockan 12:20. En fördel med denna representation är att man kan jämföra tider genom att göra en heltalsjämförelse. Dessutom finns en separat rubriklista som innehåller namnen på de olika platserna i förbindelserna. Tidtabellen i exemplet representeras alltså av rubriklistan och förbindelselistan ["Uppsala","Knivsta","Märsta","Stockholm"] [[0809,0820,0828,0849],[1209,1220,1228,1249], [1609,1620,1628,1649],[2009,2020,2028,2049]] Man skall nu skriva ett program lookuptimetable som tar som argument En rubriklista En förbindelselista Ett platsnamn En tidpunkt och som tar reda på tiden för den första förbindelsen samma dag från den angivna platsen räknat från och med den angivna tidpunkten. Svaret skall ges som SOME x där x är tiden. Om det inte finns någon sådan förbindelse (den sista förbindelsen har redan passerats) skall svaret vara NONE. Om man till exempel frågar efter första förbindelse från Knivsta från och med klockan 11:30 med ovanstående exempeltidtabell så skall svaret bli SOME 1220. Frågar man efter första förbindelse från Uppsala från och med klockan 20:15 så skall svaret bli NONE.

För att förenkla programmet så förutsätter vi att alla förbindelser passerar alla platser och att förbindelserna kommer i samma tidsordning vid varje plats (inga omkörningar ). Nedan finns funktionsspecifikation och programkod för lookuptimetable. Båda är ofullständiga det finns luckor i dem, markerade?1?,?2? etc. Din uppgift blir att tala om vad som skall finnas i luckorna. lookuptimetable(headers,connections,place,time) TYPE:?1? PRE:?2? POST: SOME x där x är tid för första förbindelsen vid place från och med tiden time och där headers respektive connections är en rubriklista respektive en förbindelselista enligt ovan. EXAMPLE: lookuptimetable(["uppsala","knivsta",märsta",stockholm"], [[0809,0820,0828,0849],[1209,1220,1228,1249], [1609,1620,1628,1649],[2009,2020,2028,2049]],"Knivsta",1130) = SOME 1220 VARIANT:?6? fun lookuptimetable(_,[],_,_) = NONE lookuptimetable(headers,connections,place,time) = let val thistime =?3? in if time?4? thistime then SOME thistime else?5? end; lookuptimetable använder denna hjälpfunktion: parallellmember(l1,x,l2) TYPE: string list*string*int list->int PRE: x finns i listan L1, length L2 > positionen för x i listan L1 POST: Det element som finns på samma plats i L2 som första förekomsten av x i L1. EXAMPLE: parallellmember(["a","b","c"],"b",[10,20,30]) = 20 fun parallellmember(l::ll,x,m::mm) = if l = x then m else parallellmember(ll,x,mm);

Frågor för betyg 3 Om du ger rätt svar på 7 av de 10 frågorna i detta avsnitt så blir du godkänd med minst betyg 3, annars blir du underkänd (U). Du kan inte kompensera ett dåligt resultat i detta avsnitt med poäng från frågorna för betyg 4 eller 5. 1. Vilken typ skall stå vid?1? ovan? (A) int (B) int option (C) string list*int list*string*int->int (D) string list*int list*string*int->int option (E) string list*int list list*string*int->int option 2. Är något av följande villkor felaktigt som del av förvillkoret vid?2? ovan och i så fall vilket eller är alla villkor korrekta? (A) I varje element av connections skall värdena ligga i stigande ordning. (B) Varje element i connections skall vara en lika lång lista som listan headers (C) place måste finnas i headers (D) time måste finnas i ett element i connections (E) Alla villkoren (A)-(D) skall vara med i förvillkoret! 3. Fungerar det med något av följande kodfragment vid?3? ovan och i så fall vilket eller krävs någon annan kod? (A) parallellmember(headers,place,connections) (B) parallellmember(hd headers,place,connections) (C) parallellmember(headers,time,connections) (D) parallellmember(headers,time,hd connections) (E) Någon annan kod. 4. Fungerar det med något av följande kodfragment vid?4? ovan och i så fall vilket eller krävs någon annan kod? (A) <= (B) >= (C) = (D) <> (E) Någon annan kod. 5. Fungerar det med något av följande kodfragment vid?5? ovan och i så fall vilket eller krävs någon annan kod? (A) lookuptimetable(tl headers,connections,place,time) (B) lookuptimetable(headers,tl connections,place,time) (C) lookuptimetable(tl headers,tl connections,place,time) (D) hd connections::lookuptimetable(headers,tl connections,place,time) (E) Någon annan kod. 6. Är det korrekt att sätta något av följande variantuttryck vid?6? ovan och i så fall vilket eller skall det vara något annat? (A) length headers (B) time (C) length connections (D) connections (E) Något annat.

7. I något sammanhang vill man arbeta med en kalender. Man vill representera kalendern som en följd av datum som vart och ett är försett med en samling av beskrivningar av händelser som inträffar på respektive datum. Datatypsdefinitionen börjar: datatype calendar = Calendar of... Vilket av följande alternativ är mest rimligt som fortsättning av deklarationen? (A) (int*string) list (B) (int*string list) list (C) (int list*string) list (D) int list*string list (E) int list*string list list 8. Vad är värdet av uttrycket foo(["c","e","h"],1) om foo är definierad så här? fun foo(l,0) = l foo(l,n) = foo(tl l,n-1); (A) ["e"] (B) ["h"] (C) ["e,h"] (D) "e" (E) Inget anropet ger beräkningsfel. 9. Vilket av alternativen nedan är snävaste asymptotiska begränsningen av uttrycket n 2 lg n + 10 22 n + 5? (A) Ω(n 3 ) (B) Ω(n 2.001 ) (C) O(n 2 ) (D) O(n 2.001 ) (E) O(n 3 ) 10. Vilken är en strikt ( tight ) asymptotisk begränsning av körtiden för funktionen g nedan? Antag att g endast är definierad för ickenegativa heltal. Antag att fakt(n) alltid beräknar fakulteten n! av n, i tid Θ(n). fun g(0) = 0 g(n) = if n > 1000 then g(n-1) + fakt(7) else g(n-1) - fakt(7) (A) Θ(n) (B) Θ(n lg n) (C) Θ(n 2 ) (D) Θ(n 2 lg n) (E) Θ(2 n )

Frågor för betyg 4 Om du fått minst betyg 3 genom dina svar på de föregående frågorna och dessutom svarar rätt på minst 3 av de 5 frågorna i detta avsnitt så blir du godkänd med minst betyget 4. Du kan inte kompensera ett dåligt resultat i detta avsnitt med poäng från frågorna för betyg 3 eller 5. 11. Vilket av följande påståenden om typer är inte sant? Eller är alla sanna? (A) Typer är mängder av data med gemensamma egenskaper. (B) Typen hos en funktion avgör vilka typer funktionens argument och värde har. (C) Med typkontroll kan man hitta vissa fel i program innan de körs. (D) I en tupel kan olika element ha olika typ. (E) Alla är sanna. 12. Här är några olika testfall för lookuptimetable: (a) lookuptimetable(["a","b"],[[1000,1030]],"a",1000) = SOME 1000 (b) lookuptimetable(["a","b"],[[1000,1030]],"a",1030) = NONE (c) lookuptimetable([],[],"a",1030) = NONE (d) lookuptimetable(["a","b","c"],[[1000,1030,1100],[1100,1130,1200]], "B",1045) = SOME 1130 Vilka av dessa testfall krävs för att få full kodtäckning i lookuptimetable utan att ta med några onödiga testfall? (A) a (B) b (C) a och b (D) a, b och c (E) Alla fyra krävs. 13. Här är fyra förslag till eftervillkor för funktionen foo från fråga 8. Alla är i någon mening korrekta (om vi antar att förvillkoren är rimliga), men vilka är acceptabla eftervillkor i en funktionsspecifikation enligt de principer vi gått igenom i kursen? (a) l utan de första n elementen. (b) l som man gjort tl på n gånger (c) l om n = 0, annars gör man rekursion med argumenten tl l och n-1 (d) Elementen i l från och med element nummer n (om man börjar räkna med 0) (A) a och b (B) a och d (C) b och d (D) a, b och d (E) Alla fyra. 14. Vad är en snäv ( tight ) asymptotisk gräns för körtiden för funktionen g nedan? Antag att ett förvillkor är att argumentet till g inte är negativt. fun g(0) = 1 g(n) = let val v = 5 * g(n div 3) in v * v end (A) Θ(lg n) (B) Θ(n) (C) Θ(n 2 ) (D) Θ(n log 3 5 ) (E) Θ(n log 3 5 lg n)

15. Givet funktionen: noduplicates l TYPE: a list -> a list PRE: (inget) POST: Listan l, men bara med sista förekomsten av element som förekommer flera gånger. EXAMPLE: noduplicates [1,2,3,2,1,4,2,1] = [3,4,2,1] fun noduplicates([]) = [] noduplicates(x::l) = if member(x,l) then noduplicates l else x::noduplicates l; Hjälpfunktionen member har följande egenskaper: member(x,l) TYPE: a* a list -> bool PRE: (inget) POST: true om x finns i l, false annars. TIME COMPLEXITY: Θ( l ) i genomsnitt. Vilken tidskomplexitet har noduplicates i genomsnitt? (Antag att n är längden av argumentet till noduplicates.) (A) Θ(lg n) (B) Θ(n lg n) (C) Θ(n) (D) Θ(n 2 ) (E) Θ(2 n )

Frågor för betyg 5 Om du fått minst betyg 4 genom dina svar på de föregående frågorna och dessutom svarar rätt på minst 3 av de 5 frågorna i detta avsnitt så blir du godkänd med betyg 5. Du kan inte kompensera ett dåligt resultat i detta avsnitt med poäng från frågorna för betyg 3 eller 4. 16. När ett ML-system behandlar definitionen av parallellmember så får den inte samma typ som i funktionsspecifikationen som gavs tidigare i tentan. Vilken typ får den? (A) a list* a* b list-> b (B) a list* a* a list-> a (C) a list* a*string list->string (D) a list* a* b list-> b (E) a list* a* b list-> b 17. Datastrukturen i fråga 7 är tvetydig i den meningen att en given kalender kan representeras på flera olika sätt. För att göra representationen unik kan man lägga till datastrukturinvarianter som begränsar vilka representationer som är tillåtna. Med en datastrukturinvariant som består av följande fyra villkor så blir representationen unik: (a) Varje datum har minst en händelse. (b) Händelserna för varje datum är ordnade i någon bestämd ordning. (c) Kalendern innehåller minst en händelse. (d) Varje datum är större än alla föregående datum....men är alla dessa villkor nödvändiga för en unik representation? (A) a behövs inte (B) b behövs inte (C) c behövs inte (D) d behövs inte (E) Alla fyra behövs 18. Man matar in följande deklarationer till ett nystartat ML-system: val x = 1; fun bar y = let val y = x+1 in x+y end; val x = 3; Därefter ger man i tur och ordning ML-systemet uttrycken bar x och y att beräkna. Vilka värden svarar ML-systemet med? (A) 3 resp. 2 (B) 3 resp. 3 (C) 3 resp. felmeddelande (D) 4 resp. felmeddelande (E) 7 resp. felmeddelande

19. Vilket av följande påståenden om algoritmer är felaktigt? (A) I dagligt tal menar man med algoritm ofta en grundläggande byggsten eller mönster som används i programmering. (B) Alla program implementerar algoritmer. (C) Problemet som algoritmen arbetar med måste kunna representeras som data (tal). (D) En algoritm avslutar alltid sitt arbete inom begränsad tid. (E) Vid varje steg av algoritmen måste det vara entydigt bestämt vad som skall göras. 20. Vad är en snäv ( tight ) asymptotisk gräns för körtiden för funktionen w nedan? Låt n vara längden av listan som är argument till w. Antag att split(l) delar upp L i två dellistor med så lika längder som möjligt. Tidsåtgången för split är linjär i längden av dess argument. OBS! För att avgöra körtiden för de två anropen av @ så måste du först bestämma längden av listan som beräknas av w(a). fun w([]) = [] w(x::xs) = let val (A,B) = split(xs) in (w(a) @ [x]) @ w(b) end (A) Θ(n) (B) Θ(n lg n) (C) Θ(n 2 ) (D) Θ(n 2 lg n) (E) Θ(2 n )