- Deze week komen de rest van het hoofdstuk aan bod: strings als arrays,
SplitenJoin, arrays in methoden, en 2D-arrays. - Let op Vanaf nu werk je met methoden. Bepaal telkens zelf welke methoden je nodig hebt, met welke parameters en welk returntype. De huisregel van hoofdstuk 7 blijft gelden:
ReadLineenWriteLineenkel in methoden dieToon...ofVraag...heten. - Een array die je aan een methode meegeeft, is geen kopie: de methode werkt op het origineel. Zie Methoden en arrays.
- In de voorbeelduitvoer begint gebruikersinvoer met
>.
Snelle invoer (Essential)
Getallen één voor één intypen is traag. Met Split gaat het in één lijn: zie Split en Join.
Deel 1. Schrijf een methode static int[] VraagGetallen(string vraag). Ze toont de vraag, leest één lijn in zoals 4 5 8 7 5 2, splitst die op de spaties en geeft een int[] terug, precies zo lang als het aantal getallen dat de gebruiker typte. Toon in Main hoeveel getallen er waren en wat hun som is.
Geef je getallen, gescheiden door een spatie:
>4 5 8 7 5 2
Je gaf 6 getallen in. Hun som is 31.
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 getallen daarna op één lijn, gescheiden door een komma en een spatie. Gebruik string.Join.
Je getallen: 4, 5, 8, 7, 5, 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 3. Vraag een zin en toon ze woord per woord omgedraaid: Ik ben Tim wordt Tim ben Ik.
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.
Bob
Kan jij “Bob” programmeren, een tiener die niet veel zegt?
Bob is a lackadaisical teenager. In conversation, his responses are very limited. Bob answers ‘Sure.’ if you ask him a question. He answers ‘Whoa, chill out!’ if you yell at him. He answers ‘Calm down, I know what I’m doing!’ if you yell a question at him. He says ‘Fine. Be that way!’ if you address him without actually saying anything. He answers ‘Whatever.’ to anything else.
Wat betekent dat voor je programma?
- Een vraag eindigt op een
?(spaties achteraan tellen niet mee). - Roepen is: er staat minstens één hoofdletter in, en geen enkele kleine letter.
WATCH OUT!is roepen,1, 2, 3niet. - Niets zeggen is: de zin bevat enkel spaties, of helemaal niets.
Zet de vijf antwoorden van Bob in een string[]. Laat een methode beslissen welk antwoord het wordt, door de index van dat antwoord terug te geven.
Zeg iets tegen Bob:
>WATCH OUT!
Whoa, chill out!
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.
Hamming distance (Essential)
De hamming distance tussen twee reeksen is het aantal plaatsen waar ze verschillen. Bij de volgende twee DNA-strings is dat 7 (aangeduid met ^):
GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^ ^ ^ ^^
Vraag de gebruiker twee DNA-strings: reeksen die enkel uit de letters G, A, C en T bestaan. Toon hun hamming distance. Zijn ze niet even lang, of staat er een andere letter in, toon dan een foutmelding. Schrijf een methode die de afstand berekent en een methode die controleert of een string een geldige DNA-string is.
Geef DNA-string 1:
>GAGCCTACTAACGGGAT
Geef DNA-string 2:
>CATCGTAATGACGGCCT
De hamming distance is 7.
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.
Caesar-encryptie
Bij de Caesar-code vervang je elke letter door de letter die een vast aantal plaatsen verder in het alfabet staat. Bij een verschuiving van 3 wordt A een D, B een E, en Z een C: na de Z begin je opnieuw bij A.

