[G_PRO] Basis Programmeren en OO Programmeren
DigitAP
  • Welkom
  • Inleiding
    • Benodigdheden
    • Afspraken code
    • Afspraken oefeningen
    • Nuttige extras
    • Dankwoord
    • Mee helpen?
  • Semester 1: Programming Principles
    • H1: Werken met Visual Studio
      • Introductie tot C#
      • Visual Studio en .NET Core installeren
      • Een C# project maken in Visual Studio
      • Fouten in je code
      • Je eerste stappen in C#
      • Input/Output: ReadLine/WriteLine
      • Kleuren in Console
      • Oefeningen
    • H2: Variabelen en datatypes
      • De syntaxis van C#
      • Datatypes
      • Variabelen
      • Expressies en operators
      • Oefeningen
    • H3: Strings en hun methoden
      • Strings
      • Strings samenvoegen
      • Omzetten van en naar strings
      • Functionaliteit van strings
      • Oefeningen
    • H4: Beslissingen
      • Beslissingen intro
      • Enkelvoudige booleaanse expressies
      • If, else, else if
      • Samengestelde booleaanse expressies
      • Scope van variabelen
      • Switch
      • Oefeningen
    • H5: Loops
      • Loops intro
      • While en Do While
      • For
      • Debuggen
      • Oefeningen
    • H6: Arrays
      • Array principes
      • Alternatieve syntax
      • Werken met arrays
      • Defaultwaarden
      • List<T>
      • Oefeningen
    • H7: Methoden
      • Methoden intro
      • Parameters
      • Return waarden
      • Geavanceerde methoden
      • Oefeningen
    • Intermezzo: TextCell
    • H8: Numerieke data
      • De Math klasse
      • Random
      • Casting en conversie
      • Oefeningen
    • H9: Meerdimensionaal werken
      • N-dimensionale arrays
      • Geneste iteratie
      • Oefeningen
    • H10: Gevorderde tekstverwerking
      • Voorstelling van tekst
      • Interpolatie met formattering
      • Werken met arrays van strings
      • Input en output van tekstbestanden
      • Oefeningen
    • Afsluiter: TextCell2D
  • Semester 2 : OOP
    • H10: Klassen en objecten
      • OOP Intro
      • Klassen en objecten aanmaken
      • DateTime: leren werken met objecten
      • Enumeraties: nog een eigen datatype
      • Klassen en objecten weergeven deel 1
      • Attributen
      • Methoden
      • Access modifiers
      • Properties
      • Oefeningen
    • H11: Objecten (al dan niet) aanmaken
      • Constructors
      • Spelen met strings
      • Oefeningen
    • H12: Geheugenmanagement bij klassen
      • value en reference met eigen objecten
      • nullable value types
      • NullReference exception
      • Oefeningen
    • H13: Datastructuren
      • Foreach en var
      • List
      • Dictionary
      • Immutable datastructuren
      • Verdere datastructuren
      • Oefeningen
    • H14: Overerving
      • Overerving intro
      • Virtual en override
      • Abstract
      • Constructors bij overerving
      • Oefeningen
    • H15: Geavanceerde overerving
      • protected access modifier
      • Base keyword
      • System.Object
      • Oefeningen
    • H16: Exception handling
      • Werken met exceptions
      • Zelf uitzonderingen maken
      • Wanneer exceptions en handling gebruiken
      • Oefeningen
    • H17: Polymorfisme en interfaces
      • Polymorfisme
      • Polymorfisme in de praktijk
      • Interfaces
      • Losse koppeling
      • Oefeningen
    • H18: Testing
      • Intro Testing
      • Wat is Unit Testing
      • Waarom Unit Testing?
      • Wanneer Unit Testing?
      • Schrijven van een unit test: AAA methode
      • Eerste voorbeeld: Sum
      • Assert
      • Oefening even of oneven getal
      • TestInitialize en DataRows
      • Oefening BMI
      • Exception testing
      • Oefening BMI exception
      • Oefening SchoolAdmin test null-waarden en TestCleanup
      • Oefening SchoolAdmin test equals
      • Oefening SchoolAdmin test cursus zoeken met id
      • Dependencies bij Unit Testing
      • Mocking
      • Oefeningen Mocking
      • Test Driven Development
      • Class Library
      • Oefeningen TDD
    • H19: SOLID
      • Single Responsibility Principle (SRP)
      • Open/Closed Principle (OCP)
      • Liskov Substitution Principle (LSP)
      • Interface Segregation Principle (ISP)
      • Dependency Inversion Principle (DIP)
  • Appendix
    • Visual Studio Tips & Tricks
    • Ea-ict coding guidelines
    • Oefeningen kerkhof
  • Semester 1 appendix
    • Nice to know stuff
      • Out en Ref parameters
      • Jagged arrays
    • All-In-Projecten
      • Overzicht
      • Console Matrix
      • Ascii filmpjes maken met loops
      • Ascii filmpjes maken met methoden
      • Fun with methods: een verhaalgenerator
      • Tekst-gebaseerd Maze game
      • Conway game of life
  • Semester 2 appendix
    • Operator overloading
    • Object Initializer Syntax
    • Compositie en aggregatie
    • Nice to know stuff
      • Klassen herbruiken
      • Expression bodied members
    • All-In-Projecten
      • Overzicht
      • OO Textbased Game
      • War Simulator
      • Map Maker
      • Magic The Gathering API
      • SchoolAdmin
  • Pro (geen leerstof en/of in opbouw)
    • Bitwise operators
    • Generics en collections
      • Generics methoden en types
      • Generic classes en constraints
      • Collections
      • Labo-oefeningen
    • Events
      • Events
      • Chat server
    • Software engineering
      • SOLID
