• Let op De oefeningen worden langer. Lees daarom eerst de volledige opgave voor je begint te programmeren. Die gewoonte heb je nodig voor de grote projecten van twee uur die later dit jaar komen.
  • In de voorbeelduitvoer begint gebruikersinvoer met >. Tenzij de opgave iets anders zegt, mag je ervan uitgaan dat de gebruiker een geldig getal typt.
  • Tekst vergelijken met == of in een switch is hoofdlettergevoelig: "Ja" is niet hetzelfde als "ja". Typ keuzes dus exact zoals ze in de opgave staan.

Casino (Essential)

Genereer een random getal van 1 tot en met 6, maar toon het niet aan de gebruiker. Vraag de gebruiker welk getal de computer volgens hem “geworpen” heeft. Raadt hij juist, dan verschijnt er “Proficiat!” op het scherm. Anders: “You lose. Ik wierp [getal].”

Voorbeeld:

Welk getal heb ik geworpen?
>3
You lose. Ik wierp 1.

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. Laat de gebruiker nu drie keer na elkaar raden, telkens naar een nieuwe worp. Enkel wie juist raadt, mag nog eens raden. Raadt hij ook de derde keer juist, dan wint hij. Bij een fout antwoord stopt het spel meteen.

Welk getal heb ik geworpen?
>4
Welk getal heb ik nu geworpen?
>1
You lose. Ik wierp 6.
Welk getal heb ik geworpen?
>4
Welk getal heb ik nu geworpen?
>1
Welk getal heb ik nu geworpen?
>5
Proficiat!
Tip

De kans om drie keer juist te raden is 1 op 216. Wie gewoon speelt, test het winnende pad dus bijna nooit. Zet een breakpoint op de lijn met ReadLine en kijk in Locals wat er in geworpen zit voor je je gok intypt.

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.

Orakeltje van Delphi, part deux (Essential)

Het Orakeltje uit het vorige hoofdstuk wordt slimmer. Voor het je vertelt hoe lang je nog te leven hebt, vraagt het of je een man (m) of een vrouw (v) bent, en hoe oud je bent. Mannen worden hoogstens 120 jaar, vrouwen 150. Het orakel voorspelt nog altijd minstens 5 jaar, en nooit meer dan wat nog kan: een vrouw van 50 krijgt een getal van 5 tot en met 100 (150 - 50), een man van 35 een getal van 5 tot en met 85 (120 - 35).

Potloodtekening: de robot als Grieks orakel met een kristallen bol, het stokmannetje wacht geknield op zijn voorspelling.

Twee gevallen vragen extra aandacht:

  • Blijven er geen 5 jaar meer over (een man van 118 heeft er hoogstens nog 2), dan zegt het orakel: “Het orakel zwijgt en kijkt je medelijdend aan.”
  • Typt de gebruiker iets anders dan m of v, dan zegt het: “Het orakel begrijpt je antwoord niet.”
Ben je een man of een vrouw (m/v)?
>v
Hoe oud ben je?
>50
Je zal nog 37 jaar leven.
Ben je een man of een vrouw (m/v)?
>m
Hoe oud ben je?
>118
Het orakel zwijgt en kijkt je medelijdend aan.

Test zeker een man van 115 en een man van 116. Bij 115 kan er nog precies één getal uitkomen.

  • De bovengrens van Next telt niet mee. Wil je tot en met resterend kunnen gaan, dan geef je resterend + 1 mee.
  • Next crasht als de bovengrens kleiner is dan de ondergrens. Zonder de test op resterend geeft een man van 117 Next(5, 4), en dat is een ArgumentOutOfRangeException. Precies op zo’n grens gaat een programma met beslissingen het vaakst mis.
  • M met een hoofdletter is geen m. Het orakel begrijpt die gebruiker dus 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.

BMI met if (Essential)

Pas je programma BMI berekenaar uit het vorige hoofdstuk aan: toon na de BMI ook in welke categorie de gebruiker valt, in de juiste kleur.

BMI Tekst Kleur
onder 18,5 Ondergewicht rood
van 18,5 tot 25, 25 niet inbegrepen Normaal gewicht groen
van 25 tot 30, 30 niet inbegrepen Overgewicht donkergeel
van 30 tot 40, 40 niet inbegrepen Zwaarlijvigheid rood
40 of meer Ernstige zwaarlijvigheid magenta

