Programmeermethoden
Werkcollege 11: Vierde opgave I
Het elfde werkcollege van het vak
Programmeermethoden
vindt plaats in
de week van 17 tot en met 21 november 2025.
Het eigenlijke werkcollege
Werk aan de vierde programmeeropgave! Enkele tips:- Het pointerpracticum gedaan van het vorige werkcollege?
- Hergebruik (stukken van) het menu van de derde programmeeropgave, in het bijzonder functies als leesOptie en leesGetal.
- Splits in meerdere files, en produceer een makefile, zoals uitgelegd op sheet 4. Zie ook de opgave, en gebruik de files die daar genoemd worden. Doe dit meteen vanaf het eerste begin!
-
Tijdens het college van 20 november wordt er ook gewerkt aan de klasse-definities.
Welke klassen maak je, wat zijn hun member-variabelen en -functies?
- Bouw eerst een dubbelverbonden pointerlijst van de juiste lengte (de breedte
van het bord): de bovenste rij van het bord.
Gebruik de 2-de en 6-de pointer!
Het is handig om deze functie zo te maken dat hij/zij de pointer naar zo'n lijst teruggeeft (*).
Denk aan een constructor voor het bordvakje. Wat doet die met de 8 buurpointers? Wat moet er allemaal in dat vakje worden opgeslagen? - Afdrukken? Maak snel een afdruk-functie die het hele speelveld netjes afdrukt.
- Bouw met één aanroep van (*) de bovenste rij van het bord. Plak er "hoogte-1" rijen onder aan vast: maak steeds zo'n rij met (*) en "rits" met de verticale (0 en 4) en diagonale (1, 3, 5 en 7) pointers. Onthoud de hele tijd een pointer naar de onderste rij van het bord, en uiteraard een pointer, de ingang van het bord, naar de bovenste rij. Let op alle pointer-verbindingen.
- Maak eventueel een memberfunctie die een pointer naar veld (i,j) teruggeeft.
- Zet de beginpositie op het bord.
- Maak een memberfunctie die een zet op veld (i,j) doet.
- Maak wellicht ook een functie die kijkt of dat kan/mag.
[Dit zou rond 21 november klaar moeten zijn ... en misschien wel wat meer ...] - En een functie "volbord", of "gewonnen"?
- Maak de menselijke speler.
- Maak de computer-speler.
- Laat het spel spelen.
- Maak wat statistieken. Laat het spel meerdere keren spelen.
- [nu wordt het wat moeilijker:] Doe het aantal vervolg-partijen. Zie het eind van de sheets over recursie.
- Als het goed is, kun je nu een volledig random spel spelen.
[En dit zou rond 28 november klaar moeten zijn ...] - Als het goed is heb je bij de stapel een functie nodig die een kopie van een bord maakt.
- [en nu nog moeilijker:] Doe het stapel-gebeuren. Passen op dit onderdeel kost een halve punt. Zie het begin van de sheets over datastructuren.
- En destructoren? Ruim dus echt netjes alles op! Tip: maak een "gewone" functie die het bord verwijdert. Test eventueel met (Linux) valgrind of dat gelukt is.
-
Hoe gaat het "experiment" voor de grafiek in het verslag?
Wat moet in die grafiek?
Kijk bijvoorbeeld hoe lang een winnend/verliezend random spelletje duurt, bij verschillende
bord-groottes. Speel daartoe een flink aantal spelletjes
van de computer tegen zichzelf.
Als het goed is, is het eenvoudig in het programma een for-loop
te gebruiken om dit te doen.
Speel bijvoorbeeld
"tig" keer met
de computer tegen zichzelf, en noteer bijvoorbeeld
hoe lang het duurt.
Plot dat.
Handige mensen laten het programma zelf "tig" keer spelen,
en tellers bijhouden.
Varieer bijvoorbeeld de bordgrootte.
Hoe maak je een mooi grafiekje? Stel je hebt een file stats.txt, zoiets als:
1 7
2 12
3 14
...
Gebruik nu gnuplot, en wel als volgt. Geef eerst het commando gnuplot, en dan (waarbij gnuplot> de prompt binnen gnuplot is):
gnuplot> plot "stats.txt" with lines
Er is een pdf-exportfunctie.
En dan dat plaatje in je LaTeX-file binnenhalen.
Je kunt gnuplot onder Windows eenvoudig installeren van hier (download versie 5.2.8, bijvoorbeeld). Binnen gnuplot moet je misschien het "loadpath" goed zetten, met zoiets als gnuplot> set loadpath "C:\\JeMap\\" om de files die je wilt plotten te kunnen vinden. In Ubuntu is het ook eenvoudig te installeren. Op internet staat alles en meer over gnuplot, bijvoorbeeld daar (Wayback machine).
Er mag ook een ander plot-programma gebruikt worden.
Huiswerk
- Maak de opgaven 57 tot en met 61 uit de opgavenbundel.
De antwoorden op de opgaven worden tevens via WWW verspreid. Als er vragen over de opgaven zijn, laat het weten.