Beispiel 6: romZuArabien II

06.11.2016 06:30 Uhr
#include <iostream>

using namespace std;


int romZuArabien(char *rom);

int main()
{
char zeile[100] =
   "Dies ist ein Text aus mi Nacht.";
int worte[20];
int anzahlWorte;

worte[0]=0;
anzahlWorte=1;
for (int i=0; zeile[i] != '\0'; i = i + 1)
    if (zeile[i]==' ')
       {
       zeile[i]='\0';
       worte[anzahlWorte]=i+1;
       anzahlWorte=anzahlWorte+1;
       }

for (int i=0; i<anzahlWorte; i++)
    {
    cout << "Ein Wort: ";
    if (zeile[worte[i]]=='m') cout << romZuArabien(&zeile[worte[i]]);
    else cout << &zeile[worte[i]];
    cout << endl;
    }
}

int romZuArabien(
char            *rom)
{
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
int arabisch[10], stellen=0, resultat;

if (rom[0]=='0') return 0;

stellen=0;
for (int j; rom[stellen]!='\0'; stellen++)
    {
    for (j = 0; j < 7; j++)
        if (rom[stellen] == roemischeZiffern[j])
           {
           arabisch[stellen] = ziffernWert[j];
           break;
           }
    if (j == 7)
       cout << "Fehler!" << endl <<

               "In Ihrer Eingabe " << rom << " ist " << rom[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 (int j=0; j < stellen; j++) resultat += arabisch[j];

return resultat;
}

Beispiel 6: Erläuterungen I

#include <iostream>

using namespace std;


int romZuArabien(char *rom);

int main()
{
char zeile[100] =
   "Dies ist ein Text aus mi Nacht.";
int worte[20];
int anzahlWorte;

worte[0]=0;
anzahlWorte=1;
for (int i=0; zeile[i] != '\0'; i = i + 1)
    if (zeile[i]==' ')
       {
       zeile[i]='\0';
       worte[anzahlWorte]=i+1;
       anzahlWorte=anzahlWorte+1;
       }

for (int i=0; i<anzahlWorte; i++)
    {
    cout << "Ein Wort: ";
//Durch diese Trennung von Eingabe und Verarbeitung
//können wir die einmal definierte Funktion " romZuArabien" jetzt auch
//in völlig anderem Kontext verwenden --- z.B. für unser kleines
//"Übersetzungsproblem"!
    if (zeile[worte[i]]=='m') cout << romZuArabien(&zeile[worte[i]]);
    else cout << &zeile[worte[i]];
    cout << endl;
    }
}

int romZuArabien(
char            *rom)
{
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
int arabisch[10], stellen=0, resultat;

if (rom[0]=='0') return 0;

stellen=0;
for (int j; rom[stellen]!='\0'; stellen++)
    {
    for (j = 0; j < 7; j++)
        if (rom[stellen] == roemischeZiffern[j])
           {
           arabisch[stellen] = ziffernWert[j];
           break;
           }
    if (j == 7)
       cout << "Fehler!" << endl <<

               "In Ihrer Eingabe " << rom << " ist " << rom[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 (int j=0; j < stellen; j++) resultat += arabisch[j];

return resultat;
}

Anhang: example6.cpp

Schlagwörter: