HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Decimális szám római számmá való konvertálása


Példaprogram letöltése

12923 bájt

Előfordulhat, hogy alkalmaznunk kell a római számrendszert alkalmazásainkban. Cikkünkben készítünk egy komponenst, melynek metódusaival képesek vagyunk átkonvertálni a 10-es számrendszerbeli számainkat római számokká, valamint a római számokat egész számokká. Használatával könnyedén eligazodhatunk a meglehetősen nehézkes, nem mindenki számára egyértelmű római számvilágban.

A komponens használata
A komponens két függvénnyel rendelkezik. A Convert2Roman metódus konvertálja át egész számainkat római számokká. A metódus a paraméterében várja az egész számot, és visszatérési értéke lesz a generált római szám.
public string Convert2Roman(int dec)
Ez a metódus csak a 3999-nél kisebb számokat konvertálja át.
A Convert2Decimal metódus végzi el a visszafelé konverziót, visszatérési értékre adja meg az egész számot.
public int Convert2Decimal(string roman)
A komponens elkészítése
A római számrendszer additív számrendszer, amely azt jelenti, hogy egy szám értékét a számrendszer jeleinek összevonásából lehet létrehozni. Szabály, hogy a számjegyeknek csökkenő sorrendben kell követniük egymást.
A római számrendszer jelei:
Decimális érték 1 5 10 50 100 500 1000
Római szám I V X L C D M
A logikai helyesség érdekében készítettünk két – 13 elemű - konstans tömböt.
decimals 1 4 5 9 10 40 50 90 100 500 900 1000
romans I IV V IX X XL L XC C D CM M
Ha a decimals vagy romans tömbök bármelyikében megtalálunk egy értéket, akkor a másik tömb ugyanazon indexű eleménél megtalálható a másik számrendszerbeli megfelelő érték.
Egész szám konvertálása római számmá
A Convert2Roman metódus elve, hogy a kapott számból kivonjuk az egész számokat tartalmazó tömb elemeit a tömbben visszafelé haladva. Tesszük ezt addig, míg a szám nagyobb, mint a soron következő elem. Mindeközben a visszaadandó karakterlánchoz fűzzük a római számokat tartalmazó tömb adott indexű elemét.
for(int i=12;i>=0;i--)
{
  while (dec >= decimals[i])
  {
    dec -= decimals[i];
    result += romans[i];
  }
}
Római szám konvertálása egész számmá
A műveletben ellenőriznünk kell az alábbiakat:
  • A számok csak csökkenő sorrendben követhetik egymást.
  • Nem lehet kettőnél több karakter csak az I, X, C és M-ből.
  • Nem lehet háromnál több karakter semmiből.
  • Nem lehet idegen karakter a szövegben.
A metódusban a fő ciklus addig tart, amíg a kapott karakterlánc mérete nagyobb, mint 0. A ciklus elején beolvassuk a karakterlánc első, vagy első két karakterét, majd megkeressük a római számokat tartalmazó tömbben az egyező értéket. Amennyiben van egyezés, akkor a karaktereket levágjuk a láncból, majd ismét indulhat a keresés.
for(int i=0;i<=12;i++)
{
  if (help == romans[i] && romans[i].Length == 2)
  {
  ...
Amennyiben nincs egyezés, akkor az első karaktert keressük a tömbben, és találat esetén a következő ciklusban úgy folytatjuk a keresést, hogy a karakterlánc első elemét levágjuk.
for(int i=0;i<=12;i++)
{
  if (romans[i].ToString() == help[0].ToString())
  {
    result += decimals[i];
    ...
Ha valami hiba lépne fel, akkor befejezzük a feldolgozást és -1-et adunk eredményül.
if (Count > 2 && (Index != 0 && Index != 4 && Index != 8 && Index != 12))
{
  badChar = true;
}
if (badChar || Count > 3 || badOrder)
{
  roman = "";
  result = -1;
}

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 489. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |