Konwerter liczb rzymskich na arabskie.

0

Otóż muszę napisać taki oto konwerter używając wcześniej napisanego kodu:

// ConsoleApplication1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int Roman2Arabic(string Roman)
{
  int Number = 0;

  for(int i = 0; i <= 24; i++)
  {
    if(Roman[i] == 'I' && Roman[i+1] == 'V')
    {
        Number+=4;
        i++;
    }
    else if(Roman[i] == 'I' && Roman[i+1] == 'X')
    {
        Number+=9;
        i++;
    }
    else if(Roman[i] == 'X' && Roman[i+1] == 'L')
    {
        Number+=40;
        i++;
    }
    else if(Roman[i] == 'X' && Roman[i+1] == 'C')
    {
        Number+=90;
        i++;
    }
    else if(Roman[i] == 'C' && Roman[i+1] == 'D')
    {
        Number+=400;
        i++;
    }
    else if(Roman[i] == 'C' && Roman[i+1] == 'M')
    {
        Number+=900;
        i++;
    }
    else if(Roman[i] == 'I')
    {
        Number++;
    }
    else if(Roman[i] == 'V')
    {
        Number+=5;
    }
    else if(Roman[i] == 'X')
    {
        Number+=10;
    }
    else if(Roman[i] == 'L')
    {
        Number+=50;
    }
    else if(Roman[i] == 'C')
    {
        Number+=100;
    }
    else if(Roman[i] == 'D')
    {
        Number+=500;
    }
    else if(Roman[i] == 'M')
    {
        Number+=1000;
    }
    else if(!(Roman[i]))
    {
        break;
    }
  }
  return Number;
}
int main(int argc, char *argv[])
{
    string Roman;
    cout<<"Podaj rzymska liczbe: ";
    cin>>Roman;
    cout<<"Jest to arabska liczba: "
    <<Roman2Arabic(Roman);


    system("PAUSE");
    return EXIT_SUCCESS;
}
 

Napisać to samo tylko że z użyciem klas. Moja klasa wygląda tak:

 class Roman2Arabic
{
   private:
	  string Roman;   // Liczba rzymska
      string Number;  // Liczba arabska
   public:
	  void read ()
	{
		cout<<"Podaj liczbe Rzymska: ";
		cin>>Roman;
	}
      void write ()
	{
		cout<<"Podana liczba jako arabska liczba to: "
		<<Roman2Arabic(Roman);
	}

Następnie mam

 int Roman2Arabic(string Roman)

I dalej mam pętle.

Proszę o "wyjaśnienie" mi zasady "zbudowania" tej klasy i wskazanie jak poprawnie umieścić pętlę i wskazywanie wyniku aby program działał poprawnie, gdyż z przykładowych programów (każdy jest inaczej skonstruowany) niczego nie mogę wywnioskować.
Pozdrawiam

0

Było na tym forum multum różnych wariacji.
Zacznij od stablicowania wartości znaków rzymskich.
Jeżeli nie masz specjalnych wytycznych co do klasy to klasa tu nie specjalnie pasuje.

0

Musze przygotowac wersje tego programu ktory bedzie poslugiwal sie klasa i obiektami tej klasy. Prosze o pomoc gdyz jest to pilne.

0
RyubenNR napisał(a):

Musze przygotowac wersje tego programu ktory bedzie poslugiwal sie klasa i obiektami tej klasy. Prosze o pomoc gdyz jest to pilne.

No to zrób sobie jakąś klasę RomanNumber, w której będziesz miał konstruktor czy metody przyjmujące jako parametr liczby arabskie, i konwertujące je do tej Twojej rzymskiej liczby.

0

Program ma konwertowac liczbe rzymska na arabska. Na gorze mam stworzana jakas klase ale nie wiem czy jet dobrze. A no i program nie moze zczytywac nic z klawiatury.

0

Zrobilem cos takiego. Ale nie wiem co dalej mam zrobic.

 public class RomanArabic
{
    private string[] Roman = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
    private int[] Arabic = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
}
public class string Arab(string Number)
{
int Exit = 0;
int Index = 0;
for (int i = 0; i<Roman.length; i++)
    {
     while(Number.startsWith(Roman[i], Index)) //te petle znalazlem w javie.
        {                                                                         //Ma ona przemieniac liczbe rzymska na arabska.
         Exit += Arabic[i];
         Index += Roman[i].length();
        }
    }
return Exit;
}
1

Fragment (Number.startsWith(Roman[i], Index)) możesz zamienić na (Number.find(Roman[i], Index)==Index)
Metoda Arab() niby zwraca string zaś masz return Exit; czyli zwracasz int;
Reszta wygląda mniej więcej ok.
Oczywiście trzeba to jeszcze przerobić na C++

1 użytkowników online, w tym zalogowanych: 0, gości: 1