Del : Paradigmer allmänt.

Relevanta dokument
Del : Paradigmer allmänt.

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

Föreläsning 4 i programmeringsparadigm.

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

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

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

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

Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h

DD1361 Programmeringsparadigm. Carina Edlund

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

Enjoy Vattenfallsmodellen i funktionella språk

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

Föreläsning 5 i programmeringsparadigm.

Enjoy Vattenfallsmodellen i funktionella språk

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.

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

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

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

Imperativ programmering

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

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

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

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.

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

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

Funktionell programmering DD1361

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

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

Laboration 1: Figurer i hierarki

Föreläsning 12 i programmeringsparadigm. Negering.

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

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

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

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.

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

Provet består av Del I, Del II, Del III samt en muntlig del och ger totalt 76 poäng varav 28 E-, 24 C- och 24 A-poäng.

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

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

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

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

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

Föreläsning 3: Booleans, if, switch

Programmering A. Johan Eliasson

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

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

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

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

Arkitektur och teknik, Teknisk fysik, Teknisk matematik Antagningsprov MATEMATIK

Classes och Interfaces, Objects och References, Initialization

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

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

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

Föreläsning REPETITION & EXTENTA

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

1. Beräkna och klassificera alla kritiska punkter till funktionen f(x, y) = 6xy 2 2x 3 3y 4 2. Antag att temperaturen T i en punkt (x, y, z) ges av

Objektorienterad programmering. Grundläggande begrepp

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

Extramaterial till Matematik Y

Provet består av Del I, Del II, Del III samt en muntlig del och ger totalt 76 poäng varav 28 E-, 24 C- och 24 A-poäng.

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

Programmeringsteknik I

Användarhandledning Version 1.2

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

Tentamen i Introduktion till programmering

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

HI1024 Programmering, grundkurs TEN

Datalogi I, grundkurs med Java 10p, 2D4112, Tentamen 29 november 2003, svar och lösningar

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Del A: Digitala verktyg är inte tillåtna. Endast svar krävs. Skriv dina svar direkt på provpappret.

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

DD1361 Programmeringsparadigm HT15

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Komposanter, koordinater och vektorlängd Ja, den här teorin gick vi igenom igår. Istället koncentrerar vi oss på träning inför KS3 och tentamen.

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Objektorienterad programmering

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.

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

Imperativ programmering. Föreläsning 4

Föreläsning 13 Innehåll

Matematik CD för TB = 5 +

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

Repetitionsprov på algebra, p-q-formeln samt andragradsfunktioner

Deklarativt programmeringsparadigm

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Extramaterial till Matematik Y

Polygoner. Trianglar på tre sätt

Introduktion till programmering. Programspråk och paradigmer

Introduktion till Haskell

Undervisning. Examination

Program & programmering

TDIU01 - Programmering i C++, grundkurs

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Erfarenheter från labben

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

En parallellogram har delats i två delar P och Q som figuren visar. Vilket av följande påståenden är säkert sant?

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Deklarationer/definitioner/specifikationer

Transkript:

Nada Tentamensdag 2003 aug 25 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 5p +(12p + 15p +5p+ 20p) + (10p +14p + 8p +11p) = 5p + 52p + 43 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) Kan man programmera icke-objekt-orienterat i Java, dvs som i ett klassikt imperativt språk? 1) Nej, går ej att skriva program som är i stort ekvivalenta med t ex Pascal-program. X) Ja, om man undviker switch- och if-kommandon 2) Ja, i stort sett om klasserna enbart har variabler och funktioner deklarerade som static. b) 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. c) Föjande språk är imperativa, icke-objekt-orienterade språk 1) Pascal, Fortran, C, BASIC X) Prolog 2) Smalltalk, Eiffel, Simula d) I vilken pardigmen programmerar man genom att ange i vilken ordning datorn skall utföra olika kommandon, kommandon som ofta har sidoeffekter? 1) Logiska läsningen i den logiska paradigmen X) Funktionella paradigmen 2) Imperativa paradigmen och objekt-orienterade paradigmen e) Assembleringsspråk användes när datorer var nyuppfunna, dvs på 50-talet. Vilken paradigm? 1) Logiska paradigmen X) OO- paradigmen 2) Imperativ paradigmen 5p)

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar. 2. a) Skriv en funktion distbetween:: ((Float, Float), (Float, Float)) -> Float som givet ett par med två kordinater ((x1, y1), (x2, y2)) i ett rätvinkligt koordinatsystem returnerarar avståndet mellan koordinaterna. Exempel..> distbetween ((0.0, 0.0), (3.0, 4.0)) blir 5.0 6p) b) Definiera triarea :: (Float, Float) -> (Float, Float) -> (Float, Float) -> Float som givet koordinaterna för tre hörn i ett rätvinkligt kordinatsystem returnerarar arean för triangeln bestämd av de tre hörnen. Tips: Använd Herons formel : A = sqrt (s*(s-a)*(s-b)*(s-c)) där a, b, c är längden på triangels sidor och s = 0.5*(a+b+c) 6p) 3. Definiera en funktion productbiggerthan :: Int -> [(Int, Int)] -> [Int] productbiggerthan k list multipliserar komponenterna i paren i list och retunerar en lista med de produkter som är större än k. Exempelvis: productbiggerthan 5 [(1, 2),(3, 4),(5, 6)] blir [12, 30] eftersom 3*4 > 5 och 5*6 > 5 a) Skriv funktionen utan att använda några högre ordningens funktioner eller listomfattning. (och inte som i uppgift d) b) Skriv funktionen med map och filter. c) Skriv funktionen med listomfattning. d) Skriv funktionen med hjälpfunktion med "accumulering i parameter". 15p) 4. I ett typuttrycket kan det stå Num a =>. Förklara vad som menas med detta. Vilkets sorts namn är Num? 5p)

