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 2

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

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

Tentamen EDAF30 Programmering i 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

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

TDIU01 - Programmering i C++, grundkurs

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TDIU01 - Programmering i C++, grundkurs

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

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

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.

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

Introduktion till arv

TDDC76 - Programmering och Datastrukturer

Tillämpad programmering

Att använda pekare i. C-kod

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

TDDC76 - Programmering och Datastrukturer

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

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

Tentamen EDAF30 Programmering i C++

Tentamen EDAF30 Programmering i C++

Tentamen Objektorienterad Programutveckling med C++

TDIU01 - Programmering i C++, grundkurs

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

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

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

Föreläsning 11 Datastrukturer (DAT037)

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

SORTERING OCH SÖKNING

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

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

Tentamen C++-programmering

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Föreläsning 10. Pekare (Pointers)

Dugga Datastrukturer (DAT036)

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

TDIU01 Programmering i C++

Tentamen EDAF30 Programmering i C++

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

Tentamen i Grundläggande Programvaruutveckling, TDA548

Exempelsamling Assemblerprogrammering

Tentamen i Algoritmer & Datastrukturer i Java

5 Arv och dynamisk bindning FIGUR

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

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


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

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

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

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

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

C++ - En introduktion

Synlighet. Namespace Scope-operatorn Klasser Vänner

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

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

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

Tentamen: Datordel Programmeringsteknik

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

TDIU01 (725G67) - Programmering i C++, grundkurs

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

HI1024 Programmering, grundkurs TEN

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Tentamen Datastrukturer (DAT036)

TDDC76 - Programmering och Datastrukturer

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

TDIU01 - Datortenta (DAT2)

tentaplugg.nu av studenter för studenter

Det finns många flaggor till g++,

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Tillämpad programmering

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

HI1024 Programmering, grundkurs TEN

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Tentamen TEN1 HI

2D1342 Programkonstruktion för F1, ht 2006

HI1024 Programmering, grundkurs TEN

Tentamen, EDAA10 Programmering i Java

Innehåll. Pekare Exempel

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Tentamen, EDA501 Programmering M L TM W K V

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Algoritmer. Två gränssnitt

