Tentamen i DD2387 Programsystemkonstruktion med C++



Relevanta dokument
Tentamen i DD2387 Programsystemkonstruktion med C++

Tentamen i DD2387 Programsystemkonstruktion med C++

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00

DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00

DD2387 Programsystemkonstruktion med C++ Tentamen 2

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

Tommy Färnqvist, IDA, Linköpings universitet

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

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Föreläsning 3. Stack

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

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

DAT043 Objektorienterad Programmering

Tentamen i Grundläggande programmering STS, åk 1 lördag

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Programsystemkonstruktion med C++

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Synlighet. Namespace Scope-operatorn Klasser Vänner

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Tentamen i Algoritmer & Datastrukturer i Java

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

Föreläsning 3. Stack

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

Tentamen i Algoritmer & Datastrukturer i Java

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

Tentamen OOP

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

Tentamen Datastrukturer, DAT037 (DAT036)

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

Tentamen Datastrukturer (DAT036)

Det finns många flaggor till g++,

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

C++ Objektorientering - Klasser. Eric Elfving

Grundläggande datalogi - Övning 1

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Kapitel 6 - Undantag

Tentamen i Grundläggande programmering STS, åk

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

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Tentamen Datastrukturer (DAT036)

OOP Omtenta

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Kurskod D0010E Datum Skrivtid 5tim

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

Objektorienterad programmering

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

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

TDDC76 - Programmering och Datastrukturer

Tentamen TEN1 HI

Tillämpad programmering

TDDC76 - Programmering och Datastrukturer

Tentamen C++-programmering

SP:PROG3 HT12 Tenta

TDIU01 / 725G

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

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

Tentamen EDAF30 Programmering i C++

Innehåll. Pekare Exempel

HI1024 Programmering, grundkurs TEN

Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x

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

TDDC77 Objektorienterad Programmering

Datastrukturer. föreläsning 3. Stacks 1

Innehåll. Pekare Exempel

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

HI1024 Programmering, grundkurs TEN

För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och

Föreläsning 2. Länkad lista och iterator

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Tentamen EDAF30 Programmering i C++

OOP Tentamen

Föreläsning 4 Innehåll

Övning 1 - Abstrakta datatyper

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

HI1024 Programmering, grundkurs TEN

Föreläsning Datastrukturer (DAT036)

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

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

Dugga Datastrukturer (DAT036)

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

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

Tentamen Datastrukturer (DAT037)

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

TENTAMEN OOP

Transkript:

