Tillämpad Programmering (ID1218) :00-13:00
|
|
- Julia Berglund
- för 8 år sedan
- Visningar:
Transkript
1 ID1218 Johan Montelius Tillämpad Programmering (ID1218) :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 36 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
2 Betyg < 16 F 16 E 20 D 24 C 28 B 32 A Erhållna poäng Skriv inte här, detta är för rättningen. Uppgift Σ Max Poäng Totalt antal poäng: Betyg: 2
3 1 Funktionell Programmering i Erlang[totalt 6 poäng] 1.1 Hitta minsta värdet i ett träd[2 poäng] Skriv en funktion smallest(tree) som tar ett träd och returnerar det minsta värdet i trädet eller atomen inf om det anropas med ett tomt träd. Vi kan representera ett träd med antingen atomen nil (det tomma trädet) eller en tupel{node, Value, Left, Right} där värdet (Value) är ett heltal. Trädet är inte ordnat. Till din hjälp kan du använda det faktum att<operatorn ordnar alla heltal mindre än atomer: 11<inf är alltså sant. smallest(tree) -> smallest(tree, inf). smallest(nil, S) -> S; smallest({node, Value, Left, Right}, Sofar) -> Smallest = if Value < Sofar -> Value; true -> Sofar end, smallest(right, smallest(left, Smallest)). 3
4 1.2 K-värdet[2 poäng] Långdistanslöpare pratar ibland om ett k-värde, som är det högsta tal som man har sprungit minst k kilometer minst k gånger. Om jag har ett k-värde på 24 så betyder det att jag har sprungit 24 kilometer eller mer minst 24 gånger. Till en början ökar man på sitt k-värde rätt snabbt men sen blir det tuffare. Skriv en funktion kvalue(runs), som givet en lista med löppass i kilometer, räknar ut k-värdet. Givet listan [13,5,7,11,6,4,8] är k-värdet 5, eftersom vi sprungit fem lopp på minst fem kilometer Vi har inte k-värde 6 eftersom det bara finns fem pass på minst sex kilometer. Om vi antar att vi kan sortera listan med största värden först så har vi denna enkla lösning. kvalue(runs) -> kvalue(sort(runs), 0). kvalue([], K) -> K; kvalue([r Runs], K) -> if end. R =< K -> K true -> kvalue(runs, K+1) Vi kan göra varianter på detta, som att sortera dem med minsta värdet först med nästan samma lösing, eller något mer komplicerat där man går igenom fall för fall. 4
5 1.3 Mod av listor[2 poäng] Skriv först en funktion sub(l1, L2) som tar två listor och returnerar en lista som är de element som är kvar av L1 när vi har plockat bort lika många element som L2 är lång. Om vi anropar funktionen: sub([1,2,3,4,5], [a,b]) så får vi resultatet: [3,4,5] Om L1 inte innehåller tillräckligt många element så skall atomen no returneras. Du får inte använda aritmetiska uttryck i din lösning. sub(rest, []) -> Rest; sub([], _) -> no; sub([_ T], [_ R]) -> sub(t, R). Observera ordningen på de två första klausulerna; detta för att smidigt fånga sub([],[]). Använd nu funktionen sub/2 och implementera funktionen mod(list, Mod) som tar två listor som argument och som returnerar den rest vi får från List om vi upprepade gånger plockar bort det antal element som finns i Mod. Om listan Mod är tom skall funktionen returnera error. Om vi anropar funktionen: mod([1,2,3,4,5}, [a,b]) så skal vi få resultatet: [5] mod(_, []) -> error; mod(list, Mod) -> case sub(list, Mod) of no -> List; Rest -> mod(rest, Mod) end. 5
6 2 Högre-ordningens funktioner[6 poäng] 2.1 plock ut och summera[2 poäng] Antag att vi har en lista med spelkort representeras av tupler på formen{card, Suit, Value}, där färgen, Suit, är en atom och valören, Value, ett tal mellan 1 och 13. Skriv en funktion points(cards, Suit) som summerar alla valörer på kort av given färg. Listan av kort skall bara gås igenom en gång, dvs man kan inte först skapa en lista av alla kort av en given färg och sen gå igenom dessa för att summera poängen. Du skall, i möjligaste mån, använda dig av de högre ordningens funktioner: filter/2, map/2, foldl/3 och/eller foldr/3, se appendix för hur de anropas. points(cards, Suite) -> foldl(fun({card, S, V}, N) -> 0, if Cards). S == Suit -> V+N; true -> N end, Man fick alltså inte göra en fold på en filter. 6
7 2.2 traversera ett uttryck[2 poäng] Ett uttryck är antingen ett värde eller en binär operation; exempel på uttryck kan vara: 5, 4+4och 5+(3-2). Vi representerar uttryck med hjälp av en trädstruktur som antingen är ett värde{value, N}, eller en operation{op, Op, Exp1, Exp2}, där Op är en binär funktion. Uttrycket 5+(3-2) skulle då representeras med följande struktur: {op, +, {value, 5}, {op, -, {value, 3}, {value, 2}}} Skriv en högre ordningens funktion traverse(fun, Expr) som traverserar ett uttryck i post-order: först vänster gren, sedan höger gren och sedan själva noden. Funktionen Fun, som appliceras skall ta ta ett argument som antingen är ett värde{value, N} eller en operation{op, Op, V1, V2} där V1 och V2 är resultatet av de traverserade grenarna. Expr = {op, +, {value, 5}, {op, -, {value, 3}, {value, 2}}}, Fun = fun(e) -> case E of {value, N} -> integer_to_list(n); {op, Op, V1, V2} -> "(" ++ V1 ++ " " ++ atom_to_list(op) ++ " " ++ V2 ++ ")" end end, traverse(fun, Expr). skall ge resultatet "(5 + (3-2))" traverse(fun, {value, N}) -> Fun({value, N}); traverse(fun, {op, Op, Left, Right}) -> Fun({op, Op, traverse(fun, Left), traverse(fun, Right)}). 2.3 traversera ett uttryck[2 poäng] Antag att vi har implementerat funktionen traverse/2 i den föregående uppgiften men nu vill evaluera ett uttryck och returnera svaret. Vi vill kunna skriva på följande sätt 7
8 Expr = {op, +, {value, 5}, {op, -, {value, 3}, {value, 2}}}, Fun =???, traverse(fun, Expr). och få svaret 6. Hur skall funktionen Fun se ut för att vi skall kunna evaluera uttryck. Antag att vi begränsar oss till operationerna addition och subtraktion. Fun = fun(exr) -> end case Expr of end {value, N} -> N; {op, +, V1, V2} -> V1 + V2; {op, -, V1, V2} -> V1 - V2 8
9 3 Concurrency[totalt 6 poäng] 3.1 glidande medelvärde[2 poäng] Skriv en funktion sliding/0 i Erlang som startar en process. Processen skall ha ett tillstånd som gör det möjligt att räkna ut medelvärdet av de tre senaste meddelanden som mottagits. Processen skall startas i ett tillstånd där de tre senaste värden antas vara 0. Processens tillstånd skall inte växa utan man skall kunna arbeta i ett konstant minne. Processen skall kunna ta emot följande meddelande: {msg, N} : ändra tillståndet så att man kan beräkna (N+N1+N2)/3 där N1 och N2 är de två senaste meddelanden. stop : terminera processen sliding() -> spawn(fun() -> sliding(0,0,0) end). sliding(n1, N2, N3) -> receive {msg, N} -> sliding(n, N1, N2); stop -> ok end. Man kan breäkna medel men vi behöver inte ha gjort det om ingen begär det. 9
10 3.2 returnera ett svar[2 poäng] Utöka processen i uppgiften ovan så att vi kan skicka ett meddelande och få tillbaks ett meddelande med medelvärdet för de tre senaste värdena. sliding(n1, N2, N3) -> receive end. {msg, N} -> sliding(n, N1, N2); {request, From} -> From! {average, (N1, N2, N3)/3}, sliding(n1, N2, N3); stop -> ok 3.3 plocka upp svaret[2 poäng] Visa hur en klient skulle kunna använda sig av processen, antag att den har en processidentifierare, Pid, till en skapad process. Svaret skall vara på formen: : Pid!... Average =... : Inga egendefinierade hjälpfunktioner skall användas och variabeln Average skall bindas till det returnerade medelvärdet. : Pid! {request, self()}, Average = receive : end, {average, X} -> X 10
11 4 Värden, pekare och arrayer i C ++ [totalt 6 poäng] 4.1 legala uttryck[2 poäng] Vilka uttryck är legala uttryck i C ++ (som följer standarden C )? Svara enbart ja eller nej, alla rätt ger 2 poäng, ett avdrag för varje fel. 1. int y = 3; int &x = y; ja: vi definierar en referens x och låter den referera till y 2. int y = 7; int *x = &y; ja: inget problem att ta adressen av y, och det är en int-pekare vilket stämmer bra med x 3. int &x; nej: vi kan inte skapa en referens utan att säga vad den skall referera till 4. int x=42; int** y = &(&x) - 2; nej: vi kan inte ta adressen av en adress (inte ett l-värde) 5. int y = 7; int *x = y; nej: y är av typen int, men x har typen int* 4.2 värdet på x:[2 poäng] Givet nedanstående uttryck, vad är värdet på variabeln x? int a[5] = {3,2,1,5,4}; int x = a[1] + a[3]; Variabeln x får värdet 7 eftersom arrayer är noll-indexerade. 4.3 värdet på y:[2 poäng] Givet nedanstående uttryck, vad är värdet på variabeln y? int a[6] = {6,3,2,1,5,4}; int y = *(&a[3] - 2); Variabeln y får värdet 3 eftersom (&a[3] - 2) är &a[1] och *(&a[1]) är a[1] dvs 3. 11
12 5 Klasser och objekt[totalt 6 poäng] I följande frågor antar vi att vi inkluderar biblioteket iostream och använder dess namespace std. 5.1 Bytt är bytt[2 poäng] Nedan finns två versioner av en swap-procedur som är tänkt att byta värdet på två variabler. Vilken fungerar och varför fungerar den ena och inte den andra? void swip(int &x, int &y) { int tmp; } tmp = x; x = y; y = tmp; void swup(int x, int y) { int tmp; } tmp = x; x = y; y = tmp; Den första fungerar eftersom proceduren har referenser som parametrar. Den kommer alltså att arbeta på x och y som om dessa var de verkliga variablerna. Den andra proceduren kommer inte att åstadkomma speciellt mycket eftersom de lokala variablerna x och y endast har kopior av värdena som proceduren anropas med. 12
13 5.2 Vilka objekt modifieras[2 poäng] Givet programmet nedan, vad kommer att skrivas ut på cout och varför? Skriv en kort motivering till ditt svar. class IntCell { public: IntCell(int initialvalue = 0 ) { storedvalue = new int(initialvalue); } int getvalue() const { return *storedvalue; } void setvalue(int val) { *storedvalue = val;} const IntCell &operator=(const IntCell &rhs) { } *storedvalue = *(rhs.storedvalue); return *this; }; private: int *storedvalue; int main() { 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; Det kommer att skrivas ut två stycken 4:or följt av en 2:a. Anledningen är att objektet b kommer att peka på samma int som a gör eftersom den gör en 13
14 grund kopia av a när den skapas. Här används en default-variant av en copy constructor som gör en grund kopia. Vid den explicita tilldelning c = b, kommer däremot den användardefinerade operatorn att användas (som kanske inte är optimalt implementerad) och göra en djup kopia dvs. c kommer ha kvar sin int men denna int kommer att ha en kopia av b:s värde (dvs 2). När vi gör a.setvalue(4) så kommer a:s int, som också är b:s int, att ändra värde. Den int som c pekar på kommer dock vara oförändrad. 14
15 5.3 En student är också en person, eller?[2 poäng] Givet följande definitioner: class Person { string name; public: Person(const string &nn) : name(nn) {}; virtual void print() const { cout << name; }; }; class Student : public Person { string prgm; public: Student(const string &nn, const string &cc) : Person(nn), prgm(cc) {} void print() const { Person::print(); cout << "/" << prgm; } }; void print_person(const Person &p) { }; p.print(); Kommer programmet nedan att kompilera och om så, vad skrivs ut när vi kör programmet nedan? int main() { Student jim("jim", "ICT"); Person sue("sue"); } print_person(jim); print_person(sue); Programmet komplierar och kör utan problem. Programmet skriver ut Jim/ICT och Sue eftersom vi deklarerat metoden print som virtuell. När vi anropar print_person med vår student Jim så kommer vi göra en dynamisk dispatch och använda oss av den print metod som finns definerad för Student. 15
16 6 Komplexitet[totalt 6 poäng] 6.1 Sökning i o-ordnat träd[2 poäng] Antag att vi har representerat en mängd nyckel/värde-par i ett o-ordnat träd och har en sökfunktion som plockar fram ett värde givet en nyckel. Vilken tidskomplexitet har en sådan funktion? Svara med den asymptotiska tidskomplexiteten exempelvis O(n) där n är... Glöm inte att ange vad n är. Sökning i ett o-ordnat träd är O(n) där n är antalet element i trädet. Eftersom trädet är o-ordnat så måste vi göra ett arbeta som är proportionellt till storleken på trädet; vi kan inte som i fallet med ett ordnat träd halvera arbetet i varje steg. 6.2 Sökning i lista[2 poäng] Antag att vi representerar en mängd atomära element som en lista. Vi kan välja på att hålla listan ordnad eller låta den vara o-ordnad. Vad blir skillnaden i tidkomplexitet för den sökfunktion som vi kan använda. Svara med den asymptotiska tidskomplexiteten exempelvis O(n) där n är... för de två fallen. Glöm inte att ange vad n är. Sökningen är i båda fallen O(n) där n är längden på listan. Vi kan inte göra binärsökning i en lista eftersom vi inte kan hoppa fram och tillbaks i listan på konstant tid. 16
17 6.3 Fokus[totalt 2 poäng] Antag att vi har ett program där vi i princip gör två saker: vi läser in en mängd värden från en fil och vi gör ett konstant antal sökningar bland dessa värden. Antalet värden i filerna som vi arbetar på kommer att växa och vi är orolig för att exekveringstiden kommer att bli för stor när antalet värden stiger. Vi har en väldigt enkel implementation där vi läser in värden och representerar dem i en lista som vi sedan gör sökningar i. Ett förslag är att istället lägga in värdena i ett ordnat träd och därmed få en bättre tidkomplexitet för sökningen. Hur skulle det påverka tidkomplexiteten för hela programmet, dvs både inläsning och sökning? Vid en första anblick så är tidskomplexiteten för programmen densamma, vi måste i båda fallen gå igenom filen vilket är en O(n) operation. I det första fallet så går vi dock igenom filen och lägger elementen i en lista (inte ordnar dem i en lista), detta är en totalt sett en O(n) operation eftersom vi kan lägga elementen först i listan vilket är en konstant operation. Vi gör sedan ett antal sökningar där varje sökning är O(n) men vi har fortfarande totalt sett en O(n) operation. I det andra fallet så måste vi dock betala ett pris för att ordna elementen i trädet så själva inläsningen och skapandet av trädet är en O(n log(n)) operation. Vi har n element och kommer för varje ellement betala O(log(n)) för att lägg in det på sin plats. Vi gör sedan ett antal sökningar, där varje sökning visserligen bara har en O(log(n)) komlexitet, men det förändrar ju inte den totala komplexiteten. I det andra fallet har vi alltså en sämre tidskomplexitet: O(n log(n)) istället för O(n). 17
18 Appendix Följande Erlang-funktioner kan komma till användning. map(fun, List): returnerar en lista där funktionen applicerats på varje element i den givna listan. filter(fun, List): returnerar en lista av de element i listan för vilka funktionen returnerar true. foldl(fun, Acc, List) och foldr(fun, Acc, List): returnerar en värde som fås genom att applicera funktionen på varje element i listan och ett ackumulerat värde där Acc är det initiala ackumulerade värdet. Funktionen foldr börjar med det sista elementet och foldl med det första elementet 18
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.
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
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.
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.
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.
Tentamen: Tillämpad Programmering (ID1218) :00-12:00
ID1218 Johan Montelius Tentamen: Tillämpad Programmering (ID1218) 2011-12-16 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
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
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
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.
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
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
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
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
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
Tillämpad programmering
Tillämpad programmering C++ polymorfism overload, cast, ärvning, template Johan Montelius 1 polymorfism Att se och använda en variabel, ett objekt eller en funktion i olika former overload olika versioner
Tentamen i DD2387 Programsystemkonstruktion med C++
Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat: Datum: Tisdag 18 oktober 2011, 8-12 (rättning ca 12:40-14) Salssida (H/V): id: Hjälpmedel: En eller två valfria läroböcker om C++ Tid: 4 timmar
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
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å
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
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.
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.
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
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
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.
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
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Datum: 2008-08-14 Tid: 08-12 Plats: PC6-PC7 i E-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna varje
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:
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
C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen
C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt
if (n==null) { return null; } else { return new Node(n.data, copy(n.next));
Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls
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
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
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
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
Objektorienterad programmering i Java
Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet
Lösningsförslag till tentamen Datastrukturer, DAT037,
Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-01-10 1. Båda looparna upprepas n gånger. s.pop() tar O(1), eventuellt amorterat. t.add() tar O(log i) för i:te iterationen av första loopen.
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
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.
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:
Dugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
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
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner
732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (
Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
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
Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek
De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000
Obligatorisk uppgift 5
(5 oktober 2018 Symbolisk kalkylator 1 ) Obligatorisk uppgift 5 En kalkylator som hanterar uttryck symboliskt dvs värden är uttryck inte bara tal. Uppgiften exemplifierar: objektorientering återanvändning
Tentamen TEN1 HI
Tentamen TEN1 HI1029 2015-03-17 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
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
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
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
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å
Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc
Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp
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
Tentamen Datastrukturer, DAT037 (DAT036)
Tentamen Datastrukturer, DAT037 (DAT036) Datum och tid för tentamen: 2017-01-11, 14:00 18:00. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 15:00 och ca 17:00. Godkända
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
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
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok,
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
Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper.
Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något
Tentamen i TDP004 Objektorienterad Programmering Praktisk del
Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2010-04-07 Tid: 8-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna ungefär
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.
Kopiering av objekt i Java
1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom
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
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.
DD2387 Programsystemkonstruktion med C++ Tentamen 2
DD2387 Programsystemkonstruktion med C++ Tentamen 2 Måndagen den 10 november 2014, 08:00-12:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor.
Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 1 Karl Palmskog palmskog@kth.se september 2010 Programuppbyggnad Klassens uppbyggnad en C++-klass består av en deklaration och en definition deklaration vanligtvis
Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap
Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser. Vi får också möjlighet att referera
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser.
Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )
TDDC76 PoD OH Föreläsning C++ 83 Operatoröverlagring endast operatorsymboler definierade i C++ kan överlagras + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]
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.
Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6
Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar
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
Tentamen i Algoritmer & Datastrukturer i Java
Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng
BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X
Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Klasser - speciella medlemsfunktioner Eric Elfving Institutionen för datavetenskap En klass ansvarar ofta för en resurs. Ibland är resursen så enkel som en datamedlem
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
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
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning
Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (
Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.
Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett
Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler
Outline Objektorienterad Programmering (TDDC77) Föreläsning V: arrayer, metoder, räckvidd (scope), eclipse Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Vända om inlästa värden Vända om inlästa
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken får ha anteckningar,
Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!
Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja
729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,
729G74 IT och programmering, grundkurs Tema 3. Föreläsning 2 Jody Foo, jody.foo@liu.se Föreläsningsöversikt Repetition: syntax-quiz Fler for-loopar (över listor och dictionaries) range() Nästlade strukturer
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
TDDC30 Programmering i Java, datastrukturer och algoritmer
LINKÖPINGS UNIVERSITET Institutionen för datavetenskap Jonas Wallgren Tentamen i TDDC30 Programmering i Java, datastrukturer och algoritmer För I3, Ii3 Datum: 2009-04-17 Klockan: 14-18 Jour: Jonas Wallgren,
Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 2 Karl Palmskog palmskog@kth.se september 2010 Specalfunktioner i klasser Konstruktorer i konstruktorerna för en klass initieras klassens medlemmar initialvärden
TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).
1 (7) TENTAMEN: Objektorienterad programmering Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad. Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen. Ordna bladen i uppgiftsordning.
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Grundläggande satser och uttryck Eric Elfving Institutionen för datavetenskap 5 augusti 2014 Översikt Uttryck Litteraler Operatorer Satser Villkor Upprepning Teckenhantering
LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20
LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20 Betygsgränser: 3 16 poäng 4 23 poäng 5 30 poäng Maxpoäng: 36 poäng Hjälpmedel: inga Lycka till Per Ekeroot Uppgift 1 Kortfrågor
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
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)
Tentamen FYTA11 Javaprogrammering
Lunds universitet FYTA11 Institutionen för Astronomi och Teoretisk fysik HT 12 Tentamen FYTA11 Javaprogrammering Onsdag 9 januari 2013, 10:15 14:15 Instruktioner Hjälpmedel: Papper och penna. Behandla
Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42
Programmering i C++ EDA623 Arv EDA623 (Föreläsning 6) HT 2013 1 / 42 Arv Innehåll Härledda klasser Konstruktorer och destruktorer vid arv Tillgänglighet Polymorfism och dynamisk bindning Abstrakta klasser
Tentamen i Programmering
LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen i Programmering EDAA65/EDA501/EDAA20 M MD W BK L 2018 05 30, 8.00 13.00 Preliminärt ger uppgifterna 7 + 14 + 6 + 9 + 4 = 40 poäng.
Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)
Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python) Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken
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
Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:
Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte
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
Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs
Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera först talet 37 med 2. Använd heltalsdivision. Det ger kvoten
Tentamen TEN1 HI
Tentamen TEN1 HI1029 2014-03-14 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha