Beispiel 9: Trennung von Verarbeitungsschritten II

24.10.2016 02:31 Uhr
#include <iostream>

using namespace std;

int main()
{
char roemisch[10];
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
int arabisch[10], stellen, resultat;
int j;


cout << "Bitte geben Sie eine Römische Zahl ein: ";
cin >> roemisch;

for (stellen=0; roemisch[stellen]!='\0'; stellen++)
    {
    for (j = 0; j < 7; j++)
        if (roemisch[stellen] == roemischeZiffern[j])
           {
           arabisch[stellen] = ziffernWert[j];
           break;
           }
    if (j == 7)
       cout << "Fehler!" << endl <<
               "In Ihrer Eingabe " << roemisch << " ist " << roemisch[stellen] <<

               " keine römische Ziffer.";
    }

for (int j=1; j < stellen; j++)
    if (arabisch[j] > arabisch[j-1])
       {
       arabisch[j] -= arabisch[j-1];
       arabisch[j-1] = 0;
       }

resultat=0;
for (j=0; j < stellen; j++) resultat += arabisch[j];

cout << roemisch << " in roemischer Notation entspricht " <<

        resultat << " in arabischer." << endl;

return 0;
}

Das hat den Vorteil, daß wir durch mehrfaches Durchlaufen einer konzeptuellen Schleife, unterschiedliche Verarbeitungsschritte klar voneinander separieren können – hier z.B. den Verarbeitungsschritt: „Löse die Konvention ‚kleiner vor größer‘ auf.