TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

TDDC74 Programmering, abstraktion och modellering DUGGA 1

TDDC74 Programmering, abstraktion och modellering DUGGA 3

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. TDDC67 Funktionell programmering och Lisp

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, 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 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 Tentamen, lördag 29 augusti 2015, kl 8 12

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

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

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

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

TDDC74 Lab 02 Listor, sammansatta strukturer

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

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

Rekursiva algoritmer sortering sökning mönstermatchning

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

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

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

TDDC74 - Lektionsmaterial C

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

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

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

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

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

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

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

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

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

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

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

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

Föreläsning 9 Innehåll

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

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

Datalogi, grundkurs 1

LABORATION 1. Inledande Lisp - rekursion

Programmering II (ID1019) :00-17:00

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

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

Procedurer och villkor

Tentamen i. TDDA 69 Data och programstrukturer

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

allt.cl Page 1 of 17 Date: torsdag 7 december 2006

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

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

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

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

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

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

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

Våra enkla funktioner eller procedurer

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

Idag: Dataabstraktion

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Föreläsning 9 Exempel

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

Föreläsning 4 Datastrukturer (DAT037)

Övningsuppgifter kapitel 8

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 Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

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

TDP002 - Imperativ programmering

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

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

Tentamen, Algoritmer och datastrukturer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Träd Hierarkiska strukturer

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å

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

Datalogi, grundkurs 1

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Abstrakta datatyper. Dagens föreläsning. Abstract data types (ADT)

Dagens föreläsning. TDDC67 Funktionell programmering och Lisp Fö 8 och 9

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

729G04: Inlämningsuppgift Diskret matematik

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

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

TDIU01 - Programmering i C++, grundkurs

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

I dag: Blockstruktur, omgivningar, problemlösning

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Föreläsning 9 Innehåll

Transkript:

AID-nummer: Datum: 2011-02-18 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Fredag 18 feb 2011 14-16 (Nåra förtydliganden har i efterhand lagts in i denna dugga) Uppgifterna löses direkt på denna uppgiftslapp, som lämnas in i sedvanligt tentamensomslag. Räcker inte utrymmet kan du komplettera med lösa papper. Skriv tydligt så att inte dina lösningar missförstås. Använd väl valda namn på parametrar etc. Även om det i uppgiften står att du skall skriva en funktion, så får du gärna skriva ytterliggare hjälpfunktioner, som kan vara nödvändiga. Betygsgradering: Det är tre duggor. Varje dugga ger 12p, dvs totalt 36p. För att passera en dugga krävs minst 3p på duggan. Totalt skall du på de tre duggorna för betyget 3 ha minst 20p. För betyget 4 minst 25p och för betyget 5 minst 30p. Lycka till

AID-nummer: Datum: 2011-02-18 2 Uppgift 1. (1 poäng) Quote Guvet följande: (define a 10) (define b 20) Vad blir värdet av följande uttryck '(list (cons a b)) => (list (cons 'a 'b)) => (list (cons 'a b)) => (list '(cons a b)) => (list 'cons 'a 'b) => (list cons 'a 'b) => Poäng på uppgiften: 0-2 rätt 0p 3-4 rätt 0,5p 5-6 rätt 1.0p

AID-nummer: Datum: 2011-02-18 3 Uppgift 2. (1p) Rekursiv och iterativ processlösning Vi har nedan givet två olika lösningar på samma problem. Vi har en funktion, som ökar varje element med 1. Vi har en lösning med rekursiv processlösning (linear reccursive model) och en med iterativ processlösning (iterative recurisve model). En av dessa kommer att returnera ett resultat, där listan är omvänd. Använd substitutionsmetoden för motivera vilken av lösningarna, som ger en rättvänd resp. en omvänd lista som resultat. Använd argumentet listan (3 1 5) för resp. funktion. (define (add-one-1 lst) (if (null? lst) '() (cons (+ 1 (car lst)) (add-one-1(cdr lst))))) (define (add-one-2 lst) (define (help lst res) (if (null? lst) res (help (cdr lst) (cons (+ 1 (car lst)) res)))) (help lst '())) Är det den rekursiva eller iterative processlösningen som vänder på listan? Motivera med substitutionsutveckling: (add-one-1 '(3 1 5)) (add-one-2 '(3 1 5))

