Programmeermethoden
Werkcollege 11: Vierde opgave I

Het elfde werkcollege van het vak Programmeermethoden vindt plaats in zaal 302/304, zaal 303, zaal 306/308 en zalen 307 en 309 (de PC-zalen), op donderdagmiddag 22 november 2018, van 13:30 tot 15:15 uur voor de Informatica-studenten en op maandag 26 november 2018, van 13:30 tot 15:15 uur voor de Wiskunde-studenten. Anderen mogen kiezen. Het wordt verzorgd door de vaste staf.

Spreek/Vragenuur in zalen 302 ... 309: donderdag 22 november 2018, van circa 15:15 tot 17:00 uur; en maandag 26 november 2018, van circa 15:15 tot 17:00 uur.

Het eigenlijke werkcollege

Werk aan de vierde programmeeropgave! Enkele tips:
  1. Het pointerpracticum gedaan van het vorige werkcollege?
  2. Hergebruik (stukken van) het menu van de derde programmeeropgave, in het bijzonder de functies leesoptie en leesgetal.
  3. Splits in meerdere files, en produceer een makefile, zoals uitgelegd op een van de laatste sheets over datastructuren. Doe dit meteen vanaf het eerste begin!
  4. Denk na over de klassen-structuur. Tijdens het college van 22 november wordt hier gezamenlijk over nagedacht. Er is een class voor de "domme" vakjes, en een grote class voor het Othello-bord. Doe dit echt vanaf het begin!
  5. 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 (*).
  6. Afdrukken?
  7. 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 en diagonale pointers. Onthoud de hele tijd een pointer naar de onderste rij van het bord. Let op alle pointer-verbindingen.
  8. Maak eventueel een memberfunctie die een pointer naar veld (i,j) teruggeeft.
  9. Zet de beginpositie op het bord.
  10. [lastig] 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 27 november klaar moeten zijn ...]
  11. En een functie "klaar", of "gewonnen"?
  12. Maak de menselijke speler.
  13. Maak de computer-speler.
  14. Laat het spel spelen.
  15. Maak wat statistieken.
  16. [nu wordt het wat moeilijker:] Doe het aantal vervolg-partijen. Zie het eind van de sheets over recursie.
    [En dit zou rond 4 december klaar moeten zijn ...]
  17. [en nu nog moeilijker:] Doe het stapel-gebeuren. Zie het begin van de sheets over datastructuren.
  18. En destructoren? Ruim dus netjes alles op!
  19. Gomoku Hoe gaat het "experiment"? Wat moet in de grafiek? Kijk bijvoorbeeld hoe lang een spelletje computer-computer duurt, bij verschillende bord-groottes.
    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. Op internet staat alles en meer over gnuplot, bijvoorbeeld hier of [wie heeft deze geweldige site weggehaald?] daar (Wayback machine).

Huiswerk

De antwoorden op de opgaven worden tevens via WWW verspreid. Als er vragen over de opgaven zijn, stel deze dan (ook) op het college.