Cesuur2 Deel 2
Bij de toepassing van een hogere cesuur moet je meer dan de traditionele 50 % van de vragen juist beantwoorden om te kunnen slagen. De cesuur of slaaggrens wordt hoger gelegd om te compenseren voor vragen die je juist hebt beantwoord door te gokken. Bij een examen met allemaal vragen met vier antwoordmogelijkheden zal je bijvoorbeeld 25 van de 40 vragen juist moeten beantwoorden om het examencijfer 10/20 te behalen.
Deel 2: Klasse MCExamenStudent (4pt)
De klasse MCExamenStudent bevat de volgende instantievariabelen:
- examen verwijst naar het MCExamen-object dat overeenstemt met het examen dat door de student werd afgelegd.
- student verwijst naar een Student-object.
- antwoorden stelt een array van boolean-arrays voor. Voor elke vraag wordt zo een boolean-array bijgehouden die aangeeft welke van de antwoordmogelijkheden door de student geselecteerd werden (het kan dus dat er voor een vraag meerdere opties aangeduid moeten worden om correct te zijn). Bijvoorbeeld, stel dat het examen bestaat uit 5 vragen met elks 4 antwoordmogelijkheden, dan zal deze variabele een boolean-array van lengte 4 bijhouden voor elk van de vragen (dus 5 keer).
De klasse MCExamenStudent bevat de volgende constructor en methodes:
- Voeg een constructor toe met als parameters een MCExamen-object en een Student-object. Deze parameters worden gebruikt voor het initialiseren van de instantievariabelen. Vergeet ook niet de instantievariabele antwoorden te initialiseren als een lege array met een grootte gelijk aan het aantal vragen van het examen.
(1 punt)
- Voeg een methode leesAntwoorden toe met als parameter een File-object. Dit File-object verwijst naar een txt-bestand waarin de antwoorden voor elke vraag tekstueel worden weergegeven als volgt:
[vraagnummer]:[gegeven antwoord 1];[gegeven antwoord 2];...
De methode vult de instantievariabele antwoorden door het parsen van het meegegeven tekstbestand. De cijfers na de dubbele punt zijn dus de door de student geselecteerde antwoorden uit de lijst van mogelijkheden. Bijvoorbeeld, vraag 12 heeft 3 antwoord mogelijkheden: ‘groen’, ‘blauw’ en ‘rood’. Als de student ‘groen’ en ‘rood’ heeft aangeduid op zijn examen voor deze vraag, zal de lijn in het bestand voor deze vraag er als volgt uitzien: 12:1;3
. Merk dus op dat de nummering van de geselecteerde antwoorden in het bestand telkens start bij 1 (!).
Let op: de vragen hoeven niet in genummerde volgorde te staan en het is mogelijk dat voor een bepaalde vraag geen antwoorden zijn opgegeven in het txt-file. Indien geen antwoord is opgegeven wordt voor deze vraag voor elk antwoord false opgeslagen in de boolean array van deze vraag. Het is ook mogelijk dat het txt-file een antwoord bevat voor een vraag die niet bestaat (bijvoorbeeld 21:1;3
maar er bestaat geen vraag 21). Dit wordt beschouwd als een fout bij het inlezen. Indien er iets fout loopt bij het inlezen wordt volgende boodschap uitgeprint in de console: Er is een probleem met het meegegeven bestand!
.
Je kan het bestand antwoorden.txt
downloaden om je methode te testen. Dit bestand bevat de antwoorden voor 10 vragen (maar de methode moet uiteraard ook werken voor bestanden met meer of minder antwoorden!).
(1,5 punt)
- Voeg een methode berekenResultaat zonder parameters toe. Deze methode print een tekst uit naar de console die een overzicht geeft van het resultaat van de student op het examen. De tekst begint met de voor- en achternaam van de student en diens studentennummer tussen haakjes, gevolgd door de naam van het vak waaraan het examen gelinkt is. Vervolgens wordt er een lijn uitgeprint voor elke vraag van het examen die aangeeft of de student deze vraag juist of fout had, door de geselecteerde antwoordmogelijkheden te vergelijken met de correcte antwoordmogelijkheden van die vraag. En op het einde wordt het resultaat op 20 (al dan niet met hogere cesuur) van de student op het examen uitgeprint.
Met hogere cesuur:
Mitch Conner (138747732) - OOP
Vraag 1: juist
Vraag 2: fout
Vraag 3: juist
Vraag 4: fout
Vraag 5: juist
Eindscore: 9.38/20 met een hogere cesuur van 3.1166666666666667
Zonder cesuur:
Heidi Turner (138747731) - Data&Algo
Vraag 1: juist
Vraag 2: juist
Vraag 3: juist
Vraag 4: juist
Vraag 5: fout
Eindscore: 16.0/20
(1,5 punt)
Hierbij nog wat uitleg over de Dodona-testen voor deze oefening:
- test00objectConcept: test of de ingediende klasse de verwachte de klasse definitie heeft (interface/abstracte klasse/klasse/enum/…).
- test01inheritance: test of de ingediende klasse de verwachte superklasse heeft en de verwachte interfaces implementeert.
- test02variables_presence: test of de ingediende klasse de verwachte instantievariabelen en statische variabelen definieert.
- test03variables_staticInitialValue: test of de statische variabelen van de klasse geinitialiseerd worden met de verwachte waarde (indien van toepassing).
- test04constructorsPresence: test of de ingediende klasse de verwachte constructor(en) definieert (= test geen effect!) (indien van toepassing).
- test05constructor: test of de constructor het gewenste effect heeft (indien van toepassing).
- test06methodsPresent: test of de verwachte methodes aanwezig zijn in de ingediende klasse en of de methode definities overeenkomen met de verwachte definities (= test geen effect!).
- test07accessorsMutators: test of de ingediende klasse de al dan niet verwachte accessor- en mutatormethodes definieert en of deze het verwachte effect hebben.
- test08leesAntwoorden: test de leesAntwoorden-methode.
- test09leesAntwoorden_zonderExceptions: test de leesAntwoorden-methode enkel met scenario’s waarin geen exceptions verwacht worden.
- test10leesAntwoorden_enkelExceptions: test de leesAntwoorden-methode enkel met scenario’s waarin een exception verwacht wordt.
- test11leesAntwoorden_enkelFileNotFoundException: test de leesAntwoorden-methode enkel voor scenario’s waarin een FileNotFoundException verwacht wordt.
- test12berekenResultaat: test de berekenResultaat-methode.
- test13berekenResultaat_returnIpvSysout: test de berekenResultaat-methode maar er worden ook oplossingen aanvaard die de gevraagde tekst teruggeven als String ipv naar de console uitprinten.