AID-nummer: Datum: 2011-02-18 4 Uppgift 3. (2 poäng) Par/cons-celler 2a. (0,5 p) 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 'x '()) (list 'a))) test => 2b. (0,5p) Skriv ett Scheme-uttryck som skapar följande struktur e b e () x y () z ()

AID-nummer: Datum: 2011-02-18 5 Uppgift 3. Par/cons-celler, forts 2c. (0,5p) Rita upp värdet med den grafiska representationen med cons-celler och pekare (box and pointer notation). (let ((cells (cons 'a 'b))) (list cells cells)) 2d. (0,5p) Skriv Scheme-uttryck som skapar nedanstående struktur: () () x y

AID-nummer: Datum: 2011-02-18 6 Uppgift 4. (4 poäng) Rekursiva funktioner över listor 4a. (2p) Skriv en funktion (början? start lista), som undersöker om elementen på start är början av elementen på lista. Elementen kan testas med eq?. Vi kan antaga att listan start är icke-tom. (början? '(s t a r t) '(s t a r t a)) => #t (början? '(s t a r t) '(s t a r t)) => #t ; lika (början? '(s t a r t) '(s t a r)) => #f ; inte tillräckligt med element i list (början? '(s t a r t) '(s t a r k a r e)) => #f (define (början? start lista)

AID-nummer: Datum: 2011-02-18 7 Uppgift 4. Rekursiva funktioner över listor, forts 4b (2p) Skriv en funktion (max-nivå lista), som tar en godtycklig lista (en proper list, dvs som ej avslutas med punkterat par) och anger nivån för den lista som ligger på djupaste nivån. Toppnivån är 1. Vi kan antaga att en tom lista har nivå 1. (max-nivå '(a b c)) => 1, alla elementen är på toppnivån (max-nivå '(a (b c) d e)) => 2, andra elementet är en lista på nivå 2 (max-nivå '(a (b (c)) (d) e)) => 3. listan (c) är djupast på nivå 3 Hjälp: Det finns en funktion max i Scheme, som returnerar den största parametern, (max 2 3) = 3 (define (max-nivå lista)

AID-nummer: Datum: 2011-02-18 8 Uppgift 5. (3 poäng) ADT Abstrakt datatyp för aritmetiska formeluttryck Vi vill kunna hantera aritmetiska formeluttryck (typen aritm-uttryck). Det aritmetiska uttrycket består av konstanter (typen konstant) och sammansatta uttryck (typen uttryck) med operatorerna + och (typen operator). Här skriver vi ett aritmetiska uttryck fullt parentetiserat. 4 (2 + 3) ((6 4) + 5 ) Vi väljer en typad (tagged) representation i Scheme med typen först enligt följande: (2 + 3) representeras som (uttryck (konstant 2) + (konstant 3)) ((6 4) + 5) representeras som (uttryck (uttryck (konstant 6) (konstant 4)) + (konstant 5)) dvs konstanter typas med konstant och ett sammansatt uttryck med uttryck. Operatorerna typas ej. Vi inför gränssnittsfunktioner för att skapa och ta ut delar ur aritmetiska formeluttryck. (define (aritm-uttryck? obj) ; godtyckligt-objekt -> sanningsvärde (or (konstant? obj) (uttryck? obj))) (define (skapa-konstant tal) (list 'konstant tal)) ; heltal -> konstant (define (konstant? obj) ; godtyckligt-objekt -> sanningsvärde (and (list? obj) (eq? (car obj) 'konstant))) (define (värde konstant) (car (cdr konstant))) ; konstant -> heltal (define (skapa-uttryck operand1 operator operand2) ; aritm-uttryck x operator x aritm-uttryck -> uttryck se uppgift 5a ) (define (uttryck? obj) se uppgift 5a ) ; godtyckligt-objekt -> sanningsvärde (define (första-operand uttryck) ; uttryck -> aritm-uttryck se uppgift 5a ) (define (andra-operand uttryck) ; uttryck -> aritm-uttryck se uppgift 5a ) (define (operator uttryck) se uppgift 5a ) ; uttryck -> operator

AID-nummer: Datum: 2011-02-18 9 För att skapa de två första av ovanstående aritmetiska formeluttryck skriver vi: (skapa-uttryck (skapa-konstant 2) '+ (skapa-konstant 3)) (define uttryck1 (skapa-uttryck (skapa-uttryck (skapa-konstant 6) '- (skapa-konstant 4)) '+ (skapa-konstant 5))) 5a. (1p) Definiera följande gränsnittsfunktioner: (define (skapa-uttryck operand1 operator operand2) ; aritm-uttryck x operator x aritm-uttryck -> uttryck (define (uttryck? obj) ; godtyckligt-objekt -> sanningsvärde (define (första-operand uttr) ; uttryck -> aritm-uttryck (define (andra-operand uttr) ; uttryck -> aritm-uttryck (define (operator uttr) ; uttryck -> operator 5b. (2p) Definiera en procedur beräkna, som tar ett aritmetiskt formeluttryck, t.ex. uttryck1 ovan, och räknar ut värdet av formeluttrycket. (beräkna uttryck1) = dvs. ((6 4) + 5) => 7 (define (beräkna aritm) ; aritm-uttryck -> heltal

AID-nummer: Datum: 2011-02-18 10 Uppgift 6. (1 poäng) Högre ordningens funktion för binära träd Vi har följande högre ordningens funktion (bearbeta-bt bt löv-fn nod-fn), som tar ett binärt träd (som cons-par) bt och två procedurer löv-fn och nod-fn. Proceduren löv-fn skall appliceras på varje löv och proceduren nod-fn skall applicera på de två värden, som returneras för resp. delträd i en nod. (define (bearbeta-bt bt löv-proc nod-proc) (define (traversera bt) (if (löv? bt) (löv-proc bt) (nod-proc (traversera (vänster-bt bt)) (traversera (höger-bt bt))))) (traversera bt)) (define (löv? bt) (not (pair? bt))) (define vänster-bt car) (define höger-bt cdr) a. Vad blir värdet av: (bearbeta-bt '((1. 2). 3) (lambda (löv) (+ löv 10)) +) => b. Vad blir värdet av: (bearbeta-bt '((a. b). c) (lambda (löv) (eq? 'b löv)) (lambda (v1 v2) (and v1 v2))) => c. Fyll i? i nedanstående uttryck, så att vi givet ett binärt träd skapar en lista av alla löven. (bearbeta-bt '((a. b). (c. (d. e)))?a?b) => (a b c d e)?a =?b = d. Skriv en funktion (byt-plats-på-grenar bt), som med hjälp av bearbeta-bt, i ett binärt träd bt, skapar ett nytt binärt träd där vänster och höger delträd har bytt plats. (byt-plats-på-grenar '((1. 2). 3)) => (3. (2. 1)) = (3 2.1) (define (byt-plats-på-grenar bt) Poäng på hela uppgiften: 0-1 rätta deluppgifter 0p 2-3 rätta deluppgifter 0,5p 4 rätta deluppgifter 1.0p