- Let op Volg vanaf nu de coding guidelines uit het handboek (de boetes). De coach kijkt je code er ook op na.
- In hoofdstuk 1 maakte je per oefening een nieuwe solution. Vanaf nu maak je per hoofdstuk één solution, met daarin per oefening een apart project. Hoe je een project toevoegt, lees je in Meerdere projecten (of bekijk deze video). Geef elk project een naam met enkel letters en cijfers, bv.
EuroNaarDollaren nietEuro-Dollar. - Let op Met meerdere projecten in één solution voert Visual Studio enkel het startup project uit: het project dat vet staat in de Solution Explorer. Zie je je wijzigingen niet als je op start duwt, kijk dan eerst of het juiste project actief is (rechterklik op het project en kies Set as Startup Project).
- In dit hoofdstuk vraag je nog geen getallen aan de gebruiker: je zet ze hard in variabelen. Hoe je invoer omzet naar een getal, leer je in hoofdstuk 4.
- De voorbeelduitvoer toont kommagetallen met een komma, zoals op een pc met Belgische instellingen. Staat je pc in het Engels, dan zie je een punt.
Euro naar dollar (Essential)
Ontwerp een toepassing waarmee je een bedrag in euro (dat je hardcodeert in een variabele, inclusief kommagetallen) omrekent naar dollar. Gebruik de wisselkoers 1 euro = 1.03 dollar. Je hoeft niet af te ronden. Het resultaat op het scherm wordt als volgt weergegeven: [x] EUR is gelijk aan [y] USD.
Dit is de startcode van je applicatie:
double bedragInEuro = 78.65;Uitvoer:
78,65 EUR is gelijk aan 81,0095 USD.
Begrijp je dat al deze oefeningen eigenlijk altijd dezelfde 3 fases hebben?
- Data invoer: variabelen aanmaken en waarden geven.
- Data verwerken: berekeningen doen met de ingevoerde data.
- Data uitvoer: resultaten op het scherm tonen
Als je je applicaties zo opbouwt dan zal je snel ontdekken dat al deze oefeningen eigenlijk in essentie hetzelfde zijn.
Het is een goede gewoonte om een vast getal zoals de koers in een eigen variabele te bewaren. Je zou deze oefening ook sneller kunnen doen door lijn 2 weg te laten en 3 te vervangen door: double bedragInDollar = bedragInEuro * 1.03;, maar dat raden we af. Zo’n los getal zonder naam midden in een berekening noemen programmeurs een magic number.
Stel dat je later in deze code ook op een andere plek nog de koers nodig hebt, dan moet je ook op die plek 1.03 schrijven…en wat als dan later de koers verandert? Dan moet je overal dat getal veranderen. Via een aparte variabele moeten we het getal 1.03 maar eenmalig typen.
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.
Welk datatype? (Essential)
Kies voor elk van onderstaande gegevens een datatype, en schrijf de declaratie met een passende beginwaarde. Let op de schrijfwijze van je literal (zie Literals).
- Het aantal studenten in een klas.
- De wereldbevolking (ongeveer 8 miljard).
- De prijs van een product in een webshop.
- De temperatuur buiten.
- Of iemand gehuwd is.
- De eerste letter van je naam.
- Het aantal assen van een trein.
- Je postcode.
Zet de acht variabelen in één programma en toon ze met een WriteLine, zodat je zeker bent dat alles compileert.
Waarom geen byte voor het aantal studenten? Een klas van meer dan 255 komt toch nooit voor? Twee redenen:
- Een “kleine” waarde blijft niet altijd klein. Een aula, een online cursus, een lange goederentrein: voor je het weet zit je boven 255. Tel je dan nog eentje bij een
bytedie op 255 staat, dan springt die zonder melding terug naar 0. Lees het verhaal van de Zwitserse trein aan het begin van Datatypes nog eens na: daar ging het precies zo mis met de assen. - Programmeurs gebruiken
bytevooral voor digitale data: de ruwe bytes van een bestand, een afbeelding of een netwerkbericht, of de rood-, groen- en blauwwaarde van een pixel (telkens 0 tot 255). Zie je in code eenbyte, dan denkt een collega dus eerder aan zulke data dan aan een aantal.
Geheugen besparen met een byte loont op een pc zelden. Op een klein apparaat, zoals de teller langs het Zwitserse spoor, wel.
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.
Kill/Death-ratio (Essential)
De k/d-ratio is de verhouding tussen het aantal kills dat je in een spel hebt gehaald en het aantal keer dat je zelf gestorven bent (deaths). Is deze verhouding groter dan 1, dan heb je vaker iemand gedood dan dat je zelf gestorven bent. Onder de 1 is dit net omgekeerd…en ben je dus niet zo goed in het spel dat je aan het spelen bent.
Maak twee variabelen double kills en double deaths aan. Wijs er jouw typische gamescores aan toe die je haalt in een spel naar keuze. Bereken en toon vervolgens je kill/death-ratio.
Uitvoer (indien kills=44 is en deaths=9)
Je k/d-ratio is 4,888888888888889
Test ook eens wat er gebeurt als je beide variabelen als int declareert. Lees daarna de waarschuwing van de voorman bij Expressies nog eens na.
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.
Gemiddelde (Essential)
Maak 3 variabelen aan van het type int genaamd september, oktober en november. Zet in elke variabele hoeveel uren je die maand geslapen hebt (schat maar). Bereken nu het gemiddelde van de 3 maanden en toon het resultaat op het scherm.
Opgelet: het resultaat moet als een kommagetal worden getoond!
Uitvoer (met 224, 177 en 210 uren):
Je sliep gemiddeld: 203,66666666666666 uren per maand.
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.
Deel 2. Maak nu bewust twee fouten, telkens één, en voer het programma uit. Welke uitkomst krijg je, en waarom?
- Haal de haakjes rond de som weg.
- Zet de haakjes terug en deel door
3in plaats van door3.0.
Om een gemiddelde te berekenen moeten we eerst de som nemen van de aparte waarden. Omdat de optelling geen voorrang krijgt op de deling, is het belangrijk dat we de som van de 3 maanden met behulp van haakjes voorrang geven. Vervolgens delen we door 3.0. We delen niet door 3 maar door 3.0, anders verliezen we cijfers na de komma want dan hebben we een deling van 2 integers i.p.v. een integer en een double.
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.
Simple maths (Essential)
Gegeven volgende vier berekeningen:
-1 + 4 * 6
( 35 + 5 ) % 7
14 + -4 * 6 / 11
2 + 15 / 6 * 1 - 7 % 2
De % hier is de modulo-operator.
Deel 1. Reken eerst op papier uit wat C# voor elk van de vier zal tonen. Denk eraan: alle getallen zijn gehele getallen, dus elke deling is een gehele deling.
Typ daarna de vier berekeningen letterlijk over, elk in een eigen int-variabele, en toon ze als volgt (met je eigen uitkomsten):
-1 + 4 * 6 geeft ...
( 35 + 5 ) % 7 geeft ...
14 + -4 * 6 / 11 geeft ...
2 + 15 / 6 * 1 - 7 % 2 geeft ...
Vergelijk met wat je op papier had. Zit er een verschil, zoek dan uit waar je redenering fout liep.
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.
Deel 2. De derde en vierde uitkomst zijn wiskundig niet juist. Pas enkel die twee berekeningen aan, zodat de juiste waarde verschijnt. Pas ook de tekst voor geeft aan, zodat die toont wat je echt berekent:
14 + -4 * 6 / 11.0 geeft 11,818181818181818
2 + 15 / 6.0 * 1 - 7 % 2 geeft 3,5
Waarom moet je bij de derde en vierde berekening met double werken, en bij de eerste twee niet?
Het type van de getallen bepaalt of een deling haar kommagetal houdt. Bekijk de derde berekening nog eens stap voor stap:
- Eerst wordt
-4 * 6gedaan, dat geeft-24. - Dit getal wordt gedeeld door
11. Omdat11eenintis zou deze deling-2geven (alles na de komma weg). Maken we van die11een kommagetal, dan krijgen we-2,181818... - Finaal tellen we
-2,181818...bij14op en krijgen we11,8181818181...
Merk op dat -2,18 afgekapt wordt tot -2 en niet tot -3: C# gooit het stuk na de komma gewoon weg, ook bij negatieve getallen.
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.
Voorspel de uitvoer (Essential)
Voer onderstaande code nog niet uit. Schrijf eerst op papier exact op wat er op het scherm zal verschijnen, lijn per lijn.
int getal = 5;
getal++;
getal += 3;
getal /= 2;
Console.WriteLine(getal);
int a = 5;
int b = a++;
Console.WriteLine($"{a} {b}");
Console.WriteLine(9 / 2);
Console.WriteLine(9 / 2.0);
Console.WriteLine(1.0 * 7 / 2);
Console.WriteLine(1.0 * (7 / 2));
Console.WriteLine(-7 / 2);
Console.WriteLine(17 % 5 * 2);Voer de code daarna uit en vergelijk met wat je opschreef. Klopt een lijn niet, zoek dan uit waar je redenering fout liep voor je naar de oplossing kijkt.
Verbaasd over de waarde van b? Dan zit je in goed gezelschap. a++ en ++a verhogen a allebei met 1, maar ze verschillen in wanneer dat gebeurt:
a++(postfix): eerst wordt de huidige waarde vanagebruikt, pas daarna wordtaverhoogd.int b = a++;doet dus hetzelfde als:int b = a; // b krijgt 5 a = a + 1; // a wordt 6++a(prefix): eerst wordtaverhoogd, daarna wordt de nieuwe waarde gebruikt. Metint b = ++a;warenaenballebei6geweest.
Staat a++ alleen op een lijn, zoals getal++; bovenaan, dan maakt het geen verschil: er wordt niets met de waarde gedaan. Pas als je ++ in een grotere expressie stopt (een toekenning, een berekening, een WriteLine), telt de volgorde. Daarom zet je ++ best op een eigen lijn: dan hoeft niemand na te denken wat er eerst gebeurt.
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.
BTW (Essential)
Schrijf een programma waarin je het BTW-percentage 21% als een constante definieert door het keyword const voor de variabele te zetten. Vervolgens toon je een prijs naar keuze, met en zonder btw op het scherm.
Dit is je startcode:
double prijs = 20;
const double BTW = 21.0;Bereken nu de prijs met BTW en toon het resultaat op het scherm.
Voorbeeld output:
Prijs 20 euro zonder btw. Met BTW: 24,2 euro.
Je kan de BTW op verschillende manieren berekenen. Kies zelf hoe je dit doet. Je mag dus gerust ook werken met const double BTW = 1.21; of const double BTW = 0.21;, afhankelijk van welke berekenwijze je prefereert.
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.
Deel 2. Wat doet const eigenlijk? Zet onderaan je programma de lijn BTW = 6; en lees de foutmelding die Visual Studio geeft. Haal de lijn daarna weer weg.
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.
Deel 3. Verander de startcode in int prijs = 20; en const int BTW = 21;. Voorspel wat deze twee lijnen tonen, en voer ze daarna uit:
Console.WriteLine(prijs + prijs / 100 * BTW);
Console.WriteLine(prijs + prijs * BTW / 100);Waarom 21 en niet 0.21? Beide zijn juist, zolang je berekening erbij past. Als percentage, zoals op je kasticket:
const double BTW = 21.0;
double prijsMetBtw = prijs + prijs / 100 * BTW;Of als fractie:
const double BTW = 0.21;
double prijsMetBtw = prijs + prijs * BTW;Met 0.21 wordt de berekening zelfs korter. De startcode kiest 21 omdat iedereen “21 procent” zegt en schrijft: wie de code leest, herkent het getal meteen. Het gevaar zit in het mengen: een collega die BTW als 0.21 verwacht en het met 21 krijgt, rekent een prijs uit die honderd keer te hoog is. Een naam die zegt wat erin zit, helpt: BTW_PERCENTAGE = 21 of BTW_FACTOR = 0.21.
Met doubles maken de haakjes in prijs + (prijs / 100) * BTW geen verschil: delen en vermenigvuldigen hebben dezelfde voorrang en worden van links naar rechts uitgevoerd. Met ints bepaalt de volgorde of je iets overhoudt na de deling, zoals deel 3 toont.
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.
Graden omzetten
Een temperatuur in graden Celsius zet je om naar graden Fahrenheit met de formule F = C × 9/5 + 32.
Schrijf een programma dat vertrekt van int celsius = 23; en de temperatuur in Fahrenheit toont:
23 graden Celsius is 73,4 graden Fahrenheit.
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.
Deel 2. Steven schreef 9 / 5 * celsius + 32 en krijgt 55. Zijn collega schreef celsius * 9 / 5 + 32 en krijgt 73. Waarom verschillen hun uitkomsten, en waarom is geen van beide juist? Probeer het eerst te verklaren zonder de code uit te voeren.
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.
Dertien in een dozijn (Essential)
Een klassieker (youtube-filmpje).
Schrijf een applicatie die berekent hoeveel dozen van 8 eieren je volledig kan vullen, en hoeveel eieren je dan nog overhoudt. Gebruik string interpolatie in de uitvoer.
Bovenaan je programma schrijf je:
const int DOOS_GROOTTE = 8;
int aantalEieren = 124;Met deze startwaarden moet je volgende uitvoer krijgen:
124 eieren passen in 15 dozen van 8. Je houdt 4 eieren over.
Test daarna met andere getallen: verander het aantal eieren én de doosgrootte. Met 30 eieren en dozen van 8 krijg je 30 eieren passen in 3 dozen van 8. Je houdt 6 eieren over.
Je hebt twee dingen uit dit hoofdstuk nodig:
- De modulo-operator.
- Wat er gebeurt als je twee gehele getallen deelt.
Tot nu toe was de gehele deling een valkuil. Hier heb je ze net nodig: een halve doos telt niet mee. Met doubles zou je 15,5 dozen krijgen.
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.
Gewicht in space (Essential)
Je massa (in kilogram) is overal dezelfde. Je gewicht is de kracht waarmee een planeet aan je trekt, en die hangt af van de zwaartekracht op die planeet. Gewicht druk je uit in newton (N). Op aarde is je gewicht je massa x 9,81.

