TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Relevanta dokument
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

TDDC74 Programmering: Abstraktion och modellering Datortenta

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 3 mars 2016

TDDC74 Programmering: Abstraktion och modellering. Provkod TEN1, Tid: kl 14-18, , Kåra

TDDC74 - Lektionsmaterial C

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum:

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

Tentamen i. TDDC67 Funktionell programmering och Lisp

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Våra enkla funktioner eller procedurer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:

TDDC74 Lab 02 Listor, sammansatta strukturer

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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.

Tentamen, Algoritmer och datastrukturer

Föreläsning 9 Exempel

Rekursiva algoritmer sortering sökning mönstermatchning

Programmering II (ID1019) :00-17:00

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

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Ändringsbar (mutable compound) data. TDDC74 Programmering: abstraktion och modellering. Sätta - samman listor kopiering. Hitta sista cons-cellen

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.

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 9 Innehåll

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Idag: Dataabstraktion

Tentamen i. TDDA 69 Data och programstrukturer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Dagens föreläsning Programmering i Lisp Fö 5

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

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

Tentamen Datastrukturer (DAT036)

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

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen TEN1 HI

Datalogi, grundkurs 1

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar.

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Programmering II (ID1019) :00-12:00

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

TENTAMEN I DATAVETENSKAP

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Tillämpad Programmering (ID1218) :00-13:00

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

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

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

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Tentamen Datastrukturer D DAT 035/INN960

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

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

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Procedurer och villkor

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

Programmering II (ID1019) :00-11:00

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

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

DAI2 (TIDAL) + I2 (TKIEK)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1).

Datalogi, grundkurs 1

Algoritmer och datastrukturer 2012, fo rela sning 8

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Föreläsning 9 Datastrukturer (DAT037)

Programmering II (ID1019)

Transkript:

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd väl valda namn på parametrar och indentera din kod.väl valda namn omfattar exempelvis att inte blanda språk. Om du vill avsluta samtliga parenteser i en funktionsdefinition, kan du om du vill skriva en stor parentes: ]. Observera att detta innebär att du sluter samtliga öppna parenteser. Även om det i uppgiften står att du skall skriva en procedur/funktion, så får du skriva ytterligare hjälpfunktioner som kan vara nödvändiga. Observera att poängavdrag kan ges för onödigt komplicerade eller ineffektiva lösningar. Betygsgränser: 12-15 betyg 15.5-18.5 betyg 4 19-24 betyg 5 Lycka till!

Uppgift 1. Beräkning av uttryck (4 poäng) Vi ger DrRacket följande uttryck att beräkna (i ordningen som anges). Vilka värden returneras? Om det blir fel, beskriv varför (vilken typ av fel). > ( define a a) > a > ( define f ( lambda () +)) > f > ( define g ( lambda args *)) > g > ( define x (g ( cons 1 2))) > x > ( define y (f 1 2)) > y > ( define z ((f) 17 18) ) > z > ( define u (a 19) ) > u > ( define v (( lambda (x y) y) u)) > v Uppgift 2. Box-pointer diagram (4 poäng) Antag att vi har evaluerat följande Racket-uttryck (i ordning). ( define p ( mcons 7 0)) ( set-mcdr! p ( mcons p p)) ( set-mcdr! ( mcdr p) 7) ( define q ( mcons 1 2)) ( set-mcar! q ( mcons 1 ( mcons 2 ( mcons ())))) ( set-mcdr! q ( mcdr ( mcar q))) a) Rita box-pointer diagram som visar de slutliga strukturer som p och q är bundna till. Du behöver alltså inte visa alla strukturella förändringar stegvis. b) En av strukturerna p och q kan skapas utan att man använder set-mcar! eller set-mcdr!. Vilken? Skriv den kod som skapar den. Du får använda define, let eller lambda i samband med din lösning. 2

Uppgift. Tillstånd och omgivningsdiagram (5 poäng) Vi ges följande kod: ( define val 100) ( define (g x) (* val x)) ( let ([ val 9]) (g )) a) När vi evaluerar koden returneras ett värde. Vilket? (1.5p) b) På nästa sida ser du fyra omgivningsdiagram. Vilket uppstår när vi evaluerar koden ovan? Enbart en bokstav (A/B/C/D) behövs. Korrekt svar ger 1.5 poäng, felaktigt svar leder till ett avdrag på 1.0 poäng 1. Du behöver inte svara denna deluppgift om du inte vill. (1.5p) c) Vi ges följande kod: (define (change-val! var new-val) (set! var new-val)) (define tesco cat) (change-val! tesco dog) Vilket värde har tesco efteråt? Varför? Motivera kortfattat (max en-två meningar). (2p) 1 Uppgift kan alltså inte ge minuspoäng.