Tentamen i DD2387 Programsystemkonstruktion med C++ Datum: Fredag 24 oktober 2008, 14-18 Hjälpmedel: En eller två valfria läroböcker om C++ id: Tid: 4 timmar Skriv inte ditt namn på tentan. Under tentan kommer ett id-nummer att delas ut och skrivas på tentan. Anteckna ditt id-nummer på separat papper. När du lämnar in tentan ska du säga vad du heter till tentavakten så att denne kan göra en extrakontroll av idnummret. Tentan rättas i en första omgång två och två av er själva tio minuter efter tentans slut. Du måste komma tillbaka för att rätta! Skriv svaren direkt på tentan. Om du inte avser få tentan rättad kan du lämna in blankt. Grova fel ger underkänt (betyg F). Om inte alltför många grova fel görs ges möjlighet att komplettera till godkänt betyg (betyg U* eller FX) mer information om komplettering kommer att stå på kurshemsidan. Gör ett försök på alla uppgifter. Tentaresultat anslås inte längre på anslagstavla i enlighet med ny policy från KTH centralt. Lycka till! 1. Länkade banklån Banken Funny May har problem med dåliga lån. Till sin stora bestörtning har man insett att dessa dessutom är intimt sammanlänkade med andra bankers dåliga lån och man kan inte bli av med dem. Hjälp banken att implementera en rekursiv funktion remove somtarbortlånenfrånenlänkadlistaav banklån. Funktionen remove ska ta två parametrar. Dels en referens till en pekare till en länkad lista (Linked- List<T> * &) och dels data av typen T. Funktionen ska ta bort alla förekomster av datat i listan template <class T> struct LinkedList { LinkedList<T> * next; T data; //... Var noga med syntaxen! Algoritmen är grovt förenklad: om noden inte är tom kontrollera om nodens data är samma som datat och i så fall ta bort noden. Gör därefter ett rekursivt anrop och skicka övriga otestade(!) element i listan. 1

2. Ju fler kockar desto sämre soppa Sveddbank har det svettigt med sina kundrelationer. Man har därför infört ett nytt ärendehanteringssystem. Detta är implementerat som en intern stack för att garantera att man alltid hanterar det hetaste ärendet. Dessutom så finns det en maxgräns av ärenden så att inte finansrådgivarna spenderar tid på gamla surdegar. template <class T> class Stack { static const int max = 8; T mp[max]; int nritems; T * current; public: Stack() : nritems(0), current(mp) { T pop() { if (nritems > 0) { nritems -= 1; if (current == mp) current = mp + max - 1; else current -= 1; return *current; // return copy else { throw out_of_range("do not handle exceptions in this exercise"); void put(t t) { if (nritems < max) nritems += 1; *current = t; // overwrite existing current += 1; if (current == mp + max) current = mp; template <class S> friend ostream & operator<< (ostream & os, Stack<S> & s); // End of class Stack Rådgivare x har problem att hinna med alla sina ärenden och chefen anvisar y samt nyanställde s att hjälpa till. Chefen skriver följande rader kod i main: y = x; Stack <int> s = x; // Mr Y will help Mr X // Mr S is hired to help Mr X där x och y är deklarerade sedan tidigare int main() { Stack<int> x; Stack<int> y; //... // Mr X // Mr Y 2

(a) Till stackprogrammerarens stora förvåning kompilerar chefens rader utan anmärkningar. En erfaren DD2387:are förklarar att vissa metoder skapas även om man inte skrivit dem. Vilka metoder har skapats? (b) Resultatet av chefens rader längre ner i programmet är ganska soppigt, kunderna får dubbla budskap eller inga budskap alls. Vad är tokigt? (c) DD2387:aren får i uppdrag att implementera metoderna i fråga (a) så att chefens kod gör något vettigt. Man kommer överens om att help Mr X (se kodkommentar) betyder att man tar över (flyttar från en stack till en annan) de två översta ärendena hos X. Implementera metoderna. Var noga med const och referenser. 3

3. Omorganisationer Sammanslagningar, uppköp och ideliga omorganisationer har gjort det oklart hur gamla nedärvda metoder och nya metoder egentligen utförs. Givet ett kontor, NewDeal, som ärvt sina metoder från OldWay, så får man två olika börsindex från en och samma kontorsinstans beroende på hur man refererar till det. struct NewDeal : OldWay { /*...*/ //... NewDeal office1; NewDeal & nd = office1; OldWay & ow = office1; if (nd.index() - ow.index() > 0.01) cout << "WHY?"; // NewDeal inherits from OldWay // greater than! Deklarera klasserna NewDeal och OldWay och implementera metoden index (returnerar ett hårdkodat flyttal) så att koden ovan alltid skriver ut WHY?. 4

4. Konstant kris utan logik Banken Le Män & Bröder börjar förhandla med Bankakuten om omedelbar hjälp. Deklarera och implementera klasserna State och Bank så att nedanstående kod kompilerar utan anmärkningar. Inget vettigt behöver utföras. Skriv gärna implementationen i klassdeklarationen för enklare rättning. Var noga med const. void negotiate(state state, const Bank & bank) { if (bank.nogood()) state[state.next++] = bank.in_depth(); 5

5. Typ störst ba På en presskonferens tycker sig Funny May vara den största banken någonsin i historien och därför omöjligt kan snubbla omkull. Hjälp journalisterna dubbelkolla detta påstående genom att implementera en jämförelsefunktion. (a) Skriv en typparametriserad funktion max som returnerar det största av två argument. (b) Vad kräver din typparametriserade funktion av argumenten? (c) Vad returnerar din funktion max, motivera kortfattat? (d) Varför går det inte att skriva en maxfunktion som returnerar det största av två olika typer av argument? 6

6. Virtuella subprimelån En av orsakerna till bankkrisen i USA är svårgenomträngliga finansieringsinstrument där man paketerat reella värden med virtuella värden. Att ha koll på det virtuella är väldigt viktigt i C++. Vad skriver programmet nedan ut när man kör det? Alla rätt krävs. struct A { A() : a(this) { virtual void foo() { std::cout << "a "; A * a; struct B : public A { virtual void foo() { std::cout << "b "; struct C : public B { virtual void foo() { std::cout << "c "; struct D : public C { virtual void foo() { std::cout << "d "; struct E : public D { virtual void foo() { std::cout << "e "; int main() { D d; E e; B & b = e; C c = d; A & a1 = c; A a2 = b; a1.foo(); a2.foo(); std::cout << std::endl; a1.a->foo(); a2.a->foo(); std::cout << std::endl; d.a->foo(); std::cout << std::endl; 7

Fyll i felkoder enligt rättningsmallen på varje uppgift. Markera felet på tentan i marginalen. Underlåtelse att rätta allvarliga fel kan påverka resultatet på rättarens egen tenta. Felkoden är fyra siffror X-Y-ZZ där X är frågenummer, Y är allvarlighetsgrad och Z ett fel-id. Allvarlighetsgraden är 1 - litet fel, 9 - allvarligt, 5 - okänd allvarlighetsgrad för oförutsedda fel (dessa får fel-id 99). Om det saknas plats, använd kringliggande frågor som är utan anmärkningar, ersätt frågenummer med aktuell fråga. 8

Fråga allvarlig felkod övriga fel kommentar 1 2a 2b 2c 3 4 5a 5b 5c 5d 6 Rättat av id Rättat av id 9