Del : Paradigmer allmänt.

Relevanta dokument
Del : Paradigmer allmänt.

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

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

Föreläsning 4 i programmeringsparadigm.

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

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

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

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.

Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h

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

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

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

Laboration 1: Figurer i hierarki

Föreläsning 9 i programmeringsparadigm. Unifiering (Brna Chapter 4.1).

DD1361 Programmeringsparadigm. Carina Edlund

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

tentaplugg.nu av studenter för studenter

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

Föreläsning 10 i programmeringsparadigm. Boxmodellen för append.

Kursanalys för Programmeringsparadigm 2D1361, läsperiod 1 och 2 läsåret 2005/2006

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 8. newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK -- data istället för newtype krävs om >1 konstruerare.

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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.

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Enjoy Vattenfallsmodellen i funktionella språk

Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

Funktionell programmering DD1361

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Föreläsning 5 i programmeringsparadigm.

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

Objektorienterad programmering. Grundläggande begrepp

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

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

TENTAMEN OOP

Tentamen i. Programmering i språket C

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

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Programkonstruktion. Tentamen,

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

Imperativ programmering

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

Classes och Interfaces, Objects och References, Initialization

Föreläsning 6 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna.

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

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

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

2D1342 Programkonstruktion för F1, ht 2006

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Tentamen i Grundläggande programmering STS, åk 1 fredag

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

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

Repetition av OOP- och Javabegrepp

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Objektorienterad programmering

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

DAT043 Objektorienterad Programmering

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Repetition av OOP- och Javabegrepp

Enjoy Vattenfallsmodellen i funktionella språk

OOP Tentamen

Tentamen i Grundläggande Programvaruutveckling, TDA548

Tentamen i Introduktion till programmering

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 6: Metoder och fält (arrays)

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

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

TENTAMEN OOP

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

Undervisning. Examination

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

2D1339 Programkonstruktion för F1, ht 2003

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

DD1361 Programmeringsparadigm Föreläsning 1: Intro

Tentamen Grundläggande programmering

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

OOP Tenta

Transkript:

Nada Tentamensdag 2003 jan 13 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 3 (Haskell) + 4 (Prolog) = 5p +(15p + 15p +20p) + (10p +12p + 15p +8p) = 5p + 50p + 45 p = 100p Lärare, jourhavande lärare : Leif Kusoffsky ------------------------------------------------------------------------------------------------------------------ Tillåtna hjälpmedel: Fokker : Functional programming Brna : Prolog Programming ----------------------------------------------------------------------------------------------------------------- Del : Paradigmer allmänt. 1. a) Om man programmerar objekt-orienterat i Java 1) Undviker man att använda applets. X) Undviker man switch- och if-kommandon 2) Undviker man att använda arv. b) Om man programmerar objekt-orienterat i Java 1) Har klasserna enbart klassvariabler X) Har klasserna enbart variabler deklarerade som static. 2) Har klasserna variabler och metoder deklarerade som instansvariabler och instansmetoder. c) Om man programmerar objekt-orienterat i Java 1) Har ofta subklasser egna olika implementaioner av metoder definierade i den gemensamma superklassen. X) Kan man använda multipelt arv 2) Har klasserna enbart metoder deklarerade som static. d) Det första objekt-orienterat programmeringspråket var 1) Java X) Smalltalk 2) Simula e) I vilken pardigm programmerar man när man använder klasser vars instanser både innehåller för instanserna individuella variabler och metoder? 1) Logiska läsningen i den logiska paradigmen X) Funktionella paradigmen 2) OO 5p)

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar. 2. a) Skriv en funktion close::[a] -> [a] som givet en lista med n st element returnerar en lista med första elementet tillagt sist. Den returnerade listan har alltså n+1 element. Listargument med färre än tre element skall ge error. Exempel..> close [1,2,3,4] [1,2,3,4,1]..> close [1,2] Program error: argument to close must have a list of at least length 3.. > close[(1.0, 1.0), (2.0, 1.0), (2.0, 2.0), (1.0, 2.0)] [(1.0,1.0),(2.0,1.0),(2.0,2.0),(1.0,2.0),(1.0,1.0)] b) Skriv en funktion polylines :: [a] -> [(a, a)] som givet en lista med n st element returnerar en lista med n - 1 st par, där parenens komponeter är två på varandra följande element i argumentlistan. Listargument med färre än två element skall ge error. Exempel.. > polylines [1, 2, 3] [(1,2),(2,3)]..>> polylines [(1.0, 1.0), (2.0, 1.0), (2.0, 2.0)] [((1.0,1.0),(2.0,1.0)),((2.0,1.0),(2.0,2.0))] c) Skriv en funktion distbetween1:: ((Float, Float), (Float, Float)) -> Float som givet ett par med två kordinater (x1, y1) och (x2, y2) i ett rätvinkligt kordinatsystem returnerarar avståndet mellan koordinaterna. Exempel..> distbetween1 ((0.0, 0.0), (3.0, 4.0)) 5.0 15p) 3. Tentabetyget på en kurs beror på dels antalet poäng p på tentan, 0<= p <= 100, dels på om man har gjort ett labmoment steg9 vilket markeras med G eller _. Tentabetyg ges till de personer som har minst 50 p på tentan. Föjande betygsgränser gäller för dessa: Tentabetyg Tentapoäng p om Tentapoäng p om man gjort steg 9 man inte gjort steg 9 3 50 <= p < 70 50<= p < 75 4 70 <= p < 80 75 <= p < 98 5 80 <= p <= 100 98 <= p <= 100

