RSS

Beispiel 4

Sitzungsüberblick: Wiederholung (10.11.2008)
123
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;}