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

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

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

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 Tentamen, lördag 27 augusti 2016, kl 8 12

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

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 - Lektionsmaterial C

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

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

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

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 1

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Tentamen i. TDDC67 Funktionell programmering och Lisp

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?

Objektorienterad programmering i Racket

TDDC74 Lab 02 Listor, sammansatta strukturer

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Programmering II (ID1019) :00-12:00

HI1024 Programmering, grundkurs TEN

Tentamen i. TDDA 69 Data och programstrukturer

Tentamen Datastrukturer (DAT036)

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

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

Dugga Datastrukturer (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.

Objektorienterad programmering i Racket

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen Datastrukturer (DAT037)

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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)

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

Tentamen Datastrukturer, DAT037 (DAT036)

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

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

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

Våra enkla funktioner eller procedurer

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

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

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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Tentamen Datastrukturer (DAT036)

Tentamen i Grundläggande programmering STS, åk

Programmering II (ID1019) :00-11:00

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

Tentamen Grundläggande programmering

OOP Objekt-orienterad programmering

PROGRAMMERING-JAVA TENTAMINA

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Design av en klass BankAccount som representerar ett bankkonto

OOP Tentamen

Classes och Interfaces, Objects och References, Initialization

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

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

Kurskod D0010E Datum Skrivtid 5tim

OOP Omtenta

Grafik i DrRacket AV TOMMY KARLSSON

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

Tentamen Datastrukturer (DAT036)

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

PROGRAMMERINGSTEKNIK TIN212

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

LÖSNINGSFÖRSLAG TENTAMEN

TENTAMEN I DATAVETENSKAP

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Tentamen *:58/ID100V Programmering i C Exempel 3

Chapter 4: Writing Classes/ Att skriva egna klasser.

TENTAMEN OOP

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

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

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

DAT043 - föreläsning 8

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

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

Programmering II (ID1019) :00-12:00

Transkript:

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 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. Väl valda namn omfattar exempelvis att inte blanda språk. 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 sista define du öppnade. Ä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! Denna dugga får du använda alla primitiver, inklusive kommandon som set!, set-mcar!, set-mcdr! för att ändra bindningar och ändra i strukturer. 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) Betrakta koden nedan: ( define (f x) ( define (g x) (if (< x 2) 1 (+ (g (- x 1)) 1))) (g x)) (f 1) (f 2) Rita omgivningsdiagram som visar det som händer när man evaluerar koden ovan. Markera globala omgivningen (GE) tydligt, och numrera ramarna i den ordning de skapas (E1, E2,...). Du behöver inte skriva ut all kod som finns i procedurkroppar (body), men det ska tydligt framgå vilken kod du hänvisar till. Uppgift 2 (3 poäng) Vi vill representera ett bankkonto, där varje konto-objekt håller koll på just sitt saldo. Man kan antingen sätta in pengar på kontot (add) eller sätta saldot till något särskilt (set). Skapa konstruktorn make-account som tar ett inledande saldo som argument, och ger tillbaka ett bankkonto-objekt (tekniskt sett ett procedurobjekt) som fungerar enligt nedan: > ( define account1 ( make - account 100) ) > ( define account2 ( make - account 220) ) > ( account1 add 0) 100 > ( account1 set 88) 88 > ( account1 add 100) 188 > ( account2 add 0) ;; oberoende av account1 220 > ( account2 add -200) 20 > (+ ( account2 set 838469716578797182657000) 73) 838469716578797182657073 > ( account1 add 0) ;; account1 som tidigare 188 Notera att varje add/set alltid returnerar det nya saldot. 2

Uppgift 3 (3 poäng) OBS! Läs hela uppgiften. Du kan lösa del 3b utan att ha löst 3a. a) (2 poäng) En muterbar lista kan innehålla såväl element utanför listan, som hänvisningar till listan själv. Implementera count-self-ref som tar en muterbar lista, och ger antalet sådana självreferenser. Du kan anta att listan slutar med den tomma listan (vi har alltså ingen ringstruktur). Så här ska funktionen fungera: > ( define L1 ( mlist 1 2 3 4)) > (count -self - ref L1) 0 > ( define L2 ( mlist 1 2 3 4)) > (set - mcar! ( mcdr L2) L2) > (count -self - ref L2) 1 > ( define L3 ( mlist 1 2 3 4)) > (set - mcar! L3 L3) > (set - mcar! ( mcdr ( mcdr L3)) L3) > (set - mcar! ( mcdr ( mcdr ( mcdr L3))) L3) > (count -self - ref L3) 3 OBS! För att avgöra om två variabler hänvisa till samma objekt ska du använda jämförelseoperatorn eq? b) (1 poäng) Rita ett box-pointer-diagram som beskriver L3 från uppgiften ovan. Rita så att man tydligt kan följa hur strukturen skapas/uppdateras (visa inte bara slutresultatet). 3

Uppgift 4 (3 poäng) Vi definierar ett slags databasobjekt som för enkelhets skull enbart innehåller heltal. Inuti objekten (som beskrivs nedan) representeras allt som en vanlig lista innehållande heltal. Databasobjekten ska ha följande metoder: 1. get-content: returnerar hela databasens innehåll (hela listan) 2. insert!: sätter in ett givet heltal i databas 3. present?: kolla om ett givet heltal finns i databas 4. delete!: tar bort alla förekomster av ett givet heltal i databas Ett exempel på objekten i användning följer på nästa sida. Koden nedan visar konstruktorn för våra databasobjekt när vi har redan implementerat kommandona get-content och insert!: ( define database % ( class object % ( field [ content () ]) ( define / public (get - content ) content ) ( define / public ( insert! val ) ( set! content ( cons val content ))) ( define / public ( present? val )... din kod...) ( define / public ( delete! val )... din kod...) (super - new ))) 4

Uppgift Implementera present? och delete!. Här ser du hur våra databasobjekt ska fungera: ( define db ( new database %)) () > ( send db insert! 6) > ( send db insert! 5) > ( send db insert! 4) (4 5 6 7) > ( send db present? 6) #t > ( send db present? 9) #f > ( send db insert! 9) > ( send db present? 9) #t > ( send db insert! 11) > ( send db insert! 2) (7 2 11 7 9 4 5 6 7) > ( send db delete! 2) (7 11 7 9 4 5 6 7) > ( send db delete! 7) (11 9 4 5 6) > ( send db delete! 1) ;; element som ej finns i db (11 9 4 5 6) OBS! Självklart får du använda set! i denna uppgift, men du får inte använda muterara listor eller par Glöm inte att det kan vara nyttigt att definiera hjälpprocedurer eller använda högre ordningens procedurer. För att jämföra heltal får du använda den vanliga jämförelseoperatorn, det vill säga = 5