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

Relevanta dokument
Föreläsning 9 Exempel

Idag: Dataabstraktion

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

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

Idag: Dataabstraktion

TDDC74 Lab 02 Listor, sammansatta strukturer

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

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

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

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

Abstrakta datatyper Laboration 2 GruDat, DD1344

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

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

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

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

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, , kl 17-19

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 Datortenta , kl 14-18

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?

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

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

Tentamen i. TDDA 69 Data och programstrukturer

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

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

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

Rekursiva algoritmer sortering sökning mönstermatchning

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Datalogi, grundkurs 1

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Datalogi, grundkurs 1

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

TDDC74 - Lektionsmaterial C

Tentamen i. TDDC67 Funktionell programmering och Lisp

Objektorienterad Programkonstruktion

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

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

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

Funktionell programmering DD1361

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

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

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

Grundläggande Datalogi

725G61 - Laboration 3 Metoder och abstrakta datatyper. Johan Falkenjack

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

Tentamen Datastrukturer (DAT036)

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

Deklarationer/definitioner/specifikationer

I kursen i endimensionell analys är mängden av reella tal (eng. real number), R, fundamental.

Datalogi, grundkurs 1

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

Sista delen av kursen

Sista delen av kursen

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

Algebra I, 1MA004. Lektionsplanering

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

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.

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

TDDC77 Objektorienterad Programmering

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

Tentamen Datastrukturer, DAT037 (DAT036)

Begreppen "mängd" och "element" är grundläggande begrepp i matematiken.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Induktionsprincipen Starka induktionsprincipen Välordningsprincipen Divisionsalgoritmen

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

Datastrukturer och algoritmer

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Laboration 3, uppgift En klass för en räknare

Uppsala universitet Institutionen för lingvistik och filologi. Grundbegrepp: Mängder och element Delmängder

Begreppen "mängd" och "element" är grundläggande begrepp i matematiken.

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

{ } { } En mängd är en samling objekt A = 0, 1. Ex: Mängder grundbegrepp 5 C. Olof M C = { 7, 1, 5} M = { Ce, Joa, Ch, Je, Id, Jon, Pe}

Föreläsning 14 Innehåll

Objektorienterad programmering D2

Denna uppdelning är ovanlig i Sverige De hela talen (Både positiva och negativa) Irrationella tal (tal som ej går att skriva som bråk)

Tentamen Datastrukturer (DAT036)

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

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

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Transkript:

Laboration 5 Mängder Syfte Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar. Lära dig kombinera på ett lämpligt sätt de begrepp och metoder som du har hittills lärt dig i kursen, såsom rekursion, dataabstraktion, listhantering, etc. för att lösa svårare problem. Innan du börjar med denna labb bör du läsa igenom avsnitt Example: Representing sets i Abelson & Sussman. Där går man igenom en hel del av det du behöver för den här labben. Uppgift 1 Skriv konstruktorer, selektorer och predikat för hantering av mängder. Mängderna ska representeras m.h.a. listor. En mängd är antingen tom eller så innehåller den minst ett element. Som element räknas tal, symboler och andra mängder ( delmängder ). Du får själv avgöra vilka konstruktorer, selektorer, predikat och annat som du kommer att behöva för att implementera funktionerna i de kommande uppgifterna men tänk efter noga. Du ska i fortsättningen bara använda dig av de funktioner du definierar här för att manipulera mängderna. Fr.o.m. nu är car, cdr, cons, list, map och andra fördefinierade funktioner som arbetar direkt med listor nästan bannlysta. Abstraktion är ordet för stunden... Då mängder och listor inte är samma sak finns det en del detaljer att ta hänsyn till. En av de viktigare detaljerna är att mängderna inte innehåller dubletter. Det underlättar om man från början inte tar hänsyn till detta utan testar med mängder som inte innehåller dubletter. Då kan man till att börja med låta konstruktorn för mängder helt enkelt returnera en lista. Men senare i labben har man verktygen för att göra en avancerad konstruktor. Exempel: Antag att du skapat konstruktorer, selektorer samt predikat för mängder. Då kan man t.ex. göra så här (här elimineras dubletter): > (define myset (make-set (a (a b b (c b) 3) 5 5 (e s) (s e s)))) > myset (a (a b (c b) 3) 5 (e s)) > (set? myset) > (empty? myset)

