Tentamen EDAF30 Programmering i C++

Relevanta dokument
Tentamen EDAF30 Programmering i C++

Tentamen EDAF30 Programmering i C++

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

TDIU01 - Programmering i C++, grundkurs

Tentamen EDAF30 Programmering i C++

TDIU01 - Programmering i C++, grundkurs

Tentamen EDAF30 Programmering i C++

DD2387 Programsystemkonstruktion med C++ Tentamen 2

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer

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

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

Föreläsning 3-4 Innehåll

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

C++ Slumptalsfunktioner + switch-satsen

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

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

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

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

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

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

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Programmering i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

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

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

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Variabler och konstanter

TDIU01 - Programmering i C++, grundkurs

Tommy Färnqvist, IDA, Linköpings universitet

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

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

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

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

Föreläsning REPETITION & EXTENTA

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

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

TDIU01 Programmering i C++

OOP Tentamen

Instuderingsfrågor, del D

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

Lite om länkade strukturer

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Tentamen i DD2387 Programsystemkonstruktion med C++

Exempelsamling Assemblerprogrammering

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

OOP Objekt-orienterad programmering

Tentamen Objektorienterad Programutveckling med C++

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen i Programmering

Innehåll. Sökning och hashtabeller. En bilsamling att söka i. En bil-klass att söka efter. Hur hittar vi alla bilar som uppfyller ett annat villkor

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

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

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

Funktionens deklaration

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

Datorövningar. Grunderna i C/C++

TDIU01 - Datortenta (DAT2)

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

Tentamen i Algoritmer & Datastrukturer i Java

TDIU01 - Programmering i C++, grundkurs

Malmö högskola 2012/2013 Teknik och samhälle

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

Det finns många flaggor till g++,

Föreläsning 6: Introduktion av listor

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

TDDC76 - Programmering och Datastrukturer

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tentamen *:58/ID100V Programmering i C Exempel 3

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen i Grundläggande Programvaruutveckling, TDA548

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

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

kind spelling Scanning

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,

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

Grundläggande programmering med C# 7,5 högskolepoäng

Programmering i C++ EDA623 Containerklasser och algoritmbibliotek. EDA623 (Föreläsning 10) HT / 33

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

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

Tentamen, EDA501 Programmering M L TM W K V

