arrow-left

All pages
gitbookPowered by GitBook
1 of 7

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Array principes

hashtag
Arrays

Arrays zijn een veelgebruikt principe in vele programmeertalen. Het grote voordeel van arrays is dat je een enkele variabele kunt hebben die een grote groep waarden voorstelt van eenzelfde type. Hierdoor wordt je code leesbaarder en eenvoudiger in onderhoud. Arrays zijn een zeer krachtig hulpmiddel, maar er zitten wel enkele venijnige addertjes onder het gras.

Een array is niet meer dan een verzameling waarden van hetzelfde type (bijvoorbeeld een verzameling ints, doubles of chars). Deze waarden kunnen benaderd worden via 1 enkele variabele, de array zelf. Door middel van een index kan ieder afzonderlijk element uit de array aangepast of uitgelezen worden.

Een nadeel van arrays is dat, eens we de lengte van een array hebben ingesteld, deze lengte niet meer kan veranderen. Later zullen we leren werken met lists en andere collections die dit nadeel niet meer hebben (zie ).

hashtag
Nut van arrays

Stel dat je de dagelijkse neerslag wenst te bewaren. Dit kan je zonder arrays eenvoudig:

Maar wat als je plots de neerslag van een heel jaar, 365 dagen, wenst te bewaren. Of een hele eeuw? Van zodra je een bepaalde soort data hebt die je veelvuldig wenst te bewaren dan zijn arrays de oplossing.

hashtag
Bron

Grote delen van dit hoofdstuk zijn vertaald uit het handboek C# 4.0 Essentials.

hashtag
Array Basics

hashtag
Arrays declareren

Een array creëren (declareren) kan op verschillende manieren. Hoewel manier 1 de meest gebruikelijke is, zal deze voor de beginnende programmeur nog wat abstract lijken vanwege het gebruik van het new keyword. Manier 2 is de eenvoudigste en snelste manier, maar deze is wel minder flexibel.

hashtag
Manier 1

De eenvoudigste variant is deze waarbij je een array variabele aanmaakt, maar deze nog niet initialiseert (i.e. je maakt enkel een identifier in aan). De syntax is als volgt:

Type kan dus eender welk type zijn dat je reeds kent. De [ ] (square brackets) duiden aan dat het om een array gaat.

Voorbeelden van array declaraties kunnen dus bijvoorbeeld zijn:

Stel dat je dus een array van strings wenst waarin je verschillende kleuren zal plaatsen dan schrijf je:

Vervolgens kunnen we later waarden toekennen aan de array, hiervoor gebruiken we het new sleutelwoord.

Je array zal vanaf dit punt een lengte van 5 hebben en kan niet meer groeien.

hashtag
Manier 2

Indien je direct waarden wilt toekennen (initialiseren) tijdens het aanmaken van de array zelf dan mag dit ook als volgt:

Ook hier zal dus vanaf dit punt je array een vaste lengte van 5 elementen hebben. Merk op dat deze manier dus enkel werkt indien je reeds weet welke waarden in de array moeten. In manier 1 kunnen we perfect een array aanmaken en pas veel later in programma ook effectief waarden toekennen (bijvoorbeeld door ze stuk per stuk door een gebruiker te laten invoeren).

hashtag
Manier 3

Nog een andere manier om arrays aan te maken is de volgende, waarbij je aangeeft hoe groot de array moet zijn, zonder reeds effectief waarden toe te kennen:

hashtag
Samengevat

De 3 manieren om arrays te declareren zijn dus:

hashtag
Elementen van een array aanpassen en uitlezen

Van zodra er waarden in een array staan of moeten bijgeplaatst worden dan kan je deze benaderen met de zogenaamde array accessor notatie Deze notatie is heel eenvoudigweg de volgende:

We plaatsen de naam van de array, gevolgd door brackets waarbinnen een getal i aangeeft het hoeveelste element we wensen te benaderen (lezen en/of schrijven).

De index van een C#-array start steeds bij 0. Indien je dus een array aanmaakt met lengte 10 dan heb je de indices 0 tot en met 9.

hashtag
Veelgemaakte fouten: Lengte en indexering van arrays

Het gebeurt vaak dat beginnende programmeurs verward geraken omtrent het aanmaken van een array aan de hand van de lengte en het indexeren.

De regels zijn duidelijk:

  • Bij het maken van een array is de lengte van een array gelijk aan het aantal elementen dat er in aanwezig is. Dus een array met 5 elementen heeft als lengte 5.

  • Bij het schrijven en lezen van individuele elementen uit de array (zie hierna) gebruiken we een indexering die start bij 0. Bijgevolg is de index 4 van het laatste elemente in een array met lengte 5.

hashtag
Schrijven

Ook schrijven van waarden naar de array gebruikt dezelfde notatie. Enkel moet je dus deze keer de array accessor-notatie links van de toekenningsoperator plaatsen. Stel dat we bijvoorbeeld de waarde van het eerste element uit de myColors array willen veranderen van red naar indigo, dan gebruiken we volgende notatie:

Als we dus bij aanvang nog niet weten welke waarden de individuele elementen moeten hebben in een array, dan kunnen we deze eerst definiëren, en vervolgens individueel toekennen:

hashtag
Uitlezen

Stel dat we een array aanmaken (eerste lijn) dan kunnen we dus bijvoorbeeld het getal 90 op het scherm tonen als volgt:

of nog korter:

Stel dat we een array van getallen hebben, dan kunnen we dus bijvoorbeeld 2 waarden uit die array optellen en opslaan in een andere variabele als volgt:

De variabele som zal dan vervolgens de waarde 15 bevatten (5+10).

Stel dat we alle elementen uit de array numbers met 5 willen verhogen, we kunnen dan schrijven:

Nog beter is het natuurlijk deze code (die 4 keer quasi dezelfde statement bevat) te vereenvoudigen tot:

Of het equivalent met een for-loop:

hashtag
De lengte van de array te weten komen

Soms kan het nodig zijn dat je in een later stadium van je programma de lengte van je array nodig hebt. De Length eigenschap van iedere array geeft dit weer. Volgend voorbeeld toen dit:

De variabele myColors.Length is een special element, van het type int, die iedere array met zich meedraagt (zie volgende semester). Je kan dus deze lengte ook toekennen aan een variabele:

De Length-property wordt vaak gebruikt in for/while loops waarmee je de hele array wenst te doorlopen. Door de Length-property te gebruiken als grenscontrole verzekeren we er ons van dat we nooit buiten de grenzen van de array zullen lezen of schrijven:

hashtag
Volledig voorbeeldprogramma met arrays

Met al de voorgaande informatie is het nu mogelijk om heel eenvoudig complexere programma's te schrijven die veel data moeten kunnen verwerken. Meestal gebruikt men een for-element om een bepaalde operatie over de hele array toe te passen.

Het volgende programma zal een array van integers aanmaken die alle gehele getallen van 0 tot 99 bevat. Vervolgens zal ieder getal met 3 vermenigvuldigd worden. Finaal tonen we tonen we enkel die getallen die een veelvoud van 4 zijn na de bewerking.

hashtag
Geheugengebruik bij arrays

hashtag
Arrays kopiëren

Arrays worden 'by reference' gebruikt in C#. Het gevolg hiervan is dat volgende code niet zal doen wat je wenst (ploegen, nieuwePloegen zijn twee arrays van bijvoorbeeld een string[]).

Deze code zal perfect werken. Wat er er echter is gebeurd is dat we de referentie naar ploegen ook in nieuwePloegen hebben geplaatst. Bijgevolg verwijzen beide variabelen naar dezelfde array, namelijk die waar ploegen al naar verwees. We hebben een soort alias gemaakt en kunnen nu op twee manieren de array benaderen. Als je dus schrijft:

Dan is dat hetzelfde als schrijven:

En waar staan de ploegen in de nieuwePloegen array? Die bestaat niet meer!

Wil je dus arrays kopieren dan kan dat niet op deze manier: je moet manueel ieder element van de ene naar de andere array kopiëren als volgt:

Opgelet: wanneer je met arrays van objecten (zie ) werkt dan zal bovenstaande mogelijk niet het gewenste resultaten geven daar we nu de individuele referenties van een object kopieren!

H7: Arrays

hierarrow-up-right
Zie volgend filmpje op 31 minuten.arrow-up-right
later

Oefeningen deel 1

Een aantal oefeningen is geïnspireerd op oefeningen van Exercism.ioarrow-up-right.

hashtag
Opwarmers

Een kort programma om op te warmen. Iedere opdracht hieronder is een apart programma (uiteraard mag je dit ook in 1 project oplossen).

Gebruik steeds een loop om dit op te lossen.

  • Maak een array gevuld met de getallen 0 tot 10

  • Maak een array gevuld met de getallen van 100 tot 1

  • Maak een array gevuld met de letters a tot z

Per array: output de array naar het scherm, maar ieder element naast elkaar met komma gescheiden. Dus niet:

maar wel: true, false, true, ...

hashtag
ArrayOefener 1

Maak een programma dat aan de gebruiker vraagt om 10 waarden (int) in te voeren in een array. Vervolgens toont het programma de som, het gemiddelde en het grootste getal van deze 10.

Vervolgens vraagt het programma de gebruiker om een getal in te voeren. Het programma toont dan alle getallen die groter of gelijk zijn aan dit ingevoerde getal zijn die in de array aanwezig zijn. Indien geen getallen groter zijn dan verschijnt een bericht Niets is groter op het scherm.

hashtag
ArrayOefener 2

Maak een programma dat aan de gebruiker vraagt om 2 keer 5 getallen in te voeren. Bewaar de eerste reeks waarden in een array A, de tweede reeks waarden in array B. Maak een nieuwe array C aan die steeds de som bevat van het respectievelijke element uit arrays A en B. Toon het resultaat.

hashtag
Vraag Array

Maak een array die 6 strings kan bevatten. Ieder element van de array bevat een vraag (naar keuze te verzinnen) als string waar de gebruiker met een getal op moet antwoorden. Maak een array aan die tot 6 ints kan bevatten. Lees 1 voor 1 de vraag uit de string-array uit en toon deze op het scherm. Lees vervolgens het antwoord uit dat de gebruiker intypt en bewaar dit als int in de 2e array.

Na de 6 vragen toon je vervolgens de vragen opnieuw met achter iedere vraag het antwoord van de gebruiker.

hashtag
Array Zoeker

Maak een programma dat eerst weer aan de gebruiker om 10 waarden vraagt die in een array worden gezet.

Vervolgens vraagt het programma welke waarde verwijderd moet worden. Wanneer de gebruiker hierop antwoordt met een nieuwe waarde dan zal deze nieuw ingevoerde waarde in de array gezocht worden. Indien deze gevonden wordt dan wordt deze waarde uit de array verwijderd en worden alle waarden die erachter komen met een plaatsje naar links opgeschoven, zodat achteraan de array terug een lege plek komt.

Deze laatste plek krijgt de waarde -1.

Toon vervolgens alle waarden van de array.

Indien de te zoeken waarde meer dan 1 keer voorkomt, wordt enkel de eerst gevonden waarde verwijderd.

hashtag
LeveringsBedrijf

Maak een programma voor een koeriersbedrijf. Maak een array die 10 postcodes bevat (zelf te kiezen) van gemeenten waar het bedrijf naar levert. Maak een tweede array die de prijs bevat per kg van iedere respectievelijke gemeente. Het eerste element van deze array bevat dus de prijs/kg om naar de gemeente die als eerste in de array met postcodes staat.

Vraag aan de gebruiker een postcode en het gewicht van het pakket. Vervolgens wordt de prijs opgezocht voor die gemeente en wordt deze berekend gegeven het ingegeven gewicht.

Indien het bedrijf niet levert aan de ingetypte postcode dan wordt een foutmelding weergegeven.

hashtag
Bob

"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."

Bekijk steeds de laatste 2 tekens die de gebruiker invoert om de response van Bob te bepalen.

Kan je een gesofisticeerdere bot maken? (tip: myInputstring.Contains(somestring) geeft een bool terug indien somestring voorkomt in de variabele myInputstring van het type string )

Gebruik een array om de antwoorden in te bewaren.

PRO: kan je met een array eerdere vragen van de gebruiker bewaren om zo complexere antwoorden te genereren?

hashtag
Hamming distance

De hamming distance is het aantal tekens dat twee reeksen verschillen indien we ieder element vergelijken op dezelfde plaats in de andere reeks.