Begin je programma met:
double massa = 80.6;
const double G_AARDE = 9.81;Vul bij massa gerust je eigen massa in. De zwaartekracht op de andere planeten is een factor keer die op aarde. Je gewicht op Mercurius is dus je massa x 9,81 x 0,38.
- Mercurius: 0.38
- Venus: 0.91
- Aarde: 1.00
- Mars: 0.38
- Jupiter: 2.34
- Saturnus: 1.06
- Uranus: 0.92
- Neptunus: 1.19
- Pluto: 0.06 (we laten de discussie achterwege of pluto wel of niet een planeet is)
Maak voor elke factor een constante, en toon onder elkaar je gewicht op elke planeet, in de vorm Je weegt op [planeet] [gewicht] N.
Plaats de zin met Jupiter in het rood, daar je daar het zwaarst weegt, en die van Pluto in het groen.
Voorbeeld output (met een massa van 80,6 kg):
Je weegt op Mercurius 300,46068 N.
Je weegt op Venus 719,52426 N.
Je weegt op Aarde 790,686 N.
Je weegt op Mars 300,46068 N.
Je weegt op Jupiter 1850,20524 N.
Je weegt op Saturnus 838,1271600000001 N.
Je weegt op Uranus 727,4311200000001 N.
Je weegt op Neptunus 940,91634 N.
Je weegt op Pluto 47,44116 N.
Waar komt die 0000001 achteraan bij Saturnus en Uranus vandaan? Kommagetallen worden binair bewaard en zijn daardoor niet altijd exact. Je hebt dus niets fout gedaan. Afronden leer je in hoofdstuk 4.
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.
Raadsel (Essential)
Met het statement Console.Clear(); kan je de console - je raadt het nooit - leegmaken. Zo kan je iets verbergen tot de gebruiker er klaar voor is.
Je kan wachten tot de gebruiker op enter duwt met een lege Console.ReadLine();. Wat de gebruiker intypt, doe je niets mee:
Console.WriteLine("Eerste beeld");
Console.WriteLine("Druk enter om voort te gaan.");
Console.ReadLine();
Console.Clear();
Console.WriteLine("Tweede beeld");Schrijf een programma dat een raadsel toont. Pas als de gebruiker op enter duwt, wordt het scherm leeggemaakt en verschijnt het antwoord in het groen. Zet het raadsel en het antwoord elk in een string-variabele bovenaan je programma.
(Scherm 1)
Wat wordt natter naarmate het meer droogt?
Druk op enter voor het antwoord.
(Gebruiker duwt enter -> Scherm 2)
Een handdoek!
Werkt het? Haal dan de lijn met Console.ReadLine(); eens weg en voer opnieuw uit. Wat zie je nu?
Merk op dat Console.Clear() niet werkt zoals verwacht op Mac.
Zonder ReadLine voor de Clear verschijnt het raadsel en wordt het meteen weer gewist, nog voor je het kan lezen. Je ziet enkel het antwoord.
We misbruiken ReadLine hier eigenlijk: we vragen invoer aan de gebruiker, maar doen er niets mee. Het is gewoon een pauze vlak voor de Clear. In De Kassa heb je dit trucje opnieuw nodig.
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.
De Kassa (Final Essentials)
Je gaat een kassasysteem simuleren. Omdat we in dit hoofdstuk nog geen getallen aan de gebruiker vragen, mag je de hoeveelheden en prijzen van de producten hardcoden in variabelen aan het begin van je programma.
Opdracht:
Je klant koopt 3 zaken:
- Frieten (Prijs: 4.50 euro)
- Koninginnenhapje (Prijs: 12.00 euro)
- Cola (Prijs: 2.50 euro)
Maak voor elk van deze prijzen een double-variabele aan. Maak daarnaast ook variabelen aan waarin staat hoeveel stuks de klant van elk koopt (bv. 2 frieten, 1 koninginnenhapje, 3 cola’s).
Voer vervolgens de volgende stappen uit:
- Bereken het totaalbedrag in Euro.
- Bereken het gemiddelde bedrag dat een product kost in dit winkelmandje (totaalbedrag / totaal aantal gekochte items).
- We aanvaarden ook Dollars! Maak een constante aan voor de wisselkoers (bv.
1 Euro = 1.08 Dollar) en bereken hoeveel de klant in Dollar moet betalen.
Toon dit alles als een net kasticket op het scherm:
- Toon eerst de boodschap: “Kassa wordt geladen… druk op enter”.
- Wacht tot de gebruiker op enter duwt.
- Maak het scherm leeg (
Console.Clear()). - Toon het ticket met de details.
- Gebruik een lijn van 25 sterretjes als boven- en onderkant.
- Toon de totaalprijs in het Rood.
- Toon de prijs in Dollar in het Groen.
Voorbeeld output:
(Scherm 1)
Kassa wordt geladen... druk op enter
(Gebruiker duwt enter -> Scherm 2)
*************************
KASSATICKET
*************************
2 x Friet : 9 euro
1 x Koninginha : 12 euro
3 x Cola : 7,5 euro
-------------------------
TOTAAL (EUR) : 28,5 euro
TOTAAL (USD) : 30,78 dollar
-------------------------
Gemiddeld/prod : 4,75 euro
*************************
totaal is een double, dus totaal / totaalAantal is een kommagetal, ook al is totaalAantal een int.
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.
Tekstmaker (PRO)
PRO oefeningen bevatten leerstof die mogelijk niet in deze cursus wordt behandeld, of die in een later hoofdstuk pas aan bod zal komen.
Met de methode System.IO.File.WriteAllText(); kan je een string naar een bestand wegschrijven.
Je geeft hierbij twee argumenten mee: de bestandsnaam, en de inhoud van het bestand.
Volgende voorbeeld schrijft bijvoorbeeld de zin “Ik ben tim” weg naar een bestand dat zal aangemaakt worden genaamd “me.txt”:
System.IO.File.WriteAllText("me.txt", "Ik ben tim");Schrijf een programma dat aan de gebruiker de naam van het bestand vraagt, gevolgd door wat er in het bestand moet geschreven worden. Vervolgens maak je dit bestand aan en plaats je die inhoud er in.
Als je enkel een bestandsnaam meegeeft (en geen volledig pad) dan wordt het bestand geplaatst op de plek waar het programma wordt uitgevoerd.
Standaard staat je gecompileerde programma in de map bin\Debug van je project, en daarin nog in een map met de naam van je .NET-versie (zie De bin-folder).
Als je dus een solution “Oefening” met een project “Oefening” hebt aangemaakt in de map “C:\Temp”, dan zal het bestand zich in de volgende map bevinden: “C:\Temp\Oefening\Oefening\bin\Debug\net10.0” (of een andere versie dan net10.0, afhankelijk van je project).
Je kan ook snel naar de map van je project gaan door in de solution explorer aan de rechterzijde in VS te rechterklikken op je project en dan te kiezen voor: Open folder in file explorer.
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.