Zet daarna de kleur terug naar normaal.

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.
Normaal gewicht

Test daarna de grenzen: een BMI van exact 18,5, 25, 30 en 40 moet in de hogere categorie vallen. Handig: met een lengte van 100 cm is je BMI gelijk aan je gewicht.

Merk op dat we telkens enkel de bovengrens testen. Dat verkleint de kans op fouten. Zie je de bug in deze code?

if (bmi < 18.5)
{
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("Ondergewicht");
}
else if (bmi > 18.5 && bmi < 25)
{
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("Normaal gewicht");
}

Wie een BMI van exact 18,5 heeft, valt door beide tests: bmi < 18.5 is false en bmi > 18.5 ook. Er moest >= staan. Maar die ondergrens hoef je gewoon niet te testen: kom je bij de else if, dan weet je al dat bmi niet kleiner is dan 18,5.

Om dezelfde reden eindig je niet met else if (bmi >= 40) maar met een gewone else.

Nog een grensgeval: typ 180 cm en 80,99 kg. Het programma toont BMI van 25 en toch Normaal gewicht. De echte BMI is 24,9969…, en Math.Round rondt dat enkel af voor het scherm. De if test de echte waarde.

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. Elke lijn begint met het nummer van het stukje dat ze op het scherm zette.

int punten = 75;
int leeftijd = 16;
string antwoord = "Ja";
bool isLid = true;
bool isStudent = false;
bool heeftKaart = false;
double saldo = 0.1 + 0.2;

if (punten >= 50)
{
    Console.WriteLine("1: geslaagd");
}
else if (punten >= 70)
{
    Console.WriteLine("1: onderscheiding");
}

if (leeftijd >= 18)
    Console.WriteLine("2: je mag stemmen");
    Console.WriteLine("2: welkom in het stemlokaal");

if (punten < 50);
{
    Console.WriteLine("3: herexamen");
}

if (antwoord == "ja")
{
    Console.WriteLine("4: akkoord");
}
else
{
    Console.WriteLine("4: niet akkoord");
}

if (isLid || isStudent && heeftKaart)
{
    Console.WriteLine("5: binnen");
}
else
{
    Console.WriteLine("5: buiten");
}

string soort = !(leeftijd < 12 || leeftijd >= 18) ? "tiener" : "geen tiener";
Console.WriteLine($"6: {soort}");

switch (punten / 10)
{
    case 10:
    case 9:
        Console.WriteLine("7: A");
        break;
    case 8:
    case 7:
        Console.WriteLine("7: B");
        break;
    default:
        Console.WriteLine("7: C");
        break;
}

if (saldo == 0.3)
{
    Console.WriteLine("8: exact 0,3");
}
else
{
    Console.WriteLine($"8: {saldo}");
}

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.

Stevens ticketprijs (Essential)

Een pretpark vraagt stagiair Steven een programma dat de prijs van een ticket toont. De regels:

  • jonger dan 12: gratis;
  • van 12 tot 25, 25 niet inbegrepen: 15 euro;
  • 65 of ouder: 12 euro;
  • alle anderen: 20 euro.

Steven liet een A.I. de code schrijven:

Console.WriteLine("Hoe oud ben je?");
int leeftijd = int.Parse(Console.ReadLine());

double prijs = 20;
if (leeftijd < 12)
    prijs = 0;
if (leeftijd > 12 && leeftijd < 25)
    prijs = 15;
if (leeftijd > 65)
    prijs = 12;

Console.WriteLine($"Je ticket kost {prijs} euro.");

Hij testte met 8, 20 en 70 jaar, en alles klopte.

Deel 1. Maak een testtabel met drie kolommen: de leeftijd, de prijs die volgens de regels juist is, en de prijs die Stevens programma toont. Neem Stevens drie leeftijden, en daarnaast 11, 12, 24, 25, 64 en 65. Welke leeftijden gaan fout, en waarom? Herschrijf de code daarna als één if-else if-keten die enkel de bovengrens test, zoals bij BMI met if.

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 wil nu ook tonen hoeveel korting de klant krijgt ten opzichte van de normale prijs. Zijn nieuwe versie:

Console.WriteLine("Hoe oud ben je?");
int leeftijd = int.Parse(Console.ReadLine());

const double NORMALE_PRIJS = 20;
double prijs = NORMALE_PRIJS;
if (leeftijd < 12)
{
    prijs = 0;
    double korting = NORMALE_PRIJS - prijs;
}
else if (leeftijd < 25)
{
    prijs = 15;
    double korting = NORMALE_PRIJS - prijs;
}
else if (leeftijd >= 65)
{
    prijs = 12;
    double korting = NORMALE_PRIJS - prijs;
}

Console.WriteLine($"Je ticket kost {prijs} euro. Je krijgt {korting} euro korting.");

Dit compileert niet. Steven zet daarom double korting; boven de if en haalt het woord double weg in de drie takken. Nu compileert het nog altijd niet, maar de foutmelding is een andere.

Leg beide foutmeldingen uit en herstel de code. Er is een oplossing waarbij de korting maar op één plaats berekend wordt.

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 programma dat compileert, is nog geen programma dat klopt. De fouten van deel 1 vindt de compiler niet, die van deel 2 wel.
  • Test op de grenzen: de laatste waarde van een groep en de eerste van de volgende. Een leeftijd midden in een groep bewijst niets.
  • Zie ook Scope van variabelen en het kader Enkel verplaatsen volstaat niet.

Schoenverkoper

Een schoenwinkel geeft korting aan wie veel paar schoenen tegelijk koopt. Je bouwt de kassa in drie delen.

Deel 1. Vraag aan de gebruiker hoeveel paar schoenen hij wil kopen. Een paar kost 20 euro. Koopt hij 10 paar of meer, dan kosten de eerste 9 paar nog steeds 20 euro, maar alle volgende nog maar 10 euro. Toon de totale prijs.

  • 8 paar kost 8 x 20 = 160 euro.
  • 12 paar kost 9 x 20 + 3 x 10 = 210 euro.
Hoeveel paar schoenen koopt de klant?
>12
Dat kost 210 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.

Tip

Uitdaging: deel 1 kan ook zonder if, met Math.Min en Math.Max uit hoofdstuk 4. Hoeveel paar betaal je aan het volle tarief, en hoeveel aan het kortingstarief?

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. Vraag nu, na het aantal schoenen, ook aan de kassier tot en met hoeveel paar het volle tarief geldt. Voert de kassier 6 in, dan kosten 8 paar 6 x 20 + 2 x 10 = 140 euro.

Hoeveel paar schoenen koopt de klant?
>8
Tot en met hoeveel paar geldt het volle tarief?
>6
Dat kost 140 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.

Deel 3. De kassier mag enkel een getal van 3 tot en met 10 invoeren. Voert hij iets anders in, dan geldt de gewone regel: het volle tarief tot en met 9 paar.

Hoeveel paar schoenen koopt de klant?
>12
Tot en met hoeveel paar geldt het volle tarief? (3 tot en met 10)
>2
Dat kost 210 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.

Pretparkpoort

Aan de ingang van een pretpark meet een programma hoe groot je bent. Deze lijnen code horen bij dat programma, maar ze zijn door elkaar geraakt, en de accolades zijn weg. Bovendien is er één lijn bij geslopen die er niet in thuishoort.

else if (lengte < 120)
Console.WriteLine("Je mag op alle attracties.");
if (lengte < 100)
else (lengte >= 140)
Console.WriteLine("Je mag binnen, maar enkel op de kinderattracties.");
else
Console.WriteLine("Sorry, je bent te klein om binnen te mogen.");
else if (lengte < 140)
Console.WriteLine("Je mag binnen, maar enkel met een begeleider.");

Het programma begint met:

Console.WriteLine("Hoe groot ben je, in cm?");
int lengte = int.Parse(Console.ReadLine());

De regels: onder 100 cm mag je niet binnen, onder 120 cm enkel met een begeleider, onder 140 cm enkel op de kinderattracties, en vanaf 140 cm op alles. Zet de lijnen in de juiste volgorde, met accolades erbij. Welke lijn is de indringer, en waarom compileert ze niet? Doe het eerst op papier en test daarna met 95, 100, 119, 120, 139 en 140.

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.

