Programmeren 1
Home

Programmeren 1

Draaiende radertjes
Laat de radertjes nog eens goed draaien voor het examen

Programmeren 1

Herhalingsoefeningen

Doelstelling

We zien geen nieuwe leerstof. We maken oefeningen uit drie categorieën en er is een vierde categorie voorzien voor wie heel vlot door de oefeningen gaat:

  1. Makkelijke vragen: er komen twee vragen van dit type op het examen in tweede zit, elk op 2,5 punten.
  2. Realistische vragen: er komen drie vragen van dit type op het examen in tweede zit, elk op 5 punten.
  3. Uitdagingen: deze vragen zijn iets moeilijker dan wat je op het examen zal krijgen, maar niet veel moeilijker. Ze vormen dus een goede voorbereiding.
  4. Grotere uitdagingen: deze vragen zijn een stuk moeilijker dan wat je op het examen zal krijgen. Je krijgt ook minder instructies.
Tenzij vermeld wordt in welke klasse je een methode moet plaatsen, plaats je ze in een aparte klasse Herhalingsoefeningen.

Makkelijkere vragen:

  1. Schrijf een methode Greet() die de gebruiker om zijn naam vraagt en dan "Hallo, GEBRUIKER!" op het scherm afprint. Zorg ervoor dat "GEBRUIKER" wordt vervangen door wat de gebruiker heeft ingevoerd. Als ik "Vincent" invoer, wordt er dus "Hallo, Vincent!" afgeprint.
  2. Schrijf een methode SuggestOutfit() die de gebruiker vraagt om de temperatuur (als int) in te geven. Als de gebruiker een temperatuur beneden de 15 ingeeft, wordt een bericht "Doe maar een jas aan!" geprint. Als de gebruiker minstens 15 ingeeft, wordt een bericht "Geen jas nodig!" afgeprint. Je mag veronderstellen dat de gebruiker enkel ints probeert in te geven.
  3. Schrijf een Enum met als naam Role en met als elementen TANK, HEALER, SWEEPER, SCOUT.

Realistische vragen:

  1. Schrijf een methode Sum(int[] numbers) die de som van alle getallen in numbers berekent en het resultaat afprint.
  2. Schrijf een methode DescribeRole die als argument een Role krijgt. Deze print niets, maar geeft een resultaat terug. Voor de verschillende rollen (in dezelfde volgorde als eerder) zijn de resultaten: "incasseert""geneest""creëert ruimte""verkent het terrein"
  3. Schrijf een struct Time met volgende velden van het type int: Seconds, Minutes en Hours. Schrijf ook een methode AddOneSecond die een Time als argument krijgt en een nieuwe Time teruggeeft die een seconde later voorstelt. Schrijf ook een methode AddOneHour met hetzelfde soort argument en return type en die werkt door AddOneSecond 3600 keer op te roepen.
  4. Maak oefening 5 van de vorige les (met de klasse Car)
  5. Schrijf een methode Factorial(int n) die de "faculteit" van het getal n berekent. De faculteit van n is n * (n-1) * (n-2) * ... * 2 * 1.
  6. Schrijf een struct Player met twee velden: een rol van het type dat je in de vierde makkelijkere vraag moet aanmaken en een naam (van type string). Schrijf ook een methode DescribePlayer die als argument een Player krijgt en die de naam van de speler afprint, gevolgd door ", die VERVULT ROL!". "VERVULT ROL" wordt ingevuld naargelang de rol van de speler. Bijvoorbeeld voor een speler met naam Vincent en rol HEALER wordt "Vincent, die geneest!" afgeprint.
  7. Schrijf een methode JoinFiles met drie argumenten. Elk argument is de naam van een bestand. De methode plakt de inhoud van het tweede bestand achter de inhoud van het eerste bestand en schrijft het resultaat weg in het derde bestand.
  8. Schrijf een methode GetYesOrNo(string question). Deze toont question aan de gebruiker en leest dan een lijn in. Als de invoer "yes" of "no" is, wordt true of false teruggegeven. Als de invoer iets anders is, wordt de vraag herhaald en wordt er opnieuw invoer gelezen, totdat de gebruiker een geldig antwoord heeft gegeven.
  9. Schrijf een methode DivideOne(). Deze leest een getal in en print het resultaat van de deling van 1.0 door het ingelezen getal. Zorg ervoor dat er een foutboodschap wordt geprint als de gebruiker iets ingeeft waardoor deze deling niet kan worden uitgevoerd. Gebruik géén if om na te gaan of de deling wel mogelijk is.
  10. Breid de eerdere oefening uit waarbij je twee bestanden aan elkaar moest hangen. Zorg ervoor dat er een foutboodschap wordt weergegeven als minstens één van de drie bestanden niet bestaat.

