Romeinse rekenmachine

advertisement
Romeinse rekenmachine
Gemaakt door Mark Veurink en Samuël Young
Inleiding
In dit bestand zit onze Romeinse rekenmachine. Als het goed is, is de hele rekenmachine ‘gedebugd’.
Het kan zijn dat er nog een foutje doorheen is geglipt, maar daar gaan we niet van uit. Vooral foutieve
invoer kan erg irritant zijn: delen door 0, te grote getallen, foutieve Romeinse getallen (bijvoorbeeld
MIM), negatieve getallen, Romeinse getallen in kleine letters, en zo zijn er nog veel meer te bedenken.
Met de voorbeelden die we hier hebben genoemd hebben we natuurlijk rekening gehouden. En dat is
natuurlijk niet alles waar we rekening mee hebben gehouden.
Werking
Even wat over de werking van de rekenmachine. We hebben geprobeerd de interface zo eenvoudig
mogelijk te houden. Links staat een blok voor de Romeinse getallen, in het midden een blok voor de
Arabische getallen en helemaal rechts staan de knoppen voor de bewerkingen. In totaal zijn er 6
velden waarin getalwaarden komen te staan. Eerst moeten er in de rij getal 1 en de rij getal 2 waarden
worden ingevuld. Dit kan zowel in het veld Romeinse getallen als in het veld Arabische getallen. Zodra
er in een veld van de Romeinse getallen een getal wordt geplaatst, wordt deze automatisch omgezet
in een Arabische waarde en komt in het vak getal 1 bij de Arabische getallen te staan. Dit werkt ook
andersom. Als je in Arabische getallen getal 2 een waarde invult verschijnt deze ook automatisch bij
de Romeinse getallen. Nadat er 2 getallen zijn opgegeven, kun je kiezen voor een bewerking. Deze
staan aan de rechterkant van het scherm. Dit zijn +, -, x, / en C. Met + worden de waarden van getal 1
en 2 opgeteld. Met – worden ze van elkaar afgetrokken, met x vermenigvuldigd en met / gedeeld door
elkaar. Na elk van deze bewerkingen komt de uitkomst te staan in de rij uitkomst. Ook de uitkomst
wordt gegeven in Romeinse getallen en Arabische getallen. Met de knop C (Clear) worden alle wordt
alle invoer gewist. Onder de velden uitkomst staan knoppen met het volgende symbool: >>. Met deze
knop wordt het getal dat in het veld daarboven staat overgezet in het word-document. Dit kan dus
alleen met de uitkomst, zowel met Romeinse als Arabische getallen. Maar eigenlijk spreekt de
interface wel voor zich. Nog wat interessants: als er een foutief Romeins getal wordt ingevoerd (zoals
MIM), maakt de rekenmachine daar automatisch een correct Romeins getal van (dus MIM wordt
MCMXCIX). De gebruiker kan ook direct zien hoe zijn foutieve invoer wordt geinterpreteerd. Als het
anders wordt geinterpreteerd dan de bedoeling was, kan hij dan ook direct een ander getal invoeren.
Requirements
Voor deze opdracht waren er de volgende eisen waaraan de rekenmachine moest voldoen:
-Romeinse getallen kunnen omzetten in Arabisch en omgekeerd
-Kunnen uitvoeren van eenvoudige bewerkingen
-Rekening houden met getallen van 0 tot 4000
-Eindresultaat kunnen overbrengen naar Word
-Een deelfunctie waarbij gebruik wordt gemaakt van resten i.p.v. komma’s
Aan al deze eisen voldoet onze rekenmachine. Soms kan hij nog net iets meer. Zo kunnen niet alleen
de getallen tot 4000, maar tot 4999. Hiervoor was namelijk geen enkele aanpassing nodig in het
algoritme.
Testplan
Uiteraard moet de rekenmachine getest worden. Deze test wordt uitgevoerd op het moment dat de
rekenmachine volgens ons helemaal af is. Dus negatieve getallen, te grote getallen enzovoort zijn op
dat moment allemaal al afgevangen. Het is meer een uiteindelijke test of het geheel goed werkt. We
hopen dat na deze test helemaal niets meer hoeft worden aangepast. De volgende dingen worden
getest:
-test 1: algoritme Arabische getallen naar Romeinse getallen. We voeren een aantal
Arabische getallen in, en kijken dan wat er uitkomt in Romeinse getallen en als het een foutief
getal betreft kijken we ook of deze wordt vervangen. Dit doen we met de volgende Arabische
getallen: 23, 2697, 4888, 5000, -2, -6784, 2.6, 3a46b2 .
-test 2: algoritme Romeinse getallen naar Arabische getallen. We voeren een aantal
Romeinse getallen in en kijken dan wat er uitkomt in Arabische getallen. Als we een foutief
Romeins getal invoeren kijken we ook of dit wordt vervangen door een correct getal. We doen
deze test met de volgende getallen: MCMLXXXVII, mcmlxxxvii, MIM, CDXIV, MMMMM, VaII.
-test 3: optellen. We kijken of de getallen correct worden opgeteld. Deze en ook de volgende
tests worden alleen uitgevoerd met Arabische getallen. Als dit goed gaat, gaan de Romeinse
ook automatisch goed, omdat bij de invoer zowel de Arabische getallen als de Romeinse
getallen worden ingevoerd en omdat de algoritmes daarvoor al zijn getest. We tellen de
volgende waarden op: 54 en 3, 2502 en 3602, 432 en 957.
-test 4: aftrekken. Net zo als de vorige test. Nu met de getallen 5 en 12, 12 en 5, 678 en 98.
-test 5: vermenigvuldigen. Net zo als de vorige test. Doen we met de volgende getallen: 65 en
72, 81 en 80, 658 en 598, 2 en 3.
-test 6: delen. Net zo als de vorige test. Nu met de volgende getallen: 6 en 2, 13 en 0, 8 en 5,
4763 en 57.
-test 7: overige knoppen. Dit betreft de knop C om te wissen en de beide knoppen >> om de
uitkomst in Word te zetten.
Testen
Uiteindelijk voeren we de tests uit. Omdat de tabellen erg overzichtelijk worden als we ook onze eigen
verwachtingen erin zetten, geven we een andere uitkomst dan verwacht in het rood aan.
Test 1: Arabische getallen naar Romeinse getallen
Arabisch getal
Correctie
23
2697
4888
5000
0
40000
-2
2
-6784
6784 => 0
2.6
3
3a46b2
-
Romeins getal
XIII
MMDCXCVII
MMMMDCCCLXXXVIII
te hoog
error: overloop
II
te hoog
III
III
Test 2: Romeinse getallen naar Arabische getallen
Romeins getal
Correctie
MCMLXXXVII
mcmlxxxvii
MCMLXXXVII
MIM
MCMXCIX
CDXIV
MMMMM
niets
VaII
VII
Arabisch getal
1987
1987
1999
414
0
7
Test 3: optellen
Getal 1
54
2502
432
Uitkomst
57
te hoog
1389
Getal 2
3
3602
957
Test 4: aftrekken
Getal 1
5
12
678
Getal 2
12
5
98
Uitkomst
negatief niet mogelijk
7
580
Test 5: vermenigvuldigen
Getal 1
65
81
658
2
Getal 2
72
80
598
3
Uitkomst
4680
te hoog
te hoog
6
Test 6: delen
Getal 1
6
13
8
4763
Getal 2
2
0
5
57
Uitkomst
3
delen door 0 onmogelijk
1r3
82 r 32
Test 7: overige knoppen
Knop
C(lear)
>> (Romeins)
>> (Arabisch)
Actie
alle velden leeg, alle variabelen leeg
Romeins getal in document
Arabisch getal in document
Conclusie
De rekenmachine is prima door de test gekomen. Test 3 tot en met 7 waren geheel foutloos. Bij test 1
en 2 zijn wel wat rode gedeelten te ontdekken. Het probleem dat als een getal te hoog is, er
automatisch een 0 van wordt gemaakt, is moeilijk te ondervangen. Het is wel mogelijk, maar daar zou
dan onevenredig veel programmeerwerk inzitten. Het is misschien wat storend om te zien, maar niet
een probleem waardoor het programma gaat vastlopen. We hebben besloten dit gewoon zo te laten.
Dit geld ook voor het getal waarin extra letters zijn geplaatst. Bij normaal gebruik komt dat natuurlijk
niet voor. En zelfs al worden die letters geplaatst, de rekenmachine loopt er niet door vast. Een
ernstiger probleem is de overloop-error bij 40000. Hierdoor loopt de rekenmachine wel vast. Dit
probleem is nu verholpen. Het probleem was dat als het bereik van een integer erg klein is. 40000 Valt
daarbuiten. Eerst was het zo dat de integer werd getest op waarden boven 4999, nu is het zo
aangepast dat de waarde van het veld eerst wordt gecontroleerd, en dat die waarde daarna pas in de
integer wordt geplaatst. Als het goed is, is het nu niet meer mogelijk foutmeldingen te maken met deze
rekenmachine. Volgens ons is hij helemaal klaar, alles doet het en veel invoerfouten worden
gecorrigeerd.
Download