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

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

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

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

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

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. Provkod TEN1, Tid: kl 14-18, , Kåra

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 - Lektionsmaterial C

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

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

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

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

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 Lab 02 Listor, sammansatta strukturer

Tentamen i. TDDC67 Funktionell programmering och Lisp

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

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?

Våra enkla funktioner eller procedurer

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

Tentamen i. TDDA 69 Data och programstrukturer

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

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

Länkade strukturer. (del 2)

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

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

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

Idag: Dataabstraktion

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

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

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.

Funktionell programmering DD1361

Föreläsning 9 Exempel

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

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.

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

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

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

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

Kurskod D0010E Datum Skrivtid 5tim

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Datalogi, grundkurs 1

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

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

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

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

Procedurer och villkor

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Dugga Datastrukturer (DAT036)

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

729G04 Programmering och diskret matematik

Föreläsning 3. Stack

Föreläsning 11. ADT:er och datastrukturer

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

DAI2 (TIDAL) + I2 (TKIEK)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

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å

Programmering II (ID1019) :00-12:00

Uppgift 1 ( Betyg 3 uppgift )

Programmering II (ID1019) :00-17:00

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

Några saker till och lite om snabbare sortering

Classes och Interfaces, Objects och References, Initialization

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

Övning 1 - Abstrakta datatyper

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

Datastrukturer. föreläsning 3. Stacks 1

Tentamen Datastrukturer (DAT037)

729G04 Programmering och diskret matematik

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Programmering II (ID1019) :00-11:00

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

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

TDIU01 / 725G

Transkript:

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 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. Även om det i uppgiften står att du skall skiva en procedur/funktion, så får du skriva ytterligare hjälpfunktioner som kan vara nödvändiga. Betygsgradering: 12 15,5 betyg 3 16 19,5 betyg 4 20 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 (+ ( cons 0 (+ 4 2))) 0) > a > ( define x (1 x 3)) > x > ( define b ( cadr x)) > b > ( define c ( apply ( lambda (a b c) (- a c)) x)) > c > ( define f ( lambda (n m) (- n ( car x)))) > f > ( define h ( lambda (a b c) (f b f))) > h > ( define z (h 1 2 3)) > z > ( define w (f (f h 42) h)) > w Uppgift 2. Box-pointer diagram (4 poäng) En av strukturerna nedan kan skapas utan muterbara strukturer (alltså enbart med cons, car och cdr). Den andra kräver att man använder mcons, mcar, mcdr, set-mcar! och set-mcdr!. Skriv kod som skapar strukturerna. Du får bara använda muterbara par när du bygger den av strukturerna som kräver det. Förtydligande: i såväl foo som bar pekas det på hela par (inte enbart car- eller cdr-delen). 2

Uppgift 3. Rekursiva procedurer (3 poäng) Ni ska bygga en specialvariant av ett program som bit-shiftar en sekvens av bitar (ettor och nollor). Vi representerar en bit med heltalen 0 och 1. Vi representerar en sekvens av bitar som en lista med heltal. Implementera proceduren bit-shift, som tar en bit new-bit, och en lista med bitar bit-list, och returnerar en bitshiftad version av bit-list (där new-bit skiftats in). Vi får en bitshiftad version genom att skriva new-bit till vänster om den gamla sekvensen och sedan ta bort det sista elementet i listan. Körexempel Så här skall den fungera: > (bit - shift 1 (1 0 1 1)) (1 1 0 1) > (bit - shift 0 (1 0 0 1 1)) (0 1 0 0 1) > (bit - shift 0 (1)) (0) Begränsning Ni får enbart använda primitiverna car, cdr, cons, null? samt special forms define och if. Konstanter som () får användas fritt. Ni kan förutsätta att den givna listan inte är tom och såväl new-bit som innehållet i listan är korrekt (alltså enbart innehåller 0:or och 1:or). Uppgift 4. Högre ordningens procedurer och omgivningsdiagram (4 poäng) En funktion på formen f(x) = x k, där k är ett positivt heltal, kallas ett monom (engelska: monomial). Ett sådant monoms grad (engelska: degree) är k. De fyra första monomen är x, x 2, x 3, x 4 (av graderna 1, 2, 3 respektive 4). De första tre har egna namn: identitet/identity (x), kvadrat/square (x 2 ) och kub/cube (x 3 ). Uppgift 4a. (2 poäng) Skriv funktionen make-monomial, som tar ett heltal degree som argument, och returnerar en funktion som representerar monomet av grad degree. 3

