© Harry Broeders.
Deze opdracht bestaat uit de deelopdrachten 2a t/m 2e. Alle deelopdrachten moet je laten aftekenen door de docent.
Op pagina 7 van het dictaat
wordt gebruik gemaakt
van variabelen waarin een tijdsduur in uren en minuten kan worden opgeslagen.
Je hebt in de propedeuse geleerd dat een tijdsduur door middel van een struct
weergegeven kan worden. In de theorielessen heb ik besproken dat deze manier
van werken programmas oplevert die niet goed onderhoudbaar, uitbreidbaar
en herbruikbaar zijn. Je kunt een tijdsduur beter als ADT definiëren.
Het ADT (Abstract Data Type) Tijdsduur
moet als volgt gebruikt
kunnen worden (tijd1.cpp
):
//...
int main() {
Tijdsduur t1(3,50); // t1 is 3 uur en 50 minuten
cout<<"t1 = "; t1.print(); cout<<endl;
const Tijdsduur kw(15); // kw is 15 minuten
cout<<"kw = "; kw.print(); cout<<endl;
t1.erbij(kw); // Tel kw bij t1 op
cout<<"t1 = "; t1.print(); cout<<endl;
Tijdsduur t2(t1); // t2 is een kopie van t1
t2.eraf(kw); // Trek kw van t2 af
cout<<"t2 = "; t2.print(); cout<<endl;
t2.maal(7); // Vermenigvuldig t2 met 7
cout<<"t2 = "; t2.print(); cout<<endl;
Tijdsduur t3(3,-122); // t3 is 3 uur minus 122 minuten
cout<<"t3 = "; t3.print(); cout<<endl;
Tijdsduur t4(3,122); // t4 is 3 uur plus 122 minuten
cout<<"t4 = "; t4.print(); cout<<endl;
cout<<"Druk op de return-toets."<<endl;
cin.get();
return 0;
}
De uitvoer moet dan zijn:
t1 = 3 uur en 50 minuten
kw = 15 minuten
t1 = 4 uur en 5 minuten
t2 = 3 uur en 50 minuten
t2 = 26 uur en 50 minuten
t3 = 58 minuten
t4 = 5 uur en 2 minuten
Opdracht 2a.
Ontwerp en implementeer een ADT (Abstract Data Type) genaamd
Tip: Zorg ervoor dat de opgeslagen minuten altijd >=0 en <60 zijn. Het volgende code-fragment kan hierbij gebruikt worden:
|
Het ADT Tijdsduur
kan veel eenvoudiger gebruikt worden als we
ervoor zorgen dat een variabele van het zelfgemaakte type
Tijdsduur
gebruikt kan worden op dezelfde wijze als een variabele
van het standaard type int
.
Het ADT Tijdsduur
kan dan eenvoudig als volgt gebruikt worden
(tijd2.cpp
):
//...
int main() {
Tijdsduur t1(3,50); // t1 is 3 uur en 50 minuten
cout<<"t1 = "<<t1<<endl;
const Tijdsduur kw(15); // kw is 15 minuten
cout<<"kw = "<<kw<<endl;
t1+=kw; // Tel kw bij t1 op
cout<<"t1 = "<<t1<<endl;
Tijdsduur t2(t1-kw); // t2 is t1 min kw
cout<<"t2 = "<<t2<<endl;
t2*=7; // Vermenigvuldig t2 met 7
cout<<"t2 = "<<t2<<endl;
Tijdsduur t3(t2-122); // t3 is t2 minus 122 minuten
cout<<"t3 = "<<t3<<endl;
Tijdsduur t4(722-t1); // t4 is 722 minuten minus t1
cout<<"t4 = "<<t4<<endl;
if (t3!=t4)
cout<<"t3 is ongelijk aan t4."<<endl;
if (t3>t4)
cout<<"t3 is groter dan t4."<<endl;
cin.get();
return 0;
}
De uitvoer moet dan zijn:
t1 = 3 uur en 50 minuten
kw = 15 minuten
t1 = 4 uur en 5 minuten
t2 = 3 uur en 50 minuten
t2 = 26 uur en 50 minuten
t3 = 24 uur en 48 minuten
t4 = 7 uur en 57 minuten
t3 is ongelijk aan t4.
t3 is groter dan t4.
Opdracht 2b.
Pas het ADT |
Een slimme programmeur bedenkt dat het veel handiger is om een tijdsduur (alleen) als een aantal minuten op te slaan. Bij het afdrukken kan dit aantal minuten dan worden omgezet naar een aantal uren en een resterend aantal minuten (kleiner dan 60). Dit heeft twee voordelen:
Tijdsduur
neemt nu minder geheugenruimte
in.
Tijdsduur
kunnen nu
eenvoudiger gecodeerd worden. Deze bewerkingen zullen dus sneller uitgevoerd
worden.
De programmeurs die het ADT Tijdsduur
gebruiken mogen natuurlijk
niets merken van deze aanpassing. De programma's die gebruik maken van dit
ADT moeten natuurlijk wel opnieuw gecompileerd worden.
Opdracht 2d.
Pas het ADT |
Opdracht 2e.
Splits het programma uit opdracht 2d in 2 source files main.cpp en tijdsduur.cpp
en 1 header file tijdsduur.h. Zie paragraaf 3.30 in het
dictaat
|