Professional Documents
Culture Documents
OPRG
Tidligere eksamensopgaver
Kunde
- kundeNummer: int
- navn: string
- saldo: float
OPGAVE 1
Denne opgave omhandler kun klassen Kunde.
a) For hver af de tre fejl skal du beskrive fejlen og skrive den korrekte kode som retter fejlen.
OPGAVE 3
b) Skriv koden til metoden nyKunde(), som den skal implementeres i filen
Kartotek.cpp. Aktivitetsdiagrammet på bilag 3 skal følges.
BILAG 1
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
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
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
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
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.
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?
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
Forkert pinkode
Forkert pinkode
Forkert pinkode
BILAG 1B
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]
Kald
[svar er ’1']
skrivBesked( )
Kald
[svar er ’2']
laesBesked( )
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
Herunder ser du desuden funktionsbeskrivelsen for funktionen on() fra klassen Sun.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.
e) Skriv koden til funktionen run(). Aktivitetsdiagram for funktionen ses på bilag 2. Dette
diagram skal følges.
g) For hver af fejlene skal du angive linienummer, hvad fejlen består i og den korrekte
kode.
Definer variable
Kald display()
[ugyldigt sol
nummer]
Kald chooseSun() og
gem returværdi
[true]
[gyldigt sol
nummer]
<<utility>>
hovedprogram
+ main(): int
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().
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.
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.
På bilag 3 ser du koden til funktionen confirmCode(). Dog mangler der to linier i koden.
OPGAVE 3
I funktionen int main() er det eneste der skal ske, at metoden run() skal kaldes.
Tekst 1: Alarm on
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.
Constructoren skal
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.
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
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
Funktionen print() skal udskrive navn og alder som vist i dette eksempel:
OPGAVE 5
Herunder ser du beskrivelsen for en funktion kaldet findNuller().
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
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.
Metoden moreLight() skal skrue op for lyset ved at kalde metoden powerUp().
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.
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%)
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%)
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.
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%)
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.
c) Skriv koden til metoden setLevel(). Gyldige værdier for level_ er fra og med 0 til
og med 5.
d) Skriv koden til metoden up(). Koden skal følge det viste aktivitets-diagram og du
skal anvende NXT-funktioner til motorstyring og pausestyring.
a) Skriv koden for hele headerfilen Bed.h med definitionen af 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 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%)
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%)
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.
c) Skriv koden til metoden rollDown(). Koden skal følge det vist aktivitetsdiagram og
du skal anvende NXT-funktioner til motorstyring.
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.
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.
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:
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%)
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.
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.
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.
Metoden float middelHoejde() skal beregne gennemsnitshøjden for de elever, der er i klassen
og returnere denne.
Metoden void indskrivElev(string navn, int hoejde) kan beskrives ved pseudokoden
på bilag 2.
#pragma once
#include "Elev.h"
#include <string>
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
Ellers
#include "Klasse.h"
#include <iostream>
#include <string>
int main()
{
Klasse minKlasse("6.A");
string navn;
int hoejde;
return 0;
}
Reeksamen Jan14
OPGAVE 1 (30%)
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:
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%)
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.
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
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).
#pragma once
#include "Lejlighed.h"
#include <string>
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
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 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
#include "Lastbil.h"
int main()
{
Lastbil scania( 0, 0, 0 );
scania.printData();
volvo.setGodsType( "Frugter" );
volvo.printData ();
mercedes.setGodsType ( "Is" );
mercedes.printData ();
return 0;
}
<<utility>>
main
+ main(): int
Lastbil
Constructoren skal anvende de respektive parametre til at sætte værdierne af samtlige attributter i
klassen Godstransport – dvs. også Lastbil-objektet truck_.
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.
OPGAVE 2 (20%)
Denne opgave skrives i C++
Person
- navn_: string
- personnummer_: string
Ud over den viste medlemsfunktion skal klassen have en explicit-constructor med prototypen
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.
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
Person
- navn_: string
- personnummer_: string
+ print( ): void
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:
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:
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.
printMultiplicationTable( 3 );
printMultiplicationTable( 8 );
printMultiplicationTable( 13 );
Skærmdump:
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:
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
a) Skriv koden til hele header-filen ”Taxa.h” med definitionen af klassen Taxa.
- 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.
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
Constructoren skal anvende de respektive parametre til at sætte værdierne af samtlige attributter i
klassen Vognmand – dvs. også Taxa-objektet taxa_.
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):
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.
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.
OPGAVE 3 (15%)
Denne opgave skrives i C
Her ses prototypen for en funktion som kan modtage en tekststreng (char array):
printf("%s\n", tekstArray);
findOgErstat( tekstArray );
printf("%s\n", tekstArray);
return 0;
}
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
a) Skriv koden til hele header-filen ”Hotelroom.h” med definitionen af klassen Hotelroom.
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”.
#include "Hotelroom.h"
int main()
{
Hotelroom room1(10, 'D');
Hotelroom room2(34, 'S');
room1.setFree(false);
room1.printRoom();
room2.printRoom();
return 0;
}
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
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.
Metoden printHotel() skal udskrive hotellets navn og data for samtlige værelser i hotellet.
- 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:
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>).
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
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.
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.
<<utility>>
main
+ main(): int
Butik
- nav n_: string
1 - v arer_[ANTAL_VARER]: Vare
- kasser_[ANTAL_KASSER]: Kasse
1..ANTAL_VARER
Vare
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:
a) Skriv koden til hele header-filen Butik.h med definitionen af klassen Butik.
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.
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).
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.
Fejlmeddelelse 1:
Fejlmeddelelse 2:
Bilag 2 – Vare.h
#pragma once
#include <string>
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
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);
}
srand(time(0));
Ferielejlighed
- kategori_: int
- land_: string
- by_: string
- antalVaerelser_: int
- antalSovepladser_: int
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.
Rejsebureau
- string: navn_
- lejligheder_[MAX_ANTAL]: Ferielejlighed
- aktueltAntal_: int
1..MAX_ANTAL
Ferielejlighed
- kategori_: int
- land_: string
- by_: string
- antalVaerelser_: int
- antalSovepladser_: int
MAX_ANTAL skal defineres som en global konstant med værdien 50 i klassens header-fil.
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 print() skal udskrive data for alle rejsebureauets aktuelle ferielejligheder.
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.
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!”.
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.
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 .
b) Tilføj den manglende kode i filen Skuffe.cpp med implementeringen af klassens metoder.
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.
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
}
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
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.
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
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
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.
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.
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
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
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.
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.
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
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.
I testprogammet fra opgave 4c skal du tilføje en fan til klubben inden du udskriver klubbens data.
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.
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.
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.
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.
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
Car(int id, char cat, std::string model, int doors, char fuel, char gear, double price);
Gyldige værdier samt default-værdi for attributterne fremgår af nedenstående tabel. Default-værdierne en
naturligvis også gyldige.
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:
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.
Metoden searchCarByCategory(char category) skal udskrive data for alle Car-objekter hvor
attributten category_ har samme værdi som parameteren category.
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’.
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.
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.
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.
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.
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
Gyldige værdier samt default-værdi for attributterne fremgår af nedenstående tabel. Default-
værdierne en naturligvis også gyldige.
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)
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.
Skriv nu et lille test-program ( main()) til klassen Hotelroom. Programmet skal opfylde følgende:
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.
Metoden searchRoomWithSeaView() skal udskrive data for alle værelser som har havudsigt og
hvor værelsesnummeret ikke er 0.