Programmeermethoden
Werkcollege 7: Derde opgave I

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

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 sChoon leidt tot een regeltje op het scherm ("hier moet nog ge-sChoon-d worden"). In het programma is dat een functie-aanroep maakschoon ( ), 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 nono(gram) 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: s(C)hoon, (R)andom, (P)arameters en (S)toppen. Bij C, R en P komt alleen een tekstje op het scherm, bij S 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)arameters 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 16 oktober zeker af moeten zijn ========================
  6. Voor het vervolg is elementaire kennis van 1-dimensionale arrays nodig! Ook worden eenvoudige 2-dimensionale arrays gebruikt. Kijk dus wellicht eerst de betreffende video's.
  7. Maak nu een klasse nono(gram), zie de sheets van het zevende college. Deze heeft onder meer een 2-dimensionaal array denono 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 nono doorgeven. In het hoofdmenu maak je een object MijnNonogram van klasse nono, en bijvoorbeeld s(C)hoon is dan de aanroep MijnNonogram.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 16 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.