• No results found

Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat:

N/A
N/A
Protected

Academic year: 2021

Share "Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat:"

Copied!
6
0
0

Loading.... (view fulltext now)

Full text

(1)

Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat:

Datum: Tisdag 20 oktober 2009, 8-12 (rättning 13-14) 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. Att söka sekvenser

(a) FRA-lagen är på tapeten igen. Man ska kunna söka igenom delar av internet efter delmängder av ännu inte helt definierade sökmängder. Detaljerna i denna “sequrity search” är höljt i dunkel.

Skriv en generell typparametriserad funktion SeqSearch som tar fyra parametrar. Parametrarna definerar två sekvenser i godtycklig mängd. Funktionen ska returnera huruvida den andra sekvensen är en delsekvens av den första. Exempel: Exempel: {1 2 3} är en delsekvens av {1 2 3 4} och {2 4}

är en delsekvens av {1 2 3 4} medan varken {3 2} eller {2 2} är en delsekvens av {1 2 3 4}.

Sökning efter tomma mängden ska ge falskt svar.

Algoritmen är ungefär, gå igenom det stora intervallet och kontrollera om ett element även finns i delsekvensen. Sökningen är sann om alla delsekvensens element påträffats i ordning.

(b) Kan man skriva funktionen så att den anropas med två olika sorters typparametrar? Motivera ditt svar.

(2)

2. Listade terrorister

Den nya lagen kan förmodligen göra det lättare att hitta terrorister och spåra deras finansieringsverksam- het. För att hålla reda på misstänkta sifferkombinationer lägger man till siffrorna i en enkellänkad lista på följande vis:

void insert(Nod * & p, int x) { if (p == 0)

p = new Nod(x);

else

insert(p->next, x);

}

(a) En java/pythonprogrammera tycker det är märkligt att koden fungerar. Förklara varför koden funge- rar och varför samma kod inte fungerar i språk som python och java som inte har referensparametrar.

(b) Nu är det inte bara siffror man vill lista utan alla möjliga skumma element. Implementera en typpa- rametriserad Nod som fungerar med din insert nedan.

(c) Implementera en ny förbättrad rekursiv typparametriserad insert som sorterar in elementen i listan på något sätt.

(3)

(d) Vilka krav ställer din kod på det typparametriserade datat?

3. Funktorn fra Norge

I Norge undrar man hur FRA-lagen är funtad. Man pekar på suspekta funktioner som borde kräva tillstånd.

Istället för att använda funktionspekare så kan man använda funktorer istället. Hitta på och implementera en helt egen exempelkod med en funktor (även kallad funktionsobjekt) som använder sig av tillstånd för att avgöra vad som ska hända.

(4)

4. Att lägga ihop ett och annat

(a) Det blir mycket data att analysera i kablarna. Man måste ha huvudet på skaft för att få lägga ihop A och B. Implementera A och B så att följande kod kompilerar. Var noga med const och referenser.

void LeggIhop(A a, const B & b) { b.consider(a += b);

}

(b) Vad används const till i allmänhet i C++?

(c) Ge ett exempel på när det skulle kunna vara befogat att använda const_cast i C++

(5)

5. På spaning efter den tid som flytt

(a) FRA-debatten har ärvt kommunikationsproblemen som fanns redan från början om vad lagen egent- ligen handlade om. Många som lever i den virtuella verkligheten som kallas internet har svårt att hålla reda på vad som gäller. Vad skriver programmet nedan ut när man kör det?

#include <iostream>

using namespace std;

struct FRA_Old_Radio {

virtual void what() { cout << "Vi spanade i luften" << endl; };

};

struct FRA_2008_kabel : FRA_Old_Radio {

virtual void what() { cout << "Vi spanar i kablar och i luften" << endl; };

int m_number;

FRA_2008_kabel() : m_number(17) {};

FRA_2008_kabel(const FRA_Old_Radio & x) : m_number(4711) {};

};

struct FRA_2009_extra_domstol : FRA_2008_kabel {

virtual void what() { cout << "Vi spanar bara om det är OK" << endl; } };

void evaluate(FRA_2008_kabel m) { // analyseras noga m.what();

}

int main() {

FRA_2009_extra_domstol c;

FRA_Old_Radio & a = c;

a.what();

evaluate(c);

FRA_2008_kabel b1;

FRA_2008_kabel b2 = b1; // Kopiering cout << "Antal kablar = "

<< b2.m_number << endl;

return 0;

}

(b) Det är nog viktigt att FRA följer reglerna som definerats. Rule of three kallas en regel som handlar

(6)

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

5

References

Related documents

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

För att parera bristerna i denna inte helt glasklara logik så tänker skolan tvångsinskriva studenter på en obligatorisk kurs i BSB-byråkrati, en kurs som man inte kan examineras i

Implementera A och B så att följande kod kompilerar. Det är mycket allvarligt att göra fel på const. Observera att parametern till operator+= antingen är en kopia eller

The problem appears restricted to 30GB first generation Zune players. Later 80GB and 120GB models appear to

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

4. a)What is the program output? b)Does it make any difference if all methods were virtual? c)Write an explicit call inside B assignment method that call its base class

b) Varför kan inte definitioner ligga i headerfilen? 3p c) inline och template är undantag från regeln i deluppgift b). Varför måste. dessa ligga i

b) Vilka effekter uppnås genom att göra konstruktor, destruktor, kopierings- konstruktor, tilldelningsoperator samt operatorerna new och delete till protected