Skriv ett program tentabetyg :: [(String, Int,Char)] -> [(String, Int)] som givet en lista av typ [(String, Int,Char)] med personers namn, tentamenspoäng och om man gjort steg9 retunerar tentabetyg för de personer som skall ha tentabetyg 3, 4, eller 5. Exempel : res = [("Per", 74, G ), ("Siv", 74, _ ), ("Eva", 95, G )].. >tentabetyg res [("Per",4),("Siv",3),("Eva",5)] a) Skriv programmet utan att använda några högre ordningens funktioner eller listomfattning. b) Skriv programmet med map och filter. c) Skriv programmet med listomfattning. 15p) 4. a) Skriv i Haskell en modul för en abstrakt datatype Shape för några olika geometriska former. Man skall kunna definera värden som är rektanglar givet två sidor cirklar givet radien rätvinkliga trianglar givet de två katetrarna polygoner givet en lista med kordinater för hörnen Dessutom skall det finnas (exporteras) en vanlig funktion square (ej konstuerarfunktion) som retunerar kvadrater (givet sidan). Till slut skall det i ADT Shape finnas (exporteras) en funktion circumference :: Shape -> Float som retunerar den geometriska formens omkrets. (se även fråga b). Tips : Min lösning använder funktionerna i 2a), 2b) och 2c). b) I en design-affär i Sturegallerian kan man tänka sig att man kan inhandla tre karottunderlägg med formerna Polygon [(1.0, 1.0), (2.0, 1.0), (2.0, 2.0), (1.0, 2.0)], square 1.0 Circle 3.0. Antag att man vill dekorera karottunderläggens kanter med dekor-tejpar. Skriv tre uttryck vars värden utgör längden på de dekor-tejparna. 20p)

Del : Logikprogrammering. 5. a) Skriv ett Prolog-predikat för append(xs, Ys, XsYs) med betydelsen att XsYs är en lista som är konkateneringen av Xs och Ys : Exempelvis append([1, 2, 14], [22, 33],[1,2,14,22,33] ) är sant. b) Hur kan man använda append/3 för att dela upp listan[1,2,14] i två listor Del1 och Del2 med ordningen mellan elementen intakt? Vilka olika svar kan man få vid körningen? c) Hur kan man definera member(x, Xs) med betydelsen att X är medlem i Xs med hjälp av append/3? d) Hur definerar man member(x, Xs) utan att använda append/3? 6. Skriv i Prolog ett generate-and-test-program som löser följande problem: 10p) På ett skolschema är det fyra lektioner på förmiddagen och fyra på eftermiddagen. Engelska är första lektion efter lunch. Geografi är just före mattelektionen. Engelska har elverna precis innan franska. Historia har de mellan fysik och franska. Bilogilektionen ligger mellan geografi och kemi. I vilken ordning kommer lektionerna? Tips: Man kan t ex ordna lektionerna i tids-ordning. Med "A mellan B och C" menas att lektionerna har följden BAC eller CAB. 12p) 7. Modifierad uppgift 3 för lösning i Prolog. Tentabetyget på en kurs beror på dels antalet poäng p på tentan, 0<= p <= 100, dels på om man har gjort ett labmoment steg9 vilket markeras med g eller n. Tentabetyg ges till de personer som har minst 50 p tentan. Betygsgränserna ges i uppgift 3. Betygsgränserna är beroende av om man gjort steg9. Skriv ett Prologpredikat tentabetyg(rs, Ts) med betydelsen att om Rs är en lista med personers namn, tentamenspoäng och om man gjort steg9 så är Ts en lista med namn och tentabetyg för de personer som har minst 50 poäng på tentan. Exempel, om vi har res([r(per, 74, g), r(siv, 74, n), r(eva, 95, g)]). :?- res(rs), tentabetyg(rs, Ts). Rs = [r(per,74,g),r(siv,74,n),r(eva,95,g)], Ts = [tentabetyg(per,4),tentabetyg(siv,3),tentabetyg(eva,5)]? ; no Tips: man kan använda =< < osv som infixoperatorer i predikat. 15p)

