Week 1 "Intermezzo"

circle-info

Dit labo bereidt je voor op het werken met objecten. We leren hoe we gegevens kunnen structureren in C#. Je maakt best eerst deze oefeningen voor je de bijhorende leerstof in het handboek van hoofdstuk 9 doorneemt.

Dit (nieuwe) aanvullend intermezzo werd opgesteld in samenspraak met Gemini 3 Pro (High).

Oefening 1: De Data Architect (Essential)

Deel 1: De chaos van losse variabelen

Stel je voor: je moet de gegevens van één student bijhouden. Als we alles in losse variabelen stoppen, wordt onze code al snel onoverzichtelijk.

  • Maak een nieuw Console Application project.

  • Maak in Main volgende variabelen aan:

    • Een string voor de naam.

    • Drie int variabelen voor de scores.

  • Schrijf een methode CalculateAverage die deze 4 variabelen aanvaardt en het gemiddelde berekent.

string name = "Alex";
int score1 = 14;
int score2 = 16;
int score3 = 11;

double average = CalculateAverage(score1, score2, score3);
Console.WriteLine($"{name} scoorde gemiddeld: {average}");

Reflectie:

  • Wat als je nu een 4e score wilt toevoegen? Hoeveel code moet je aanpassen?

  • Wat als je methode per ongeluk CalculateAverage(score1, score1, score3) aanroept?

Deel 2: Structureren met Structs

In plaats van losse variabelen, kunnen we gegevens groeperen in een struct. Zie dit als een container waar alle info van één student in zit.

We gaan deze struct in een apart bestand plaatsen, net zoals we dat het hele semester zullen doen:

  1. Klik in de Solution Explorer met de rechtermuisknop op je projectnaam.

  2. Kies Add > New Item... (of Class...).

  3. Selecteer Class en geef het de naam StudentData.cs.

  4. Klik op Add.

Visual Studio heeft nu een nieuwe class voor je gemaakt. Verander het woordje class naar struct en maak het public. Je bestand moet er zo uitzien:

  • Vervang nu in je Main de losse variabelen door één variabele van het type StudentData.

  • Ken de waarden toe aan de properties van de struct.

circle-info

Wat is een struct?

Een struct (structure) is een manier om verschillende variabelen die logisch bij elkaar horen, samen te binden in één nieuwe variabele.

Je kan het zien als een blauwdruk.

  • De struct definitie (in je nieuwe bestand) is het ontwerp (het plan).

  • De variabele myStudent (in Main) is het daadwerkelijke object (het huis) dat je op basis van dat ontwerp hebt gebouwd.

Vanaf nu kent C# dus niet alleen int, string en bool, maar ook jouw eigen type StudentData!

Deel 3: Scores verwerken

Het grote voordeel is dat we nu de volledige student in één keer kunnen doorgeven aan methoden.

  • Herschrijf de methode CalculateAverage.

  • De methode aanvaardt nu één parameter van het type StudentData in plaats van losse ints.

  • De methode haalt de scores uit de struct (student.Scores) om het gemiddelde te berekenen.

circle-info

Merk op dat als we nu een score toevoegen aan de array, we de methode CalculateAverage niet meer hoeven aan te passen!

Uitbreiding (Essential)

Kan je je programma uitbreiden met volgende functionaliteiten?

  • Maak een methode bool HasPassed(StudentData student) die true teruggeeft als het gemiddelde >= 10.

  • Maak een methode int GetHighestScore(StudentData student) die het hoogste cijfer uit de struct haalt.

Labo 2: De RPG Inventory

circle-info

In dit deel gaan we een stap verder. We weten nu wat een struct is (een "doos"). Maar wat als we een hele stapel dozen hebben?

Deel 1: De Inventory Item

In een RPG game heeft je character vaak tientallen items bij zich. Stel je voor dat je dit met losse arrays zou doen: string[] itemNames, double[] itemWeights, int[] itemValues...

Dat is vragen om problemen. Wat als index 5 van names niet meer klopt met index 5 van weights?

We gaan dit oplossen met één struct.

  • Maak een nieuw project "RPGInventory".

  • Voeg een nieuwe struct InventoryItem.cs toe via Add New Item.

  • Zorg dat de struct volgende eigenschappen heeft:

    • Name (string): bv "Iron Sword"

    • Weight (double): bv 2.5

    • Value (int): bv 150 (goudstukken)

Deel 2: De Schatkist (Arrays van Structs)

Nu kunnen we een array maken van deze struct. Dit is onze "rugzak".

  • Maak in Main een array aan die plaats biedt voor 3 items.

  • Vul de array met 3 items (verzin zelf leuke namen!).

Deel 3: De Inventory Manager

We willen nu methoden schrijven die onze rugzak kunnen analyseren.

  • Maak een methode ShowInventory die de volledige array als parameter krijgt.

  • Gebruik een foreach loop om elk item netjes op het scherm te tonen.

  • Roep deze methode aan in Main.

Uitbreiding

Nu je de basis hebt, kan je de "Inventory Manager" slimmer maken. Voeg de volgende methodes toe:

  1. Total Value: Maak een methode int CountTotalValue(InventoryItem[] items) die berekent hoeveel je hele inboedel waard is.

  2. Heavy Lifting: Maak een methode InventoryItem FindHeaviestItem(InventoryItem[] items) die het zwaarste object uit de lijst teruggeeft. Tip: Begin met het eerste item als "zwaarste tot nu toe" en loop door de rest. Print in Main de naam van dit object af.

  3. Encumbrance Rule: Maak een methode bool IsOverencumbered(InventoryItem[] items, double maxWeight). Deze geeft true terug als het totale gewicht van alle items hoger is dan maxWeight. Test dit in Main: als je rugzak te zwaar is, toon dan een waarschuwing "Je kan niet meer rennen!".

Last updated

Was this helpful?