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.