flowchart TD
%% Start en Init
Start([Start]) --> Init[Variabelen = 0, Stop = 1]
%% Start Lus
Init --> CheckLoop{Stop <= 4?}
%% Lus: NEE (Klaar)
CheckLoop -- Nee --> EindRapport[/Toon Eindresultaat/]
EindRapport --> Stop2([Stop])
%% Lus: JA (Doe stop logica)
CheckLoop -- Ja --> BepaalAfst[Bepaal afstand traject]
BepaalAfst --> ToonInfo[/Toon aankomst/]
ToonInfo --> VraagInvoer[/Vraag: In & Uit/]
VraagInvoer --> Bereken[Nieuw aantal = Oud + In - Uit]
%% Check op negatief
Bereken --> CheckNeg{Aantal < 0?}
CheckNeg -- Ja --> Reset[Zet op 0 en Waarschuw]
Reset --> ToonAantal
CheckNeg -- Nee --> ToonAantal[/Toon huidig aantal/]
%% Einde van deze loop-iteratie
ToonAantal --> UpdateTot[Update Totale Afstand]
UpdateTot --> VolgendeStop[Stop + 1]
VolgendeStop --> CheckLoop
Twee prompts bij deze proef. Met Coach krijg je hulp terwijl je de proef maakt, zonder code. Met Quoteer laat je je afgewerkte code streng verbeteren, volgens de puntenverdeling en het boeteblad.
Let op: de quoteerprompt is recent gemaakt en werd niet gebruikt bij de originele proef. De score die je ermee krijgt, zegt dus niets over de scores van toen. Had de proef geen puntenverdeling, dan is die achteraf toegevoegd.
Volgende 3 oefeningen waren de vaardigheidsproefopdracht voor het 2e zit examen van dit vak (Programming Principles) in 2026.
Oefening 1 - Pakjesbezorg-Simulatie
Info
Ga ervan uit dat de gebruiker géén foute invoer doet.
Opgave
Je bouwt een kleine C#-consoletoepassing voor een pakjesdienst. De applicatie moet een korte bezorgrit simuleren waarbij een bestelwagen vanuit het depot langs 4 vaste stops rijdt. Tussen de stops liggen vaste afstanden:
- tussen het depot en Stop 1: 8 km
- tussen Stop 1 en Stop 2: 12 km
- tussen Stop 2 en Stop 3: 18 km
- tussen Stop 3 en Stop 4: 22 km
(De totale afstand van de rit zal dus 60 km zijn.)
Op elke stop kunnen er pakjes ingeladen en gelost worden. De gebruiker van het programma speelt de rol van koerier en geeft aan hoeveel pakjes er op elke stop in- en uitgeladen worden.
De bestelwagen vertrekt vanuit het depot en rijdt 8 km naar Stop 1. Vanaf dan begint het programma dus.
Wat moet het programma doen?
- Toon bij het starten een welkomstboodschap in het rood, bijvoorbeeld “Welkom bij de Pakjesbezorg-Simulator!”
- Initialiseer de nodige variabelen, onder andere:
- het huidig aantal pakjes in de wagen (start op 0),
- de totale afgelegde afstand (start op 0 km),
- het nummer van de huidige stop.
- Herhaal de volgende stappen voor elk van de 4 stops:
- Toon een regel in de vorm: “Aankomst bij Stop X (Afstand vanaf vorige stop: Y km)”
- Vraag aan de gebruiker:
- hoeveel pakjes ingeladen worden;
- hoeveel pakjes gelost worden.
- Werk het huidig aantal pakjes bij. Als het resultaat negatief zou worden:
- zet het aantal pakjes terug op 0;
- toon een korte waarschuwing dat er niet meer pakjes gelost kunnen worden dan er in de wagen zitten.
- Toon daarna het huidig aantal pakjes in de wagen.
- Tel de afstand van het traject tot deze stop op bij de totale afgelegde afstand.
- Ga verder naar de volgende stop.
- Wanneer de wagen alle stops heeft bezocht, toon je:
- de totale afgelegde afstand in kilometer;
- het eind-aantal pakjes in de wagen.
Flowchart
Voorbeeld uitvoer
Tekst die start met “>” is invoer van de gebruiker.
Welkom bij de Pakjesbezorg-Simulator!
Aankomst bij Stop 1 (Afstand vanaf vorige stop: 8 km)
Aantal pakjes die ingeladen worden:
> 22
Aantal pakjes die gelost worden:
> 0
Huidig aantal pakjes: 22
Aankomst bij Stop 2 (Afstand vanaf vorige stop: 12 km)
Aantal pakjes die ingeladen worden:
> 15
Aantal pakjes die gelost worden:
> 8
Huidig aantal pakjes: 29
Aankomst bij Stop 3 (Afstand vanaf vorige stop: 18 km)
Aantal pakjes die ingeladen worden:
> 6
Aantal pakjes die gelost worden:
> 11
Huidig aantal pakjes: 24
Aankomst bij Stop 4 (Afstand vanaf vorige stop: 22 km)
Aantal pakjes die ingeladen worden:
> 3
Aantal pakjes die gelost worden:
> 9
Huidig aantal pakjes: 18
Rit beëindigd!
De totale afgelegde afstand is 60 km.
Aantal pakjes op einde in de wagen: 18
Oefening 2 - Datacenter Monitor
Info
Een groot datacenter logt elke dag zijn systeemgegevens. Jouw applicatie moet deze gegevens verwerken en de alarmstatus bepalen op basis van bepaalde drempelwaarden.
Ga ervan uit dat de gebruiker géén foute invoer doet.
Opgave
Een serverpark draait al maanden non-stop. Elke dag worden drie parameters gelogd:
- vrije schijfruimte (in GB)
- vrij werkgeheugen (in GB)
- resterende koelvloeistof (in liters)
De bewakingscomputer slaat deze gegevens op in drie even lange arrays. Elke index vertegenwoordigt één dag sinds de meting startte. De arrays hebben een lengte van 30 (voor 30 dagen).
Aan de start van je applicatie worden deze 3 arrays gevuld met willekeurige waarden binnen de volgende grenzen:
- Schijfruimte: 0 - 1000 GB
- Werkgeheugen: 0 - 64 GB
- Koelvloeistof: 0 - 200 liters
ToonData methode
Schrijf een methode ToonData die deze arrays visualiseert in een tabelvorm, waarbij elke rij een dag vertegenwoordigt en de kolommen de drie parameters tonen. Deze aanvaardt dus de 3 arrays als parameters en geeft niets terug. Gebruik tabs om de kolommen uit te lijnen.
Deze methode aanvaardt een vierde optionele parameter van het type bool die standaard op false staat. Indien deze parameter op true wordt gezet, moeten alle waarden die onder de helft van hun maximumwaarde liggen (dus schijfruimte < 500 GB, werkgeheugen < 32 GB, koelvloeistof < 100 liter) gemarkeerd worden met een sterretje (*) achter de waarde.
Tip: Verspil niet te veel tijd aan het perfect uitlijnen van de tabel. Het belangrijkste is dat de gegevens duidelijk en leesbaar zijn. Het kan geen kwaad indien hier en daar de data niet perfect uitgelijnd is.
AlarmMeting methode
Schrijf een methode AlarmMeting die de drie arrays en een index als parameters aanvaardt en een boolean teruggeeft. Deze methode moet controleren of er op een bepaalde dag (index) aan minstens twee van de drie volgende voorwaarden wordt voldaan:
- Schijfruimte is minder dan 100 GB
- Werkgeheugen is minder dan 8 GB
- Koelvloeistof is minder dan 20 liter
Als aan minstens twee van deze voorwaarden wordt voldaan op die dag, moet de methode true teruggeven (wat betekent dat er alarm is). Als dit niet het geval is, moet de methode false teruggeven.
Hoofdprogramma
Schrijf een klein hoofdprogramma dat:
- De drie arrays vult met willekeurige waarden binnen de opgegeven grenzen.
- De
ToonDatamethode aanroept om de gegevens in tabelvorm weer te geven. RoepToonDataaan met de optie om sterretjes te tonen. - De gebruiker een dagnummer (1-30) vraagt. Houd er rekening mee dat arrays 0-based zijn. Indien de gebruiker een negatief getal invoert, stopt het programma.
- De
AlarmMetingmethode aanroept met de zonet ingevoerde dag als parameter en de alarmstatus voor die dag toont (true/false). - Terugkeert naar stap 3.
Voorbeeld uitvoer
Tekst die start met “>” is invoer van de gebruiker.
Dag Schijf (GB) Geheugen (GB) Koeling (liters)
1 850 40 160
2 75* 5* 15*
3 600 20* 80*
...
30 720 50 180
Voor welke dag wil je de alarmstatus weten? (1-30, negatief om te stoppen):
> 2
Alarmstatus voor dag 2: true
Voor welke dag wil je de alarmstatus weten? (1-30, negatief om te stoppen):
> 3
Alarmstatus voor dag 3: false
Voor welke dag wil je de alarmstatus weten? (1-30, negatief om te stoppen):
> -1
Programma gestopt.
Oefening 3 - Sapbar Generator
Info
Je schrijft een applicatie die een sapbar zal helpen eenvoudige menukaarten te genereren.
Het doel van deze oefening is om je kennis van methoden te testen. (Merk op dat je géén arrays in deze oefening nodig hebt.)
Ga ervan uit dat de gebruiker géén foute invoer doet.
Opgave
Je maakt drie methoden met duidelijke parameters en returntypes.
Methode 1: GenereerSmoothieNaam
Deze methode genereert een smoothienaam op basis van het fruit, de smaak en het volume.
Input (parameters):
- een fruitnaam (
string) - een smaaktype (
string) - een volume in milliliter (
int)
Output (returntype): één string die een volledige smoothienaam voorstelt.
In de methode combineer je deze gegevens tot een smoothienaam in het volgende formaat:
“Fruit – Smaak (Volume ml)”
Voorbeeld:
“Mango – tropisch (250 ml)”
Hoofdprogramma
Schrijf een klein hoofdprogramma dat de gebruiker vraagt om de volgende gegevens in te voeren:
- Fruitnaam
- Smaaktype
- Volume in milliliter
- Seizoen
Vervolgens roept het hoofdprogramma de GenereerMenukaart() methode aan met deze gegevens en toont het de gegenereerde menukaart aan de gebruiker.
Schema’s
Welke methode roept welke andere methode aan:
graph TD
%% Styling
classDef main fill:#f9f,stroke:#333,stroke-width:2px;
classDef m3 fill:#bbf,stroke:#333,stroke-width:2px;
classDef m2 fill:#bfb,stroke:#333,stroke-width:2px;
classDef m1 fill:#fbb,stroke:#333,stroke-width:2px;
subgraph Applicatie
Main[Hoofdprogramma<br/><i>Vraagt invoer aan gebruiker</i>]:::main
M3[Methode 3: GenereerMenukaart<br/><i>Input: Fruit, Smaak, Volume, Seizoen</i>]:::m3
M2[Methode 2: MaakMenuTitel<br/><i>Input: Fruit, Smaak, Volume, Seizoen</i>]:::m2
M1[Methode 1: GenereerSmoothieNaam<br/><i>Input: Fruit, Smaak, Volume</i>]:::m1
end
%% Relaties
Main -- Roept aan met alle data --> M3
M3 -- 1. Roept aan voor de titel --> M2
M3 -- 2. Roept 5x aan (in lus) --> M1
M2 -- Roept aan voor smoothie in titel --> M1
%% Return waarden (optioneel, als stippellijn)
M1 -.->|Geeft smoothienaam string| M2
M1 -.->|Geeft smoothienaam string| M3
M2 -.->|Geeft titel string| M3
M3 -.->|Geeft volledige menukaart string| Main
In welke volgorde de aanroepen gebeuren:
sequenceDiagram
participant Main as Hoofdprogramma
participant M3 as GenereerMenukaart
participant M2 as MaakMenuTitel
participant M1 as GenereerSmoothieNaam
Note over Main: Gebruiker voert data in
Main->>M3: Aanroep (Fruit, Smaak, Volume, Seizoen)
rect rgb(240, 248, 255)
Note over M3: Stap A: Titel maken
M3->>M2: Aanroep (Fruit, Smaak, Volume, Seizoen)
rect rgb(255, 250, 240)
M2->>M1: Aanroep (Fruit, Smaak, Volume)
M1-->>M2: Return enkele Smoothienaam
Note over M2: Formatteer titel
end
M2-->>M3: Return Titel String
end
rect rgb(240, 248, 255)
Note over M3: Stap B: Lijst vullen (5x)
loop 5 keer
M3->>M1: Aanroep (Fruit, Smaak, Volume)
M1-->>M3: Return enkele Smoothienaam
Note over M3: Voeg nummer toe + plak aan lijst
end
end
M3-->>Main: Return volledige Menukaart String
Note over Main: Toon resultaat op scherm
Voorbeeld uitvoer
Tekst die start met “>” is invoer van de gebruiker.
Geef de fruitnaam in:
> Mango
Geef het smaaktype in:
> tropisch
Geef het volume in ml in:
> 250
Geef het seizoen in:
> zomer
Het lekkerste zomer menu met 'Mango – tropisch (250 ml)'
1. Mango – tropisch (250 ml) (1)
2. Mango – tropisch (250 ml) (2)
3. Mango – tropisch (250 ml) (3)
4. Mango – tropisch (250 ml) (4)
5. Mango – tropisch (250 ml) (5)
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.