You are on page 1of 101

OPGAVER TIL

OPRG
Tidligere eksamensopgaver

Version august 2022


Eksamensopgaver
Vintereksamen Dec08/Jan09
Dette opgavesæt omhandler et program til et firmas kundekartotek. Programmet er designet som
vist på klassediagrammet herunder.

Kartotek Global konstant:

- kundeArray[ SIZE ]: Kunde const int SIZE = 20;


<<utility>> - antalKunder: int
hovedprogram
+ nyKunde( int, string, float ): bool
+ getKunde( void ): Kunde
+ opdaterKunde( int, float ): void
+ main( ): int + sletKunde( int ): void
+ getAntalKunder( void ): int
+ printKunde( int ): void
+ printAlle( void ): void

Kunde
- kundeNummer: int
- navn: string
- saldo: float

+ setKundeNummer( int ): void


+ getKundeNummer( void ): int
+ setNavn( string ): void
+ getNavn( void ): string
+ opdaterSaldo( float ): void
+ getSaldo( void ): float
+ print( void ): void

OPGAVE 1
Denne opgave omhandler kun klassen Kunde.

a) Skriv koden til hele header-filen Kunde.h.


Herunder ser du klassebeskrivelsen for klassen Kunde.
Klassen Kunde
Ansvar:
Klassen har ansvaret for alle data for en kunde og for behandlingen af disse data.
Attributer:
int kundeNummer: En integer med kundens kundenummer. Gyldige værdier 0 og 1000-
9999. Default-værdi 0.
string navn: String-objekt med kundens navn.
float saldo: Decimaltal med det beløb, som kunden skylder (negativt) eller har til
gode (positivt). Default-værdi 0.

Opgave 1 fortsættes på næste side


Metoder:
Kunde( int = 0, string = ”nn”, float = 0 );
Parametre: Integer med kundenummer.
String-objekt med navn.
Decimaltal med saldobeløb.
Returværdi: Ingen
Beskrivelse: Kombineret default- og explicit-constructor. Hvis den modtagne
integer-værdi er gyldig assignes denne til kundeNummer.
Ellers udskrives TEKST1 (se herunder) og kundeNummer sættes til
10000. Den modtagne string assignes altid til navn og den modtagne
float assignes altid til saldo.
TEKST1: ”Fejl i kundenr! Kundenr er sat til 10000.”
void setKundeNummer( int );
Parametre: Integer med kundenummer.
Returværdi: Ingen.
Beskrivelse: Hvis den modtagne integer-værdi er gyldigt assignes denne til
kundeNummer. Ellers udskrives TEKST1 (se ovenfor) og
kundeNummer sættes til 10000.
int getKundeNummer( void );
Parametre: Ingen.
Returværdi: Kundens kundenummer.
Beskrivelse: Skal returnere værdien af kundeNummer.
void setNavn( string );
Parametre: Sting med kundens navn.
Returværdi: Ingen.
Beskrivelse: Den modtagne string assignes til navn.
string getNavn( void );
Parametre: Ingen.
Returværdi: Kundens navn.
Beskrivelse: Skal returnere værdien af navn.
void opdaterSaldo( float );
Parametre: Decimaltal med det beløb som skal lægges til saldo.
Returværdi: Ingen.
Beskrivelse: Den modtagne værdi lægges til saldo.
float getSaldo( void );
Parametre: Ingen.
Returværdi: Kundens saldobeløb.
Beskrivelse: Skal returnere værdien af saldo.
void print( void );
Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Skal udskrive værdierne af de tre attributer i dette format:
Kundenummer: 1234
Navn: Peter Hansen
Saldo: -2375.95

b) Skriv koden for hele source-filen Kunde.cpp.


OPGAVE 2

Denne opgave omhandler test af klassen Kunde.


På bilag 1 ser du et lille testprogram til klassen. Der er dog fejl og mangler i koden. Ved
kompilering af filen fremkommer følgende fejl:
main.cpp(18) : error C2146: syntax error : missing ';' before identifier 'printSkyldigeKunder'
main.cpp(20) : error C3861: 'getKundeNummer': identifier not found
main.cpp(22) : error C2660: 'Kunde::getSaldo' : function does not take 1 arguments

a) For hver af de tre fejl skal du beskrive fejlen og skrive den korrekte kode som retter fejlen.

Desuden mangler implementeringen af funktionen printSkyldigeKunder(). Funktionen skal


udskrive data for alle de kunder i arrayet, som har negativ saldo.

b) Skriv koden for funktionen printSkyldigeKunder().

OPGAVE 3

Denne opgave omhandler klassen Kartotek.

a) Hvad kaldes den relation, der er mellem de to klasser Kartotek og Kunde?

På bilag 2 kan du se koden til header-filen Kartotek.h.


Metoden nyKunde() kan beskrives således:

bool nyKunde( int, string, float );


Parametre: Integer med kundenummer.
String-objekt med navn.
Decimaltal med saldobeløb.
Returværdi: true hvis kunden bliver indsat i arrayet.
false hvis kunden ikke bliver indsat i arrayet
Beskrivelse: Metoden skal finde første plads i kundeArray som er ledig – dvs.
har kundenummer 0. Derefter skal kunden indsættes på denne plads i
arrayet – dvs. den modtagne integer skal assignes til kundeNummer,
den modtagne string til navn og den modtagne float til saldo –
herefter returneres true.
Hvis kunden ikke bliver indsat i arrayet – dvs. hvis der ingen ledige
pladser bliver fundet i arrayet, returneres false.

På bilag 3 kan du desuden se et UML aktivitetsdiagram for metoden nyKunde().

b) Skriv koden til metoden nyKunde(), som den skal implementeres i filen
Kartotek.cpp. Aktivitetsdiagrammet på bilag 3 skal følges.
BILAG 1

Koden til source-filen test-Kunde.cpp

1 #include "Kunde.h"
2 #include <iostream>
3
4
5 void printSkyldigeKunder( Kunde *, const int );
6
7
8 int main()
9 {
10 const int ARRAY_SIZE = 5;
11 Kunde testArray[ ARRAY_SIZE ] = { Kunde(1000, "Bo", -1975.95),
12 Kunde(2000, "Kurt", 200.00) };
13
14 testArray[2].setKundeNummer( 3000 );
15 testArray[2].setNavn( "Ib" );
16 testArray[2].opdaterSaldo( -210.75 )
17
18 printSkyldigeKunder( testArray, ARRAY_SIZE );
19
20 cout << "\nTom arrayplads: " << getKundeNummer();
21 cout << " " << testArray[3].getNavn() << " ";
22 cout << testArray[3].getSaldoo( 3 ) << endl;
23
24 return 0;
25 }
26
27
28 void printSkyldigeKunder( Kunde *kundePtr, const int _ARRAYSIZE )
29 {
.
.
.
.
.
.
.
. }
BILAG 2

Koden til header-filen Kartotek.h

1 #pragma once
2
3 #include "Kunde.h"
4
5 const int SIZE = 20;
6
7
8 class Kartotek
9 {
10 public:
11 Kartotek();
12 bool nyKunde( int, string, float );
13 void getKunde( int &, string &, float & ) const;
14 void opdaterKunde( int, float );
15 void sletKunde( int );
16 int getAntalKunder( void ) const;
17 void printKunde( int ) const;
18 void printAlle( void ) const;
19 private:
20 Kunde kundeArray[ SIZE ];
21 int antalKunder;
22 };
BILAG 3

Aktivitetsdiagram til metoden nyKunde().


Sommereksamen 2009
Dette opgavesæt omhandler et system til en mobiltelefon givet ved følgende klassediagram.

Mobiltelefon

- minTelefonbog: Telefonbog
- minTelefon: Telefon
- minSms: Sms
- pinKode: int

+ taend( ): void
- sluk( ) const: void
- menu( ): void
- skiftPinKode( ): void

Telefon Sms
- nummer: long int - besked: string

+ telefonMenu( ): void + smsMenu( ): void


- foretagOpkald( ): void - skrivBesked( ): void
- modtagOpkald( ): void - laesBesked( ): void

Telefonbog
- navne[ MAX_ANTAL ]: string
- numre[ MAX_ANTAL ]: long int
- antalKontakter: int

+ telefonbogMenu( ): void
- tilfoejKontakt( ): void
+ findNummer( ) const: long int
- sletKontakt( ): void
- visKontakter( ) const: void

OPGAVE 1

Denne opgave omhandler klassen Mobiltelefon.

a) Hvad kaldes den relation, der er mellem klassen Mobiltelefon og klassen Sms?

Ud over de funktioner, der ses af klassediagrammet, skal klassen Mobiltelefon have en ren
default constructor.

b) Skriv koden for hele header-filen Mobiltelefon.h med definitionen af klassen


Mobiltelefon.

Funktionen taend() skal udskrive en besked til brugeren (bilag 1A)s og brugeren skal indtaste sin
pinkode, som så indlæses. Pinkoden kontrolleres. Er den forkert udskrives en fejlmeddelelse (bilag
1A) og brugeren skal indtaste igen. Brugeren må højst taste forkert kode 3 gange. Hvis brugeren har
tastet korrekt pinkode kaldes funktionen menu(). Har brugeren tastet forkert kode 3 gange udskri-
ves en fejlmeddelelse (bilag 1A) og funktionen sluk() kaldes.

c) Skriv koden for fuktionen taend(). De tekster der skal udskrives fremgår af bilag 1A.
OPGAVE 2
Denne opgave omhandler klassen Sms.

a) Hvad viser den pil, der er fra klassen Sms til klassen Telefonbog?

Funktionen smsMenu() kan beskrives således:


void smsMenu()
Parametre: Ingen
Returværdi: Ingen
Beskrivelse: Funktionen skal slette skærmen og udskrive sms-menuen (vist på
bilag 1B). Derefter indlæses brugerens valg. Det indtastede valg
skal valideres – gyldige valg er tegnene ’1’, ’2’ og ’3’. Alt dette
gentages så længe brugeren indtaster et ugyldigt valg. Har brugeren
indtastet et gyldigt valg fortsættes således: har brugeren valgt ’1’
kaldes funktionen skrivBesked(), har brugeren valgt ’2’ kaldes
funktionen laesBesked() og har brugeren valgt ’3’ returneres
fra funktionen. Hele funktionen gentages i en uendelig løkke.
På bilag 2 kan du se et aktivitetsdiagram for funktionen.
b) Skriv koden for funktionen smsMenu(). Diagrammet på bilag 2 skal følges 100%.

På bilag 3 ser du koden for nogle af de andre funktioner i klassen Sms. Nogle enkelte linier af
koden mangler dog. Der mangler kode i linierne11, 18, 36 og 43.
c) Skriv for hver af de fire linier den manglende kode.

OPGAVE 3
Denne opgave omhandler klassen Telefonbog.

Som det ses af klassediagrammet, er størrelsen på de to arrays navne[] og numre[] givet ved
variablen MAX_ANTAL.
a) Hvor og hvordan skal denne variabel defineres?
Klassen skal have en default-constructor. Constructoren skal initialisere antalKontakter til 0,
alle numre til 0 og alle navne til en tom tekststreng.
b) Skriv koden til constructoren Telefonbog().

På bilag 4 ser du koden til nogle af de øvrige funktioner i klassen Telefonbog. Der er dog fejl i
koden. Herunder ser du fejlrapporten.

telefonbog.cpp(84) : error C2146: syntax error : missing ';' before identifier 'visKontakter'
telefonbog.cpp(94) : error C2064: term does not evaluate to a function taking 1 arguments
telefonbog.cpp(111) : error C2676: binary '<<' : 'std::istream' does not define this operator or a
conversion to a type acceptable to the predefined operator
telefonbog.cpp(117) : error C2059: syntax error : ';'

c) For hver af fejlene skal du angive linienummeret, kort beskrive hvad fejlen består i og
skrive den korrekte kode for den pågældende linie.
BILAG 1A

Skærmbillede der viser en situation, hvor brugeren har tastet forkert pinkode 3 gange

Indtast pinkode: 1111

Forkert pinkode

Indtast pinkode: 2222

Forkert pinkode

Indtast pinkode: 3333

Forkert pinkode

Du har tastet forkert pinkode 3 gange.


Telefonen er laast.

BILAG 1B

Skærmbillede der viser sms-menuen

1. Skriv besked
2. Laes besked
3. Tilbage
BILAG 2

Funktionen smsMenu()

Definer variable

Slet skærmen

Se bilag 1B
Udskriv menu [svar er ikke ’1', ’2' eller ’3']

Indlæs svar

[true]

[svar er ’1', ’2' eller ’3']

Kald
[svar er ’1']
skrivBesked( )

[svar er ikke ’1']

Kald
[svar er ’2']
laesBesked( )

[svar er ikke ’2']

Return
BILAG 3

Sms.cpp

1 #include <iostream>
2 #include <string>
3 #include <conio.h>
4 #include "Sms.h"
5
6 using namespace std;
7
8
9 Sms::Sms( Telefonbog * tlfBogPtr )
10 {
11
12 besked = "";
13 }
14
15
16 void Sms::skrivBesked()
17 {
18
19 char tekst[101];
20 long int nr;
21
22 cin.ignore( 1024, '\n' );
23 cout << "\nIndtast besked:\n\n";
24 cin.getline( tekst, 100 );
25 besked = tekst;
26
27 cout << "\n1. Indtast nummer";
28 cout << "\n2: Soeg nummer\n";
29
30 do
31 {
32 valg = getch();
33
34 }while( valg != '1' && valg != '2' );
35
36
37 {
38 cout << "\nIndtast nummer:";
39 cin >> nr;
40 }
41 else if( valg == '2' )
42 {
43
44 cout << endl << nr << endl;
45 }
46
47 cout << "\nSend (tryk en tast)";
48
49 getch();
50 }
51
52
53 void Sms::laesBesked()
54 {
55 cout << endl << besked << endl;
56 }
BILAG 4

Telefonbog.cpp

.
.
.
80 long int Telefonbog::findNummer() const
81 {
82 int valg
83
84 visKontakter();
85
86 if( antalKontakter > 0 )
87 {
88 do
89 {
90 cin >> valg;
91
92 }while( valg < 1 || MAX_ANTAL < valg );
93
94 return numre( valg-1 );
95 }
96 else
97 return 0;
98 }
99
100
101 void Telefonbog::sletKontakt()
102 {
103 int valg;
104
105 visKontakter();
106
107 if( antalKontakter > 0 )
108 {
109 do
110 {
111 cin << valg;
112
113 }while( valg < 1 || MAX_ANTAL < valg );
114
115 navne[ valg-1 ] = "";
116 numre[ valg-1 ] = 0;
117 antalKontakter-;
118 }
119 }
.
.
.
Vintereksamen Dec09/Jan10
OPGAVE 1
Dit firma har en solcenter kæde som kunde. Denne kunde ønsker et nyt system til sine solcentre.
Systemet skal bestå af en central controlenhed, som skal styre alle sole (kabiner) i et center (altså en
controlenhed i hvert solcenter). Controlenheden skal bestå af en skærm, et numerisk tastatur og et
møntindkast. Skærmen skal vise status (ledig, optaget m.m.) for alle sole (kabiner) i centret.
I den første prototype anvendes computerens skærm og tastatur og møntindkastet simuleres ved
indtastning af beløbet på tastaturet. Herunder ser du klassediagrammet for systemet.

ControlUnit
<<utility>> - sunPtr[NUMBER_OF_SUNS]: Sun * global konstant:
hovedprogram const int NUMBER_OF_SUNS=4
+ run( ): v oid
1 + display ( ): v oid
1
+ main( ): int + printStatus( int index ): v oid
+ chooseSun( ): int
+ pay ( ): int

Sun

- clock: Timer Timer


- time: int
- status: int - startingTime: long int
1 - runTime: int

+ on( int minutes ): v oid


1 + startTimer( int seconds ): v oid
+ startSun( ): v oid
+ getRemainingTime( ): int
+ startCooling( ): v oid
+ of f ( ): v oid
+ getStatus( ): int
+ remainingTime( ): int

Herunder ser du desuden funktionsbeskrivelsen for funktionen on() fra klassen Sun.h.

void on( int minutes );


Parametre: Integer til den tid som solen skal være tændt.
Gyldige værdier: 10, 15 og 20.
Returværdi: Ingen.
Beskrivelse: Hvis værdien af minutes er gyldig assignes denne værdi til
attributen time. Er minutes ugyldig assignes værdien 10
til time.
Attributen status skal sættes til 1.
Timeren skal sættes til at køre i 2 minutter (120 sekunder) (skal
virke som forsinkelse inden solen tændes).

a) Skriv koden til funktionen on() fra klassen Sun.

b) Skriv koden til hele header-filen ControlUnit.h.

opgave 1 fortsættes på næste side


c) Alle funktionerne (undtaget constructoren) i klassen ControlUnit.h bør erklæres
const. Forklar hvorfor man kan gøre det.

Herunder ser du en del af klassebeskrivelsen for klassen ControlUnit.h.

ControlUnit
Ansvar:
Klassen har ansvaret for informationer på skærmen, indlæsning af brugerens valg på
tastaturet, modtagelse af betaling og styring af samtlige sole (tænd, sluk m.m.)
Attributer:
Sun *sunPtr[]: Et array af pointere til Sun-objekter.
Metoder:
ControlUnit( Sun *sPtr );
Parametre: Pointer til det array som indeholder Sun-objekterne.
Returværdi: Ingen.
Beskrivelse: Constuctoren skal forbinde pointerne i sunPtr[] til
objekterne i det array, som sPtr peger på.

void run();
Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Funktionen skal udskrive tekst på skærmen vha. funktionen
display(). Desuden skal brugerens valg (solnummer)
læses vha. funktionen chooseSun(). Dette gentages så
længe brugeren indtaster en ugyldig værdi. Gyldige værdier
er fra 1 til NUMBER_OF_SUNS begge inklusive. Når gyldig
værdi er indtastet modtages betaling vha. funktionen pay().
Herefter tændes den valgte sol.

void display();
Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Funktionen skal slette skærmen. Herefter udskrives status
for alle sole vha. funktionen printStatus() samt en
besked til brugeren om at vælge sol. Skærmbilledet ses på
bilag 1.

d) Skriv koden til funktionen display().

e) Skriv koden til funktionen run(). Aktivitetsdiagram for funktionen ses på bilag 2. Dette
diagram skal følges.

f) Skriv koden til constructoren fra klassen ControlUnit.

