Programmeermethoden
Werkcollege 7: Derde opgave I
Het
zevende werkcollege van het vak
Programmeermethoden
vindt plaats in
de week van
14 tot en met 18 oktober 2024.
Voorbereiding
Als voorkennis wordt bekend verondersteld:
-
Inhoud colleges tot en met deze week. Bekijk eventueel de video's.
Het eigenlijke werkcollege
Lees de
derde programmeeropgave goed door;
deze bestaat uit een menu-programma en de invulling daarvan. Verder wordt
al snel duidelijk dat er een nette functie moet komen
om getallen foutloos in te lezen: welk getal maak je van
abc12de3f?
Allereerst moet er dus een menu gemaakt worden waarbij de
keuze [L]ebowski leidt tot een regeltje op het scherm ("hier moet
nog ge-Lebowski-d worden"). In het programma is dat een functie-aanroep
lebowski ( ), waarbij de functie-body uit een
cout << ... en wellicht een
cin >> ... bestaat. Deze functie kan dan later uitgewerkt worden.
De meesten kiezen ervoor om het menu geen
memberfunctie van de
klasse
life te laten zijn (het kan/mag wel).
Je moet dan soms wel een object van deze klasse "call by reference"
doorgeven. (Als je niet meer weet wat dit betekent, kijk de betreffende video's nog eens.)
In de nu volgende onderdelen wordt stap voor stap toegewerkt naar
het beoogde eindresultaat. De volgorde ligt niet vast:
zo kun je bijvoorbeeld soms eerst andere opties maken.
-
Maak een menu-programma dat aan de gebruiker de volgende opties
presenteert: [H]eelschoon, [R]andom,
[P]arameters en [S]toppen. Bij H, R en P komt alleen een tekstje op
het scherm, bij S (hoofdletter of kleine letter) stopt het
programma. Gebruik een switch.
Alsjeblieft geen recursie, maar doe het met while-loops!
Maak de keuze-opties locale variabelen.
Denk aan het volgende: ieder (sub)menu is een herhaling van 1) presenteer de opties, 2) lees de keuze van de gebruiker in, en 3) doe de keuze van de gebruiker. Het (sub)menu stopt als de gebruiker precies dat kiest. Een optie kan ook het aanroepen van een submenu zijn.
-
Zorg bij de optie [P]arameters voor een simpel submenu,
waarbij T (of S) terug voert naar het hoofdmenu.
Dit submenu, en ook de bijbehorende functie, ziet er "precies" hetzelfde uit als het hoofdmenu.
Zorg dat er per (sub)menu één functie is.
NB Roep in het submenu niet het hoofdmenu aan!
-
Schrijf een functie die een optie inleest met cin.get ( ).
Ruim eerst alle (eventuele) Enter's op, en
pak dan de eerste niet-Enter.
-
Schrijf een functie leesGetal
die een getal karakter voor karakter inleest, wederom met
cin.get ( ).
Denk aan de parameters in de heading: zo weinig mogelijk.
Richt het zo in dat alles tot en met de eerstvolgende Enter wordt
weggelezen, en dat daarvan een zinnig getal wordt gemaakt.
Je kunt het bijvoorbeeld zo maken dat
[Enter][Enter][Enter]abc12def34gh[Enter] wordt geinterpreteerd
als 1234.
(Hierbij stelt [Enter] het karakter '\n' voor.)
-
Idem, maar nu moet het ingevoerde getal niet groter zijn dan
een als value-parameter meegegeven bovengrens.
Je kunt het bijvoorbeeld zo maken dat
abc12def34gh[Enter] wordt geinterpreteerd
als 123, als het getal kleiner dan of gelijk aan 1000 moet zijn.
Of als 1000. Of als -1. Of als 12. Of als 34. Kies en implementeer een van deze mogelijkheden.
================= dit zou rond 18 oktober zeker af moeten zijn ========================
- Voor het vervolg is elementaire kennis van 1-dimensionale arrays nodig!
Ook worden eenvoudige 2-dimensionale arrays gebruikt.
- Maak nu een klasse life,
zie de sheets van het zevende college.
Deze heeft onder meer een 2-dimensionaal array deWereld als membervariabele,
en memberfuncties als maakschoon ( ) en
drukaf ( ).
Ook hoogte, breedte, etc., zijn membervariabelen.
-
Maak ook een constructor, die de membervariabelen
de goede startwaarden geeft. Zorg voor eenvoudige functies om
eventueel hoogte en breedte te wijzigen, en het percentage.
- Zorg ervoor dat de menu-opties goed aansluiten op de memberfuncties.
Er zijn verschillende aanpakken mogelijk.
Je kunt bijvoorbeeld steeds het object van klasse life doorgeven.
In het hoofdmenu maak je een object MijnLife van klasse life,
en bijvoorbeeld s[C]hoon is dan de aanroep MijnLife.maakschoon ( );.
-
Maak de opties Drukaf, sChoon, Random (gebruik nog even tijdelijk rand ( )
als bij de tweede programmeeropgave).
De functie drukaf (of print) wordt straks misschien wel mooier.
Als voorbeeld: de functie maakschoon heeft een regel of 4.
================= dit zou rond 18 oktober eigenlijk ook af moeten zijn ========================
-
En de rest ... daar mag je over nadenken, zie ook later..
Houd het simpel!
Huiswerk
Maak opgaven met arrays uit de
opgavenbundel
(Opgaven 26 tot en met 30).
De antwoorden op de opgaven worden tevens via WWW verspreid,
evenals de uitwerkingen van oude tentamens.
Als er vragen over de opgaven zijn, laat het weten.