LIACS >Kristian Rietveld >Courses >Programmeermethoden NA, Najaar 2017
headerimg

Banner image by Sebastian Niedlich on Flickr, CC BY-NC-SA 2.0


Programmeermethoden NA
Werkcollege 9: Op Papier II en Derde opgave II

Werkcollege 9 van het vak Programmeermethoden NA vindt plaats in de computerzalen van het Snellius-gebouw, op dinsdag 14 november 2017, van 11:00 tot 12:45 uur.

Voorbereiding

Als voorkennis wordt bekend verondersteld:
  • Inhoud colleges tot en met deze week

Het eigenlijke werkcollege

Op papier II

Maak deze opgaven op papier als voorbereiding op het schriftelijke tentamen. De assistenten delen geprinte exemplaren van de opgaven uit.
Klik hier voor de uitwerking.

De derde programmeeropgave

Werk verder aan de derde programmeeropgave. Merk op: alle kennis die nodig is om de volledige programmeeropgave te kunnen maken is nu besproken in de hoorcolleges. Tips? Zie hieronder.

Game Of Life gedeelte

Onderdelen waar aan kan worden gewerkt (de volgorde ligt overigens helemaal niet vast):

  1. Een functie om menu-keuzes in te lezen en te controleren. Zie ook de hint in de opdracht hoe er kan worden gecontroleerd of er inderdaad alleen een integer is ingevoerd en geen andere karakters.
  2. Het hoofdmenu met dummy-acties voor de gekozen opties. Op eenzelfde manier kan het submenu voor Life al worden gemaakt.
  3. Schrijf al een functie main die een functie voor het infoblokje aanroept en daarna het hoofdmenu start.
  4. Maak nu een klasse LifeWereld, zie ook de hint in de opdracht. Deze klasse heeft ondermeer een 2-dimensionaal array self.wereld met type np.bool8. En memberfuncties als afdrukken, schoon, random, doe_stap, enz. Hoogte, breedte, etc., zijn membervariabelen of attributen.
  5. Zorg ervoor dat de menu-opties goed aansluiten op de memberfuncties. Er zijn verschillende aanpakken mogelijk. In de functie die het menu implementeert kun je als eerste een object type LifeWereld aanmaken. Hierna start het menu. Telkens wanneer een menu-optie wordt gekozen roep je een methode op dit object aan, bijvoorbeeld wereld.schoon() na het kiezen van de optie Schoon.
  6. Maak de opties Schoon, Plaats Glider en Random. Schoon kan zelfs in 1 regel. De constructor __init__ zou de methode schoon aan kunnen roepen om een lege wereld te initialiseren. Bij "plaats glider" kun je toekenning aan een slice toepassen.
  7. Schrijf de methode om de wereld af te drukken. Vervolgens kun je de menu-functie zo maken dat steeds de wereld wordt afgedrukt, gevolgd door de menu-opties op 1 regel.
  8. Maak de optie Een en methode doe_stap. Let erop dat je een hulparray gebruikt om zo alle wijzigingen "gelijktijdig" plaats te laten vinden. En maak de optie Gaan.
  9. En de rest ... mag je zelf verzinnen. Houd het simpel!

Angry Birds gedeelte

  1. Lees als eerste aandachtig de opdracht door. Wat moet er allemaal gebeuren? Welke formules zijn er nodig? Begrijp ik alle benodigde formules?
  2. Vergeet overigens niet de imports voor zowel numpy als matplotlib bovenaan dit bestand!
  3. Denk na over een nette indeling voor een klasse AngryBirds (die we weer in een apart bestand schrijven). Denk aan de zaken die moeten gebeuren: een bestand met planeten inlezen, een bestand met vogels inlezen, een plot maken voor een gegeven planeet en ingelezen vogels. Wat voor methoden stellen we op?
  4. Begin met functies om de bestanden met planeten en vogels in te lezen. Hoe doen we dat op een handige manier? (Hint: zie ook het dictaat). Hebben we de massa en radius later nog nodig? Of berekenen we direct de zwaartekracht? Sla de inlezen data op een handige manier op, zodat het kan worden hergebruikt zolang het Angry Birds menu actief is en niet voor elke stap opnieuw hoeft te worden ingelezen.
  5. In de menu's hebben we ook de mogelijkheid nodig om een lijst met keuzes van alle planenten of alle vogels af te drukken. Zorg voor een functie die een nette lijst van planeten/vogels kan opleveren.
  6. Denk vervolgens na over het berekenen van alle datapunten die in de plot moeten verschijnen. Schrijf aparte functies voor het uitrekenen van de verschillende formules. Maak hier gebruik van NumPy arrays! Zonder loop kun je een formule in 1 keer voor een hele rij getallen berekenen!
  7. Plot vervolgens de berekende datapunten. Denk aan titel, labels op de assen, legenda, bereik, enz.