arrow-left

All pages
gitbookPowered by GitBook
1 of 6

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Oefeningen

hashtag
Oefening 1: prijzen met foreach (h11-prijzen)

hashtag
Leerdoelen

  • foreach

  • combinatie controlestructuren

hashtag
Functionele analyse

We willen enkele gegevens (prijzen) inlezen van de gebruiker en slechts sommige van deze prijzen tonen.

hashtag
Technische analyse

  • Werk onderstaande opdracht uit in een statische methode AskForPrices.

  • Maak eerst een array die tot 20 prijzen (type double) kan bewaren.

  • Vraag aan de gebruiker om 20 prijzen in te voeren en bewaar elke prijs in de array.

hashtag
Voorbeeldinteractie

hashtag
Oefening 2: speelkaarten (h11-speelkaarten)

hashtag
Leerdoelen

  • foreach genest

  • List

hashtag
Functionele analyse

We willen een kaartenspel programmeren. Om dat te doen, moeten we zeker een lijst kaarten kunnen aanmaken en ook kaarten te kunnen trekken.

hashtag
Technische analyse

  • Maak een klasse PlayingCard.

    • Een kaart heeft 2 eigenschappen (properties)

      • een getal van 1 tot en met 13 (boer=11, koningin= 12, heer= 13):

hashtag
Voorbeeldinteractie

hashtag
Oefening 3: organiseren van studenten (h11-organizer)

hashtag
Functionele analyse

We gaan nu de Student-klasse uit een hoofdstuk 8 gebruiken om een List<Student> van studenten aan te maken. Daarna zullen we een menu tonen om gegevens over studenten in te voeren (student toevoegen, student aanpassen, gegevens over student tonen, student verwijderen). Op de werkvloer worden deze mogelijkheden "CRUD"-operaties genoemd (create, read, update, delete).

hashtag
Technische analyse

  • Maak eerst (in de klasse Student) een statische methode ExecuteStudentMenu() zonder return type. Deze zal, zolang de gebruiker niet aangeeft dat hij wil stoppen, een menu tonen waarin we gegevens kunnen bekijken of wijzigen.

  • Het menu toont steeds volgende opties:

hashtag
mogelijkheid 1: gegevens van de studenten tonen

Deze keuze toont, via de methode ShowOverview() en een foreach-lus, de gegevens van elke student in de lijst. Elk rapport wordt gevolgd door een lege regel. Het is niet erg als er op het einde één regel te veel is.

Voorbeeldinteractie

Nadat er al twee studenten zijn aangemaakt:

hashtag
mogelijkheid 2: een nieuwe student toevoegen

Deze keuze voegt een nieuwe student toe.

Voorbeeldinteractie

Bij nul studenten:

hashtag
mogelijkheid 3: een student aanpassen

Deze keuze staat toe de naam, leeftijd, klasgroep of een van de drie cijfers van de student aan te passen.

Voorbeeldinteractie

Vlak na het aanmaken van een eerste student:

hashtag
mogelijkheid 4: een student verwijderen

Voorbeeldinteractie

Nadat er al twee studenten zijn aangemaakt:

H11: Arrays en klassen

