Programmeermethoden
Werkcollege 2: Eerste opgave I

Het tweede werkcollege van het vak Programmeermethoden vindt plaats in de week van 12 tot en met 16 september 2022.

Voorbereiding

Als voorkennis wordt bekend verondersteld:

Het eigenlijke werkcollege

  1. Maak de eerste programmeeropgave (af); lees vooral de tips hieronder. Denk hierbij aan de huisregels, dit in het licht van de smoezen. Lees ook de richtlijnen bij programmeeropgaven eens door.
    Tijdens het derde werkcollege kan overigens ook weer aan de eerste programmeeropgave gewerkt worden, en in het bijzonder dan ook aan het verslag.
    En dan nu eerst wat algemene tips:
  2. Bedenk een goed plan. Welke vragen moet je aan de gebruiker stellen? En in welke volgorde? Welke variabelen zijn nodig om de antwoorden, oftewel de invoer van de gebruiker in op te slaan? Welke variabelen zijn nodig om het rekenwerk te doen? Welke "formule" berekent de leeftijd? (Hint: een variabele leeftijd?) Hoe zou je uit je hoofd de geboortedag bepalen? Wat zijn schrikkeljaren? Denk je aan const's? En zet meteen kort commentaar.
  3. Doe eerst het gedeelte met de datum, daarna de temperatuurvraag en de rest.
  4. Maak het programma stapsgewijs. Maak het eerst zo dat de "gewone" gevallen goed gaan, en daarna dat ook niet bestaande maanden en dagen goed worden afgewikkeld (het programma moet dan meteen met een korte uitleg, via een return 1;, stoppen). Dat is bijvoorbeeld het geval als iemand meteen een kansloos jaartal ingeeft, zoals 2042, of 2013, of 1584. Pas op met 2012!
    Maar sommigen vinden het handiger om meteen die controles al te programmeren, dus eerst het jaartal helemaal te checken.
    Het heeft dus voor de duidelijkheid geen zin om de maand te vragen als het jaar al verkeerd was. En analoog voor de dag..
  5. OK, aan de slag!
  6. Vraag dus eerst het geboortejaar. En doe nu vast controles.
    Reken maar meteen de voorlopige leeftijd uit: als in 2042 iemand geboortejaar 2023 opgeeft is hij/zij vooralsnog 19 — of een jaar jonger, maar dat weet je later pas. Hulpvariabele? Als iemand straks blijkt later in het jaar jarig te zijn, is die persoon een jaar jonger dan je eerst dacht!
  7. Heb je in het voorgaande letterlijk 2011 of 2012 ingetikt? Volgend jaar klopt dat niet meer. Verstandig blijkbaar om een constante (const) te introduceren! Of meteen drie stuks?
    Liefhebbers mogen met ctime werken.
  8. Ga zo door met geboortemaand en geboortedag. Bij die laatste: vang alle mogelijke fouten af (we gaan er wel steeds vanuit dat iemand een getal intikt): -7, 0, 1234, 32, 31 (in februari, april, juni, september, november), en dan februari!
  9. Leeftijd goed uitgerekend? Te oude en te jonge mensen weggestuurd? Let op de randgevallen, zoals mensen die net één dag te jong zijn!
  10. Nu gaan we uitrekenen op welke dag de ingevoerde datum viel. Tip: bereken hoeveel dagen er dan verstreken zijn sinds 1 januari 1901, wat trouwens een dinsdag was; druk dat getal af. Of dat getal modulo (in C++ een procent-teken) 7!? Tweede tip: geen loops, gewoon in een formule. Derde tip: doe eerst alsof de ingevoerde datum 1 januari van een of ander jaar was, en bouw dat langzaam uit.
    Voor de maanden gaat dat waarschijnlijk een if ... else if ... else if ... worden.
  11. Goed getest? Alle data goed? Ga zo door!
  12. Heb je je aan de richtlijnen gehouden? Het is nog niet te laat!
  13. Gebruik een char, zeg kar, om de eerste letter van de weekdag in op te bergen. En dan is een zinnige test bijvoorbeeld if ( kar == 'd' ) ... om te kijken of het dinsdag of donderdag is. In dat geval moet je trouwens nog een letter vragen.
  14. Heeft de gebruiker de dag inderdaad goed?
  15. En dan nu de temperatuurvraag, en daarna de meerkeuzevraag.
  16. Kijk eerst of je willekeurige getallen kunt fabriceren met de random-generator. Hoe zorg je er eenvoudig voor dat ze precies tussen 10 en 99 komen?
  17. Maak het gebeuren rond de temperatuurvraag. Controleer het door de gebruiker gegeven antwoord. Geef ook de juiste antwoorden.
  18. Maak de twee meerkeuzevragen, en het check het antwoord van de gebruiker. Zorg ervoor dat bij beide vragen hetzelfde antwoord (zeg B) goed is. Zorg ervoor dat er zo weinig mogelijk dubbele code in het programma staat.
  19. Staat er genoeg commentaar, niet te veel en niet te weinig? Doe dat meteen vanaf het begin.
  20. Veel gestelde vragen:
    • Mag je strings/arrays gebruiken?
      Nee.
    • En functies?
      Nee.
    • En ceil, floor, fabs?
      Nee.
    • En while-loops of for-loops?
      Nee.
    • Gekke trucs om de dag van de week te bepalen?
      Nee.
    • Andere include's naast iostream?
      Nee. Misschien voor liefhebbers ctime: tijd. En soms is voor de random-generator cstdlib noodzakelijk.
    • En objecten (class)?
      Nee.
    Allemaal niet nodig. Nu heeft iedereen dezelfde middelen.
  21. Zorg ervoor dat je het verschil tussen het infoblokje en commentaar binnen de C++-code snapt. Euuuh ... wat is een infoblokje?

Huiswerk

De antwoorden op de opgaven worden tevens via WWW verspreid. Als er vragen over de opgaven zijn, laat het weten.