opgave 1 fortsættes på næste side


På bilag 3 ser du koden for funktionen printStatus(). Der er dog fejl i koden.
Fejlmeddelelserne fra Visual Studio ses herunder.
controlunit.cpp(51) : error C2228: left of '.getStatus' must have class/struct/union
type is 'Sun *const ' did you intend to use '->' instead?
controlunit.cpp(55) : error C2143: syntax error : missing ';' before 'break'
controlunit.cpp(57) : error C2146: syntax error : missing ';' before identifier 'endl'
controlunit.cpp(59) : warning C4390: ';' : empty controlled statement found; is this the intent?
controlunit.cpp(62) : error C2064: term does not evaluate to a function taking 1 arguments
controlunit.cpp(62) : error C2227: left of '->remainingTime' must point to class/struct

g) For hver af fejlene skal du angive linienummer, hvad fejlen består i og den korrekte
kode.

I hovedprogrammet main() skal udføres følgende:

- erklæring af et array af Sun-objekter. Størrelsen på arrayet er givet


ved konstanten NUMBER_OF-SUNS
- erklæring af ControlUnit objekt
- kald af funktionen run()

h) Skriv koden til hovedprogrammet main().

BILAG 1 - Screenshot af skærmbillede fra funktionen display().


BILAG 2 - Aktivitetsdiagram for funktionen run().

Definer variable

Kald display()

[ugyldigt sol
nummer]
Kald chooseSun() og
gem returværdi

[true]

[gyldigt sol
nummer]

Kald pay() og gem


returværdi

Tænd den valgte sol


ved at kalde on()
BILAG 3 - Koden for funktionen run()- med fejl !

47 void ControlUnit::printStatus( int index ) const


48 {
49 cout << "Sol " << index+1 << " : ";
50
51 switch( sunPtr[index].getStatus() )
52 {
53 case 0:
54 cout << "Ledig" << endl
55 break;
56 case 1:
57 cout << "Optaget - starter" endl;
58 if( sunPtr[index]->remainingTime() == 0 );
59 sunPtr[index]->startSun();
60 break;
61 case 2:
62 cout << "Optaget - " << sunPtr(index)->remainingTime();
63 cout << " min" << endl;
64 if( sunPtr[index]->remainingTime() == 0 )
65 sunPtr[index]->startCooling();
66 break;
67 case 3:
68 cout << "Optaget - koeler" << endl;
69 if( sunPtr[index]->remainingTime() == 0 )
70 sunPtr[index]->off();
71 break;
72 }
73 }
Sommereksamen 2010
Dit firma har fået til opgave at lave styringen til et alarmsystem til et parcelhus. Systemet består af
en styreenhed, et kontrolpanel og nogle magnetfølere (switches), som placeres ved alle døre og
vinduer. Hvis alarmsystemet er aktiveret og strømmen i en af magnetfølerne afbrydes, skal systemet
melde alarm. Systemet aktiveres og deaktiveres ved at indtaste en 4-cifret personlig kode (tal
mellem 1000 og 9999). Default-koden er 1234. Efter at denne kode er anvendt, kan brugeren selv
vælge sin egen kode. Koder kan tilføjes og slettes af brugeren. Systemet kan maksimalt gemme 4
forskellige koder. Herunder ser du klassediagrammet for programmet.

<<utility>>
hovedprogram

+ main(): int

global konstant: SecuritySystem

- panel: ControlPanel Sw itch


const int SIZE=10 - sw itchArray[SIZE]: Sw itch - gate: int
- on: bool
+ getStatus(): bool
+ run(): void + setGate( int ): void
- menu(): void
- alert(): void

global konstant:
ControlPanel
const int MAX_CODES=4 - numberOfCodes: int
- codeArray[MAX_CODES]: int
+ on(): void
+ off(): void
+ addCode(): void
+ deleteCode(): void
+ readCode() int
+ confirmCode( int ): bool

OPGAVE 1
Denne opgave omhandler klassen SecuritySystem. Ud over de funktioner, der ses af klassedia-
grammet, skal klassen SecuritySystem have en ren default constructor.
a) Skriv koden for hele header-filen SecuritySystem.h.

Default constructoren i SecuritySystem skal sætte on til false og for alle switches skal gate
værdien sættes lig med den indeks værdi, som switchen har i arrayet .
b) Skriv koden for default constructoren SecuritySystem().

Opgave 1 fortsættes på næste side


På bilag 1 ser du koden til metoden run(). Der er dog fejl i koden. Fejlmeddelelserne fra Visual
Studio ser du herunder.
securitysystem.cpp(43) :
error C2065: 'c' : undeclared identifier
securitysystem.cpp(47) :
error C2065: 'i' : undeclared identifier
securitysystem.cpp(48) :
error C3861: 'getStatus': identifier not found
securitysystem.cpp(76) :
error C2660: 'ControlPanel::deleteCode' : function does
not take 1 arguments
securitysystem.cpp(83) : error C2143: syntax error : missing ';' before '}'

c) For hver af de 5 fejl skal du angive linienummeret, beskrive hvori fejlen består og skrive
den korrekte koden for den pågældende linie.

OPGAVE 2
Denne opgave omhandler klassen ControlPanel. Herunder ser du funktionsbeskrivelserne for
alle metoder i klassen.
ControlPanel()
Parametre: Ingen
Returværdi: Ingen
Beskrivelse: Default constructor. Constructoren skal sætte numberOfCodes
til 1 og første plads i codeArray til 1234.
void on()
Parametre: Ingen
Returværdi: Ingen
Beskrivelse: Funktionen skal kalde readCode() og gemme den indlæste kode.
Denne kode skal så kontrolleres af confirmCode(). Dette fortsæt-
tes så længe koden ikke godkendes af confirmCode(). Når koden
er godkendt udskrives tekst 1 (bilag 2).

void off()
Parametre: Ingen
Returværdi: Ingen
Beskrivelse: Nøjagtig som funktionen on() dog udskrives tekst 2 (bilag 2).

int readCode()
Parametre: Ingen
Returværdi: Den indlæste og godkendte kode.
Beskrivelse: Funktionen skal udskrive tekst 3 (bilag 2) og indlæse brugerens svar.
Hvis svaret er ugyldigt (tallet er ikke mellem 1000 og 9999)
udskrives tekst 4. Dette gentages så længe brugeren indtaster et
ugyldig svar. Når et gyldigt svar er indtastet returneres dette.

bool confirmCode( int )


Parametre: Den kode der skal kontrolleres.
Returværdi: true hvis koden findes – false hvis den ikke findes.
Beskrivelse: Funktionen skal kontrollere om den modtagne kode findes i
codeArray. Hvis den findes returneres true ellers udskrives
tekst 4 og der returneres false.

opgave 2 fortsættes næste side


void addCode()
Parametre: Ingen
Returværdi: Ingen
Beskrivelse: Hvis antallet af koder i systemet er mindre end MAX_CODES kaldes
funktionen readCode() og den modtagne kode gemmes på næste
ledige plads i codeArray og antal koder tælles en op. Ellers, hvis der
ikke er plads til flere koder i systemet, udskrives tekst 5.

void deleteCode()
Parametre: Ingen
Returværdi: Ingen
Beskrivelse: Hvis antallet af koder i systemet er større end 1 skal der slettes en kode
ellers udskrives tekst 7. Koden slettes således: Funktionen readCode()
kaldes og den modtagne kode gemmes. Hvis koden godkendes af
confirmCode() løbes codeArray igennem og når koden er
fundet slettes den og alle efterfølgende koder i arrayet rykkes en plads
frem. Ellers, hvis koden ikke godkendes af confirmCode(),
udskrives tekst 6.

a) Skriv koden til funktionen readCode().

På bilag 3 ser du koden til funktionen confirmCode(). Dog mangler der to linier i koden.

b) Skriv koden til de to linier som mangler.

På bilag 4 kan du se et aktivitetsdiagram for funktionen deleteCode().

c) Skriv koden for funktionen deleteCode(). Diagrammet skal følges.

OPGAVE 3

Denne opgave omhandler hovedprogrammet.

I funktionen int main() er det eneste der skal ske, at metoden run() skal kaldes.

a) Skriv koden til funktionen main().


BILAG 1
Koden til funktionen run() med fejl
.
.
.
31 void SecuritySystem::run()
32 {
33 char choice;
34
35 do
36 {
37 choice = '0';
38
39 menu();
40
41 if(on)
42 {
43 while( choice != c )
44 {
45 while( !kbhit() )
46 {
47 for( i=0; i<SIZE; i++ )
48 if( getStatus() == false )
49 alert();
50 }
51
52 choice = getch();
53 }
54 }
55 else
56 choice = getch();
57
58 switch( choice )
59 {
60 case 'c':
61 if( on )
62 {
63 panel.off();
64 on = false;
65 }
66 else
67 {
68 panel.on();
69 on = true;
70 }
71 break;
72 case 'a':
73 panel.addCode();
74 break;
75 case 'd':
76 panel.deleteCode(choice);
77 break;
78 case 'q':
79 exit(1);
80 }
81
82 }while( true )
83 }
.
.
.
BILAG 2
Udskrifter fra metoderne i klassen ControlPanel

Tekst 1: Alarm on

Tekst 2: Alarm off

Tekst 3: Indtast 4-cifret kode:

Tekst 4: Ugyldig kode

Tekst 5: Der er ikke plads til flere koder

Tekst 6: Koden findes ikke

Tekst 7: Der er kun en kode i systemet - den må ikke slettes

BILAG 3
Koden til funktionen confirmCode() med mangler
.
.
.
106 bool ControlPanel::confirmCode( int code ) const
107 {
108 //her mangler kode
109 if( codeArray[i] == code )
110 return true;
111
112 cout << "\nUgyldig kode\n";
113
114 //her mangler kode
115 }
.
.
.
BILAG 4
Aktivitetsdiagram til metoden deleteCode()
Vintereksamen Dec10/Jan11
Dit firma har fået til opgave at udvikle styringen til et klimaanlæg. Herunder ser du det udviklede
klassediagram.

HeatingDevice
TemperatureSensor
- heaterOn: bool

+ on( ): v oid
+ measureTemperature( ): f loat
+ of f ( ): v oid
+ getHeaterOn( ): bool
ControlUnit
- guiObj: GUI
- maxTemperature: f loat
- minTemperature: f loat
- actualTemperature: f loat
- on: bool

+ run( ): v oid

CoolingDevice
GUI
- coolerOn: bool

+ on( ): v oid
+ of f ( ): v oid + mainScreen(int, int, bool, bool, bool): v oid
+ getCoolerOn( ): bool + printTemperature( f loat ): v oid
+ readMaxTemp( ): f loat
+ readMinTemp( ): f loat

OPGAVE 1
Denne opgave omhandler klassen HeatingDevice.
Klassen skal ud over de viste metoder have en default-constructor.

a) Skriv koden for hele header-filen HeatingDevice.h.

Metoden getHeaterOn() skal implementeres i filen HeatingDevice.cpp.

b) Skriv koden til metoden getHeaterOn().


OPGAVE 2

Denne opgave omhandler klassen ControlUnit.


Prototypen for klassens constructor er:

ControlUnit( CoolingDevice *, HeatingDevice *, TemperatureSensor * )

a) Skriv koden for hele header-filen ControlUnit.h.

Constructoren skal

- Oprette associationerne til de andre klasser.


- Initialisere on til false.
- Initialisere minTemperature til 20 og maxTemperature til 25.
- Initialisere actualTemperature til den aktuelle temperatur ved at aflæse
temperatursensoren.

Constructoren skal implementeres i filen ControlUnit.cpp.

b) Skriv koden til constructoren.

På bilag 1 ser du en del af koden til metoden run(). Implementeringen af switch-strukturen fra
linie 40 mangler. De cases, der skal være i switchen, skal svare til det valg, som brugeren foretager
fra hovedmenuen (se på bilag 2). Dvs. at hvis der vælges ’1’ skal on ændres fra false til true
eller omvendt. Vælges ’2’ eller ’3’ skal brugeren kunne ændre værdien af hhv. maxTemperature
eller minTemperature via relevante metoder i klassen GUI. Vælges ’4’ skal programmet afsluttes.

c) Skriv den manglende kode for switch-strukturen.


OPGAVE 3

Denne opgave omhandler klassen GUI (Graphical User Interface).


Metoden readMaxTemp() kan beskrives således:

float readMaxTemp() const;


Parametre: Ingen
Returværdi: Brugerens indtastede maksimum temperatur
Beskrivelse: Funktionen skal bede brugeren om at indtaste en ny maksimum temperatur i
intervallet 23-30 grader Celcius og indlæse brugerens svar. Hvis svaret er
udenfor det gyldige interval udskrives en fejlmeddelelse. Alt dette gentages,
så længe brugeren indtaster en ugyldig værdi. Når en gyldig værdi er indtas-
tet, skal denne returneres.

På bilag 3 ser du et aktivitetsdiagram for metoden.

a) Skriv koden for metoden readMaxTemp(). Aktivitetsdiagrammet SKAL følges.

På bilag 4 ser du koden for metoden mainScreen(). Men der er fejl i koden. Herunder ser du
fejlmeddelelserne fra Visual Studio.

gui.cpp(13): error C2146: syntax error : missing ';' before identifier 'cout'
gui.cpp(17): error C2065: 'maks' : undeclared identifier
gui.cpp(19): error C2065: 'taendt' : undeclared identifier
gui.cpp(19): error C2065: 'slukket' : undeclared identifier
gui.cpp(20): error C2146: syntax error : missing ';' before identifier 'endl'

b) Beskriv for hver af fejlene, hvad fejlen består i, og skriv den korrekte kode.

