TDDC74 Programmering, abstraktion och modellering. Tentamen

Relevanta dokument
TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

Tentamen i. TDDC67 Funktionell programmering och Lisp

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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

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

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

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

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

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

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

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

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

TDDC74 - Lektionsmaterial C

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 3, kl 14 16, 25 mars 2015

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

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

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

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

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

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

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

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

TDDC74 Lab 02 Listor, sammansatta strukturer

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

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

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

Rekursiva algoritmer sortering sökning mönstermatchning

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Idag: Dataabstraktion

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

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

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

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

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

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

Föreläsning 9 Exempel

Tentamen i. TDDA 69 Data och programstrukturer

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Datalogi, grundkurs 1

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

Datalogi, grundkurs 1

Programmering II (ID1019) :00-17:00

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.

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

Procedurer och villkor

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Våra enkla funktioner eller procedurer

Tentamen Datastrukturer (DAT037)

Sätt att skriva ut binärträd

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

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

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

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

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

I dag: Blockstruktur, omgivningar, problemlösning

tentaplugg.nu av studenter för studenter

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Idag: Dataabstraktion

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

Programkonstruktion och. Datastrukturer

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Uppgift 1 ( Betyg 3 uppgift )

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

Programkonstruktion och Datastrukturer

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

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

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Programmeringsteknik med C och Matlab

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 7 augusti 2015, kl 08:00-12:00

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

Föreläsning 6: Introduktion av listor

ADT Set, Map, Dictionary. Iteratorer TDDD86: DALGP. Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer och algoritmer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

Transkript:

AID-nummer: Datum: 2011-01-11 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 11 januari 2011 kl 14-18 Uppgifterna löses direkt på denna uppgiftslapp, som lämnas in i sedvanligt tentamensomslag. Skriv tydligt så att inte dina lösningar missförstås. Använd väl valda namn på parametrar etc. Du får gärna använda extra blad om du behöver mer utrymme för svaren. Även om det i uppgiften står att du skall skriva en funktion, så får du gärna skriva ytterligare hjälpfunktioner, som kan vara nödvändiga. På uppgifterna kan halva poäng utdelas. Totalt kan 24p erhållas. Betygsgradering: 12-16,5 betyg 3 17-20,5 betyg 4 21-24 betyg 5 Lycka till Observera: För studenter som gått kursen före vt 2010. Från och med PRAM-kursen vt 2010 har en ny standard för Scheme använts. Enda skillnaderna är att när man gör pekarändringar i cons-celler måste dessa ha skapats med mcons, och delarna tas ut med mcar och mcdr, samt att ändringar görs med set-mcar! resp set-mcdr!. Vi tillåter i denna tenta även den gamla konventionen där ni bara använder cons, car, cdr, set-car! samt set-cdr!. Man kallar dessa ändringsbara cons-celler för muterbara, därav m et i namnet. De nya namnen används i första hand i uppgift 2.

AID-nummer: Datum: 2011-01-11 2 Uppgift 1. Beräkning av uttryck (2 poäng) Vi ger följande uttryck för beräkning. Vilket värde skrivs ut eller om det blir fel, beskriv typen av fel. > (define x (cons 1 (+ 2 3)))) > x = > (quote x) = > (x) = > (define y (list x x (- 6 3))) > y = > (define z (lambda (x) (+ (car x) (cdr (car y))))) > z = > (z (car y)) = > (define f list) > (define (h g k) (g g k)) > (h f 10) = > (h h 10) = Poäng: 0-1 rätt 0p 2-3 rätt 0,5p 4-5 rätt 1,0p 6-7 rätt 1,5p 8 rätt 2,0p