Algoritmer. Två gränssnitt

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

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

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

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenska Tentamen EDAF30 Programmering i C++ 2015 05 06, 8.00 13.00 Hjälmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna. Du ska i dina lösningar visa att du behärskar C++ och även att du kan använda C++ standardklasser. Rena C-lösningar å roblem som med fördel kan lösas enligt mera objektorienterade rincier kan därför ge oängavdrag, även om de är korrekta. Ugifterna ger reliminärt 12 + 12 + 12 + 14 = 50 oäng. För godkänt krävs reliminärt 25 oäng (betygsgränser 3/25, 4/33, 5/42). Observera att ordningsföljden eller oängantalet för ugifterna inte nödvändigtvis avseglar deras svårighet. 1. Skriv en klass Urand men en oeration rnd() som genererar slumtal i ett intervall [0, N). Slumtalen ska dras utan återläggning, det vill säga man ska få varje tal i intervallet bara en gång. När man har fått alla tal i intervallet ska man börja om från början. Exemel å användning av klassen: int main() { Urand urand(10, time(0)); // random numbers 0-9, current time is random seed for (int i = 0; i < 5; ++i) { for (int j = 0; j < 10; ++j) { cout << urand.rnd() << " "; cout << endl; Programmet genererar fem rader utskrift. Varje rad innehåller talen 0 9 i slummässig ordning. Följande metod ska användas: lägg in talen 0-N i en vektor och hämta tal ur vektorn efterhand. Blanda vektorn när det behövs. rand() ger ett slummässigt heltal i intervallet [0, RAND_MAX) (RAND_MAX är en fördefinierad konstant), srand(unsigned int seed) sätter slumtalsfröet.

2(5) 2. I ett rogram läser man kommandon och heltal och summerar talen. Exemel å konversation med rogrammet (kommentarerna ingår inte;, a, u, c och r är kommandon): // rint the sum, 0 to begin with Sum is now 0 a 4 // add 4 a 3 // add 3 a 2 // add 2 Sum is now 9 u // undo last add u // multile undo s are allowed Sum is now 4 c // commit changes (make them ermanent so they cannot be undone) u // nothing haens a 3 a 2 Sum is now 9 r // rollback, undo all changes since last commit Sum is now 4 Programmet ser ut så här: #include <iostream> #include "accumulator.h" using namesace std; int main() { Accumulator accum; char cmd; while (cin >> cmd) { switch (cmd) { case : cout << "Sum is now " << accum << endl; case a : { int nbr; cin >> nbr; accum += nbr; case u : accum.undo(); case c : accum.commit(); case r : accum.rollback(); Imlementera klassen Accumulator.

3(5) 3. Texteditorer som är avsedda för editering av rogramtext brukar hjäla till med arentesmatchning : när man skriver en högerarentes, ), ] eller, så markerar editorn motsvarande vänsterarentes. Exemel (... står för en godtycklig följd av tecken som inte innehåller några arenteser): En texteditor beskrivs av följande klass:...(...(...[...]...)...)...{... 01234567890123456789012345678901234 1 2 3 class Editor { ublic: Editor() { std::string::size_tye findmatchingleftpar(std::string::size_tye os) const;... // functions to edit the text (insert and delete characters) rivate: std::string text; ; Funktionen findmatchingleftpar returnerar ositionen för den vänsterarentes som motsvarar högerarentesen som finns i osition os i texten, eller string::nos om det inte finns någon sådan arentes. Imlementera funktionen. Observera att du inte behöver kontrollera att arenteser av annan ty innanför matchningen är korrekt balanserade.

4(5) 4. I kursboken (J. Skansholm: C++ direkt) hittar man följande funktion som använder sig av binärsökning för att leta u ositionen (returnerar en ekare till elementet) för ett heltal i ett sorterat fält: int *bin_sok(int sokt, int *forsta, int *sista) { if (forsta>sista) return 0; int *mitten = forsta + (sista-forsta)/2; if (sokt<*mitten) return bin_sok(sokt,forsta,mitten-1); else if (sokt>*mitten) return bin_sok(sokt,mitten+1,sista); else return mitten; a) Skriv om funktionen till en funktionsmall så att man i stället för att bara kunna leta i ett int-fält kan söka efter ett element i ett sorterat fält av godtycklig ty (med element som kan jämföras). b) Antag att vi vill använda din funktionsmall ovan för att söka efter element av klassen Bil enligt nedan. OBS! Sökningen ska ske baserat å registreringsnumret för bilen class Bil { ublic: Bil() : reg_nr(0), owner(0) { void set(const string& r, const string& o) { delete reg_nr; delete owner; reg_nr = new string(r); owner = new string(o); string get_reg_nr() { return *reg_nr; string get_owner() { return *owner; rivate: string *reg_nr; string *owner; ; // delete 0 is ok in C++ so no null check required... Nedan finns ett litet exemel som visar hur det ska kunna fungera: Bil bil[4]; bil[0].set("abc123","pelle"); bil[1].set("bcd234","lena"); bil[2].set("cde345","oskar"); bil[3].set("def456","sofia"); Bil s; s.set("bcd234",""); Bil *b = bin_sok(s,bil,bil+3); if (b!=0) { cout << b->get_reg_nr() << endl << b->get_owner() << endl; else { cout << "Fanns ej!" << endl; Komlettera koden för klassen Bil (dvs ändra ej existerande kod - lägg bara till ny kod) så att koden i exemlet ovan fungerar! vänd...

5(5) c) Ett searat roblem med klassen Bil i den föregående ugiften är att man riskerar att råka ut för en minnesläcka när man använder den. Vad innebär en minnesläcka? d) Komlettera koden (ändra ej existerande kod) för klassen Bil ovan så att användning av den inte medför en minnesläcka. Var observant så att du inte i och med ändringen introducerar fel som beror å för tidig avallokering av minne. e) Om du hade fått lov att ändra i den ursrungliga koden för klassen Bil skulle det gå att åtgärda roblemen med minnesläckor å ett mycket enklare sätt (utan att ändra klassens beteende utåt det ublika gränssnittet). Hur?