
| 1 | 2 | 3 | 4 | ||||||||||
| Zurück zur Kursübersicht | |||||||||||||
Römische Zahlen > DezimalDies nur am Rande für die, die's bzgl. der Thaller-Beispiele evt. interessiert:Den Wert 99 schreibt man nach der strengen Subtraktionsregel also so:
(-10) + 100 + (-1) + 10 = 99 X C I X = XCIX
Nach der eher ungebräuchlichen "weiten" Subtraktionsregel ergäbe sich hingegen:
(-1) + 100 = 99 I C = ICÜberwiegend wird sie so angewendet, daß nur die Zifferkombinationen (V)IIII, (L)XXXX und (D)CCCC verkürzt dargestellt werden dürfen. Erlaubt sind nach dieser "strengen" Subtraktionsregel daher nur diese Kombinationen: römisch
dezimal
IV
4
IX
9
XL
40
XC
90
CD
400
CM
900aus : http://netzreport.googlepages.com/online_umrechner_fuer_dez_roemzahl.html
(Dort auch mal im Quellcode den Javascript-Block ansehen.)Hier mit Unterscheidung Additions- / Subtraktionsregel (Anwendung strenge Subtraktionsregel):
#include <iostream>using namespace std;int Wert(char);// **********************************************************************//int main(){ char RoemischeZiffer[] = "cmlxiv"; // entspricht dez.: 964 int Dezimalzahl = 0; int n = sizeof(RoemischeZiffer)/sizeof(char) - 1; // ************************************************************** // hinten (bei niedigstem Wert) anfangen bis vorn (hoechster Wert) for(int i=n-1; i >= 0; i--) { // ****************************************************** // fuer jede Ziffer gilt: wenn aktuelle i kleiner nachfolgender, dann Subraktion // if ( Wert(RoemischeZiffer[i]) < Wert(RoemischeZiffer[i+1]) ) { // ********************************************** // pruefen, ob Notation fuer korrekte Subraktion stimmt // if ( (i+2) <= n )
if
(RoemischeZiffer[i+1] == RoemischeZiffer[i+2])
// Eingabe XCC soll sein CXC
{ cout << "Fehler 1" << endl; break; } if ( (i+3) <= n )
if
(RoemischeZiffer[i+1] == RoemischeZiffer[i+3]) // Eingabe XCIC soll sein ICXC
if (Wert(RoemischeZiffer[i]) >
Wert(RoemischeZiffer[i+2]))
{ cout << "Fehler 2"
<< endl; break; } if ((i-1) >= 0)
if
(Wert(RoemischeZiffer[i-1]) < Wert(RoemischeZiffer[i+1])) // Eingabe XIC soll sein ICX
{ cout << "Fehler 3" <<
endl; break; } // // **************************** // mit Subtraktion berechnen:
cout << "Ziffer " << i << ": "
<< Dezimalzahl << " -
" << Wert(RoemischeZiffer[i]) << endl;
Dezimalzahl =
Dezimalzahl - Wert(RoemischeZiffer[i]); } // ****************************************************** // oder mit Additions berechnen: else { cout << "Ziffer " << i << ": "
<< Dezimalzahl << " +
" << Wert(RoemischeZiffer[i]) << endl;
Dezimalzahl =
Dezimalzahl + Wert(RoemischeZiffer[i]); } } // ****************************************************** // Ausgabe (ausserhalb der Schleife): cout << Dezimalzahl << endl;}// **********************************************************************//int Wert (char Ziffer) { int DezimalWert=0; switch (Ziffer) { case 'i': DezimalWert=1; break; case 'v': DezimalWert=5; break; case 'x': DezimalWert=10; break; case 'l': DezimalWert=50; break; case 'c': DezimalWert=100; break; case 'd': DezimalWert=500; break; case 'm': DezimalWert=1000; break; } return DezimalWert;}