Schrikkeljaar (Essential)

De gebruiker voert een jaartal in en je programma toont of het een schrikkeljaar is. Een schrikkeljaar is deelbaar door 4, behalve als het ook deelbaar is door 100, tenzij het wél deelbaar is door 400. Bijvoorbeeld:

  • 1997: geen schrikkeljaar
  • 1996: schrikkeljaar
  • 1900: geen schrikkeljaar
  • 2000: schrikkeljaar

Lukt het met één if, met een samengestelde booleaanse expressie?

Geef een jaartal:
>1900
1900 is geen schrikkeljaar.

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. Bewaar het resultaat van de test in een bool isSchrikkeljaar. Kies daarna met de ternaire operator het woord dat in de zin komt (een of geen), zodat er nog maar één WriteLine overblijft.

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.

Ohm-berekenaar

Vraag de gebruiker wat hij wil berekenen: spanning, weerstand of stroomsterkte. Hij typt zijn keuze exact zo, in kleine letters. Vraag daarna de twee andere waarden: kiest de gebruiker spanning, dan vraag je de stroomsterkte en de weerstand. Bereken met de wet van Ohm (spanning = stroomsterkte x weerstand) de gevraagde waarde, tot 2 cijfers na de komma. Voorzie ook een boodschap voor een keuze die niet bestaat.

Wat wil je berekenen? spanning, weerstand of stroomsterkte?
>stroomsterkte
Geef me dan de spanning:
>34,4
Geef me dan de weerstandswaarde:
>3,4
De stroomsterkte bedraagt dan 10,12 ampère

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. Bereken de stroomsterkte met een weerstand van 0. Wat verschijnt er? Toon in dat geval Kortsluiting! in plaats van een stroomsterkte.

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.

Stemwijzer (Essential)

Een ludieke stemwijzer stelt je een reeks ja-neevragen en vertelt je daarna op welke (verzonnen) partij je best stemt. Giet onderstaande beslissingsboom in een programma. De gebruiker antwoordt telkens met j of n, en alles wat geen j is, telt als nee. Stel enkel de vragen die op het pad van de gebruiker liggen, en toon op het einde zijn stemprofiel.

Beslissingsboom van de stemwijzer. Sta je op voor 8 uur? Nee: eet je elke dag friet? Ja: Frietfront. Nee: heb je een huisdier? Ja: Knuffelpartij. Nee: geloof je nog in Sinterklaas? Ja: Sintunie, nee: Blanco. Sta je wel op voor 8 uur: drink je koffie? Nee: Waterpartij. Ja: staat alles in je agenda? Ja: Planningspartij. Nee: heb je vrienden? Ja: Gezelligheidspartij, nee: Blanco.

Sta je op voor 8 uur? (j/n)
>n
Eet je elke dag friet? (j/n)
>n
Heb je een huisdier? (j/n)
>n
Geloof je nog in Sinterklaas? (j/n)
>j
Jouw stemprofiel: Sintunie
Tip

Teken de boom eerst over op papier en zet bij elke vraag een nummer. Elke vraag wordt een if met twee takken, en de volgende vraag komt binnen de tak waar je uitkomt.

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.

Quiz

Maak een quiz met 3 meerkeuzevragen. Gebruik een switch om het antwoord van de gebruiker (a, b, c of d) te verwerken en toon bij elke vraag of het juist of fout was: juist in het groen, fout in het rood. Typt de gebruiker iets anders dan een van de vier letters, dan telt dat als fout. Toon elke vraag op een nieuw scherm. Hou bij hoe vaak de speler juist en fout antwoordde, en toon op het einde de eindscore: juist is +2, fout is -1.

Wie is de auteur van Zie Scherp Scherper?
a. Jeff Bezos
b. Tim Dams
c. Bill Gates
d. Steve Jobs
>b
Juist!
Druk op enter voor de volgende vraag.

En na de derde vraag, op een leeg scherm:

Je had 2 juist en 1 fout. Je eindscore is 3.

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.

Kleurcode weerstand naar ohm

Op een weerstand staan gekleurde ringen die zijn waarde aangeven. Vraag de gebruiker de kleuren van de eerste 3 ringen, als tekst in kleine letters (bv. groen), en toon daarna de waarde van de weerstand. De eerste twee ringen zijn cijfers, de derde zegt met hoeveel je vermenigvuldigt:

Kleur Cijfer (ring 1 en 2) Vermenigvuldiger (ring 3)
zwart 0 1
bruin 1 10
rood 2 100
oranje 3 1 000
geel 4 10 000
groen 5 100 000
blauw 6 1 000 000
paars 7 10 000 000
grijs 8 100 000 000
wit 9 1 000 000 000
Geef de 3 ringkleuren na elkaar, telkens gevolgd door enter:
>rood
>paars
>rood
Deze weerstand heeft een waarde van 2700 ohm

Waarom 2700? Ring 1 is rood en heeft waarde 2. Ring 2 is paars en heeft waarde 7. Samen is dat 27. Ring 3 is rood, dus vermenigvuldig je met 100.

Gebruik voor elke ring een eigen switch.

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.

Typ eens Rood met een hoofdletter als eerste ring. Je programma crasht niet en toont 700 ohm. Rood past in geen enkele case, dus blijft waarde op 0 staan, en de tweede en derde ring rekenen daar gewoon mee verder. Een fout die niet crasht, maar stilletjes een verkeerd getal geeft, is de lastigste soort. Met een default die een melding toont, zou de gebruiker het tenminste zien.

Enum verkeerslicht (Essential, GPT)

Je schrijft een programma dat een verkeerslicht nabootst met een enum. De gebruiker geeft het verkeerslicht een kleur (Groen, Oranje of Rood). Zet die invoer met Enum.Parse om naar je enum, en toon met een switch wat een bestuurder moet doen:

  • groen: “Je mag doorrijden.”
  • oranje: “Maak je klaar om te stoppen.”
  • rood: “Stop! Wacht tot het licht groen wordt.”
Voer de status van het verkeerslicht in (Groen, Oranje, Rood):
>Groen
Je mag doorrijden.

Enum.Parse crasht als de gebruiker iets typt dat niet in je enum staat, ook groen met een kleine letter. Dat mag hier.

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.

Enum seizoenen (Essential)

Maak een enum met de seizoenen van het jaar, en een extra waarde Onbekend. Vraag de gebruiker een maandnummer. Bepaal met een switch in welk seizoen die maand (grotendeels) ligt, en bewaar dat in een variabele van je enum. Toon daarna met een if op die variabele of het een koud seizoen (winter en herfst) of een warm seizoen (lente en zomer) is. Voor een maandnummer dat niet bestaat, toon je dat ook.

Geef een maandnummer (1 tot en met 12):
>11
Maand 11 valt in de Herfst. Dat is een koud seizoen!
Geef een maandnummer (1 tot en met 12):
>13
Maand 13 bestaat 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.

Deel 2. Toon onder die zin ook welk seizoen er daarna komt. Gebruik daarvoor huidigSeizoen + 1. Test met maand 2, maand 11 en maand 13. Wat zie je, en hoe los je het op?

Geef een maandnummer (1 tot en met 12):
>11
Maand 11 valt in de Herfst. Dat is een koud seizoen!
Daarna komt: Winter

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.

Enum bij BMI

Maak een enum met de vijf gewichtscategorieën uit BMI met if (bv. Ondergewicht, NormaalGewicht, …). Pas je oefening BMI met if daarna aan: de if-keten toont zelf niets meer, maar bewaart enkel de juiste categorie in een variabele van je enum. Daaronder toont een switch op die variabele de tekst in de juiste kleur. De uitvoer blijft dezelfde als bij BMI met if.

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.

Schaakstuk

Maak een enum Schaakstuk met de zes stukken: Pion, Toren, Paard, Loper, Koningin en Koning. Vraag de gebruiker twee stukken en zet ze om naar je enum. Gebruik de variant van Enum.Parse die hoofdletters negeert, zodat toren ook werkt.

Bepaal voor elk stuk met een switch hoe het beweegt, en bewaar die beschrijving in een string:

Stuk Beweegt
Pion één vakje rechtdoor, of twee bij de eerste zet
Toren horizontaal of verticaal
Paard in een L-vorm
Loper enkel schuin
Koningin in alle richtingen
Koning één vakje in elke richting