OPGAVE 4

Denne opgave omhandler funktionen main().


På bilag 5 ser du koden for main(). Men koden i linie 9 mangler.

a) Skriv koden for den manglende linie.


BILAG 1 – Udsnit af koden for metoden run()
.
.
21 void ControlUnit::run()
22 {
23 char choice;
24
25 // NB! headerPtr og coolerPtr er to af pointerne i klassen
26 // ControlUnit. Du har muligvis kaldt dine pointere noget andet.
27
28 guiObj.mainScreen( minTemperature, maxTemperature, on,
29 heaterPtr->getHeaterOn(),
30 coolerPtr->getCoolerOn() );
31
32 do
33 {
34 if( kbhit() )
35 {
36 choice = getch();
37
38 switch( choice )
39 {
40 // Koden til switchen mangler
.
.
.
. }
.
.
. // Resten af koden til funktionen er ikke medtaget her – og den
// ønskes heller ikke skrevet (det forudsættes at den ER skrevet)

BILAG 2 – Skærmbillede der viser programmets hovedmenu (metoden mainScreen())


BILAG 3 – Aktivitetsdiagram for metoden readMaxTemp()

Tekst 1: Indtast ny maksimum temperatur i grader celsius (23-30):

Tekst 2: Den indtastede temperatur er ugyldig


BILAG 4 – Koden for metoden mainScreen() – med fejl
7 void GUI::mainScreen( int min, int max, bool systemOn,
8 bool heatOn, bool coolOn ) const
9 {
10 system("cls");
11 cout << "\n 1. Start/stop anlaeget";
12 cout << "\n 2. Vaelg ny maksimum temperatur"
13 cout << "\n 3. Vaelg ny minimum temperatur";
14 cout << "\n 4. Afslut program\n";
15
16 cout << "\n Minimum temperatur: " << min;
17 cout << "\n Maksimum temperatur: " << maks << endl;
18
19 cout << "\n Anlaeget er " << ( systemOn ? taendt : slukket);
20 cout << endl endl;
21 cout << ( heatOn ? " Varmeenheden er taendt\n\n" : "" );
22 cout << ( coolOn ? " Koeleenheden er taendt\n\n" : "" );
23 }

BILAG 5 – Koden for funktionen main()


4 int main()
5 {
6 CoolingDevice myCooler;
7 HeatingDevice myHeater;
8 TemperatureSensor mySensor;
9 // Koden til denne linie mangler
10
11 myUnit.run();
12
13 return 0;
14 }
Sommereksamen 2011
OPGAVE 1
Skriv et lille program ( main()), som kan udskrive alle ulige tal fra og med 1 til og med 99.

OPGAVE 2
Skriv et lille program ( main()), hvori du erklærer et array med 10 pladser. Herefter skal alle
pladser i arrayet initialiseres til værdien 5.0 .

OPGAVE 3
Herunder ser du UML klassediagrammet for klassen Person.

Person
- navn: string
- alder: int
+ setNavn( string ): void
+ getNavn( void ): string
+ setAlder( int ): void
+ getAlder( void ): int
+ print( void ): void

Ud over de viste metoder skal klassen have både en default- og en explicit-constructor.

a) Skriv koden for hele header-filen Person.h.

Default-værdien for attributen alder er 0 og for navn ”NN”.


Tilladte værdier for alder er 0-100 begge inklusive.
Der er ingen restriktioner på navn.

b) Skriv koden for metoden getAlder().

c) Skriv koden for metoden setAlder().

Funktionen print() skal udskrive navn og alder som vist i dette eksempel:

Hans Pedersen 27 aar

d) Skriv koden for metoden print().

Opgavesættet fortsættes på næste side


OPGAVE 4
Skriv et lille program ( main()), hvori du erklærer et objekt af klassen Person. Personens navn
og alder skal være ”Bo Hald” og 25 år.
Herefter skal persons data udskrives på skærmen.

OPGAVE 5
Herunder ser du beskrivelsen for en funktion kaldet findNuller().

int findNuller( char * );


Parametre: En pointer til det array, der skal søges i.
Returværdi: Antallet forekomster af tegnet '0' (nul) i arrayet.
Beskrivelse: Funktionen skal gennemløbe arrayet og tælle antallet forekomster
af tegnet '0' (nul) og derefter returnere det fundne antal.
(Med tegnet '0' menes karakteren (char) med ASCII-værdien 48)

a) Skriv koden for denne funktion.


Vintereksamen Dec11/Jan12
OPGAVE 1
Denne opgave skal skrives i C++
a) Skriv et lille program (main), hvori du erklærer en variabel, der kan indeholde hele tal. Der
skal herefter kunne indlæses en værdi til variablen fra tastaturet, og til slut skal variablens
værdi udskrives på skærmen. Det er frivilligt, om du vil skrive noget supplerende tekst ud
på skærmen.

OPGAVE 2
Denne opgave skal skrives i C++
Herunder ser du klassediagrammet for et system bestående af en lampe med lysdæmper.

Lamp
- myDimmer: Dimmer

+ on( ): void
+ off( ): void
+ moreLight( ): void
+ lessLight( ): void

Dimmer
- power: int

+ powerUp( ): bool
+ powerDown( ): bool

a) Hvad kaldes den relation, der er mellem de to klasser?

De næste to spørgsmål omhandler klassen Dimmer.

Konstruktoren i klassen Dimmer har følgende prototype og beskrivelse:

Dimmer ( int pow );


Parametre: Integer med den værdi, som power skal have.

Returværdi: Ingen

Beskrivelse: Skal sætte attributen power lig med pow, hvis værdien af pow er
gyldig ellers sættes power til default. Gyldige værdier er alle hele
tal mellem 1 og 10 – begge inklusive. Defaultværdi 0.

b) Skriv koden til konstruktoren.

Opgaven fortsættes på næste side


Metoden powerUp() skal øge power med 1, hvis power er mindre end 10, og derefter returnere true.
Ellers skal den blot returnere false uden at ændre power.

c) Skriv koden til metoden powerUp().

De næste tre spørgsmål omhandler klassen Lamp.

d) Skriv koden for hele header filen Lamp.h.

Konstruktoren i klassen Lamp har følgende prototype og beskrivelse:

Lamp( int pow );


Parametre: Integer med den værdi som power skal have.
Returværdi: Ingen
Beskrivelse: Skal initialisere myDimmer objektet – og ikke andet.

e) Skriv koden til konstruktoren.

Metoden moreLight() skal skrue op for lyset ved at kalde metoden powerUp().

f) Skriv koden til metoden moreLight().

OPGAVE 3
Denne opgave skal skrives i C
a) Skriv et program (main) hvori du erklærer et array med 30 pladser. Arrayet skal kunne
indeholde valutabeløb – f.eks. 56.95. Alle pladser i arrayet skal initialiseres til 0.

b) Skriv herefter en løkke (i main), hvori arrayet fyldes med tal, som brugeren indtaster på
tastaturet. Indtastningerne skal fortsætte, indtil brugeren indtaster et negativt tal. Dvs. det er
ikke sikkert, at hele arrayet bliver fyldt op med tal fra brugeren.

c) Skriv nu en ny funktion med prototypen

int count( float *myPtr, const int SIZE, float min, float max );

Funktionen modtager et array af den type, du erklærede i opgave 3a. Funktionen skal så
gennemløbe dette array via pointeren myPtr og tælle hvor mange tal i arrayet, der ligger
mellem min og max begge inklusiv. Dette antal skal til slut returneres.

d) Funktionen count() skal kaldes fra den main –funktion, du skrev i opgave 3a og 3b. Skriv
den programlinie, som kalder funktionen count() i din main-funktion. Funktionen skal
søge efter tal mellem 25 og 75.
Vintereksamen Dec12/Jan13
OPGAVE 1 (10%)

Denne opgave skal skrives i C

a) Skriv en while-løkke, hvori brugeren kan indtaste et helt tal. While-løkken skal
fortsætte så længe brugeren ikke indtaster tallet 10.

OPGAVE 2 (30%)

Denne opgave skal skrives i C

a) Skriv et lille program (main) hvori du erklærer et heltals array med 500 pladser. Alle
500 pladser skal initialiseres til nul.

b) Tilføj nu noget kode der gør, at brugeren kan indtaste 5 tal på tastaturet. De
indtastede tal skal gemmes på de første 5 pladser i arrayet.

c) Antag, at du har en funktion kaldet sorterArray(), som kan sortere et heltals


array. Hvordan vil prototypen for den funktion se ud?

d) Antag, at du vil sortere dit array fra spørgsmål a) ved hjælp af funktionen
sorterArray() fra spørgsmål c).
Skriv den linie kode du så skal tilføje i main() (den linie hvor du kalder funktionen
sorterArray() ).

I de efterfølgende opgaver skal du arbejde med et C++ software program til en elevations-
seng – dvs. en seng hvor hovedenden og fodenden hver i sær kan hæves og sænkes af
en motor. Sengen har derfor to motorer og en fjernbetjening og programmets design frem-
går af nedenstående klassediagram. NB. Klassen RemoteControl indgår ikke i nedenstå-
ende opgaver.

<<utility>>
main

+ main(): int
Bed Motor
- remote: RemoteControl - port_: int
- headMotor: Motor - level_: int
- footMotor: Motor
+ setLevel(int): void
+ run(): void + getLevel( ): int
+ up( ): void
+ down( ): void

RemoteControl
OPGAVE 3 (35%)

Denne opgave omhandler klassen Motor og skal skrives i C++

Klassen Motor skal have en explicit constructor Motor(int port). Constructoren skal
initialisere de to attributer port_ og level_.
Attributen level_ skal initialiseres til 0. Attributen port_ skal initialiseres til port hvis
port har en gyldig værdi (0, 1 eller 2) ellers skal der udskrives ”Fejl i portnummer –
program lukkes” og programmet skal afsluttes.

Metoderne i klassen Motor skal implementeres i filen Motor.cpp.

a) Skriv koden til constructoren for klassen Motor.

b) Skriv koden til metoden getLevel().

c) Skriv koden til metoden setLevel(). Gyldige værdier for level_ er fra og med 0 til
og med 5.

Herunder ser du et aktivitetsdiagram for metoden up().

d) Skriv koden til metoden up(). Koden skal følge det viste aktivitets-diagram og du
skal anvende NXT-funktioner til motorstyring og pausestyring.

Opgavesættet fortsættes næste side


OPGAVE 4 (15%)

Denne opgave omhandler klassen Bed og skal skrives i C++

Klassen Bed skal have en explicit constructor med prototypen

Bed( int headPort, int feetPort)

Constructoren skal initialisere de to objekter headMotor og feetMotor . Derudover skal


constuctoren intet gøre.

a) Skriv koden for hele headerfilen Bed.h med definitionen af klassen Bed.

b) Skriv koden til constructoren for klassen Bed.

OPGAVE 5 (10%)

Denne opgave omhandler et testprogram til klassen Bed og skal skrives i C++

Du skal nu skrive et lille testprogram (main). Heri skal du erklære et objekt af klassen Bed
og derefter kalde metoden run().

a) Skriv koden til main().


Reeksamen Jan13
OPGAVE 1 (10%)

Denne opgave skal skrives i C

a) Skriv en for-løkke, som udskriver 10-tabellen fra og med 10 til og med 990 – altså
tallene 10 20 30 40 ……..970 980 990.

OPGAVE 2 (30%)

Denne opgave skal skrives i C

a) Skriv et lille program (main) hvori du erklærer en pointer til en tekststreng. Pointeren
skal initialiseres til strengen ”Ukendt”.

b) Tilføj noget kode der gør, at brugeren kan indtaste et ord fra tastaturet. Det første
tegn, i det ord brugeren indtaster, skal være et stort bogstav. Hvis det ikke er det,
skal brugeren indtaste et nyt ord. Dette skal fortsættes så længe brugeren ikke
taster et ord med stort begyndelses-bogstav.
Det indtastede ord skal gemmes vha. pointeren fra spørgsmål a).

c) Antag, at du har en funktion kaldet antalTegn(), som kan tælle det antal tegn, der
er i en tekststreng og returnere antallet. Skriv prototypen for denne funktion?

d) Antag, at du vil tælle antallet af tegn i tekststrengen fra spørgsmål a) ved hjælp af
funktionen antalTegn() fra spørgsmål c).
Skriv den kode du så skal tilføje i main() (bl.a. den linie hvor du kalder funktionen
antalTegn() ).

I de resterende opgaver skal du arbejde med et software program til et elektrisk rullegardin
(curtain) – dvs. et rullegardin som kan hæves og sænkes af en motor ved hjælp af en
fjernbetjening. Systemet har derfor et rullegardin, en motor og en fjernbetjening. Program-
mets design fremgår af nedenstående klassediagram, men klassen RemoteControl
indgår ikke i nedenstående opgaver.

<<utility>>
main

+ main(): int
Curtain Motor
- remote: RemoteControl - port_: char
- motor: Motor
- isUp: bool + getPort( ): char
+ rollUp( ): void
+ startSystem(): void + rollDown( ): void

RemoteControl
OPGAVE 3 (35%)

Denne opgave omhandler klassen Motor og skal skrives i C++

Klassen Motor skal have constructoren Motor( char port ). Constructoren skal
initialisere attributen port_ til port hvis port har en gyldig værdi (A, B eller C) ellers skal
der udskrives ”Portfejl – program lukkes” og programmet skal afsluttes.

Alle metoderne i klassen Motor skal implementeres i filen Motor.cpp.


Opgaven fortsættes næste side

a) Skriv koden til constructoren for klassen Motor.

b) Skriv koden til metoden getPort().

Herunder ser du et aktivitetsdiagram for metoden rollDown().

c) Skriv koden til metoden rollDown(). Koden skal følge det vist aktivitetsdiagram og
du skal anvende NXT-funktioner til motorstyring.

Opgavesættet fortsættes næste side


OPGAVE 4 (15%)

Denne opgave omhandler klassen Curtain og skal skrives i C++

Klassen Curtain skal have en constructor med prototypen

Curtain(char motorPort)

Constructoren skal initialisere objektet motor. Derudover skal constuctoren initialisere isUp
til true.

c) Skriv koden for hele headerfilen Curtain.h med definitionen af klassen Curtain.

Alle metoderne i klassen Curtain skal implementeres i filen Curtain.cpp.

d) Skriv koden til constructoren for klassen Curtain.

OPGAVE 5 (10%)

Denne opgave omhandler et testprogram til klassen Curtain og skal skrives i C++

Du skal nu skrive et lille testprogram (main). Heri skal du erklære et array med 3 objekter af
klassen Curtain. Objekterne skal initialiseres til hver sin port ( A, B og C). Herefter skal
metoden startSystem() kaldes for alle tre objekter.

b) Skriv koden til main().


Vintereksamen Dec13/Jan14
OPGAVE 1 (30%)

Denne opgave skal skrives i sproget C.

a) Skriv et lille program hvori du opretter et array, der indeholder følgende tal: 2.1, 4.3, 1.7 og
11.8.

b) Skriv koden til en lille funktion bigNumber(), som kan undersøge, om der findes et tal, der
er større end 10 i et givet array. Så snart der findes et tal der er større end 10, skal funktionen
returnere dette tal. Hvis der ikke findes at tal større end 10, skal funktionen returnere 0.
Funktionens prototype skal være:

double bigNumber(double array[], int SIZE);

Der skal anvendes en for-løkke i funktionen.

c) Forklar hvor du vil placere funktionens prototype og hvor du vil placere den kode du har
skrevet i b) (implementeringen af funktionen).

d) Tilføj nu noget kode til programmet fra spørgsmål a), hvor du ved hjælp af funktionen
bigNumber() undersøger om dit array indeholder et tal, der er større end 10. Hvis der
findes et tal større end 10 skal dette tal udskrives på skærmen ellers skal der udskrives en
tekst, der fortæller, at der ikke er noget tal større end 10.

OPGAVE 2 (20%)

Denne opgave skal skrives i sproget C.

a) Skriv definitionen (koden) for den struct der er vist i figuren herunder.

