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

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

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

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, 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 Datordugga 2 - exempel

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

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 - Lektionsmaterial C

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

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

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

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 1, exempeldugga

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

TDDC74 Lab 02 Listor, sammansatta strukturer

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)

Tentamen i Programmering

Våra enkla funktioner eller procedurer

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

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

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

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

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

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

Objektorienterad programmering i Racket

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 9 Exempel

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

Objektorienterad programmering i Racket

Tentamen i. TDDA 69 Data och programstrukturer

Deklarationer/definitioner/specifikationer

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

Classes och Interfaces, Objects och References, Initialization

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

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

Modularitet och tillstånd. Stora system kräver en uppdelning. En lösning: modularitet. Basera programmets struktur på den fysiska systemets struktur:

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

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

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

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

Datalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Rekursiva algoritmer sortering sökning mönstermatchning

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.

Datalogi, grundkurs 1

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

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

OOP Objekt-orienterad programmering

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

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

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Tentamen Datastrukturer (DAT037)

Datalogi, grundkurs 1

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

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen Grundläggande programmering

Tentamen i Grundläggande Programvaruutveckling, TDA548

Grafik i DrRacket AV TOMMY KARLSSON

Tentamen *:58/ID100V Programmering i C Exempel 3

Tentamen i Introduktion till programmering

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

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

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

OBS!! Detta är DEL 2 av tentan. För att få ut denna måste du ha lämnat in del 1. Om du inte fått ut del 1 bör du meddela skrivningsvakten. OBS!!

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen i Objektorienterad modellering och design

Tentamen Datastrukturer, DAT037 (DAT036)

Transkript:

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, 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. Betygsgränser: 12 15 betyg 3 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 x 55) > x > ( define y 64) > y > ( define z ( set! y ( list 42) )) > z > ( define inc ( lambda (n) (+ n 1))) > inc > ( define a ( lambda (a b c) ( list x y z))) > a > ( define b (a x y z)) > b > ( define c ( inc x)) > c > ( define d ( inc y)) > d > ( define e ( inc z)) > e Uppgift 2. Box-pointer diagram (4 poäng) a) Antag att vi har evaluerat följande Racket-uttryck (i ordning). ( define x ( let (( tmp ( cons 2 3))) ( cons 1 ( cons tmp tmp )))) ( define y ( cons 4 5)) ( define z ( cons ( car ( car ( cdr x))) y)) ( define u ( cons ( cdr ( cdr x)) ( cdr x))) Rita box-pointer diagram för strukturerna x, y, z, och u. Var noga med pekarna! 2

b) Skriv Schemekod som skapar dessa två strukturer. Du får bara använda muterbara par när/om det krävs. Du får använda define och let var du vill. Uppgift 3. Omgivningsdiagram (4 poäng) Betrakta koden nedan: ( define ( make - account balance ) ( lambda ( cmd value ) ( cond [( eq? cmd set ) ( set! balance value ) balance ] [( eq? cmd add ) ( set! balance (+ balance value )) balance ] [ else ( printf " Unknown command \n") ]))) ( define account1 ( make - account 1) ) ( define account2 ( make - account 22) ) ( account1 add ) ( account1 set 6) ( account2 add 1) Rita omgivningsdiagram som visar det som händer när man evaluerar koden ovan. Markera globala omgivningen (GE) tydligt, och numrera ramarna i den ordning de skapas (E1, E2,...). Du behöver inte skriva ut all kod som finns i procedurkroppar (body), men det skall tydligt framgå vilken kod du hänvisar till. 3

Uppgift 4. Rekursiva vs iterativa processer (5 poäng) Vi betraktar funktionen f som tar in ett heltal och returnerar det n:te fibonaccitalet: f(n) = { n om n < 2 f(n 1) + f(n 2) om n 2 a) (3 poäng) Ange två implementationer av f i Racket, en rekursiv processlösning frek och en iterativ processlösning fiter. b) (2 poäng) Använd subtitutionsmodellen för att beräkna (frek 3) och (fiter 3). Uppgift 5. Data-abstraktion (7 poäng) Den här uppgiften har tre delar, men dessa kan lösas oberoende av varandra. Ett polynom (engelska polynomial) kan representeras som en följd av koefficienter. I Racket kan det göras som en lista av koefficienterna. Till exempel kan vi låta listan (5 6 7 8) stå för polyomet 8x 3 + 7x 2 + 6x + 5 och listan (3 1) för polynomet x 2 + 3. Det sista ser vi kanske tydligare om vi skriver x 2 + 3 = 1x 2 + x 1 + 3x. Polynomets grad (engelska degree) är den högsta förekommande exponenten. Graden av 8x 3 + 7x 2 + 6x + 5 är därmed 3 och graden av x 2 + 3 är 2. Vi vill implementera en datatyp Polynomial som representerar ett polynom. Datatypen skall ha följande funktionalitet: beräkna graden (degree) läsa en specifik koefficient evaluera polynomet i en given punkt 4

Här är kod skelettet för klassen Polynomial%. ( define Polynomial % ( class object % ( init - field coefficients ) ( define / public (get - degree )...) ( define / public ( get - coefficient index )...) ( define / public ( evaluate -at value )...) (super - new ))) Den interna representationen av polynomet skall vara en vanlig lista av koefficienterna coefficients. Så här skall det fungera: > ( define pol (make - object Polynomial % (3 1))) ; x^2 + 3 > ( send pol get - degree ) 2 > ( send pol get - coefficient ) 3 > ( send pol get - coefficient 1) > ( send pol get - coefficient 2) 1 > ( send pol get - coefficient 3) > ( send pol get - coefficient 65535) ; get highest - index non - zero coefficient > ( send pol get - coefficient ( send pol get - degree )) > 1 > ( send pol evaluate - at 3) 12 > ( send pol evaluate - at 4) 19 5

Uppgifter a) (3 poäng) Implementera get-degree och get-coefficient så att de fungerar som förväntat. Du får använda car och cdr för att hantera listan av koefficienterna. OBS! Observera att den första koefficienten har index och dessutom att get-coefficient skall returnera när man anger ett index som är högre än polynomets grad. b) (2 poäng) Betrakta nedanstående implementation av evaluate-at. ( define / public ( evaluate -at value ) ( define ( helper coef e) (if ( null? coef ) (+ (* ( car coef ) ( expt value e)) ( helper ( cdr coef ) (+ e 1))))) ( helper coefficients )) Som du kan se beror koden på representationen av polynomet som lista. Förbättra koden och skriv den om så att den är oberoende av polynomets representation (d.v.s. använd abstrakioner från a) i stället för car och cdr). c) (2 poäng) Vi utökar lite funktionalitetet av vår datatyp. Metoden get-as-function returnerar en vanlig Racket-funktion som representerar polynomet. ( define / public (get -as - function ) ( lambda ( value ) ( evaluate -at value ))) Hur uppför sig denna metod? Vi kallar get-as-function och får polynomet som en vanlig funktion, säg f. Om vi sedan modifierar polynomet (vilket händer om vi t.ex. adderar polynom, eller ändrar en koefficient), så ändras också beteendet av vår funktion f. Det vill säga att funktionen f inte fungerar som en kopia av polynomet utan som en referens till polynomet. Utöka koden så att den returnerade funktionen fungerar som en kopia. Tips Vad är mer praktiskt? Att ta en kopia av listan av koefficienterna eller av hela polynom-objektet? 6