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

Storlek: px
Starta visningen från sidan:

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

Transkript

1 ID1218 Johan Montelius Tentamen: Tillämpad Programmering (ID1218) :00-12: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 200 poäng och skall skrivas på 3 timmar. Antalet poäng på en uppgift skall ge dig en vägledning till hur mycket tid uppgiften kan ta att lösa, planera din tid väl. 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. Om du inte får plats med sitt svar så kan du använda ytterligare sidor. Dessa sidor skall då vara märkta med namn och personnumer. Det skall även tydligt framgå i svaret under uppgiften att ytterligare sidor har använts. 1

2 Du skall lämna in hela denna tentamen. Svar skall skrivas på svenska. Betyg Erhållna poäng Skriv inte här, detta är för rättningen. n < 100 F 100 n < 120 E 120 n < 140 D 140 n < 160 C 160 n < 180 B 180 n A Uppgift Σ Max Poäng Totalt antal poäng: Betyg: 2

3 1 Funktionell Programmering[totalt 30 poäng] Antag att vi representera en nod i ett binärt träd med tupeln {node, Key, Value, Left, Right} och ett löv med atomen nil (ett tomt träd representeras av ett löv). Paret Key, Value kommer nedan att kallas för ett element. Trädet är ordnat så att alla element i en nods vänstra gren är mindre och alla element i dess högra gren är större. Ordningen bestäms av ett elements nyckel (Key) och vi antar att vi kan jämföra två nycklar med de vanliga operatorerna dvs:<,>,=<,=>,==,=/=. 1.1 Lägg till ett element[5 poäng] Skriv en funktion insert(key, Value, Tree), som tar en nyckel, ett värde och ett träd och returnerar ett nytt träd där elementet Key - Value har lagts till. Trädet skall fortfarande vara ordnat. Det element som läggs till kommer att ha en unik nyckel. insert(key, Value, nil) -> {node, Key, Value, nil, nil insert(key, Value, {node, K, V, L, R}) -> if end. Key < K -> {node, K, V, insert(key, Value, L), R true -> {node, K, V, L, insert(key, Value, R)} 1.2 Traversera trädet[5 poäng] Skriv en funktion traverse(tree), som traverserar ett träd och returnerar en lista av element {Key, Value} som är alla element i trädet ordnade efter storleken på nyckeln. Du får använda dig av append/2 eller operatorn++ utan att definiera dessa. traverse(nil) -> []; traverse({node, _, V, L, R}) -> traverse(l) ++ [V] ++ traverse(r); 1.3 Plocka bort ett element[20 poäng] Skriv en funktion remove(key, Tree) som returnerar ett träd där elementet med nyckel Key har plockats bort. Trädet skall fortfarande vara ordnat. Om trädet inte har något sådant element så returneras ett identiskt träd. 3

4 %% one alternative remove(_, nil) -> nil; remove(key, {node, Key, _, nil, R}) -> R; remove(key, {node, Key, _, L, R}) -> %% select the higest value in left branch {K, V, Rest} = rightmost(l), {node, K, V, Rest, R remove(key, {node, K, V, L, R}) -> if Key < K -> {node, K, V, remove(key, L), R true -> {node, K, V, L, remove(key, R)} end. %% The tree is not empty rightmost({node, Key, Value, L, nil}) -> {Key, Value, L rightmost({node, K, V, L, R}) -> {Key, Value, Rest} = rightmost(r), {Key, Value, {node, K, V, L, Rest}}. 2 Komplexitet[totalt 30 poäng] Nedan finns funktionen filter/1, en funktion som tar bort dubbletter från en lista. Listan antas bestå av literaler och att jämföra två literaler kan göras i konstant tid. filter([]) -> []; filter([h T]) -> [H filter(remove(h, T))]. remove(_, []) -> []; remove(x, [X T]) -> remove(x, T); remove(x, [H T]) -> [H remove(x, T]. 2.1 remove[10 poäng] Vilken är storleksfunktionen (size function), upprepningsfunktionen (recurrence function) T remove (n) och den asymptotiska tidskomplexiteten för funk- 4

5 tionen remove/2? T remove (n)= c+t remove (n 1), storleksfunktionen är längden på listan och komplexiteten är O(n) 2.2 filter[20 poäng] Anta att upprepningsfunktionen för remove/2 är T remove (x), vilka är storleksfunktionen (size function), upprepningsfunktionen (recurrence function) och tidskomplexiteten för filter/1. T f ilter (n)=c+t remove (n 1)+ T f ilter (n 1), storleksfunktionen är längden på listan och komplexiteten är O(n 2 ). Om vi inte hade haft anropet till remove/2 så hade komplexiteten varit O(n) 3 Operationell semantik[totalt 30 poäng] Den operationella semantiken för Erlang kan beskrivas med hjälp av en abstrakt maskin, MiniErlang, vars omskrivningsregler ges i ett appendix. Visa med hjälp av MiniErlang 3.1 att skapa en lista[10 poäng] Visa hur, utan att ta några genvägar, hur uttrycket [1,2] exekveras med hjälp av MiniErlang. [1,2] ; 1 [2] CONS ; [2] CONS ; 1 2 [] CONS CONS ; 1 [] CONS CONS ; 2 1 CONS CONS ; [] 2 1 CONS ; [2] 1 ; [1,2] 3.2 ett program[10 poäng] Antag att vi utökar vår maskin med en regel som kan flytta ett helt uttryck E direkt till värdestacken om detta uttryck är fritt från funktionsanrop och representerar ett värde V. Vi kan alltså gör saker så som: E Es ; Vs Es ; V Vs [1,2] Es ; Vs Es ; [1,2] Vs 5

6 Givet nedanstånde MiniErlang-program, visa exekveringen av uttrycket r([1,2],[]). r([], A) -> A; r([h T], A) -> r(t,[h A]). r([1,2],[]) ; [1,2] [] CALL(r/2) ; [] CALL(r/2) ; [1,2] CALL(r/2) ; [] [1,2] r([2],[1]) ; [2] [1] CALL(r/2) ; [1] CALL(r/2) ; [2] CALL(r/2) ; [1] [2] r([],[2,1]) ; [] [2,1] CALL(r/2) ; [2,1] CALL(r/2) ; [] CALL(r/2) ; [2,1] [] [2,1] ; ; [2,1] 3.3 Utöka maskinen[10 poäng] I den beskrivning av MiniErlang som har givits kan man inte ha mer än ett uttryck i kroppen av en definition. Man kan till exempel inte skriva. foo(x) -> Y = bar(x), zot(x,y). Antag att vi utökar våra definitioner till att inte bara ha en kropp som är ett enkelt uttryck utan även sekvenser som i definitionen ovan. Vi skulle kunna skriva om definitionen av uttryck till följande: E := int [] [E 1 E 2 ] X F(E 1,..., E n ) E := E P=E, E Där P i sista regeln är ett mönster (pattern). Semantiken skall vara att uttrycket E evalueras och matchas med P och, att den substitution som skapas appliceras på E innan E evalueras. Antag att vi har följande regel för att skriva om en LET-operation (detta är alltså en ny regel som vi inte sett förut): 6

7 LET P in E Es ; V Vs S(E) Es ; Vs Där S är den substitution som fås genom att matcha mönstret P med värdet V. Hur skall den regel skrivas som tar hand om ett uttryck på formen P=E, E när den ligger överst på exekveringstacken? P = E, E Es ; Vs E LET P in E Es ; Vs 4 Högre-ordningens funktioner[30 poäng] 4.1 summan av kvadrater[10 poäng] Skriv en funktion som tar en lista med heltal och producerar: summan av, kvadraten av de tal som är jämnt delbara med tre. Du skall använda dig av följande högre ordningens funktioner: filter/2, map/3 och foldl/3 eller foldr/3. Operatorn rem ger resten vid heltalsdivision. Du behöver inte kunna exakt hur dessa funktioner tar sina argument. Om du är osäker så skriv ner dina antagande. sumkdt(list) -> Delbara = filter(fun(x) -> X rem 3 == 0 end, List), Kvadrater = map(fun(x) -> X*X end, Delbara), foldl(fun(x,a) -> X+A end, 0, Kvadrater). 4.2 räkna heltal[10 poäng] Skriv en funktion, total/2, som givet en lista, L, och ett heltal, N, returnerar antingen: {total, Total}, där Total är antalet element innan första förekomsten av 0 plus N eller {more, F}, där F är en funktion som kan tillämpas på ytterligare en lista, Next, om den första listan inte innehåller en 0:a. Funktionen F skall då returnera total(next, N+T) där T är antalet element i listan L. Exempel på hur man kan använda funktionen: > {more, F0} = total([], 0). {more, #Fun<...>} >{more, F1} = F0([1,2,3]). {more, #Fun<..>} 7

8 >F1([4,0,5]). {total, 4} total([],t) -> {more, fun(next) -> total(next,t) end total([0 _], T) -> {total, T total([_ R], T) -> total(r, T+1). 4.3 höger eller vänster[10 poäng] I Erlang, liksom i de flesta funktionella språk, finns de två inbyggda funktionerna foldl och foldr som gör fold på elementen i en lista antingen från vänster (foldl från början) eller från höger (foldr från slutet). Det finns för- och nackdelar med dessa två strategier och det är inte alltid klart vilken som blir mest effektiv. I nedanstående exempel vill vi lägga ihop alla elementen i en lista av listor. Funktionen flatten([[1,2],[3,4,5],[6,7]]) skall returnera[1,2,3,4,5,6,7]. Är det mest effektivt att använda foldl eller foldr i definitionen nedan (vi får vända på argumenten till append/2 för att ordningen skall bli densamma). Argumentera varför den ena skulle vara bättre än den andra. flatten(lists) -> foldl(fun(x,acc) -> append(acc,x) end, [], Lists). eller flatten(lists) -> foldr(fun(x,acc) -> append(x,acc) end, [], Lists) Funktionen foldr har fördelen att den hela tiden gör append av ett element och den ackumulerade listan. Vi har då en funktion som arbetar i O(n). Om man använder foldl så kommer vi att göra append på en ständigt ökande ackumulerad lista och ett element. Eftersom den ackumulerade listans längd är proportionell till n så har vi en komplexitet på O(n 2 ). Att foldl inte använder stackutrymme är en bisak i sammanhanget. 5 Concurrency[totalt 30 poäng] 5.1 en liten cell[10 poäng] Definiera en process i Erlang som innehåller två värden: ett saldo och antalet gånger som man övertrassera sitt konto. Processen skall ha följande beteende för de meddelanden den tar emot: 8

9 {deposit, Amount}: addera Amount till saldot. {withdraw, Amount, From}: dekrementera saldot och skicka ok till processen From {check, From}: skicka{saldo, Saldo} till processen From. account(saldo, Over) -> receive {deposit, N} -> account(saldo+n, Over); {withdraw, N, From} -> From! ok, account(saldo-n, Over); {check, From} -> From! {saldo, Saldo}, account(saldo, Over) end. 5.2 undvik att övertrassera[10 poäng] Antag att vi vill undvika att övertrassera kontot och därför implementerar följande funktion: safe_withdrawal(acount, Amount) -> Account! {check, self()}, receive end. {saldo, Saldo} -> if end Saldo >= Amount -> Account! {withdraw, Amount, self()}, receive end; true -> no ok -> ok Antag att all processer som använder konto måste använda sig av denna funktionen när de gör uttag. Hur säkra är vi på att vi inte övertrasserar kontot, vad kan hända? Om det finns flera som har access till kontot kan två processer kontrollera om det finns pengar på kontot och sedan göra uttag varav det andra uttaget kan vara en övertrassering. 9

10 5.3 ett låst konto[10 poäng] Antag att vi vill ha ensamrätt till ett konto för att göra flera transaktioner mellan flera konto. Vi vill ha ett sätt att låsa ett konto så att enbart den som har låset får göra göra några transaktioner eller kontrollera saldot på kontot. Implementera följande metoder: {lock, From} : skicka{locked, Ref}, där Ref en unik referens (använd make_ref()), till processen From, accepterar sedan enbart förfrågningar med denna referens tills låset släpps. {unlock, Ref} : om kontot är låst och detta är den referens som skapades vid låsningen så återgå till upplåst tillstånd. deposit, withdraw, check: versioner av dessa som hanteras i det låsta tillståndet om de har rätt referens Processen skall alltså ha två tillstånd, ett upplåst där den fungerar som vanligt och ett låst där de enbart hanterar meddelanden med rätt referens. account(saldo, Over) -> receive end. : som ovan : {lock, From} -> Ref = make_ref(), From! {locked, Ref}, locked(saldo, Over, Ref) locked(saldo, Over, Ref) -> receive {deposit, Ref, N} -> locked(saldo+n, Over, Ref); {withdraw, Ref, N, From} -> From! ok, locked(saldo-n, Over, Ref); {check, Ref, From} -> From! {saldo, Saldo}, locked(saldo, Over, Ref); {unlock, Ref} -> account(saldo, Over) end. 10

11 6 Värden, pekare och arrayer[totalt 20 poäng] 6.1 Legala uttryck[10 poäng] Vilka uttryck är legala uttryck i C ++ (som följer standarden C )? Svara enbart ja eller nej. 1. int a[3*7-1]; ja: eftersom 3*7-1 är en konstant i.e int n=4; int a[n]; nej: n är inte en konstant 3. int x=7; int* p = &x; ja: inget problem att ta adressen av x och det är en int* 4. int x=32; int** y = &(&x)-5; nej: vi kan inte ta adressen av en adress (inte ett l-värde) 5. int x=2; int y = *(&(*(&x+1))); ja: men farligt om du inte vet vad du gör 6.2 värdet y:[5 poäng] Givet nedanstående uttryck, vad är värdet på variabeln y? int a[5] = {3,2,-1,5,4 int y = *(&a[3] - 2); Variabeln y får värdet 2 eftersom (&a[3] - 2) är &a[1] och *(&a[1]) är a[1] dvs värdet y:[5 poäng] Givet nedanstående uttryck, vad är värdet på arrayen b? int b[5] = {3,2,-1,5,4 int* p = &b[1]; *(p + 2) = *p -4; Arrayen b[] har värdet 3,2, 1, 2,4 eftersom vi ändrar på b[3] och sätter den till b[1] 4 dvs 2. 11

12 7 Klasser och objekt[totalt 30 poäng] I följande frågor antar vi att vi includerar biblioteket iostream och använder dess namespace std. Givet är också nedanstående definition av klassen M yint. class MyInt { private: int n; public: MyInt(int x = 0): n(x) { cout << "konstruera " << x << endl; } MyInt(const MyInt& c) : n(c.n) { cout << "kopiera " << n << endl; } ~MyInt() { cout << "avallokera " << n << endl; } int get() const { return n;} void set(int x) { n = x; } 7.1 Hej, hej![5 poäng] Vad kommer att skrivas ut på skärmen om vi kör nedanstående program? MyInt take(myint x, MyInt y) { MyInt z; if (x.get() < y.get()) { z.set(x.get()); } else { z.set(y.get()); return z; int main() { MyInt x = 2; MyInt y = 3; MyInt z = take(x,y); cout << z.get() << endl; return 0; } konstruera 2 konstruera 3 kopiera 3 kopiera 2 12

13 konstruera 0 kopiera 12 * avallokera 2 avallokera 3 avallokera 12 * 12 avallokera 12 avallokera 3 avallokera 2 Alla kompilatorer gör dock några optimeringar och inser att man inte skapar en lokal kopia som sedan kopieras när den returneras; detta gör att de två *-märkta raderna kan undvikas. 7.2 kanske vad vi vill[5 poäng] Om vi definierar om funktionen take enligt nedan, vad kommer då att skrivas ut på cout. MyInt take(myint& x, MyInt& y) { MyInt z; if (x.get() < y.get()) { z.set(x.get()); } else { z.set(y.get()); return z; konstruera 2 konstruera 3 konstruera 0 kopiera 12 * avallokera 12 * 12 avallokera 12 avallokera 3 avallokera 2 Som i fallet ovan kommer en kompilator att plocka bort kopierandet och avallokeringen av det lokala objektet z vilket resulterar i att de två *-märkta raderna kan undvikas. 13

14 7.3 på hal is[5 poäng] I nedanstående program gör vi någonting farligt, programmet kommer att kompilera (kanske med en varning) men resultatet är inte helt bestämt, varför? MyInt &take(myint &x, MyInt &y) { MyInt z; if (x.get() < y.get()) { z.set(x.get()); } else { z.set(y.get()); return z; int main() { MyInt x = 2; MyInt y = 3; MyInt &z = take(x,y); cout << z.get() << endl; return 0; } Vi returnerar en referens till ett lokalt objekt som inte lever efter anropet till funktionen take. Anropet z.get() kommer returnera ett odefinierat värde (som i detta fall troligtvis fungerar). 7.4 inte här men där[5 poäng] Givet programmet nedan, vad kommer att skrivas på cout och varför? class IntCell { private: public: int *storedvalue; explicit IntCell(int initialvalue = 0 ) { storedvalue = new int(initialvalue); } int getvalue() const { return *storedvalue; } void setvalue(int val) { *storedvalue = val;} int main() 14

15 { IntCell a(2); IntCell b = a; IntCell c; c = b; a.setvalue(4); } cout << a.getvalue() << endl; cout << b.getvalue() << endl; cout << c.getvalue() << endl; Tre fyror kommer att skrivas ut eftersom all tre objekt delar samma int som är allokerad utanför objekten. Vid kopiering kopieras pekaren till cellen, inte cellen själv. 7.5 inte så bra[10 poäng] I nedanstående definition av IntCell har vi lagt till en metod för operatorn= (dvs tilldelning). För att undvika en minnesläcka så avallokerar vi den allokerade strukturen innan vi kopierar värdet. Vi har kanske inte tänkt på allt och lösningen är kanske inte önskvärd i alla lägen, vad kan gå fel? class IntCell { private: int *storedvalue; public: IntCell(int initialvalue = 0 ) { storedvalue = new int(initialvalue); } IntCell& operator=(const IntCell& c) { delete storedvalue; storedvalue = c.storedvalue; return *this; } int getvalue() const { return *storedvalue; } void setvalue(int val) { *storedvalue = val;} Om vi har ett uttryck x=x, så kommer vi att avallokera den enda strukturen som vi har och sedan kopierar en void-pekare. Objektet x kommer efter 15

16 tilldelningen att ha en pekare storedvalue som pekar på en redan avallokerad struktur. Att avallokera ett objekt är alltid farligt; även om vi gör om destruktorn så att den tar hänsyn till x=xså kan vi tappa bort objekt när vi gör: x= y (y:s objekt avallokers), x=z(x:s objekt, som delas med y blir avallokerat). Appendix Här följer de transformeringsregler som definierar MiniErlang. En literal (integer) på uttrycksstacken flyttas över till värdestacken. i Es ; Vs Es ; i Vs Ett cons-uttryck delas upp, läggs på uttrycksstacken och åtföljs av en CONSinstruktion. [E 1 E 2 ] Es ; Vs E 1 E2 CONS Es ; Vs Ett funktionsanrop delas upp, läggs på uttrycksstacken och åtföljs av en CALLinstruktion. F(E 1,...,E n ) Es ; Vs E En CALL(F/n) Es ; Vs En CONS-instruktion tar de två översta värdena på värdestacken och bildar en cons-cell. Observera att värdena ligger i omvänd ordning på stacken. CONS Es ; V 2 V1 Vs Es ; [V 1 V 2 ] Vs En CALL-instruktion tar sina argument från värdestacken och lägger en kopia av matchande definitions kropp, E på uttrycksstacken där substitutionen från matchningen, S, har applicerats. Observera att värdena ligger på omvänd ordning på värdestacken, det översta värdet är alltså funktionens sista argument. CALL(F/n) Es ; V n... V1 Vs S(E) Es ; Vs 16

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

Omtentamen: Tillämpad Programmering (ID1218) :00-13:00 ID1218 Johan Montelius Omtentamen: Tillämpad Programmering (ID1218) 2012-06-12 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

Läs mer

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-12:00 ID1019 Johan Montelius Programmering II (ID1019) 2014-01-16 09:00-12:00 Förnamn: Efternamn: Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.

Läs mer

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

Tillämpad Programmering (ID1218) :00-12:00 ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2012-12-10 09:00-12: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.

Läs mer

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-12:00 ID1019 Johan Montelius Programmering II (ID1019) 2014-01-16 09:00-12:00 Förnamn: Efternamn: Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.

Läs mer

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

Tillämpad Programmering (ID1218) :00-13:00 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.

Läs mer

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

Tillämpad Programmering (ID1218) :00-13:00 ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2013-06-04 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.

Läs mer

Programmering II (ID1019) :00-17:00

Programmering II (ID1019) :00-17:00 ID1019 Johan Montelius Programmering II (ID1019) 2014-03-10 14:00-17:00 Förnamn: Efternamn: Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.

Läs mer

Programmering II (ID1019) :00-11:00

Programmering II (ID1019) :00-11:00 ID1019 Johan Montelius Programmering II (ID1019) 2015-06-11 08:00-11:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren

Läs mer

Programmering II (ID1019) :00-11:00

Programmering II (ID1019) :00-11:00 ID1019 Johan Montelius Programmering II (ID1019) 2015-06-11 08:00-11:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren

Läs mer

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-12:00 ID1019 Johan Montelius Programmering II (ID1019) 2015-03-13 09:00-12:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren

Läs mer

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-12:00 ID1019 Johan Montelius Programmering II (ID1019) 2018-03-13 08:00-12:00 Instruktioner Betyg Svaren skall lämnas på dessa sidor, använd det utrymme som nns under varje uppgift för att skriva ner ditt svar.

Läs mer

Programmering II (ID1019)

Programmering II (ID1019) ID1019 Johan Montelius Instruktioner Betyg Programmering II (ID1019) 2019-03-08 Svaren skall lämnas på dessa sidor, använd det utrymme som nns under varje uppgift för att skriva ner ditt svar (inte på

Läs mer

Tillämpad programmering

Tillämpad programmering Tillämpad programmering C++ objekt Johan Montelius 1 struct struct Person { string name; int age; ; Person p; p.name = Joe ; p.age = 42; cout

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

TDIU01 Programmering i C++

TDIU01 Programmering i C++ TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista

Läs mer

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-12:00 ID1019 Johan Montelius Programmering II (ID1019) 2015-03-13 09:00-12:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren

Läs mer

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)

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) Programmönster: # Listan som sekvens, Rekursiv process Enkel genomgång av sekvens (element på toppnivån i en lista)) TDDC60 Programmering: abstraktion och modellering Föreläsning 5 Rekursiva och iterativa

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 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.

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum, tid och plats för tentamen: 2017-08-17, 8:30 12:30, M. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 9:30 och ca 11:00.

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Minnestilldelning (allokering) och frigörande (avallokering) av minne Pekare i C++ Pekare används mycket i C++. De är bra både för att de tillåter dynamisk minnesallokering och för att de är referenser. En pekarvariabel innehåller en adress till ett element, den pekar på

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015 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

Läs mer

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer (DAT036/DAT037/DIT960) Tentamen Datastrukturer (DAT036/DAT037/DIT960) Datum och tid för tentamen: 2016-04-07, 14:00 18:00. Författare: Nils Anders Danielsson. (Tack till Per Hallgren och Nick Smallbone för feedback.) Ansvarig:

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 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.

Läs mer

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen Programmeringsteknik II Inledning. Anmälningskod: Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående

Läs mer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037) Föreläsning 4 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-10 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra

Läs mer

Programmering II (ID1019) :00-13: hp

Programmering II (ID1019) :00-13: hp ID1019 Johan Montelius Programmering II (ID1019) 2016-03-19 09:00-13:00 7.5 hp Instruktioner Betyg Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta

Läs mer

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

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2 Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.) - Iteratorer

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2012-08-24, 8:30 12:30. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 9:30 och ca

Läs mer

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

Dagens föreläsning Programmering i Lisp Fö 5 Anders Haraldsson 1 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.3) - Iteratorer - Egenskaper

Läs mer

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning. Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer

Läs mer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037) Föreläsning 4 Datastrukturer (DAT07) Fredrik Lindblad 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat07 1 Innehåll

Läs mer

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr, 051019

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr, 051019 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13. Denna tenta kommer att vara färdigrättad Må 24/10 och kan då hämtas på

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig

Läs mer

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel Data- och Programstrukturer Provmoment: Ladokkod: Tentamen ges för: Omtentamen NDP011 Systemarkitektprogrammet 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum:

Läs mer

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

public boolean containskey(string key) { return search(key, head)!= null; } Tentamen Programmeringsteknik II 2009-05-26 med lösningar Skrivtid: 0900-1200 Uppgifter 1. Programbilagan ListMap.java innehåller en klass som implementerar en avbildning mellan mängden strängar och mängden

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2018-06-07, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 2 AID-nummer: Datum: 2011-02-18 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Fredag 18 feb 2011

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 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

Läs mer

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om

Läs mer

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.

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. Tentamen Programmeringsteknik II 2015-05-26 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 20 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 20 Internminne

Läs mer

Symboliska konstanter const

Symboliska konstanter const (5 oktober 2010 T11.1 ) Symboliska konstanter const Tre sätt som en preprocessormacro med const-deklaration med enum-deklaration (endast heltalskonstanter) Exempel: #define SIZE 100 const int ANSWER =

Läs mer

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT07) Fredrik Lindblad 27 november 207 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/20/course/dat07 Innehåll 2

Läs mer

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler 21-1-2 1 Dagens föreläsning Hur fungerar ett Lisp system intern struktur av symbolen, tal, listan pekare - delade strukturer - eq minneshantering fri lista - sophämtning/garbage collection stack Diverse

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 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.

Läs mer

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26 Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Det här är inte originaltesen. Uppgift 6 var felaktigt formulerad, och har rättats till. Datum och tid för tentamen: 2011-12-16, 8:30 12:30. Ansvarig: Nils Anders Danielsson.

Läs mer

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

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen Programkonstruktion Moment 8 Om abstrakta datatyper och binära sökträd Tabeller En viktig tillämpning är tabellen att ifrån en nyckel kunna ta fram ett tabellvärde. Ett typiskt exempel är en telefonkatalog:

Läs mer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2019-05-27, kl 08-12 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

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

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT 2013 1 / 33 Programmering i C++ EDA623 Objektorienterad programutveckling EDA623 (Föreläsning 5) HT 2013 1 / 33 Objektorienterad programutveckling Innehåll Grundläggande begrepp Relationer mellan objekt Grafisk representation

Läs mer

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34 Programmering i C++ EDAF30 Dynamiska datastrukturer EDAF30 (Föreläsning 11) HT 2014 1 / 34 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd Säkrare minneshantering (shared_ptr och unique_ptr)

Läs mer

Rekursiva algoritmer sortering sökning mönstermatchning

Rekursiva algoritmer sortering sökning mönstermatchning Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 6-7 Rekursiva strukturer rekursiva definitioner rekursiva funktioner rekursiva bevis: induktion - rekursion strukturell

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd Programmeringsmetodik DV1 Programkonstruktion 1 Moment 8 Om abstrakta datatyper och binära sökträd PK1&PM1 HT-06 moment 8 Sida 1 Uppdaterad 2005-09-22 Tabeller En viktig tillämpning är tabellen att ifrån

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som

Läs mer

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.

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. Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00 DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på både fram- och

Läs mer

Djup/ytlig kopiering av containrar med referensobjekt. Allmänt. Vad ska container innehålla? 2004-05-10

Djup/ytlig kopiering av containrar med referensobjekt. Allmänt. Vad ska container innehålla? 2004-05-10 Djup/ytlig kopiering av containrar med erensobjekt Allmänt Om man inte vet hur många objekt man kommer behöva under exekvering så måste dynamiska lagringsstrukturer användas. stack, kö, lista, träd osv

Läs mer

maxlist-1. Indexerad lista Länkad lista

maxlist-1. Indexerad lista Länkad lista Datorer och programmering TDB2: Lista - en dynamisk datastruktur Eva Pärt-Enander Vad är en lista? En lista är en sekventiell struktur oftast av likadana saker. Listor denieras i C++ ofta med hjälp av

Läs mer

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

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

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid: Omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-16, TDA540 Dag: 2017-08-24, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar:

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2014-04-25, 14:00 18:00. Författare: Nils Anders Danielsson. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker

Läs mer

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

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), 2017-01-11 1. Loopen upprepas n gånger. getat på en dynamisk array tar tiden O(1). member på ett AVL-träd av storlek n tar tiden O(log n).

Läs mer

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar Innehåll EDAF30 Programmering i C++ 3. Mer om klasser. Funktionsanrop Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser pekaren this const för objekt och medlemmar Kopiering friend inline 2 Funktionsanrop

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2012-11-05 Repetition Förra gången: Listor, stackar, köer. Länkade listor, pekarjonglering. Idag: Cirkulära arrayer. Dynamiska arrayer. Amorterad

Läs mer

Övningsuppgifter kapitel 8

Övningsuppgifter kapitel 8 Inst. för Systemteknik Introduktion till programmering (SMD 180), 5 p Övningsuppgifter kapitel 8 1. Listor är en viktig datatyp i Python. Hur definierar kursboken lista? Vad kallas de värden som tillsammans

Läs mer

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

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv. Strömmar (streams) De sista dagarna objekt med tillstånd modellerades som beräkningsobjekt med tillstånd. Isådana modeller är tiden modelerad (implicit) som en sekvens av tillstånd. För att kunna modellera

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Det finns många flaggor till g++,

Det finns många flaggor till g++, C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.

Läs mer

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31 Programmering i C++ EDA623 Dynamiska datastrukturer EDA623 (Föreläsning 11) HT 2013 1 / 31 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd EDA623 (Föreläsning 11) HT 2013 2 / 31 Länkade

Läs mer

Lösningsförslag till exempeltenta 1

Lösningsförslag till exempeltenta 1 Lösningsförslag till exempeltenta 1 1 1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2 Uppgift 1 - Lösning Huvudidé: - Titta på datan i

Läs mer

13 Prioritetsköer, heapar

13 Prioritetsköer, heapar Prioritetsköer, heapar 31 13 Prioritetsköer, heapar U 101. En prioritetskö är en samling element där varje element har en prioritet (som används för att jämföra elementen med). Elementen plockas ut i prioritetsordning

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 21 Internminne

Läs mer

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående

Läs mer

Tentamen Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037) Tentamen Datastrukturer (DAT07) Datum och tid för tentamen: 2016-01-09, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och ca

Läs mer

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

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och

Läs mer

Tentamen EDAF30 Programmering i C++

Tentamen EDAF30 Programmering i C++ LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenska Tentamen EDAF30 Programmering i C++ 2015 05 06, 8.00 13.00 Hjälmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna. Du

Läs mer

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4 TDIU20 - Objektorienterad programmering i c++ - föreläsning 4 Pontus Haglund Department of Computer and information science 1 Vad gjorde vi förra gången? Felhantering Operatorer Typkonvertering 2 Grundläggande

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta

TDDC74 Programmering: Abstraktion och modellering Datortenta TDDC74 Programmering: Abstraktion och modellering Datortenta - 2017-08-26 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet

Läs mer

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

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 Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Underprogram - Funktioner Eric Elfving Institutionen för datavetenskap 18 september 2014 Översikt 2/22 Återblick till satsblocken Funktioner - Namngivna satsblock

Läs mer

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-06-11 Skrivtid: 08:00 13:00 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 2017-04-06, kl 17-19 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i

Läs mer

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen, EDA501/EDAA20 Programmering M MD W BK L LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDA501/EDAA20 Programmering M MD W BK L 2017 05 31, 8.00 13.00 Anvisningar: Preliminärt ger uppgifterna 9 + 12 + 10 + 9 = 40 poäng.

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften

Läs mer

Tentamen Grundläggande programmering

Tentamen Grundläggande programmering Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4:

Läs mer