5 a) Skriv i Haskell en modul för en 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 vanliga funktion square (ej konstuerarfunktion) som returnerar en kvadrat (givet sidan). Till slut skall det i ADT Shape finnas (exporteras) en funktion area :: Shape -> Float som retunerar arean för en geometrisk form (se även fråga b). Tips: Polygoners yta kan beräknas genom att dela upp en polgon i en mindre polygon och en triangel (för triangelns yta kan du använda funkitonen i 2 b): v1 v2 v5 v3 v4 v2 v3 = + v1 v1 v5 v3 v4 b) För att kontrollera funktionen area, skriv två uttryck vars värden utgör arean på en kvadrat med sidan 1, det ena uttrycket med kvadraten beskriven med funktionen square och det andra uttrycket med kvadraten beskriven med konstuerarfunktionen för polygoner, dvs kvadraten beskrivs som en polygon med fyra hörn i (0, 0), (1, 0), (1, 1), (0,1). Låt oss kalla värdet på de två uttrycken som u1 och u2. Diskutera vilket värde u1 == u2 kan få. c) På IKEA kan man tänka sig att man kan inhandla en rund cylindrisk kastrull med radien 3.0 och höjden 4.0. Skriv ett uttryck vars värde utgör kastrullens volym. 20p)

Del : Logikprogrammering. 6. a) Skriv ett program för member(element,list) med betydelsen Element är ett element i listan List. b) Skriv ett program för select(x,harxs,ettmindrexs) med betydelsen att listan EttMindreXs är resultatet av att en förekomst av X har tagits bort från HarXs. c) Skriv ett program för permutation(xs,ys) med betydelsen att Ys är en permutation av Xs. 7. Skriv i Prolog ett generate-and-test-program som löser följande problem: 10p) Bilarna BHB 737, MMX 152 och AXA 535 har olika motorstyrkor och olika sorters transmissioner; en är framhjulsdriven, en är bakhjulsdriven och en är fyrhjulsdriven. Den framhjulsdrivna bilen är starkast och är en sedan. AXA 535 är svagare än den fyrhjulsdrivna bilen. BHB 737 är en kabriolet som ger rufs i håret när man kör eller åker med. Vilken bil har vilken sorts transmission? Tips: Man kan t ex ordna bilarna efter motorstyrka. 14p) 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) Både argumenten och huvudet kan innehålla logiska variabler 2) Enbart argumenten kan innehålla 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 satisfiera ett delmål g i en konjunktion av delmål.., h(..), g(..), f(x) 1) Försöker Prolog på nytt att få delmål h att lyckas med unifiering m h a ny klausul. X) Svarar Prolog no. 2) Svarar Prolog yes.

d) Om ett Haskell-system, t ex hugs, vid en körning får resultatet False vid beräkningen av funktionanropet g(x)i detta uttryck med funktionanrop h(x) && g(x) && f(x) 1) Anropas h(x) på nytt. X) Blir hela uttrycket True om uttrycket f(x), som beräknas, blir True. 2) Blir hela uttrycket False. 8p) 9 När man kör i Prolog-fönstret i emacs, vad skulle följande körningar (unifieringar) ge för resultat (Lyckas unifieringarna? Vilka substiutioner görs i så fall?)?- a=b.?- A=b.?- cars(x) = cars(saab).?- cars(x) = f(y).?- cars(x) = cars([saab, volvo Cs]).?- cars([saab, volvo Cs]) = cars(x).?- cars([saab, volvo Cs]) = cars([saab, volvo, opel]).?- cars(x, Y, opel) = cars(volvo, saab, opel).?- cars(x, Y, opel) = cars(volvo, saab, Z).?- cars(x, Y, opel) = cars(volvo, saab, vw).?- X(saab) = cars(y). 11p)