Powered by GitBook
On this page
  • Inleiding
  • H9 - FillRandom
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H9 - MultiplicationTables
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H9 - MakingTeams
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H9-Multiplications
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H9-SumRowN
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • H09-RowSums
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H09-Pixels
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H09-color-filter
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H09-triangle-filter
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H09-HeatmapPaardensprong
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
  • H09-ConwayGameOfLife
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
Export as PDF
  1. Semester 1: Programming Principles
  2. H9: Meerdimensionaal werken

Oefeningen

Inleiding

Al deze oefeningen maak je als statische methoden van een klasse Meerdimensionaal. Je kan elk van deze methoden uitvoeren via een keuzemenu, zoals bij vorige hoofdstukken.

H9 - FillRandom

Leerdoelen

Gebruik van een 2 dimensionale array en Random.

Functionele analyse

Vul een 2D array met willekeurige getallen en maak de som van alle getallen.

Technische analyse

Maak in een methode FillRandom een twee dimensionale array van 4 rijen en 4 kolommen.

Vul deze array met willekeurige getallen van 0 tot en met 9.

Maak de som van alle getallen.

Toon de inhoud van de array zoals in het voorbeeld (je kan "\t" gebruiken voor de afstand tussen de getallen) en toon de som.

Voorbeeldinteractie

H9 - MultiplicationTables

Leerdoelen

Gebruik van een 2 dimensionale array.

Functionele analyse

In een twee dimensionale array moet je de tafels van vermenigvuldiging van 1 tot en met 10 plaatsen en vervolgens tonen.

Technische analyse

Maak in een methode MultiplicationTableseen twee dimensionale array van 10 rijen en 10 kolommen. Plaats daarin de producten van de tafels van vermenigvuldiging en toon de inhoud zoals in het voorbeeld.

Voorbeeldinteractie

// Tip
table[row,column]:d3

H9 - MakingTeams

Leerdoelen

Gebruik van één en twee dimensionale arrays.

Functionele analyse

Je moet 3 teams samenstellen en de samenstelling bijhouden. Dit doe je op basis van 6 gegeven namen.

Technische analyse

Voeg een nieuwe methode MakingTeams toe aan de klasse.

Hierin maak je eerst een array met 6 verschillende namen. Bijvoorbeeld:

string[] names = { "Els", "Ali", "John", "Hanna", "Toon", "Mora" };

Maak vervolgens een twee dimensionale array voor de teams. Er zijn 3 teams. Op de eerste plaats van elke rij moet de naam van het team komen. Op plaats 2 en 3 komen de namen van de teamspelers.

Vraag eerst aan de gebruiker om de namen van de teams in te geven.

Vervolgens verdeel je de namen over de spelersplaatsen: de eerste en de tweede naam komen in het eerste team, de derde en vierde in het tweede team, ... Toon de samenstelling van de teams zoals in het voorbeeld.

Voorbeeldinteractie

H9-Multiplications

Leerdoelen

Werken met 2 dimensionale arrays. Gebruik van methoden met parameters.

Functionele analyse

Met willekeurige getallen kan de gebruiker de tafels van vermenigvuldiging oefenen. Op het einde wordt het aantal correcte antwoorden getoond.

Technische analyse

Maak een methode Multiplications. Hierin maak je een 2D array met 10 rijen en 3 kolommen. In kolom 1 en 2 zet je willekeurige getallen van 1 tot en met 12. In de 3de kolom bereken je het resultaat van de vermenigvuldiging van de 2 vorige getallen in de rij. Bijvoorbeeld:

