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

Relevanta dokument
DD2387 Programsystemkonstruktion med C++ Tentamen 2

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

Tentamen i DD2387 Programsystemkonstruktion med C++

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

Tentamen i DD2387 Programsystemkonstruktion med C++

Tentamen i DD2387 Programsystemkonstruktion med C++

TDIU01 - Programmering i C++, grundkurs

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tentamen EDAF30 Programmering i C++

Tentamen EDAF30 Programmering i C++

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

Tentamen EDAF30 Programmering i C++

Det finns många flaggor till g++,

Innehåll. Pekare Exempel

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tillämpad programmering

Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner

grundläggande C++, funktioner m.m.

Innehåll. Pekare Exempel

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

SP:PROG3 HT12 Tenta

Tommy Färnqvist, IDA, Linköpings universitet

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

Kapitel 4 - Mallar. Kapitel 4. Introduktion till mallar STL. 2D1387 Programsystemkonstruktion med C++ 1

Tentamen *:85/2I4123 C

Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL

Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL

Programsystemkonstruktion med C++

2D1387, Programsystemkonstruktion med C++ 01/02 1

TDDC76 - Programmering och Datastrukturer

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

Tentamen C++-programmering

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

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

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

TDDC76 - Programmering och Datastrukturer

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

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

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

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

Innehåll. 1 volatile. 2 Kuriositeter. 3 Klasser och arv. 4 Råd och tumregler. 5 Mer om standard-containers. Trigraphs

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

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

Kapitel 1. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Kapitel 1 grunderna i C++

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

Instuderingsfrågor, del D

TDIU01 Programmering i C++

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

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

Funktionens deklaration

Föreläsning 3-4 Innehåll

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

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 Programmering fortsättningskurs DIT950

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tentamen i Algoritmer & Datastrukturer i Java

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,

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

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.

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

Tentamen EDAF30 Programmering i C++

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

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

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Tentamen EDAF30 Programmering i C++

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

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

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)

Del A (obligatorisk för alla)

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

Grundläggande programmering med C# 7,5 högskolepoä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

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

C++-programmets beståndsdelar

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.

Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

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

Synlighet. Namespace Scope-operatorn Klasser Vänner

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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änkade strukturer, parametriserade typer och undantag

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Laboration 3, uppgift En klass för en räknare

HI1024 Programmering, grundkurs TEN

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

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

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

TDDC76 Programmering och datastrukturer

TDIU01 - Programmering i C++, grundkurs

Transkript:

DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor. Skriv namn och uppgiftsnummer på varje sida Grova fel ger underkänt, gör ett försök på alla uppgifter Det är ingen självrättning efter tentan Hjälpmedel En, eller två, valfria läroböcker om C++. 1 Rule of three Tre kompisgäng försöker komma överens om vilken budgetfilm de ska titta på. Det är svårt. Ett gäng vägrar se importerade budgetfilmer vilket de andra tycker är fånigt. Efter ett omständigt röstningsförfarande och hot om extraval när fel film vann så kommer man nästan överens om att det behövs regler eller i alla fall en praxis för budgetfilmomröstningen. Regler i C++ är också viktiga. a) Vilka automatiskt genererade medlemsfunktioner brukar ingå i det som tidigare (C++98) kallades för "Rule Of Three"? b) I labb1 konstruerade du en vektorklass där du antagligen var tvungen att implementera ovanstående metoder. Antag att du hade missat att göra detta, vad hade kunnat hända då? Skriv kort exempelkod som visar hur och vad som kunnat bli fel. Gör det för var och en av de tre rule-of-three metoderna. 1 of 6