Circle
x_ : int
y_ : int
radius_ : float

b) Skriv et lille program hvori du opretter to Circle variable – en uden værdier og en med
værdierne centrum (2, 4) og radius 7.3.

c) Tilføj nu noget kode hvor du giver de tre member variable i den første Circle variabel
nogle værdier. Værdierne skal indtastes fra tastaturet.

Opgavesættet fortsættes på næste side


OPGAVE 3 (50%)

Denne opgave skal skrives i sproget C++.

Herunder ser du et klassediagram med de to klasser Elev og Klasse. En Klasse indeholder


maksimalt 30 Elever.

Klasse
Elev
- klasse_: string
- alleElever_[MAX_ANTAL]: Elev - navn_ : string
- antalIndskrevneElever_: int - hoejde_ : int
1
0..30 + setNavn( string ): void
+ indskrivElev( string, int ): void
+ getNavn( ): string
+ getAntalIndskrevneElever( ): int
+ setHoejde( int ): void
+ getKlasse( ): string
+ getHoejde( ): int
+ getElevNavn( int ): string
+ getElevHoejde( int ): int
+ middelHoejde( ): float

Klassen Elev skal have en kombineret default/explicit constructor med default-værdier ”NN” og 0.

a) Skriv koden for hele headerfilen Elev.h.

Højden for en elev skal være et positivt tal.

b) Skriv koden for metoderne setHoejde() og getHoejde() sådan som de skulle


implementeres i filen Elev.cpp. NB! Husk validering!

På bilag 1 kan du se koden for headerfilen Klasse.h og på bilag 3 kan du se et lille testprogram.
Metoden string getElevNavn(int index) skal returnere navnet på den elev, som ligger på
plads index i Elev-arrayet.

c) Skriv koden for metoden getElevNavn().

Metoden float middelHoejde() skal beregne gennemsnitshøjden for de elever, der er i klassen
og returnere denne.

d) Skriv koden for metoden middelHoejde().

Metoden void indskrivElev(string navn, int hoejde) kan beskrives ved pseudokoden
på bilag 2.

e) Skriv koden for metoden indskrivElev().


BILAG 1

#pragma once
#include "Elev.h"
#include <string>

using namespace std;

const int MAX_ANTAL = 30;

class Klasse
{
public:
Klasse(string klasse);
void indskrivElev( string navn, int hoejde );
int getAntalIndskrevneElever() const;
string getKlasse() const;
string getElevNavn(int index) const;
int getElevHoejde(int index) const;
float middelHoejde() const;
private:
string klasse_;
Elev alleElever_[MAX_ANTAL];
int antalIndskrevneElever_;
};

BILAG 2

Hvis antal indskrevne elever er mindre end det maksimale antal elever

Gem navnet og højden på den næste elev i elev-arrayet

Tæl antallet af indskrevne elever en op

Ellers

Udskriv: Der kan ikke være flere elever i klassen


BILAG 3

#include "Klasse.h"
#include <iostream>
#include <string>

using namespace std;

int main()
{
Klasse minKlasse("6.A");
string navn;
int hoejde;

for(int i=0; i<MAX_ANTAL_ELEVER; i++)


{
cout << "Indtast elevens navn: ";
cin >> navn;
cout << "Indtast elevens højde: ";
cin >> hoejde;

minKlasse.indskrivElev( navn, hoejde );


}

cout << "Gennemsnitshøjden i " << minKlasse.getKlasse() << " er ";


cout << minKlasse.middelHoejde() << " cm" << endl;

cout << "Følgende elever er over 140 cm og kan derfor\n";


cout << "deltage i turen til Djurs Sommerland:\n";

for(int i=0; i<minKlasse.getAntalIndskrevneElever(); i++)


{
if( minKlasse.getElevHoejde(i) >= 140 )
cout << minKlasse.getElevNavn(i) << endl;;
}

return 0;
}
Reeksamen Jan14
OPGAVE 1 (30%)

Denne opgave skal skrives i sproget C.

e) Skriv et lille program hvori du opretter et array, hvori der er plads til 100 hele tal. Alle
pladser skal initialiseres til 0.

f) Skriv koden til en lille funktion fillArray(), som kan fylde et array med tilfældige tal
mellem 1 og 99. Når summen af de tal, der er foreløbig er fyldt i arrayet, bliver større end
1000, skal der stoppes med at fylde tal i arrayet. Funktionen skal herefter returnere,
antallet af tal der er fyldt ind i arrayet. Funktionens prototype skal være:

int fillArray(int array[], int SIZE);

NB! Der skal anvendes en while-løkke i funktionen.

g) Tilføj nu noget kode til programmet fra spørgsmål a), hvor du kalder funktionen
fillArray() og derefter udskriver de værdier de værdier, som er fyldt i arrayet.
NB! Der skal anvendes en for-løkke til at udskrive arrayet.

h) Skriv hvilke biblioteker der er nødvendige at inkludere for at dit program virker..

OPGAVE 2 (20%)

Denne opgave skal skrives i sproget C.

d) Skriv definitionen (koden) for den struct der er vist i figuren herunder.

Person
navn_ : char *
alder_ : int

e) Skriv et lille program hvori du opretter to Person variable – en der initialiseres til NULL og
0 og en der initialiseres med værdierne ”Kurt” og 37.

f) Tilføj nu noget kode hvor du giver de to member variable i den første Person variabel nogle
værdier. Værdierne skal indtastes fra tastaturet.

Opgavesættet fortsættes på næste side


OPGAVE 3 (50%)
Denne opgave skal skrives i sproget C++.
Herunder ser du et klassediagram med de to klasser Lejlighed og Ejendom. En Ejendom indeholder
maksimalt 10 Lejligheder.

Ejendom Lejlighed
- adresse_: string - etage_: string
- alleLejligheder_[MAX_ANTAL]: Lejlighed - vaerelser_: int
- antalUdlejede_: int 1 - areal_: int
0..10
- husleje_: float
+ getAdresse( ): string - udlejet_: bool
+ udlejLejlighed( string ): void
+ getAntalUdlejede( ): int + getEtage( ): string
+ harLedige( ): bool + getVaerelser( ): int
+ printLedige( ): void + getAreal( ): int
+ printAlle( ): void + setHusleje( float ): void
+ getHusleje( ): float
+ setUdlejet( bool ): void
+ getUdlejet( ): bool
+ printInfo( ): void

Klassen Lejlighed skal have en kombineret default og explicit constructor. Default-værdierne er


hhv. ”#.XX” (etage), 0 (værelser) og 0 (areal). Konstruktoren skal prototypen

Lejlighed(string etage, int vaerelser, int areal);

f) Skriv koden for hele headerfilen Lejlighed.h.

Konstruktoren skal sætte de tre første attributter ud fra de modtagne parametre. Antal værelser skal
være mellem 1 og 6 begge inklusive. Areal skal være positiv. Attributten husleje_ sættes til 0 og
udlejet_ sættes til false.

b) Skriv koden for konstruktoren sådan som den skulle implementeres i filen Lejlighed.cpp.

Huslejen for en lejlighed skal selvfølgelig være et positivt tal (eller default 0).

c) Skriv koden for metoderne setHusleje() og getHusleje() sådan som de skulle


implementeres i filen Lejlighed.cpp.

Metoden printInfo() skal udskrive informationer om lejligheden i følgende format:

3.TH: 3 vær, 74 m2, 6400 kr/md, ledig (hvis lejligheden er ledig)


1.TV: 2 vær, 48 m2, 4200 kr/md, udlejet (hvis lejligheden er udlejet)

d) Skriv koden for metoden printInfo().

På bilag 1 kan du se koden for headerfilen Ejendom.h.


Metoden printLedige() skal udskrive informationer om alle de ledige lejligheder i ejendommen

e) Skriv koden for metoden printLedige().


BILAG 1

#pragma once
#include "Lejlighed.h"
#include <string>

using namespace std;

const int MAX_ANTAL = 10;

class Ejendom
{
public:
Ejendom(string adresse);
string getAdresse() const;
void udlejLejlighed( string etage );
int getAntalUdlejede() const;
bool harLedige() const;
void printLedige() const;
void printAlle() const;
private:
string adresse_;
Lejlighed alleLejligheder_[MAX_ANTAL];
int antalUdlejede_;
};
Vintereksamen Dec14/Jan15
OPGAVE 1 (25%)
Denne opgave skrives i C.

I denne opgave skal du skrive et lille program. Programmet skal have følgende funktionalitet:
- Brugeren skal bedes om at indtaste 5 decimaltal
- Summen af disse 5 tal skal beregnes og udskrives på skærmen
- Programmets output skal være som vist i de to eksempler herunder

Der er følgende krav til den måde du skriver dit program:


- Programmet skal skrives i C
- Du skal anvende et array og mindst en for-løkke
- Hvis man ønsker at ændre programmet således, at brugeren kan indtaste flere tal (f.eks. 50)
skal dette kunne gøres ved en enkelt ændring – dvs. ved at rette tallet 5 til f.eks. 50 et sted i
programmet skal det straks virke med det nye antal indtastninger

Opgavesættet fortsættes på næste side


OPGAVE 2 (50%)
Denne opgave skrives i C++

Dit projektteam har fået til opgave at skrive et program til et speditørfirma. Firmaet har deres egne
lastbiler. De har 3 slags lastbiler:
- standard lastbiler (transporterer gods ved normal lufttemperatur (fastsat til +20 oC))
- kølelastbiler (transporterer gods ved +5 oC)
- frostlastbiler (transporterer gods ved -18 oC)
Hver lastbil er karakteriseret ved et unikt nummer, en godstemperatur, et volumen og en godstype.
I det samlede program skal derfor indgå klassen Lastbil, givet ved følgende klassediagram.

Lastbil
- vognNr_: int
- temperatur_: int
- volumen_: int
- godsType_: string

+ setGodsType(string): void
+ getGodsType( ): string
+ printData( ): void

Udover de viste medlemsfunktioner skal klassen have en eksplicit defineret constructor med
prototypen:
Lastbil(int nr, int temp, int vol);

a) Skriv koden til hele header-filen ”Lastbil.h” med definitionen af klassen Lastbil.

Klassens medlemsfunktioner skal implementeres i en source-fil kaldet ”Lastbil.cpp”.

b) Skriv koden til metoderne setGodsType(string) og getGodsType().

Klassens constructor skal sætte værdien af attributten vognNr_ til parameteren nr hvis denne har
en gyldig værdi – ellers anvendes default-værdien. Tilsvarende for attributterne temperatur_ og
volumen_. Atributten godsType_ skal sættes til ”Tom”. Gyldige værdier og default-værdier er
Gyldige værdier Default-værdier
1 ≤ vognNr_ ≤ 99 1
temperatur_: -18, +5, +20 +20
50 ≤ volumen_ ≤ 150 50

c) Skriv koden til implementeringen af constructoren.

Opgave 2 fortsættes på næste side


Herunder ser du et lille test-program for klassen Lastbil.

#include "Lastbil.h"

int main()
{
Lastbil scania( 0, 0, 0 );

scania.printData();

Lastbil volvo( 13, 5, 144 );

volvo.setGodsType( "Frugter" );

volvo.printData ();

Lastbil mercedes( 51, -18, 75 );

mercedes.setGodsType ( "Is" );

mercedes.printData ();

cout << endl;

return 0;
}

Når programmet eksekveres fremkommer følgende skærmbillede.

d) Skriv koden til implementeringen af funktionen printData().

Opgavesættet fortsættes på næste side


OPGAVE 3 (25%)
Denne opgave skrives i C++

Klassen Lastbil skal indgå i følgende design:

<<utility>>
main

+ main(): int

Lastbil

Godstransport - vognNr_: int


- temperatur_: int
- truck_: Lastbil - volumen_: int
- A_: string - godsType_: string
- B_: string
+ setGodsType(string): void
+ printTransport( ): void + getGodsType( ): string
+ printData( ): void

Klassen Godstransport repræsenterer en transport af gods fra A til B.

a) Hvad betyder symbolet på figuren?

Klassen skal have en constructor med prototypen:

Godstransport(int nr, int temp, int vol, string godsType,


string fra, string til);

Constructoren skal anvende de respektive parametre til at sætte værdierne af samtlige attributter i
klassen Godstransport – dvs. også Lastbil-objektet truck_.

b) Skriv koden for constructoren.

Koden for metoden printTransport() ser du her:

void Godstransport::printTransport() const


{
truck_.printData();
cout << "Rute: Fra " << A_ << " til " << B_ << endl;
}

Opgave 3 fortsættes på næste side


c) Skriv et lille program (main) hvori du opretter et objekt af klassen Godstransport og
derefter kalder metoden printTransport(). Programmet skal give følgende output på
skærmen:
Reeksamen Jan15
OPGAVE 1 (20%)
Denne opgave skrives i C

I denne opgave skal du skrive et lille program, hvori en bruger skal indtaste et helt tal større end 1.
Hvis brugeren ikke indtaster et tal større end 1, skal der udskrives en fejlmeddelelse og der startes
forfra – dvs. at brugeren skal indtaste et nyt tal. Dette fortsættes, så længe brugeren ikke indtaster et
korrekt tal. Efter at brugeren har indtastet et korrekt tal, skal programmet undersøge, om det
indtastede tal er et lige tal og udskrive svaret på skærmen (et tal er lige, hvis 2 går op i tallet – dvs.
at resten ved division med 2 er 0). De relevante udskrifter er:
Besked til brugeren (tekst 1): "Indtast et helt tal > 1 : "
Fejlmeddelelse (tekst 2): "Du skal indtaste et tal > 1"
Udskrift hvis tallet er lige (tekst 3): "Tallet 64 er et lige tal"
Udskrift hvis tallet er ulige (tekst 4): "Tallet 37 er et ulige tal"

NB! Tallene 64 og 37 er blot eksempler – det skal selvfølgelig være det tal, som brugeren har
indtastet.

a) Skriv koden til programmet. Du kan eventuelt følge aktivitetsdiagrammet på bilag 1.

OPGAVE 2 (20%)
Denne opgave skrives i C++

Herunder ser du UML-notationen for klassen Person.

Person
- navn_: string
- personnummer_: string

+ print( void ): void

Ud over den viste medlemsfunktion skal klassen have en explicit-constructor med prototypen

Person( string, string );

a) Skriv koden til hele header-filen Person.h med definitionen af klassen Person.

På bilag 2 ser du koden til source-filen Person.cpp med implementeringen af klassen Person.

b) Forklar (eventuelt ved hjælp af eksempler), hvad constructoren gør.

Opgavesættet fortsættes på næste side


OPGAVE 3 (50%)
Denne opgave skrives i C++

I denne opgave skal du arbejde med en klasse kaldet Bankkonto, der skal bruges til at registrere
oplysninger om en bankkonto. En given bankkonto skal indeholde følgende oplysninger:
kontohaverens navn og personnummer, kontonummer og saldo. Det er derfor hensigtsmæssigt at
gøre brug af klassen Person fra opgave 1. Sammenhængen mellem klasserne er givet ved UML-
klassediagrammet herunder.

Bankkonto
- ejer_: Person
<<utility>> - kontonummer_: int
Hovedprogram - saldo_: double

+ indsaetBeloeb( double ): void


+ main( ): int + haevBeloeb( double ): bool
+ getSaldo( ): double
+ print( ): void

Person
- navn_: string
- personnummer_: string
+ print( ): void

På bilag 3 kan du se koden for header-filen Bankkonto.h med definitionen af klassen


Bankkonto. Klassens constructor og øvrige medlemsfunktioner kan beskrives således:

Bankkonto( string navn, string personnr, int kontonr );


Parametre: En streng med navn, en streng med personnummer og en integer
med kontonummer.
Returværdi: Ingen.
Beskrivelse: Strengene skal ”sendes videre” til constructoren for attributten
ejer_. Attributen kontonummer_ skal sættes explicit vis
parameteren – gyldige værdier: 1000-9999. Er værdien ugyldig
skal programmet lukke ned. Attributen saldo_ skal sætte til 0.

Opgave 3 fortsættes på næste side