Nummer je de letters van 0 (A) tot 25 (Z), dan is dat nieuweIndex = (oudeIndex + sleutel) % 26. Ontcijferen gaat met (oudeIndex - sleutel + 26) % 26. Die + 26 is nodig, want % op een negatief getal blijft in C# negatief.
Vraag een tekst en een sleutel (1 tot en met 25). Versleutel de tekst, en ontcijfer het resultaat daarna weer. Hoofdletters blijven hoofdletters, kleine letters blijven kleine letters, en al de rest (spaties, leestekens, cijfers) blijft ongemoeid. Werk intern met een char[].
Welke tekst wil je versleutelen?
>Hallo, wereld!
Welke sleutel (1 tot en met 25)?
>3
Versleuteld: Kdoor, zhuhog!
Ontcijferd: Hallo, wereld!
Een char is intern een getal. 'D' - 'A' geeft dus 3: de index van D. En (char)('A' + 3) geeft terug een D.
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.
Array Viewer (Essential)
Een methode die elke array netjes op één lijn toont, heb je de rest van het hoofdstuk nog vaak nodig.
Deel 1. Schrijf een methode ToonArray die een int[] op één lijn toont, met een tab tussen de elementen. Na het laatste element staat er geen tab. De methode moet werken voor arrays van elke lengte, ook een lege. Toon in Main minstens twee arrays, en een lege.
15 6 9
0 1 2 3 4 5 6
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 de parameter params int[] getallen. Nu werkt zowel ToonArray(kort) als ToonArray(15, 6, 9). Zie Een onbepaald aantal parameters met params.
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.
Wegwijzers (Essential)
Een array-variabele bevat geen getallen, maar een wegwijzer naar de getallen. Voer onderstaand programma nog niet uit. Schrijf eerst op papier wat elke lijn met een nummer toont.
static void Verdubbel(int[] getallen)
{
for (int i = 0; i < getallen.Length; i++)
{
getallen[i] *= 2;
}
}
static void Sorteer(int[] getallen)
{
Array.Sort(getallen);
}
static void Vervang(int[] getallen)
{
getallen = new int[] { 7, 7, 7 };
}
static void Main(string[] args)
{
int[] a = { 3, 1, 2 };
int[] b = a;
b[0] = 99;
Console.WriteLine($"1: {a[0]}");
int[] c = { 3, 1, 2 };
int x = c[1];
x = 50;
Console.WriteLine($"2: {c[1]}");
int[] d = { 3, 1, 2 };
Verdubbel(d);
Console.WriteLine($"3: {d[0]}");
int[] e = { 3, 1, 2 };
Sorteer(e);
Console.WriteLine($"4: {e[0]}");
int[] f = { 3, 1, 2 };
Vervang(f);
Console.WriteLine($"5: {f[0]}");
int[] g = { 3, 1, 2 };
int[] kopie = new int[g.Length];
for (int i = 0; i < g.Length; i++)
{
kopie[i] = g[i];
}
kopie[0] = 42;
Console.WriteLine($"6: {g[0]} en {kopie[0]}");
}Voer het programma daarna uit en vergelijk. Klopt een lijn niet, zoek dan eerst zelf 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.
Puzzelen met arrays deel 2 (Essential)
Schrijf voor elk probleem een methode. Let goed op het verschil tussen een methode die een nieuwe array teruggeeft (het origineel blijft ongewijzigd) en een methode die de meegegeven array zelf aanpast (void). Toon in Main telkens het resultaat én het origineel na de aanroep, met je ToonArray uit Array Viewer.
static int[] Omgekeerd(int[] bron)geeft een nieuwe array terug met de elementen in omgekeerde volgorde.
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.
static void KeerOm(int[] getallen)keert de volgorde om in de array zelf.
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.
static void RoteerLinks(int[] getallen)schuift alles één plaats naar links in de array zelf. Het eerste element komt achteraan.
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.
static int[] GeroteerdLinks(int[] bron)doet hetzelfde, maar geeft het resultaat in een nieuwe array terug.
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.
- Overload
GeroteerdLinksmet een tweede parameterx: een nieuwe array waarin allesxplaatsen naar links geschoven is.
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.
- Overload
RoteerLinksmet een tweede parameterx: de array zelf schuiftxplaatsen naar links.
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.
static int[] Uniek(int[] bron)geeft een nieuwe array terug zonder dubbels, precies zo lang als het aantal verschillende 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.
static int[] UniekGesorteerd(int[] gesorteerd)doet hetzelfde voor een array die al gesorteerd is. Omdat gelijke getallen dan naast elkaar staan, hoef je elk element enkel met het vorige te vergelijken.
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.
- Schrijf
Maximum(int[] getallen),AantalKeer(int[] getallen, int waarde)enEersteIndex(int[] getallen, int waarde). Toon daarmee het maximum van een reeks, hoe vaak het voorkomt, en de index van de eerste keer.
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.
- Schrijf
Minimum(int[] getallen)enLaatsteIndex(int[] getallen, int waarde). Toon het minimum, hoe vaak het voorkomt (metAantalKeer), en de index van de laatste keer.
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.
static int AantalVerschillende(int[] getallen)telt hoeveel verschillende getallen er in een array staan. Kan het in één lijn, met een methode die je al hebt?
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.
(PRO) De zeef van Eratosthenes. Schrijf
static bool[] Zeef(int max). Ze geeft eenbool[]terug waarin op indexistaat ofieen priemgetal is.- Zet alle getallen vanaf 2 op “mogelijk priem”.
- Begin bij 2 en streep alle veelvouden van 2 weg (behalve 2 zelf).
- Ga naar het volgende getal dat nog niet weggestreept is (3), en streep zijn veelvouden weg.
- Herhaal tot het einde.
Toon in
Mainde eerste 20 priemgetallen onder 100 000, en hoeveel het er in totaal zijn.
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 void-methode zoals KeerOm geeft niets terug, en toch zie je het resultaat in Main. De methode krijgt een kopie van de wegwijzer, maar die wijst naar dezelfde array. Een methode die een nieuwe array teruggeeft, laat het origineel net met rust. Kies dus bewust: moet het origineel veranderen, of wil je een nieuw resultaat?
Parkeergarage (Essential)
Schrijf een programma dat parkeerkosten berekent. Het vraagt eerst hoeveel auto’s er zijn, en daarna per auto hoe lang hij geparkeerd stond (in uren).

