Information

Deadline No deadline
Submission limit No limitation

Sign in

Extra


Question 1: Auto

Maak een klasse Auto:

  1. Een auto heeft een merk, een type, een verbruik (in l per 100km), een kilometerteller, een tankinhoud, een maximum_tankinhoud en een bool lichtenAan.
  2. Schrijf een initializer die alle velden verwacht. Kijk goed na op ongeldige waarden.
  3. Schrijf een methode toonInfo die alle informatie van de auto op het scherm afdrukt. De status wordt gebruikt om de lampjes in de auto aan te geven. Indien er minder dan 10% van de tank over is, wordt de status ’tank bijna leeg’. Verwachte output:
BMW X5
5 l/100km
1234 km
Er zit nog 10l in de tank van 50l.
Status: ok
  1. Schrijf een methode rijd(d) die een afstand d in km meekrijgt. Denk eraan dat de kilometerstand en de tankinhoud dan aangepast moeten worden. Print hoeveel km de auto effectief gereden heeft. Tip: pas het eens toe op bovenstaande voorbeeld met rijd(300).
De auto heeft 200.0 km gereden.
  1. Schrijf een methode tank(l) die een hoeveelheid l in liter in de tank toevoegt. Print een foutboodschap als er teveel getankt wordt, anders print je niets. De booschap ziet er dan als volgt uit:
Fout: Te veel getankt. De tank kan niet meer bevatten.
  1. Schrijf een methode veranderLichten zonder parameters die de lichten aanzet als die uit staan en omgekeerd. Verander de methode toonInfo zodat het nu ook de status van de lichten vertoont:
BMX X5
5 l/100km
1234 km
Er zit nog 10l in de tank van 50l.
Status: ok
Lichten: aan
Question 2: Persoon

Maak een klasse Persoon (met voornaam en achternaam) en breid de klasse Auto uit:

  1. Een auto kan enkel rijden als er een bestuurder is. Een bestuurder is van het type Persoon. Voeg ook een variabele heeftBestuurder (een bool) toe.
  2. Zet in de initializer dat er standaard geen bestuurder aanwezig is. Je voegt de bestuurder dus ook NIET toe aan de initializer.
  3. Schrijf een methode stapIn die controleert of er al een bestuurder aanwezig is. Zo ja, dan blijft de oude bestuurder geldig. Zo niet, dan wordt er een nieuwe bestuurder ingesteld (vergeet de bool niet!).
  4. Schrijf een methode isErEenBestuurderAanwezig die een bool teruggeeft en een parameter meekrijgt waarin eventueel de bestuurder gezet kan worden.
  5. Schrijf een methode stapUit die de bestuurder verwijdert. Wat moet je dan allemaal aanpassen?
  6. Pas de methode toonInfo aan zodat de bestuurder getoond wordt (gebruik daarbij de methode toonInfo van de bestuurder) indien er een bestuurder is.
  7. Pas de methode rijd aan zodat die enkel werkt indien er een bestuurder aanwezig is.
  8. Voeg een positie toe aan de Auto (type Punt) die standaard staat op de oorsprong.
  9. Pas de methode rijd aan zodat die nu twee parameters dx en dy meekrijgt. Zorg ervoor dat alles blijft werken.
  10. Schrijf een methode botstTegen die een parameter Auto meekrijgt en nakijkt of de auto’s gebotst zijn. Ga er van uit dat ze botsen als de afstand minder dan 2m is.
Question 3: Datum

Schrijf een klasse Date die de representatie van een datum implementeert. Gebruik geen ingebouwde functies of klasses. We doen dat in stappen. Eerst schrijf je een aantal hulpfuncties (geen methodes!). Pas daarna start je met de klasse Date en ga je die hulpfuncties gebruiken (geen duplicate code!).

  • Zorg dat functies niet langer zijn dan 50 regels. Als die toch langer is, splits die dan op in logische deelfuncties.
  • Gebruik geen te diepe nesting (if binnen for binnen if binnen while ...)
  • Schrijf documentatie in elke functie/methode.
  1. Schrijf een functie (geen methode!) leap_year die nakijkt of een gegeven jaar een schrikkeljaar is. Als het een schrikkeljaar is, geef je True terug anders False. Een schrikkeljaar is deelbaar door 4 maar niet door 100, tenzij het deelbaar is door 400. E.g. 2004 en 2000 zijn schrikkeljaren, maar 1800 en 1900 niet.
  2. Schrijf een functie (geen methode!) days_in_month(m,y) die een maand en een jaar meekrijgt als parameters en het aantal dagen van die maand teruggeeft.
print(days_in_month(10,2021))
31
print(days_in_month(2,2021))
28
  1. Schrijf een functie next_month(m,y) die een tupel teruggeeft met daarin resp. de volgende maand en het jaar.
print(next_month(10,2021))
(11,2021)
print(next_month(12,2021))
(1,2022)
  1. Schrijf nu de klasse Datum die de representatie van een datum implementeert met een constructor die resp. dag, maand en jaar meekrijgt als parameters.
  2. Schrijf een methode __str__() (let op de dubbele underscores voor en na str; dat is een ingebouwde methode zoals __init__()) die de datum als string teruggeeft in het formaat dd-mm-yyyy.
  3. Schrijf een methode comes_before(Datum) die een andere Datum als parameter meekrijgt en True teruggeeft als de datum (self) voor de opgegeven datum komt en anders False.
  4. Schrijf een methode add_days(n) die n dagen telt bij de datum.
  5. Schrijf een methode get_days_to(Date) die een datum meekrijgt en het aantal dagen tot een opgegeven datum bepaalt (dit kan negatief zijn als de gegeven datum voor de huidige datum komt).
d1 = Date(11,10,2021)
d2 = Date(12,10,2021)
print(d1.get_days_to(d2))
1
print(d2.get_days_to(d1))
-1