2 Datalogi, grk 1 Laboration 5 > (first myset) a > (rest myset) ((a b (c b) 3) 5 (e s)) > (insert (f b) myset) ((f b) a (a b (c b) 3) 5 (e s)) > (the-empty-set) () Mängden myset består av fyra element. Det första och det tredje elementet är symboler medan det andra och det fjärde elementet är mängder. Det andra elementet består i sin tur av fyra element, en mängd och tre symboler. Observera att ordningen hos elementen inte spelar någon roll: (make-set (2 1 3 2)) t.ex. kan returnera (2 1 3), (1 3 2), eller någon annan permutation. Du får själv avgöra vad svaret ska vara. Uppgift 2 Skriv ett predikat member? som ger om ett element finns i en mängd och annars. ett predikat same? som jämför två mängder och ger om de innehåller samma element, oavsett ordning, och annars. Tips Två mängder M 1 och M 2 är lika om M 1 = {x} M 11, x M 2 och M 11 = M 2 {x} Detta innebär att en procedur, delete, som tar bort ett element ur en mängd är bra att ha. Eftersom ett element kan vara en mängd så kan proceduren delete använda same?. Faktiskt kan member?, same? och delete allihop använda varandra. Då du skriver en av dem kan du tänka dig att de andra redan finns och fungerar (kallas ibland för wishful-thinking ). Ytterligare en funktion som kan vara bra att ha är same-elem? som jämför två element och ger om de är lika och annars. Denna procedur bör använda sig av same? för att jämföra element som är mängder. Observera att du inte kan provköra någon av dessa funktioner fullt ut förrän du skrivit allihop eftersom de använder varandra. Detta innebär att du måste tänka till innan du skriver dem för att få det rätt. Ett tips är att skriva upp ett antal exempel på ett papper och analysera dessa noga innan du börjar hacka. Innan du kan få exemplen nedan att fungera måste du dessutom skriva om mängdkonstruktorn make-set så att mängderna inte kan innehålla dubletter. Det gör man med samma teknik som den som föreslagits för member, same? och delete. Så för att allt ska fungera som avsett måste make-set ändras. Följande exempel skall fungera, observera dock att det inte är någon garanti för att allt är korrekt gjort: >(member? (make-set (1 2)) (make-set (1 2 3))) >(member? 1 (make-set (1 2 3))) >(member? (make-set ((x) 2)) (make-set (4 2 (x))))

Laboration 5 Datalogi, grk 1 3 >(member? (the-empty-set) (make-set (a b c))) >(member? (make-set (1)) (the-empty-set)) >(member? (make-set (1 2)) (make-set ((1 2) 3))) >(member? (make-set (1 (b))) (make-set (3 2 ((b) 1)))) >(member? (make-set (1 2)) (make-set (y (2 1)))) >(same? (make-set (1 2 a)) (make-set (2 a 1))) >(same? (the-empty-set) (the-empty-set)) >(same? (make-set ((1 2) 2 3)) (make-set (2 3 (2 1)))) >(same? (make-set ((2 3) a b)) (make-set (2 3 (a b)))) >(same? (make-set (2 (b (z)) 4)) (make-set (3 5 (z) (x)))) >(same? 1 1) odefinierat - 1 är ingen mängd. >(same? (the-empty-set) a) odefinierat - a är ingen mängd. >(same? a (make-set (b 1))) odefinierat - a är ingen mängd. Uppgift 3 Skriv funktioner för att skapa en ny mängd som är snittet mellan två mängder. M 1 M 2 = {e e M 1 e M 2} skapa en ny mängd som är differensen mellan två mängder. M 1 M 2 = {e e M 1 e M 2} skapa en ny mängd som är unionen av två mängder. M 1 M 2 = {e e M 1 e M2} Exempel: > (intersec (make-set (1 (2 (1)) 3 (1 2))) (make-set (((1) 2) 3 4 (2 3)))) (3 (2 (1))) > (diff (make-set (1 (2 3) b)) (make-set (b 1))) ((2 3)) > (union (make-set (2 3)) (make-set ((a b)))) (2 3 (a b)) > (union (make-set (1 2 (x (y 3) 4)))

4 Datalogi, grk 1 Laboration 5 (make-set (b 1 (a (r))))) (1 2 (x (y 3) 4) b (a (r)))

Laboration 5 Datalogi, grk 1 5 Uppgift 4 Skriv en funktion som returnerar den kartesiska produkten av två mängder. M 1 M 2 = {e x, y(e = (x, y) x M 1 y M 2)} Den kartesiska produkten mellan mängderna A och B är alltså en lista där elementen är par, vilka sätts samman på följande vis: varje element ur A kombineras med varje element ur B. Med andra ord: om A = {a, b, c} och B = {d, e} så gäller att A B = {(a, d), (a, e), (b, d), (b, e), (c, d), (c, e)} Observera att den kartesiska produkten returnerar en lista av par. {a, b} {a, b} = {(a, a), (a, b), (b, a), (b, b)} där alla fyra par är distinkta, d.v.s. skilda från varandra i matematisk mening. Det här är en funktion där map eller do-to-each passar utmärkt använd gärna någon av dem. Exempel (om operationen kartesisk produkt kallas cart-product): > (cart-product (make-set (a b c)) (make-set (1 2))) ((a. 1) (a. 2) (b. 1) (b. 2) (c. 1) (c. 2)) Frivillig uppgift Det är bra om det går att definiera ett universum och i så fall kan du implementera operationen komplement. För att få godkänt på den här labben ska du ha skrivit konstruktorer, selektorer och predikat för mängder samt använt dig av dem för att lösa uppgifterna. Du ska ha skrivit funktionerna member?, same?, union, diff, intersec och cart-prod. De ska fungera enligt de givna specifikationerna. Glöm inte att kommentera alla funktioner noggrant. Du ska som vanligt kunna förklara hur funktionerna fungerar och kunna svara på frågor från handledaren.