Roep vervolgens een methode PracticeMultiplications op waaraan je de 2 dimensionale array meegeeft als argument. In deze methode laat je voor elke rij uit de array door de gebruiker het product berekenen van het getal uit de eerste kolom en het getal uit de 2de kolom. Toon telkens of het product correct of fout is (d.w.z. of het gelijk is aan het getal in de 3de kolom). Bereken hoeveel keer de gebruiker het juiste antwoord gegeven heeft en geef dit resultaat terug.

Toon tenslotte in Multiplications het behaalde resultaat.

Voorbeeldinteractie

H9-SumRowN

Leerdoelen

  • Werken met multidimensionale arrays

Functionele analyse

We wensen de gegevens in één rij te groeperen door hun som te bepalen, een beetje zoals je dat in een Excel spreadsheet zou kunnen doen.

Technische analyse

Schrijf in de klasse Meerdimensionaal een methode SumRowN. Deze heeft twee parameters: een meerdimensionale array van double en een rijnummer (een int). De returnwaarde is de som van alle waarden op de rij met het gevraagde nummer.

Deze methode toont niets op de console, maar je kan ze wel testen via deze voorbeeldcode, die je mag gebruiken wanneer deze oefening wordt opgestart via het keuzemenu:

double[,] numbers = {{4.2, 8.1, 3.3},
                     {2.0, 4.0, 6.0},
                     {3.1,3.2,3.3}};
Console.WriteLine("Van welke rij wil je de som zien?");
int row = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(SumRowN(numbers,row));

H09-RowSums

Leerdoelen

  • Werken met multidimensionale arrays

Functionele analyse

We wensen de gegevens in één rij te groeperen door hun som te bepalen, een beetje zoals je dat in een Excel spreadsheet zou kunnen doen.

Technische analyse

Schrijf in de klasse Meerdimensionaal een methode RowSums. Deze maakt een tweedimensionale array met het gevraagde aantal rijen en het gevraagde aantal kolommen aan. Je mag veronderstellen dat er een geldig aantal wordt ingegeven. Vervolgens vraagt ze, rij per rij en kolom per kolom, een getalwaarde. Wanneer elke positie is ingevuld, toont ze de som per rij van de ingegeven getallen.

Voorbeeldinteractie

Hoe veel rijen telt je array?
> 3
Hoe veel kolommen telt je array?
> 2
Waarde voor rij 1, kolom 1?
> 4
Waarde voor rij 1, kolom 2?
> 2
Waarde voor rij 2, kolom 1?
> 1
Waarde voor rij 2, kolom 2?
> 1
Waarde voor rij 3, kolom 1?
> 7
Waarde voor rij 3, kolom 2?
> 9
Sommen per rij:
6
2
16

H09-Pixels

Leerdoelen

  • Werken met multidimensionale arrays

  • Werken met enumeratietypes

Functionele analyse

We willen een simpel tekenprogramma maken in de terminal. De gebruiker kan pixel per pixel een gewenste kleur aangeven.

Technische analyse

Schrijf in Meerdimensionaal een methode Pixels.

Vraag hierin eerst aan de gebruiker welke afmetingen hij wil gebruiken voor zijn afbeelding. Dit bepaalt het aantal rijen en kolommen en dus het aantal pixels. Maak vervolgens een array van ConsoleColor waarden aan met deze afmetingen. Vraag tenslotte in een lus wat de gebruiker wil doen:

  • een pixel kleuren

    • vraag hierbij de rij-index en kolom-index

    • vraag ten slotte in welke kleur deze moet worden ingevuld

      • je kan sneller een array van alle kleuren krijgen met volgende code: ConsoleColor[] kleuren = (ConsoleColor[]) Enum.GetValues(typeof(ConsoleColor));

      • je hoeft deze instructie niet volledig te begrijpen: ze doet hetzelfde als ConsoleColor[] kleuren = {ConsoleColor.Back, ConsoleColor.DarkBlue, ...} maar vraagt gewoon minder typwerk

  • de afbeelding zoals ze momenteel is tonen

    • toon hiervoor elke pixel als een spatie met Console.Write(" ")

Voorbeeldinteractie

H09-color-filter

Leerdoelen

  • Werken met multidimensionale arrays

  • Werken met enumeratietypes

Functionele analyse

We zullen ons tekenprogramma uitbreiden met een extra functie die de array bewerkt. Met andere woorden, een (simpele) afbeeldingsfilter. Deze zal bepaalde pixels automatisch rood kleuren.