Doorloop vervolgens m.b.v. een foreach-lus de volledige array.

  • Toon enkel de elementen op het scherm wiens prijs hoger of gelijk is aan €5.00.

  • Toon op het einde van het programma het gemiddelde van alle prijzen (dus inclusief de lagere prijzen).

  • Toon alles afgerond tot twee cijfers na de komma.

  • een kleur, de zogenaamde "suite". Deze stel je voor via een enumtype Suites en kan als waarden Clubs (klaveren), Hearts (harten), Spades (schoppen) of Diamonds (ruiten) zijn.

  • Schrijf een statische methode GenerateDeck die een boek kaarten teruggeeft.

    • Schrijf om dit te bereiken twee foreach loops die de 52 kaarten van een standaard pak in een List<PlayingCard> plaatsen.

      • Doe dit door één lus in een andere te nesten.

  • Schrijf ook een statische methode ShowShuffledDeck(List<PlayingCard> cards) die telkens een willekeurige kaart uit de deck trekt en deze aan de gebruiker toont. De kaart wordt na het tonen dus uit de lijst verwijderd.

    • Doe dit door in iedere stap een willekeurige, geldige index in de lijst met kaarten te berekenen en die kaart uit de lijst te halen.

  • gegevens van de studenten tonen
  • een nieuwe student toevoegen

  • gegevens van een bepaalde student aanpassen

  • een student uit het systeem verwijderen

  • stoppen

  • Je mag voorlopig veronderstellen dat de gebruiker geldige indexposities en gegevens invoert.

  • Gelieve 20 prijzen in te geven.
    > 1
    > 1
    > 1
    > 21
    > 1
    > 1
    > 1
    > 1
    > 1
    > 17
    > 1
    > 1
    > 1
    > 14
    > 1
    > 1
    > 1
    > 1
    > 1
    > 1
    21.00
    17.00
    14.00
    Het gemiddelde bedrag is 3.00.
    9 Hearts
    4 Clubs
    ... (er volgen nog 50 willekeurige combinaties)
    Alle kaarten zijn getoond.
    Wat wil je doen?
    > 1
    Joske Vermeulen, 21 jaar
    Klas: EA2
    
    Cijferrapport:
    **********
    Communicatie:             12
    Programming Principles:   15
    Web Technology:           13
    Gemiddelde:               13.3
    
    Mieke Vermeulen, 22 jaar
    Klas: EB1
    
    Cijferrapport:
    **********
    Communicatie:             10
    Programming Principles:   16
    Web Technology:           16
    Gemiddelde:               13.3
    
    Wat wil je doen?
    Wat wil je doen?
    > 1
    Wat wil je doen?
    > 2
    Wat wil je doen?
    > 1
    Onbekend Onbekend, 18 jaar
    Klas: EA1
    
    Cijferrapport:
    **********
    Communicatie:             10
    Programming Principles:   10
    Web Technology:           10
    Gemiddelde:               10.0
    
    Wat wil je doen?
    Wat wil je doen?
    > 3
    Wat is de indexpositie van de student die je wil aanpassen?
    > 0
    Wat wil je aanpassen?
    1. Naam
    2. Leeftijd
    3. Klasgroep
    4. Cijfer communicatie
    5. Cijfer programmeren
    6. Cijfer webtechnologie
    > 4
    Wat is de nieuwe waarde?
    > 13
    Wat wil je doen?
    > 1
    Onbekend Onbekend, 18 jaar
    Klas: EA1
    
    Cijferrapport:
    **********
    Communicatie:             13
    Programming Principles:   10
    Web Technology:           10
    Gemiddelde:               11.0
    
    Wat wil je doen?
    Wat wil je doen?
    > 4
    Wat is de indexpositie van de te verwijderen student?
    > 0
    Wat wil je doen?
    > 1
    Mieke Vermeulen, 22 jaar
    Klas: EB1
    
    Cijferrapport:
    **********
    Communicatie:             10
    Programming Principles:   16
    Web Technology:           16
    Gemiddelde:               13.3
    
    Wat wil je doen?

    List

    hashtag
    List

    Een List<> collectie is de meest standaard collectie die je kan beschouwen als een veiligere variant op een een doodnormale array.

    circle-info

    De Generieke List<> klasse bevindt zich in de System.Collections.Generic namespace. Je dient deze namespace dus als using bovenaan toe te voegen wil je deze klasse kunnen gebruiken.

    hashtag
    List aanmaken

    De klasse List<> is een zogenaamde generieke klasse. Tussen de < >tekens plaatsen we het type dat de lijst zal moeten gaan bevatten. Bijvoorbeeld:

    • List<int> alleGetallen= new List<int>();

    • List<bool> binaryList = new List<bool>();

    • List<Pokemon> pokeDex = new List<Pokemon>();

    Zoals je ziet hoeven we bij het aanmaken van een List geen begingrootte mee te geven, wat we wel bij arrays moeten doen. Dit is een van de voordelen van List: ze groeien mee.

    hashtag
    Elementen toevoegen

    Via de Add() methode kan je elementen toevoegen aan de lijst. Je dient als parameter aan de methode mee te geven wat je aan de lijst wenst toe te voegen. Deze parameter moet uiteraard van het type zijn dat de List verwacht.

    In volgende voorbeeld maken we een List aan die objecten van het type string mag bevatten en vervolgens plaatsen we er twee elementen in.

    hashtag
    Elementen indexeren

    Het leuke van een List is dat je deze ook kan gebruiken als een gewone array, waarbij je mbv de indexer elementen kan aanroepen. Stel bijvoorbeeld dat we een lijst hebben met minstens 4 strings in. Volgende code toont hoe we de string op positie 3 kunnen uitlezen en hoe we die op positie 2 overschrijven:

    Ook de klassieke werking met for blijft gelden. De enige aanpassing is dat List<> niet met Length werkt maar met Count.

    hashtag
    Wat kan een List nog?

    Interessante methoden en properties voorts zijn:

    • Clear() :methode die de volledige lijst leegmaakt

    • Insert(): methode om element op specifieke plaats in lijst toe te voegen, bijvoorbeeld:

      voegt de string toe op de tweede plek en schuift de rest naar achter

    hashtag
    Foreach loops

    Je kan met een eenvoudige for of while-loop over een lijst itereren, maar het gebruik van een foreach-loop is toch handiger.

    Dit is dan ook de meestgebruikte operatie om eenvoudig en snel een bepaald stuk code toe te passen op ieder element van de lijst:

    hashtag
    Kennisclip

    Extra oefeningen

    hashtag
    Oefening 4: gemiddelde cijfers opvragen per vak

    hashtag
    Leerdoelen

    • foreach

    • combinatie controlestructuren

    hashtag
    Functionele analyse

    Pas je oefening met CRUD-operaties op Student aan zodat we ook het gemiddelde per vak kunnen opvragen.

    hashtag
    Technische analyse

    • Je werkt nog steeds met een List<Student>.

    • Optie 5, 6 en 7 tonen nu het gemiddelde voor communicatie, programmeren of webtechnologie (in die volgorde).

    • Optie 8 stopt het menu.

    hashtag
    Voorbeeldinteractie

    Nadat er al drie studenten zijn aangemaakt, met 12, 17 en 19 op communicatie:

    hashtag
    Oefening 5: hoger, lager

    hashtag
    Leerdoelen

    • List

    hashtag
    Functionele analyse

    Gebruik je eerdere code voor PlayingCard om een spelletje "hoger", "lager" toe te voegen.

    hashtag
    Technische analyse

    • Eerst wordt GenerateDeck gebruikt om een lijst aan te maken en toe te kennen aan een variabele.

    • Een willekeurig getal wordt gegenereerd tussen 0 en de maximale index van een element in de lijst.

    • De kaart op deze indexpositie wordt toegekend aan een variabele van type PlayingCard

    hashtag
    Voorbeeldinteractie

    Foreach en var

    hashtag
    Foreach loops

    Wanneer je geen indexering nodig hebt, maar toch snel over alle elementen in een array wenst te gaan, dan is het foreach statement een zeer nuttig is. Een foreach loop zal ieder element in de array een voor een in een tijdelijke variabele plaatsen (de iteration variable). Volgende code toont de werking waarbij we een array van doubles hebben en alle elementen er in op het scherm willen tonen:

    De eerste keer dat we in de loop gaan zal het element killdeathRates[0] aan kdrate

    Arrays van objecten

    hashtag
    Object arrays

    We vallen in herhaling: ook arrays van objecten zijn mogelijk, net zoals je arrays van valuetypes al kon maken. Ook hier is de werking grotendeels dezelfde. Maar ook hier moet je er rekening mee houden dat de individuele objecten in je array reference values hebben en dus mogelijk null zijn.

    met naam
    previousCard
    .
  • Deze kaart wordt ook verwijderd uit de lijst.

  • Volgende stappen herhalen zich zo lang alle kaarten niet zijn gespeeld:

    • De waarde van previousCard wordt getoond.

    • Een willekeurig getal wordt gegenereerd tussen 0 en de maximale index van een element in de lijst.

    • De kaart op deze indexpositie wordt toegekend aan een variabele van type PlayingCard met naam currentCard.

    • Deze kaart wordt ook verwijderd uit de lijst.

    • De gebruiker krijgt de vraag of de waarde van currentCard hoger, lager of gelijk aan de waarde van previousCard is.

    • currentCard vervang previousCard

  • Het spel stopt als de gebruiker een fout maakt of als het spel kaarten op is.

  • Noem de methode om het spel op te starten HigherLower()

  • Wat wil je doen?
    > 5
    Gemiddelde cijfer op communicatie: 16
    
    Wat wil je doen?
    Klaar om te spelen.
    De vorige kaart had waarde 7.
    Hoger (0), lager (1) of gelijk (2)?
    > 0
    De vorige kaart had waarde 11.
    Hoger (0), lager (1) of gelijk (2)?
    > 1
    De vorige kaart had waarde 2.
    Hoger (0), lager (1) of gelijk (2)?
    > 2
    Spel voorbij!
  • List<string[]> listOfStringarrays = new List<string[]>();

  • Contains(): geef als parameter een specifiek object mee (van het type dat de List<> bevat) om te weten te komen of dat specifieke object in de List<> terug te vinden is. Indien ja dan zal true worden teruggeven.
  • IndexOf(): geeft de index terug van het element item in de rij. Indien deze niet in de lijst aanwezig is dan wordt -1 teruggegeven.

  • RemoveAt(): verwijder een element op de index die je als parameter meegeeft.

  • List<> klassearrow-up-right
    toegewezen worden voor gebruik in de loop-body, vervolgens wordt
    killdeathRates[1]
    toegewezen, enz.

    Het voordeel is dat je dus geen teller/index nodig hebt en dat foreach zelf de lengte van de array zal bepalen.

    circle-exclamation

    hashtag
    Opgelet bij het gebruik van foreach loops

    • De foreach iteration variable is read-only: je kan dus geen waarden in de array aanpassen, enkel uitlezen.

    • De foreach gebruik je enkel als je alle elementen van een array wenst te benaderen. In alle andere gevallen zal je een ander soort loop (for, while, etc.) moeten gebruiken.

    hashtag
    var keyword

    C# heeft een var keyword. Je mag dit keyword gebruiken ter vervanging van het type (bv int) op voorwaarde dat de compiler kan achterhalen wat het type moet zijn.

    circle-exclamation

    Opgelet: het var keyword is gewoon een lazy programmer syntax toevoeging om te voorkomen dat je als programmer niet constant het type moet schrijven

    Bij javascript heeft var een totaal andere functie: het zegt eigenlijk "het type dat je in deze variabele kan steken is...variabel", m.a.w. het kan de ene keer een string zijn, dan een int. Bij C# gaat dit niet: eens je een variabele aanmaakt dan zal dat type onveranderbaar zijn.

    JavaScript is a dynamically typed language, while c# is (usually) a statically typed language (stackoverflow.comarrow-up-right)

    hashtag
    var en foreach

    Wanneer je de Visual Studio code snippetarrow-up-right voor foreach gebruikt foreach [tab][tab] dan zal deze code ook een var gebruiken voor de iteration variabele. De compiler kan aan de te gebruiken array zien wat het type van een individueel element in de array moet zijn. De foreach van zonet kan dus herschreven worden naar:

    hashtag
    Kennisclip

    • var keywordarrow-up-right

    • De foreach looparrow-up-right

    hashtag
    Array van objecten aanmaken

    Een array van objecten gebeurt als volgt:

    Maar: er staan nog géén objecten in deze array. Alle elementen in deze array zijn nu nog null. Je zou kunnen zeggen dat we enkel nog maar de parkeerlijnen hebben aangemaakt.

    Willen we nu elementen in deze array plaatsen dan moeten dit ook expliciet doen:

    Uiteraard kan dit ook in een loop indien relevant voor de opgave.

    Probeer je objecten te benaderen die nog niet bestaan dan zal je uiteraard een NullReferenceException krijgen.

    hashtag
    Array initializer syntax

    Je kan ook een variant op de object initializer syntax gebruiken waarbij de objecten reeds van bij de start in de array worden aangemaakt. Als extra'tje zorgt dit er ook voor dat we geen lengte moeten meegeven, de compiler zal deze zelf bepalen. Volgende voorbeeld maakt een nieuwe array aan die bestaat uit 2 nieuwe studenten, alsook 1 bestaande (jos):

    Let op de kommapunt helemaal achteraan. Die wordt als eens vergeten.

    hashtag
    Individueel object benaderen

    Van zodra een object in de array staat kan je deze vanuit de array aanspreken d.m.v. de index :

    hashtag
    Arrays als parameters en return

    Ook arrays mag je als parameters en returntype gebruiken in methoden. De werking hiervan is identiek aan die van value-types.

    List<String> myStringList = new List<String>();
    myStringList.Add("This is the first item in my list!");
    myStringList.Add("And another one!");
    Console.WriteLine(myStringList[3]);
    myStringList[2] = "andere zin";`
    for(int i = 0 ; i < myStringList.Count; i++)
    {
        Console.WriteLine(myStringList[i])
    }
    myStringList.Insert(1,"A fourth sentence");
    List<int> integerList=new List<int>();
    integerList.Add(2);
    integerList.Add(3);
    integerList.Add(7);
    
    foreach(int prime in integerList)
    {
       Console.WriteLine(prime);
    }
    double[] killdeathRates= {1.2, 0.89, 3.15, 0.1};
    foreach (double kdrate in killdeathRates)
    {
       Console.WriteLine($"Kill/Death rate is {kdrate}");
    }
    var getal= 5; //var zal int zijn
    var myArray= new double[20]; //var zal double[] zijn
    var tekst= "Hi there handsome"; //var zal string zijn
    foreach (var kdrate in killdeathRates)
    {
       Console.WriteLine($"Kill/Death rate is {kdrate}");
    }
    Student[] mijnKlas = new Student[20];
    mijnKlas[0]= new Student();
    mijnKlas[7]= new Student();
    Student jos=new Student();
    Student[] mijnKlas = new Student[]
        {
            new Student(),
            new Student(),
            jos,
            new Student()
        };
    mijnKlas[3].Name= "Vincent Lagasse";