TDDC74 Programmering, abstraktion och modellering DUGGA 2



Relevanta dokument
TDDC74 Programmering, abstraktion och modellering DUGGA 2

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 DUGGA 3

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

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

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

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

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

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

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

Tentamen TEN1 HI

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Lab 02 Listor, sammansatta strukturer

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 Datordugga 2 - exempel

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, onsdag 19 oktober 2016, kl 14 18

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

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

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

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

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

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

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

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

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

Föreläsning 6: Introduktion av listor

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

Dugga Datastrukturer (DAT036)

TDDC74 - Lektionsmaterial C

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

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

Tentamen OOP

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

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

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,

Uppgift 1 ( Betyg 3 uppgift )

Bygga hus med LECA-stenar

Hemtjänsten Svarsfrekvens 77 av 130 utdelade = 60 %

DELPROV 1 I DATAVETENSKAP

TENTAMEN I DATAVETENSKAP

Rekursiva algoritmer sortering sökning mönstermatchning

Objektorienterad programmering D2

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Sätt att skriva ut binärträd

Programmering för språkteknologer II, HT2014. Rum

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

Föreläsning 7. Grafiska användargränssnitt

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Diagram. I detta kapitel lär du dig: m Diagrammets beståndsdelar. m Att skapa både inbäddat diagram och diagramblad. m Att ändra diagramform.

Sammanställning Undersökning av kommunens funktionsbrevlådor 2013

TDP Regler

Föreläsning 7. Träd och binära sökträd

Föreläsning 13 och 14: Binära träd

OOP Objekt-orienterad programmering

ARKITEKTPROVET 2013 DAG 1. 1: LINJE & VECK [ENKELHET, UNDERSÖKNING] [1H]

Objektorienterad programmering

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

Informationskvällar 18, 22 och 24 februari

Enkät Plantskolan Hammarby IF FF vinter 2015/ Har din son deltagit som? 2. I vilken åldersgrupp har din son deltagit?

1 Skapa Tabell Skapa Relationer Redigera Relationer Redigera Fält i Tabell Lägga till Poster i Tabell...

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Information om stipendier från Youth For Understanding Sverige programåret 2013/2014

Räkna poäng Övning 1. Herre Hcp 4.8 Gul Tee. De 7 extraslagen läggs ut på hålen som har index (Hcp) 7 eller lägre.

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Textsträngar från/till skärm eller fil

Lära känna skrivbordet

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

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

Idag: Dataabstraktion

Programmeringsteknik med C och Matlab

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Ditt äckel Elevmaterial

Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen. x y (x > 0) (y > 0) xy > 0 Domän D = R

Problemet löd: Är det möjligt att på en sfär färga varje punkt på ett sådant sätt att:

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

Instruktioner för dig som ska söka till Mattekollo 2016

MA2004 Tillämpad Matematik II, 7.5hp,

INDUKTION OCH DEDUKTION

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

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Lärandefrågor uppföljande samtal. Framtagen av Funktionshinder, Hägersten-Liljeholmens Stadsdelsförvaltning, Stockholms stad.

Föreläsning 15: Repetition DVGA02

Transkript:

1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Torsdag 19 feb 2009 8-10 Namn: Personnummer: Skriv även ditt namn på varje uppgiftssida. 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. Vi har givit början på definitionen av funktionerna med angivna namn på funktionen och parametrarna. Använd helst denna början, dvs fortsätt och skriv koden. Ä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. 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

2 Uppgift 1 (3 poäng) 1a. (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). (cons (list a b) (cons x (y))) 1b. (1p) Skriv ett Scheme-uttryck som skapar följande struktur: () a b () () c 1 1c. (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). (let ((p (list a b))) (list p p p))