Svar tentamen programeringsparadigm 2003- augusti. Del paradigmer allmänt. 1a) 2 1b) 1 1c) 1 1d) 2 1e) 2 Del funktionell programmering. distbetween :: ((Float, Float),(Float, Float)) -> Float -- 2a) distbetween ((x1, y1), (x2, y2)) = sqrt ((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) triarea :: (Float, Float) -> (Float, Float) -> (Float, Float) -> Float -- 2b) triarea v1 v2 v3 = sqrt (s*(s-a)*(s-b)*(s-c)) where a = distbetween (v1, v2) b = distbetween (v2, v3) c = distbetween (v3, v1) s = 0.5*(a+b+c) productbiggerthan _ [] = [] -- 3 a productbiggerthan k ((i, j):ijs) i*j > k = (i*j) : productbiggerthan i ijs otherwise =productbiggerthan i ijs productbiggerthan k list = filter p (map f list) -- b where f (i, j) = i*j p m = m > k productbiggerthan k list = [ i*j (i,j) <- list, i*j > k ] -- c productbiggerthan k list = pbtacc k list [] -- d pbtacc :: Int -> [(Int, Int)] -> [Int] -> [Int] pbtacc _ [] acc = acc pbtacc k ((i, j):ijs) acc i*j > k = pbtacc k ijs (acc++[i*j]) otherwise = pbtacc k ijs acc -- 4 T ex Num a => a -> a -> a. Num a är ett sammanhang ("context") för typuttrycket a -> a -> a, dvs i typuttrycket står a för någon typ som är en instans ("instance") av typklassen Num. Det innebär att a står för någon typ som har operationerna/funktionera i Num dvs +, - *, negate, abs, signum och tointeger. Dessa operationer/funktioner har typer som finns i deklarationen för typklassen Num. module Shape (Shape(..), area, square) where -- 5 a) data Shape = Rectangle Float Float Circle Float RtTriangle Float Float Polygon [(Float, Float)] square :: Float -> Shape square s = Rectangle s s -- distbetween, triarea se uppgift 2 area :: Shape -> Float area (Rectangle s1 s2 ) = s1*s2 area (Circle r ) = r * r * pi area (RtTriangle s1 s2 ) = 0.5*s1*s2

area (Polygon (v1:v2:v3:[])) = triarea v1 v2 v3 area (Polygon (v1:v2:v3:vs)) = triarea v1 v2 v3 + area (Polygon (v1:v3:vs)) Shape> area (Polygon [ (0, 0), (1, 0), (1, 1), (0,1)]) -- 5 b) 1.0 Shape> area (square 1) 1.0 Shape> area (Polygon [ (0, 0), (1, 0), (1, 1), (0,1)]) == area (square 1) False -- "Borde" bli True, men sqrt i Herons formel med serieutveckling ger -- ej exakt värde. == Farligt för värden av typ Float Shape> 4.0*area (Circle 3.0) -- 5 c) 113.097 Del logik programmering. member(x, [X _]). member(x, [_ Ys]) :- member(x, Ys) select(x,[x Ys],Ys). select(x,[y Ys],[Y Zs]):- select(x,ys,zs). permutation(xs, [Z Zs]) :- select(z, Xs, Ys), permutation(ys, Zs). permutation([], []). % Cs is a sequence of cars in motor power order. % 7 % A car is g(<name>, <transmission>,<sedan/cab>). % 6 a % b % c cars(cs) :- Cs = [g(_, fram, sedan), _, _], member(g(bhb737, _, cab), Cs), member(g(axa535, _, _), Cs), member(g(mmx152, _, _), Cs), member(g(_,bak, _), Cs), member(g(_, fyr, _), Cs), after(g(_, fyr, _), g(axa535, _, _), Cs). after(x, Y, [X, Y, _]). after(x, Y, [X, _, Y]). after(x, Y, [_, X, Y]). % Starkast först /* Körning :?- cars(rs). Rs = [g(mmx152,fram,sedan),g(bhb737,fyr,cab),g(axa535,bak,_a)]? ; no */ 8a) X 8b) 1 8c) 1 8d) 2 % 8?- a=b. no %9?- A=b. A = b? ;?- cars(x) = cars(saab). X = saab? ;?- cars(x) = f(y). no?- cars(x) = cars([saab, volvo Cs]). X = [saab,volvo Cs]? ;?- cars([saab, volvo Cs]) = cars(x). X = [saab,volvo Cs]? ;?- cars([saab, volvo Cs]) = cars([saab, volvo, opel]). Cs = [opel]? ;?- cars(x, Y, opel) = cars(volvo, saab, opel). X = volvo, Y = saab? ;?- cars(x, Y, opel) = cars(volvo, saab, Z). X = volvo, Y = saab, Z = opel? ;?- cars(x, Y, opel) = cars(volvo, saab, vw). no?- X(saab) = cars(y). {SYNTAX ERROR:...

Betygsgänser om man gjort steg 9, schacket: om man ej gjort steg 9, schacket 3 >= 50 >= 50 4 >= 60 >= 70 5 >= 73 >= 92