Maak een programma dat aan de gebruiker vraagt om twee DNA strings in te voeren (een reeks bestaande uit de letters G, A, C & T). Beide reeksen moeten even lang zijn.

Bereken de hamming distance tussen beide reeksen.

De hamming distance van volgende twee DNA strings is 7, omdat er 7 elementen in beide strings staan die niet gelijk zijn aan mekaar op dezelfde plek (aangeduid met ^).

hashtag
Methoden met arrays als parameter

hashtag
Parkeergarage

Een parkeergarage vraagt sowieso €2.00 om tot maximum 3uur te parkeren. Per extra uur NA die 3uur wordt telkens €0.5 aangerekend (dus 4uur parkeren kost €2.5. Er wordt maximum €10 aangerekend per dag. En veronderstel dat er nooit langer dan 1 dag (24u) kan geparkeerd worden.

Schrijf een programma dat het verschuldigde bedrag toont gegeven de duur van een auto. Bij het opstarten van het programma wordt eerst gevraagd hoeveel auto’s ingevoerd zullen worden, dan wordt per auto de duur van het parkeren gevraagd. Finaal wordt, netjes getabuleerd, alle informatie getoond, inclusief het totaal bedrag. Gebruik minstens 1 methode ‘berekenKosten’ die de kost voor 1 gebruiker telkens teruggeeft, gegeven de duur als parameter. Gebruik ook een methode die een array als parameter aanvaard (bijvoorbeeld de array met daarin de respectievelijke uren per auto).

Voorbeeldoutput: Opstart:

Resultaat:

hashtag
Voetbalcoach

Maak een console-applicatie voor een assistent voetbaltrainer (of een sport naar keuze)

De voetbalcoach wil na de match iedere knappe en domme actie van een speler weten. Op die manier weet hij aan het einde van de match wie er de meeste goede en slechte acties doet. De spelers hebben rugnummers 1 tot en met 12. (het gaat om een voetbal variant waar m'n geen elftal maar een twaalftal gebruikt :p)

Wanneer de coach een rugnummer intypt kan hij vervolgens ingeven of hij (a) een knappe actie of (b) een domme actie wil ingeven. Vervolgens geeft hij een getal in . Gebruik een 2dimensionale array die per speler het aantal domme en goede acties bijhoudt (de array is dus 12 bij 2 groot: 1 lijn per speler, bestaande uit 2 kolommen voor goede en domme actie. De index van de lijn is de rugnummer van speler -1 ).

Een typische invoer kan dus zijn:

De coach kiest dus de speler met rugnummer 2, hij kiest voor een knappe actie, en voert 6 in als aantal goede acties.

In de array op index 1 (rugnummer -1 ) zal in de de 0'de kolom(0=goede, 1=slechte) het getal 6 geplaatst worden.

Vervolgens kan de coach een ander rugnummer (of hetzelfde) invoeren en zo verder.

Wanneer de coach 99 invoert stopt het programma en worden de finale statistieken getoond: per speler/rugnummer wordt het aantal goede en domme acties getoond, met daarnaast het verschil tussen beide:

(gebruik \t om goede tabs te zetten tussen de data)

Het programma toont ook welke speler(s) het meest performant waren, namelijk zij met het grootste positieve verschil tussen goede en domme acties, alsook de minst performante en de meeste “gemiddelde” speler (i.e. verschil == 0 )

hashtag
Array Viewer

Maak een programma dat een methode VisualiseerArray implementeert. De methode zal een array (type int) als parameter hebben en niets teruggeven (void). Echter, de methode zal met behulp van Write() de array, van eender welke grootte, op het scherm tonen. Tussen ieder element van dezelfde rij dient een tab (‘\t’) gezet te worden. Je dient in de methode gebruik te maken van een for-loop. Voorbeeld van main:

Geeft volgende output:

hashtag
Caesar-encryptie

Maak 2 methoden Encrypt en Decrypt die als parameters telkens een chararray krijgen en een integer. Bedoeling is dat de Encrypt-methode de array van het type string versleuteld gegeven de sleutel x volgens het Caesar cipher (zie hieronder). Als resultaat komt er uit de methode de geëncrypteerde array.

De decrypt-methode doet hetzelfde maar omgekeerd: je kan er een versleutelde tekst insteken en de sleutel en de ontcijferde tekst komt terug (merk op dat je decrypt-methode gebruik kan maken van de encrypt-methode!).

Toon in je main aan dat je methoden werken (door bijvoorbeeld aan de gebruiker een stuk tekst als string te vragen en een sleutel en deze dan te encrypteren/de-crypteren).

Encryptie is de kunst van het vercijferen van data. Hierbij gaat men een gewone tekst zodanig omvormen (versleutelen) zodat deze onleesbaar is en enkel kan ontcijferd worden door de ontvanger die weet hoe de tekst terug kan verkregen worden en enkel indien deze ook de ‘private’ sleutel heeft.

Een klassiek encryptie-algoritme uit de oudheid is de Caesar substitutie. Hierbij gaan we het alfabet met x plaatsen opschuiven en vervolgens de te vercijferen tekst letter per letter te vervangen met z’n respectievelijke opgeschoven versie. Hierbij is x dus de geheime sleutel die zender en ontvanger moeten afspreken.

Stel bijvoorbeeld dat x=3 dan krijgen we volgende nieuwe alfabet:

Waarbij dus de A zal vervangen worden door een D, de Z door een C, etc.

Willen we deze tekst dus encrypteren:

dan krijgen we:

hashtag
Ondernemingsnummer

Ontwerp een methode waarmee je een Belgisch ondernemingsnummer kan controleren. Een Belgisch ondernemingsnummer is als volgt opgebouwd: BE 0xxx.xxx.xxx waarbij BE de landcode is die standaard gevolgd wordt door een spatie en dan een 0. Wanneer je de volgende 7 cijfers deelt door 97 in een gehele deling, dan is het getal gevormd door de laatste 2 cijfers gelijk aan 97 minus de rest van deze gehele deling. Bij een geldig ondernemingsnummer verschijnt de tekst "Geldig ondernemingsnummer.", bij een ongeldig ondernemingsnummer "Ongeldig ondernemingsnummer.". De methode aanvaardt een string waarin je de ondernemingsnummer staat.

hashtag
Meer-dimensionale arrays

hashtag
Determinant

Schrijf een programma dat een methode BerekenDeterminant heeft. Deze methode heeft één paramater als input: een 2 bij 2 array van integers. Als resultaat geeft de methode de determinant als integer terug. Zoek zelf op hoe je de determinant van een matrix kunt berekenen.

Volgende voorbeeld-main dient te werken,

geeft als output:

Extra: Breid uit zodat de BerekenDeterminant-methode ook werkt voor 3-bij-3 matrices. De methodeaanroep blijft dezelfde, enkel de interne code van de methode zal nu rekening moeten houden met de grootte van de matrix .

hashtag
2D Array Viewer

Breid het ArrayViewer programma uit zodat ook 2-dimensionale arrays gevisualiseerd kunnen worden. (Hint: gebruik de GetLength() methode van een array).

Voorbeeld van main:

Output:

hashtag
MatrixMultiplier

Schrijf een methode VermenigvuldigMatrix die 2 matrices als invoer verwacht en als resultaat een nieuwe matrix teruggeeft die het product van beide matrices bevat.

hashtag
Robot Simulator

Volgende opgave komt uit

" Write a robot simulator.

A robot factories' test facility needs a program to verify robot movements. The robots have three possible movements:

  • turn right

  • turn left

  • advance

    Robots are placed on a hypothetical infinite grid, facing a particular direction (north, east, south, or west) at a set of {x,y} coordinates, e.g., {3,8}, with coordinates increasing to the north and east.

The robot then receives a number of instructions, at which point the testing facility verifies the robot's new position, and in which direction it is pointing.

The letter-string "RAALAL" means:

  • Turn right

  • Advance twice

  • Turn left

Say a robot starts at {7, 3} facing north. Then running this stream of instructions should leave it at {9, 4} facing west."

Teken het gevolgde pad in de console (gebruik Console.SetCursorPosition()).

hashtag
Pro

hashtag
Galgje

Maak een spel , vergelijkbaar als galgje, waarin de speler een woord moet raden. Zie voor de spelregels indien je deze niet kent.

Voorbeeld output:

hashtag
Grote Som

Maak een methode Som() die eender welke hoeveelheid paramaters van het type int aanvaardt en vervolgens de som van al deze parameters teruggeeft (als int).

Toon in je main aan dat de methode werkt door onder andere 1, 3, 5 en 10 als gehele getalen mee te geven.

Toon ook aan dat je een array van 50 ints als parameter kan meegeven aan de methode. (hint:je moet het params keyword gebruiken)

N-dimensionale arrays

hashtag
Meer-dimensionale Arrays

Voorlopig hebben we enkel met 1-dimensionale array gewerkt. Je kan er echter ook meerdimensionale maken. Denk maar aan een n-bij-m array om een matrix voor te stellen.

Door een komma tussen rechte haakjes te plaatsen tijdens de declaratie kunnen we meer-dimensionale arrays maken.

Bijvoorbeeld 2D:

string[,] books;

3D:

(enz.)

Om een array ook onmiddellijk te initialiseren gebruiken we dan volgende uitdrukking:

Merk op dat we dus nu een 3 bij 3 array maken. Iedere rij bestaat uit 3 elementen.

OF bij een 3D:

Stel dat we uit de books-array bijvoorbeeld de auteur van het derde boek wensen te tonen dan kunnen we schrijven:

Dit zal Mike Pastore op het scherm zetten.

En bij de temperaturen:

Zal 27 terug geven: we vragen van de laatste array ([2]), daarbinnenin de eerste array ([0]) en daarvan het tweede ([1]) element.

hashtag
Lengte van iedere dimensie in een n-dimensionale matrix

Indien je de lengte opvraagt van een meer-dimensionale array dan krijg je de som van iedere lengte van iedere dimensie. Onze books array zal bijvoorbeeld dus lengte 9 hebben. Je kan echter de lengte van iedere aparte dimensie te weten komen met de GetLength() methode die iedere array heeft. Als parameter geef je de dimensie mee waarvan je de lengte wenst.

Het aantal dimensies van een array wordt trouwens weergegeven door de rank eigenschap die ook iedere array heeft. Bijvoorbeeld:

Arrays en methoden

hashtag
Methoden met arrays als parameter maken

Zoals alle types kan je ook arrays van eender welk type als parameter gebruiken bij het schrijven van een methode.

Opgelet:

Arrays worden altijd ‘by reference’ doorgegeven aan een methode. Dit heeft twee belangrijke gevolgen:

  1. Je hoeft het ref keyword niet mee te geven, dit gebeurt impliciet reeds

  2. Je werkt steeds met de eigenlijke array, ook in de methode. Als je dus aanpassingen aan de array aanbrengt in de methode, dan zal dit ook gevolgen hebben op de array van de parent-methode (logisch: het gaat om dezelfde array).

Stel dat je bijvoorbeeld een methode hebt die als parameter 1 array van ints meekrijgt. De methode zou er dan als volgt uitzien.

hashtag
Array grootte in de methode

Een array als parameter meegeven kan dus, maar een ander aspect waar rekening mee gehouden moet worden is dat je niet kan ingeven in de parameterlijst hoe groot de array is! Je zal dus in je methode steeds de grootte van de array moeten uitlezen met de Length-eigenschap.

Volgende methode is dus FOUT!

En zal volgende error genereren:

hashtag
Arraymethode voorbeeld

Volgend voorbeeld toont een methode die alle getallen van de array op het scherm zal tonen:

Stel dat je elders volgende array hebt int[] leeftijden = {2, 5, 1, 6};. De ToonArray methode aanroepen kan dan als volgt:

En de output zal dan zijn:

hashtag
Voorbeeldprogramma met methoden

Volgend programma toont hoe we verschillende onderdelen van de code in methoden hebben geplaatst zodat: 1. de lezer van de code sneller kan zien wat het programma juist doet 2. zodat code herbruikbaar is

Analyseer de code en denk na hoe eenvoudig het is om een ander programma hiervan te maken (bijvoorbeeld vermenigvuldigen met 10 en alle veelvouden van 6 tonen: je hoeft enkel de parameters in de methode-aanroep aan te passen):

hashtag
Array als return-type bij een methode

Ook methoden kun je natuurlijk een array als returntype laten geven. Hiervoor zet je gewoon het type array als returntype zonder grootte in de methode-signature.

Stel bijvoorbeeld dat je een methode hebt die een int-array maakt van een gegeven grootte waarbij ieder element van de array reeds een beginwaarde heeft die je ook als parameter meegeeft:

Oefeningen deel 2

hashtag
Methoden met arrays als parameter

hashtag
Parkeergarage

Een parkeergarage vraagt sowieso €2.00 om tot maximum 3uur te parkeren. Per extra uur NA die 3uur wordt telkens €0.50 aangerekend (dus 4uur parkeren kost €2.50. Er wordt maximum €10 aangerekend per dag. Veronderstel dat er nooit langer dan 1 dag (24u) kan geparkeerd worden.

Schrijf een programma dat het verschuldigde bedrag toont gegeven de duur dat de parkeergarage gebruikt werd. Bij het opstarten van het programma wordt eerst gevraagd hoeveel auto’s ingevoerd zullen worden, dan wordt per auto de duur van het parkeren gevraagd. Finaal wordt, netjes getabuleerd, alle informatie getoond, inclusief het totaal bedrag. Gebruik minstens 1 methode ‘berekenKosten’ die de kost voor 1 gebruiker telkens teruggeeft, gegeven de duur als parameter. Gebruik ook een methode die een array als parameter aanvaard (bijvoorbeeld de array met daarin de respectievelijke uren per auto).

Voorbeeldoutput: Opstart:

Resultaat:

hashtag
Array Viewer

Maak een programma dat een methode VisualiseerArray implementeert. De methode zal een array (type int) als parameter hebben en niets teruggeven (void). Echter, de methode zal met behulp van Write() de array, van eender welke grootte, op het scherm tonen. Tussen ieder element van dezelfde rij dient een tab (‘\t’) gezet te worden. Je dient in de methode gebruik te maken van een for-loop. Voorbeeld van main:

Geeft volgende output:

hashtag
Caesar-encryptie

Maak 2 methoden Encrypt en Decrypt die als parameters telkens een chararray krijgen en een integer. Bedoeling is dat de Encrypt-methode de array van het type string versleuteld gegeven de sleutel x volgens het Caesar cipher (zie hieronder). Als resultaat komt er uit de methode de geëncrypteerde array.

De decrypt-methode doet hetzelfde maar omgekeerd: je kan er een versleutelde tekst insteken en de sleutel en de ontcijferde tekst komt terug (merk op dat je decrypt-methode gebruik kan maken van de encrypt-methode!).

Toon in je main aan dat je methoden werken (door bijvoorbeeld aan de gebruiker een stuk tekst als string te vragen en een sleutel en deze dan te encrypteren/de-crypteren).

Encryptie is de kunst van het vercijferen van data. Hierbij gaat men een gewone tekst zodanig omvormen (versleutelen) zodat deze onleesbaar is en enkel kan ontcijferd worden door de ontvanger die weet hoe de tekst terug kan verkregen worden en enkel indien deze ook de ‘private’ sleutel heeft.

Een klassiek encryptie-algoritme uit de oudheid is de Caesar substitutie. Hierbij gaan we het alfabet met x plaatsen opschuiven en vervolgens de te vercijferen tekst letter per letter vervangen met z’n respectievelijke opgeschoven versie. Hierbij is x dus de geheime sleutel die zender en ontvanger moeten afspreken.

Stel bijvoorbeeld dat x=3 dan krijgen we volgende nieuwe alfabet:

Waarbij dus de A zal vervangen worden door een D, de Z door een C, etc.

Willen we deze tekst dus encrypteren:

dan krijgen we:

hashtag
Ondernemingsnummer

Ontwerp een methode waarmee je een Belgisch ondernemingsnummer kan controleren. Een Belgisch ondernemingsnummer is als volgt opgebouwd: BE 0xxx.xxx.xxx waarbij BE de landcode is die standaard gevolgd wordt door een spatie en dan een 0. Wanneer je de volgende 7 cijfers deelt door 97 in een gehele deling, dan is het getal gevormd door de laatste 2 cijfers gelijk aan 97 minus de rest van deze gehele deling. Bij een geldig ondernemingsnummer verschijnt de tekst "Geldig ondernemingsnummer.", bij een ongeldig ondernemingsnummer "Ongeldig ondernemingsnummer.". De methode aanvaardt een string waarin je het ondernemingsnummer staat.

hashtag
Meer-dimensionale arrays

hashtag
Determinant

Schrijf een programma dat een methode BerekenDeterminant heeft. Deze methode heeft één paramater als input: een 2 bij 2 array van integers. Als resultaat geeft de methode de determinant als integer terug. Zoek zelf op hoe je de determinant van een matrix kunt berekenen.

Volgende voorbeeld-main dient te werken,

geeft als output:

Extra: Breid uit zodat de BerekenDeterminant-methode ook werkt voor 3-bij-3 matrices. De methodeaanroep blijft dezelfde, enkel de interne code van de methode zal nu rekening moeten houden met de grootte van de matrix .

hashtag
2D Array Viewer

Breid het ArrayViewer programma uit zodat ook 2-dimensionale arrays gevisualiseerd kunnen worden. (Hint: gebruik de GetLength() methode van een array).

Voorbeeld van main:

Output:

hashtag
MatrixMultiplier

Schrijf een methode VermenigvuldigMatrix die 2 matrices als invoer verwacht en als resultaat een nieuwe matrix teruggeeft die het product van beide matrices bevat.

hashtag
Voetbalcoach

Maak een console-applicatie voor een assistent voetbaltrainer (of een sport naar keuze).

De voetbalcoach wil na de match iedere knappe en domme actie van een speler weten. Op die manier weet hij aan het einde van de match wie er de meeste goede en slechte acties doet. De spelers hebben rugnummers 1 tot en met 12. (het gaat om een voetbal variant waar m'n geen elftal maar een twaalftal gebruikt :p)

Wanneer de coach een rugnummer intypt kan hij vervolgens ingeven of hij (a) een knappe actie of (b) een domme actie wil ingeven. Vervolgens geeft hij een getal in. Gebruik een 2dimensionale array die per speler het aantal domme en goede acties bijhoudt (de array is dus 12 bij 2 groot: 1 lijn per speler, bestaande uit 2 kolommen voor goede en domme actie. De index van de lijn is de rugnummer van speler -1).

Een typische invoer kan dus zijn:

De coach kiest dus de speler met rugnummer 2, hij kiest voor een knappe actie, en voert 6 in als aantal goede acties.

In de array op index 1 (rugnummer -1) zal in de 0'de kolom (0 = goede, 1 = slechte) het getal 6 geplaatst worden.

Vervolgens kan de coach een ander rugnummer (of hetzelfde) invoeren en zo verder.

Wanneer de coach 99 invoert stopt het programma en worden de finale statistieken getoond: per speler/rugnummer wordt het aantal goede en domme acties getoond, met daarnaast het verschil tussen beide:

(gebruik \t om goede tabs te zetten tussen de data)

Het programma toont ook welke speler(s) het meest performant waren, namelijk zij met het grootste positieve verschil tussen goede en domme acties, alsook de minst performante en de meeste “gemiddelde” speler (i.e. verschil == 0 )

hashtag
Pro

hashtag
Robot Simulator

Volgende opgave komt uit

" Write a robot simulator.

A robot factories' test facility needs a program to verify robot movements. The robots have three possible movements:

  • turn right

  • turn left

  • advance

    Robots are placed on a hypothetical infinite grid, facing a particular direction (north, east, south, or west) at a set of {x, y} coordinates, e.g., {3, 8}, with coordinates increasing to the north and east.

The robot then receives a number of instructions, at which point the testing facility verifies the robot's new position, and in which direction it is pointing.

The letter-string "RAALAL" means:

  • Turn right

  • Advance twice

  • Turn left

Say a robot starts at {7, 3} facing north. Then running this stream of instructions should leave it at {9, 4} facing west."

Teken het gevolgde pad in de console (gebruik Console.SetCursorPosition()).

hashtag
Galgje

Maak een spel, vergelijkbaar met galgje, waarin de speler een woord moet raden. Zie voor de spelregels indien je deze niet kent.

Voorbeeld output:

hashtag
Grote Som

Maak een methode Som() die eender welke hoeveelheid parameters van het type int aanvaardt en vervolgens de som van al deze parameters teruggeeft (als int).

Toon in je main aan dat de methode werkt door onder andere 1, 3, 5 en 10 als gehele getalen mee te geven.

Toon ook aan dat je een array van 50 ints als parameter kan meegeven aan de methode. (hint: je moet het params keyword gebruiken)

Werken met arrays

hashtag
Nuttige array methoden

Net zoals we hebben gezien dat de Math-klasse een heleboel nuttige methoden in zich heeft, zo heeft ook iedere array een aantal methoden waar handig gebruik van gemaakt kan worden.

Om deze methoden te kunnen gebruiken moet je bovenaan je file de volgende lijn toevoegen: using System.Linq;:

Wanneer je een array hebt gemaakt kan je met de IntelliSense van Visual Studio bekijken wat je allemaal kan doen met de array:

Al deze methoden hier beschrijven zal ons te ver nemen. De volgende methoden zijn echter zeer handig om te gebruiken:

Max(), Min(), Sum() en Average().

Volgende code geeft bijvoorbeeld het grootste getal terug uit een array genaamd "leeftijden":

hashtag
System.Array

Alle C# arrays erven over van de System.Array klasse (klasse en overerving zien we later), hierdoor kan je zaken zoals Length gebruiken op je array. De System.Array klasse heeft echter ook nog een hoop andere nuttige methoden zoals de BinarySearch(), Sort() en Reverse() methoden. Het gebruik hiervan is steeds dezelfde zoals volgende voorbeelden tonen:

hashtag
Sort: Arrays sorteren

Om arrays te sorteren roep je de Sort()-methode op als volgt, als parameter geef je de array mee die gesorteerd moet worden.

Volgende voorbeeld toont hier het gebruik van:

Wanneer je de Sort-methode toepast op een array van strings dan zullen de elementen alfabetisch gerangschikt worden.

hashtag
Reverse: Arrays omkeren

Met de Array.Reverse()-methode kunnen we dan weer de elementen van de array omkeren (dus het laatste element vooraan zetten en zo verder:

hashtag
Clear: Arrays leegmaken

Een array volledig leegmaken (alle elementen op ‘null’ zetten) doe je met de Array.Clear-methode, als volgt:

hashtag
BinarySeach: Zoeken in arrays

De BinarySearch-methode maakt het mogelijk om te zoeken naar de index van een gegeven element in een index. Deze methode werkt enkel indien de elementen in de array gesorteerd staan! Je geeft aan de methode 2 parameters mee, enerzijds de array in kwestie en anderzijds het element dat we zoeken. Als resultaat wordt de index van het gevonden element teruggegeven. Indien niets wordt gevonden zal het resultaat -1 zijn.

Volgende code zal bijvoorbeeld de index teruggeven van de kleur "red" indien deze in de array myColors staat:

Volgend voorbeeld toont het gebruik van deze methode:

hashtag
Copy : Array kopieren

In het vorige hoofdstuk vertelden we reeds over het venijn van arrays kopiëren, daar deze 'by reference' worden bewaard. Lijn 2 in deze code creëert dus enkel een alias naar dezelfde array en geen kopie:

Willen we een kopie dan moet dit dus zoals in vorige hoofdstuk manueel gebeuren, of je maakt gebruikt van de Array.Copy() methode, als volgt:

De methode Array.Copy vereist minimaal 3 parameters, waaronder de originele array, de doel array (die reeds moet aangemaakt zijn!) alsook hoeveel elementen je uit de originele array wenst te kopieren. Bekijk zeker ook de overloaded versies die deze methode heeft. Zo kan je ook een bepaald stuk van een array kopieren en ook bepalen waar in de doel array dit stuk moet komen.

hashtag
Manueel zoeken in arrays

Het zoeken in arrays kan met behulp van while of for-loops tamelijk snel. Volgend programmatje gaat zoeken of het getal 12 aanwezig is in de array. Indien ja dan wordt de index bewaard van de positie in de array waar het getal staat:

Voorgaande stukje code is de meest naïeve oplossing. Bedenk echter wat er gebeurt indien het getal dat we zoeken 2 of meerdere keren in de array staat. Index zal dan de positie bevatten van de laatst gevonden 12 in de array.

Het is zéér belangrijk dat je vlot dit soort algoritmen kan schrijven, zoals:

  • Zoeken van elementpositie in array

  • Tellen hoe vaak een element in een array voorkomt

  • Elementen in een array 1 of meerdere plaatsen opschuiven

hashtag
Manueel zoeken met for en while

We tonen nu twee voorbeelden van hoe je kan zoeken in een array wanneer we bijvoorbeeld 2 arrays hebben die 'synchroon' zijn. Daarmee bedoel ik: de eerste array bevat producten, de tweede array bevat de prijs van ieder product. De prijs van de producten staat steeds op dezelfde index in de andere array:

We vragen nu aan de gebruiker van welk product de prijs getoond moet worden:

We tonen nu hoe we met for eerst het juiste product zoeken en dan vervolgens die index bewaren en gebruiken om de prijs te tonen:

Een nadeel van deze oplossing is dat we steeds de hele for doorlopen (we gebruiken geen break vanwege een allergie hiervoor bij de auteur). Bij heel lange arrays is dit dus niet erg performant.

Volgende oplossing met een while toont een performantere oplossing:

hashtag
String en arrays

hashtag
String naar char array

Het type string is niet meer dan een arrays van karakters, char[]. Om een string per karakter te bewerken is het aanbevolen om deze naar een char-array om te zetten en nadien terug naar een string. Dit kan gebruikmakend van .ToCharArray() als volgt:

De uitvoer zal worden:Ik ben Tim.

hashtag
Char array naar string

Ook de omgekeerde weg is mogelijk. De werking is iets anders, let vooral op hoe we de char array doorgeven als argument bij het aanmaken van een nieuwe string in lijn 3:

De uitvoer van deze code zal zijn: haxlo.

int dag1= 34;
int dag2= 45;
int dag3= 0;
int dag4= 34;
int dag5= 12;
int dag6= 0;
int dag7= 23;
type[] arraynaam;
    int[] verkoopCijfers;
    double[] gewichtHuisdieren;
    bool[] examenAntwoorden;
string[] myColors;
string[] myColors;
myColors = new string[] {"red", "green", "yellow", "orange", "blue"};
string[] myColors = {"red", "green", "yellow", "orange", "blue"};
string[] myColors;
myColors = new string[5];
//Manier 1
string[] myColors;
myColors = new string[] {"red", "green", "yellow", "orange", "blue"};
//Manier 2
string[] myColors = {"red", "green", "yellow", "orange", "blue"};
//Manier 3
string[] myColors;
myColors = new string[5];
myColors[i];
myColors[0] = "indigo";
string[] myColors;
myColors = new string[5];
// ...
myColors[0] = "red";
myColors[1] = "green";
myColors[2] = "yellow";
myColors[3] = "orange";
myColors[4] = "blue";
int[] scores = {100, 90, 55, 0, 34};
int kopie = scores[1];
Console.WriteLine(kopie);
int[] scores = {100, 90, 55, 0, 34};
Console.WriteLine(scores[1]);
int[] numbers = {5, 10, 30, 45};
int som = numbers[0] + numbers[1];
int[] numbers = {5, 10, 30, 45};
numbers[0] += 5;
numbers[1] += 5;
numbers[2] += 5;
numbers[3] += 5;
int[] numbers = {5, 10, 30, 45};
int teller = 0;
while (teller < 4)
{
    numbers[teller] += 5;
    teller++
}
int[] numbers = {5, 10, 30, 45};
for(int teller = 0; teller < 4; teller++)
{
    numbers[teller] += 5;
}
string[] myColors = {"red", "green", "yellow", "orange", "blue"};
Console.WriteLine("Length of array = {0}", myColors.Length);
int arrayLength = myColors.Length;
//Alle elementen van een array tonen
for (int i = 0; i < getallen.Length; i++)
{
    Console.WriteLine(getallen[i]);
}
//Array aanmaken
int[] getallen = new int[100];

//Array vullen
for (int i = 0; i < getallen.Length; i++)
{
    getallen[i] = i;
}

//Alle elementen met 3 vermenigvuldigen
for (int i = 0; i < getallen.Length; i++)
{
    getallen[i] = getallen[i] * 3;
}

//Enkel veelvouden van 4 op het scherm tonen
for (int i = 0; i < getallen.Length; i++)
{
    if(getallen[i] % 4 == 0)
        Console.WriteLine(getallen[i]);
}
nieuwePloegen = ploegen;
nieuwePloegen[4] = "Beerschot";
ploegen[4] = "Beerschot";
for(int i = 0; i < ploegen.Length; i++)
{
    nieuwePloegen[i] = ploegen[i];
}
short[,,] temperatures;
string[,] books = {
        {"Macbeth", "Shakespeare", "ID12341"},
        {"Before I Get Old", "Dave Marsh", "ID234234"},
        {"Security+", "Mike Pastore", "ID3422134"}
    };
int[,,] temperatures= {
    {
        {3,4}, {5,4}
    },
    {
        {12,34}, {35,24}
    },
    {
        {-12,27}, {3,24}
    },
};
Console.WriteLine(books[2, 1]);
Console.WriteLine(temperatures[2, 0, 1]);
int arrayRijen = books.GetLength(0);
int arrayKolommen = books.GetLength(1);
int arrayDimensions = myColors.Rank;
Maak een array gevuld met willekeurige getallen tussen 1 en 100 (de array is 20 lang)
  • Maak een array gevuld met afwisselend true en false (de array is 30 lang)

  • Advance once
  • Turn left yet again

  • Originele bron voor dit ideearrow-up-right
    Exercism.ioarrow-up-right
    Wikiarrow-up-right
    Advance once
  • Turn left yet again

  • Originele bron voor dit ideearrow-up-right
    Exercism.ioarrow-up-right
    Wikiarrow-up-right
    true
    false
    true
    \\etc
    Geef gewicht pakket
    45
    Naar welke postcode wenst u dit pakket te versturen?
    2020
    Dit zal 9630 euro kosten.
    GAGCCTACTAACGGGAT
    CATCGTAATGACGGCCT
    ^ ^ ^  ^ ^    ^^
    2
    
    a
    
    6
    Rugnummer   Goede   Domme   Verschil
    1               5       2        3
    2               6       7       -1
    int[] array={15,6,9};
    int[] array2={0,1,2,3,4,5,6};
    VisualiseerArray(array);
    VisualiseerArray(array2);
    DEFGHIJKLMNOPQRSTUVWXYZABC
    the quick brown fox jumps over the lazy dog
    WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
    int[,] aMatrix={ 
                      {2,4},
                      {3,5}
                    };
    Console.WriteLine($"Determinant van matrix is {BerekenDeterminant(aMatrix)}");
    Determinant van matrix is -2
    int [,] array= { {15,6,9},{1,2,3},{6,9,12}};
    VisualiseerArray(array);
    15  6  9
    1   2  3
    6   9  12
    int[] array={15, 6, 9};
    int[] array2={0, 1, 2, 3, 4, 5, 6};
    VisualiseerArray(array);
    VisualiseerArray(array2);
    DEFGHIJKLMNOPQRSTUVWXYZABC
    the quick brown fox jumps over the lazy dog
    WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
    int[,] aMatrix = { 
                      {2, 4},
                      {3, 5}
                     };
    Console.WriteLine($"Determinant van matrix is {BerekenDeterminant(aMatrix)}");
    Determinant van matrix is -2
    int [,] array = { {15, 6, 9}, {1, 2, 3}, {6, 9, 12}};
    VisualiseerArray(array);
    15  6  9
    1   2  3
    6   9  12
    2
    
    a
    
    6
    Rugnummer   Goede   Domme   Verschil
    1               5       2        3
    2               6       7       -1
    static void EenVoorbeeldMethode(int[] inArray)
    {
    
    }
    static void EenVoorbeeldMethode(ref int[6] inArray)
    {
    
    }
    static void ToonArray(int[] getalArray)
    {
        Console.WriteLine("Array output:");
        for (int i = 0; i < getalArray.Length; i++)
        {
            Console.WriteLine(getalArray[i]);
        }
    }
    ToonArray(leeftijden);
    Array output:
    2
    5
    1
    6
    namespace ArrayMethods
    {
        class Program
        {
    
            static void VulArray(int[] getalArray)
            {
                for (int i = 0; i < getalArray.Length; i++)
                {
                    getalArray[i] = i;
                }
            }
    
            static void VermenigvuldigArray(int[] getalArray, int multiplier)
            {
                for (int i = 0; i < getalArray.Length; i++)
                {
                    getalArray[i] = getalArray[i] * multiplier;
                }
            }
    
            static void ToonVeelvouden(int[] getalArray, int veelvoudenvan)
            {
                for (int i = 0; i < getalArray.Length; i++)
                {
                    if (getalArray[i] % veelvoudenvan == 0)
                        Console.WriteLine(getalArray[i]);
                }
            }
    
            static void Main(string[] args)
            {
                //Array aanmaken
                int[] getallen = new int[100];
    
                //Array vullen
                VulArray(getallen);
    
                //Alle elementen met 3 vermenigvuldigen
                VermenigvuldigArray(getallen, 3);
    
                //Enkel veelvouden van 4 op het scherm tonen
                ToonVeelvouden(getallen, 4);
    
            }
        }
    }
    static int[] MaakArray(int lengte, int beginwaarde)
    {
        int[] resultArray = new int[lengte];
        for (int i = 0; i < lengte; i++)
        {
            resultArray[i] = beginwaarde;
        }
        return resultArray;
    }
    using System;
    namespace methodmovie
    {
       class Program
        {
            public static void Main()
            {
                int[] getallen = new int[101];
    
                //..
                Console.WriteLine(getallen.Sum());
            }
        }
    }
    int oudsteleeftijd = leeftijden.Max();
    string[] myColors = {"red", "green", "yellow", "orange", "blue"};
    //Sorteer
    Array.Sort(myColors);
    
    //Toon resultaat van sorteren
    for (int i = 0; i < myColors.Length; i++)
    {
        Console.WriteLine(myColors[i]);
    }
    Array.Reverse(myColors);
    Array.Clear(myColors);
    Array.BinarySearch(myColors, "red");
    int[] rank = {224, 34, 156, 1023, -6};
    Array.Sort(rank);
    
    Console.WriteLine("What rank do you need?");
    int userchoice = Convert.ToInt32(Console.ReadLine());
    
    int index = Array.BinarySearch(rank, userchoice);
    if(index >= 0)
        Console.WriteLine($"{userchoice} found at index {index}");
    else
        Console.WriteLine("Not found");
    int[] arrayA = {1, 2, 3};
    int[] arrayB = arrayA; //Sure?!
    int[] ar = {1, 2, 3};
    int[] bar = new int[ar.Length];
    Array.Copy(ar, bar, ar.Length);
    int teZoekenGetal = 12;
    
    int[] getallen = {5, 10, 12, 25, 16};
    
    bool gevonden = false;
    int index = -1;
    
    for (int i = 0; i < getallen.Length; i++)
    {
        if (getallen[i] == teZoekenGetal)
        {
            gevonden = true;
            index = i;
        }
    }
    string[] products = {"apples", "pears", "melons"};
    double[] prices = {3.3, 6.2, 2.9};
    Console.WriteLine("Which price do you need?");
    string userchoice = Console.ReadLine();
    bool found = false;
    int productIndex = -1;
    
    int counter = 0;
    while (counter < products.Length && userchoice != products[counter])
    {
        counter++;
    }
    
    if (counter != products.Length) //product found!
    {
        found = true;
        productIndex = counter;
    }
    
    
    if (found == true)
    {
        Console.WriteLine($"Price for {userchoice} is {prices[productIndex]}");
    }
    else
    {
        Console.WriteLine("Not found");
    }
    bool found = false;
    int productIndex = -1;
    
    int counter = 0;
    while (counter < products.Length && userchoice != products[counter])
    {
        counter++;
    }
    
    if (counter != products.Length) //product found!
    {
        found = true;
        productIndex = counter;
    }
    
    if (found == true)
    {
        Console.WriteLine($"Price for {userchoice} is {prices[productIndex]}");
    }
    else
    {
        Console.WriteLine("Not found");
    }
    string origineleZin = "Ik ben Tom";
    char[] karakters = origineleZin.ToCharArray();
    karakters[8] = 'i';
    string nieuweZin = new string(karakters);
    Console.WriteLine(nieuweZin);
    char[] arrayOfLetters = {'h', 'a', 'l', 'l', 'o'};
    arrayOfLetters[2] = 'x';
    string word = new string(arrayOfLetters);
    Console.WriteLine(word);