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.
een ordelijke menustructuur voor je code voorzien
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.
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 type void
en geen parameters.
Voorzie een eerste klasse, DateTimeOefeningen
, met deze methode ToonSubmenu
. Totdat je oefeningen hebt om te demonstreren, toont ToonSubmenu
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.
Dit is maar een voorbeeld! De getoonde topics en oefeningen gaan afhangen van wat je al gedaan hebt.
aanmaken van DateTime
objecten
formatteren van DateTime
objecten
We willen voor een willekeurige datum kunnen bepalen welke dag van de week het is.
je moet eerst de dag, maand en jaar opvragen en een DateTime
aanmaken
daarna 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 klasse DateTimeOefeningen
noem de methode waarin je dit schrijft WeekdagProgramma
aanmaken van DateTime
objecten
We willen weten hoe veel fracties van een seconde al verlopen zijn sinds het begin van de jaren 2000.
.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 klasse DateTimeOefeningen
Noem de methode waarin je dit schrijft Ticks2000Programma
gebruik van een statische methode
We willen bepalen hoe veel schrikkeljaren er zijn tussen 1799 en 2021.
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 klasse DateTimeOefeningen
noem je methode SchrikkeljaarProgramma
eenvoudig code leren timen
gebruiken van DateTime
herhaling arrays
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,...
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 klasse DateTimeOefeningen
Noem de methode waarin je dit schrijft ArrayTimerProgramma
Leerdoelen
leren werken met objecten
gebruik maken van properties en methodes
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).
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
werken met klassen en objecten
instantieattributen
instantiemethoden
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.
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 weer
Verschil
: geeft verschil van beide getallen weer
Product
: geeft product van beide getallen weer
Quotient
: 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
.
Deze oefening veronderstelt dat je de theoriefilmpjes hebt gevolgd en dat je daar de klasse Student
al hebt aangemaakt in een SchoolAdmin project.
werken met klassen en objecten
opstart van het project
Dit programma vraagt om de naam en leeftijd van een student. Vervolgens worden de punten voor 3 vakken gevraagd, waarna het gemiddelde wordt teruggegeven.
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:
Commit je aanpassingen na deze oefening!
Deze klasse hoort bij het SchoolAdmin project.
werken met klassen en objecten
opstart van het project
arrays van objecten maken
We zullen studenten groeperen in cursussen. Bij elke cursus horen op dit moment exact twee studenten.
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:
Commit je aanpassingen!
wegwerken gesynchroniseerde arrays
encapsulatie
access modifiers
De eerdere oefening H10-StudentKlasse gebruikte gesynchroniseerde arrays. We willen deze wegwerken.
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!
werken met klassen en objecten
gebruik maken van properties om geldige waarden af te dwingen
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.
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
.
(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.)