LIACS >Kristian Rietveld >Courses >Programmeermethoden NA, Najaar 2016
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 zaal 302/304, zaal 303, zaal 306/308 en zalen 307 en 309 (de PC-zalen), op dinsdag 8 november 2016, van 11:15 tot 13:00 uur.

Spreek/Vragenuur in zalen 302 ... 309: dinsdag 8 en donderdag 10 november 2016, van circa 15:30 tot 17:00 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. De uitwerking is hier te vinden.

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 een object type LifeWereld aanmaken. Wanneer een menu-optie wordt gekozen roep je steeds een methode op dit object aan, bijvoorbeeld wereld.schoon().
  6. Maak de opties Schoon, Plaats Glider en Random. Schoon kan zelfs in 1 regel. De constructor __init__ zou 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. 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?
  3. Vergeet overigens niet de imports voor zowel numpy als matplotlib bovenaan dit bestand!
  4. Begin bijvoorbeeld met het inlezen van de planeten. Hebben we de massa en radius later nog nodig? Of berekenen we direct de zwaartekracht? Zorg ervoor dat de klasse een methode heeft om de lijst planeten "op te halen" zodat er in het hoofd-bestand een keuzemenu van kan worden gemaakt.
  5. Schrijf op dezelfde manier code om alle vogels in te lezen.
  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.