Körexempel Så här skall det fungera: ( define id ( make - monomial 1)) ( define square ( make - monomial 2)) ( define cube ( make - monomial 3)) ( define degsix ( make - monomial 6)) > (id 7) 7 > ( square 3) 9 > ( cube 3) 27 > ( degsix 2) 64 Uppgift 4b. (2 poäng) Rita upp omgivningsdiagram som skapas när man först evaluerar din definition av make-monomial, och sedan ( define id ( make - monomial 1)) (id 7) Markera globala omgivningen (GE) tydligt, och numrera ramarna i den ordning de skapas (E1, E2,... ). Du behöver inte skriva ut all kod i procedurkropparna (body), men det ska tydligt framgå vilken kod du hänvisar till. Uppgift 5. Begreppsfrågor (3 poäng) Förklara kortfattat (1-3 meningar per delfråga): 1. Den huvudsakliga eller viktigaste skillnaden mellan funktionell programmering och imperativ programmering 2. Den huvudsakliga eller viktigaste skillnaden mellan applicative order evaluation och normal order evaluation 3. Vad substitutionsmodellen innebär (och när den går respektive inte går att använda). 4

Uppgift 6. Abstrakt datatyp med listor (6 poäng) En stack är en abstrakt datatyp som följer sist in-först ut (SIFO). Man lägger till element genom att trycka ned alla tidigare element, och lägga det nya överst (push). Det nya elementet är då TOS (Top Of Stack). Man kan plocka bort elementet som är TOS med hjälp av pop, och får då tillbaka elementet. Ni ska implementera en stack med följande funktionalitet: 1. push - Lägg till ett element på stacken. 2. pop - Ta bort nuvarande element som är TOS, och returnera det (om möjligt). 3. peek - Returnera elementet som är TOS, utan att ta bort det (om möjligt). 4. contents - Returnera hela stackens innehåll som en lista. 5. size - Returnera stackdjupet (hur många element finns på stacken). 6. empty? - Kontrollera om stacken är tom. Som en underliggande datastruktur kommer vi att använda en enkel lista och vi representerar den tomma stacken med den tomma listan. Färdigställ kodskelettet nedan: ( define (make - stack ) ( let (( stack - list ())) ( define ( push element )...) ( define ( pop )...) ( define ( peek )...) ( define ( contents )...) ( define ( size )...) ( define ( empty?)...) ( define ( dispatch. message ) (if ( null? message ) ( error " Command needed!") ( case ( car message ) [( push ) ( push ( cadr message ))] [( pop ) ( pop )] [( peek ) ( peek )] [( contents ) ( contents )] [( size ) ( size )] [( empty?) ( empty?)] [ else ( error " Undefined!" ( car message ))]))) dispatch )) 5

Uppgift 6a. (5 poäng) Implementera de sex procedurerna. Ni får endast använda de grundläggande listoperanderna car, cdr, cons och null? samt set! och if special formerna. Notera att funktionerna pop och peek kräver en säkerhetskontroll; är stacken tom ska programmet skriva ut ett lämpligt felmeddelande. Körexempel Så här ska er stack fungera: > ( define my - stack (make - stack )) > (my - stack empty?) #t > (my - stack push foo ) > (my - stack push bar ) > (my - stack push buh ) > (my - stack contents ) ( buh bar foo ) > (my - stack size ) 3 > (my - stack peek ) buh > (my - stack pop ) buh > (my - stack contents ) ( bar foo ) > (my - stack pop ) bar > (my - stack pop ) foo > (my - stack peek ) error : Stack is empty! Uppgift 6b. (1 poäng) Förklara vad ett gränssnitt (interface) eller en gränssnittsspecifikation (interface specification) är, inom ramen för en diskussion om abstrakta datatyper. Ge också ett exempel. 6