Programmeermethoden
Werkcollege 7: Derde opgave I

Het zevende werkcollege van het vak Programmeermethoden vindt plaats in de week van 16 tot en met 20 oktober 2023.

Voorbereiding

Als voorkennis wordt bekend verondersteld:

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 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 puzzel te laten zijn (het kan/mag wel). Je moet dan soms wel een object van deze klasse "call by reference" doorgeven. (Als je niet weet wat dit betekent, kijk de betreffende video's.)

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.

  1. Maak een menu-programma dat aan de gebruiker de volgende opties presenteert: [T]ekenen, p[U]zzelen, [P]arameters en [S]toppen. Bij T, U 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.
  2. Zorg bij de optie p[U]zzelen voor een simpel submenu, waarbij T 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!
  3. Schrijf een functie die een optie inleest met cin.get ( ). Ruim eerst alle (eventuele) Enter's op, en pak dan de eerste niet-Enter.
  4. 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.)
  5. 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 21 oktober zeker af moeten zijn ========================
  6. Voor het vervolg is elementaire kennis van 1-dimensionale arrays nodig! Ook worden eenvoudige 2-dimensionale arrays gebruikt.
  7. Maak nu een klasse puzzel, 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.
  8. 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.
  9. Zorg ervoor dat de menu-opties goed aansluiten op de memberfuncties. Er zijn verschillende aanpakken mogelijk. Je kunt bijvoorbeeld steeds het object van klasse puzzel doorgeven. In het hoofdmenu maak je een object MijnPuzzel van klasse puzzel, en bijvoorbeeld s[C]hoon is dan de aanroep MijnPuzzel.maakschoon ( );.
  10. 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 21 oktober eigenlijk ook af moeten zijn ========================
  11. 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.