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

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

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 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 8 10, 7 april 2016

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

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

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

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, kl 8 10, 5 mars 2015

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

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 Dugga 1, kl 14-16

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

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

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

TDDC74 - Lektionsmaterial C

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

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

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

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

TDDC74 Lab 02 Listor, sammansatta strukturer

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?

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

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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

Föreläsning 9 Exempel

Rekursiva algoritmer sortering sökning mönstermatchning

Tentamen, Algoritmer och datastrukturer

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

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

Programmering II (ID1019) :00-17:00

Våra enkla funktioner eller procedurer

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.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

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

Tentamen Datastrukturer (DAT036)

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

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

Procedurer och villkor

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

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.

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

Tentamen Datastrukturer (DAT036)

Föreläsning 9 Innehåll

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

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

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

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

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

Symboliska konstanter const

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 6: Induktion

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

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 13. Träd

Tentamen TEN1 HI

Tentamen Datastrukturer, DAT037 (DAT036)

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

Programmering II (ID1019) :00-12:00

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

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

Tentamen Datastrukturer (DAT036)

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

Tentamen Datastrukturer (DAT037)

Träd. Rot. Förgrening. Löv

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

Programmering II (ID1019)

Föreläsning 4 Datastrukturer (DAT037)

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TDIU01 Programmering i C++

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

Idag: Dataabstraktion

Föreläsning Datastrukturer (DAT036)

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Algoritmer och datastrukturer 2012, fo rela sning 8

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

I dag: Blockstruktur, omgivningar, problemlösning

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

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

Föreläsning 9 Datastrukturer (DAT037)

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Transkript:

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 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 från och med sista define du öppnade. Ä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. Lycka till!

Uppgift 1. Beräkning av uttryck (4p) Vi ger DrRacket följande uttryck att beräkna (i ordningen som anges). Vilka värden får a, b, c,...? Om det uppstår fel vid definitionerna, beskriv vad för fel det är (vilken typ). > ( define a (+ 998 1)) > a > ( define b (* a b)) > b > ( define f ( lambda (a) (/ 1 0))) > f > ( define c (f 90000) ) > c > ( define g ( lambda (h) (h))) > g > ( define ret ( lambda () 112) ) > ret > ( define d (g ret )) > d > ( define e ret ) > e Uppgift 2. Box-pointer diagram (4p) a) Antag att vi har evaluerat följande Racket-uttryck (i ordning). ( define x ( list 1 2 3)) ( define y ( cons 4 ( cons 5 6))) ( define z ( cons ( cons 7 8) ( cons 9 x))) ( define w ( list ( list 10 11) ( list 12 13) )) Rita box-pointer diagram för x, y, z, w. Var noga med pekarna! (2p) b) Vi evaluerar följande uttryck: ( define p ( mcons 1 2)) ( set-mcar! p p) ( set-mcdr! p ( mcons 3 4)) ( set-mcar! ( mcar p) ( mcons 3 4)) Går den att skriva uttryck utan set-mcar! och set-mcdr!, som genererar samma struktur? Skriv kod isåfall. Motivera annars kortfattat (max två meningar) varför det inte går. (1p) 2

c) Vi evaluerar följande uttryck: ( define q ( mcons 1 2)) ( set-mcar! q ( mcdr q)) ( set-mcdr! q ( mcar q)) Går den att skriva uttryck utan set-mcar! och set-mcdr!, som genererar samma struktur? Skriv kod isåfall. Motivera annars kortfattat (max två meningar) varför det inte går. (1p) Uppgift 3. Tillstånd och omgivningsdiagram (5p) Vi ges följande kod: ( define x 24601) ( define (g arg-y ) x) ( define (f x) (g x)) (f javert ) a) När vi evaluerar koden returneras ett värde. Vilket? (1.5p) b) På nästa sida ser du fyra omgivningsdiagram. Vilket av dem visar det som händer när vi evaluerar koden ovan? Enbart en bokstav (A/B/C/D) behövs. Korrekt svar ger poäng, felaktigt ger 1p avdrag på uppgiftens poäng 1. Du behöver inte svara om du inte vill. (1.5p) c) Vi evaluerar följande: (define protagonist valjean) (define (set-protagonist! new-prot) (set! protagonist new-prot)) (set-protagonist! eponine) Vilket värde har protagonist efteråt? (2p) Motivera kortfattat (en-två meningar). 1 Uppgift 3 kan alltså inte ge minuspoäng. 3

