© 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 minutencout<<"t1 = "; t1.print(); cout<<endl;const Tijdsduur kw(15); // kw is 15 minutencout<<"kw = "; kw.print(); cout<<endl;t1.erbij(kw); // Tel kw bij t1 opcout<<"t1 = "; t1.print(); cout<<endl;Tijdsduur t2(t1); // t2 is een kopie van t1t2.eraf(kw); // Trek kw van t2 afcout<<"t2 = "; t2.print(); cout<<endl;t2.maal(7); // Vermenigvuldig t2 met 7cout<<"t2 = "; t2.print(); cout<<endl;Tijdsduur t3(3,-122); // t3 is 3 uur minus 122 minutencout<<"t3 = "; t3.print(); cout<<endl;Tijdsduur t4(3,122); // t4 is 3 uur plus 122 minutencout<<"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 minutencout<<"t1 = "<<t1<<endl;const Tijdsduur kw(15); // kw is 15 minutencout<<"kw = "<<kw<<endl;t1+=kw; // Tel kw bij t1 opcout<<"t1 = "<<t1<<endl;Tijdsduur t2(t1-kw); // t2 is t1 min kwcout<<"t2 = "<<t2<<endl;t2*=7; // Vermenigvuldig t2 met 7cout<<"t2 = "<<t2<<endl;Tijdsduur t3(t2-122); // t3 is t2 minus 122 minutencout<<"t3 = "<<t3<<endl;Tijdsduur t4(722-t1); // t4 is 722 minuten minus t1cout<<"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
|