Twee prompts bij deze proef. Met Coach krijg je hulp terwijl je de proef maakt, zonder code. Met Quoteer laat je je afgewerkte code streng verbeteren, volgens de puntenverdeling en het boeteblad.
Let op: de quoteerprompt is recent gemaakt en werd niet gebruikt bij de originele proef. De score die je ermee krijgt, zegt dus niets over de scores van toen. Had de proef geen puntenverdeling, dan is die achteraf toegevoegd.
Opgave vaardigheidsproef 1819, module 1 - Intergalactic pizzaphone bestel-module
Geschatte tijd om dit te maken: 120 minuten
Introductie
IPP - Intergalactic PizzaPhone - is de populairste pizza-delivery service van het heelal. Ze hebben jouw hulp ingeschakeld om een nieuwe bestelmodule te maken. Jouw module moet ervoor zorgen dat de telefoonoperators de bestellingen veel sneller kunnen invoeren en doorgeven aan de keuken.
yIghoSDo’ chenmoHwI’!
(Klingon voor: Veel succes maker!)
Opgave
De opgave bestaat uit twee delen:
- Deel 1 - Bestelmodule (15 punten). Alle prijzen zijn uitgedrukt in Intergalactic Credits (IC). De bestelmodule bestaat uit een aantal onderdelen:
- Bevraging: de klant krijgt een aantal vragen (type pizza enzovoort)
- Visualisatie: de bestelling wordt getoond op het scherm
- Berekening: de totaalprijs wordt berekend
- Ticket: de totaalprijs wordt getoond
- Deel 2 - Uitbreidingen (5 punten). Die worden achteraan de opgave uitgelegd. Werk eerst deel 1 af voor je aan de uitbreidingen begint. De uitbreidingen zijn:
- Een random kortingsmodule
- Een benzineberekenaar
Ga ervan uit dat de gebruiker géén foute invoer doet, behalve waar de opgave zegt wat er dan moet gebeuren.
Deel 1 - Bestelmodule
Bevraging (5 punten)
Het programma stelt een reeks vragen. De gebruiker (de operator) voert telkens zijn keuze in en gaat naar de volgende vraag.
Pizzabodem?
De pizzabodem kan zijn:
- Cheesy crust (kost 5 IC)
- Martian meal (kost 2.8 IC)
- Pegasus lime (kost 12.4 IC)
Wordt “Martian meal” besteld, dan moet de operator vertellen dat die bodem niet geschikt is voor kinderen onder de 54 jaar. Het programma vraagt daarom de leeftijd, en gaat enkel verder als die groter dan of gelijk aan 54 is. Is de klant jonger, dan verschijnt “ERROR” in rode letters op het scherm en stopt het programma.
Topping?
De gebruiker kan kiezen uit 2 soorten toppings, of zonder topping verder gaan. De prijs van een topping kan afhangen van de gekozen bodem:
- Endrali pies
- kost 10 IC op cheesy crust
- kost 15 IC op Martian meal en Pegasus lime
- Italian cheese
- kost 5.5 IC op alle bodems
- Geen
- kost niets
Chef’s extra?
Kiest de klant geen topping, dan kan hij voor 1 IC de chef’s extra (een dikke fluim) aan zijn pizza toevoegen.
Afstand tot aarde in lichtjaar?
- Als laatste vraag geeft de gebruiker door hoe ver het afleveradres is, in lichtjaar. Dat moet een geheel getal van 1 tot en met 100 zijn.
- Geeft de gebruiker een getal buiten die grenzen in, dan verschijnt “ERROR” in rode letters op het scherm en stopt het programma.
Visualisatie (4 punten)
De pizzabestelling wordt als volgt gevisualiseerd:
- Eerst verschijnt een letter in een kleur die afhangt van de bodem:
- gele C voor cheesy crust
- rode M voor Martian meal
- groene P voor Pegasus lime
- Na de bodemletter verschijnt een O in de kleur van de topping:
- blauw voor Endrali pies
- geel voor Italian cheese
- koos de gebruiker geen topping maar wel de chef’s extra, dan verschijnt in de plaats een witte E
- koos de gebruiker geen topping en ook geen chef’s extra, dan verschijnt er geen O maar een gele Z
Voorbeelden: Martian meal met Endrali pies, Pegasus lime zonder topping en zonder chef’s extra, en cheesy crust met de chef’s extra.
MO
PZ
CE
Prijsberekening (3 punten)
De prijs van de pizza is de som van de prijzen hierboven.
Daarna berekent het programma de transportkosten. Die hangen af van de afstand tot de aarde in lichtjaar:
- Afstand kleiner dan 10: 25 IC
- Afstand groter dan of gelijk aan 10: \(\sqrt{s/p}+p\) (met p de prijs van de pizza en s de afstand)
- Werd de chef’s extra gekozen, dan krijgt de klant 10% korting op de transportkosten.
- Pas daarna wordt de transportprijs naar beneden afgerond op een geheel getal.
Ticket (3 punten)
Er verschijnt een ticket met de volledige bestelling in tekst, met achter elk onderdeel, na een tab, de prijs. Onderaan volgt de totaalprijs. Voorbeeld van een ticket voor een Martian meal met Italian cheese op 12 lichtjaar:
Martian meal 2,8 IC
Italian cheese 5,5 IC
--------------------------
Totaal pizza 8,3 IC
Afstand 12 lichtjaar
Transportkosten 9 IC
--------------------------
TOTAAL 17,3 IC
Deel 2 - Uitbreidingen
Random kortingsmodule (2 punten)
De standaardkorting voor de chef’s extra op de transportkosten is 10%. Met deze uitbreiding krijgt de klant in de plaats een willekeurige korting: een geheel percentage van 0 tot en met 50%.
Benzinemodule (3 punten)
Deze module berekent hoeveel ton benzine er nodig is om de pizza bij de klant te krijgen. Er is 1 ton benzine nodig per 5 lichtjaar. Woont de klant op 12 lichtjaar, dan zijn er 3 ton nodig, waarvan de derde ton maar voor 2/5 (40%) opgebruikt wordt.
De module toont het aantal ton benzine dat ingeladen moet worden, gevolgd door hoeveel procent van de laatste ton nodig is. Wordt de laatste ton volledig opgebruikt (bijvoorbeeld als de klant op 10 lichtjaar woont), dan toon je 100%.
De benzinemodule toont die informatie onderaan het ticket:
Martian meal 2,8 IC
Italian cheese 5,5 IC
--------------------------
Totaal pizza 8,3 IC
Afstand 12 lichtjaar
Transportkosten 9 IC
--------------------------
TOTAAL 17,3 IC
*********************************
Informatie voor de piloot:
Benzine tonnen in te laden 3
Nodig van de laatste ton: 40%
Voorbeeld uitvoer
Tekst die start met “>” is invoer van de gebruiker. De visualisatie (hier MO) staat in kleur.
Welke bodem?
1. Cheesy crust
2. Martian meal
3. Pegasus lime
>2
Martian meal is niet geschikt voor kinderen onder de 54 jaar. Wat is je leeftijd?
>60
Welke topping?
1. Endrali pies
2. Italian cheese
3. Geen
>2
Afstand tot aarde in lichtjaar?
>12
MO
Martian meal 2,8 IC
Italian cheese 5,5 IC
--------------------------
Totaal pizza 8,3 IC
Afstand 12 lichtjaar
Transportkosten 9 IC
--------------------------
TOTAAL 17,3 IC
*********************************
Informatie voor de piloot:
Benzine tonnen in te laden 3
Nodig van de laatste ton: 40%
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.
Zoek de fouten
Volgende stukjes code komen uit echte oplossingen van deze vaardigheidsproef. Ze zijn hier en daar ingekort om de aandacht op de fout te leggen. Wat is er mis, of wat kan beter? Zoek het eerst zelf, en kijk dan pas naar de oplossing.
int keuze = Convert.ToInt16(Console.ReadLine());switch (keuze) { case 1: totaal += 5; int pType = Convert.ToInt16(Console.ReadLine()); switch (pType) { case 1: totaal += 10; topping = 1; break; case 2: totaal += 5.5; topping = 2; break; case 3: totaal += 0; break; } break; case 2: // enzovoortConsole.WriteLine("Laten we starten met de bestelling. Druk op 1 voor de pizzabodem, daarna 2 voor de topping, vervolgens 3 voor de chefs extra en tot slot 4 voor het afleveradres."); keuze = Convert.ToInt32(Console.ReadLine()); pizzabodem = Convert.ToString(Console.ReadLine()); CheesyCrust = Convert.ToString(Console.ReadLine()); MartianMeal = Convert.ToString(Console.ReadLine()); PegasusLime = Convert.ToString(Console.ReadLine()); EndraliPies = Convert.ToString(Console.ReadLine()); //Je moet een paar keer ENTER drukken alvorens je tot de vraag komt. //Pizzabodem if (keuze == 1){int toegestaanleeftijd = 1; // 0 is nee en 1 is ja. int toegestaanafstand = 1; // 0 is nee en 1 is ja.if (ToppingsKeuzeBodem1 == 1) { Console.WriteLine("Wat is de afstand van het afleveradres in lichtjaren?"); int AfleverAdres = Convert.ToInt32(Console.ReadLine()); if (AfleverAdres < 10) { int PizzaTotaal = bodem + topping; Console.WriteLine($"Het totaal is gelijk aan {PizzaTotaal} IC"); } else if (AfleverAdres >= 10) { int PizzaTotaal = (int)Math.Sqrt(AfleverAdres / 15) + martian + topping; Console.WriteLine($"Het totaal is gelijk aan {PizzaTotaal} IC"); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("ERROR"); } } else if (ToppingsKeuzeBodem1 == 2) { Console.WriteLine("Wat is de afstand van het afleveradres in lichtjaren?"); int AfleverAdres = Convert.ToInt32(Console.ReadLine()); if (AfleverAdres < 10) {PizzaTotaal = 25 + 5 + 10; //Verder: PizzaTotaal = 25 + 5 + 6; //Verder: PizzaTotaal = 25 + 5;Volgende commentaar, of een variant ervan, kwam bij heel wat studenten voor. Hoe had dit voorkomen kunnen worden?
java // Eindbedrag -> Had de pizzabodem en toppingprijzen niet apart opgeslagen // en kon het niet meer veranderen wegens tijdstekort.Console.WriteLine("Oei, hier ging iets mis."); Console.Clear(); Console.WriteLine("ERROR");goto end;double tussenkomst = adres / 5; int Tonnen = 0; if (tussenkomst <= 1) { Tonnen = 1; } else if (tussenkomst <= 2) { Tonnen = 2; } else if (tussenkomst <= 3) { Tonnen = 3; } //enz.Onderaan de code van een oplossing stond volgende commentaar:
// TE WEINIG TIJD AKA MISSCHIEN TE TRAAG GEWERKT SORRYMisschien heeft de student te traag gewerkt. Maar kijk eens naar zijn code in haar geheel:

Wat liep er mis?
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.