Toon pas daarna het resultaat. Zijn beide stukken hetzelfde, dan toon je één zin. Anders toon je voor elk stuk een lijn.

Welk stuk is stuk 1?
>Toren
Welk stuk is stuk 2?
>koningin
Stuk 1 (Toren) beweegt horizontaal of verticaal.
Stuk 2 (Koningin) beweegt in alle richtingen.
Welk stuk is stuk 1?
>Loper
Welk stuk is stuk 2?
>loper
Beide stukken zijn een Loper. Ze bewegen enkel schuin.

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.

Oscars: The Academy kiest (Final Essentials)

Tijd om al je kennis samen te brengen voor het grootste filmevenement van het jaar! Schrijf een programma dat bepaalt of een film in aanmerking komt voor een Oscar. Deze oefening bundelt enum, switch, if, Random en invoer.

De regels:

  1. Maak een enum Genre met de genres Drama, ScienceFiction, Horror en Comedy.
  2. Vraag de gebruiker een genre en zet het met Enum.Parse om naar je enum. Hoofdletters mogen geen verschil maken.
  3. Vraag de gebruiker hoeveel sterren de regisseur heeft (1 tot en met 5). Typt hij een getal buiten dat bereik, dan toon je “Ongeldige rating. De regisseur krijgt 1 ster.” en reken je verder met 1.
  4. Genereer een willekeurige publieksscore van 0 tot en met 100.

De berekening:

De totaalscore van de film bereken je zo:

  • Start met de publieksscore.
  • Tel er het aantal sterren maal 10 bij.
  • Pas de score aan volgens het genre, met een switch:
    • Drama: +20 punten (de Academy is dol op tranentrekkers).
    • ScienceFiction: +5 punten.
    • Horror: -20 punten.
    • Comedy: -10 punten (grappige films winnen zelden).
  • Heeft de regisseur 5 sterren, dan krijgt de film bovenop alle andere punten nog eens 20 punten prestigebonus. Gebruik hiervoor een if.

De uitslag:

  • 150 of meer: “BEST PICTURE WINNAAR!”
  • van 120 tot 150, 150 niet inbegrepen: “Genomineerd voor Best Picture”
  • minder dan 120: “Helaas, volgende keer beter”

Toon de berekening lijn per lijn, zoals in het voorbeeld. Een genre dat punten oplevert, krijgt een + voor het getal.

Selecteer genre (Drama, ScienceFiction, Horror, Comedy):
>Horror
Geef rating regisseur (1-5):
>5
Publieksscore (random): 84

Berekening:
Start: 84
Regisseur bonus: 5 * 10 = +50
Genre (Horror): -20
Prestige bonus (5 sterren): +20
Totaal: 134

Resultaat: Genomineerd voor Best Picture

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.

Waarom Enum.Parse en geen menu met nummers? Met (Genre)int.Parse(...) wordt 7 probleemloos een Genre, eentje zonder naam. Geen enkele case past, dus komt er Genre (7): 0 op het scherm. Een cast controleert niets. Enum.Parse crasht tenminste op een naam die niet bestaat, zodat je de fout ziet. Om dezelfde reden controleer je de sterren zelf: 9 sterren zou anders +90 opleveren.

Schaak-Elo met if en Random (PRO)

Deze oefening bouwt verder op de PRO-oefening Schaak-ELO uit hoofdstuk 4.

In plaats van de 3 scenario’s (winst, verlies, gelijkspel) vraag je nu wie van beide spelers gewonnen heeft: A, B of D (van draw, gelijkspel). Toon enkel de nieuwe ratings voor die uitslag. Typt de gebruiker iets anders, dan toon je “Onbekende uitslag. Ik reken het als een gelijkspel.” en reken je verder met een gelijkspel.

Geeft de gebruiker een negatieve rating in voor een van beide spelers, dan:

  1. vervang je die rating door een random rating van 500 tot en met 3000;
  2. toon je de foutboodschap met de nieuwe rating erin: “Negatieve rating mag niet. Ik genereer een random rating: [rating]”;
  3. rekent de rest van het programma met die nieuwe rating.
Rating van speler A?
>1000
Rating van speler B?
>1100
Wie heeft er gewonnen? A, B of D (draw)
>A
Nieuwe rating van A: 1006
Nieuwe rating van B: 1094

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.