void indsaetBeloeb( double beloeb );
Parametre: En double med det beløb, der skal indsættes.
Returværdi: Ingen.
Beskrivelse: Hvis det modtagne beløb er positivt, skal funktionen lægge dette
beløb til saldo_.

bool haevBeloeb( double beloeb );


Parametre: En double med det beløb, der skal hæves.
Returværdi: true hvis det modtagne beløb kan hæves fra kontoen.
false hvis det modtagne beløb ikke kan hæves fra kontoen, eller hvis
det modtagne beløb ikke er positivt.
Beskrivelse: Hvis det modtagne beløb er positivt, skal funktionen trække dette
beløb fra saldo_ og returnere true. Hvis det modtagne beløb
ikke er positivt returneres false. Hvis beløbet er så stort, at
saldoen bliver mindre end -1000 kr skal beløbet ikke fratrækkes og
der skal returneres false.

double getSaldo() const;


Parametre: Ingen.
Returværdi: Værdien af saldo_.
Beskrivelse: Funktionen skal returnere attributten saldo_.

void print() const;


Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Funktionen skal udskrive samtlige kontooplysninger i følgende
format:
Navn: Ib Brun
Personnr: 2902651234
Kontonr: 2983
Saldo: 304.56 kr.

a) Skriv koden til source-filen Bankkonto.cpp med implementeringen af de 5


medlemsfunktioner i klassen Bankkonto.

Opgavesættet fortsættes på næste side


OPGAVE 4 (10%)
Denne opgave skrives i C++

I denne opgave skal du skrive koden til en lille funktion, som kan gennemløbe et array med objekter
af klassen Bankkonto og udskrive data for de konti, som har negativ saldo. Funktionen kan beskri-
ves således:

void udskrivNegativeSaldoer( Bankkonto * arrayPtr, const int SIZE );


Parametre: En pointer til det array, som skal gennemløbes.
En integer med arraystørrelsen.
Returværdi: Ingen.
Beskrivelse: Funktionen skal gennemløbe arrayet. For hver konto (dvs. hver
plads i arrayet) undersøges, om saldoen er negativ. Hvis saldoen
negativ, skal kontoens data (ejer, personnr, kontonr og saldo)
udskrives. Er saldoen ikke negativ gøres intet.

a) Skriv koden til funktionen udskrivNegativeSaldoer().

Bilag findes på de næste 3 sider


BILAG 1 (opgave 1)
BILAG 2 (opgave 2)

1 #include "Person.h"
2
3 Person::Person( string navn, string nummer)
4 {
5 if( nummer.length() != 10 )
6 {
7 cout << "Fejl i data. Programmet lukkes ned." << endl;
8 exit(1);
9 }
10
11
12 for( int i=0; i<10; i++ )
13 {
14 if( !isdigit( nummer[i] ) )
15 {
16 cout << "Fejl i data. Programmet lukkes ned." << endl;
17 exit(1);
18 }
19 }
20
21 for( int i=0; navn[i] != '\0'; i++ )
22 {
23 if( !isalpha( navn[i] ) && navn[i] != ' ' )
24 {
25 cout << "Fejl i data. Programmet lukkes ned." << endl;
26 exit(1);
27 }
28 }
29
30 navn_ = navn;
31 personnummer_ = nummer;
32 }
33
34
35 void Person::print( void ) const
36 {
37 cout << "\nNavn : " << navn_ << endl;
38 cout << "Personnr: " << personnummer_ << endl;
39 }
BILAG 3 (opgave 3)

1 #pragma once
2
3 #include "Person.h"
4 #include <iostream>
5
6 using namespace std;
7
8
9 class Bankkonto
10 {
11 public:
12 Bankkonto( string navn, string personnr, int kontonr );
13 void indsaetBeloeb( double beloeb );
14 bool haevBeloeb( double beloeb );
15 double getSaldo() const;
16 void print() const;
17 private:
18 Person ejer_;
19 int kontonummer_;
20 double saldo_;
21 };
Vintereksamen Dec15/Jan16
OPGAVE 1 (10%)
Denne opgave skal løses i C.

Skriv en for-løkke der udskriver alle tal mellem 5 og 50, begge tal inklusive, som kan divideres med
5. Dvs. følgende tal skal udskrives: 5 10 15 20 …… 50 (tallene mellem 20 og 50 er ikke vist
men skal selvfølgelig også udskrives).

OPGAVE 2 (20%)
Denne opgave skal løses i C.

Skriv en funktion, som modtager et hel tal (integer) og udskriver den lille gangetabel for det
pågældende tal. Funktionens prototype er:

void printMultiplicationTable( int number );

Hvis det modtagne tal er mellem 1 og 10 (begge inklusive) skal den lille gangetabel for det
modtagne tal udskrives som vist på nedenstående skærmdump.
Ellers skal der udskrives en fejlmeddelelse som vist på nedenstående skærmdump.

Følgende 3 kald af funktionen skal producere nedenfor viste skærmdump:

printMultiplicationTable( 3 );
printMultiplicationTable( 8 );
printMultiplicationTable( 13 );

Skærmdump:

Opgavesættet fortsættes på næste side


OPGAVE 3 (20%)
Denne opgave skal løses i C.

Skriv koden for en funktion, som kan modtage et char array og undersøge, om det modtagne array
indeholder en gyldig nummerplade: Funktionens prototype er:

int checkLicensePlate( char licensePlate[] );

Kravene til nummerpladen er følgende:

- Den skal indeholde 7 karakterer


- De første 2 karakterer skal være store bogstaver (Æ, Ø og Å er ikke gyldige)
- De 5 sidste karakterer skal være tal mellem 0 og 9 begge inklusive.

Hvis blot et af disse krav ikke er opfyldt skal funktionen returnere 0.


Hvis alle krav er opfyldt skal funktionen returnere 1.
Eksempler:
- checkLicensePlate("BG73923") vil returnere 1, da alle krav er opfyldt
- checkLicensePlate("B173923") vil returnere 0, idet 2. bogstav ikke er i [A..Z]
- checkLicensePlate("BG73X23") vil returnere 0, idet 3. ciffer ikke er i [0..9]
- checkLicensePlate("BG7392") vil returnere 0, idet nummerpladen er for kort
- checkLicensePlate("BG739236") vil returnere 0, idet nummerpladen er for lang

OPGAVE 4 (40%)
Denne opgave skal løses i C++

Dit projektteam har fået til opgave at skrive et program til et hyrevognsfirma. Firmaet har sine egne
taxa’er.
Hver taxa er karakteriseret ved 4 attributer: Et unikt vognnummer (taxa’ens ID), det maksimale
antal kunder som taxa’en kan medtage, om taxa’en er i drift og om taxa’en er ledig.
I det samlede program skal derfor indgå klassen Taxa, givet ved følgende UML klassediagram.

Taxa
- vognNummer_: int
- maxAntalKunder_: int
- erIDrift_: bool
- erLedig_: bool
+ setErIDrift( bool ): void
+ setErLedig( bool ): void
+ udskrivStatus( ): void

Opgave 4 fortsættes på næste side


Udover de viste medlemsfunktioner skal klassen have en eksplicit defineret constructor med
prototypen:
Taxa(int vognNummer, int maxAntalKunder);

a) Skriv koden til hele header-filen ”Taxa.h” med definitionen af klassen Taxa.

Klassens medlemsfunktioner skal implementeres i en source-fil kaldet ”Taxa.cpp”.


Metoderne setErIDrift(bool iDrift) og setErLedig(bool ledig) er almindelige set-
metoder uden validering.

b) Skriv koden til de to metoder setErIDrift(bool iDrift) og setErLedig(bool


ledig), sådan som de skal skrives i filen ”Taxa.cpp”.

Klassens explicit definerede constructor skal sætte værdierne af de 4 attributer.

- Attributen erIDrift_ skal sættes til false og attributen erLedig_ til true.
- Attributterne vognNummer_ og maxAntalKunder_ sættes til de værdier som constructoren
modtager via de to parametre.
Parametrene skal dog valideres jævnfør de gyldige værdier nedenfor. Hvis en attribut har en ugyldig
værdi anvendes i stedet default-værdien
Gyldige værdier Default-værdier
100 ≤ vognNummer_ ≤ 999 100
4 ≤ maxAntalKunder_ ≤ 8 4

c) Skriv koden til implementeringen af constructoren som den skal skrives i filen ”Taxa.cpp”.

I et lille test-program (main()) skal der erklæres et objekt af klassen Taxa. Herefter skal metoden
udskrivStatus() kaldes.
Når test-programmet eksekveres skal der fremkomme følgende skærmbillede. Koden til metoden
udskrivStatus() kan ses på bilag 1.

d) Skriv koden til test-programmet (main()).

Opgavesættet fortsættes på næste side


OPGAVE 5 (10%)
Denne opgave skal løses i C++

Klassen Taxa skal indgå i det viste design. Som det ses, har en vognmand kun en taxa.

<<utility>>
main

+ main(): int

Taxa
Vognmand
- vognNummer_: int
- navn_: string 1 - maxAntalKunder_: int
- taxa_: Taxa 1
- erIDrift_: bool
- erLedig_: bool

+ udskrivData( ): void + setErIDrift( bool ): void


+ setErLedig( bool ): void
+ udskrivStatus( ): void

Som det ses, har en vognmand kun en taxa.

a) Forklar kort og præcist hvad symbolet betyder.

Klassen Vognmand skal have en constructor med prototypen:

Vognmand( string navn, int vognNummer, int maxAntalkunder );

Constructoren skal anvende de respektive parametre til at sætte værdierne af samtlige attributter i
klassen Vognmand – dvs. også Taxa-objektet taxa_.

b) Skriv koden for constructoren til klassen Vognmand.


BILAG 1

void Taxa::udskrivStatus() const


{
cout << "Vogn " << vognNummer_ << endl;
cout << " " << maxAntalKunder_ << " pladser" << endl;
cout << (erIDrift_ ? " I" : " Ikke i") << " drift" << endl;
cout << (erLedig_ ? " Ledig" : " Optaget") << endl << endl;
}
Reeksamen Jan16
OPGAVE 1 (10%)
Denne opgave skrives i C

Skriv en do/while-løkke hvori der indlæses en karakter (char) fra tastaturet. Løkken skal fortsætte
med at indlæse en karakter så længe den indtastede karakter ikke er et lille bogstav. Når den ind-
læste karakter er et lille bogstav, skal løkken afsluttes.

OPGAVE 2 (20%)
Denne opgave skrives i C

Her ses prototypen for en funktion som kan modtage et helt tal (int):

int roulette( int number );

Funktionen skal generere et tilfældigt tal mellem 0 og 36 begge inklusive. Hvis number
(parameteren) og det generede tilfældige tal er ens returneres 1. Ellers returneres 0.

a) Skriv implementeringen af funktionen roulette().

I et test-program (main()) skal funktionen roulette() kaldes med tallet 13 og svaret fra funk-
tionen skal gemmes i en variabel. Hvis svaret er 1 udskrives ”Tillykke du har vundet 10.000 kr.”.
Hvis svaret er 0 udskrives ”Beklager, du har tabt – igen”. Dette skal gentages præcis 10 gange.

b) Skriv koden for main().

OPGAVE 3 (15%)
Denne opgave skrives i C

Her ses prototypen for en funktion som kan modtage en tekststreng (char array):

void findOgErstat( char *tekst );

Funktionen skal gennemløbe tekststrengen og erstatte alle forekomster af h og H med # og alle


forekomster af a og A med @. Hvis følgende test-program

Opgavesættet fortsættes på næste side


int main()
{
char tekstArray[] = "Husk altid at holde hovedet h\x9Bjt";

printf("%s\n", tekstArray);

findOgErstat( tekstArray );

printf("%s\n", tekstArray);

return 0;
}

eksekveres, skal der fremkomme dette skærmbillede:

a) Skriv implementering af funktionen findOgErstat().

OPGAVE 4 (35%)
Denne opgave skrives i C++

Dit projektteam skal lave et program til en hotelkæde. Du har derfor fået til opgave at skrive en
klasse Hotelroom, der repræsenterer et hotelværelse. Klassen er givet ved UML klassediagrammet
herunder.
Hotelroom
- roomNumber_: int
- type_: char
- free_: bool

+ setRoomNumber( int ): void


+ getRoomNumber( ): int
+ setType( char ): void
+ getType( ): char
+ setFree( bool ): void
+ getFree( ): bool
+ printRoom( ): void

Opgave 4 fortsættes på næste side


Udover de viste medlemsfunktioner skal klassen have en eksplicit defineret constructor med
prototypen:
Hotelroom(int roomNumber, char type);

a) Skriv koden til hele header-filen ”Hotelroom.h” med definitionen af klassen Hotelroom.

Attributten roomNumber_ må kun antage værdier i intervallet [0; MAX_ROOMS-1], hvor


MAX_ROOMS er en global konstant defineret i ”Hotelroom.h”. Metoden setRoomNumber(int
roomNumber) skal sætte værdien af roomNumber_ til den modtagne parameter. Hvis parameteren
har en ugyldig værdi sættes roomNumber_ til 0.

b) Skriv koden til metoderne setRoomNumber(int roomNumber) og getRoomNumber()


sådan som de skal implementeres i filen ”Hotelroom.cpp”.

Attributten type_ repræsenterer værelsestypen. Denne kan være D for dobbeltværelse


(doubleroom) og S for enkeltværelse (singleroom). Metoden setType(char type) skal sætte
værdien af type_ til den modtagne parameter. Kun værdierne D og S er gyldige. Hvis parameteren
har en ugyldig værdi sættes type_ til S.

c) Skriv koden til metoderne setType(char type) og getType() sådan som de skal
implementeres i filen ”Hotelroom.cpp”.

Klassens constructor skal sætte værdien af attributterne roomNumber_ og type_ til de modtagne
parametre. Atributten free_ skal sættes til true.

d) Skriv koden til constructoren sådan som den skal implementeres i filen ”Hotelroom.cpp”.

Herunder ser du et lille test-program for klassen Hotelroom.

#include "Hotelroom.h"

int main()
{
Hotelroom room1(10, 'D');
Hotelroom room2(34, 'S');

room1.setFree(false);

room1.printRoom();
room2.printRoom();

return 0;
}

Opgave 4 fortsættes på næste side


Når programmet eksekveres fremkommer følgende skærmbillede.

e) Skriv koden til implementeringen af funktionen printRoom()sådan som den skal


implementeres i filen ”Hotelroom.cpp”.

OPGAVE 5 (20%)
Denne opgave skrives i C++

Klassen Hotelroom skal indgå i det herunder viste design, hvori alle hoteller har 20 værelser.

<<utility>>
main

+ main(): int

Hotelroom
- roomNumber_: int
- type_: char
- free_: bool
Hotel
1
- name_: string 20 + setRoomNumber( int ): void
+ getRoomNumber( ): int
- rooms_: Hotelroom [20]
+ setType( char ): void
+ printHotel( ): void + getType( ): char
+ setFree( bool ): void
+ getFree( ): bool
+ printRoom( ): void

Opgave 5 fortsættes på næste side


Klassen Hotel skal have en eksplicit defineret constructor med prototypen:

Hotel(string name);

Constructoren skal anvende parameter til at sætte værdien af attributten name_ og initialisere
arrayet room_. Arrayet rooms_ skal initialiseres i en for-løkke således, at roomNumber_ for hvert
Hotelroom objekt i arrayet får samme værdi som objektets index i arrayet.

Det kan antages, at klassen Hotelroom har en default constructor.

a) Skriv koden for constructoren til klassen Hotel.

Metoden printHotel() skal udskrive hotellets navn og data for samtlige værelser i hotellet.

b) Skriv koden for metoden printHotel().


Vintereksamen Dec16/Jan17
OPGAVE 1 (15%) Denne opgave løses i sproget C
Du skal skrive et program (main()) hvori der udføres følgende:

- Der erklæres en variabel number hvori der kan gemmes et kommatal tal.
- Der erklæres et array bigArray[] hvori der kan gemmes 300 kommatal tal.
- Der indlæses en værdi fra tastaturet og denne værdi gemmes i variablen number.
- Værdien af variablen number lægges ind på alle pladser i arrayet bigArray[].
- Alle pladser i arrayet udskrives på skærmen med 2 decimaler og space mellem hvert tal.

Herunder ser du et eksempel på hvordan en programkørsel ser ud hvis tallet 3.46 indtastes:

a) Skriv koden til main().

OPGAVE 2 (15%) Denne opgave løses i sproget C


I denne opgave skal du skrive koden til en funktion stringToUnsignedInteger(). Funktionen
har følgende prototype:
unsigned int stringToUnsignedInteger(const char *text);

Funktionen skal konvertere en tekststreng med tal til det tilsvarende hele tal. Hvis funktionen f.eks.
modtager strengen "1234", skal den konvertere den til tallet 1234 og returnere dette tal.
Funktionen skal fungere således:
- Hvis længden af strengen text er større end 9, returneres 0.
- Hvis blot en af karaktererne i strengen text ikke er et tal (karaktererne 0 til 9),
returneres 0.
- Ellers konverteres strengen text til det tilsvarende hele tal og dette tal returneres
(opmærksomheden henledes på funktionen atoi() fra biblioteket <string.h>).

a) Skriv implementeringen af funktionen stringToUnsignedInteger().

Opgavesættet fortsættes på næste side


OPGAVE 3 (25%) Denne opgave løses i sproget C++
Herunder ser du UML-klassenotationen for klassen Vare.

Vare
- nummer_: int
- nav n_: string
- pris_: double
- lagerAntal_: int

+ getNummer( ): int
+ getLagerAntal( ): int
+ bestil(antal: int): v oid
+ opdaterAntal(antalSolgt: int): v oid
+ print( ): v oid

Ud over de viste metoder skal klassen have en constructor med prototypen

Vare(int nummer = 0, string navn = "", double pris = 0);

Header-filen med definition af klassen Vare kan du se i den vedhæftede fil Vare.h. Bemærk heri
den globale konstant ANTAL_VARER.

De gyldige værdier for de relevante attributter er:


nummer_: Fra og med 1000 til men ikke med 1000+ANTAL_VARER
navn_: Alle
pris_: Positive tal

Herunder ser du beskrivelsen af nogle af klassens metoder.

Vare( int nummer, string navn, double pris )


Parametre: Variable med værdierne til de 3 attributter nummer_, navn_ og
pris_ .
Beskrivelse: Constructor som skal sætte værdierne af de 3 nævnte attributter.
For hver parameter gælder, at hvis dens værdi er gyldig anvendes
denne værdi til den tilhørende attribut ellers anvendes den tilhø-
rende default-værdi (se default-værdier i funktionens prototype
ovenfor). Attributten lagerAntal_ sættes altid til 0.

void bestil( int antalBestil )


Parametre: Variable med det antal der skal bestilles af varen.
Returværdi: Ingen.
Beskrivelse: Metode som skal øge værdien af attributten lagerAntal_ med
antalBestilt.

Opgave 3 fortsættes på næste side


void opdaterAntal( int antalSolgt )
Parametre: Variable med det antal der er solgt af varen.
Returværdi: Ingen.
Beskrivelse: Metode som skal mindske værdien af attributten lagerAntal_
med antalSolgt. Hvis værdien af lagerAntal_ herefter er
mindre end 0 skal lagerAntal_ sættes til 0.

void print()
Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Metode som skal udskrive data for en vare. Data skal udskrives
som vist i nedenstående screendump. I eksemplet er varenummer_
lig med 1000, navn_ lig med ”kartofler 2 kg”, pris_ lig med
12.95 og lagerAntal_ lig med 10.

a) Skriv koden for hele source-filen Vare.cpp med implementeringen af alle klassens metoder.

Opgavesættet fortsættes på næste side


OPGAVE 4 (40%) Denne opgave løses i sproget C++
Dit projektteam har fået til opgave at skrive et program til en dagligvarebutik. Til første version af
programmet har man valgt følgende design:

<<utility>>
main

+ main(): int

Butik
- nav n_: string
1 - v arer_[ANTAL_VARER]: Vare
- kasser_[ANTAL_KASSER]: Kasse

+ tilf oejVare(nummer: int, nav n: string, pris: double): v oid


+ bestilVarer( ): v oid
+ opdaterLager( ): v oid
+ printLager( ): v oid

1..ANTAL_VARER

Vare

- nummer_: int 1..ANTAL_KASSER


- nav n_: string
Kasse
- pris_: double
- lagerAntal_: int - nummer_: int

+ getNummer( ): int + ekspedition(solgteVarer[ ]: int, SIZE: const int): v oid


+ getLagerAntal( ): int
+ bestil(antal: int): v oid
+ opdaterAntal(antalSolgt: int): v oid
+ print( ): v oid

Som du kan se indgår klassen Vare fra opgave 3. Du skal ikke skrive kode til klassen Kasse.
Koden for denne klasse kan du se i de vedhæftede filer Kasse.h og Kasse.cpp. Bemærk heri den
globale konstant ANTAL_KASSER (derudover er koden i disse filer ikke vigtig).

Denne opgave omhandler derfor klassen Butik. Udover de metoder du kan se i UML diagrammet
ovenfor skal klassen Butik have en constructor med prototypen:

Butik( string navn );

a) Skriv koden til hele header-filen Butik.h med definitionen af klassen Butik.

Opgave 4 fortsættes på næste side


Constructoren skal sætte attributten navn_ til parameteren navn. Derudover skal alle pladser i
arrayet kasser_[] sættes til et objekt af klassen Kasse med nummer svarende til 1 større end
pladsen. Dvs. på plads 0 skal nummer_ i Kasse-objektet have værdien 1, på plads 1 skal nummer_
i Kasse-objektet have værdien 2 osv. Du skal bruge en for-løkke til dette!

b) Skriv koden for constructoren Butik( string navn ).

Metoden bestilVarer() skal bestille 10 stk. af alle de varer i arrayet varer_[], som opfylder
følgende: nummer_ er ikke lig med 0 og lagerAntal_ er mindre end 6. Brug en for-løkke til
dette.

c) Skriv koden for metoden bestilVarer().

Metoden tilfoejVare(int nummer, string navn, double pris) skal fungere således:
Hvis værdien af parameteren nummer er ugyldig (se gyldige værdier for attributten nummer_ i
opgave 3) skal der udskrives en fejlmeddelelse. Ellers skal der tilføjes et konkret objekt af klassen
Vare til en plads i arrayet varer_[]. Hvis værdien af parameteren nummer er 1000 tilføjes Vare-
objektet til plads 0, hvis værdien af parameteren nummer er 1001 tilføjes Vare-objektet til plads 1
osv. – forudsat at der ikke i forvejen er tilføjet en vare til denne plads (der er ikke tilføjet en vare
hvis attributten nummer_ i Vare-objektet på den pågældende plads er lig med 0) – ellers udskrives
en fejlmeddelelse. Aktivitetsdiagrammet samt fejlmeddelelser for metoden er vist på bilag 1 på
næste side.

d) Skriv koden for metoden tilfoejVare(int nummer, string navn, double pris).

OPGAVE 5 (5%) Denne opgave løses i sproget C++


Du skal nu skrive et lille testprogram (main()). I programmet skal du oprette et objekt af klassen
Butik, tilføje en vare i butikken og udskrive en lageroversigt.

a) Skriv koden til main().

NB! Du kan hente koden til metoden printLager() fra vedhæftede fil Butik.cpp – men det er
kun nødvendigt hvis du vil kunne compilere testprogrammet.

Bilag på næste side


BILAG 1 – aktivitetsdiagram for metoden tilfoejVare()

Fejlmeddelelse 1:

Error! Ugyldigt varenummer

Fejlmeddelelse 2:

Error! Der findes allerede en vare med varenummer <værdien af nummer>

Bilag 2 – Vare.h
#pragma once
#include <string>

using namespace std;

const int ANTAL_VARER = 10;

class Vare
{
public:
Vare(int nummer = 0, string navn = "", double pris = 0);
int getNummer() const;
int getLagerAntal() const;
void bestil(int antal);
void opdaterAntal(int antalSolgt);
void print() const;
private:
int nummer_;
string navn_;
double pris_;
int lagerAntal_;
};
Bilag 3 – Kasse.h
#pragma once

const int ANTAL_KASSER = 3;

class Kasse
{
public:
Kasse(int nummer = 0);
void ekspedition(int solgteVarer[], const int SIZE) const;
private:
int nummer_;
};

Bilag 4 – Kasse.cpp
#include "Kasse.h"
#include <stdlib.h>
#include <time.h>

Kasse::Kasse(int nummer)
{
nummer_ = (1 <= nummer && nummer <= ANTAL_KASSER ? nummer : 0);
}

void Kasse::ekspedition(int solgteVarer[], const int SIZE) const


{
int tal;

srand(time(0));

for (size_t i = 0; i < SIZE; i++)


{
tal = rand() % 100 + 1;

if (1 <= tal && tal <= 50)


solgteVarer[i] = 0;
else if (51 <= tal && tal <= 76)
solgteVarer[i] = 1;
else if (77 <= tal && tal <= 87)
solgteVarer[i] = 2;
else if (88 <= tal && tal <= 94)
solgteVarer[i] = 3;
else if (95 <= tal && tal <= 98)
solgteVarer[i] = 4;
else
solgteVarer[i] = 5;
}
}
Bilag 5 – Kasse.cpp
void Butik::opdaterLager()
{
int solgteVarer[ANTAL_VARER];

for (size_t i = 0; i < ANTAL_KASSER; i++)


{
kasser_[i].ekspedition(solgteVarer, ANTAL_VARER);

cout << "\nKasse " << i + 1 << ":" << endl;

for (size_t j = 0; j < ANTAL_VARER; j++)


{
if (varer_[j].getNummer() != 0 && solgteVarer[j] != 0)
{
cout << endl << solgteVarer[j] << " stk ";
varer_[j].print();
}
}

for (size_t j = 0; j < ANTAL_VARER; j++)


{
if (solgteVarer[j] != 0)
varer_[j].opdaterAntal(solgteVarer[j]);
}
}
}

void Butik::printLager() const


{
cout << "\n\n*** " << navn_ << " ***" << endl;
cout << "\nLagerstatus:" << endl;
for (size_t i = 0; i < ANTAL_VARER; i++)
{
if (varer_[i].getNummer() != 0)
varer_[i].print();
}
}
Reeksamen Jan17
OPGAVE 1 (30%) Denne opgave skrives i C
Du skal skrive koden for en funktion, som kan generere en lottorække. Funktionen har følgende
prototype og beskrivelse
void lottoraekke( int *arrayPtr );
Parametre: 1. pointer til det array som skal indeholde lottotallene
Returværdi: Ingen
Beskrivelse: Funktionen skal generere præcis 7 forskellige tilfældige tal mellem 1 og
36. Hvis der f.eks. genereres tallet 24 gemmes dette på pladsen med
index 24 i arrayet. Men hvis 24 allerede er gemt på denne plads skal tallet
ignoreres og der skal genereres et nyt. Til slut skal der være gemt et tal
på syv forskellige pladser i arrayet – resten af pladserne i arrayet er ikke
brugt (en plads, der ikke er brugt, indeholder værdien 0).

a) Skriv koden for funktionen lottoraekke ().


b) Skriv et lille testprogram (main) hvor du opretter et array med 37 pladser alle pladser skal
have værdien 0. Derefter kaldes funktionen lottoraekke() og til slut udskrives den
genererede lottorække.

OPGAVE 2 (45%) Denne opgave skrives i C++


Herunder ser du UML diagrammet for klassen Ferielejlighed.

Ferielejlighed
- kategori_: int
- land_: string
- by_: string
- antalVaerelser_: int
- antalSovepladser_: int

+ setData( int, string, string, int, int ): void


+ print( void ): void

Klassen skal have en default-constructor. Default-værdierne er:


kategori_ : 3
land_ og by_ : "ukendt"
antalVaerelser_ : 1
antalSovepladser_ : 4
Klassen skal også have en explicit defineret constructor. Tilladte værdier for attributterne er (land_
og by_ har ingen restriktioner):
kategori_ : 1-5 (begge inklusive)
antalVaerelser_ : 1-4 (begge inklusive)
antalSovepladser_ : 2-8 (begge inklusive)
NB! Du vælger selv om du vil lave to separate constructorer eller en kombineret constructor.

Opgave 2 fortsættes næste side


a) Skriv koden for hele header-filen Ferielejlighed.h.
Klassens metoder skal implementeres i filen Ferielejlighed.cpp. Metoden setData() kan
beskrives således:
void setData( int, string, string, int, int );
Parametre: 1. integer med kategorien (værdien svarer til antal stjerner)
2. tekststreng med landekoden (f.eks. "DK" hvis lejligheden ligger i
Danmark)
3. tekststreng med navnet på byen som lejligheden ligger i
4. integer med antal værelser
5. integer med antal sovepladser
Returværdi: Ingen
Beskrivelse: Metoden skal bruge de fem parametre til at indsætte i de tilsvarende
attributter. Hvis en parameter har en gyldig værdier (se
ovenfor) skal den indsættes i den tilsvarende attribut. Hvis
en parameter har en ugyl- dig værdi indsættes i stedet default-værdien
for den i den tilsvarende attribut (se default-værdier
ovenfor).

b) Skriv koden for metoden setData(), sådan som den skal implementeres i filen
Ferielejlighed.cpp.

c) Skriv koden til den eller de constructor(er), som du har valgt at have, sådan som den/de
skal implementeres i filen Ferielejlighed.cpp.

Metoden print() skal udskrive data for en ferielejlighed. Data skal udskrive som vist på eksem-
plet i nedenstående screendump. I eksemplet er kategori_ sat til 4 (værdien af denne attribut
bestemmer hvor mange stjerner der udskrives – derfor udskrives 4 stjerner i dette eksempel), land_
er "DK", by_ er "Skagen", antalVaerelser_ er 2 og antalSovepladser_ er 6.

d) Skriv koden for metoden print(), sådan som den skal implementeres i filen
Ferielejlighed.cpp.

Du skal nu skrive et lille testprogram (main). Heri skal du oprette et default-objekt af klassen
Ferielejlighed. Herefter skal du kalde metoden setData() på dette objekt, og derefter kalde
print() på objektet. En kørsel af programmet skal producere et output magen til det der er vist i
screendumpet ovenfor.

e) Skriv koden til main().

Opgavesættet fortsættes næste side


OPGAVE 3 (25%) Denne opgave skrives i C++
Dit firma har fået til opgave at lave et program til et rejsebureau. Herunder ser du klassediagrammet
for programmet. Som du kan se indgår klassen Ferielejlighed fra opgave 2.

Rejsebureau
- string: navn_
- lejligheder_[MAX_ANTAL]: Ferielejlighed
- aktueltAntal_: int

+ indsaetLejlighed( int, string, string, int, int ): bool


+ print( ): void
1

1..MAX_ANTAL

Ferielejlighed
- kategori_: int
- land_: string
- by_: string
- antalVaerelser_: int
- antalSovepladser_: int

+ setData( int, string, string, int, int ): void


+ print( ): void

Klassen skal have en constructor med følgende prototype:

Rejsebureau( string navn );

MAX_ANTAL skal defineres som en global konstant med værdien 50 i klassens header-fil.

a) Skriv koden for hele header-filen Rejsebureau.h.

Attributten aktueltAntal_ indeholder antallet af lejligheder som rejsebureauet aktuelt råder over
(denne antages at være initialiseret til 0 i klassens constructor). Når arrayet lejligheder_[] er
fyldt helt vil værdien af aktueltAntal_ være 50.

Metoden indsaetLejlighed() skal, hvis der er plads i arrayet lejligheder_[], indsætte et


Lejlighed-objekt med de modtagne data på den næste ledige plads i arrayet. Den næste ledige
plads svarer til værdien af attributten aktueltAntal_. Når Lejlighed-objektet er indsat skal
aktueltAntal_ tælles en op og der returneres true. Hvis der ikke var plads i arrayet returneres
blot false.

