Om je optimaal voor te bereiden op de naderende examenreeks, wil je graag weten hoeveel tijd je nog exact hebt tot een bepaald examen. We gaan stelselmatig te werk, en we verdelen deze complexe opdracht op in kleinere deeltaakjes.
1) Om te beginnen lijkt het een goed idee te berekenen hoeveel seconden er verlopen zijn tussen middernacht en het tijdstip h:m:s binnen diezelfde dag. h neemt hierbij een waarde aan tussen 0 en 23. m en s nemen een waarde aan tussen 0 en 59. Schrijf een functie aantal_seconden_sinds_middernacht(h, m, s) die het aantal seconden teruggeeft tussen middernacht en het tijdstip h:m:s.
Invoer:
> aantal_seconden_sinds_middernacht(7, 22, 38)
Uitvoer:
26558
2) Vervolgens wil je berekenen hoe groot het tijdsverschil is tussen twee tijdstippen binnen dezelfde dag. h1:m1:s1 stelt het begintijdstip voor. h2:m2:s2 stelt het eindtijdstip voor. Schrijf een functie aantal_seconden_tussen_twee_tijdstippen_binnen_een_dag(h1, m1, s1, h2, m2, s2) die het aantal seconden berekent tussen het begin- en het eindtijdstip. Je mag ervan uitgaan dat het begintijdstip altijd voor het eindtijdstip komt.
We hebben niet voor niets de functie aantal_seconden_sinds_middernacht() geïmplementeerd. Je kan de functie aantal_seconden_tussen_twee_tijdstippen_binnen_een_dag() nu bijzonder kort en elegant implementeren door de functie aantal_seconden_sinds_middernacht() op een slimme manier te hergebruiken. Zelfs als je aantal_seconden_sinds_middernacht() niet succesvol hebt kunnen implementeren, mag je toch doen alsof deze functie werkt. De automatische evaluatie van Dodona gaat misschien protesteren, maar geen paniek: finaal ben ik het, en niet Dodona, die je code evalueert.
Invoer:
> aantal_seconden_tussen_twee_tijdstippen_binnen_een_dag(8, 47, 18, 20, 41, 23)
Uitvoer:
42845
3) In een volgende stap voegen we een datum toe. Voorlopig werken we binnen eenzelfde maand. d1 en d2 stellen de datum voor van het begin- en eindtijdstip. Schrijf een functie aantal_seconden_tussen_twee_tijdstippen_binnen_dezelfde_maand(d1, h1, m1, s1, d2, h2, m2, s2) die het aantal seconden berekent tussen het begin- en het eindtijdstip. Je mag ervan uitgaan dat het begintijdstip altijd voor het eindtijdstip komt. Denk na hoe je de functie aantal_seconden_tussen_twee_tijdstippen_binnen_een_dag() hier zinvol kunt hergebruiken.
Invoer:
> aantal_seconden_tussen_twee_tijdstippen_binnen_dezelfde_maand(1, 1, 10, 49, 6, 16, 39, 52)
Uitvoer:
487743
4) Nu ben je klaar voor het echte werk. We voegen nog M1en M2 toe, die de maand voorstellen van het begin- en eindtijdstip. Omdat je focus ligt op de examens in december en je niet vroeger dan november begint te studeren, kunnen M1 en M2 in deze opgave uitsluitend de waarden 11 en 12 aannemen. Schrijf een functie aantal_seconden_tussen_twee_tijdstippen(M1, d1, h1, m1, s1, M2, d2, h2, m2, s2) die het aantal seconden berekent tussen het begin- en het eindtijdstip. Je mag ervan uitgaan dat het begintijdstip altijd voor het eindtijdstip komt. Denk na hoe je de functie aantal_seconden_tussen_twee_tijdstippen_binnen_dezelfde_maand() hier zinvol kunt hergebruiken.
Invoer:
> aantal_seconden_tussen_twee_tijdstippen(11, 17, 12, 55, 0, 12, 5, 10, 25, 0)
Uitvoer:
1546200
5) Schrijf een functie seconden_naar_dagen_uren_minuten_seconden(s) die een aantal seconden inleest. Je functie geeft een string terug met daarin het aantal dagen, uren, minuten en seconden terug dat overeenkomt met s seconden. Kijk naar het voorbeeld voor de precieze vorm.
Invoer:
> seconden_naar_dagen_uren_minuten_seconden(1546200)
Uitvoer:
'17d 21h 30m 0s'