- Ook dit hoofdstuk heeft meer oefeningen dan je kan afwerken. Kies zelf, en focus op het leren werken met methoden. Tip van een lector: als een boek veel oefeningen over één onderwerp heeft, is dat onderwerp waarschijnlijk belangrijk.
- Let op De naam van een methode zegt wat ze doet.
ReadLineenWriteLinehoren enkel in een methode dieToon...ofVraag...heet. Alle andere methoden krijgen hun gegevens binnen via parameters (in plaats vanReadLine) en geven hun resultaat terug metreturn(in plaats vanWriteLine). - Schrijf elke methode
static, inclass Program, naastMainen nooit erin: een methode in een methode kost 3 punten. - Test elke methode in
Maindoor ze op te roepen. Een methode die nooit opgeroepen wordt, doet niets. - In de voorbeelduitvoer begint gebruikersinvoer met
>.
Stel jezelf voor
Je eerste eigen methode: een voorstelling op het scherm, in twee delen.
Deel 1. Schrijf een methode ToonIntro die jezelf voorstelt op het scherm: “Ik ben Tim Dams, ik ben 18 jaar oud en woon in de Lambrisseringsstraat 666.” Die gegevens mogen gewoon in de methode staan. In Main roep je ze zo op:
ToonIntro();Deze methode toont enkel iets op het scherm en geeft niets terug. Haar returntype is dus void.
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. Pas ToonIntro aan zodat je de naam, de leeftijd en het adres als parameters meegeeft:
ToonIntro("Jos", 34, "Trammezantlei 21");Ik ben Jos, ik ben 34 jaar oud en woon in de Trammezantlei 21.
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 methode van deel 1 doet altijd hetzelfde. Die van deel 2 kan je voor iedereen gebruiken: wat verschilt, geef je mee als parameter.
- Binnen de methode gedragen
naam,leeftijdenadreszich als gewone variabelen. Ze krijgen hun waarde bij de aanroep, in de volgorde van de signatuur.
Opwarmers (Essential)
Schrijf onderstaande methoden en test ze in Main: roep elke methode op met een paar waarden en toon het resultaat. Enkel ToonOnevenNummers toont zelf iets, want enkel zij heet Toon....
static int Kwadraat(int getal)geeft het kwadraat vangetalterug.static double BerekenStraal(double diameter)geeft de straal terug van een cirkel met die diameter.static double BerekenOmtrek(double diameter)geeft de omtrek terug van een cirkel met die diameter.static double BerekenOppervlakte(double diameter)geeft de oppervlakte terug van een cirkel met die diameter.static int Grootste(int getal1, int getal2)geeft het grootste van de twee getallen terug.static bool IsEven(int getal)geefttrueterug alsgetaleven is, en andersfalse.static void ToonOnevenNummers(int tot)toont alle oneven getallen van 1 tot en mettot.
Voor de omtrek (2πr) en de oppervlakte (πr²) heb je de straal nodig. Die berekenen doe je al in BerekenStraal: laat de twee andere methoden die gewoon oproepen. Zie Methoden combineren.
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.
Grootste methode
Een methode die het grootste van drie getallen teruggeeft, in twee delen.
Deel 1. Schrijf een methode static int GrootsteVanDrie(int getal1, int getal2, int getal3) die het grootste van de drie getallen teruggeeft. Test ook met gelijke getallen, zoals 5, 9 en 9.
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. Schrijf GrootsteVanDrie opnieuw, maar nu in één lijn, met de methode Grootste voor twee getallen uit de Opwarmers.
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.
Rekenmachine (Essential)
Een rekenmachine in drie delen: eerst de rekenmethoden, dan een menu, dan een geheugen.
Deel 1. Schrijf de methoden TelOp, TrekAf, Vermenigvuldig en Deel. Ze krijgen elk twee doubles mee en geven het resultaat van de bewerking terug. Test ze in Main.
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 er een rekenmachine van. Een menu vraagt welke bewerking de gebruiker wil (+, -, * of /), daarna twee getallen, en toont het resultaat met je methoden. Dat herhaalt zich tot de gebruiker q kiest. Delen door nul kan niet: toon dan een melding.
Kies een bewerking (+, -, *, / of q om te stoppen):
>/
Eerste getal:
>7
Tweede getal:
>2
7 / 2 = 3,5
Kies een bewerking (+, -, *, / of q om te stoppen):
>q
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. Een echte zakrekenmachine heeft een geheugen. Het geheugen start op 0. De gebruiker kiest telkens een bewerking en typt één getal, en de bewerking gebeurt op het geheugen. Met c zet je het geheugen terug op 0.
Geheugen: 0
Kies een bewerking (+, -, *, /, c om te wissen of q om te stoppen):
>+
Getal:
>5
Geheugen: 5
Kies een bewerking (+, -, *, /, c om te wissen of q om te stoppen):
>*
Getal:
>3
Geheugen: 15
Kies een bewerking (+, -, *, /, c om te wissen of q om te stoppen):
>q
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.
Methodenpuzzel
Deze lijnen horen bij een programma met een methode die een gemiddelde berekent, en een Main die ze gebruikt. Ze zijn door elkaar geraakt, en de accolades zijn weg. Er zijn ook twee lijnen bij geslopen die er niet in thuishoren.
double resultaat = BerekenGemiddelde(som, aantal);
static void Main(string[] args)
return gemiddelde;
int aantal = 4;
som = int.Parse(Console.ReadLine());
static double BerekenGemiddelde(int som, int aantal)
Console.WriteLine($"Het gemiddelde is {resultaat}");
double gemiddelde = (double)som / aantal;
static void BerekenGemiddelde(int som, int aantal)
int som = 17;Zet de lijnen in de juiste volgorde, met accolades erbij, zodat het programma Het gemiddelde is 4,25 toont. Welke twee lijnen zijn de indringers, en waarom? Doe het eerst op papier en test daarna.
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 onderstaand programma nog niet uit. Schrijf eerst op papier exact op wat er op het scherm zal verschijnen, lijn per lijn.
static void SchrijfA()
{
Console.Write("A");
}
static void SchrijfB()
{
Console.Write("B");
SchrijfA();
}
static void ZetDubbel(int getal)
{
getal = getal * 2;
Console.WriteLine($"In de methode: {getal}");
}
static int Test(int x)
{
if (x > 5)
{
return 1;
}
Console.WriteLine("Voorbij de if");
return 2;
}
static int Kwadraat(int x)
{
return x * x;
}
static void Main(string[] args)
{
SchrijfB();
SchrijfA();
SchrijfB();
Console.WriteLine();
int getal = 3;
ZetDubbel(getal);
Console.WriteLine($"In Main: {getal}");
Console.WriteLine(Test(8));
Console.WriteLine(Test(2));
Kwadraat(4);
Console.WriteLine(Kwadraat(getal));
}Voer het programma daarna uit en vergelijk. Klopt een lijn niet? Zet een breakpoint op de eerste lijn van Main en stap door het programma met Step Into (F11) in plaats van Step Over. Zo spring je mee in elke methode, en zie je in Locals welke waarde de parameters 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.
Stevens methoden (Essential)
Stagiair Steven plakte een paar methoden in zijn project zonder ze na te kijken. Een A.I. had ze geschreven.
Deel 1. Drie van deze vier stukjes compileren niet. Het vierde compileert wel, maar kost punten op een vaardigheidsproef. Welk is welk? Zoek eerst op papier wat er mis is, en plak ze daarna één voor één in een nieuw project om de foutmeldingen te lezen.
a.
static string Beoordeel(int punten)
{
if (punten >= 10)
{
return "geslaagd";
}
}b.
static void ToonBtw(double bedrag)
{
Console.WriteLine($"De btw is {bedrag * 0.21} euro.");
}
static void Main(string[] args)
{
double btw = ToonBtw(100);
}c.
int Verdubbel(int getal)
{
return getal * 2;
}
static void Main(string[] args)
{
Console.WriteLine(Verdubbel(21));
}d.
static void Main(string[] args)
{
ToonWelkom();
static void ToonWelkom()
{
Console.WriteLine("Welkom!");
}
}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. Onderstaand programma compileert en draait, maar het doet niet wat Steven wil. Kwadraat moet het kwadraat van 5 berekenen, en de klant moet 10% korting krijgen op 80 euro.
static int Kwadraat(int getal)
{
getal = int.Parse(Console.ReadLine());
return getal * getal;
}
static double BerekenKorting(double bedrag)
{
Console.WriteLine($"Je krijgt {bedrag * 0.1} euro korting.");
return 0;
}
static void Main(string[] args)
{
Console.WriteLine($"5 in het kwadraat is {Kwadraat(5)}");
double bedrag = 80;
double teBetalen = bedrag - BerekenKorting(bedrag);
Console.WriteLine($"Je betaalt {teBetalen} euro.");
}Voer het uit. Wat gebeurt er, en wat moet Steven aan de twee methoden veranderen?
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.
- Tonen en teruggeven zijn twee verschillende dingen. Wat op het scherm staat, kan de rest van je programma niet gebruiken. Wat je teruggeeft wel.
- Wat een methode nodig heeft, komt binnen als parameter. Een
ReadLinein een methode die nietVraag...heet, is bijna altijd fout. - Lees de foutmelding.
not all code paths return a valueenCannot implicitly convert type 'void'ga je nog vaak zien.
Vraagmethoden (Essential)
In Herbruikbare gebruikersinvoer vragen zag je VraagInt. Methoden die Vraag... heten, mogen WriteLine en ReadLine gebruiken: dat is net hun taak.
Deel 1. Schrijf static int VraagInt(string vraag) en static string VraagTekst(string vraag). Ze tonen de vraag, lezen het antwoord in en geven het terug. Test ze in Main.
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. Schrijf een methode VraagIntTussen(string vraag, int min, int max) die een int teruggeeft. Ze blijft vragen tot de gebruiker een getal van min tot en met max typt, en geeft dat getal terug. Gebruik er VraagInt in.
Hoe oud ben je? (0 tot en met 120)
>150
Dat getal ligt niet tussen 0 en 120.
Hoe oud ben je? (0 tot en met 120)
>30
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.
Paswoord generator
Schrijf een methode static string GenereerPaswoord(int lengte) die een willekeurig paswoord van de gevraagde lengte teruggeeft. Het paswoord bestaat uit kleine letters, hoofdletters en cijfers door elkaar. Test ze in Main met een paar lengtes.
Een char is intern een getal. (char)rng.Next('a', 'z' + 1) geeft dus een willekeurige kleine letter.
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.
Netflix (Essential)
Je bent aangenomen als backend developer bij Netflix. Je eerste taak: enkele hulpmethoden schrijven voor een console-applicatie. Maak een programma met onderstaande methoden, en test ze in Main met invoer van de gebruiker.
ToonWelkomstBericht
- Parameter: de naam van de gebruiker (
string). - Toont
Welkom terug, [naam]! Tijd om te bingen. - Returntype:
void.
BerekenKijktijd
- Parameters: het aantal afleveringen (
int) en de minuten per aflevering (int). - Geeft het totaal aantal minuten terug (
int).
MagKijken
- Parameters: de leeftijd van de gebruiker (
int) en de minimumleeftijd van de serie (int). - Geeft
trueterug als de gebruiker oud genoeg is, andersfalse.
GenereerTitel
- Parameters: de naam van de serie (
string), het seizoen (int) en de aflevering (int). - Geeft een
stringterug in het formaat[SerieNaam] - S[seizoen]E[aflevering].
Het scenario in Main:
- Vraag de naam van de gebruiker en roep
ToonWelkomstBerichtop. - Vraag de leeftijd van de gebruiker.
- Vraag de naam van de serie en haar minimumleeftijd.
- Gebruik
MagKijken. Is de gebruiker niet oud genoeg, toon danHelaas, je bent te jong voor deze serie.en stop het programma. Anders toon jeVeel kijkplezier! - Vraag hoeveel afleveringen de gebruiker wil kijken, en hoeveel minuten een aflevering duurt.
- Gebruik
BerekenKijktijden toonTotale kijktijd: X minuten. - Vraag het seizoen en de aflevering.
- Gebruik
GenereerTitelen toonJe start met: [titel].
Voer je naam in:
>Jan
Welkom terug, Jan! Tijd om te bingen.
Voer je leeftijd in:
>18
Naam van de serie:
>Squid Game
Minimumleeftijd van de serie:
>16
Veel kijkplezier!
Hoeveel afleveringen wil je kijken?
>3
Hoeveel minuten duurt één aflevering?
>45
Totale kijktijd: 135 minuten
Seizoen:
>1
Aflevering:
>1
Je start met: Squid Game - S1E1
Ander voorbeeld:
Voer je naam in:
>Emma
Welkom terug, Emma! Tijd om te bingen.
Voer je leeftijd in:
>13
Naam van de serie:
>Squid Game
Minimumleeftijd van de serie:
>16
Helaas, je bent te jong voor deze serie.
Een programma stoppen midden in Main kan met return;. Hoe dat werkt in een void-methode, lees je in return.
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. Main telt veel paren van WriteLine en ReadLine. Herschrijf Main met je VraagTekst en VraagInt uit Vraagmethoden. De uitvoer blijft dezelfde.
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.
- Enkel
ToonWelkomstBerichttoont iets. De drie andere geven hun resultaat terug, enMainbeslist wat ermee gebeurt. return leeftijdGebruiker >= minimumLeeftijdSerie;geeft deboolmeteen terug. Eenifmetreturn true;enreturn false;doet hetzelfde, in vijf lijnen meer.return;inMainstopt het programma. Na dieifhoef je dus geenelsemeer te schrijven: wie te jong is, komt er nooit.
Armstrong (PRO)
Een getal is een Armstrong-nummer als het de som is van zijn eigen cijfers, elk tot de macht verheven van het aantal cijfers. 153 is er een, want 153 = 1³ + 5³ + 3³ = 1 + 125 + 27. In Armstrong nummer van hoofdstuk 6 schreef je al de code die dat test.
Knip die code nu op in methoden:
static int TelCijfers(int getal)geeft het aantal cijfers vangetalterug.static bool IsArmstrong(int getal)geefttrueterug alsgetaleen Armstrong-nummer is. Ze gebruiktTelCijfers.static void ToonArmstrongNummers(int tot)toont alle Armstrong-nummers van 1 tot en mettot. Ze gebruiktIsArmstrong.
Armstrong-nummers tot en met 10000:
1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474
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.
A.I. assisted oefeningen generator
Dit is geen oefening, maar een manier om zelf extra oefeningen te maken.
Gebruik volgende prompt in ChatGPT, Copilot Chat of Claude om een oefening over methoden te laten maken. Vervang XXXX door een onderwerp dat je interesseert (bijvoorbeeld “Counter-Strike”, “F1 racing” of “je favoriete voetbalclub”).
Je bent een lector van een hogeschool die studenten helpt met programmeren. Je bent heel goed in interessante C#-opgaves bedenken die studenten motiveren om te blijven programmeren.
Verzin een C#-oefening voor mij die me doet oefenen op methoden. Een methode geeft maximum 1 waarde terug. Gebruik dus geen tuples.
Volgende zaken mogen in de oefening voorkomen: variabelen, if else, switch, enum, expressies, de Math-bibliotheek en loops. De nadruk ligt op methoden: parameters, returntypes, void, en methoden die elkaar oproepen.
Volgende zaken mogen niet voorkomen: arrays, lists, LINQ, ref, out, TryParse, try en catch, en objectgeoriënteerd programmeren. Alle methoden zijn static en staan naast Main in class Program. Er zijn geen variabelen buiten Main.
Enkel methoden die Toon... of Vraag... heten, mogen Console.WriteLine of Console.ReadLine gebruiken.
Laat de oefening gaan over XXXX.
Toon geen voorbeeldcode of oplossing.
Toon wel voorbeelduitvoer.
Leg expliciet uit welke methoden ik moet schrijven en hoe ze werken.
Stel ook 3 mogelijke uitbreidingen voor.
Een A.I. maakt soms toch een oefening met iets wat je nog niet kent, ondanks de prompt. Vraagt de oefening bijvoorbeeld arrays, vereenvoudig ze dan zelf, of vraag de A.I. om dat stuk eruit te halen of uit te leggen.