- Deze week volgt het boek tot en met Zelf zoeken en tellen in een array: arrays aanmaken en overlopen,
args, arrays in het geheugen,System.Array, zoeken en synchrone arrays. Strings, arrays in methoden en 2D-arrays komen in week 2. - Een aantal oefeningen is geïnspireerd op oefeningen van Exercism.
- Let op LINQ-methoden zoals
.Sum()of.Max()op een array kosten punten (zie het boeteblad).breakmag enkel in eenswitchen bij zoek-en-stop. - Moet je veel getallen intypen om te testen? Vul je array dan tijdens het testen tijdelijk met
Random. - In de voorbeelduitvoer begint gebruikersinvoer met
>.
Opwarmers
Negen korte oefeningen om arrays aan te maken, te vullen en te overlopen.
- Vul een array van ints met alle getallen van 1 tot en met 100. Toon de array.
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.
- Vul een array van ints met alle even getallen tot en met 100. Toon de array.
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.
- Vraag de gebruiker 3 keer een getal, stop die in een array, en toon daarna de array.
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.
- Maak een array met de namen van je 4 beste vrienden, van “beste vriend” tot “minst beste vriend”. Zet de labels (“Beste vriend”, “Tweede beste vriend”, “Derde beste vriend”, “Minst beste vriend”) in een tweede array, en toon beide met één lus.
Beste vriend: Vincent
Tweede beste vriend: Olga
Derde beste vriend: Bill
Minst beste vriend: Gotoman
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.
- Maak een array van 20 booleans waarin alle even indexen
truezijn en alle onevenfalse. Toon de array.
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.
- Maak een array van 20 willekeurige booleans. Toon de array in een eerste lus, en tel in een tweede lus hoeveel keer
trueen hoeveel keerfalseerin 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.
- Vul een array met 10 willekeurige doubles van 0 tot 10. Toon het gemiddelde.
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.
- Maak een
enum Schooltypemet de waardenASO,BSO,KSOenTSO. Vul een array van 20Schooltype-waarden met willekeurige schooltypes. Toon de array, en toon hoe vaak elk schooltype voorkomt.
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.
- Wat staat er in een array die je net aangemaakt hebt? Voorspel eerst op papier wat onderstaande code toont, en voer ze pas daarna uit.
int[] getallen = new int[3];
bool[] vlaggen = new bool[3];
string[] namen = new string[3];
Console.WriteLine($"[{getallen[0]}] [{vlaggen[1]}] [{namen[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.
Vraag Array (Essential)
Maak een array met 6 vragen (verzin ze zelf) waarop de gebruiker met een getal antwoordt, en een tweede array die 6 ints kan bevatten. Toon de vragen één voor één, en bewaar elk antwoord in de tweede array. Na de 6 vragen toon je alle vragen opnieuw, met achter elke vraag het antwoord van de gebruiker.
Hoe oud ben je?
>37
Wat is je postcode?
>2018
Hoeveel broers heb je?
>1
Hoeveel zussen heb je?
>2
In welk jaar ben je geboren?
>1981
Hoeveel is 3 + 5?
>8
Je antwoorden:
Hoe oud ben je? 37
Wat is je postcode? 2018
Hoeveel broers heb je? 1
Hoeveel zussen heb je? 2
In welk jaar ben je geboren? 1981
Hoeveel is 3 + 5? 8
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 Zoeker (Essential)
Vraag de gebruiker 10 gehele getallen en bewaar ze in een array. Vraag daarna welk getal verwijderd moet worden, en zoek het in de array. Vind je het, verwijder het dan: alle getallen erachter schuiven één plaats naar links, en de laatste plaats krijgt de waarde -1. Komt het getal meer dan één keer voor, dan verwijder je enkel het eerste. Toon op het einde de array.
Voer 10 gehele getallen in:
>2
>3
>4
>8
>9
>10
>12
>15
>16
>8
Welk getal moet verwijderd worden?
>8
Resultaat is: 2 3 4 9 10 12 15 16 8 -1
Staat het getal niet in de array, dan blijft de array zoals ze was.
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. Dit zijn de lijnen van de opschuiflus, door elkaar, met één lijn te veel:
getallen[getallen.Length - 1] = -1;
for (int i = index; i < getallen.Length; i++)
getallen[i] = getallen[i + 1];
for (int i = index; i < getallen.Length - 1; i++)Er staan twee for-lussen. Welke hoort in het programma, en wat gebeurt er met de andere? Leg het uit zonder je programma uit te voeren, en controleer 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.
LeveringsBedrijf (Essential)
Maak een programma voor een koeriersbedrijf. Maak een array met de postcodes van 10 gemeenten waar het bedrijf naar levert (zelf te kiezen, elke postcode één keer). Maak een tweede array met de prijs per kg voor elke gemeente: het eerste element is de prijs per kg voor de eerste postcode, enzovoort.
Vraag de gebruiker het gewicht van het pakket en een postcode. Zoek de prijs per kg voor die gemeente en toon de totale prijs. Levert het bedrijf niet aan die postcode, toon dan een foutmelding.
Geef het gewicht van het pakket (kg):
>45
Naar welke postcode wil je het pakket versturen?
>2020
Dit zal 9630 euro kosten.
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.
Podium (Essential)
Acht renners reden een tijdrit. Hun namen en tijden (in seconden) staan in twee synchrone arrays:
string[] renners = { "Lotte", "Arne", "Sofie", "Bram", "Nora", "Jens", "Lien", "Wout" };
int[] tijden = { 3725, 3610, 3698, 3655, 3802, 3590, 3700, 3644 };Toon het podium: de drie snelste renners met hun tijd. Gebruik daarvoor Array.Copy, Array.Sort en Array.IndexOf.
1. Jens in 3590 seconden
2. Arne in 3610 seconden
3. Wout in 3644 seconden
Waarom mag je de array tijden zelf niet sorteren?
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 ook de rode lantaarn: de traagste renner. Gebruik Array.Reverse.
Rode lantaarn: Nora in 3802 seconden
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.IndexOf geeft het eerste voorkomen. Rijden twee renners exact dezelfde tijd, dan vindt IndexOf twee keer dezelfde renner. Zie System.Array voor Sort, Reverse, Copy en IndexOf.
Stevens warmste stad (Essential)
Stagiair Steven moest een programma schrijven dat de gemiddelde januaritemperatuur van vijf steden toont, en daarna de warmste stad. Een A.I. leverde dit:
string[] steden = { "Oslo", "Helsinki", "Moskou", "Reykjavik", "Stockholm" };
int[] temperaturen = { -4, -6, -9, -1, -3 };
Console.WriteLine("Gemiddelde temperatuur in januari:");
for (int i = 0; i <= steden.Length; i++)
{
Console.WriteLine($"{steden[i]}: {temperaturen[i]} graden");
}
int warmste = 0;
for (int i = 0; i < temperaturen.Length; i++)
{
if (temperaturen[i] > warmste)
{
warmste = temperaturen[i];
}
}
Array.Sort(temperaturen);
string warmsteStad = steden[temperaturen.Length - 1];
Console.WriteLine($"De warmste stad is {warmsteStad} met {warmste} graden.");Deel 1. Het compileert zonder één foutmelding. Voer het uit. Wat gebeurt er, en welke lijn is de schuldige?
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. Nu toont het programma De warmste stad is Stockholm met 0 graden. Het juiste antwoord is Reykjavik, met -1 graden. Er zitten nog twee fouten in. Zoek ze, en herschrijf het stuk dat de warmste stad zoekt.
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.
- Geen van de drie fouten wordt door de compiler gevonden. Twee geven zelfs geen crash, enkel een verkeerd antwoord.
- Test met data waar iets moet gebeuren: hier is dat een lijst waarin het overal vriest. Met positieve temperaturen had Steven de fout met
warmste = 0nooit gezien. - Zie De grootste (of kleinste) zoeken en Twee arrays die synchroon lopen.
Puzzelen met arrays (Essential)
Sommige puzzels zitten op het randje van PRO. U weze gewaarschuwd.
Je mag hier Array.Sort gebruiken, maar Array.Reverse en Array.BinarySearch niet: het verplaatsen doe je zelf. Lees je “lees 8 getallen in”, bewaar ze dan in volgorde in je array, en begin pas daarna te puzzelen.
- Lees 8 getallen in. Toon ze 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.
- Lees 8 getallen in. Toon ze één plaats naar voor verschoven: eerst het tweede getal, dan het derde, …, dan het laatste, en tenslotte het eerste.
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.
- Lees 8 getallen in. Toon ze drie plaatsen naar achter verschoven: eerst de laatste drie getallen, en daarna de eerste vijf.
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.
- Hetzelfde als 3, maar het aantal plaatsen is een variabele
xdie je vooraf instelt.
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) Lees 12 getallen in. Toon ze in 4 rijen van 3, en sorteer de getallen binnen elke rij. Met de invoer
4 5 8 7 5 2 6 8 7 1 3 2wordt dat:
4 5 8
2 5 7
6 7 8
1 2 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.
- (PRO) Lees 12 getallen in. Toon ze opnieuw in 4 rijen van 3, maar sorteer nu elke kolom van klein naar groot. Met dezelfde invoer wordt dat:
1 3 2
4 5 2
6 5 7
7 8 8
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.
Havenmanifest (Final Essentials)
Je bent de havenmeester en beheert de lading van een schip. Er is plaats voor 3 containers.
Maak een programma dat:
- twee arrays aanmaakt: één voor de containercodes (tekst) en één voor de gewichten (kommagetallen, in ton);
- de gebruiker de gegevens van elke container laat invoeren;
- een manifest toont: alle containers met hun gewicht;
- het totale gewicht en het gemiddelde gewicht berekent en toont;
- de gebruiker een container laat opzoeken op zijn code. Vind je hem, toon dan zijn gewicht. Zo niet, meld dat hij nergens staat.
Geef de code voor container 1:
>MAS88
Geef het gewicht voor container 1 (ton):
>12,5
Geef de code voor container 2:
>XEL11
Geef het gewicht voor container 2 (ton):
>4,2
Geef de code voor container 3:
>OPO99
Geef het gewicht voor container 3 (ton):
>20
--- Manifest ---
Container MAS88: 12,5 ton
Container XEL11: 4,2 ton
Container OPO99: 20 ton
Totaal gewicht: 36,7 ton
Gemiddeld gewicht: 12,23 ton
Welke container zoek je?
>XEL11
Container XEL11 weegt 4,2 ton.
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 codes en de gewichten hangen enkel samen doordat ze op dezelfde index staan. Voeg je een container toe en vergeet je zijn gewicht, of sorteer je één van de twee arrays, dan lopen ze uit de pas zonder dat er een foutmelding komt. In hoofdstuk 9 los je dat op met één object dat de code en het gewicht samen bewaart. Zie Twee arrays die synchroon lopen.
Opstartparameters
Een bonusoefening over Opstartparameters via args.
Deel 1. Schrijf een programma som dat alle getallen optelt die je als opstartparameters meegeeft. som 4 8 15 toont De som is 27. Geeft de gebruiker geen enkel argument, dan toont het programma hoe het gebruikt wordt.
Je hoeft niet telkens naar de command line. In Visual Studio geef je argumenten mee via het menu Debug > [naam van je project] Debug Properties, in het vak Command line arguments. Typ daar 4 8 15 en start je programma zoals altijd.
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 eerste argument is nu een bewerking: plus of maal. De rest zijn de getallen. som maal 2 3 4 toont Het resultaat is 24. Zijn er minder dan twee argumenten, of is de bewerking onbekend, toon dan hoe het programma gebruikt 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.