Technische analyse

Schrijf een functie RedFilter. Deze heeft een afbeelding (een ConsoleColor[,]) als invoer en vervangt alle vakjes die zich op en oneven rij én een oneven kolom bevinden door de kleur rood. Ze toont de afbeelding niet.

Deze oefening kan je niet rechtstreeks oproepen via het keuzemenu voor deze klasse. Het wordt een extra optie om iets met je afbeelding te doen.

Voorbeeldinteractie

Wat wil je doen?
1. een pixel kleuren
2. afbeelding tonen
3. roodfilter toepassen

H09-triangle-filter

Leerdoelen

  • Werken met multidimensionale arrays

  • Werken onderling afhankelijke indexen

Functionele analyse

We zullen ons tekenprogramma uitbreiden met nog een extra functie die de array bewerkt. Deze functie "knipt" de afbeelding diagonaal in twee.

Technische analyse

Schrijf een functie LowerTriangleFilter. Deze heeft een afbeelding (een ConsoleColor[,]). Ze zorgt ervoor dat alle pixels op of onder de diagonaal van links boven tot rechts onder wit worden gemaakt. Dit vereist wat te veel rekenwerk als de afbeelding geen vierkant is, dus geef de foutmelding "deze filter kan niet worden toegepast op deze afbeelding" als het aantal rijen verschilt van het aantal kolommen.

Deze oefening kan je niet rechtstreeks oproepen via het keuzemenu voor deze klasse. Het wordt een extra optie om iets met je afbeelding te doen.

Voorbeeldinteractie

Wat wil je doen?
1. een pixel kleuren
2. afbeelding tonen
3. roodfilter toepassen
4. driehoeksfilter toepassen

H09-HeatmapPaardensprong

Leerdoelen

  • Werken met multidimensionale arrays

  • Werken met geneste iteratie

  • Werken met Random

Functionele analyse

Ik wil een paard een aantal willekeurige (random) sprongen laten maken op een schaakbord vertrekkende van een gegeven positie.

Na de sprongen wil ik een "heatmap" van deze sprongen. Hoe vaak is het paard op een positie geweest.

Volg de conventie:

Technische analyse

Schrijf een nieuwe klasse HeatmapPaardensprong. Het startpunt in deze klasse is de methode HeatmapPaardensprongMain.

Vraag hierin eerst aan de gebruiker hoe vaak het paard moet springen en vraag ook de beginpositie in de vorm A1..H8

Je gaat vervolgens vertrekkende van deze positie een aantal willekeurige sprongen kiezen. Per sprong zijn er maximaal 8 mogelijkheden (zie afbeelding). Je zorgt er voor dat de sprong geldig is (binnen het bord). Deze positie is de startpositie voor de volgende sprong. De positie zelf is ook bezocht, dat houd je bij.

Voorbeeldinteractie

H09-ConwayGameOfLife

Leerdoelen

  • Werken met multidimensionale arrays

  • Werken met geneste iteratie

  • Werken met Random

Functionele analyse

Technische analyse

Schrijf een nieuwe klasse ConwayGameOfLife. Het startpunt in deze klasse is de methode ConwayGameOfLifeMain.

Vraag hierin eerst aan de gebruiker hoe veel cellen hij wil: 10 geeft een veld van 10 op 10 cellen.

Vervolgens vraag je de gebruiker hoeveel generaties hij wil zien.

Je gaat vervolgens het bord willekeurig opvullen. Gebruik een enum type om de status van een cel (levend, dood) bij te houden.

Vervolgens ga je generatie per generatie laten zien. Van de éne generatie op de andere gelden volgende regels:

  • Any live cell with fewer than two live neighbors dies, as if by loneliness

  • Any live cell with more than three live neighbors dies, as if by overcrowding.

  • Any live cell with two or three live neighbors lives, unchanged, to the next generation.

  • Any dead cell with exactly three live neighbors comes to life.

Laat elke generatie 2 seconden zien en bereken dan de volgende generatie (kijk even naar de oefening met de chronometer!).

Voorbeeldinteractie

PreviousGeneste iteratieNextH10: Gevorderde tekstverwerking

Last updated 6 months ago

Surf naar de webstek: . Hier wordt het "Game of Life" uitgelegd. We gaan een vereenvoudigde console versie maken. Dit wordt bijvoorbeeld veel gebruikt om automatisch omgevingen met structuur te genereren in games met procedurele generatie.

https://www.compadre.org/osp/EJSS/3577/12.htm