Programmeermethoden
Werkcollege 2: Eerste opgave I
Het
tweede werkcollege van het vak
Programmeermethoden
vindt plaats in de week van
9 tot en met 13 september 2024.
Voorbereiding
Als voorkennis wordt bekend verondersteld:
Het eigenlijke werkcollege
-
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:
-
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.
-
Doe eerst het gedeelte met de datum, daarna het vermenigvuldigen en de rest.
-
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 2015, of 1584. Pas op met 2014!
Maar de meesten 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 ...
- OK, aan de slag!
- Vraag dus eerst het geboortejaar. En doe nu vast controles.
Reken maar meteen de voorlopige leeftijd uit: als in 2042 iemand geboortejaar 2024 opgeeft is die persoon vooralsnog 18 — 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!
- Heb je in het voorgaande letterlijk 2013 of 2014 ingetikt? Volgend jaar klopt dat niet meer. Verstandig blijkbaar om een constante (const) te introduceren! Of meteen drie stuks?
Liefhebbers mogen met ctime werken.
- 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!
- Leeftijd goed uitgerekend? Te oude en te jonge mensen weggestuurd? Let op de randgevallen, zoals mensen die net één dag te jong zijn!
- 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.
- Goed getest? Alle data goed? Ga zo door!
- Heb je je aan de richtlijnen gehouden? Het is nog niet te laat!
-
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.
- Heeft de gebruiker de dag inderdaad goed?
- En dan nu de breuken, en daarna de meerkeuzevraag.
- Kijk eerst of je willekeurige getallen kunt fabriceren met de random-generator. Hoe zorg je er ibijvoorbeeld eenvoudig voor dat ze precies tussen 10 en 99 komen?
- Maak het gebeuren rond de breuken. Controleer de door de gebruiker gegeven antwoorden. Denk aan de foutmarge. Geef ook de juiste antwoorden.
- 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.
- Staat er genoeg commentaar, niet te veel en niet te weinig? Doe dat meteen vanaf het begin.
-
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.
-
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.