Op deze pagina vind je de uitwerkingen van de oefentoets die je hier kunt downloaden. Op de volgende pagina staan oude toetsen die ik in het verleden gegeven heb.
Opdracht 1: (Python, 4 punten)
Als input krijg je op de eerste regel een
-coördinaat en op de tweede regel een
-coördinaat. Beide inputs zijn gehele getallen ongelijk aan nul. Als output moet je geven in welk kwadrant het punt met dit
– en
-coördinaat zit. In het diagram hieronder zie je welke kwadranten er zijn.
Voorbeeld input:
3
-4
Voorbeeld output:
4

Uitwerking:
Een voorbeeld van een correct antwoord is:
x = int(input())
y = int(input())
if x>0 and y>0:
print(1)
elif x<0 and y>0:
print(2)
elif x<0 and y<0:
print(3)
else:
print(4)
Dit kun je ook met geneste if-statements doen:
x = int(input())
y = int(input())
if x>0:
if y>0:
print(1)
else:
print(4)
else:
if y>0:
print(2)
else:
print(3)
De punten krijg je voor de volgende elementen:
- Punt 1: Het correct inlezen van de input en deze omzetten naar integers.
- Punt 2: De juiste syntax bij if-statements (denk aan: eindig met dubbele punt, ingesprongen regels, etcetera).
- Punt 3: Correcte output van 1 als de input in kwadrant 1 zit.
- Punt 4: De andere kwadranten zijn allemaal ook correct gedaan.
Je kunt een ander antwoord controleren bij de opdracht Quadrant selection op Kattis.
Opdracht 2: (Python, 4 punten)
Als input krijg je een getal van precies zeven cijfers. Als output moet je 1 geven als dit getal begint met 555. Als output moet je 0 geven in alle andere gevallen.
Voorbeeld input:
5552314
Voorbeeld output:
1
Uitwerking:
Je kunt dit op twee manieren oplossen. De meest voorkomende manier is om eerst te delen door 10000 (naar beneden afgerond) om alleen de eerste drie cijfers over te houden en dan te controleren of dit getal 555 is.
getal = int(input())
eerste3 = getal // 10000
if eerste3 == 555:
print(1)
else:
print(0)
Een alternatieve manier is om te controleren of het begingetal tussen (en met) 5550000 en 5559999 zit. Een manier om dit te programmeren is als volgt:
getal = int(input())
if getal >= 5550000 and getal <= 5559999:
print(1)
else:
print(0)
Voor het eerste alternatief krijg je punten voor de volgende stappen:
- Punt 1: Het idee dat je de laatste vier cijfers moet verwijderen.
- Punt 2: Dit correct uitvoeren met // 10000
- Punt 3: De correcte syntax bij het if-statement (let op ==, de dubbele punt en dat de volgende regel ingesprongen is)
- Punt 4: Het programma geeft het juiste antwoord.
Voor het tweede alternatief krijg je de punten als volgt:
- Punt 1: Het idee dat de input minstens 5550000 en maximaal 5559999 moet zijn.
- Punt 2 en 3: Dit correct implementeren in een if-statement (met and en juiste syntax)
- Punt 4: Het programma geeft het juiste antwoord.
Je kunt een ander antwoord controleren bij de opdracht FYI op Kattis.
Opdracht 3: (Python, 6 punten)
Op de eerste regel van de input staat een getal. Dit geeft het aantal getallen op de volgende regel aan (al deze getallen zijn geheel en gescheiden met een spatie). Als output moet je op de eerste regel het aantal getallen printen dat groter is dan alle vorige getallen in de rij. Op de tweede regel print je al deze getallen (die groter zijn dan alle vorige in de rij) van klein naar groot met steeds een spatie ertussen.
Voorbeeldinput:
9
3 5 2 6 1 4 8 7 9
Voorbeeldoutput:
5
3 5 6 8 9
Uitwerking:
Een voorbeeld van een goed antwoord is:
aantal = int(input())
getallen = input().split()
grootsteGetal = int(getallen[0])
antwoord1 = 1
antwoord2 = getallen[0]
for i in range(1, aantal):
getal = int(getallen[i])
if getal > grootsteGetal:
antwoord1 += 1
antwoord2 += " " + getallen[i]
grootsteGetal = getal
print(antwoord1)
print(antwoord2)
Hierbij krijg je de punten als volgt:
- Punt 1: Correct inlezen van de variabelen, waarbij je de getallen uit je array later nog omzet naar integers.
- Punt 2: Je houdt correct bij wat het grootste getal is dat tot nu toe in de lijst voorgekomen is.
- Punt 3: Je lijst begint met het eerste element van de lijst van de input. Dit element tel je ook mee bij het antwoord wat op de eerste regel van de output komt.
- Punt 4: Je doet een for-loop waarin je met een if-statement controleert of alle getallen groter zijn dan de grootste die eerder in de lijst stond.
- Punt 5: De for-loop en het if-statement hebben een correcte syntax.
- Punt 6: Binnen het if-statement pas je de antwoorden op de juiste manier aan en je print deze op het eind van het programma op de juiste manier.
Bonus:
Dit probleem is geïnspireerd op de opdracht Greedily Increasing Subsequence op Kattis. Aangezien de getallen daar groot zijn en werken met grote strings langzaam is, wordt dit antwoord echter niet goed gerekend. Een snellere manier is om in een lijst bij te houden wat de antwoorden zijn. Daarvoor heb je echter wel een paar methodes nodig die je nog niet gehad hebt:
- lijst.append(3)
Dit voegt het element 3 aan het einde van de lijst toe. - print(*lijst)
Het sterretje zorgt ervoor dat de lijst zonder [] en met alleen spaties tussen de elementen geprint wordt.
Als uitdaging kun je proberen of je hiermee het probleem op Kattis kunt oplossen. Een correcte oplossing staat hieronder.
Antwoord probleem Kattis:
aantal = int(input())
getallen = input().split()
grootsteGetal = int(getallen[0])
antwoord = [grootsteGetal]
for i in range(1, aantal):
getal = int(getallen[i])
if getal > grootsteGetal:
antwoord.append(getal)
grootsteGetal = getal
print(len(antwoord))
print(*antwoord)
Opdracht 4: (3 punten)
Bereken met het algoritme van Euclides de grootst gemene deler van 2796 en 3528.
Uitwerking:
Hieronder staat het algoritme van Euclides uitgewerkt. Merk op dat je gewoon de MOD-functie op de CASIO (onder OPTN -> Numeric) of de Remainder-functie op de TI (onder Math -> Num) kunt gebruiken voor de modulo berekeningen:
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Uit de bovenstaande rekenstappen volgt
.
De punten krijg je op de toets voor de volgende zaken:
- Punt 1 krijg je voor het toepassen van de regel
. - Punt 2 en 3 krijg je voor het proces correct doorlopen tot
. Bij het maken van één rekenfout of schrijffout krijg je hiervan nog één punt. Bij het maken van twee of meer rekenfouten krijg je hiervan geen enkel punt.
Opdracht 5: (3 punten)
Je wilt een RSA wachtwoordpaar
maken en kiest hiervoor
,
en
. Bereken de waarde van
.
Uitwerking:
We hebben
. We moeten nu
zo berekenen dat
. We zien dat
werkt (het is met zo’n kleine
dus niet nodig om het algoritme van Euclides te gebruiken).
Je krijgt de punten voor de volgende stappen:
- Het eerste punt voor het correct berekenen van
. - Het tweede punt voor de observatie dat
. - Het derde punt voor hieruit
berekenen.
Opdracht 6: (3 punten)
In het jaar dat ik deze oefentoets maakte, zaten de volgende leerlingen in de wiskunde D-klas: Anne, Bart, Elis, Evan, Imre, Koen, Lars, Loek, Paul, Stef, Joris, Marte, Merel, Reyer, Roman, Yasin, Hannah, Jochem, Liesje, Marius, Nathan, Pepijn, Thomas, Eulalia, Florice, Kirstin, Maurits, Vivienne, Giamingga en Christiaan (geordend op lengte van naam en vervolgens op alfabet). Twee van deze namen zijn met dezelfde encryptiefunctie versleuteld die iedere letter telkens op dezelfde manier versleuteld. Uit de encryptiefunctie komt ABST en XAGAD. Welke namen zijn dit? Leg uit hoe je zeker kan weten dat er geen andere mogelijkheid is.
Uitwerking:
Er zijn maar twee vijfletterige namen waarvan de tweede en de vierde letter hetzelfde zijn. Dat zijn Merel en Reyer. Bij Reyer is de vijfde letter echter ook hetzelfde als de eerste letter. Dat is niet het geval bij XAGAD. Dit moet dus wel voor Merel staal. We weten dus dat ABST met een E begint. Dit moet dus Elis of Evan zijn. Aangezien Elis echter een l gemeenschappelijk heeft met Merel en er geen andere letters overeenkomen uit ABST en XAGAD moet het wel Evan zijn.
Je krijgt de punten voor de volgende stappen:
- Punt 1 krijg je voor het hebben van de naam Merel.
- Punt 2 krijg je voor het hebben van de naam Evan.
- Punt 3 krijg je voor een sluitende uitleg dat het alleen deze twee namen kunnen zijn. De uitleg hierboven is een voorbeeld van een correcte uitleg.
Opdracht 7: (3 punten)
We ordenen alle positieve getallen in het 3-tallig stelsel die geen 2 bevatten van klein naar groot. Zet het honderste getal uit deze lijst om naar het tientallig stelsel. Geef dit getal en ligt toe hoe je hieraan komt.
Uitwerking:
Als je de lijst maakt, zie je dat dit precies de binaire getallen zijn. honderd in binair is 64+32+4 en dus 1100100. Dit weer terug omzetten naar het tientallig stelsel is
.
De punten krijg je voor de volgende stappen:
- Punt 1 krijg je voor als duidelijk uit je uitwerking te zien is dat je honderd moet omzetten naar een binair getal.
- Punt 2 krijg je als je op het getal 1100100 uitkomt (als je dit anders doet dan met binaire getallen, krijg je punt 1 ook).
- Punt 3 krijg je als je het gevonden getal in het drietallig stelsel weer correct omzet naar het tientallig stelsel.