A g: val: 100 GE val: 9 E1 B g: val: 100 GE val: 9 E1 x: E2 x: E2 args: x body: (* val x) args: val body: (g ) args: x body: (* val x) args: val body: (g ) C g: val: 100 9 GE x: E1 D g: val: 100 GE val: 9 E1 x: E2 args: x body: (* 100 x) args: val body: (g ) args: x body: (* val x) args: val body: (g )

Uppgift 4. Rekursionsmodeller (4 poäng) Nedan ges du kod för en funktion som tar en lista av tal, och returnerar summan av kvadraten av varje element: ( define ( square x) (* x x)) ( define ( sum-square seq ) (if ( null? seq ) 0 (+ ( square ( car seq )) ( sum-square ( cdr seq ))))) a) Ger proceduren upphov till en linjärrekursiv eller iterativ process? Varför? Motivera kortfattat, max två meningar. (1p) b) Visa hur evaluering av (sum-square (5)) går till med hjälp av substitutionsmodellen. (1p) c) Skriv en version enligt den andra processmodellen (om linjärrekursiv, skriv en iterativ, och vice versa). (2p) Uppgift 5. Högre ordningens procedurer (2 poäng) Skriv en funktion i Scheme min-of-f-and-g-at-x som tar två numeriska funktioner f och g och ett tal x som argument och returnerar det minsta av värdena f(x) och g(x). I din lösning, får du - om du så önskar - använda inbyggda funktionen min i Scheme som returnerar det minsta av sina argument. (define square (lambda (x) (* x x))) (define cube (lambda (x) (* x x x))) > (min-of-f-and-g-at-x square cube -1) -1 > (min-of-f-and-g-at-x square cube 2) 4 5

Uppgift 6. Abstrakt datatyp och problemlösning (5 poäng) Vi vill implementera en dataabstraktion som kallas för binärträd. Ett binärträd kan här vara ett tomt träd eller en struktur som består av tre delar: ett värde, samt vänster och höger delträd (barnen). I namnen föreslagna nedan använder vi bt som förkortning för binärträd. Följande figur visar en grafisk representation av ett litet binärträd. Man brukar också säga att ett sådant träd har noder och bågar. Noderna visas här som cirklar och bågarna som linjer som sammankopplar noderna. Man använder även begreppet barn för de noder som är direkt kopplade till en nod och finns under noden. T ex säger man att noden med värdet har två barn, noden med värdet 1 och noden med värdet 10. Nod 10 har ett barn och noderna 1 och 15 har inga barn. 1 10 15 OBS! I din lösning till 6b nedan kan du anta att de funktioner som implementerar ett binärträd enligt 6a finns och fungerar som de skall. Detta även om du inte har en korrekt/fullständig lösning till 6a. Uppgift 6a) Representation (2p) Du får själv välja hur den interna representationen av trädet ser ut. Följande ska dock implementeras: Konstruktorn (make-bt left value right) som skapar ett binärt träd. left och right antas vara delträd. Predikatet (empty-bt? ej. tree) som testar om tree är det tomma trädet eller Konstanten null-bt som representerar det tomma trädet. hur du representerar ett tomt träd. Även här får du välja Följande getters: (bt-left bt), (bt-right bt), (get-value bt) för inre noder. Här är ett exempel på hur det ska fungera (här skapar vi trädet i figuren ovan): 6

(make-bt (make-bt empty-bt 1 empty-bt) (make-bt empty-bt 10 (make-bt empty-bt 15 empty-bt))) 7

Uppgift 6b) Användning (p) Ovan har vi definierat ett binärträd (binärt eftersom varje nod har som mest 2 barn/delträd). Ett binärt sökträd är ett binärträd som är ordnat på detta vis: varje nod har ett värde. Alla värden i vänster delträd är mindre än detta värde och alla värden i höger delträd är större. Om vi har hittat ett träd med värde 5 och letar efter talet 7, kommer det alltså att finnas i höger delträd (om det alls finns). Ett värde förekommer som mest en gång. Trädet i 6a är ett exempel på ett binärt sökträd. Din uppgift är att skriva en funktion (insert tree new-value) som tar ett värde och ett binärt sökträd, och returnerar ett nytt binärt sökträd som innehåller värdet. Exempel Betrakta trädet i uppgift 6a. Om vi sätter in värdet 8 i det, får vi alltså ett träd som ser ut som följer: 1 10 8 15 Sätter vi in 2 i detta träd, får vi givetvis 1 10 2 8 15 Använd abstraktionen beskriven i 6a. 8