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

Relevanta dokument
Programmering II (ID1019) :00-17:00

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-11:00

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

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-11:00

Programmering II (ID1019) :00-12:00

Programmering II (ID1019)

Programmering II (ID1019) :00-13: hp

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

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

Programmering II (ID1019) :00-12:00

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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)

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

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

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Tentamen TEN1 HI

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Tentamen TEN1 HI

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

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

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Tentamen Datastrukturer (DAT036)

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

Tentamen i Algoritmer & Datastrukturer i Java

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

public boolean containskey(string key) { return search(key, head)!= null; }

Tentamen i. TDDC67 Funktionell programmering och Lisp

Föreläsning 13. Träd

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Föreläsning 13. Dynamisk programmering

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

Tentamen Datastrukturer (DAT037)

TDDC77 Objektorienterad Programmering

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Föreläsning Datastrukturer (DAT036)

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

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Tentamen Datastrukturer för D2 DAT 035

Föreläsning Datastrukturer (DAT037)

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Tentamen Datastrukturer (DAT036)

Tentamen: Tillämpad Programmering (ID1218) :00-12:00

TDDC74 Programmering, abstraktion och modellering. Tentamen

Föreläsning 7. Träd och binära sökträd

Föreläsning Datastrukturer (DAT036)

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Tentamen Datastrukturer D DAT 035/INN960

Rekursiva algoritmer sortering sökning mönstermatchning

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

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

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

Föreläsning 7. Träd och binära sökträd

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Tentamen Grundläggande programmering

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

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

Tentamen i Algoritmer & Datastrukturer i Java

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

Facit Tentamen TDDC (7)

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

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

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

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

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 D DAT 036/INN960

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Föreläsning 9 Innehåll

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

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

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

Algoritmer, datastrukturer och komplexitet

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:

Transkript:

ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2014-03-13 09:00-13:00 Förnamn: Efternamn: Regler Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Instruktioner Tentamen har totalt 30 poäng och skall skrivas på 4 timmar. Läs igenom hela tentamen innan du börjar. Svaren skall lämnas på dessa sidor, använd det utrymme som finns under varje uppgift för att skriva ner ditt svar. Inga ytterligare sidor skall lämnas in. Du skall lämna in hela denna tentamen. Svar skall skrivas på svenska. 1

Betyg < 14 F 14 E 16 D 20 C 24 B 28 A Erhållna poäng Skriv inte här, detta är för rättningen. Uppgift 1 2 3 4 5 6 Σ Max 4 6 6 4 4 6 30 Poäng Totalt antal poäng: Betyg: 2

1 Funktionell Programmering i Erlang[totalt 4 poäng] 1.1 evaluering av aritmetiska uttryck[2 poäng] Beskriv hur man kan representera aritmetiska uttryck som till exempel 2+3 och 2+3 6 så att vi sedan kan utföra operationer på dessa. Implementera sedan en funktion eval/1 som tar ett uttryck och returnerar värdet vi får vid aritmetisk evaluering. Om vi anropar eval/1 med representationen för uttrycket 2 + 3 6 så skall funktionen returnera talet 20. Representationen för uttryck skall kunna hanterar: heltal: 1,2,3... summa av uttryck: till exempel 2+3... produkt av uttryck: till exempel 2 4... 3

1.2 varierande variabler[2 poäng] Utöka representationen i uppgift 1.1 så att vi även kan hantera uttryck med variabler. Vi skall till exempel kunna representera uttryck så som: 2 + x och 2 +(3 y). Beskriv hur variabler representeras och hur detta påverkar vår representation av uttryck. Implementera även en funktion lookup/2 som givet en variabel och en mängd variabelbindningar, returner variabels värde. Använd sedan lookup/2 för att implementera en funktion eval/2 som tar ett uttryck (som kan innehålla variabler) och en mängd variabelbindningar och returnerar värdet vi får vid aritmetisk evaluering. Om vi anropar eval/2 med representationen för uttrycket x+ 3 y och har en en mappning som binder x till 2 och y till 4 så skall vi returnera 14. 4

2 Högre-ordningens funktioner[6 poäng] 2.1 foldin på ett träd[2 poäng] Antag att vi har ett binärt träd representerat enligt formen nedan. -type tree() :: empty node() -type node() :: {node, any(), tree(), tree()} Implementera en funktion inorder/3 som traverserar ett träd i in-order (dvs från först vänstra grenen sen roten och sen högra grenen) och tillämpar en funktion på nodernas värde och en ackumulerande parameter. Om vi har trädet T nedan: T = {node, b, {node, a, empty, empty}, {node, c, empty, empty}} och gör anropet: inorder(f, gurka, T) där F är en funktion. Så skall vi få resultatet: F(c, F(b, F(a, gurka))) 2.2 summan av ett träd[2 poäng] Antag att vi har implementerat funktionen inorder/3 i föregående uppgift. Implementera en funktion sum/1 som använder sig av den funktionen och returnerar summan av alla värden i trädet. Om vi har trädet T: T = {node, 7, {node, 5, empty, empty}, {node, 2, empty, empty}} 5