3 Uppgift 2 (4p) I uppgift 2 kan du använda Scheme-funktion max, som tar 2 tal och returnerar det största talet. 2a. (2p) Skriv en rekursiv funktion (max-tal lista), som i en rak lista med tal, returnerar det största talet. Vi kan antaga att listan innehåller åtminstone ett element. Ange även om din lösning gör en rekursiv eller iterativ processlösning. Motivera. (max-tal (3 6 4 5 2)) = 6 (max-tal (-3-4 -2-5)) = -2 (define (max-tal lst)

4 2b. (2p) Vi utvidgar funktionen från uppgift 2a med att finna det största talet i en godtycklig lista, där elementen i sin tur kan vara listor. Vi antager att listan ej kan innehålla punkterade par. Dessutom antager vi att alla talen är större än eller lika med 0, och att listan och dellistorna kan vara tomma. (max-alla-tal (3 (6 (4 1)) 5 () 2)) = 6 (max-alla-tal ()) = 0 ; dvs vi returnerar 0 för en tom lista (define (max-alla-tal lst)

5 Uppgift 3 (2p) Skriv en funktion alla-på-nivå, som tar en en nivå (som heltal) och en godtycklig lista (som ej innehåller punkterade par) och som returnerar en lista med alla elementen (icke-listor) på denna nivå. Toppnivån är 1. (alla-på-nivå 1 (a (b c) d e)) = (a d e) ; dvs a, d och e är på toppnivån. (alla-på-nivå 2 (a (b c) d (e f (g)))) = (b c e f) ; på andra nivån (alla-på-nivå 3 (a (b (c d e) f) ((g h)))) = (c d e g h) ; på tredje nivån (define (alla-på-nivå nivå lst)

6 Uppgift 4 (3p) ADT Abstrakt datatyp för att hantera släktträd med personer och barn Vi vill kunna representera släktträd med person och deras barn och sedan i sin tur barnen med sina barn etc. För detta har vi skapat två abstrakta datatyper, person och barnlista. Ett objekt av typen person består av ett namn och en barnlista (som kan vara tom om personen inte har några barn) och objekt av typen barnlista innehåller inget eller flera objekt av typen person. Vi inför följande primitiver (med förhoppningsvis självförklarande namn) för dessa två abstrakta datatyper: skapa-person : namn x barnlista -> person person-namn : person -> namn person-barnen : person -> barnlista skapa-tom-barnlista : -> barnlista lägg-till-barn : person x barnlista -> barnlista första-barnet : barnlista -> person resten-barnlista : barnlista -> barnlista tom-barnlista? : barnlista -> sanningsvärde ; lägger till ett barn först Med dessa kan vi skapa ett släktträd, där KALLE har barnen LISA och STINA, samt där LISA i sin tur har ett barn PER. STINA har inget barn. Detta släktträd kan definieras: (define kalles-släktträd (skap-person 'kalle (lägg-till-barn (skapa-person 'lisa (lägg-till-barn (skapa-person 'per (skapa-tom-barnlista)) (skapa-tom-barnlista))) (lägg-till-barn (skapa-person 'stina (skapa-tom-barnlista)) (skapa-tom-barnlista))))) Vi väljer följande representation: Ett objekt av typen person representeras som en lista med typmärkning: (person namn barnlista) Ett objekt av typen barnlista representeras som en lista med objekt av typen person, och som börjar med en typmärkning: (barnlista person 1 person 2... person n ) I listrepresentationen blir då kalles-släktträd: (person kalle (barnlista (person lisa (barnlista (person per (barnlista)))) (person stina (barnlista)))) För typningen har vi två funktioner, add-tag som lägger till typmärkningen först och remove-tag som tar bort typmärkningen. (define (add-tag typ object) (cons typ objekt)) (define (remove-tag object) (cdr object))

7 Vi definierar ett antal av de olika primitiverna: (define (skapa-person namn barnen) (add-tag person (list namn barnen))) (define (person-namn person) uppgift 4a ) (define (person-barnen person) uppgift 4a ) (define (tom-barnlista) (add-tag 'barnlista ' ())) (define (lägg-till-barn ett-barn barnen) (add-tag 'barnlista (cons ett-barn (remove-tag barnen)))) (define (första-barnet barnen) (car (remove-tag barnen))) (define (resten-barnlista barnen) uppgift 4a ) (define (tom-barnlista? barnen) (null? (remove-tag barnen))) 4a. (1p) Definiera primitiverna person-namn, person-barnen och resten-barnlista. Du skall följa konventionen hur de andra primitiverna har definierats. (define (person-namn person) (define (peson-barnen person) (define (resten-barn-lista barnen) 4b. (2p) Definiera med hjälp av dessa primitiver en funktion avkomlingar, som tar ett släktträd, dvs objekt av typen person och skapar en vanlig rak lista med alla avkomlingar (inklusive första personen i toppen av släktträdet). Ordnignen på avkomlingarna spelar ingen roll. (avkomlingar kalles-släktträd) = (kalle lisa per stina) (define (avkomlingar person)