8. a) I Prolog unifieras argumenten i ett delmål, g(..) med huvudet (konklusionen) i en av de klausuler som definierar predikatet g. 1) Enbart huvudet kan innehålla logiska variabler X) Argumenten kan vara logiska variabler och huvudet kan innehålla logiska variabler 2) Enbart argumenten kan vara logiska variabler b) I Haskel mönster-passas argumentet i ett funktionsanrop med vänsterledet i en av de ekvationer som definierar funktionen. 1) Enbart vänsterledet kan innehålla mönster med t ex _, x och konstruerare X) Både argumentet och vänsterledet kan innehålla mönster t ex _ 2) Enbart argumentet kan innehålla mönster t ex _ c) Om Prolog misslyckas med att unifiera argumenten i ett delmål g(..) med huvudet (konklusionen) i den första av flera klausuler som definierar predikatet g. 1) Försöker Prolog unifiera argumenten med huvudet i den andra klausulen för predikatet g. X) Svarar Prolog yes. 2) Svarar Prolog no. d) Om ett Haskell-system, t ex hugs, misslyckas med att passa ("matcha") argumenten i ett anrop g.. med vänsterledet i den första av flera ekvationer som definierar funktionen g. 1) Försöker hugs "matcha" argumenten med vänsterledet i den andra ekvationen för funktionen g. X) Svarar hugs med Program error. 2) Returneras False. 8p)

Förfrågan: Kan du tänka dig att vara labbassistent nästa år under läsperiod 1 i kursen programmeringsparadigm i D2? Kryssa gärna i ett eller båda alternativen. (Naturligtvis ej bindande) O I Haskelldelen av kursen O I Prologdelen av kursen Hur kan jag kontakta dig (tex e-pos, tel ): Om du kryssat, bifoga denna sida med svaren på din tentamen!