b) Skriv koden for metoden indsaetLejlighed().

Metoden print() skal udskrive data for alle rejsebureauets aktuelle ferielejligheder.

c) Skriv koden for metoden print().


Vintereksamen Dec17/Jan18
OPGAVE 1 (5%)
Denne opgave skrives i C

a) Skriv koden for en for-løkke, som udskriver alle hele tal fra og med 37 til og med 121.
Tallene skal udskrives i rækkefølge med linjeskift efter hvert tal.

OPGAVE 2 (5%)
Denne opgave skrives i C
En funktion har prototypen
void printTalraekke( int minimum, int maksimum );
Hvis minimum er større end maksimum, skal funktionen udskrive teksten ”FEJL!”. Ellers skal
funktionen udskrive alle hele tal fra og med minimum til og med maksimum.

a) Skriv koden for funktionen (implementering).

OPGAVE 3 (10%)
Denne opgave skrives i C
Et program skal opfylde følgende:
 Brugeren skal indtaste to hele tal.
 Programmet skal herefter udskrive alle tal fra og med det mindste af de to tal til og
med det største af de to tal ved at kalde funktionen printTalraekke() fra opgave
2. Dette må altså ikke resultere i, at funktionen udskriver ”FEJL!”.

a) Skriv koden for programmet.

OPGAVE 4 (15%)
Denne opgave skrives i C
Et program skal opfylde følgende:
 Programmet skal udskrive tilfældige små bogstaver.
 Programmet skal fortsætte med at udskrive tilfældige små bogstaver, så længe der
ikke er udskrevet et ’z’.
Hint: Generér tilfældige tal mellem 97 og 122 (ASCII for ’a’ og ’z’) og udskriv på passende måde.

a) Skriv koden for programmet.

Opgavesættet fortsættes på næste side


OPGAVE 5 (25%)
Denne opgave skrives i C
En funktion har prototypen
void reducerArray( double *arrayPtr, int arraySize );
Funktionen skal trække 5 fra alle værdier i arrayet (det array som arrayPtr peger på). Hvis en
værdi herved bliver negativ skal værdien sættes til 0.

a) Skriv koden for funktionen (implementering).


b) Skriv et test-program hvori du opretter at array med værdierne 7.8, 1.5, 13.3, 50.9, 4.9 og
5.0. Kald derefter funktionen reducerArray(). Udskriv herefter alle værdier i arrayet.

OPGAVE 6 (20%)
Denne opgave skrives i C++
I denne opgave skal du skrive koden for klassen Skuffe. UML klassediagrammet for klassen ses her.

Skuffe
- indhold_: string
- antal_: int
+ Skuffe( )
+ Skuffe(string, int)
+ setIndhold(string): void
+ getIndhold( ): string
+ setAntal( int ): void
+ getAntal( ): int
+ print( ): void

a) Skriv koden for hele header-filen Skuffe.h med definitionen af klassen Skuffe .

Der oplyses desuden følgende om klassen Skuffe:


 Defaultværdier for attributerne indhold_ og antal_ er henholdsvis "ukendt" og 0.
 Gyldige værdier for antal_ er positive tal. Hvis en ugyldig værdi modtages anvendes
defaultværdien i stedet for. Der er ingen restriktioner for indhold_.
 Koden for filen Skuffe.cpp skal du kopiere fra den vedhæftede fil. (NB! Her findes
koden i bilag på en efterfølgende side. Da dette er en pdf-fil må du ikke kopiere koden
over i Visual Studio – du bliver derfor nødt til manuelt at skrive koden fra bilaget).

b) Tilføj den manglende kode i filen Skuffe.cpp med implementeringen af klassens metoder.

c) Skriv et test-program hvori du opretter 2 objekter – et default objekt og et parametriseret


objekt hvori indhold_ er "DVD film" og antal_ er 5. Udskriv data for begge objekter.

Opgavesættet fortsættes på næste side


OPGAVE 7 (20%)
Denne opgave skrives i C++
En skuffe skal være en del af en reol som vist i UML klassediagrammet herunder. Der er kun en
skuffe i en reol.

Reol Skuffe
- reolSkuffe_: Skuffe 1 - indhold_: string
1 - antal_: int
+ Reol( )
+ Reol(string, int) + Skuffe( )
+ print( ): void + Skuffe(string, int)
+ setIndhold(string): void
+ getIndhold( ): string
+ setAntal( int ): void
+ getAntal( ): int
+ print( ): void

a) Skriv koden for hele header-filen Reol.h med definitionen af klassen Reol.

Der oplyses desuden følgende om klassen Reol:


 Defaultconstructoren for Reol skal intet gøre.
 Den parametriserede constructor for Reol skal blot initialisere objektet reolSkuffe_
ved at kalde den parametriserede constructor for Skuffe på passende måde.
 For et Reol objekt hvor skuffens indhold_ er "DVD film" og antal_ er 5, skal
metoden print() udskrive data således:

b) Skriv koden for hele source-filen Reol.cpp med implementeringen af klassens metoder.
Bilag – Skuffe.cpp
#include "Skuffe.h"
#include <iostream>

Skuffe::Skuffe()
{
// Skriv koden for default constructoren her
}

Skuffe::Skuffe(string indhold, int antal)


{
setIndhold(indhold);
setAntal(antal);
}

void Skuffe::setIndhold(string indhold)


{
indhold_ = indhold;
}

string Skuffe::getIndhold() const


{
return indhold_;
}

void Skuffe::setAntal(int antal)


{
// Skriv koden for setAntal() her
}

int Skuffe::getAntal() const


{
// Skriv koden for getAntal() her
}

void Skuffe::print() const


{
cout << "Indhold: " << indhold_ << endl;
cout << "Antal: " << antal_ << " styk" << endl << endl;
}
Vintereksamen Dec18/Jan19
OPGAVE 1 (10 %)
Denne opgave skrives i C
Skriv et lille program ( main() ) som opfylder følgende:
Programmet skal udskrive tallene 1, 2, 3, 4, 5, ……… osv., hvert tal på en ny linje. Dette skal
fortsætte indtil der trykkes på en vilkårlig tast på tastaturet.

OPGAVE 2 (20 %)
Denne opgave skrives i C
Skriv et lille program ( main() )hvori der gøres følgende:
Opret et array med 101 pladser. Arrayet skal kunne indeholde decimaltal.
Læg tallene 0, 0.01, 0.02, 0.03, ………… , 0.99, 1.00 ind i arrayet. Tallet 0 skal ligge på pladsen med
indeks 0, tallet 0.01 skal ligge på pladsen med indeks 1 osv.
Udskriv alle tal fra arrayet med 2 decimaler, hvert tal på en ny linje.

OPGAVE 3 (40 %)
Denne opgave skrives i C++
Herunder ser du UML-klassediagrammet for klassen Konsulenttime.

Konsulenttime

- navn_: string
- mobilnr_: string
- email_: string
- emne_: string
- klokkeslet_: int

+ getNavn( ): string
+ getMobilnr( ): string
+ getEmail( ): s tring
+ getEmne( ): string
+ setKlokkeslet( int ): void
+ getKlokkeslet( ): int
+ print( ): void

Ud over de viste metoder skal klassen have en constructor med prototypen

Konsulenttime(string navn="", string mobilnr="", string email="", string emne="")

a) Skriv koden for hele header-filen Konsulenttime.h.

Opgave 3 fortsættes på næste side


Der er ingen restriktioner på navn_, mobilnr_, email_ og emne__. Gyldige værdier samt
default-værdi for attributten klokkeslet_ er:
Gyldige: 8, 9, 10, 11, 12, 13, 14 og 15. Default: 8

Herunder ser du beskrivelsen af nogle af klassens metoder.

Konsulenttime(string navn="", string mobilnr="", string email="",


string emne="")
Parametre: Variable med værdierne til de 5 attributter.
Beskrivelse: Constructor som skal sætte værdierne af de 5 attributter.
Attributten klokkeslet_ sættes til 8.

void setKlokkeslet( int klokkeslæt )


Parametre: Variabel med værdien af det valgte klokkeslet.
Returværdi: Ingen.
Beskrivelse: Metode som skal sætte værdien attributten klokkeslæt_.
Værdien skal være gyldig. Hvis der modtages en ugyldig værdi
vælges i stedet default-værdien.
void print()
Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Metode som skal udskrive data for en konsulenttime. Data skal
præsenteres således:
Hanne Laursen
12345678
hanne@testmail.com
Emne: Installation af Visual Studio
Tidspunkt: 13-14
Dettte er blot et eksempel. Teksten skal naturligvis afspejle værdi-
erne af objektets attributter. NB! I dette eksempel har klokkeslet_
værdien 13.

b) Skriv koden for hele source-filen Konsulenttime.cpp med implementeringen af alle 8


metoder i klassen Konsulenttime.

Du skal nu skrive et lille test-program (main) til klassen Konsulenttime. I test-programmet skal
du erklære et objekt af klassen Konsulenttime og derefter udskrive data for objektet. Dernæst
skal klokkeslettet ændres og data for objektet skal udskrives igen.

c) Skriv koden for test-programmet.

Opgavesættet fortsættes på næste side


OPGAVE 4 (30 %)
Denne opgave skrives i C++
Herunder ser du et UML klassediagram hvori klassen Konsulenttime fra opgave 3 indgår
sammen med klassen Arbejdsdag. En arbejdsdag indeholder 8 konsulenttimer.

Konsulenttime

- navn_: string
- mobilnr_: string
Arbejdsdag - email_: string
1 - emne_: string
- ugedag_: string 8 - klokkeslet_: int
- timer_[8]: Konsulenttime
+ indsaetKonsulenttime( Konsulenttime ): void + getNavn( ): string
+ print( ): void + getMobilnr( ): string
+ getEmail( ): string
+ getEmne( ): string
+ setKlokkeslet( int ): void
+ getKlokkeslet( ): int
+ print( ): void

Ud over de viste metoder skal klassen have en constructor med prototypen

Arbejdsdag( string ugedag )

a) Skriv koden for hele header-filen Arbejdsdag.h.

Herunder ser du beskrivelsen af nogle af klassens metoder.

Arbejdsdag( string ugedag )


Parametre: Variable med værdierne til attributten ugedag_.
Beskrivelse: Constructor som skal sætte værdien af attributten ugedag_ via
den modtagne parameter værdi.

void indsaetKonsulenttime( Konsulenttime time )


Parametre: Det Konsulenttime objekt, der skal indsættes.
Returværdi: Ingen.
Beskrivelse: Metode som skal indsætte et Konsulenttime objekt i arrayet.
Objektets værdi for klokkeslet_ afgør hvor i arrayet objektet skal
indsættes. Hvis klokkeslet_ er 8 skal objektet indsættes på plads
0, hvis klokkeslet_ er 9 skal objektet indsættes på plads 1 osv.
void print()
Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Metode som skal udskrive data for en arbejdsdag. Først udskrives
ugedagen og dernæst udskrives data for de objekter i arrayet, hvor
navn_ ikke er en tom tekststreng.

Opgave 4 fortsættes på næste side


b) Skriv koden for hele source-filen Arbejdsdag.cpp med implementeringen af alle 3 metoder i
klassen Arbejdsdag.

Du skal nu teste klassen Arbejdsdag. I dit test-programmet fra opgave 3c skal du tilføje endnu et
objekt af klassen Konsulenttime og objekt af klassen Arbejdsdag. Dernæst skal du tilføje de to
konsulenttimer til arbejdsdagen. Til slut skal du udskrive data for arbejdsdagen

c) Tilføj den ønskede kode til test-programmet fra opgave 3c.


Vintereksamen Dec19/Jan20
OPGAVE 1 (10 %)
Denne opgave skrives i C
Skriv et lille program ( main() ) som opfylder følgende:
- Opret er array med 26 pladser, som kan indeholde characters.
- Læg bogstaverne fra og med A til og med Z ind i arrayet (A på plads 0, B på plads 1 osv.).
NB! Du skal anvende en for-løkke.
- Udskriv indholdet af arrayet på en linje. Der skal være et space mellem hver værdi der
udskrives. NB! Du skal anvende en for-løkke.
Hint: 'A'+ 0 giver 'A', 'A + 1 giver 'B', 'A'+ 2 giver 'C', osv.

OPGAVE 2 (15 %)
Denne opgave skrives i C
Skriv et lille program ( main() ) som opfylder følgende:
- Programmet skal kunne beregne summen af alle hele tal mellem 1 og n.
- Du skal anvende en do-while.
- Første gang løkken gennemløbes skal der beregnes og udskrives summen af alle hele tal
mellem 1 og 1. Ved næste gennemløb beregnes og udskrives summen af alle hele tal
mellem 1 og 2 osv.
- Næste gennemløb skal startes ved at brugeren trykker på tasten c på tastaturet. Hvis
brugeren trykker på en vilkårlig anden test skal løkken stoppes.
Herunder ser du et eksempel på kørsel af programmet. I dette eksempel er der trykket på tasten c
2 gange og derefter på en anden tast.

Opgavesættet fortsættes på næste side


OPGAVE 3 (25 %)
Denne opgave skrives i C
Skrive koden for en funktion med prototypen (signaturen):
int setEqual(const int *numberPtr1, int *numberPtr2);

Funktionen skal fungere således:


- Hvis de to variable som pointerne refererer til har samme værdi returneres 1.
- Ellers sættes de to variable som pointerne refererer til at have samme værdi og der
returneres 0.

a) Skriv koden for funktionen. Du vælger selv om du vil skrive koden i flere filer eller i en fil.

Skriv nu et lille program ( main() ) som tester funktionen setEqual(). Programmet skal opfylde
følgende:
- Opret to heltals variable og sæt dem til to forskellige værdier.
- Udskriv værdierne af de to variable.
- Kald funktionen setEqual() med referencer til de to variable og gem returværdien.
- Hvis returværdien er 0 udskrives ”Tal 2 er ændret”.
- Udskriv værdierne af de to variable.

b) Skriv koden for main().

OPGAVE 4 (30 %)
Denne opgave skrives i C++
Herunder ser du UML-klassediagrammet for klassen Club.

Club
- name_: std::string
- country_: std::string
- yearOfFoundation_: int
- numberOfChampionships_: int
+ addChampionship( ): void
+ print( ): void

Ud over de viste metoder skal klassen have en constructor med prototypen


Club(std::string name, std::string country, int yearOfFoundation, int numberOfChampionships);

a) Skriv koden for hele header-filen Club.h.

Der er ingen restriktioner på attributterne name_ og country_. Gyldige værdier samt default-
værdi for attributten yearOfFoundation_ er:
Gyldige: 0 samt fra og med 1850 til og med 2019. Default: 0

Opgave 4 fortsættes på næste side


Gyldige værdier samt default-værdi for attributten numberOfChampionships_ er:
Gyldige: Større end eller lig med 0. Default: 0

Herunder ser du beskrivelsen af metoderne i klassens Club.

Club(string name, string country, int yearOfFoundation,


int numberOfChampionships)
Parametre: Variable med værdierne til de 4 attributter.
Beskrivelse: Constructor som skal sætte værdierne af de 4 attributter. De
relevante parametre skal valideres.

void addChampionship()
Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Metoden skal øge værdien af attributten
numberOfChampionships_ med 1.
void print()
Parametre: Ingen.
Returværdi: Ingen.
Beskrivelse: Metode som skal udskrive informationer om en klub ud fra
attributternes værdier. Herunder ses et eksempel på en udskrift.

b) Skriv koden for hele source-filen Club.cpp med implementeringen af de 3 metoder i


klassen Club.

Du skal nu skrive et lille test-program (main) til klassen Club. I test-programmet skal du erklære
et objekt af klassen Club og derefter udskrive data for objektet. Dernæst skal antal vundne
mesterskaber ændres (øges med 1) og data for objektet skal udskrives igen.

c) Skriv koden for test-programmet.

Opgavesættet fortsættes på næste side


