Oefeningen
Richtlijnen
Structuur oefeningen
Vanaf hier veronderstellen we dat je in één groot project werkt dat één klasse Program
heeft. Deze klasse heeft een Main
methode die een keuzemenu opstart. Oefeningen rond eenzelfde topic worden (statische) methodes van één klasse met een methode ToonSubmenu
, die je een menu toont van alle oefeningen over dat topic en die je toestaat een oefening naar keuze te testen. Dit wordt uitgelegd in de eerste oefening.
Oefening: H10-voorbereiding
Leerdoelen
een ordelijke menustructuur voor je code voorzien
Functionele analyse
We willen dat we alle oefeningen die we in dit vak maken op een ordelijke manier kunnen opstarten. We doen dit door een keuzemenu met twee niveaus te voorzien: de gebruiker kan elke reeds geschreven oefening uitvoeren door eerst het algemene onderwerp aan te geven en vervolgens de specifieke oefening.
Technische analyse
Laat in je Main methode een lijst van alle topics zien waarover oefeningen gemaakt zijn. In het begin is dit enkel
DateTime
. De gebruiker kan een topic aanduiden door een nummer in te geven, want voor elk topic staat ook een nummer.Gebruik een switch op de gebruikersinput om te bepalen van welk topic de
ToonSubmenu
methode moet worden opgeroepen. Deze methode heeft return typevoid
en geen parameters.Voorzie een eerste klasse,
DateTimeOefeningen
, met deze methodeToonSubmenu
. Totdat je oefeningen hebt om te demonstreren, toontToonSubmenu
gewoonweg de tekst"Er zijn nog geen oefeningen over dit topic"
.Indien er wel oefeningen zijn (deze oefening moet je dus updaten naarmate je vordert), wordt elke reeds geprogrammeerde oefening genummerd en getoond en kan de gebruiker kiezen om deze uit te voeren.
Nadat een oefening getest is, kan je opnieuw een topic en een oefening kiezen. Het programma eindigt nooit.
Voorbeeldinteractie
Dit is maar een voorbeeld! De getoonde topics en oefeningen gaan afhangen van wat je al gedaan hebt.
Oefening: H10-dag-van-de-week
Leerdoelen
aanmaken van
DateTime
objectenformatteren van
DateTime
objecten
Functionele analyse
We willen voor een willekeurige datum kunnen bepalen welke dag van de week het is.
Technische analyse
je moet eerst de dag, maand en jaar opvragen en een
DateTime
aanmakendaarna moet je laten zien over welke dag van de week het gaat
gebruik hiervoor formattering van een
DateTime
laat ook de datum zelf zien in een formaat dat leesbaar is voor de gebruiker
als je computer niet volledig ingesteld is op Belgisch Nederlands, kan het resultaat er wat anders uitzien.
maak deze methode toegankelijk via
ToonSubmenu
van de klasseDateTimeOefeningen
noem de methode waarin je dit schrijft
WeekdagProgramma
Voorbeeldinteractie
Oefening: H10-ticks-sinds-2000
Leerdoelen
aanmaken van
DateTime
objecten
Functionele analyse
We willen weten hoe veel fracties van een seconde al verlopen zijn sinds het begin van de jaren 2000.
Technische analyse
.NET stelt deze fracties (1 / 10000 milliseconden) voor als "ticks"
We willen weten hoe veel ticks er voorbijgegaan zijn sinds het absolute begin van het jaar 2000
maak deze methode toegankelijk via
ToonSubmenu
van de klasseDateTimeOefeningen
Noem de methode waarin je dit schrijft
Ticks2000Programma
Voorbeeldinteractie
Oefening: H10-schrikkelteller
Leerdoelen
gebruik van een statische methode
Functionele analyse
We willen bepalen hoe veel schrikkeljaren er zijn tussen 1799 en 2021.
Technische analyse
implementeer zelf geen logica voor schrikkeljaren, maar laat dit over aan de klassen
DateTime
maak gebruik van een statische methode van deze klasse
maak deze methode toegankelijk via
ToonSubmenu
van de klasseDateTimeOefeningen
noem je methode
SchrikkeljaarProgramma
Voorbeeldinteractie
Oefening: H10-simpele-timing
Leerdoelen
eenvoudig code leren timen
gebruiken van
DateTime
herhaling arrays
Functionele analyse
We zijn benieuwd hoe lang het duurt een array van 1 miljoen int
s te maken en op te vullen met de waarden 1,2,...
Technische analyse
Bepaal het tijdstip voor en na aanmaken van de array.
Vul de array in met een
for
-lus.maak deze methode toegankelijk via
ToonSubmenu
van de klasseDateTimeOefeningen
Noem de methode waarin je dit schrijft
ArrayTimerProgramma
Voorbeeldinteractie
Oefening: H10-verjaardag-v2
Leerdoelen
leren werken met objecten
gebruik maken van properties en methodes
Functionele analyse
We zullen het programma uit om het aantal dagen tot een verjaardag te bepalen (uit de theorie) aanpassen zodat het aantal dagen tot de volgende verjaardag wordt getoond. Dit betekent dat er nooit 0 dagen tot een verjaardag zijn, maar in extreme gevallen duizenden dagen kunnen over gaan (bijvoorbeeld: van 29 februari 1996 tot 29 februari 2004).
Technische analyse
Je moet één geval toevoegen, namelijk het geval waarin het oude programma 0 dagen tot de volgende verjaardag zou geven.
Noem je methode VerjaardagProgramma
. Maak deze methode toegankelijk via ToonSubmenu
van de klasse DateTimeOefeningen
Oefening: H10-Getallencombinatie
Leerdoelen
werken met klassen en objecten
instantieattributen
instantiemethoden
Functionele analyse
Dit programma geeft op basis van de input van twee getallen de som van beide getallen, het verschil, het product en de deling. In het laatste geval en indien er een deling door nul zou worden uitgevoerd, wordt dit woordelijk weergegeven.
Technische analyse
Voorzie voor volgende oefening eerst een nieuwe submenuklasse met als naam EigenObjectOefeningen
.
Maak een eigen klasse GetallenCombinatie
in een eigen file, GetallenCombinatie.cs
. Deze klasse bevat 2 getallen (type int
). Er zijn 4 methoden, die allemaal een double
teruggeven:
Som
: geeft som van beide getallen weerVerschil
: geeft verschil van beide getallen weerProduct
: geeft product van beide getallen weerQuotient
: geeft deling van beide getallen weer. Print"Fout"
naar de console indien je zou moeten delen door 0 en voer dan de deling uit. Wat er dan gebeurt, is niet belangrijk.
Gebruik public
attributen Getal1
en Getal2
. Plaats onderstaande code in een publieke statische methode van EigenObjectOefeningen
met naam DemonstreerOperaties
met return type void
:
Zorg dat je DemonstreerOperaties
kan oproepen via het submenu van EigenObjectOefeningen
.
Voorbeeldinteractie(s)
Oefening: H10-StudentKlasse
Deze oefening veronderstelt dat je de theoriefilmpjes hebt gevolgd en dat je daar de klasse Student
al hebt aangemaakt in een SchoolAdmin project.
Leerdoelen
werken met klassen en objecten
opstart van het project
Functionele analyse
Dit programma vraagt om de naam en leeftijd van een student. Vervolgens worden de punten voor 3 vakken gevraagd, waarna het gemiddelde wordt teruggegeven.
Technische analyse
Breid je klasse Student uit met een tweede array CursusResultaten
. Voorzie ook een methode Kwoteer
om een cijfer aan een cursus met een bepaalde index toe te kennen. Signaleer ongeldige waarden met een Console.WriteLine("Ongeldig cijfer!")
. Je kan ook nooit een cijfer boven 20 behalen.
Voeg aan de klasse een methode Gemiddelde()
toe. Deze berekent het gemiddelde van de niet-null
cursussen als double
.
Maak het return type van BepaalWerkbelasting
ook een byte
.
Voeg ook een methode ToonOverzicht
toe, die de persoonsgegevens en behaalde cijfers voor elke student toont. Kijk naar de voorbeeldinteractie voor de juist voorstellingswijze.
Test je programma door een statische methode (in de klasse Student
), DemonstreerStudenten
te voorzien, die twee studenten aanmaakt via variabelen student1
, student2
. Elke student is ingeschreven voor minstens drie vakken die je zelf kiest en krijgt een geldig cijfer (naar keuze) voor elk vak, een naam en een geldige leeftijd. Vervolgens wordt van elke student de ToonOverzicht
-methode opgeroepen. In je Main
-methode voorzie je een (niet-genest) keuzemenu dat vraagt wat je wil doen en op dit moment is de enige optie DemonstreerStudenten
uitvoeren.
Een overzicht van de klasse na al deze wijzigingen:
Voorbeeldcode om de eerste student aan te maken:
Voorbeeldinteractie(s)
Commit je aanpassingen na deze oefening!
Oefening: H10-Cursus
Deze klasse hoort bij het SchoolAdmin project.
Leerdoelen
werken met klassen en objecten
opstart van het project
arrays van objecten maken
Functionele analyse
We zullen studenten groeperen in cursussen. Bij elke cursus horen op dit moment exact twee studenten.
Technische analyse
Werk verder in het SchoolAdmin project. Maak in dit nieuw project een nieuwe klasse Cursus
in een file Cursus.cs
. Deze klasse heeft twee attributen: Studenten
en Titel
. Studenten
is een array van Student
-objecten. De initiële waarde voor dit attribuut is een array met een capaciteit van 2 studenten. Titel
is gewoonweg een string
. Cursus
heeft ook een methode ToonOverzicht
die de titel van de cursus toont, gevolgd door de namen van alle studenten die de cursus volgen.
Test je programma door een statische methode (in de klasse Cursus
), DemonstreerCursussen
te voorzien, die vier cursussen ("Communicatie", "Databanken", "Programmeren" en "Webtechnologie") aanmaakt via variabelen communicatie
, programmeren
, webtechnologie
en databanken
. Maak ook twee studenten aan (dezelfde als in DemonstreerStudenten
) en maak hen lid van de cursussen waarvoor ze een cijfer hebben (zie voorbeeldinteractie van de vorige oefening). Toon tenslotte voor elke cursus het overzicht via ToonOverzicht
. De methode DemonstreerCursussen
kan ook opgeroepen worden via het keuzemenu in Main
.
Je klasse Cursus
ziet er uiteindelijk zo uit:
Voorbeeldinteractie(s)
Commit je aanpassingen!
Oefening: H10-CursusResultaat
Leerdoelen
wegwerken gesynchroniseerde arrays
encapsulatie
access modifiers
Functionele analyse
De eerdere oefening H10-StudentKlasse gebruikte gesynchroniseerde arrays. We willen deze wegwerken.
Technische analyse
Voorzie een klasse CursusResultaat met twee velden: Naam
en Resultaat
. Het eerste stelt de naam van de cursus voor, het tweede het behaalde resultaat.
Vervang vervolgens de arrays cursussen
en CursusResultaten
door één private
array van objecten van deze nieuwe klasse met naam cursusResultaten
. Vervang RegistreerVoorCursus
door RegistreerCursusResultaat
om dit mogelijk te maken (met een parameter voor de naam en een parameter voor het cijfer). DemonstreerStudenten
moet identiek dezelfde uitvoer blijven produceren als tevoren.
Deze oefening vraagt om veel aanpassingen, maar ze zijn niet zo groot. Hou vooral je hoofd erbij en denk goed na over hoe je elk fout gemarkeerd stukje code kan herschrijven wanneer je de oude arrays hebt verwijderd.
Commit je aanpassingen!
Oefening: H10-Figuren
Leerdoelen
werken met klassen en objecten
gebruik maken van properties om geldige waarden af te dwingen
Functionele analyse
Dit programma maakt enkele rechthoeken en driehoeken met gegeven afmetingen (in meter) aan, berekent hun oppervlakte en toont deze info aan de gebruiker. De rechthoeken en driehoeken die worden aangemaakt, zijn al gecodeerd in het programma. De gebruiker hoeft dus niets anders te doen dan het programma te starten.
Technische analyse
Er is een klasse Rechthoek
met full properties Breedte
en Hoogte
en een klasse Driehoek
met Basis
en Hoogte
. Je programma maakt de figuren die hierboven beschreven worden aan met beginwaarde 1.0
voor elke afmeting en stelt daarna hun afmetingen in via de setters voor deze properties. De oppervlakte wordt bepaald in een read-only property (dus met alleen een getter en geen setter). Deze heet Oppervlakte
en is van het type double
.
Indien om het even welk van deze properties wordt ingesteld op 0
of minder, signaleer je dit via de code Console.WriteLine($"Het is verboden een (afmeting) van (waarde) in te stellen!")
(zie voorbeeldcode).
De wiskundige formule voor de oppervlakte van een driehoek is basis * hoogte / 2.
Schrijf de voorbeelden uit in een static
methode DemonstreerFiguren
van de klasse EigenObjectOefeningen
.
Voorbeeldinteractie(s)
(Er worden twee rechthoeken en twee driehoeken aangemaakt. De afmetingen van de eerste rechthoek worden eerst op -1
en 0
ingesteld. Daarna krijgen ze de waarden die je ziet in het bericht hieronder. Formatteer ook met 1 cijfer na de komma.)
Last updated