Uitdagingen:

  1. Maak oefening 6 van de vorige les
  2. Schrijf een methode Pyramid(int height). Deze krijgt als argument een getal dat de hoogte van een pyramide voorstelt. Ze print dan een pyramide van die hoogte, opgebouwd uit sterretjes. Bijvoorbeeld, als de gebruiker "4" intypt, print de methode:
       *
      ***
     *****
    *******
    
  3. Een schaakbord telt 8 rijen en 8 kolommen. Een paard beweegt op een schaakbord altijd in een "L", waarbij het lange beentje 2 vakjes voorstelt en het korte 1 vakje. Een beweging kan beginnen met het lange beentje of met het korte beentje. Schrijf een methode MoveHorse(int row, int column) die de huidige rij en kolom van een paard als argumenten krijgt. Ze geeft geen resultaat terug, maar print een tekening van het schaakbord. Hierbij wordt elke positie die het paard niet kan bereiken getekend als een punt (".") en elke positie die het paard wel kan bereiken als een sterretje ("*").
  4. Schrijf een methode DrawX(int size) die een "X" tekent in een rooster van "O"-symbolen. Dit rooster heeft size rijen en size kolommen. Voor size 3 wordt er bijvoorbeeld dit getekend:
    XOX
    OXO
    XOX
    
    Voor size 4 wordt er dit getekend:
    XOOX
    OXXO
    OXXO
    XOOX
    

Grote uitdagingen

  1. Breid je klasse BubbleSorter uit met een methode BubbleSort. Deze krijgt als invoer een array van getallen en past de array aan zodat hij gesorteerd is. Ze geeft geen resultaat terug. Dit werkt als volgt: de methode controleert eerst of de invoer al gesorteerd is (met de methode van dezelfde klasse die je al hebt) en doet niets als dat het geval is. Anders doorloopt ze de hele array en wisselt ze elk element dat kleiner is dan het element ervoor met dat element ervoor. Daarna controleert ze of het resultaat gesorteerd is en herhaalt ze dezelfde stap indien nodig, tot de hele array gesorteerd is. Schrijf gerust enkele extra methodes om de methode op te splitsen in kleinere taakjes.
  2. Schrijf een methode PlayOXO. Deze tekent eerst een rooster van drie rijen en kolommen, waarop eerst allemaal punten staan. Dan vraagt ze speler 1 om een "O" of een "X" in te vullen en vraagt ze op welke plaats dit teken moet komen. Dan vraagt ze hetzelfde aan speler 2, enzovoort. Als er ergens "OXO" gevormd is (in een rij, kolom of diagonaal), print ze een bericht dat de huidige speler het spel wint. Schrijf gerust enkele extra methodes om de methode op te splitsen in kleinere taakjes.

Eerste zit

Het examen in eerste zit is mondeling. Je legt kort enkele stukjes code uit die we in de les gemaakt hebben. Wees een kwartier op voorhand aanwezig.

Tweede zit

Het examen in tweede zit duurt even lang als de les, dus 2 uur en 35 minuten. Je mag gebruik maken van het Yellow Book, nota's op papier of andere handboeken. Je mag geen gebruik maken van "vraag en antwoord"-websites zoals StackOverflow. Je mag werken op Cloud9 of in Visual Studio of Visual Code en je mag je bestaande code op Cloud9 raadplegen. Je mag uiteraard niet communiceren met medecursisten tijdens het examen. Dit houdt ook in dat je niet in de workspace van medecursisten mag gaan kijken. Om dit te garanderen, gebruiken we Veyon. Als je deze software niet op je laptop kan installeren, maak je voor het examen gebruik van een desktop van het CVO. Je krijgt twee "makkelijkere" vragen en drie "realistische" vragen. Als je klaar bent met de vragen, maak je een zip en stuur je alles naar mij.

VN
2019-01-10