TechnoZona.net
Всичко за банята BaniZona.com

Начало » Компютри » Програмиране » Римски цифри


Римски цифри

   Налагало ли ви се е да преобръщате цифри от десетична бройна система в римски цифри? Ако да тази статия би била полезна за вас. Няма да се спирам подробно на римската система, само ще отбележа някой от трудностите при преобразуване.
   Първо:  XI = 10 + 1 = 11 и  IX = 10 – 1 = 9
   Също така съществуват ограничения за броя еднакви символи един след друг, както и за това коя цифра може да предхожда друга. Можем да забележим също че има сходство между числата 3(III), 30(XXX), 300(CCC), като и между 7(VII), 70(LXX), 700(DCC). Последното означава, че римската система не е толкова различна и може да се свърже с десетичната. Всъщност от всяко десетично число можем да сглобим римско такова, като разгледаме цифрите от ляво на дясно, преобразуваме ги в римски и ги долепим една до друга.
   При преобразуването ще ползвам следните декларации
<p>const char *roman[] = {"", "A", "AA", "AAA", "AB", "B", "BA", "BAA", "BAAA", "AC");
const char *romanDigits[] = {"IVX", "XLC", "CDM", "M"};
  Последователността от символи А, В, С е всъщност аналог на следния модел:
1(I)   2(II)   3(III)   4(IV)   5(V)   6(VI)   7(VII)    8(VIII)   9(IX)
Върху който се налагат истинските римски цифри.
Ето и кода:
void getRomanDigit(char *rslt, char x, unsigned char power)
 {
 const char *pch;
 for (pch = roman[x]; '\n' != *pch; pch ++)
    *rslt ++ = romanDigits[power][*cph - 'A'];
*rslt = '\n';
}
char *decimal2Roman(char *rslt, unsigned x)
 {
 unsigned char power;
 char buf[10];
 char oldRslt[MAX_ROMAN_LEN];
 for (*rslt = '\n', power = 0; x > 0; power ++, x /= 10)
    {
    getRomanDigit(buf, (char) (x % 10), power);
    strcpy(oldRslt, rslt);
    strcpy(rslt, buf);
    strcat(rslt, oldRslt);
    }
 return rslt;
 }

 

върни се в началото   изпрати на приятел   версия за печат сподели във FACEBOOK  

КОМЕНТАРИ


Заглавие : C++

Автор : Volodiq

email : volodq@mail.bg

q mi obqsni tochno e toq red kvo pravi

getRomanDigit(buf, (char) (x % 10), power);


Заглавие : C++

Автор : Венелин Рангелов

email : info@eadvise.info

Този ред вика функцията getRomanDigit, дефинирана по-горе с параметри - buf - тоест буфера на резултата; (char) (x % 10) ще върне остатъка от деленето на х и 10, като ще го интерпретира като char, а не като цифра; power играе роля на брояч, показващ кой след кой символ следва.


Заглавие : римски цифри

Автор : наско

email : plamen69@abv.bg

как се пище числото 728 с римски цифри


Заглавие : Interesno

Автор : DelphiMaster

email :

za 728 e lesno DCCXXVIII
no kak 6te se zapi6at 4000 ili puk 10000???


Заглавие : заглавно

Автор : някой

email :

по добре ще е да се направи програмка за обратното -> от римски в десетични


Заглавие : pavel

Автор : nqkoi

email : silvia131973@abv.bg

kak se izpisva 1997 godina v rimski cifri


Заглавие : ;)

Автор : ето

email :

мисля, че в уикепедията доста подробно е обяснено всичко и може да ви бъде полезно и интересно :) ето линка (само си го сглобете, че беше доста дълго за един ред...): http://bg.wikipedia.org/wiki/
%D0%A0%D0%B8%D0%BC%D1%81%D0%BA%D0%B8_
%D1%86%D0%B8%D1%84%D1%80%D0%B8


Заглавие : janet

Автор : jaet

email :

kade da mu se ne vidi moga da namera rimskite cifri


Заглавие : rimski cifri

Автор : vania

email : mario-s@mail.bg

kak se pishe s rimski cifri slednata data 29.09.1994god


Заглавие : rimski cifri

Автор : Katq

email : katrinn77@abv.bg

Kak se pishe datata 20.08.2009 godina sus rimski cifri ?


Заглавие : pomosht

Автор : yanitsa

email : little__doll@abv.bg

kak se pi6e 1994 s rimski cifri ? blagodarq :)


Заглавие : Римски цифри

Автор : Цветан

email : plami_ceko@abv.bg

Как се пише датата 17.12.2012 година, благодаря ви предварително :)


Заглавие : Римски цифри

Автор : Rumen

email : Rumen.Ganchovski@vivacom

мо.я за чис.ата за татус 17.10.1977

ПУБЛИКУВАНЕ НА МНЕНИЕ

ФОРМАТИРАНЕ:

Забележка: Няма да бъдат допускани нецензурни изказвания!

За нас | Публикувай статия | Рекламна програма | Контакти | Авторски права | Полезни връзки | Новини | Добави в любими

Copyright 2005-2008 Уеб дизайн rVertis. All rights reserved.

Tyxo.bg counter