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

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

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

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 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 Tenta, kl 14 18, 11 juni 2014

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

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

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

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

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

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

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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?

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. Tentamen

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

TDDC74 Programmering, abstraktion och modellering DUGGA 3

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

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

Tentamen i. TDDC67 Funktionell programmering och Lisp

TDDC74 Lab 02 Listor, sammansatta strukturer

Datalogi, grundkurs 1

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

Föreläsning 9 Exempel

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

TDDC74 - Lektionsmaterial C

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

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

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

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

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

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

TDDC74 Programmering, abstraktion och modellering DUGGA 1

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Sökning och sortering

Idag: Dataabstraktion

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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Tentamen Datastrukturer (DAT037)

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

Datalogi, grundkurs 1

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

Dugga Datastrukturer (DAT036)

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Datalogi, grundkurs 1

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

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

Programkonstruktion. Tentamen,

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

Tentamen i. TDDA 69 Data och programstrukturer

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

Objektorienterad programmering i Racket

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

Funktionell programmering DD1361

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

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

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

Tentamen Datastrukturer, DAT037 (DAT036)

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.

Programmering II (ID1019) :00-11:00

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

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

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å

Tentamen *:58/ID100V Programmering i C Exempel 3

Objektorienterad programmering i Racket

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

kl Tentaupplägg

Tentamen Datastrukturer (DAT036)

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

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

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

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

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

Tentamen Datastrukturer, DAT037 (DAT036)

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

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Rekursiva algoritmer sortering sökning mönstermatchning

Programmering II (ID1019) :00-17:00

Förra gången: Primitiva data

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

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

TDP002 - Imperativ programmering

Del A (obligatorisk för alla)

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

Programkonstruktion. Tentamen,

Transkript:

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015 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. 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 define. Även om det i uppgiften står att du skall skiva en procedur/funktion, så får du gärna skriva ytterligare hjälpfunktioner som kan vara nödvändiga. OBS! Du får använda define för att definiera procedurer och namn. Men du får inte använda det (eller set!) för att ändra på/uppdatera variabelvärden. Tanken är att lösningarna ska vara strikt funktionella. Betyg: Det finns tre duggor i kursen. På varje dugga kan man få som mest 12p (så totalt 36p för alla tre). För att bli godkänd på en dugga krävs minst 3p. För att kunna få betyget 3 på duggorna måste du sammanlagt (på alla tre duggor) ha fått minst 18p, för betyget 4 gäller minst 23p och för betyget 5 minst 27p. För att bli godkänd på duggaserien måste du dessutom ha godkänt på samtliga duggor. Lycka till!

Uppgift 1 (3 poäng) a) Antag att vi har evaluerat följande uttryck i Racket. ( define x 42) ( define y ( lambda (z) z)) ( define a ( cons x y)) ( define b ( cons x y)) ( define c (0 1 2)) Rita box-pointer-diagram för dessa strukturer. Var noga med pekarna! a b c ( cons x ( cons c ( cons y ()))) ( cons a a) ( cons (y 5) ( cons x y)) b) Skriv Racketkod som skapar dessa två strukturer: Förtydligande: samtliga pilar pekar på hela paret (det vill säga, inte enbart car-delen eller cdr-delen). 2

Uppgift 2 (3 poäng) I denna uppgift ska du byta ut ett element på en given plats i en lista. Skapa proceduren replace-at-rank som har parametrarna seq, index and value. seq ska vara en lista med heltal, och index och value heltal. Proceduren ska returnera en kopia av listan seq, men där heltalet på plats index har bytts mot value. List-index börjar på 0. Det vill säga, om listan seq har n element så är 0 första elementet och n 1 det sista. Detta ska fungera: > ( replace - at - rank (1 1 1 1 1 1) 0 42) (42 1 1 1 1 1) > ( replace - at - rank (1 1 1 1 1 1) 3 42) (1 1 1 42 1 1) Du kan anta att seq och value är heltal (ingen kontroll behöver göras), och att det finns något på plats index (det vill säga, 0 index n 1). Uppgift 3 (3 poäng) OBS! Läs alla deluppgifter. Det kan hända att du kan lösa uppgift b, även om du inte har en egendefinierad lösning på uppgift a. Vi säger att ett tal är perfekt om summan av dess delare (undantaget talet självt) är talet. Till exempel är talet 6 perfekt. Dess delare (undantaget talet 6) är 1, 2, 3, och 1 + 2 + 3 = 6. Talet 14 är inte perfekt, för 1 + 2 + 7 = 10 14. Nästa perfekta tal efter 6 är 28 (verifiera gärna). a) Skriv ett predikat perfect? som testar om ett tal är perfekt eller ej. Se till att bryta ned problemet i delproblem, och skapa hjälpprocedurer. b) Använd några av procedurerna filter, accumulate, map, och enumerate för att skapa en lista av alla perfekta tal mellan 10 och 4242 (inklusive gränserna). Du behöver såklart inte använda alla procedurerna, om det inte behövs för att lösa uppgiften. Hur procedurerna fungerar, och hur de anropas, har diskuterats vid föreläsning 5. Kod för dessa (som ni inte behöver bifoga i ert svar!) finns på nästa sida. 3

( define ( filter pred? L) ( cond [( null? L) ()] [( pred? ( car L)) ( cons ( car L) ( filter pred? ( cdr L)))] [ else ( filter pred? ( cdr L))])) ( define ( accumulate proc null - value L) (if ( null? L) null - value ( proc ( car L) ( accumulate proc null - value ( cdr L))))) ( define ( map proc L) (if ( null? L) () ( cons ( proc ( car L)) ( map proc ( cdr L))))) ( define ( enumerate low high ) (if (> low high ) () ( cons low ( enumerate (+ low 1) high )))) 4

Uppgift 4 (3 poäng) OBS! Läs alla deluppgifter. Det kan hända att du kan lösa uppgift b-c, även om du inte har en egendefinierad lösning på uppgift a. Uppgift Vi skapar en datatyp för bilar, för att i större program slippa fundera närmare på hur data är representerat. De relevanta egenskaper som en bil kan ha i vår tillämpning är dess färg, maximala hastighet, och antal platser (colour, size och speed). a) Bestäm dig för hur en bil ska representeras, och implementera därefter 1) en konstuktor (make-car colour size speed) som returnerar en bil 2) selektorer för de olika egenskaperna; get-colour, get-size, get-speed Exempel: ( define ferrari ( make - car red 2 320) ) ( define astonmartin ( make - car blue 2 225) ) ( define trabi ( make - car gray 4 165) ) > ( get - colour astonmartin ) blue > (get - speed ferrari ) 320 > (get - speed trabi ) 165 b) Implementera jämförelseoperatorerna bigger? och faster?. Dessa jämför två bilar utifrån size respektive speed. Koden i dessa jämförelseoperatorer får inte vara beroende av representationen som du valt i 4a. Koden i 4b ska alltså fungera även om man helt byter representation och ändrar koden i 4a. Exempel: > ( faster? ferrari trabi ) #t > ( bigger? ferrari trabi ) #f c) En ferrari är snabbare än en trabi. Men det är inte uppenbart att en ferrari därför skulle vara bättre. Definiera en bils goodness som produkten av dess size och dess speed. Implementera jämförelseoperatorn better? som jämför två bilar utifrån denna nya egenskap. Vilken av exempelbilarna ovan är bäst - ferrari eller trabi? Varför? 5