TDIU Regler

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Transkript:

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 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 och prickas av. Tentan rättas i en första omgång två och två av er själva en timme 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. 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. Konstiga hyresbidrag Några riksdagsledamoter har svårt att förstå riksdagens regler för hyresbidrag. Ja inte bara politiker utan eliten av krönikörer och ledarskribenter verkar ha svårt att förstå vad som gäller. Särskilt svårt blir det när informationen om sagda regler plötsligt ändras vilket inte ger intryck av varaktiga och konstanta regler. Det är mycket viktigt att förstå vad som är konstant och varaktigt och vad som inte är det i C++. Koden nedan kommer inte att kompilera. Programmeraren har inte förstått const. Gå igenom koden och förklara de två kompileringsfelen. Ange berörda rader! 01 struct A { 02 void hyra(a & a) const { 03 ; 04 ; 05 06 struct B : public A { 07 void blankett(const B & b, A a) { 08 a.hyra(b); // what is the problem? 09 10 ; 11 12 struct C : public B { 13 A blankett(const A & a) { 14 return a; 15 16 ; 17 18 19 void fyll_i_blankett(const A & a, B b, const C & c) { 20 b.blankett(b, c.blankett(a)); // what exactly is the problem? 21 1

2. Dynamiska händelser Vad är det som hänt, händer eller borde hända? Frågan är om vi någonsin får någon klarhet i riksdagens arbetsmetoder. För att programmera C++ är det viktigt att kunna förstå vad som händer i metodanrop. Speciellt om några är virtuella. (a) Vad skriver följande kod ut? (b) Vad skulle skrivas ut om alla virtual togs bort? (c) Vilka av de fem print-anropen använder inte dynamisk bindning för att i runtime binda funktionsanropen? Motivera! #include <iostream> using namespace std; struct A { A(string s) : name(s) {; string name; virtual void print() { cout << name << " betalar hyran" << endl; ; ; struct B : A { B(string s) : A("Riksdagen"), name(s) {; string name; virtual void print() { cout << name << " betalar hyran " << endl; ; ; void f1(a & p) { p.print(); void f2(a p) { p.print(); int main() { B b1("håkan"); A & aref(b1); A acopy = b1; b1.print(); aref.print() acopy.print(); f1(b1); f2(b1); Svar c) 2

3. Fibonaccidrevet Många politiker, ja inte bara politiker, är upprörda över mediedrev, i alla fall när man själv är utsatt för ett. En del verkar definiera mediedrev som upprepandet av lögner. Andra menar att lögnerna spär på varandra ungefär som en fibbonacciserie, att nästa lögn är summan av de två föregående. I vilket fall verkar mångas åsikt vara att mediedreven inte fyller någon vettig funktion i samhället objektivt sett. (a) Nedanstående kod använder sig av en snillrik operator. Denna operator() eller snarareklasser/objekt som använder en sådan operator har ett speciellt namn, vilket? // generate fibbonacci sequence beginning with 0 and 1 and each subsequent // number is the sum of the previous two: 0 1 1 2 3 5 8 11 19... struct generate_fibonacci { generate_fibonacci() : m_nfirst( 0), m_nsecond( 1) { int operator() () { int nnew = m_nfirst + m_nsecond; m_nfirst = m_nsecond; m_nsecond = nnew; return nnew; // snillrik operator private: int m_nfirst; int m_nsecond; ; (b) Sätt dig in i koden. Skriv ett kort main program som skriver ut de sju första fibonacci-talen. #include <iostream> using namespace std; int main() { 3

4. Quicksort I dagens mediasamhälle är det viktigt att snabbt kunna sålla och sortera bland all information som flyger omkring. Quicksort använder sig av partitionering som givet ett pivot-element sorterar alla viktigare element till höger och oviktigare till vänster om pivotelementet. (a) Skriv en typparametriserad partition-kod så att godtycklig klass som implementerat operator< sorteras. Utgå från nedanstående variant som väljer första elementet i vektorn som pivotelement. void swap(int & a, int & b) { int tmp = a; a = b; b = tmp; int * partition(int vek [], int nrofelements) { int * tmp_pivotidx = vek + nrofelements - 1; swap(*vek, *tmp_pivotidx); // Move pivotelement to end int * left=vek; // Move all less than pivot to the left for(int * it=vek; it!=vek + nrofelements - 1; ++it) { if(*it <= *tmp_pivotidx) { swap(*left, *it); ++left; swap(*tmp_pivotidx, *left); // swap back pivot element return left; // return the position where the pivot value is stored // which is in its correct (sorted) position Man ska kunnna anropa partition med följande kod, observera parametertyperna. int main() { //... partition(b.begin(), v.end()); // Två iteratorer partition(array, array + nrelements); // Två pekare Körexempel: 13 2810167412119231183-> 3107412111813 23 28 16 19 Paris London Stockholm Berlin Oslo Rome Madrid Tallinn Amsterdam Dublin -> Dublin London Berlin Oslo Madrid Amsterdam Paris Tallinn Rome Stockholm Ett körexempel med utskrift (saknas i koden) efter varje swap 13 28 10 16 7 4 12 1 19 19 28 10 16 7 4 12 1 13 Spara undan pivotvärdet 13 10 28 19 16 7 4 12 1 13 10 7 19 16 28 412113 10 7 4 16 28 19 12113 10 7 4 12 28 19 16 113 10 7 4 12 1 19 16 28 13 10 7 4 12 1 13 16 28 19 Lägg tillbaka pivotvärdet (b) Förutom operator< vad ställer din kod för krav på parametrarna? 4

svar 4a) 5

Fyll i felkoder i tabellen nedan för varje fel på varje uppgift. Felkoden är fyra siffror Xx-YY där X är frågenummer, x delfråga och YY ett löpnummer (01, 02...). Markera felet på tentan i marginalen (samma fel kan härledas till två ställen ibland) och skriv utförlig kommentar i tabellen nedan samt, om lämpligt, kort kommentar på tentan (använd annan färg t.ex. blå eller rött bläck som finns att låna). Underlåtelse att rätta små som allvarliga fel kan påverka resultatet på rättarens egen tenta. Om du är osäker på om felet är allvarligt, ringa in felkoden. Om det saknas plats, använd kringliggande rutor som är utan anmärkningar. Fråga allvarlig felkod övriga fel kommentar 1 2 3 4 Rättat av id Rättat av id 6