Programmeermethoden
Werkcollege 8: Op papier II en Derde opgave II
Het
achtste werkcollege van het vak
Programmeermethoden
vindt plaats in
de week van
30 oktober tot met 3 november 2023.
Voorbereiding
Als voorkennis wordt bekend verondersteld:
-
Inhoud colleges tot en met deze week. Met name OOP en arrays.
Het eigenlijke werkcollege
Doe
deze opgaven op papier.
Maak allereerst de opgaven 1a en 2a.
Werk verder aan de derde programmeeropgave.
Zie ook de tips bij het zevende werkcollege.
Vergeet niet een constructor te maken,
die bijvoorbeeld de wereld = de puzzel "schoon" maakt.
En de beschrijvingen ook.
Zorg er eerst voor dat alles werkt voor de rijen.
Denk er aan dat de beschrijving van de zoveelste rij zelf een rijtje getallen is. Samen vormen deze
beschrijvingen dus weer een 2-dimensionaal array. Vul beschrijvingen aan met nullen. Misschien is het slim om twee van deze arrays te onderhouden, een voor de beschrijvingen na de laatste aanroep "Maak beschrijvingen" (de zogeheten "gegeven" puzzel-beschrijvingen) en een voor de beschrijvingen van het huidige plaatje. En later nog eens twee voor de kolommen ...
-
Zorg er allereerst voor dat het menu werkt. Maak in het menu een object MijnPuzzel van klasse (class) nonogram. (Als je dit object moet doorgeven, bijvoorbeeld aan een submenu, vergeet dan niet dat dit call-by -reference moet.) En zorg er voor dat de memberfuncties afdrukken ( ) en vulrandom ( ) in orde zijn, zie sheet 2–10 van het achtste college.
- Laat de grootte van de puzzel aanpassen.
Gebruik leesOptie en leesGetal,
deze laatste om bijvoorbeeld de nieuwe hoogte in te lezen.
En laat de symbolen voor wit en zwart aanpassen.
Dwing af dat ze verschillend zijn.
- Werkt het wijzigen van het random-percentage?
-
Nu is het tijd voor de functie maakrijbeschrijvingen ( ), die in het 2-dimensionale array rijen de beschrijvingen van de huidige puzzel opbergt (zie boven). De functie afdrukken ( ) moet de juiste getallen naast de betreffende rij afdrukken, tot de eerste nul. Zorg er voor dat dit goed werkt, en begin daarna pas aan de kolommen. Let in het bijzonder op blokken pixels die tegen de rechter zijkant van de puzzel eindigen.
-
Worden de kolombeschrijvngen netjes onder de puzzel afgedrukt?
Let er op dat sommige beschrijvingen langer zijn dan andere, en dat getallen soms meer dan één cijfer hebben.
-
Maak nu het toggelen onder de "cursorpositie"; dit is een eenregelige functie (tip: b = ! b;). De cursorpositie bestaat uit twee membervariabelen; let erop dat deze altijd correponderen met een punt binnen de wereld, en laat de functie afdrukken ( ) de positie netjes in beeld brengen.
- Maak ook het "verplaatsen" van de cursor.
- Lees de puzzel (de beschrijvingen) uit een file, en schrijf deze (de beschrijvingen) weg naar een file.
-
Controleer of de rijen voldoen aan de "gegeven" beschrijvingen. Je kunt bijvoorbeeld een tweede array voor de beschrijvingen van de huidige puzzel gebruiken, en deze voor iedere rij vergelijken met de "gegeven" beschrijvingen. Je kunt deze laatste ook direct vergelijken met de huidige puzzel.
Controleer dus per lijn = rij of kolom of de
beschrijvingen van het huidige plaatje kloppen met de puzzel-beschrijvingen.
- Maak tot slot de andere opties af.
Huiswerk
Maak opgaven met arrays uit de
opgavenbundel
(Opgaven 31 tot en met 36).
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.