Kungliga Tekniska Högskolan Ämneskod 2D1370 Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h

Relevanta dokument
I kapitel 15 gör Hudak för reaktiva animeringar detsamma som han i kapitel 13 gör för animeringar. Resultatet är en module Fal.

Nada, KTH Tentamensdag maj -24 Tentamen i Funktionell Programmering Skrivtid 5 h

Tentamensdag 2002-aug-20 Tentamen i Funktionell Programmering Skrivtid 5 h

Kap9. Operatorn.. Hudak 9.4 sid 11. Fermats förmodan, eller Fermats stora sats säger att. xm + ym == zm har heltalslösningar om och endast om m == 2.

Del : Paradigmer allmänt.

Tentamen Datastrukturer (DAT036)

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

Föreläsning 8. Hudak kapitel 13. 2D1370 Funktionell programmering v15 torsdag

Föreläsning Datastrukturer (DAT036)

Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...

Föreläsning 7 i programmeringsparadigm. Ytterligare Högre ordningens funktioner: filter, foldr foldl. Hutton 7.2, 7.3 och 7.4.

Datastrukturer i Haskell

Funktionell programmering DD1361

Övning 1 - Abstrakta datatyper

Haskell forts. 5DV085 - Programspråk. Jan Erik Moström, Department of Computing Science, Umeå University - jem@cs.umu.se

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)

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Del : Paradigmer allmänt.

Nada KTH 2004 jan 12 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Nada KTH 2003 okt 23 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 4 i programmeringsparadigm.

Tentamen, Algoritmer och datastrukturer

Men först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4

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

Tentamen TEN1 HI

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

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

Objektorienterad Programmering (TDDC77)

Föreläsning 9 Innehåll

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

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

Lite skoj - typ. 5DV085 - Programspråk. Jan Erik Moström, Department of Computing Science, Umeå University - jem@cs.umu.se

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h

Programmering II (ID1019) :00-12:00

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

Föreläsning 8. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

TDIU01 (725G67) - Programmering i C++, grundkurs

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

tentaplugg.nu av studenter för studenter

Föreläsning 4 (och 5?) i programmeringsparadigm.

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Introduktion till Haskell

Programmering II (ID1019) :00-12:00

DD1361 Programmeringsparadigm. Carina Edlund

Fredag 10 juni 2016 kl 8 12

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Tentamen Datastrukturer (DAT036)

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

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

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

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

Programmering II (ID1019) :00-12:00

DAI2 (TIDAL) + I2 (TKIEK)

Tentamen Datastrukturer, DAT037 (DAT036)

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Tentamen Datastrukturer, DAT037 (DAT036)

Grundläggande Datalogi

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

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

Datastrukturer. föreläsning 10. Maps 1

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Länkade strukturer, parametriserade typer och undantag

Tentamen Programmering fortsättningskurs DIT950

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning 4 Datastrukturer (DAT037)

Programkonstruktion. Tentamen,

TENTAMEN OOP

Tentamen TEN1 HI

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

Algoritmer och datastrukturer 2012, fo rela sning 8

Laboration: Whitebox- och blackboxtesting

Föreläsning 14 Innehåll

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Tentamen Datastrukturer (DAT036)

Tentamen i Grundläggande Programvaruutveckling, TDA548

TDDC30 Programmering i Java, datastrukturer och algoritmer

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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

1 Klasser och objektorientering Vad är objektorientering?

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3. Stack

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Transkript:

Kungliga Tekniska Högskolan Ämneskod 2D1370 Nada Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h Antalet uppgifter : 4 ( 8p +10p + 10p +12p = 40 p) Lärare, jourhavande lärare : Leif Kusoffsky ------------------------------------------------------------------------------------------------------------------ Tillåtna hjälpmedel: Hudak : The Haskell School of Expression Jones et al :Report on the Programming Language Haskell 98 (Häfte + appendix) ----------------------------------------------------------------------------------------------------------------- 1 Skriv en funktion tobig :: Char -> Char som förvandlar små engelska bokstäver a <= bokstav <= z och å, ä, ö till motsvarande stora bokstäver. 8p) 2 En multimängd eller på engelska en bag är en mängd där antalet förekomster spelar roll. T ex är en bag med {2,1} inte detsamma som {1,2,2}. I motsats till listor spelar dock ordningen ingen roll, {1,2,2} är det samma som {2, 1,2}. Definiera i Haskell en ADT (abstrakt datatyp) med följande operationer: empty Resultat: En tom bag insert x b Resultat: En ny bag med elementet x + elmenten i bagen b count x b Resultat: Antalet x i b. remove x b. Resultat: En ny bag som bagen b men med ett x mindre. Skall ge felmedelande om count x b < 1. Implementera ADT bag som ett binärt sök-träd med infomation om ett visst elementet och antalet förekomster av detta element i bagen i en nod. Det är OK om det i trädet finns noder där antalet förekomster är noll. Lämplig intern implementation: data Bag a = Tip Node a Int (Bag a) (Bag a) t Skriv typen för varje metod. (det krävs förståss ingen balansering eller optimering av sök-trädet) 10p)