AID-nummer: Datum: 2011-01-11 3 Uppgift 2. Listor, cons-celler och pekare (3 poäng) 2a. (1p) Vad blir värdet i parentesformat av följande uttryck. Rita även upp värdet med den grafiska representationen med cons-celler och pekare (box and pointer notation). > (define test (list (cons 1 (2)) (list 3 4))) > test = 2b. (1p) Skriv Scheme-uttryck som skapar följande struktur. Vilket värde skrivs ut i parentesformat? p () a b () 2c. (1p) Utgående från strukturen i 2b. Vad blir värdet av p och q efter att följande uttryck har beräknats. > (define q (mcar p)) > (set-mcar! (mcdr q) x) > p = > q = > (set-mcdr! q (mcdr p)) > p = > q = Visa nedan hur strukturen ser ut efter ändringarna. Rita pilar och lägg in värden. p q e 1

AID-nummer: Datum: 2011-01-11 4 Uppgift 3. Rekursiva funktioner med tal (5 poäng) Skriv två rekursiva funktioner (kapital startkapital antal-år ränte-sats), som dels gör en rekursiv processlösning och dels en iterativ (linear) processlösning, som beräknar hur kapitalet ökar med ränta på ränta efter ett antal år, givet startkapital i kronor, antal år (>= 0) och räntesats (i procent). Startkapitalet 1000:- efter 2 år med 10% ränta. Efter 1 år är det 1100:-. Efter två år 1210:- > (kapital 1000 2 10) = 1210 Funktionen får ej definieras så att man med ett enda uttryck direkt beräknar kapitalet, utan skall ske steg för steg med en rekursiv modell. (1p) Beskriv först vad som är skillnaden mellan en rekursiv resp. iterativ processlösning. (2p) Rekursiv processlösning: (define (kapital-rec kap år ränta) (2p) Iterativ processlösning (define (kapital-iter kap år ränta)

AID-nummer: Datum: 2011-01-11 5 Uppgift 4. Rekursiva och högre ordningens procedurer på sekvenser (7 poäng) 4a.(2p) Skriv en rekursiv funktion (stigande-ordning? lista), som tar en lista med tal och undersöker om dessa kommer i stigande ordning, dvs minsta talet först. Listan innehåller minst ett element. > (stigande-ordning? (1 3 6 9)) = #t > (stigande-ordning? (3)) = #t > (stigande-ordning? (2 3 6 4 5)) = #f ; 6 och 4 kommer i fel ordning. (define (stigande-ordning? lista) 4b. (1,5 p) Skriv en högre ordningens funktion ordning?, som tar en lista och en ordningsfunktion, som skall ange önskad sorteringsordningen mellan elementen. Ordningsfunktionen tar två värden, som skall jämföras. Om första parameterns värde skall komma före den andra parameterns värde returnerar ordningsfunktionen #t, annars ett #f. Med ordningsfunktionen < sorterar man i stigande ordning, dvs ett mindre tal kommer före ett större. > (ordning? (2 4 7) <) = #t ; elementen kommer i stigande ordning > (ordning? (10 8 2 5) >) = #f ; elementen kommer ej strikt i fallande ordning (define (ordning? lista ord-fn) Ge ett uttryck för??? så att vi kan undersöka om sista siffran i en lista med tal kommer i stigande ordning. Definiera lämpligen en funktion sista-siffran. > (ordning? (14 4327 238 9)???)) = #t ; dvs sista siffran i varje tal kommer i stigande ordning??? =

AID-nummer: Datum: 2011-01-11 6 Uppgift 4. Rekursiva och högre ordningens procedurer på sekvenser, forts 4c. (1,5 p) Vi önskar en funktion skapa-ordningsfunktion, så att man med hjälp av ordning? från uppgift 4b, kan skapa en specialiserad ordningsfunktion, t ex > (define stigande? (skapa-ordningsfunktion <)) > (stigande? (2 4 6)) = #t (define (skapa-ordningsfunktion ord-fn) Med hjälp av ovanstående funktion definiera en funktion längd-fallande?, som undersöker om dellistorna i en lista kommer i fallande längd. > (längd-fallande? ((1 2 3 4 5) (a b c d) (x y) ())) = #t (define längd-fallande?

AID-nummer: Datum: 2011-01-11 7 Uppgift 4. Rekursiva och högre ordningens procedurer på sekvenser, forts 4d. (2p) Skriv en funktion (ta-bort-tal lista) som tar bort alla talen i en godtycklig lista, dvs elementen i listan kan i sin tur vara listor. Inga punkterade par ingår. > (ta-bort-tal ((1) 2 a (b (3 c) 4) d 5)) = (() a (b (c)) d) (define (ta-bort-tal lista)

AID-nummer: Datum: 2011-01-11 8 Uppgift 5. ADT Abstrakt datatyp och objektorientering (4p) En stack är en datastruktur där man lägger till ett element överst och man kommer åt det översta elementet, som kan tas bort. Stack = sist in först ut. Vi önskar en abstrakt datatyp stack med följande primitiva operationer: skapa-stack : -> stack lägg-in : element x stack -> stack toppen : stack -> element ta-bort : stack -> stack tom-stack? : stack -> sanningsvärde stack-längd : stack -> heltal Vi kan nu skapa en stack s och använda operationerna: > (define s (skapa-stack)) > (set! s (lägg-in kalle s)) > (set! s (lägg-in lisa s)) > (stack-längd s) = 2 > (toppen s) = lisa > (set! s (ta-bort s)) > (toppen s) = kalle > (tom-stack? s) = #f > (set! s (ta-bort s)) > (tom-stack? s) = #t Vi kan representera stacken som en vanligt lista, där första element är en typmärkning stack, och definiera de primitiva operationerna. > (define (skapa-stack) (cons stack ())) > (define (lägg-in e stack) (cons stack (cons e (cdr stack)))) > (define (toppen stack) (car (cdr stack))) > (define (ta-bort stack)???) > (define (tom-stack? stack)???) > (define (stack-längd stack)???) 5a. (2p) Komplettera koden för de tre sista primitiva operationerna ovan.

AID-nummer: Datum: 2011-01-11 9 Uppgift 5. ADT Abstrakt datatyp och objektorientering, forts 5b. (2p) Gör en objektorienterad packetering av denna abstrakta datatyp. Inför metoder med samma namn. Nu skall vi kunna skriva något i stilen med följande: Exakt hur det ser ut kan bero på hur du gör din packetering. > (define s (skapa-stack)) > ((s lägg-in) kalle) > ((s lägg-in) lisa) > (s stack-längd) = 2 > (s toppen) = lisa > (s ta-bort) > (s toppen) = kalle > (s tom-stack?) = #f > (s ta-bort) > (s tom-stack?) = #t

AID-nummer: Datum: 2011-01-11 10 Uppgift 6. Procedurobjekt och omgivningsdiagram (3p) 6a. (0,5p) Använd omgivningsdiagram för att visa om följande i Scheme är korrekt eller ej. Kan en formell parameter ha samma namn som själva proceduren? > (define (a a) (+ a 1)) > (a 2) =? 6b. (0,5p) Använd omgivningsdiagram för att visa om följande i Scheme är korrekt eller ej. Kan en formell parameter ha samma namn som en funktion och vi kan göra rekursiva anrop av funktionen. > (define (b b) (if (= b 0) () (cons x (b (- b 1))))) > (b 3) =? 6c. (2p) Förklara vad nedanstående funktion gör. Rita upp omgivningsdiagrammet när följande uttryck ges till Scheme. Du skall ange i vilken ordning ramar, bindningar och procedurobjekt skapas. Efter beräkningarna skall du ange vilka ramar som ej längre behövs. > (define (minne fn) (let ((arg-värde-lista ())) (lambda (ett-arg) (if (assq ett-arg arg-värde-lista) (cdr (assq ett-arg arg-värde-lista)) (let ((värdet (fn ett-arg))) (set! arg-värde-lista (cons (cons ett-arg värdet) arg-värde-lista)) värdet))))) > (define (f n) (display "n= ") (display n) (newline) (+ n 5)) > (define fm (mine f)) > (fm 3) =? > (fm 3) =? > (fm 10) =? > (fm 10) =?