så så skall sum(t) returnera 14. 2.3 funktionen reverse[2 poäng] Implementera funktionen reverse/1 (som returnerar den omvända listan) enbart med hjälp av: foldl/3, foldr/3 och/eller map/2. Du får inte använda dig av ++-operatorn och skal inte heller skriva en egen rekursiv funktion utan ta hjälp av lämpliga högre ordningens funktioner. Om du inte kommer ihåg exakt hur de högre ordningens funktionerna anropas så gör antaganden och beskriv dessa. 3 Concurrency[totalt 6 poäng] 3.1 bin som samlar honung[2 poäng] Vi skall modellera ett system där vi har ett antal bin som samlar honung i en skål. Skålen, björnen och varje bi representeras av olika processer som interagerar genom att skicka meddelanden till varandra. Bin kan bara lämna honung om det finns plats i skålen. Skålen rymmer naturligtvis inte obegränsat med honung så när den är full, skall en björn väckas som kan sleva i sig all honung. Implementera en process som beskriver skålen som har följande egenskaper: 6

skålen vet vilken björn som sover skålen skall innehålla att antal honungsenheter som inte får överstiga ett max antal om skålen inte är full kan bin lämna honung i skålen (en enhet åt gången) om skålen blir full skall skålen väcka björnen när björnen har ätit upp honungen är skålen tom Skålen vet naturligtvis vilken björn som skall väckas och vi kan anta att björnen vet vilken skål den skall äta ur när den vaknar. Vi har dock ett antal bin som levererar honung så skålen måste få reda på vilket bi det är som vill lämna honung. Du behöver inte skriva hur processen startas eller hur den får reda på vilken björn den skall väcka utan bara implementera den rekursiva funktion som beskriver skålens beteende men förklara kort hur ett bi och björnen förväntas fungera. 7

3.2 start me up[4 poäng] Om vi skall starta upp våra processer så har vi nu ett dilemma, om vi startar skålen först så vet den inte vilken björn den skall väcka men om vi startar björnen först så vet den inte vilken skål den skall äta ur. Det finns lite olika lösningar på det hör problemet, beskriv två lösningar och ge exempel på de förändringar som vi kanske måste göra i vår implementation. 8

4 Pekare och arrayer i C ++ [4 poäng] Givet är följande program: int a[5] = {1,3,-1,0,2}; int b[5] = {7,6,5,4,2}; int c[5] = {9,7,5,3,1}; int x = *(&a[4]-b[4]); *(&a[2]+(&b[5]-6-&b[0])) = a[1]; *(&a[2]+(&b[5]-7-&b[0])) = b[1]; *(&a[2]+(&b[5]-5-&b[0])) = c[1]; int y = a[0] - a[1] + a[2] - a[3]; Vad är värdet på x och y efter exekvering? 9

5 Generella frågor om C ++ [4 poäng] Välj ett antal frågor nedan, som tillsammans uppgör maximalt fyra poäng. Besvara inte flera frågor, det är de sämsta svaren som räknas; om du besvara tre frågor om två poäng vardera kan du risker att få enbart två poäng även om du besvarat två frågor korrekt. 1. Hur ofta kan en funktion definieras?[1 poäng] 2. Hur ofta kan en funktion deklareras??[1 poäng] 3. Vad är det för skillnad på en accesssor och en s.k. mutator. Vilken måste man deklarera explicit och hur deklareras den? Varför är det viktigt att skilja på dessa?[2 poäng] 4. Förklara skillnaden mellan statisk och dynamisk dispatch.[2 poäng] 10

5. Vad är en abstrakt klass i C ++?[2 poäng] 6. Vad är skillnaden mellan att använda anrop en funktion med variablers värde respektive referenser.[2 poäng] 6 Komplexitet[totalt 6 poäng] 6.1 plocka bort dubbletter[2 poäng] Antag att vi har en lista med atomer men vill skapa en lista utan dubbletter Vi plockar ett element ur listan och kontrollerar om detta finns med bland resten av elementen, om inte så sparar vi det i en ny lista som vi bygger upp. För varje element som vi tar ur listan så har vi färre och färre element att jämföra med. Vad är den asymptotiska tidskomplexiteten för denna algoritm? 11

6.2 lönar det sig?[4 poäng] Antag att vi skall arbeta på stora mängder av ord och att vi skall implementera en funktion som plockar ut ord som även är ord om de skrivs baklänges. Alla palindrom skall, som apa, skall naturligtvis vara med men även ord som galna eftersom anlag är ett ord (dvs om det är med i den mängd ord vi arbetar med). En lösning är att läsa in alla ord i en lista och sen plocka ord för ord, vända på det och se om det finns med i listan; enkelt att implementera. En annan lösning är att skapa ett sorterat träd av alla orden och sen använda sig av trädet när man skall söka efter omvända ord. Det kostar ju en del att skapa ett sorterat träd så frågan är ju om det lönar sig. Hur är det, skulle det löna sig att skapa ett sorterat träd? Vad kostar det och vad tjänar man? Vad måste man se upp med? 12