A x: 24601 f: g: args: x body: (g x) C x: 24601 f: g: args: x body: (g x) args: arg-y body: x args: arg-y body: x GE GE x: javert E1 E2 arg-y: javert x: javert E1 arg-y: 24601 E2 B x: 24601 f: g: args: x body: (g x) D x: 24601 f: g: args: x body: (g x) GE args: arg-y body: x GE args: arg-y body: x x: javert E1 arg-y: javert x: javert E1 arg-y: javert E2 E2

Uppgift 4. Rekursionsmodeller (3p) Du ska konstruera funktionen expt-iter som tar två argument, en bas b och en exponent e och returnerar b e. b är ett godtyckligt tal, e är ett icke-negativt heltal. Funktionen ska vara rekursiv, och ge upphov till en iterativ process. Så här ska den fungera: > ( expt-iter 2 3) 8 > ( expt-iter 5 0) 1 > ( expt-iter 0 0) 1 a) Ange kod för funktionen. (2p) b) Vad är det som utmärker den iterativa processlösningen, och skiljer den från en linjärrekursiv? Motivera kortfattat (en-två meningar). (1p) Uppgift 5. Abstrakt datatyp, högre ordningens procedur (6p) Vi vill implementera en dataabstraktion som kallas för binärträd. Ett binärträd kan här vara ett tomt binärträd eller en struktur som består av tre delar: ett värde, samt vänster och höger delträd (barnen). När vi har en enstaka nod, representerar vi den som ett binärträd med ett värde och tomma delträd till vänster och höger. Nedan ser du grafisk representation av ett litet binärträd. Noden 2 har två barn. Vänster delträd är noden 1, och höger delträd är noden 3 (och allt under det). Såväl vänster och höger delträd för noden med värde 1 är det tomma binärträdet. 2 1 3 4 OBS! Försök gärna besvara alla deluppgifter, även om du inte gjort 5a! 5

Uppgift 5a) Representation (2p) Du får själv välja hur den interna representationen av binärträdet ser ut. Följande ska dock implementeras (bt står för binärträd): Konstruktorn (make-bt left value right) som skapar en inre nod. right antas vara delträd. left, Predikatet (empty-bt? eller ej. tree) som testar om ett binärträd är det tomma trädet Konstanten null-bt som representerar det tomma trädet. hur du representerar det internt. Även här får du välja Följande getters: (bt-left node), (bt-right node), (get-value node) för inre noder. Se på binärträdet i figuren ovanför, där den översta noden har värde 2. Vi skapar det (och knyter ihop namnet mytree med det) med uttrycket (define mytree (make-bt (make-bt null-bt 1 null-bt) ;; vänster delträd 2 ;; noden har värde 2 (make-bt null-bt 3 (make-bt null-bt 4 null-bt)))) ;; höger delträd Uppgift 5b) Användning (2p) Höjden av våra träd definierar vi som antalet nivåer av inre noder. I trädet ovan är höjden 3. Noden med nyckel 2 befinner sig på nivå 1, noderna med nycklar 1 respektive 3 på nivå 2, och noden med nyckel 4 på nivå 3. Höjden av det tomma trädet är 0. Definiera en procedur (tree-height tree) som tar ett träd och returnerar höjden av trädet. Använd abstraktionen beskriven i 5a. 6

> (define mytree...) ;; som ovan > (tree-height mytree) 3 > (tree-height null-bt) 0 Uppgift 5c) Högre ordningens procedur (2p) Vi har tidigare sett exempel på map, som tar en lista seq och en funktion f. Som utdata returnerar map en ny lista med samma struktur men där varje element är vad funktionen f returnerar när den appliceras på elmentet i ursprungslistan på samma position. Vi generaliserar nu det mönstret till binärträd. Definiera tmap som tar ett träd, en funktion, och returnerar ett likadant binärträd, men med resultatet av att applicera funktionen på lövvärdena, istället för de ursprungliga lövvärdena. Om mytree är trädet i illustrationen ovan, blir alltså (tmap square mytree) följande: 4 1 9 16 Använd abstraktionen beskriven i 5a. 7

Uppgift 6. Högre ordningens procedur (2p) Varje funktion f(x, y, z,...) kan omvandlas till en kedja av funktioner som tar ett argument. Den nya funktionen binder det första argumentet och returnerar något som binder det andra, och så vidare. Se nedan för ett exempel. Detta kallas currying (efter logikern Haskell Curry). Skriv en funktion curried som tar en funktion som tar exakt två argument, och returnerar en Curryad version. Du får inte använda Rackets curry. Så här ska den fungera: > (define (sum-sq x y) (+ (* x x) (* y y))) > (sum-sq 5 10) 125 > (define a (curried sum-sq)) > (define b (a 5)) ; sum-sq med första argumentet bundet till 5 > (b 10) ; bind andra argumentet. 125 8