Svar fikitiv tenta, del paradigmer allmänt. 1a) X 1b) 2 1c) 1 1d) 2 1e) 2 Svar fikitiv tenta, del funktionell programmering. close::[a] -> [a] -- 2 a close (a:b:c:as) = (a:b:c:as)++[a] close _ = error "argument to close must have alist of at least length 3" polylines :: [a] -> [(a, a)] -- b polylines (v1:v2:[]) = (v1, v2):[] polylines (v1:v2:vs) = (v1, v2):polylines(v2:vs) polylines _ = error "argument to polylines must have alist of at least length 2" distbetween1:: ((Float, Float), (Float, Float)) -> Float -- c distbetween1 ((x1, y1), (x2, y2)) = sqrt ((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) tentabetyg [] = [] tentabetyg ((namn, p, _ ):nps) p < 50 = tentabetyg nps p < 75 = (namn, 3) : tentabetyg nps p < 98 = (namn, 4) : tentabetyg nps otherwise = (namn, 5) : tentabetyg nps tentabetyg ((namn, p, G ):nps) p < 50 = tentabetyg nps p < 70 = (namn, 3) : tentabetyg nps p < 80 = (namn, 4) : tentabetyg nps otherwise = (namn, 5) : tentabetyg nps tentabetyg _ = error "felaktiga indata" -- 3 a tentabetyg lista = map betyg1 -- b (filter ( \(namn, tentap, steg9) -> tentap > 50) lista) betyg1:: (String, Int, Char) -> (String, Int) betyg1 (namn, p, _ ) p < 75 = (namn, 3) p < 98 = (namn, 4) otherwise = (namn, 5) betyg1 (namn, p, G ) p < 70 = (namn, 3) p < 80 = (namn, 4) otherwise = (namn, 5) betyg1 _ = error "felaktiga indata" tentabetyg lista = -- c [ (namn, betyg tentap steg9) (namn, tentap, steg9) <- lista, tentap >= 50] betyg:: Int -> Char -> Int betyg p _ p < 75 = 3 p < 98 = 4 otherwise = 5 betyg p G p < 70 = 3 p < 80 = 4 otherwise = 5 betyg = error "felaktiga indata"

module Shape (Shape(..), square, circumference) where -- 4 data Shape = Rectangle Float Float Circle Float RtTriangle Float Float Polygon [(Float, Float)] square:: Float -> Shape square s = Rectangle s s circumference :: Shape -> Float circumference (Rectangle s1 s2 ) = 2.0*s1 + 2.0*s2 circumference (Circle r1 r2 ) = 2.0*pi*r circumference (RtTriangle s1 s2 ) = s1 + s2 + sqrt(s1*s1 + s2*s2) circumference (Polygon list) = sum (map distbetween1 (polylines (close list))) circumference (Polygon [(1.0, 1.0), 2.0, 1.0), (2.0, 2.0), (1.0, 2.0)]) circumference (square 1.0) circumference (Circle 3.0 1.0) Svar fikitiv tenta, del logik programmering. append([], Ys, Ys). append([x Xs],Ys,[X Zs]):-append(Xs,Ys,Zs). -- b % 5 a?- append(del1, Del2, [1,2,14]). % b Del1 = [], Del2 = [1,2,14]? ; Del1 = [1], Del2 = [2,14]? ; Del1 = [1,2], Del2 = [14]? ; Del1 = [1,2,14], Del2 = []? ; member(x, Ys) :- append(_, [X _], Ys). member(x, [X _]). member(x, [_ Xs]) :- member(x, Xs). % c % d % Ls is a time sequence of lessons % 6 schema(ls) :- Ls = [_, _,_,_, lunch, engelska, _, _, _], follows(geografi, matte, Ls), follows(engelska, franska, Ls), beetwin(franska, historia, fysik, Ls), beetwin(geografi, biologi, kemi, Ls). follows(x,y,[x,y _]). follows(x,y,[_ Zs]):- follows(x,y,zs). beetwin(x,y,z,[x, Y, Z _]). beetwin(x,y,z,[z, Y, X _]). beetwin(x,y,z, [_ Us]) :- beetwin(x,y,z, Us). /* Körning?- schema(rs). Rs = [kemi,biologi,geografi,matte,lunch,engelska,franska,historia,fysik]? ; no */ tentabetyg([], []). %7 tentabetyg([r(namn, P, n) Ntls ], [tentabetyg(namn, 3) Ntls1]) :- 50 =< P, P < 75, tentabetyg( Ntls, Ntls1).

tentabetyg([r(namn, P, n) Ntls ], [tentabetyg(namn, 4) Ntls1]) :- 75 =< P, P < 98, tentabetyg( Ntls, Ntls1). tentabetyg([r(namn, P, n) Ntls ], [tentabetyg(namn, 5) Ntls1]) :- 98 =< P,tentabetyg( Ntls, Ntls1). tentabetyg([r(namn, P, g) Ntls ], [tentabetyg(namn, 3) Ntls1]) :- 50 =< P, P < 70, tentabetyg( Ntls, Ntls1). tentabetyg([r(namn, P, g) Ntls ], [tentabetyg(namn, 4) Ntls1]) :- 70 =< P, P < 80, tentabetyg( Ntls, Ntls1). tentabetyg([r(namn, P, g) Ntls ], [tentabetyg(namn, 5) Ntls1]) :- 80 =< P, tentabetyg( Ntls, Ntls1). tentabetyg([r(_, P, _) Ntls ], Ntls1) :- P < 50, tentabetyg( Ntls, Ntls1). 4a) X 4b) 1 4c) 1 4d) 1 % 8