OPGAVE 5 (20 %)
Denne opgave skrives i C++
Herunder ser du et UML klassediagram hvori klassen Fan indgår sammen med klassen Club fra
opgave 4. NB! For nemheds skyld er det bestemt, at en klub højst kan have 100 fans.

Club
- name_: std::string 1 Fan
- country_: std::string 0..100
- yearOfFoundation_: int - name_ std::string
- numberOfChampionships_: int + setName( std::string ): void
- fans_[100]: Fan + getName( ): std::string
- numberOfFans: int

+ addChampionship( ): void
+ addFan( newFan: Fan ): void
+ print( ): void

Ud over de viste metoder skal klassen Fan have en constructor med prototypen

Fan( std::string name )

a) Skriv koden for hele header-filen Fan.h.

Der er ingen restriktioner på attributten name_. Herunder ser du beskrivelsen af metoderne i


klassen Fan.

Fan( string name = "" )


Parameter: Variable med værdierne til attributten name_.
Beskrivelse: Constructor som skal sætte værdien af attributten name_ til
den modtagne parameter værdi.

Metoderne setName() og getName() er helt simple set-get-metoder.

b) Skriv koden for hele source-filen Fan.cpp med implementeringen af de 3 metoder i


klassen Fan.

Som du kan se af UML klassediagrammet ovenfor er der foretaget nogle tilføjelser i klassen Club.
Attributten numberOfFans_ skal holde antallet af fans og skal initialiseres til 0. Metoden print()
skal, ud over data om klubben, også udskrive navnene på alle fans.

c) Foretag de nødvendige tilføjelser og ændringer i klassen Club fra opgave 4.

I testprogammet fra opgave 4c skal du tilføje en fan til klubben inden du udskriver klubbens data.

d) Foretag denne ændring i testprogrammet.


Vintereksamen Dec20/Jan21
OPGAVE 1 (15 %)
Denne opgave skrives i C
Skriv et lille program ( main() ) som opfylder følgende:

- Udskriv en besked til brugeren om at indtaste et heltal.


- Indlæs brugeres indtastning.
- Udskriv om det tal, som brugeren indtastede, er deleligt med 10 eller ikke – altså om
10 går op i tallet eller 10 ikke går op i tallet.

a) Skriv koden for programmet, som beskrevet ovenfor.

Programmet skal nu ændres lidt. Det heltal, som brugeren skal indtaste, skal være større end eller lig med
10. Hvis brugeren indtaster et tal, som ikke opfylder betingelsen, skal brugeren indtaste et nyt tal. Dette
skal fortsætte indtil brugeren har indtastet et tal, som opfylder betingelsen. Indtastningen skal derfor
foregå i et loop, som først afbrydes, når brugeren har indtastet et tal, som opfylder betingelsen. Først
derefter skal der udskrives, om tallet er deleligt med 10.

b) Foretag denne ændring af programmet fra a).

OPGAVE 2 (20 %)
Denne opgave skrives i C

NB! Det er ikke et krav i denne opgave, at koden opdeles i header-fil og source-filer. Du må gerne skrive al
koden i samme source-fil.

Skriv en funktion med følgende prototype:

int countLargeNumbers(double* localPtr, const int SIZE);

Det antages, at pointeren localPtr ”peger på” et array med størrelsen SIZE. Funktionen skal så tælle
hvor mange tal i arrayet, som er større end 100 og til slut returnere dette antal.

a) Skriv koden for funktionen.

Skriv nu et lille testprogram ( main() ), hvori funktionen fra a) testes. I programmet skal der oprettes et
array med plads til 5 decimaltal og der skal lægges 5 decimaltal ind i arrayet. De 5 tal skal lægges ind i
arrayet via en initialisering – ikke via en bruger indtastning.

Herefter skal det, vha. funktionen fra a), undersøges hvor mange tal i arrayet, som er større end 100. Dette
antal skal udskrives på skærmen.

b) Skriv koden for main(), som beskrevet ovenfor.

Opgavesættet fortsættes på næste side


OPGAVE 3 (40 %)
Denne opgave skrives i C++

Herunder ser du UML-klassediagrammet for klassen Car.

Car
- idNumber_; int
- category_: char
- model_: string
- doors_: int
- fuelType_: char
- gearType_: char
- pricePrDay_: double
- isAvailable_: bool

+ getCategory(): char
+ getIsAvailable(): bool
+ setIsAvailable(bool): void
+ getIdNumber(): int
+ setIdNumber(int): void
+ print(): void

Klassen repræsenterer en udlejningsbil.

Klassen skal have en default constructor og en parametriseret constructor med prototypen:

Car(int id, char cat, std::string model, int doors, char fuel, char gear, double price);

De to constructorer skal skrives som to selvstændige constructorer – en default og en parametri-seret.

a) Skriv koden for hele header-filen Car.h.

Gyldige værdier samt default-værdi for attributterne fremgår af nedenstående tabel. Default-værdierne en
naturligvis også gyldige.

Attribut Gyldige værdier Default værdi


idNumber_ Fra og med 100 til og med 199 0
category_ Fra og med ’A’ til og med ’E’ ’U’
model_ Ingen restriktioner ”Unknown”
doors_ 2 og 4 0
fuelType_ ’D’, ’E’ og ’G’ ’U’
gearType_ ’A’ og ’M’ ’U’
pricePrDay_ Alle tal større end 0.0 0.0
isAvailable_ Ingen restriktioner true

Opgave 3 fortsættes på næste side


Her følger en beskrivelse af nogle attributter. Dette har ingen betydning for den kode du skal skrive,
men er blot for at give en forståelse for betydningen af attributternes gyldige værdier.

category_ A – Small, B – Economy, C – Medium, D – Large, E – Luxury

model_ Eksempel: “Audi A6 Avant 3.0 TDI”

fuelType_ D – Diesel, E – El, G – Gasoline,

gearType_ A – Automatic, M – Manual

b) Skriv koden for implementeringen af default constructoren i filen Car.cpp.

c) Skriv koden for implementeringen af de 5 get- og set-metoder, som fremgår af UML


klassediagrammet ovenfor, i filen Car.cpp.

d) Skriv koden for implementeringen af den parametriserede constructor i filen car.cpp. Bemærk!
Attributten isAvailable_ sættes altid til true.

NB! Koden for metoden print() skal du kopiere fra filen print.cpp, som findes som bilag til denne opgave.

Skriv nu et lille test-program ( main()) til klassen Car. Programmet skal opfylde følgende:

- Opret to objekter – et default objekt og et parametriseret objekt.


- Udskriv data for de to objekter på skærmen vha. metoden print().
- Ret idNumber_ for default objektet til 150 og isAvaiable_ til false, vha. de relevante
metoder.
- Udskriv igen data for default objektet på skærmen vha. metoden print().

e) Skriv koden for test-programmet, som beskrevet ovenfor.

Opgavesættet fortsættes på næste side


OPGAVE 4 (25 %)
Denne opgave skrives i C++

Herunder ser du et UML klassediagram hvori klassen Car fra opgave 3 indgår sammen med klassen
Rentalbureau. NB! Et udlejningsbureau kan have op til 100 biler.

Rentalbureau Car
- bureauName_: string 1 - idNumber_; int
- cars_[MAX_CARS]: Car 0..100 - category _: char
- model_: string
+ addCar( car: Car ): v oid
- doors_: int
+ searchCarBy Category (category : char): v oid
- f uelTy pe_: char
+ print(): v oid
- gearTy pe_: char
- pricePrDay _: double
- isAv ailable_: bool
+ getCategory (): char
+ getIsAv ailable(): bool
const int MAX_CARS = 100 + setIsAv ailable(bool): v oid
+ getIdNumber(): int
+ setIdNumber(int): v oid
+ print(): v oid

NB! Koden til din header-fil Rentalbureau.h skal du kopiere fra filen Rentalbureau.h, som findes som bilag
til denne opgave. Koden til implementeringerne af constructoren og metoden addCar() skal du kopiere
fra filen Rentalbureau.cpp, som også findes som bilag til denne opgave.

Metoden print() skal først udskrive en overskrift med udlejningsbureauets navn og derefter udskrive
data for alle Car-objekter hvor attributten idNumber_ ikke er 0.

a) Skriv koden for implementeringen af metoden print().

Metoden searchCarByCategory(char category) skal udskrive data for alle Car-objekter hvor
attributten category_ har samme værdi som parameteren category.

b) Skriv koden for implementeringen af metoden searchCarByCategory().

Du skal nu skrive et test-program ( main()) til klassen Rentalbureau. Begynd med at kopiere koden fra
bilaget test_Rentalbureau.cpp til dit test-program. Tilføj så følgende kode:

- Opret et Rentalbureau-objekt.
- Tilføj de 2 Car-objekter til dit Rentalbureau-objekt.
- Udskriv data for dit Rentalbureau-objekt.
- Søg efter biler i kategorien ’E’.

c) Tilføj dette i test-programmet.


Vintereksamen Dec21/Jan22
OPGAVE 1 (15 %)
Denne opgave skrives i C
Skriv et lille program ( main() ) som opfylder følgende:
 Udskriv en besked til brugeren om at indtaste et decimaltal.
 Indlæs brugeres indtastning.
 Udskriv det tal som brugeren indtastede i formatet ”kroner og øre” – dvs. hvis
brugeren f.eks. indtaster 112.85, så skal der udskrives ”112 kroner og 85 øre”.

a) Skriv koden for programmet, som beskrevet ovenfor.

NB! Alt efter hvordan du beregner kroner og øre, så kan øre-værdien godt afvige med 1 øre fra det
korrekte. Dette er acceptabelt.
Programmet skal nu ændres lidt. Brugeren skal indtaste 5 decimaltal. Der skal indtastes et tal ad
gangen og hver gang skal tallet udskrives, som beskrevet i a). Du skal anvende en løkke til at løse
denne opgave.

b) Foretag denne ændring af programmet fra a).

OPGAVE 2 (20 %)
Denne opgave skrives i C
NB! Det er ikke et krav i denne opgave at koden opdeles i header-fil og source-filer. Du må gerne
skrive al koden i samme source-fil.

Skriv en funktion med følgende prototype:


int countDoubleCharacters(const char* localPtr);

Det antages, at pointeren localPtr ”peger på” en tekststreng (char-array). Funktionen skal så
tælle hvor mange gange der er dobbelt karakterer i tekststrengen (to ens karakterer ved siden af
hinanden) og til slut returnere dette antal.
Eksempel: I tekststrengen "Kampen slutter klokken 11" er der følgende dobbeltkarakterer
"tt", "kk" og "11". Funktionen skal så returnere 3.

a) Skriv koden for funktionen.

Skriv nu et lille testprogram ( main() ), hvori funktionen fra a) testes. I programmet skal der
oprettes en tekststreng med teksten fra eksemplet ovenfor.

Herefter skal det, vha. funktionen fra a), undersøges hvor mange dobbelt karakterer, der er i
tekststrengen, og dette antal skal udskrives på skærmen.

b) Skriv koden for main(), som beskrevet ovenfor.


OPGAVE 3 (35 %)
Denne opgave skrives i C++
Herunder ser du UML-klassediagrammet for klassen Hotelroom.

Hotelroom
- roomNumber_: int
- numberOfBeds_: int
- category_: char
- seaView_: bool
+ setRoomNumber(int): void
+ getRoomNumber( ): int
+ setNumberOfBeds(int): void
+ getNumberOfBeds( ): int
+ setCategory(char): void
+ getCategory( ): char
+ setSeaView(bool): void
+ getSeaView( ): bool
+ print( ): void

Klassen repræsenterer et hotelværelse.


Klassen skal have en default constructor. Den skal også have en parametriseret constructor med
prototypen:

Hotelroom(int roomNumber, int numberOfBeds, char category, bool seaView);

Du bestemmer selv, om du vil skrive to constructorer selvstændige constructorer – en default og


en parametriseret – eller om du vil skrive en kombineret.

a) Skriv koden for hele header-filen Hotelroom.h.

Gyldige værdier samt default-værdi for attributterne fremgår af nedenstående tabel. Default-
værdierne en naturligvis også gyldige.

Attribut Gyldige værdier Default værdi


roomNumber_ Fra og med 100 til og med 1099 og 0 0
numberOfBeds_ Fra og med 0 til og med 4 0
category_ ’A’, ’B’, ’C’ og ’U’ ’U’
seaView_ true eller false false

Nedenfor følger en beskrivelse af attributterne. Dette har ingen betydning for den kode du skal
skrive, men er blot for at give en forståelse for betydningen af attributternes gyldige værdier.
roomNumber_ værelsesnummeret (0 svarer til ukendt)
numberOfBeds_ antal senge på værelset (0 svarer til ukendt)

Opgave 3 fortsættes på næste side


category_ A – Suite, B – Luksus, C – Standard, U – Ukendt
seaView_ Om der er havudsigt fra værelset. False = ingen havudsigt.

NB! Koden for metoden print() samt 2 set- og get-metoder skal du kopiere fra filen
Hotelroom.cpp, som ligger som bilag til denne opgave.

b) Skriv koden for implementeringen af de sidste 6 set- og get-metoder, som mangler i filen
Hotelroom.cpp. Husk validering ifølge tabellen ovenfor.

c) Skriv koden for implementeringen af de to constructorer i filen Hotelroom.cpp.

Skriv nu et lille test-program ( main()) til klassen Hotelroom. Programmet skal opfylde følgende:

 Opret to objekter – et default objekt og et parametriseret objekt.


 Udskriv data for de to objekter på skærmen vha. metoden print().
 Ret alle data for default-objektet, vha. de relevante set-metoder.
 Udskriv igen data for default objektet på skærmen vha. metoden print().

d) Skriv koden for test-programmet, som beskrevet ovenfor.

OPGAVE 4 (30 %)
Denne opgave skrives i C++
Herunder ser du et UML klassediagram hvori klassen Hotelroom fra opgave 3 indgår sammen
med klassen Hotel. NB! Et hotel kan have maksimalt 1000 værelser.

Hotel Hotelroom
- hotelname: string 1 - roomNumber_: int
- rooms_[ROOMS]: Hotelroom 0..1000 - numberOfBeds_: int
- category_: char
+ updateRoomData(int, int, char, bool): void
- seaView_: bool
+ getHotelroom( roomNumber int ): Hotelroom
+ searchRoomsWithSeaView( ): void + setRoomNumber(int): void
+ print(): void + getRoomNumber( ): int
+ setNumberOfBeds(int): void
+ getNumberOfBeds( ): int
+ setCategory(char): void
+ getCategory( ): char
const int ROOMS=1000 + setSeaView(bool): void
+ getSeaView( ): bool
+ print( ): void

NB! Koden til din header-fil Hotel.h skal du kopiere fra filen Hotel.h, som ligger som bilag til denne
opgave. Som bilag ligger også filen Hotel.cpp. Herfra kan du kopiere noget ikke færdiggjort kode til
din source-fil Hotel.cpp.

Opgave 4 fortsættes på næste side


Metoden print() skal først udskrive en overskrift med hotellets navn og derefter udskrive data
for alle værelser, hvor værelsesnummeret ikke er 0.

a) Skriv koden for implementeringen af metoden print().

Metoden searchRoomWithSeaView() skal udskrive data for alle værelser som har havudsigt og
hvor værelsesnummeret ikke er 0.

b) Skriv koden for implementeringen af metoden searchRoomWithSeaView().

Metoden getHotelroom(int roomNumber) skal fungere således: hvis værdien af roomNumber er


gyldig (jf. skemaet i opgave 3) skal metoden returnere det Hotelroom-objekt, som ligger på plads
roomNumber-100 i arrayet rooms_. Ellers returneres et default Hotelroom-objekt.

c) Skriv koden for implementeringen af metoden getHotelroom().

Du skal nu skrive et test-program ( main()) til klassen Hotel.


 Opret et Hotel-objekt.
 Brug metoden updateRoomData() til at ændre data for 3 hotelværelser. To af
værelserne skal have havudsigt.
 Udskriv data for dit Hotel-objekt.
 Søg til slut efter værelser med havudsigt.

d) Skriv koden for test-programmet.

You might also like