Római számok
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. október 12-én felülvizsgált
verziótól ; az ellenőrzések 2 szerkesztést igényelnek .
Számrendszerek a kultúrában
|
indoarab
|
Arab tamil burmai
|
khmer laoszi mongol thai
|
kelet Ázsiai
|
Kínai japán Suzhou koreai
|
Vietnami számlálóbotok
|
Betűrendes
|
Abjadia örmény Aryabhata cirill görög
|
Grúz etióp zsidó Akshara Sankhya
|
Egyéb
|
Babiloni egyiptomi etruszk római dunai
|
Padlás Kipu Maja Égei KPPU szimbólumok
|
helyzeti
|
2 , 3 , 4 , 5 , 6 , 8 , 10 , 12 , 16 , 20 , 60
|
Nega-pozíciós
|
szimmetrikus
|
vegyes rendszerek
|
Fibonacci
|
nem pozíciós
|
Egyes szám (egyetlen)
|
|
Ez az oldal vagy szakasz speciális Unicode karaktereket tartalmaz . Ha nem rendelkezik a szükséges betűtípusokkal , előfordulhat, hogy egyes karakterek nem jelennek meg megfelelően.
|
A római számok olyan számok , amelyeket az ókori rómaiak használtak nem pozíciós számrendszerükben .
A természetes számokat ezeknek a számjegyeknek az ismétlésével írjuk fel. Ugyanakkor, ha egy nagyobb szám elé kerül egy kisebb, akkor összeadódnak (összeadási elv), de ha egy kisebb egy nagyobb elé, akkor a kisebbet kivonják a nagyobbból (kivonási elv). Az utolsó szabály csak arra vonatkozik, hogy elkerüljük ugyanazon ábra négyszeres megismétlését.
A római számok Kr.e. 500-ban jelentek meg az etruszkoktól (lásd etruszk ábécé ), akik a számok egy részét a protokeltáktól kölcsönözhették .
Számok és a számok jelölése
A számok római jelölése ma jobban ismert, mint bármely más ősi számrendszer. Ezt nem annyira a római rendszer néhány különleges érdeme magyarázza, hanem az a hatalmas befolyás, amelyet a Római Birodalom a viszonylag közelmúltban élvezett. Rómát meghódító etruszkok az ie 7. században. e., kelet-mediterrán kultúrák befolyásolták. Ez részben magyarázza a római és attikai számrendszer alapelveinek hasonlóságát. Mindkét rendszer decimális volt, bár az ötös szám mindkét számrendszerben különleges szerepet játszott. Mindkét rendszer ismétlődő karaktereket használt a számok írásakor.
Az 1, 5, 10, 100 és 1000 számok régi római szimbólumai ( hindo-arab jelölés ) az I, V, X, Θ (vagy ⊕ , vagy ⊗ ) és Φ (vagy ↀ vagy CIƆ ) szimbólumok voltak. , ill. Bár sokat írtak már e szimbólumok eredeti jelentéséről, még mindig nincs kielégítő magyarázat rájuk. Az egyik elterjedt elmélet szerint a római V szám nyitott kezet ábrázol, négy ujjal összenyomva, hüvelykujjával pedig kinyújtva; az X szimbólum ugyanezen elmélet szerint két keresztbe tett kezet vagy egy kétjegyű V-t ábrázol. A 100 és 1000 számok szimbólumai valószínűleg a görög Θ és φ betűkből származnak. Nem ismert, hogy a későbbi C és M elnevezések régebbi római betűkből származnak-e, vagy akrofonikus rokonságban állnak a 100 (centum) és 1000 (mille) jelentésű latin szavak kezdőbetűivel. Úgy gondolják, hogy az 500-as szám római szimbóluma, a D betű a régi 1000-es szimbólum feléből származik. Csakhogy a legtöbb római szimbólum valószínűleg nem akrofonikus volt, és az 50-es és 500-as szám közbenső szimbólumai nem kombinációk. Az 5-ös és 10-es vagy 5-ös és 100-as szimbólumok közül a római számrendszer többi része a padlásra emlékeztetett. A rómaiak gyakran alkalmazták a kivonás elvét, így néha a VIII. helyett a IX-et, az LXXXX helyett az XC-t használták; Viszonylag később a IV. szimbólum IIII. helyett. Ezért most már minden római szám írható nagy latin betűkkel.
Általánosságban elmondható, hogy a rómaiak nem voltak hajlandók a matematikára, így nem érezték nagy szükségét a nagy számokra. Alkalmanként azonban a CCIƆƆ szimbólumot használták 10000-hez, és a CCCIƆƆƆ szimbólumot a 100000 -hez . E szimbólumok felét néha az 5000 ( IƆƆ ) és 50 000 ( IƆƆƆ ) számok ábrázolására használták.
A rómaiak olyan makacsul kerülték a törteket, mint a nagy számokat. Gyakorlati mérési feladatokban nem használtak törteket, a mértékegységet általában 12 részre osztották, így a mérés eredményét összetett számként, különböző mértékegységek többszöröseinek összegeként mutatják be, ahogyan azt ma teszik, amikor a hossz yardban, lábban és hüvelykben kifejezve. Az angol "ounce" ( uncia ) és "inch" ( inch ) szavak a latin lat szóból származnak . uncia ( uncia ), a hossz alapegységének egy tizenkettedét jelöli [1] [2] .
egy |
én |
lat. unus, unum
|
5 |
V |
lat. quinque
|
tíz |
x |
lat. decem
|
ötven |
L |
lat. quinquaginta
|
100 |
C |
lat. százalék
|
500 |
D |
lat. quingenti
|
1000 |
M |
lat. mille
|
Arab jelölés |
római jelölés
|
egy |
én
|
2 |
II
|
3 |
III
|
négy |
IV
|
5 |
V
|
6 |
VI
|
7 |
VII
|
nyolc |
VIII
|
9 |
IX
|
tíz |
x
|
tizenegy |
XI
|
12 |
XII
|
13 |
XIII
|
tizennégy |
XIV
|
tizenöt |
XV
|
16 |
XVI
|
17 |
A XVII
|
tizennyolc |
XVIII
|
19 |
XIX
|
húsz |
XX
|
harminc |
XXX
|
40 |
XL
|
ötven |
L
|
60 |
LX
|
70 |
LXX
|
80 |
LXXX
|
90 |
XC
|
100 |
C
|
200 |
CC
|
300 |
CCC
|
400 |
CD
|
500 |
D; IƆ
|
600 |
DC; IƆC
|
700 |
DCC; IƆCC
|
800 |
DCCC; IƆCCC
|
900 |
CM; CCIƆ
|
1000 |
M; ↀ; CIƆ
|
2000 |
MM; CIƆCIƆ
|
3000 |
MMM; CIƆCIƆCIƆ
|
3999 |
MMMCMXCIX
|
4000 |
M V ; ↀↁ; CIƆIƆƆ
|
5000 |
V ; ↁ; IƆƆ
|
6000 |
VM ; ↁↀ; IƆƆCIƆ
|
7000 |
VMM ; ↁↀↀ; IƆƆCIƆCIƆ
|
8000 |
V MMM; ↁↀↀↀ; IƆƆCIƆCIƆCIƆ
|
9000 |
M X ; ↀↂ; CIƆCCIƆƆ
|
10 000 |
X ; ↂ; CCIƆƆ
|
20 000 |
XX ; ↂↂ; CCIƆƆCCIƆƆ
|
30 000 |
XXX ; ↂↂↂ; CCIƆƆCCIƆƆCCIƆƆ
|
40 000 |
XL ; ↂↇ; CCIƆƆƆƆƆ
|
50 000 |
L ; ↇ; IƆƆƆ
|
60 000 |
LX ; ↇↂ; IƆƆƆCCIƆƆ
|
70 000 |
LXX ; ↇↂↂ; IƆƆƆCCIƆƆCCIƆƆ
|
80 000 |
LXXX ; ↇↂↂↂ; IƆƆƆCCIƆƆCCIƆƆCCIƆƆ
|
90 000 |
XC ; ↂↈ; CCIƆƆCCCIƆƆƆ
|
100 000 |
C ; ↈ; CCCIƆƆƆ
|
200 000 |
CC ; ↈↈ; CCCIƆƆƆCCCIƆƆƆ
|
300 000 |
CCC ; ↈↈↈ; CCCIƆƆƆCCCIƆƆƆCCCIƆƆƆ
|
400 000 |
CD ; CCCIƆƆƆIƆƆƆƆ
|
500 000 |
D ; IƆƆƆƆ
|
600 000 |
DC ; IƆƆƆƆCCCIƆƆƆ
|
700 000 |
DCC ; IƆƆƆƆCCCIƆƆƆCCCIƆƆƆ
|
800 000 |
DCCC
|
900 000 |
CM
|
1 000 000 |
M
|
2 000 000 |
MM
|
3 000 000 |
MMM
|
4 000 000 |
M V
|
5 000 000 |
V
|
6 000 000 |
V M
|
7 000 000 |
VMM_ _
|
8 000 000 |
V MMM
|
9 000 000 |
M X
|
10 000 000 |
x
|
100 000 000 |
C
|
1 000 000 000 |
M
|
1 000 000 000 000 |
M
|
1,000,000,000,000,000,000,000,000,000,000,000 |
M
|
10^100 |
X^C
|
A nagy számok római számokkal való helyes írásához először fel kell írnia az ezres, majd a százas, majd a tízes és végül az egyes számokat.
A római számrendszerben nincs nulla, de a nullát korábban nulla (nem), nihil (semmi) és N (e szavak első betűje) néven használták.
Ebben az esetben néhány szám (I, X, C, M) megismételhető, de legfeljebb háromszor egymás után ; így bármilyen természetes szám írható , legfeljebb 3999 (MMMCMXCIX). A korai időszakokban voltak jelek, amelyek nagyobb számokat jeleztek - 5000, 10 000, 50 000 és 100 000 (akkor a maximális szám az említett szabály szerint 399 999). A római számrendszerű számok írásakor a kisebb számjegy a nagyobbtól jobbra lehet; ebben az esetben hozzáadódik hozzá. Például a 283-as római számot CCLXXXIII-nak írjuk, azaz 100+100+50+30+3=283. Itt a százat jelző szám kétszer, a tízet és egyet képviselő szám háromszor ismétlődik.
Példa: 1988-as szám. Ezer M, kilencszáz CM, nyolc tíz LXXX, nyolc egység VIII. Írjuk össze őket: MCMLXXXVIII.
Elég gyakran a szövegben szereplő számok kiemelésére vonalat húztak rájuk: LXIV . Néha fent és lent is meghúzták a vonalat: XXXII - különösen az orosz kézzel írt szövegben szokás a római számokat kiemelni (ezt a tipográfiai szedésnél a technikai bonyolultság miatt nem használják). Más szerzőknél az áthúzás az ábra értékének 1000-szeres növekedését jelezheti: V = 5000.
Csak a 19. században írták le mindenhol a „négyes” számot „IV”-ként , korábban a „IIII” rekordot használták leggyakrabban. A "IV" bejegyzés azonban már az 1390 -ből származó Cury Forma kézirat dokumentumaiban is megtalálható . Az óraszámlapokon a legtöbb esetben a „IV” helyett hagyományosan az „IIII” betűt használták, főleg esztétikai okokból: ez az írásmód vizuális szimmetriát biztosít a szemközti „VIII” számokkal, a fordított „IV” pedig nehezebben olvasható, mint „III. Van olyan változat is, hogy a IV-et nem írták a számlapra, mert a IV Jupiter isten latin nevének (IVPITER) kezdőbetűi.
A kisebb számot a nagyobbtól balra írhatjuk, majd ki kell vonni a nagyobbból. Ebben az esetben csak az 1-et jelölő számok vagy a 10 hatványai vonhatók ki, és csak a számsorból a kivonthoz legközelebbi két szám (vagyis a kivont, 5-tel vagy 10-zel szorozva) működhet minivégként. Kisebb szám ismétlése nem megengedett. Így a "kivonási szabálynak"
csak hat felhasználása van:
- IV = 4
- IX = 9
- XL=40
- XC = 90
- CD = 400
- CM=900
Például a 94-es szám XCIV = 100 - 10 + 5 - 1 = 94 lesz - az úgynevezett "kivonási szabály" (a késő ókor korában jelent meg, és ezt megelőzően a rómaiak a 4-es számot IIII-nak írták, ill. a 40-es szám XXXX-ként).
Meg kell jegyezni, hogy a "kivonás" egyéb módszerei nem megengedettek; így a 99-es számot XCIX-ként kell írni, de nem IC-ként. Napjainkban azonban bizonyos esetekben a római számok egyszerűsített jelölését is alkalmazzák: például a Microsoft Excel programban az arab számok rómaira konvertálásakor a „ROMAN ()” függvény segítségével többféle számábrázolás használható, a klasszikustól a nagyon leegyszerűsítettig (például a 499-es szám írható CDXCIX, LDVLIV, XDIX, VDIV vagy ID formátumban). Az egyszerűsítés az, hogy bármely számjegy kicsinyítéséhez bármely másik számjegyet írhatunk a bal oldalára:
- 999. Ezer (M), vonjon ki 1-et (I), kap 999-et (IM) a CMXCIX helyett. Következmény: 1999 - MCMXCIX helyett MIM
- 95. Száz (C), vonj ki 5-öt (V), kapsz 95-öt (VC) XCV helyett
- 1950: Ezret (M), kivonva 50-et (L), kapunk 950-et (LM). Következmény: 1950 - MCML helyett MLM
A számok (általában évek) ilyen jelölésének esetei gyakran megtalálhatók az amerikai televíziós sorozatok kreditjében. Például az 1998-as évre: MCMXCVIII helyett MIIM.
A római számokkal nagyobb számosztályok is írhatók. Ehhez egy vonal kerül az ezres számok fölé, és egy dupla vonal a milliókat jelentő számok fölé. A kivétel az I. szám; a fenti sor helyett az M számot írjuk, és egy milliótól kezdve egy sort felülről. Például az 123123 szám így nézne ki:
CXXIII CXXIII
A millió pedig olyan, mint én , de nem egy, hanem két vonással az élén: én
Alkalmazás
Az oroszban a római számokat a következő esetekben használják:
- Századi vagy évezredszám: XIX. század, Kr.e. II. évezred. e.
- Az igék ragozása.
- Az óralapok " antik " jelölése .
- Kötetszám egy többkötetes könyvben vagy folyóiratkötetben (néha egy könyv részeinek, szakaszainak vagy fejezeteinek száma ).
- A zenei műveltségben.
- Az uralkodó sorszáma .
- Vércsoport az Orosz Föderáció fegyveres erőinek egyenruhájának foltjain .
- A szovjet hajókon a merülést méterben jelezték római betűkkel (angol hajókon - lábban római betűkkel).
- Egyes kiadásokban az oldalszámokat a könyv előszavával együtt, hogy ne javítsák ki a főszövegen belüli hivatkozásokat az előszó megváltoztatásakor.
- Egyéb fontos események vagy listaelemek, például: Eukleidész V. posztulátuma , II. világháború , SZKP XX. Kongresszusa, XXII . Olimpiai Játékok és hasonlók.
- A kémiai elemek vegyértéke .
- Hadtest száma a fegyveres erőknél.
- Az épület elkészültének éve oromfalán.
- A skála lépéseinek sorszáma.
- A matematikai elemzésben a származék számát római számmal írják , de olvasáskor (általában) I helyett „vonatot”, II helyett „két ütést”, III helyett „három ütést” mondanak. Végül a IV-ből kiindulva a „negyedik származék” olvasható: és .
A római számokat széles körben használták a Szovjetunióban a dátum feltüntetésekor az év hónapjának jelzésére , például: 11 / III-85 vagy 9.XI.89, ez számos akkori levéltári dokumentumon látható. Hasonló módon, perjelen keresztül az óra dátumát is felírták az osztálynaplókba , például a 24/II. A sírköveken az élet és halál dátumának jelzésére gyakran használtak speciális formátumot, ahol például az év hónapját római számokkal is jelezték (1887. november 25. ~ 1943. január 26.). Az 1970-es és 1980-as években hasonló formátumot használtak az orvosi igazolásokban.
A számítógépes információfeldolgozásra való átállással a római számokon alapuló
dátumformátumok gyakorlatilag megszűntek.
Más nyelveken a római számok hatóköre eltérő lehet. A nyugati országokban az évszámot gyakran római számokkal írják fel, például az épületek oromzatára, valamint a videó-, film- és televíziós termékek kreditjére [3] .
A modern Litvániában az útjelző táblákon , a kirakatokon , a vállalkozások cégtábláin római számok jelezhetik a hét napjait .
Unicode
A Unicode szabvány azt javasolja, hogy a római számokat egyszerű latin karakterekkel ábrázolják [4] . A szabvány azonban a római számokhoz speciális karaktereket is tartalmaz a számlapok [ 5 ] részeként az U+2160-tól U+2188-ig terjedő kódú karakterterületen . Például az MCMLXXXVIII ⅯⅭⅯⅬⅩⅩⅩⅧ formában ábrázolható. Ez a tartomány kis- és nagybetűs számjegyeket is tartalmaz az 1 (Ⅰ vagy I) és 12 (Ⅻ vagy XII) közötti számokhoz, beleértve a kombinált karakterjeleket is az összetett számokhoz , mint például a 8 (Ⅷ vagy VIII), elsősorban a kelet-ázsiai karakterkészletekkel való kompatibilitás biztosítása érdekében. ipari szabványokban, például a JIS X 0213 -ban, ahol ezek a karakterek meg vannak határozva. A kombinált karakterjelek olyan számok ábrázolására szolgálnak, amelyek korábban egyetlen karakterből álltak (például Ⅻ a Ⅹ és Ⅱ helyett). Ezenkívül léteznek karakterjelek az archaikus [5] formákhoz: 1000, 5000, 10 000, nagybetűs inverz C (Ɔ), késő 6 (ↅ, hasonló a görög stigmához : Ϛ), korai 50 ( ↆ, ami úgy néz ki, mint egy nyíl lefelé mutató ↓⫝⊥ [6] ), 50 000 és 100 000. Meg kell jegyezni, hogy a kis fordított c, ↄ nem szerepel a római számokban, de a Unicode szabványban szerepel a nagybetűs Claudian betű Ↄ.
A kód |
0 |
egy |
2 |
3 |
négy |
5 |
6 |
7 |
nyolc |
9 |
A |
B |
C |
D |
E |
F
|
Érték [7] |
egy |
2 |
3 |
négy |
5 |
6 |
7 |
nyolc |
9 |
tíz |
tizenegy |
12 |
ötven |
100 |
500 |
1000
|
U+2160
|
Ⅰ 2160
|
Ⅱ 2161
|
Ⅲ 2162
|
Ⅳ 2163
|
Ⅴ 2164
|
Ⅵ 2165
|
Ⅶ 2166
|
Ⅷ 2167
|
Ⅸ 2168
|
Ⅹ 2169
|
Ⅺ 216A
|
Ⅻ 216B
|
Ⅼ 216 C
|
Ⅽ 216D
|
Ⅾ 216E
|
216F sz
|
U+2170
|
ⅰ 2170
|
ⅱ 2171
|
ⅲ 2172
|
ⅳ 2173
|
ⅴ 2174
|
ⅵ 2175
|
ⅶ 2176
|
ⅷ 2177
|
ⅸ 2178
|
ⅹ 2179
|
ⅺ 217A
|
ⅻ 217B
|
ⅼ 217 C _
|
ⅽ 217D
|
ⅾ 217E
|
ⅿ 217F
|
Jelentése
|
1000 |
5000 |
10 000 |
100 |
6 |
ötven |
50 000 |
100 000
|
U+2180
|
ↀ 2180 |
ↁ 2181 |
ↂ 2182 |
Ↄ 2183 |
ↅ 2185 |
ↆ 2186 |
ↇ 2187 |
ↈ 2188
|
Ezen karakterek mindegyikének megjelenítéséhez olyan szoftverre van szükség, amely támogatja a Unicode szabványt, és egy olyan betűtípust , amely tartalmazza a megfelelő karakterjeleket ezekhez a karakterekhez (például Universalia
betűtípus ).
Reguláris kifejezések
Reguláris kifejezés a római számok ellenőrzéséhez - ^(M{0,3})(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$[8]
A Perlben reguláris kifejezést használhat a karakterláncban található római számok keresésére
m/\b((?:M{0,3}?(?:D?C{0,3}|C[DM])?(?:L?X{0,3}|X[LC])?(?:I{0,3}?V?I{0,3}|I[VX])))\b/gs.
Átalakulás
Az arab számokkal írt számok rómaira konvertálásához speciális függvényeket használnak.
Például a Microsoft Excel angol verziójában és az OpenOffice.org Calc bármely verziójában van erre egy ROMAN (argumentum; form) függvény , a Microsoft Excel orosz verziójában ezt a függvényt ROMAN -nak (szám; űrlap) hívják. . Az opcionális "shape" argumentum értéke 0 és 4 között lehet, valamint "hamis" és "igaz". A "Form" argumentum hiánya, vagy annak egyenlősége 0-val vagy "Igaz"-val a transzformáció "klasszikus" (szigorú) formáját adja; a 4 vagy "False" érték a legegyszerűbbet adja; Az 1, 2, 3 értékek a szigorúság egyszerűsítésében köztes változatokat adnak. Az eltérések például a 45, 49, 495, 499 számokban jelennek meg (az elsőket az [1;3999] tartományban jelöljük).
Funkcióalkalmazási példa
RÓMAI(szám; alak)
|
a nyomtatvány |
0 |
egy |
2 |
3 |
négy
|
szám |
|
|
|
|
|
|
45 |
|
évi XLV |
VL |
VL |
VL |
VL
|
49 |
|
XLIX |
VLIV |
IL |
IL |
IL
|
495 |
|
CDXCV |
LDVL |
XDV |
VD |
VD
|
499 |
|
CDXCIX |
LDVLIV |
XDIX |
VDIV |
ID
|
A "szám" argumentum nem egész értékeit egész számra kerekítik; ha ezt követően az érték nagyobb, mint 3999 vagy kisebb, mint 0, akkor a függvény a "#Érték" értéket adja vissza; 0 érték esetén egy üres cellát ad vissza.
JavaScript transzformációs függvények
var arab = [ 1 , 4 , 5 , 9 , 10 , 40 , 50 , 90 , 100 , 400 , 500 , 900 , 1000 ];
var roman = [ 'I' , 'IV' , 'V' , 'IX' , 'X' , 'XL' , 'L' , 'XC' , 'C' , 'CD' , 'D' , 'CM ' , 'M' ];
function arabToRoman ( szám )
{
if ( ! szám ) return '' ;
varret = ' ' ; var i = arab . hossza - 1 ; while ( szám > 0 ) { if ( szám >= arab [ i ]) { ret += római [ i ]; szám -= arab [ i ]; } else { i -- ; }
}
return ret ;
}
function romanToArab ( str )
{
str = str . toUpperCase ();
varret = 0 ; _ var i = arab . hossza - 1 ; var pos = 0 ; while ( i >= 0 && pos < str . long ) { if ( str . substr ( poz , roman [ i ]. long ) == roman [ i ]) { ret += arab [ i ]; pos += római [ i ]. hossza ; } else { i -- ; }
}
return ret ;
}
Hasonló funkciók
C nyelvben (C89):
#include <karakterlánc.h>
const int arabar [] = { 1 , 4 , 5 , 9 , 10 , 40 , 50 , 90 , 100 , 400 , 500 , 900 , 1000 };
const char * romanar [] = { "I" , "IV" , "V" , "IX" , "X" , "XL" , "L" , "XC" , "C" , "CD" , "D " , "CM" , "M" };
char * arab2roman ( előjel nélküli rövid int arab ) {
statikus char roman [ 80 ];
const int m = sizeof ( arabar ) / sizeof ( int ) -1 , arabmax = arabar [ m ];
const char romanmax = romanar [ m ][ 0 ];
int i , n ;
if ( ! arab ) {
* római = 0 ;
visszatérő római ;
}
i = 0_ _
while ( arab > arabmax ) {
roman [ i ++ ] = romanmax ;
arab -= arabmax ;
}
n = m ;
while ( arab > 0 ) {
if ( arab >= arabar [ n ]) {
roman [ i ++ ] = romanar [ n ][ 0 ];
ha ( n és 1 )
roman [ i ++ ] = romanar [ n ][ 1 ];
arab -= arabar [ n ];
} mást
n- ; _
}
római [ i ] = 0 ;
visszatérő római ;
}
aláíratlan rövid int roman2arab ( char * roman ) {
const int m = sizeof ( arabar ) / sizeof ( int ) -1 ;
előjel nélküli rövid int arab ;
int len , n , i , pir ;
len = strlen ( róm );
arab = 0 ;
n = m ;
i = 0_ _
while ( n >= 0 && i < len ) {
pir = n & 1 ;
if ( roman [ i ] == romanar [ n ][ 0 ] && ( ! pir || roman [ i + 1 ] == romanar [ n ][ 1 ])) {
arab += arabar [ n ];
i += 1 + pir ;
} mást
n- ; _
}
visszatér arab ;
}
Program az arab számok római nyelvre konvertálására a
Scalában :
val arabar = Tömb ( 1 , 4 , 5 , 9 , 10 , 40 , 50 , 90 , 100 , 400 , 500 , 900 , 1000 )
val romanar = Tömb ( " I " , " IV . " , " V " " , "X" , "XL" , "L" , "XC" , "C" , "CD" , "D" , "CM" , "M" ) def arab2roman ( arab : Int , acc : String = " " , n : Int = arabar . hossza - 1 ): String = if ( arab == 0 ) acc else if ( arab >= arabar ( n )) arab2román ( arab - arabar ( n ), acc + romanar ( n ), n ) else arab2roman ( arab , acc , n - 1 ) // arab2roman(4933) = MMMMCMXXXIII
Program arab számok római számokká konvertálására és fordítva
Pascal nyelven [9]
type str2 = string [ 2 ] ;
const
Rims : array [ 1 .. 14 ] of str2 = ( 'M' , 'CM' , 'D' , 'CD' , 'C' , 'XC' , 'L' , 'XL' , 'X' , 'IX' , 'V' , 'IV' , 'I' , ' ) ;
Arab : tömb [ 1 .. 14 ] egész szám = ( 1000 , 900 , 500 , 400 , 100 , 90 , 50 , 40 , 10 , 9 , 5 , 4 , 1 , 0 ) ;
var
N , NI , I , J : egész szám ;
S : string_ _
függvény Arab2Rim ( N : egész szám ) : string ;
var S : string ;
I : integer ;
kezdődik
S := '' ; I := 1 ;
míg N > 0 nem kezdődik
, míg arab [ I ] <= N kezdődik S := S + Felnik [ I ] ; N := N - Arab [ I ] vége ; I := I + 1 vége ; Arab2Rim := S vége ;
function Rim2Arab ( S : string ) : integer ;
var I , N : egész szám ;
kezdődik
I := 1 ; N : = 0 while S <> '' do begin while Felnik [ I ] = Másolás ( S , 1 , Length ( Felnik [ I ]) ) do begin S := Másolás ( S , 1 + Hossz ( Felni [ I ]) , 255 ) ; N := N + Arab [ I ] vége ; I := I + 1 vége ; Rim2Arab := N vége ;
begin
WriteLn ( 'Fordítás arabról római számokra. 1999 B_SA' ) ;
{ Write('Írja be a számot a konvertáláshoz:'); ReadLn(N);}
for NI := 26-46 do WriteLn ( NI , ' = ' , Arab2Rim ( NI ) , ' vissza ' , Rim2Arab ( Arab2Rim ( NI ) ) ) ; vége .
Funkció az arabból római számra konvertálására
Pascalban [10]
function Arab2Roman ( arab : integer ) : string ;
var
i : integer ;
d : egész szám ;
arab_str : string _
arab_len : integer ;
kezdődik
Eredmény := '' ;
arab_str := IntToStr ( arab ) ;
arab_len := Hossz ( arab_str ) ;
for i := 0 to arab_len - 1 do begin
d := StrToInt ( String ( arab_str [ arab_len - i ])) ;
if ( d + 1 ) mod 5 = 0 , akkor
Eredmény := Másolás ( 'IXCM' , 1 + i , 1 ) + Másolás ( 'VXLCDM ' , i * 2 + ( d + 1 ) div 5 , 1 ) + Másolás
Eredmény := Másolás ( 'VLD' , 1 + i , d div 5 ) + Másolás ( 'IIIXXXCCCMMM' , 1 + i * 3 , ( d mod 5 )) + Eredmény ; vége ; vége ;
Arab-római konverziós függvény a
BASIC -ben (a legrövidebb kód)
[11]
10 BEMENETI "ARAB SZÁM: " ; A 20 $ AZ I = 0 HOGY ( A$ ) -1 30 X = VAL ( KÖZÉP $ ( A$ , LEN ( A$ ) - I , 1 )) 40 HA X = 4 VAGY X = 9 AKKOR B$ = MID$ ( "IXCM" , I + 1 , 1 ) + MID$ ( "VXLCDM" , I * 2 + ( X + 1 ) / 5 , 1 ) + 50 B$ HA X < 4 , AKKOR B$ = MID$ ( "IIIXXXCCCMMM" , 1 + I * 3 , X ) + B$ MÁS , HA X > 4 ÉS X < 9 , AKKOR B$ = MID$ ( "VLD" , I + 1 , 1 ) + MID$ ( "IIIXXXCCCMMM" , 1 + I * 3 , X -5 ) + B$ 60 KÖVETKEZŐ I 70 NYOMTATÁS "RÓMAI SZÁM:" ; B$
Funkció az arab számok (ebben az esetben 1999) római nyelvre konvertálására
XPath -on
string-join(
$num in (1999)
Visszatérés(
('', 'M', 'MM', 'MMM')[($num idiv 1000) mod 10+1],
('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM')[($num idiv 100) mod 10+ egy],
('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC')[($num idiv 10) mod 10+ egy],
('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX')[$num mod 10+1]
),
'')
Funkció az arab számok (ebben az esetben 1999) római nyelvre konvertálására a
Perlben
szigorúan használd ;
figyelmeztetések használata ;
én $n = 1999 ;
my $nums = [
[ '' , qw(I II III IV V VI VII VIII IX) ],
[ '' , qw(X XX XXX XL L LX LXX LXXX XC) ],
[ '' , qw(C CC CCC CD D DC DCC DCCC CM) ],
[ '' , qw(M MM MMM) ]
];
az én $i = 0 ; én @res = ();
push @res , ( $ nums -> [ $i ++ ][ ( $n % 10 , $n = int ( $n / 10 ))[ 0 ] ]) for 0 .. 3 ;
fordított nyomtatás @res ;
Osztály az arab számok (1-től 3999-ig) római nyelvre konvertálásához
Java nyelven
import java.util.* ;
public class IntegerConverter {
public static String intToRoman ( int szám ) {
if ( szám >= 4000 || szám <= 0 )
return null ;
StringBuilder eredmény = új StringBuilder ();
for ( Integer key : units . descendingKeySet ()) {
while ( szám >= kulcs ) {
szám -= kulcs ;
eredmény . append ( units . get ( kulcs ));
}
}
eredményt ad vissza . toString (); }
privát statikus végleges NavigableMap < Integer , String > units ;
static {
NavigableMap < Integer , String > initMap = new TreeMap <> ();
initMap . put ( 1000 , "M" );
initMap . put ( 900 , "CM" );
initMap . put ( 500 , "D" );
initMap . put ( 400 , "CD" );
initMap . put ( 100 , "C" );
initMap . put ( 90 , "XC" );
initMap . put ( 50 , "L" );
initMap . put ( 40 , "XL" );
initMap . put ( 10 , "X" );
initMap . put ( 9 , "IX" );
initMap . put ( 5 , "V" );
initMap . put ( 4 , "IV" );
initMap . put ( 1 , "én" );
units = Gyűjtemények . unmodifiableNavigableMap ( initMap );
}
}
Kiterjesztési osztály a római arab nyelvre és fordítva a
CSharp -on
/// <summary>
/// Az osztály célja, hogy arab számokat alakítson át római számokká és fordítva
/// </summary>
/// <remarks>
/// <para>Az osztály kezdetben egy római ábécét tartalmaz számok, amelyek meghatározhatják az arab számokat 1-től 39999-ig</para>
/// <para>Ha ki szeretné bővíteni a tartományt, a /// mező használatával további jelöléseket is megadhat a római számokhoz
<lásd cref="BasicRomanNumbers"/> BasicRomanNumber</remarks>
public static class RomanNumber
{
/// <summary>
/// Az alapvető római számok ábécéje
/// <para>Az ábécé szótárként épül fel. A szótár kulcsa egy arab szám (int), az érték a hozzá tartozó
/// római szám (karakterlánc)</para>
/// </summary>
/// <remarks>
/// <para>Tartalmaz az arab számok római szimbólumai 1 *,4*,5*,9* - ahol a "*" 0...N nullát jelent</para>
/// <para>Létrehozáskor a számok jelölését tartalmazza 1-től 10000 (I...ↂ ) Mivel egy karakter nem
/// fordulhat elő háromnál többször egy római számban, kezdetben 1-től 39999-ig konvertálhatja a számokat római formátumba.</para>
/// <para>Ha ha nagyszámú római számmal szeretne dolgozni, akkor
további jelöléseket kell hozzáadnia a listához /// 40000-től kezdődően az 1*,4*,5*,9* elemek kihagyása nélkül.</para>
/// </remarks>
public static SortedList < int , string > Alapvető római számok { get ; készlet ; }
static RomanNumber ()
{
BasicRomanNumber = new SortedList < int , string >( 17 );
Alapvető római számok . Add ( 1 , "I" );
Alapvető római számok . Add ( 4 , "IV" );
Alapvető római számok . Add ( 5 , "V" );
Alapvető római számok . Add ( 9 , "IX" );
Alapvető római számok . Add ( 10 , "X" );
Alapvető római számok . Add ( 40 , "XL" );
Alapvető római számok . Add ( 50 , "L" );
Alapvető római számok . Add ( 90 , "XC" );
Alapvető római számok . Add ( 100 , "C" );
Alapvető római számok . Add ( 400 , "CD" );
Alapvető római számok . Add ( 500 , "D" );
Alapvető római számok . Add ( 900 , "CM" );
Alapvető római számok . Add ( 1000 , "M" );
Alapvető római számok . Add ( 4000 , "Mↁ" );
Alapvető római számok . Add ( 5000 , "ↁ" );
Alapvető római számok . Add ( 9000 , "Mↂ" );
Alapvető római számok . Add ( 10000 , "ↂ" );
}
/// <összefoglaló>
/// Kiszámítja a római számok aktuális ábécéjéhez tartozó maximális lehetséges római számot.
/// </summary>
/// <returns>Maximálisan lehetséges római szám</returns>
public static uint MaxRomanNumber ()
{
int lastNumber = BaseRomanNumber . kulcsok . Utolsó ();
int számNoZeros = int . Elemzés ( lastNumber . ToString (). Csere ( '0' , '\0' ));
int pre = 0 ;
switch ( numberWithoutZeros )
{
case 1 :
previous = lastNumber * 4 - 1 ;
szünet ;
4. eset : 9. eset : előző = lastNumber ; szünet ; 5. eset : előzetes = lastNumber + lastNumber / 5 * 3 ; szünet ; alapértelmezett : break ; }
vissza uint . Elemzés ( pre . ToString ( ). Csere ( '0' , '9' ));;
}
/// <summary>
/// Egész számot alakít át római számmá
/// </summary>
/// <param name="Arab number">A római jelölésre konvertálandó arab szám</param>
// / < kivétel cref="ArgumentOutOfRangeException">A rendszer akkor dobja ki, ha "0"-val egyenlő szám
/// vagy a maximális római számnál nagyobb szám kerül átadásra paraméterként.</exception>
/// <returns>Egy karakterlánc, amely egy Római szám</returns>
public static string ArabRoman ( this int numberArab )
{
StringBuilder numberRoman = new StringBuilder ();
//Kizárja ki a "-" jelet az arab számból, és tegye a római szám első karakterévé
if ( numberArab < 0 )
{
numberRoman . hozzáfűzés ( "-" );
számarab = - számarab ;
}
if ( numberArab == 0 )
throw new ArgumentOutOfRangeException ( "számArab" , számArab ,
"Érvénytelen argumentumérték: a római számok nem lehetnek egyenlők\"0\"" );
else if ( numberArab > MaxRomanNumber ())
throw new ArgumentOutOfRangeException ( "számArab" , numberArab ,
string . Format ( "Érvénytelen argumentumérték: nem adható meg {0}-nál nagyobb római szám" ,
MaxRomanNumber ()));
//Folom fel az arab számot alkotó római számokra, és vonja össze őket egy karakterláncba .
var requiredBasicRomanNumbers =
tól ig a BasicRomanNumbers -ben . Billentyűk
hova < = számArab sorrend szerint csökkenő válasszon ; _
foreach ( int current in requiredBaseRoman Numbers ) { while (( számarab / jelenlegi ) >= 1 ) { numberArab - = aktuális ; szám római . Hozzáfűzés ( BaseRomanNumbers [ tech ]); } }
visszatérési szám Roman . ToString ();
}
/// <summary>
/// A római számokat arabra alakítja
/// </summary>
/// <param name="Római szám">Int típusúvá alakítandó római szám</param>
/// <kivétel cref="FormatException">Kidobva, ha nem római számot adunk át paraméterként</exception>
/// <returns>Egy római szám arab jelölését képviselő egész szám</returns>
public static int RomanToarabic ( ez a string numberRoman )
{
int számarab = 0 ;
sbyte negatív = 1 ;
string roman = numberRoman . trimm ();
if ( roman [ 0 ] == '-' )
{
negatív = - 1 ;
római = római . részkarakterlánc ( 1 );
}
StringBuilder RomanNumber sablon = új StringBuilder ();
foreach ( int to az alap római számokban . Kulcsok )
{
int index = Alap római számok . kulcsok . IndexOf ( k );
string quantifier = "?" ;
if ( index == 0 || ( index % 4 ) == 0 )
kvantor = "{0,3}" ;
római szám sablon . Insert ( 0 , string . Formátum ( "(?<{0}>({1}){2})?" , to . ToString (),
alapvető római számok [ to ], kvantor ));
}
//A kis- és nagybetűk figyelmen kívül hagyása + egyezésnek a RomanNumber sablon karakterlánc elején kell kezdődnie . Beszúrás ( 0 , "(?i)^" );
//Az egyezésnek a RomanNumber karakterlánc végén kell lennie
. hozzáfűzés ( "$" );
// Egyszerűsített ellenőrzés. Nem ellenőrzi az olyan hibákat, mint például a IVII
if (! Regex . IsMatch ( római , római számminta . ToString ()))
dob új FormatException ( string . Format ( "A \"{0}\" szöveg nem római szám" , római szám ));
Egyezési szám = Regex . Match ( rome , RomanNumber Pattern . ToString ());
foreach ( int to a római alapszámokban . Kulcsok )
{
számarab += szám . Csoportok [ a . ToString ()]. Hossz / Alap római számok [ -ig ]. Hossz * -ig ;
}
visszatérési számArab * negatív ;
}
}
Jegyzetek
- ↑ Számok és számrendszerek Archiválva : 2018. november 22. a Wayback Machine -nál . Online Enciklopédia a világ körül.
- ↑ M. Ya. Vygodsky "Az elemi matematika kézikönyve" Moszkva 1958 Fizikai és matematikai irodalom állami kiadója. 62. oldal
- ↑ Beckham útja a rómaiakba archiválva 2020. május 1-én a Wayback Machine -nél // BBC , 2002. április 17.
- ↑ Unicode Standard, 15.3 Archivált : 2010. június 27., a Wayback Machine -nél ("A legtöbb célra előnyösebb, ha a római számokat a megfelelő latin betűk sorozataiból állítjuk össze.")
- ↑ 12 Unicode száműrlap . Letöltve: 2009. március 30. Az eredetiből archiválva : 2009. március 25.. (határozatlan)
- ↑ Perry, David J. Javaslat további ókori római karakterek hozzáadására az UCS -hez Archiválva 2011. június 22-én a Wayback Machine -nél .
- ↑ Az első két sorhoz
- ↑ 31. fejezet Római numerikus jelölés :: Megvalósítási ötletek . Hozzáférés időpontja: 2015. október 15. Az eredetiből archiválva : 2015. november 18. (határozatlan)
- ↑ "Tudomány és élet" N12, 1986, 95. o., V. Ptitsyn, Moszkva
- ↑ Szerző - Kuznetsov Evgeny A.
- ↑ Szerző - Jevgenyij A. Kuznyecov, 1992
Lásd még