- Let op Gebruik vanaf dit hoofdstuk je kennis van debuggen: controleer de waarde van een variabele met breakpoints, niet met
Console.WriteLine(). De oefening Breakpoint-detective leert je hoe. - Vanaf nu zullen de meeste oefeningen iets “vragen” aan de gebruiker: lees de invoer in met
ReadLineen converteer indien nodig naar het gewenste type. Je mag ervan uitgaan dat de gebruiker altijd geldige invoer typt. - In de voorbeelduitvoer begint gebruikersinvoer met
>. Zo zie je het verschil tussenReadLineenWriteLine. - Een kommagetal typ je als gebruiker met een komma (
4,6), zoals op een pc met Belgische instellingen. In je code schrijf je het altijd met een punt (4.6). Staat je pc in het Engels, dan typ en zie je overal een punt.
Vierkant (Essential)
Schrijf een programma om de omtrek en de oppervlakte van een vierkant te bepalen. De zijde wordt ingelezen.
Voorbeeld:
Geef de zijde:
>4,6
Omtrek is 18,4
Oppervlakte is 21,159999999999997
Die vreemde oppervlakte is geen fout in je programma. Waar ze vandaan komt, lees je in de Les onder de oplossing.
- Een
doublebewaart kommagetallen binair, en niet elk kommagetal past daar exact in. 4,6 in het kwadraat wordt daardoor21,159999999999997in plaats van 21,16. Hetzelfde zie je bij0.1 + 0.2in Geld: reken niet met double. In deel 2 los je het op. - De invoer mag je eerst in een
stringbewaren en dan parsen, of in één lijn:double zijde = double.Parse(Console.ReadLine());. Beide zijn juist. Heb je de tekst zelf nergens anders nodig, dan is één lijn korter.
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. Toon de oppervlakte daaronder nog twee keer: één keer met Math.Round(oppervlakte, 2) en één keer met {oppervlakte:F2} in je string interpolatie. Test met zijde 4,6 en met zijde 5.
Geef de zijde:
>5
Omtrek is 20
Oppervlakte is 25
Afgerond: 25
Mooi getoond: 25,00
Wat is het verschil tussen de twee? En welke waarde zit er na die twee lijnen nog in de variabele oppervlakte? Controleer het met een breakpoint.
Math.Roundrekent een nieuw, afgerond getal uit. Nullen op het einde toont C# niet, dus 25 blijft 25.F2verandert niets aan het getal. Het bepaalt enkel hoe het op het scherm komt: altijd twee cijfers na de komma, dus ook25,00.- De variabele
oppervlakteblijft in beide gevallen21,159999999999997. Pas als je het resultaat vanMath.Roundin een variabele stopt, ben je de andere cijfers echt kwijt. Meer daarover in Afronden of enkel mooi tonen?
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.
Balk
Deze oefening traint hetzelfde als Vierkant, maar dan met gehele getallen. Heb je Vierkant vlot gemaakt, dan mag je ze overslaan.
Bereken de oppervlakte en de inhoud van een balk. De gegevens (lengte, breedte en hoogte) worden ingelezen als gehele getallen. Zorg ervoor dat de uitvoer er als volgt uitziet:
Lengte?
>3
Breedte?
>5
Hoogte?
>4
Oppervlakte is 94
Inhoud is 60
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.
Supercomputer (Essential)
Vraag aan de gebruiker 3 kommagetallen. Bereken het gemiddelde van deze 3 getallen en toon dit als een kommagetal op het scherm.
Voorbeeld:
Geef getal 1:
>23,4
Geef getal 2:
>34,6
Geef getal 3:
>27,7
Het gemiddelde hiervan is: 28,566666666666666
Zonder haakjes rond de som deelt C# enkel getal3 door 3, en telt het daarna de andere twee erbij. Delen gaat voor optellen, net zoals in hoofdstuk 2.
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. Voer je programma nog eens uit, met dezelfde getallen, maar typ nu 23.4 (met een punt) in plaats van 23,4. Wat gebeurt er? En waarom crasht je programma niet?
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.
Het verkeerde scheidingsteken geeft geen foutmelding, enkel een verkeerd getal. Krijg je bij kommagetallen een vreemd resultaat zonder dat er iets crasht, kijk dan eerst welk teken er getypt werd. In je code zelf schrijf je een kommagetal altijd met een punt, los van de instellingen van je pc. Meer in Kommagetallen in C#.
BMI berekenaar (Essential)
Maak een programma dat aan de gebruiker z’n lengte (in cm) en gewicht (in kg) vraagt en vervolgens de berekende BMI (Body Mass Index) toont. Zoek zelf op hoe je het BMI berekent.
Gebruik Math.Round om de uitkomst tot maximum 2 cijfers na de komma te tonen.
Reken na met je rekenmachine of je uitkomst wel degelijk klopt!
Voorbeeld:
Wat is uw lengte in cm?
>180
Wat is uw gewicht in kg?
>75
Een persoon met een lengte van 1,8 m en een gewicht van 75 kg heeft een BMI van 23,15.
Bewaar deze oefening goed: in het volgende hoofdstuk bouw je ze verder uit.
Bij deze oefening moet je goed opletten dat je:
- Goed bekijkt welke eenheden je nodig hebt. De formule van BMI vraagt de lengte in meter, maar de gebruiker geeft ze in centimeter.
- Geen informatie verliest in de deling. Lees je de lengte in als
int, dan geeft180 / 100een gehele deling en is iedereen plots 1 meter groot.
Klopt je BMI niet? Zet een breakpoint op de lijn met de formule en kijk in Locals wat er in lengteInMeter zit.
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 a = 20;
int b = 25;
char teken = '7';
int getal = teken;
Console.WriteLine((int)2.9);
Console.WriteLine((int)-2.7);
Console.WriteLine(Math.Floor(-2.7));
Console.WriteLine(Math.Round(4.5));
Console.WriteLine(Math.Round(4.5, MidpointRounding.AwayFromZero));
Console.WriteLine(Convert.ToInt32(4.5));
Console.WriteLine((double)(a + b) / 2);
Console.WriteLine((double)((a + b) / 2));
Console.WriteLine(getal);
Console.WriteLine(int.Parse(teken.ToString()));
Console.WriteLine("3" + "4");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.
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 (optioneel). Ook deze drie lijnen eerst op papier:
Console.OutputEncoding = System.Text.Encoding.UTF8;
int groot = int.MaxValue;
double wortel = Math.Sqrt(-1);
Console.WriteLine(groot + 1);
Console.WriteLine(10.0 / 0);
Console.WriteLine(wortel + 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.
Breakpoint-detective (Essential)
Onderstaand programma berekent de gemiddelde temperatuur van gisteren en vandaag. Het gemiddelde van 20 en 25 is 22,5, maar het programma toont iets anders.
int tempGisteren = 20;
int tempVandaag = 25;
int som = tempGisteren + tempVandaag;
double gemiddelde = som / 2;
double afgerond = Math.Round(gemiddelde, 1);
Console.WriteLine($"Gemiddelde temperatuur: {afgerond} graden");Zoek met de debugger op welke lijn de halve graad verloren gaat. Niet door te gokken, maar zo:
- Plak de code in
Mainen zet een breakpoint op de eerste lijn: klik in de grijze rand links van de lijn, of zet je cursor op de lijn en druk opF9. - Start het programma. Het pauzeert op je breakpoint. De gele lijn is nog niet uitgevoerd.
- Schrijf op wat er in de variabelen zal zitten zodra de gele lijn uitgevoerd is.
- Druk op Step Over (
F10) en kijk in het venster Locals onderaan of je voorspelling klopt. - Herhaal stap 3 en 4 tot het einde.
Noteer op welke lijn het misloopt en waarom. Pas daarna die ene lijn aan, zodat het programma Gemiddelde temperatuur: 22,5 graden 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.
Eerst voorspellen, dan pas stappen. Wie gewoon op Step Over blijft drukken zonder te weten wat hij verwacht, ziet de fout voorbijkomen zonder ze op te merken. Dit is exact het voorbeeld uit Narrowing in de praktijk.
Op-de-poef (Essential)
Een vaste klant in je café bestelt altijd “op-de-poef”. Dat wil zeggen dat hij niet onmiddellijk betaalt en dat z’n rekeningen worden neergeschreven. Ooit zal de klant dan gevraagd worden de hele som te betalen.
Schrijf een programma dat 5 keer na elkaar aan de barman vraagt om een bedrag in te voeren, in hele euro. Het ingevoerde bedrag wordt opgeteld bij wat er reeds op de rekening staat. Na 5 keer wordt de totale som getoond alsook hoeveel weken het duurt indien de klant wekelijks 10 euro afbetaalt.
Opmerking: omdat we nog geen lussen (loops) hebben gezien, mag je de code voor de 5 bedragen gewoon onder elkaar kopiëren.
Voorbeeldwerking:
Voer bedrag in:
>12
De poef staat op 12 euro.
Voer bedrag in:
>14
De poef staat op 26 euro.
Voer bedrag in:
>3
De poef staat op 29 euro.
Voer bedrag in:
>8
De poef staat op 37 euro.
Voer bedrag in:
>2
De poef staat op 39 euro.
*************************
Het totaal van de poef is 39 euro en zal 4 weken duren om volledig afbetaald te worden.
Een halve week bestaat niet: 39 euro afbetalen duurt 4 weken, niet 3,9. Welke methode uit Math rondt altijd naar boven af?
- Dit is de eerste keer dat je een lopende som moest maken: je hebt een variabele (
poef) die zal groeien met behulp van+=. Merk op datpoef += bedrag;ook mag schrijven alspoef = poef + bedrag;, zo zie je nog duidelijker de lopende som: we nemen de inhoud van de variabelepoef, tellen erbedragbij op, en dat nieuwe resultaat bewaren we opnieuw inpoef(we overschrijven dan ook de vorige waarde die er in stak). - Wil je zien hoe
poefgroeit? Zet een breakpoint op de eerste lijn en stap met Step Over door de vijf blokjes. Houpoefin het oog in Locals. Math.Ceilinggeeft altijd eendoubleterug, ook als er niets na de komma staat. Een aantal weken is een geheel getal, dus cast je het resultaat naar eenint. Die cast kapt hier niets af: naMath.Ceilingstaat er toch niets meer na de komma. Het is hetzelfde als het busvoorbeeld in Afkappen is niet hetzelfde als afronden.- Deel door
10.0en niet door10.poef / 10is een deling van twee ints, en dan weet de compiler niet welke versie vanMath.Ceilinghij moet nemen. Hij geeft dan een foutmelding (The call is ambiguous).
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.
Feestkassa
De plaatselijke voetbalclub organiseert een mosselfestijn. Naast mosselen met frietjes (20 EUR) bieden ze voor de kinderen de mogelijkheid om een koninginnenhapje (10 EUR) te kiezen. Verder is er een ijsje als nagerecht voorzien (3 EUR). Om het gemakkelijk te maken kosten alle dranken 2 EUR.
Ontwerp een applicatie zodat de vrijwilliger aan de kassa alleen maar de juiste aantallen moet ingeven, lijn per lijn (frietjes, koninginnenhapjes, ijsjes, dranken), om de totaalprijs te berekenen.
Het resultaat wordt als volgt weergegeven: Het totaal te betalen bedrag is x EURO.
Voorbeeld:
Frietjes?
>3
Tussenprijs= 60 euro
Koninginnenhapje?
>5
Tussenprijs= 60 euro + 50 euro
Ijsjes?
>2
Tussenprijs= 60 euro + 50 euro + 6 euro
Dranken?
>5
Tussenprijs= 60 euro + 50 euro + 6 euro + 10 euro
Het totaal te betalen bedrag is 126 EURO.
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.
Wisselgeld in centen (Essential)
Een kassa moet wisselgeld teruggeven. De gebruiker typt het bedrag in euro, bijvoorbeeld 3,75. Het programma zet dat om naar een geheel aantal centen met een cast, en toont daarna hoeveel munten van elke soort de kassa moet teruggeven: eerst zoveel mogelijk munten van 2 euro, dan van 1 euro, dan van 50 cent, en zo verder tot 1 cent.
Voorbeeld:
Welk bedrag moet je teruggeven?
>3,75
Dat is 375 cent:
1 x 2 euro
1 x 1 euro
1 x 50 cent
1 x 20 cent
0 x 10 cent
1 x 5 cent
0 x 2 cent
0 x 1 cent
Hoeveel munten van 2 euro passen er in 375 cent? En hoeveel cent blijft er dan over? Voor allebei ken je sinds hoofdstuk 2 een operator. Lussen ken je nog niet: acht keer hetzelfde blokje onder elkaar is hier de bedoeling.
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. Test je programma nu met 4,35. Tel de munten na: kloppen ze? Zoek met een breakpoint op de lijn waar je centen berekent waar het misloopt: kijk in Locals naar bedrag en centen, en hou je muis boven bedrag * 100. Los het daarna op, zodat er Dat is 435 cent: verschijnt.
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.
Een cast rondt niet af, hij kapt af. Bij een getal als 434,99999999999994 kost dat je een hele cent. Rekenen met geld doe je daarom liefst met decimal, zie Geld: reken niet met double.
Stevens busreis (Essential)
De school gaat op reis met de bus. Stagiair Steven moest een programma schrijven dat het aantal studenten, het aantal plaatsen per bus en de prijs van één bus inleest, en dan toont:
- hoeveel bussen er nodig zijn (niemand blijft achter op de parking);
- hoeveel elke student betaalt: de totale prijs van de bussen gedeeld door het aantal studenten, afgerond op een hele euro zoals je op school leerde (een halve euro gaat naar boven);
- welke rij als eerste mag instappen: een dobbelsteen van 1 tot en met 6 beslist.
Zo zou het er moeten uitzien (de rij verschilt uiteraard bij elke uitvoer):
Hoeveel studenten gaan er mee?
>47
Hoeveel plaatsen heeft een bus?
>20
Hoeveel kost een bus?
>490
Er zijn 3 bussen nodig.
Elke student betaalt 31 euro.
Rij 4 mag als eerste instappen.
Steven liet een A.I. de code schrijven en leverde ze in zonder ze te testen:
Console.WriteLine("Hoeveel studenten gaan er mee?");
int studenten = Console.ReadLine();
Console.WriteLine("Hoeveel plaatsen heeft een bus?");
int perBus = int.Parse(Console.ReadLine());
Console.WriteLine("Hoeveel kost een bus?");
double busPrijs = double.Parse(Console.ReadLine());
int aantalBussen = Math.Ceiling((double)(studenten / perBus));
double prijsPerStudent = Math.Round(aantalBussen * busPrijs / studenten);
Random dobbelsteen = new Random();
int rij = dobbelsteen.Next(1, 6);
Console.WriteLine($"Er zijn {aantalBussen} bussen nodig.");
Console.WriteLine($"Elke student betaalt {prijsPerStudent} euro.");
Console.WriteLine($"Rij {rij} mag als eerste instappen.");Deel 1. Maak een nieuw project en plak Stevens code in Main. Er zitten twee fouten in die Visual Studio vindt. Lees de foutboodschappen in de Error List en herstel ze.
Deel 2. Nu start het programma, maar het rekent nog niet juist. Er zitten nog drie fouten in die de compiler niet ziet. Test met deze twee invoeren en vergelijk met wat het programma zou moeten tonen:
- 47 studenten, 20 plaatsen per bus, 490 euro per bus: 3 bussen, 31 euro per student.
- 40 studenten, 20 plaatsen per bus, 490 euro per bus: 2 bussen, 25 euro per student (980 / 40 is 24,5, en dat wordt 25).
Zoek de fouten met een breakpoint en het venster Locals, niet door te gokken. De derde fout vind je niet met de debugger, wel door goed na te denken over Next.
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.
- Code die compileert, is nog geen code die klopt. De compiler vond twee fouten, jij de andere drie.
- Steven testte niet, en met één invoer had hij het ook niet gezien: bij 40 studenten klopt het aantal bussen, bij 47 de afronding wel. Test daarom altijd met een paar verschillende invoeren, en kies ze zo dat er iets moet gebeuren: een deling die niet opgaat, een prijs die op een halve euro uitkomt.
Het Orakeltje van Delphi (Essential)
Gebruik een random generator om een orakel (een duur woord voor waarzegger) te maken, namelijk de kleine broer of zus van het Orakel van Delphi. Het programma zal aan de gebruiker vertellen hoe lang deze nog zal leven. Bijvoorbeeld: “Je zal nog 15 jaar leven.”.
Het orakel zal enkel realistische getallen geven. M.a.w., getallen van 5 tot en met 125 jaar.
We gaan geregeld een oefening in een later hoofdstuk verder uitbreiden. Het orakeltje van Delphi is er zo eentje. Bewaar je oefeningen dus goed!
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.
Weerbericht van morgen
Schrijf een programma dat het weer van morgen “voorspelt”: een willekeurige temperatuur tussen -5,0 en 30,0 graden, afgerond op één cijfer na de komma. Een temperatuur die exact op de helft ligt, rond je af zoals op school.
Voorbeeld:
Morgen wordt het 19,2 graden.
Next geeft enkel gehele getallen. Kijk in Genereer kommagetallen met NextDouble hoe je een kommagetal krijgt, en hoe je het bereik groter maakt en verschuift.
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. Geef je generator een seed: new Random(42). Voer je programma twee keer uit. Vraag daarna aan je buur om hetzelfde te doen en vergelijk. Wat merk je?
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.
Levensbalk
Een held begint met 100 levens. Drie monsters slaan na elkaar toe, elk met een willekeurige schade van 10 tot en met 40. De levens zakken nooit onder 0. Daarna drinkt de held een toverdrank die 50 levens teruggeeft, maar hij kan nooit meer dan 100 levens hebben.
Je hebt hiervoor nog geen if nodig: kijk in Waarden begrenzen.
Twee voorbeelden (bij jou zal de schade anders zijn):
Je held begint met 100 levens.
Monster 1 slaat toe: 38 schade. Levens: 62
Monster 2 slaat toe: 35 schade. Levens: 27
Monster 3 slaat toe: 40 schade. Levens: 0
Je drinkt een toverdrank. Levens: 50
Je held begint met 100 levens.
Monster 1 slaat toe: 12 schade. Levens: 88
Monster 2 slaat toe: 21 schade. Levens: 67
Monster 3 slaat toe: 10 schade. Levens: 57
Je drinkt een toverdrank. Levens: 100
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.
Het lijkt vreemd dat je Max gebruikt om iets naar beneden te begrenzen. Denk het zo: Math.Max(x, 0) geeft nooit iets kleiner dan 0. In het volgende hoofdstuk kan je hetzelfde met if, maar voor een grens is Math.Max of Math.Min korter.
Sinus, cosinus en tangens
Vraag aan de gebruiker een hoek in graden. Zet deze om naar radialen, gebruik Math.PI voor Pi. Gebruik vervolgens de goniometrische functies uit de Math-bibliotheek om de sinus (Math.Sin), cosinus (Math.Cos) en tangens (Math.Tan) van de hoek aan de gebruiker te tonen.
Denk eraan: de methoden die met hoeken werken, werken in radialen, daarom moeten we deze eerst omzetten. 1 rad = 180°/π, ongeveer 57,3°.
Voorbeeld:
Geef de hoek in graden:
>90
Sinus van 90 graden is 1
Cosinus van 90 graden is 6,123233995736766E-17
Tangens van 90 graden is 16331239353195370
Schrik niet van die cosinus en tangens. De cosinus van 90 graden is 0, maar Math.PI is een kommagetal met een eindig aantal cijfers, dus is de hoek in radialen net niet exact 90 graden. Je krijgt dan 6,123233995736766E-17: een 6 met 16 nullen na de komma ervoor, dus bijna 0. De tangens van 90 graden is oneindig groot, en daarom krijg je een reuzegetal. Ook bij 45 graden zie je het: de tangens is 1, maar C# toont 0,9999999999999999.
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.
Zoek-de-fout-prompt
In Programmeren met A.I. las je over de zoek-de-fout-prompt. Die ga je nu gebruiken, op een oefening die je al gemaakt hebt: Vierkant of BMI berekenaar.
Open ChatGPT, Copilot Chat of Claude in je browser en geef deze prompt, met de opgave van je oefening op de plaats van de rechte haakjes:
Schrijf de C# oplossing voor deze opgave: “[plak hier de opgave]”.
Gebruik enkel leerstof tot en met hoofdstuk 4 van een beginnerscursus: variabelen, Console.ReadLine, Parse, casting, de Math-bibliotheek en Random. Geen if, geen lussen en geen eigen methoden.
Zorg ervoor dat er minstens drie fouten in de code zitten die een beginnende programmeur zou kunnen maken. Geef geen uitleg, alleen de code. Je hoeft de boilerplate code (zoals de using statements, de namespace, de class Program en de static void Main) niet te tonen. Ik zal de fouten vervolgens proberen te vinden en te corrigeren.
Zoek de fouten eerst op papier. Schrijf per fout op op welke lijn ze staat en of de compiler ze zal vinden.
Plak de code daarna in
Mainin Visual Studio. Herstel wat niet compileert, voer het programma uit met de invoer uit het voorbeeld van de opgave, en zoek de rest met een breakpoint.Leg de herstelde code naast je eigen oplossing. Wat doet de A.I. anders dan jij? Gebruikt ze iets wat je nog niet kent?
Vraag pas daarna aan de A.I. welke fouten ze ingebouwd had. Vond je ze allemaal? Vond je er misschien een die ze zelf niet vermeldt?
Er is geen modeloplossing: je A.I. maakt telkens andere fouten. Hou wel in het oog of haar code zich aan de afspraken houdt. Een A.I. vergeet geregeld dat je nog geen if kent, of gebruikt Convert.ToDouble waar het boek double.Parse gebruikt. Ook dat mag je als fout aanduiden.
Schaak-ELO (PRO)
“Een Elo-rating is een getalsmatige aanduiding van de sterkte van een speler. Het wordt het meest gebruikt in schaken, dammen en go, maar kan in principe gebruikt worden bij elke sport waarbij spelers 1 tegen 1 spelen.” (bron Wikipedia). We gaan een applicatie schrijven (zie verderop voor de effectieve werking van de applicatie) die:
- De verwachte score (Ea en Eb) berekent indien 2 spelers tegen elkaar gaan spelen, gebaseerd op hun Elo-rating (Ra en Rb) die je applicatie aan de gebruiker vraagt.
- Hun nieuwe Elo-rating (R’a en R’b) berekent, gebaseerd op de effectieve uitslag (Sa en Sb).
Volgende afbeelding (bron) toont beide stappen: 
Opmerkingen bij deze formules:
- De waarde K mag je standaard op 10 zetten (dit geeft aan dat er maximum 10 Elo-punten kunnen bijkomen of afgaan).
- De eindscore (Sa en Sb) is als volgt: 1 voor een win, 0,5 voor een gelijkspel, 0 voor verlies.
- Gebruik voor ALLES doubles, ook voor K.
- De finale, nieuwe rating wordt afgerond tot 0 cijfers na de komma.
Getalvoorbeeld. Indien speler A een rating van 1000 heeft en B 1100, dan zal speler A na een gewonnen wedstrijd een rating van 1006 krijgen en speler B 1094.
De applicatie. Schrijf een applicatie die eerst de Elo-ratings van beide spelers vraagt. Vervolgens toont de applicatie de nieuwe Elo-ratings voor de 3 scenario’s: speler A wint, speler B wint, of het wordt een gelijkspel.
Rating van speler A?
>1000
Rating van speler B?
>1100
Als A wint: A 1006, B 1094
Als B wint: A 996, B 1104
Bij gelijkspel: A 1001, B 1099
Dit is een iets pittigere oefening waarbij je je goed moet concentreren op het gebruik van haakjes om de volgorde van berekeningen te controleren. Werk in stappen: bereken eerst enkel de verwachte scores, controleer ze met een breakpoint (bij 1000 tegen 1100 is de verwachte score van A ongeveer 0,36), en schrijf pas daarna de drie scenario’s.
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. Breid de applicatie uit: vraag de waarde van K ook aan de gebruiker en gebruik deze in je berekeningen.
Rating van speler A?
>1000
Rating van speler B?
>1100
Waarde van K?
>32
Als A wint: A 1020, B 1080
Als B wint: A 988, B 1112
Bij gelijkspel: A 1004, B 1096
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 Festivalganger (Final Essentials)
Je hebt tickets bemachtigd voor een fantastisch driedaags festival! Maar festivals zijn duur, dus je besluit een app te schrijven om je budget te beheren.

Het programma werkt als volgt:
- Vraag de gebruiker zijn/haar naam en het totaal budget.
- Voor elke dag (Dag 1, Dag 2 en Dag 3):
- Vraag hoeveel drankjes (4,50 euro per stuk) de gebruiker heeft gedronken.
- Vraag hoeveel snacks (9 euro per stuk) de gebruiker heeft gegeten.
- Daarnaast berekent het programma een onvoorziene kost voor die dag (bijvoorbeeld zonnecrème, poncho, fooi, …). Dit is een willekeurig bedrag van 5 tot en met 20 euro.
- Bereken de totale kosten van de dag.
- Trek dit bedrag van het budget af.
- Toon de kosten van de dag en het nieuwe resterende budget.
- Rond het budget zelf niet af: je rekent verder met het echte getal. Pas wanneer je het budget toont, rond je het af op 2 cijfers na de komma met
Math.Round().
Opmerking: Omdat we nog geen lussen (loops) hebben gezien, mag je de code voor de 3 dagen gewoon onder elkaar kopiëren.
Voorbeeld output: (tekst na > is invoer)
Welkom op het festival! Wat is je naam?
>Jos
Hoeveel budget heb je mee?
>180,45
--- DAG 1 ---
Aantal drankjes?
>5
Aantal snacks?
>2
Oeps! Onvoorziene kost van 12 euro.
Totaal dag 1: 52,5 euro
Budget over: 127,95 euro
--- DAG 2 ---
Aantal drankjes?
>8
Aantal snacks?
>3
Oeps! Onvoorziene kost van 6 euro.
Totaal dag 2: 69 euro
Budget over: 58,95 euro
--- DAG 3 ---
Aantal drankjes?
>10
Aantal snacks?
>0
Oeps! Onvoorziene kost van 9 euro.
Totaal dag 3: 54 euro
Budget over: 4,95 euro
Jos, je hebt nog 4,95 euro over na 3 dagen feesten!
- Laat
Math.Roundeens weg bij het tonen. Na dag 1 staat er danBudget over: 127,94999999999999 euro: 180,45 is niet exact binair te bewaren in eendouble. Daarom rond je af bij het tonen. - Waarom niet meteen het budget zelf afronden en daarmee verder rekenen? Zolang je enkel optelt en aftrekt, merk je het verschil hier niet. Maar een afgerond getal is een ander getal, en rekent je programma er verder mee (een percentage, een gemiddelde), dan sleep je die fout mee. Rond daarom af op het laatste moment, zie Afronden of enkel mooi tonen?
- De onvoorziene kost is een
int(Nextgeeft gehele getallen), de prijzen zijn doubles. Eenintoptellen bij eendoublegeeft vanzelf eendouble: dat is widening, daar heb je geen cast voor 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.
Deel 2. Het boek raadt voor geldbedragen het type decimal aan. Maak van het budget, de twee prijzen en de dagtotalen een decimal. Laat daarna Math.Round weg bij het tonen. Wat zie je nu?
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.