3 I Haskell kan man lätt arbeta med typen String som ju enbart är en typsynonym för teckenlistor, dvs type String = [Char] För värden av typen String kan man använda <,<=, >, >=, == osv. Problemet är att Å och Ä, å och ä kommer i fel ordning. Dessutom vill man ofta att det inte skall spela någon roll om orden skrivs med små eller stora bokstäver när man använder relationsoperqtorer. Skriv en modul StringLK som definierar en typ StringLK som skall vara en instans av typklassen Ord så klassens operationer fungerar korrekt för det svenska alfabetet och struntar i stora och små bokstäver. a) Skriv bara det som behövs för att operationer och funktioner i Ord ska fungera. Tips : Läs gärna om typklassen Ord i avsnitt 24.1 i kap 24 i boken. Tänk på klassers "default"-definitioner, som det bekvämare att lösa uppgiften. Jag fick användning tobig av från uppgift 1, som får användas även om uppgift 1 ej lösts. b) Definiera en funktion lift2 :: ([Char] -> [Char] -> [Char]) -> (StringLK -> StringLK -> StringLK) så att binära operationer/funktioner för typen type String = [Char] kan användas StringLK. T ex så att man kan skriva (lift2 (++)) (StringLK "hej" )(StringLK "san") för att konkatenera och få resultatet StringLK "hejsan" c) Skriv även lift0 :: [Char] -> StringLK lift1 :: ([Char] -> [Char]) -> (StringLK -> StringLK) d) Skriv en funktion tobigstringlk :: StringLK -> StringLK som förvandlar t ex tobigstringlk (StringLK "hej") till (StringLK "HEJ") Tips : Definitionen går att skriva mycket kortfattat med användning av bl a tobig av från uppgift 1, som får användas även om uppgift 1 ej lösts. 10p)

4. a) Skriv i FAL (Hudak kap 15) ett program Spegel som gör att en gul rektangel som följer musmarkörens röelsersom följer"speglar sig ch blir blå" i en "spegel". Blå rektangel som är den virtuella bilden av den gula rektangeln och som följer den gula rektangeln spegelvänt Spegeln Gul rektangel som följer musen a) Läs problemt så att "spegling" sker vare sig den blå rektangeln är till vänster eller till höger om spegeln. b) Modifera lösningen så att spegling sker bara när den blå rektangeln är till vänster om spegeln. I övriga fall så "parkeras" den blå rektangeln i mitten av spegeln. Denna något mer realistiska spegel kan dock inte gå sönder och den gula rektangeln kan passera genom spegeln och vara på båda sidor om spegeln. 12p)

Förslag till svar tentamen i Funktionell Programmering 2D1370 2001-maj-31 tobig :: Char -> Char -- 1 tobig c a <= c && c <= z = toenum(fromenum c - 32) c == ö = Ö c == å = Å c == ä = Ä otherwise = c module Bag(Bag,empty,insert,remove,count) --2 data Bag a = Tip Node a Int (Bag a) (Bag a) empty = Tip insert :: Ord a => a -> Bag a -> Bag a insert x Tip = Node x 1 Tip Tip insert x (Node e c left right) x == e = Node e (c+1) left right x < e = Node e c (insert x left) right x > e = Node e c left (insert x right) remove :: Ord a => a -> Bag a -> Bag a remove x Tip = error ("remove error in Bag") remove x (Node e c left right) x == e && c > 0 = Node e (c-1) left right x < e = Node e c (remove x left) right x > e = Node e c left (remove x right) otherwise = error ("remove error: in Bag") count:: Ord a => a -> Bag a -> Int count x Tip = 0 count x (Node e c left right) x == e = c x < e = count x left x > e = count x right

module StringLK -- 3 a) data StringLK = StringLK [Char] deriving (Show) instance Eq StringLK (==) (StringLK s1) (StringLK s2) = map tobig s1 == map tobig s2 instance Ord StringLK (<=) (StringLK s1) (StringLK s2) = leqq s1 s2 leqq :: [Char] -> [Char] -> Bool leqq c1 c2 = leq (map tobig c1) (map tobig c2) leq :: [Char] -> [Char] -> Bool leq ( Å : cs) ( Ä : ds) = True leq ( Ä : cs) ( Å : ds) = False leq ( c : cs) ( d : ds) c == d = leq cs ds c <= d = True leq [] ( d: ds) = True leq ( c: cs) [] = False leq [] [] = True lift2 :: ([Char] -> [Char] -> [Char]) -> -- 3 b) (StringLK -> StringLK -> StringLK) lift2 f (StringLK str1) (StringLK str2)= StringLK (f str1 str2) lift0 :: [Char] -> StringLK -- 3c) lift0 = StringLK lift1 :: ([Char] -> [Char]) -> (StringLK -> StringLK) lift1 f (StringLK str) = StringLK (f str) tobigstringlk :: StringLK -> StringLK tobigstringlk = lift1 (map tobig) --3d

module Spegel -- 4 import Picture(Picture, Region, containsr) import Fal main :: IO() main = test (sbild over mirror over obj ) sbild, obj, mirror :: Behavior Picture mirrorat ::(Behavior Float, Behavior Float) mirrorat = ( 0.0, 0.0) mirrorb, sbildb :: Behavior Region mirrorb = rec 7 70 sbildb = rec 5 5 mirror = paint white (translate mirrorat mirrorb) obj = paint yellow (translate mouse sbildb) s :: Behavior (Float, Float) {- -- Uppgift a s = (pairb (xx- mx) my) (xx, yy) = mirrorat -} sbild = paint blue (translate mirrorat (translate (fstb s, sndb s) sbildb) ) -- Uppgift b s = (pairb 0.0 0.0) switch ( (totheright ->> (pairb ( xx - mx) my)).. (totheleft ->> pairb 0.0 0.0 )) (xx, yy) = mirrorat totheright = when (mx >* 0.0) totheleft = when (mx <* 0.0)