De tarieven. Tot en met 3 uur betaal je 2 euro. Sta je er langer, dan komt er 0,50 euro bij per begonnen uur na die 3 uur. Een dag kost nooit meer dan 10 euro. Een auto staat er nooit langer dan 24 uur.
Toon op het einde een tabel met per auto de duur en de kost, en daaronder de totalen. Schrijf minstens een methode die de kost van één parkeerbeurt berekent.
Hoeveel auto's?
>3
Parkeertijd van auto 1 (uren):
>1,5
Parkeertijd van auto 2 (uren):
>4
Parkeertijd van auto 3 (uren):
>24
Auto Duur Kost
1 1,5 2,00
2 4,0 2,50
3 24,0 10,00
Totaal 29,5 14,50
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.
2D Array Viewer (Essential)
Nu hetzelfde voor een 2D-array, en daarna reken je ermee.
Deel 1. Schrijf static void ToonMatrix(int[,] matrix): ze toont een 2D-array rij per rij, met een tab tussen de getallen.
int[,] matrix = { { 2, 4 }, { 3, 5 } };
ToonMatrix(matrix);2 4
3 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.
Deel 2. De determinant van een 2x2-matrix [[a, b], [c, d]] is a * d - b * c. Schrijf static int BerekenDeterminant(int[,] matrix) voor een 2x2-matrix. Voor de matrix hierboven is het resultaat -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 3 (PRO). Laat BerekenDeterminant ook werken voor een 3x3-matrix [[a, b, c], [d, e, f], [g, h, i]]: dan is de determinant a(ei - fh) - b(di - fg) + c(dh - eg). Test met { { 1, 2, 3 }, { 0, 4, 5 }, { 1, 0, 6 } }: dat geeft 22.
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.
Voetbalcoach (Essential)
Een voetbalcoach wil bijhouden hoeveel positieve en negatieve acties elk van zijn 12 spelers (rugnummers 1 tot en met 12) maakt. Gebruik een int[,] met 12 rijen en 2 kolommen: kolom 0 voor de positieve acties, kolom 1 voor de negatieve. De speler met rugnummer 2 staat op rij 1 (het rugnummer min 1).
De coach typt telkens een rugnummer, het soort actie (P of N) en hoe vaak die actie voorkwam. Het aantal komt bij wat er al stond. Typt de coach 99 als rugnummer, dan stopt de invoer en toont het programma voor elke speler zijn positieve en negatieve acties en het verschil. Daaronder toont het de meest en de minst performante speler: die met het grootste en die met het kleinste verschil. Eindigen meerdere spelers gelijk, toon ze dan allemaal.
Rugnummer (1 tot en met 12, 99 om te stoppen):
>2
Positieve of negatieve actie (P/N)?
>P
Hoeveel keer?
>6
Rugnummer (1 tot en met 12, 99 om te stoppen):
>99
Rugnummer Positief Negatief Verschil
1 5 2 3
2 6 7 -1
3 0 0 0
...
7 3 0 3
...
Meest performant: 1 7 (verschil 3)
Minst performant: 2 (verschil -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.
Levelkaart (Essential)
In de inleiding van het hoofdstuk stond een level van een spel als een raster van tekens. Nu maak je het echt:
string[] level =
{
"##########",
"#........#",
"#.####.#.#",
"#....#...#",
"#.##...#@#",
"##########"
};# is een muur, . een vrij vakje, en @ de speler.
Deel 1. Schrijf static char[,] MaakKaart(string[] rijen). Ze zet het level om naar een char[,] met een rij per string en een kolom per teken. Schrijf ook static void ToonKaart(char[,] kaart), en toon de kaart.
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. Zoek de positie van de speler, en tel het aantal vrije vakjes.
De speler staat op rij 4, kolom 8.
Er zijn 22 vrije vakjes.
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. Vraag een reeks commando’s zoals NNNWWWZ: N is een stap naar boven, Z naar beneden, O naar rechts en W naar links. Voer ze één voor één uit. Staat er een muur waar de speler naartoe wil, dan blijft hij staan en meld je dat. Toon op het einde de kaart.
Welke commando's (N, O, Z, W)?
>NNNWWWZ
Commando Z: daar staat een muur.
##########
#....@...#
#.####.#.#
#....#...#
#.##...#.#
##########
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.
Fraude Detectie (Final Essentials)
Tijdens de examens vermoedt de leerkracht dat er gespiekt wordt. Schrijf een programma dat opspoort welke studenten opvallend vaak dezelfde fouten maken.
- Vraag de antwoordsleutel van het examen: een reeks letters, zoals
ABCDE. - Vraag hoeveel studenten er zijn, en daarna de antwoorden van elke student. Bewaar ze in een
string[]. Je mag ervan uitgaan dat elke student evenveel antwoorden typt als de sleutel lang is. - Toon na elke student zijn score (1 punt per juist antwoord).
- Vergelijk daarna elk paar studenten. Geven ze op dezelfde vraag hetzelfde foute antwoord, dan is dat een “verdachte gelijkenis”.
- Heeft een paar 2 of meer verdachte gelijkenissen, toon dan een
FRAUDE ALARM!voor dat paar. Is er geen enkel verdacht paar, meld dat dan.
Schrijf minstens een methode die de score van één student berekent, en een methode die de verdachte gelijkenissen tussen twee studenten telt.
Geef de correcte examensleutel:
>ABCDE
Hoeveel studenten?
>3
Geef de antwoorden van student 1:
>AABDD
Score student 1: 2/5
Geef de antwoorden van student 2:
>AACDD
Score student 2: 3/5
Geef de antwoorden van student 3:
>ABCDD
Score student 3: 4/5
FRAUDE ALARM! Student 1 en student 2: 2 verdachte gelijkenissen.
Met enkel student 1 en student 3 verschijnt er Geen fraude gedetecteerd.
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.
Zwerkbaltraining met methoden
Tijdens de zwerkbaltraining houdt de trainer bij hoeveel punten zijn 3 jagers maken. Deze extra oefening doet hetzelfde als Havenmanifest van week 1, maar nu met methoden:
static void VraagJagers(string[] namen, int[] scores)vraagt voor elke jager zijn naam en score, en vult de twee arrays.static void ToonOverzicht(string[] namen, int[] scores)toont alle jagers met hun score.static int BerekenTotaal(int[] scores)geeft de som van de scores terug.static int ZoekIndex(string[] namen, string gezocht)geeft de index van een naam terug, of -1 als die er niet in staat. Schrijf de zoeklus zelf.
Geef de naam van jager 1:
>Ginny
Geef de score van jager 1:
>40
Geef de naam van jager 2:
>Katie
Geef de score van jager 2:
>30
Geef de naam van jager 3:
>Demelza
Geef de score van jager 3:
>50
--- Wedstrijdstatistieken ---
Jager Ginny: 40 punten
Jager Katie: 30 punten
Jager Demelza: 50 punten
Totaal punten: 120
Gemiddelde score: 40
Welke jager zoek je?
>Katie
Jager Katie scoorde 30 punten.
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.