2 Val av film En del kan sina filmer både framlänges och baklänges och ibland gör det ingen större skillnad om man ser slutet först. Palindrom är ord eller tal som blir lika vare sig man läser det från början eller slutet. a) Skriv en generisk funktion non_palindrom_indeces som tar två typparametriserade iteratorer som parametrar och returnerar en vektor (std::vector) av par (std::pair) med de platser (iteratorer) som avviker från ett palindrom. Om mängden utgör ett palindrom returneras en tom vektor. Både tomma mängden och ett ensamt element utgör palindrom. Var noga med gränserna. b) Skriv ett litet main-program som illustrerar hur din funktion fungerar genom att anropa din funktion minst tre gånger med olika parametrar. Ange eller rita vad som returneras. Exempel: int main() { string s = "11111011111"; // år 2015 i binär form auto v = non_palindrom_indeces(s.begin(), s.end());... c) Vad ställer din kod för krav på parametrarna? 2 of 6

3 Något om const En duva satt på en gren och funderade på alla konstiga filmer som får filmpriser nuförtiden. Att ha koll på const är viktigt i C++. 01 #include <iostream> 02 #include <string> 03 04 struct Film { 05 Film (std::string t) : m_title (t) { 06 07 std::string title () { 08 return m_title; 09 10 11 std::string m_title; 12 ; 13 14 void press_release (const Film & target) { 15 std::cout << "Best movie of the year: " << target.m_title << std::endl; 16 17 18 int main () { 19 Film x ("Transformers"); 20 const Film y ("Constantine"); 21 22 press_release (x); 23 press_release (y); 24 25 std::string x_title = x.title (); 26 std::string y_title = y.title (); 27 a) Koden ovan genererar kompileringsfel. Vad är det som är fel? b) Kompilerar nedanstående kod: 1 Om inte, varför? 2 Om ja, vad har a, aref och x för värden vid programslut? int main() { int a = 2014; const int & aref = a; ++a; int x = aref; 3 of 6

4 Kontroversiell film En dum diktator anser sig kränkt av att han mördas i en påhittad storbudgetfilm och hotar med represalier mot de biografer som dristar sig visa filmen. Flera filmpalatskedjor drar sig ur premiärvisningen. Det blir debatt om film och dess funktion i samhället. Allt pekar dock på att filmen visas trots allt. Att ha koll på pekare och funktionspekare är viktigt i C++. a) Nedan står tre funktioner som tar en Film som parameter (och visar den). Din uppgift är att skriva en ny funktion visa_film som tar två parametrar, en Film och en funktionspekare. Din funktion ska anropa funktionen som funktionspekaren pekar på och skicka med filmen som parameter. void filmpalats(const Film &) { /*... */ ; void kvartersbiograf(const Film &) { /*... */ ; void internet(const Film &) { /*... */ ; // TODO: implementera visa_film void main () { Film intervjun = Film(); visa_film (&filmpalats, intervjun); // sammma som filmpalats(intervjun) visa_film (&kvartersbiograf, intervjun); //... b) Antag följande klass finns deklarerad sedan tidigare struct Filmpalats { void operator() (const Film &) { /*... */ ; ; Går det att anropa din funktion visa_film på följande sätt. Motivera kort. // forts av main Filmpalats f; visa_film(f, intervjun); 4 of 6

5 Virtual reality En storbudgetfilm baserad på de sista tio sidorna i en barnbok gör stor succé på biograferna. Iförda 3D-glasögon upplevs värsta virtual reality projicerad på bioduken. Att ha koll på virtual är en viktig realitet av var C++-programmerares vardag. Vad skriver nedanstående prgram ut? #include <iostream> struct Film { virtual void show() { std::cout << "actors acting" << std::endl; ; void story() { std::cout << "some script" << std::endl; struct BlockBuster : Film { virtual void show() override { std::cout << "awesome effects" << std::endl; ; struct MockBuster : BlockBuster { virtual void show() override { std::cout << "cheap settings" << std::endl; void story() { std::cout << "cheap copy" << std::endl; ; int main() { MockBuster age_of_the_hobbits; BlockBuster the_hobbit; Film & film = age_of_the_hobbits; age_of_the_hobbits.show(); the_hobbit.show(); film.show(); std::cout << "-----------------" << std::endl; age_of_the_hobbits.story(); the_hobbit.story(); film.story(); 5 of 6

6 Läckande listor En populär filmsajt har problem med sin databas som består av länkade listor. Ibland läggs inte filmer eller filmkommentarer in trots att man bett om det. Man har lokaliserat ett par funktioner som man misstänker kan vara trasiga. template <class T> struct Node { Node() : data(t()), next(nullptr) { Node(T d, Node * p) : data(d), next(p) { // klassen Node är inget fel på ; T data; Node<T> * next; template <class T> void insertlast (Node<T> * p, T data) { if (p == nullptr) { p = new Node<T>(data, nullptr); else { while (p -> next!= nullptr) { p = p -> next; p -> next = new Node<T>(data, nullptr); // OBS call by value template <class T> void insertfirst (Node<T> * & p, const T & data) { Node<T> * tmp = new Node<T>(data, p); p = tmp; // OBS call by reference a) Vad är det som är problem med koden? Exemplifiera med ett main program. Rita hur minnet ser ut i ditt program och förklara. b) Sammanfatta med högst två meningar vad som är problem med koden? 6 of 6