Numere romane

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 12 octombrie 2022; verificările necesită 2 modificări .
Sisteme numerice în cultură
indo-arabă
arabă
tamilă
birmană
Khmer
Lao
Mongolian
Thai
Est asiatic
Chineză
Japoneză
Suzhou
Coreeană
Bețe de numărat vietnameze
Alfabetic
Abjadia
armeană
Aryabhata greacă
chirilică
Akshara Sankhya , evreică
etiopiană georgiană

Alte
babilonian
egiptean
etrusc
roman
danubian
Attic
Kipu
Mayan
Aegean
KPPU Simboluri
pozițional
2 , 3 , 4 , 5 , 6 , 8 , 10 , 12 , 16 , 20 , 60
Nega-pozițional
simetric
sisteme mixte
Fibonacci
nepozițională
Singular (unar)

Numerele romane  sunt numere folosite de vechii romani în sistemul lor numeric non-pozițional .

Numerele naturale se scriu prin repetarea acestor cifre. În același timp, dacă un număr mai mare vine înaintea unuia mai mic, atunci se adună (principiul adunării), dar dacă unul mai mic vine înaintea unuia mai mare, atunci cel mai mic se scade din cel mai mare (principiul scăderii). Ultima regulă se aplică doar pentru a evita repetarea de patru ori a aceleiași figuri.

Numerele romane au apărut în anul 500 î.Hr. de la etrusci (vezi alfabetul etrusc ), care puteau împrumuta unele dintre numere de la proto-celți .

Numerele și notarea numerelor

Notația romană pentru numere este acum mai cunoscută decât orice alt sistem de numere antic. Acest lucru se explică nu atât prin unele merite speciale ale sistemului roman, cât prin influența enormă de care s-a bucurat Imperiul Roman în trecutul relativ recent. Etrusci care au cucerit Roma în secolul al VII-lea î.Hr. e., au fost influențate de culturile est-mediteraneene. Acest lucru explică parțial asemănarea principiilor de bază ale sistemelor de numere romane și atice. Ambele sisteme erau zecimale, deși numărul cinci a jucat un rol special în ambele sisteme numerice. Ambele sisteme foloseau caractere repetate la scrierea numerelor.

Vechile simboluri romane pentru numerele 1, 5, 10, 100 și 1000 ( notația hindo-araba ) erau simbolurile I, V, X, Θ (sau ⊕ , sau ⊗ ) și Φ (sau ↀ , sau CIƆ ) , respectiv. Deși s-a scris mult despre semnificația originală a acestor simboluri, încă nu există o explicație satisfăcătoare pentru ele. Conform uneia dintre teoriile larg răspândite, cifra romană V înfățișează o mână deschisă cu patru degete apăsate împreună și degetul mare întins; simbolul X, conform aceleiași teorii, înfățișează două mâini încrucișate sau o cifră dublă V. Simbolurile pentru numerele 100 și 1000 provin probabil din literele grecești Θ și φ. Nu se știe dacă denumirile ulterioare C și M sunt derivate din caractere romane mai vechi sau sunt legate acrofonic de literele inițiale ale cuvintelor latine care înseamnă 100 (centum) și 1000 (mille). Se crede că simbolul roman pentru numărul 500, litera D , provine din jumătate din vechiul simbol pentru 1000. Cu excepția faptului că majoritatea simbolurilor romane nu erau cel mai probabil acrofonice și că simbolurile intermediare pentru numerele 50 și 500 nu erau combinații. de simboluri pentru numerele 5 și 10 sau 5 și 100, restul sistemului numeric roman semăna cu Mansarda. Romanii foloseau adesea principiul scăderii, așa că uneori foloseau IX în loc de VIIII și XC în loc de LXXXX; comparativ mai târziu, simbolul IV în loc de IIII. Prin urmare, acum toate cifrele romane pot fi scrise cu majuscule latine.

În general, romanii nu erau înclinați să facă matematică, așa că nu simțeau prea multă nevoie de numere mari. Cu toate acestea, au folosit ocazional simbolul CCIƆƆ pentru 10000 și simbolul CCCIƆƆƆ pentru numărul 100000 . Jumătățile acestor simboluri au fost uneori folosite pentru a reprezenta numerele 5000 ( IƆƆ ) și 50000 ( IƆƆƆ ).

Romanii evitau fracțiile la fel de încăpățânat ca numerele mari. În problemele practice de măsurare, nu au folosit fracții, subdivând unitatea de măsură de obicei în 12 părți, astfel încât rezultatul măsurării este prezentat ca un număr compus, suma multiplilor diferitelor unități, așa cum se face astăzi când lungimea este exprimat în metri, picioare și inci. Cuvintele englezești „uncie” ( uncie ) și „inch” ( inci ) provin din cuvântul latin lat.  uncia ( uncie ), care desemnează o doisprezece parte din unitatea de bază de lungime [1] [2] .

unu eu lat.  unus, unum
5 V lat.  quinque
zece X lat.  decem
cincizeci L lat.  quinquaginta
100 C lat.  la sută
500 D lat.  quingenti
1000 M lat.  mille
Notație arabă Notație romană
unu eu
2 II
3 III
patru IV
5 V
6 VI
7 VII
opt VIII
9 IX
zece X
unsprezece XI
12 XII
13 XIII
paisprezece XIV
cincisprezece XV
16 XVI
17 XVII
optsprezece XVIII
19 XIX
douăzeci XX
treizeci XXX
40 XL
cincizeci 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

Pentru a scrie corect numere mari în cifre romane, trebuie mai întâi să notați numărul de mii, apoi sutele, apoi zeci și, în final, unitățile.

Nu există zero în sistemul numeric roman, dar zero a fost folosit anterior ca nulla (nu), nihil (nimic) și N (prima literă a acestor cuvinte).

În acest caz, unele dintre numere (I, X, C, M) pot fi repetate, dar nu mai mult de trei ori la rând ; astfel, ele pot fi folosite pentru a scrie orice număr natural nu mai mult de 3999 (MMMCMXCIX). În primele perioade, au existat semne care indicau numere mai mari - 5000, 10.000, 50.000 și 100.000 (atunci numarul maxim conform regulii mentionate este 399.999). Când se scriu numere în sistemul numeric roman, cifra mai mică poate fi în dreapta celei mai mari; în acest caz i se adaugă. De exemplu, numărul 283 în roman se scrie CCLXXXIII, adică 100+100+50+30+3=283. Aici, numărul care reprezintă o sută se repetă de două ori, iar numerele care reprezintă zece și, respectiv, unu, se repetă de trei ori.

Exemplu: numărul 1988. O mie M, nouă sute CM, opt zeci LXXX, opt unități VIII. Să le scriem împreună: MCMLXXXVIII.

Destul de des, pentru a evidenția numerele din text, se trasa o linie peste ele: LXIV . Uneori, linia a fost trasă atât deasupra, cât și dedesubt: XXXII  - în special, se obișnuiește să se evidențieze cifrele romane în textul scris de mână în limba rusă (aceasta nu este utilizată în compunerea tipografică din cauza complexității tehnice). Pentru alți autori, linia de suprafață ar putea indica o creștere a valorii figurii de 1000 de ori: V = 5000.

Abia în secolul al XIX-lea numărul „patru” a fost scris ca „IV” peste tot , înainte ca înregistrarea „IIII” să fie folosită cel mai des. Cu toate acestea, intrarea „IV” poate fi găsită deja în documentele manuscrisului Forme of Cury datând din 1390 . Cadranele ceasurilor au folosit în mod tradițional „IIII” în loc de „IV” în majoritatea cazurilor, în principal din motive estetice : această ortografie oferă simetrie vizuală cu numerele „VIII” de pe partea opusă, iar „IV” inversat este mai greu de citit decât „IIII”. Există, de asemenea, o versiune că IV nu a fost scris pe cadran deoarece IV este primele litere ale numelui latin al zeului Jupiter (IVPITER).

Numărul mai mic poate fi scris în stânga celui mai mare, apoi ar trebui să fie scăzut din cel mai mare. În acest caz, numai numerele care denotă 1 sau puterile lui 10 pot fi scăzute și doar cele mai apropiate două numere din seria de numere de cele scăzute (adică, scăderea, înmulțită cu 5 sau 10) pot acționa ca minuend. Repetările unui număr mai mic nu sunt permise. Astfel, există doar șase utilizări ale „regula de scădere”:

De exemplu, numărul 94 va fi XCIV = 100 - 10 + 5 - 1 = 94 - așa-numita „regula de scădere” (a apărut în epoca antichității târzii, iar înainte de aceasta, romanii au scris numărul 4 ca IIII, și numărul 40 ca XXXX).

De menționat că alte metode de „scădere” nu sunt permise; astfel, numărul 99 ar trebui scris ca XCIX, dar nu ca IC. Cu toate acestea, în prezent, în unele cazuri, se folosește și o notație simplificată a numerelor romane: de exemplu, în Microsoft Excel , la conversia cifrelor arabe în romane folosind funcția „ROMAN ()”, puteți utiliza mai multe tipuri de reprezentare a numerelor, de la clasic la foarte simplificat (de exemplu, numărul 499 poate fi scris ca CDXCIX, LDVLIV, XDIX, VDIV sau ID). Simplificarea este că pentru a reduce orice cifră, orice altă cifră poate fi scrisă în stânga acesteia:

Cazuri de astfel de notare a numerelor (de obicei ani) se găsesc adesea în creditele serialelor de televiziune din SUA. De exemplu, pentru anul 1998: MIIM în loc de MCMXCVIII.

Numerele romane pot fi folosite și pentru a scrie clase mai mari de numere. Pentru a face acest lucru, deasupra numerelor care reprezintă mii este plasată o linie, iar deasupra numerelor care reprezintă milioane este plasată o linie dublă. Excepția este numărul I; în loc de o linie deasupra, se scrie numărul M și începând de la un milion - o linie de sus. De exemplu, numărul 123123 ar arăta astfel:

CXXIII CXXIII

Și un milion este ca eu , dar nu cu unul, ci cu două trăsături la cap: I

Aplicație

În rusă, cifrele romane sunt folosite în următoarele cazuri:

Cifrele romane au fost utilizate pe scară largă în URSS atunci când indicau data pentru a indica luna anului, de exemplu: 11 / III-85 sau 9.XI.89, acest lucru se vede pe multe documente de arhivă ale acelor vremuri. În mod similar, printr-o bară oblică , au notat și data lecției în jurnalele de clasă , de exemplu, 24/II. Pentru a indica datele vieții și morții pe pietre funerare, se folosea adesea un format special, unde luna anului era indicată și cu cifre romane, de exemplu (25 noiembrie 1887 – 26 ianuarie 1943). Un format similar a fost folosit în certificatele medicale în anii 1970 și 1980.

Odată cu trecerea la prelucrarea informatică a informațiilor , formatele de date bazate pe cifre romane au căzut practic în neutilizare.

În alte limbi, domeniul de aplicare al cifrelor romane poate diferi. În țările occidentale, numărul anului este adesea scris cu cifre romane, de exemplu, pe frontoanele clădirilor și în creditele produselor video, cinematografice și de televiziune [3] .

În Lituania modernă , pe indicatoarele rutiere , pe vitrinele magazinelor , pe panourile întreprinderilor, cifrele romane pot indica zilele săptămânii .

Unicode

Standardul Unicode recomandă ca cifrele romane să fie reprezentate folosind caractere latine simple [4] . Cu toate acestea, standardul include și caractere speciale pentru numerele romane ca parte a Formelor numerice [ 5 ] în zona de caractere cu codurile U+2160 până la U+2188. De exemplu, MCMLXXXVIII poate fi reprezentat sub forma ⅯⅭⅯⅬⅩⅩⅩⅧ. Acest interval include atât cifre mici, cât și litere mari pentru numerele de la 1 (Ⅰ sau I) la 12 (Ⅻ sau XII), inclusiv glife combinate pentru numere compuse, cum ar fi 8 (Ⅷ sau VIII), în principal pentru a asigura compatibilitatea cu seturile de caractere din Asia de Est. în standardele industriale, cum ar fi JIS X 0213 , unde aceste caractere sunt definite. Glifele combinate sunt folosite pentru a reprezenta numere care anterior erau alcătuite din caractere simple (de exemplu, Ⅻ în loc de reprezentarea sa ca Ⅹ și Ⅱ). În plus, există glife pentru formele arhaice [5] de 1000, 5000, 10.000, majuscul invers C (Ɔ), 6 târziu (ↅ, asemănător stigmatului grecesc : Ϛ), începutul 50 ( ↆ, care arată ca o săgeată). indicând în jos ↓⫝⊥ [6] ), 50 000 și 100 000. Trebuie remarcat faptul că reversul mic c, ↄ nu este inclus în caractere cu cifre romane, dar este inclus în standardul Unicode ca litera Claudiană majusculă Ↄ.  

Codul 0 unu 2 3 patru 5 6 7 opt 9 A B C D E F
Valoare [7] unu 2 3 patru 5 6 7 opt 9 zece unsprezece 12 cincizeci 100 500 1000
U+2160
2160

2161

2162

2163

2164

2165

2166

2167

2168

2169

216A

216B

216C

216D

216E
Nr. 216F
U+2170
2170

2171

2172

2173

2174

2175

2176

2177

2178

2179

217A

217B
ⅼ217C
_

217D

217E

217F
Sens 1000 5000 10.000 100 6 cincizeci 50.000 100.000
U+2180
2180

2181

2182

2183

2185

2186

2187

2188

Afișarea tuturor acestor caractere necesită un software care acceptă standardul Unicode și un font care conține glifele corespunzătoare acestor caractere (de exemplu, fontul Universalia ).

Expresii regulate

Expresie regulată pentru verificarea numerelor romane - ^(M{0,3})(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$[8] În Perl , puteți folosi o expresie regulată pentru a căuta numerele romane într-un șir 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.

Transformare

Pentru a converti numerele scrise cu cifre arabe în romane, se folosesc funcții speciale.

De exemplu, în versiunea în limba engleză a Microsoft Excel și în orice versiune a OpenOffice.org Calc , există o funcție ROMAN (argument; formă) pentru aceasta , în versiunea rusă Microsoft Excel această funcție se numește ROMAN (număr; formă) . Argumentul opțional „forma” poate lua valori de la 0 la 4, precum și „False” și „True”. Absența argumentului „Formă” sau egalitatea acestuia cu 0 sau „Adevărat” dă forma „clasică” (strictă) a transformării; o valoare de 4 sau „False” dă cel mai simplificat; valorile 1, 2, 3 dau variante intermediare în rigoare-simplificare. Diferențele apar, de exemplu, în numerele 45, 49, 495, 499 (primele sunt indicate în intervalul [1;3999]).

Exemplu de aplicație a funcției ROMAN(număr; formă)
forma 0 unu 2 3 patru
număr
45 XLV VL VL VL VL
49 XLIX VLIV IL IL IL
495 CDXCV LDVL XDV VD VD
499 CDXCIX LDVLIV XDIX VDIV ID

Valorile care nu sunt întregi ale argumentului „număr” sunt rotunjite în jos la un număr întreg; dacă după aceea valoarea este mai mare decât 3999 sau mai mică decât 0, atunci funcția returnează „#Value”; pentru o valoare de 0, este returnată o celulă goală.


Funcții de transformare JavaScript 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 ( numar ) { if ( ! numar ) return '' ; varret = ' ' ; var i = arab . lungime - 1 ; while ( number > 0 ) { if ( number >= arab [ i ]) { ret += roman [ i ]; număr -= arab [ i ]; } else { i -- ; } } return ret ; } function romanToArab ( str ) { str = str . laMajuscule (); varret = 0 ; _ var i = arab . lungime - 1 ; var pos = 0 ; while ( i >= 0 && pos < str . lungime ) { if ( str . substr ( pos , roman [ i ]. lungime ) == roman [ i ]) { ret += arab [ i ]; pos += roman [ i ]. lungime ; } else { i -- ; } } return ret ; } Funcții similare în limbajul C (C89): #include <șir.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 ( unsigned short int arab ) { static char roman [ 80 ]; const int m = sizeof ( arabar ) / sizeof ( int ) -1 , arabmax = arabar [ m ]; const char romanmax = romanar [ m ][ 0 ]; int i , n ; dacă ( ! arab ) { * roman = 0 ; return roman ; } i = 0 _ în timp ce ( arab > arabmax ) { roman [ i ++ ] = romanmax ; arab -= arabmax ; } n = m ; în timp ce ( arabă > 0 ) { if ( arab >= arabar [ n ]) { roman [ i ++ ] = romanar [ n ][ 0 ]; dacă ( n & 1 ) roman [ i ++ ] = romanar [ n ][ 1 ]; arab -= arabar [ n ]; } altfel n- ; _ } roman [ i ] = 0 ; return roman ; } unsigned short int roman2arab ( char * roman ) { const int m = sizeof ( arabar ) / sizeof ( int ) -1 ; unsigned short int arab ; int len , n , i , pir ; len = strlen ( roman ); arab = 0 ; n = m ; i = 0 _ în timp ce ( 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 ; } altfel n- ; _ } întoarcere arabă ; } Program pentru conversia cifrelor arabe în romane în Scala : val arabar = Array ( 1 , 4 , 5 , 9 , 10 , 40 , 50 , 90 , 100 , 400 , 500 , 900 , 1000 ) val romanar = Array ( "I" , "IV" , "V" , "IX" " , " X ​​" , " XL " , " L " , " XC " , " C " , " CD " , " D " , " CM " , " M " ) def arab2roman ( arab : Int , acc : String = " " , n : Int = arabar . lungime - 1 ): String = if ( arab == 0 ) acc else if ( arab >= arabar ( n )) arab2roman ( arab - arabar ( n ), acc + romanar ( n ), n ) else arab2roman ( arab , acc , n - 1 ) // arab2roman(4933) = MMMMCMXXXIII Program pentru conversia cifrelor arabe în cifre romane și invers în limba Pascal [9] tip str2 = șir [ 2 ] ; const Rims : matrice [ 1 .. 14 ] de str2 = ( 'M' , 'CM' , 'D' , 'CD' , 'C' , 'XC' , 'L' , 'XL' , 'X' , 'IX' , 'V' , 'IV' , 'I' , '' ) ; Arab : matrice [ 1 .. 14 ] de întreg = ( 1000 , 900 , 500 , 400 , 100 , 90 , 50 , 40 , 10 , 9 , 5 , 4 , 1 , 0 ) ; var N , NI , I , J : întreg ; S : șir _ funcția Arab2Rim ( N : întreg ) : șir ; var S : șir ; I : întreg ; începe S := '' ; eu := 1 ; în timp ce N > 0 începe în timp ce arabă [ I ] < = N începe S := S + Rims [ I ] ; N := N - Arab [ I ] end ; I := I + 1 capăt ; Arab2Rim := S end ; funcția Rim2Arab ( S : șir ) : întreg ; var I , N : întreg ; începe eu := 1 ; N : = 0 while S <> '' do begin while Rims [ I ] = Copy ( S , 1 , Length ( Rims [ I ] ) ) do begin S := Copy ( S , 1 + Length ( Rims [ I ] ) , 255 ) ; N := N + Arab [ I ] end ; I := I + 1 capăt ; Rim2Arab := N end ; începe WriteLn ( 'Traducere din arabă în cifre romane. 1999 B_SA' ) ; { Write('Introduceți numărul de convertit:'); ReadLn(N);} for NI := 26 to 46 do WriteLn ( NI , ' = ' , Arab2Rim ( NI ) , ' back ' , Rim2Arab ( Arab2Rim ( NI ) ) ) ; sfârşitul . Funcție de conversie a numărului arab în număr roman în Pascal [10] function Arab2Roman ( arab : integer ) : sir ; var i : întreg ; d : întreg ; arab_str : șir _ arab_len : întreg ; începe Rezultatul := '' ; arab_str := IntToStr ( arab ) ; arab_len := Lungime ( arab_str ) ; for i := 0 to arab_len - 1 do begin d := StrToInt ( String ( arab_str [ arab_len - i ])) ; dacă ( d + 1 ) mod 5 = 0 atunci Rezultat := Copiere ( ' IXCM ' , 1 + i , 1 ) + Copiere ( ' VXLCDM ' , i * 2 + ( d + 1 ) div 5 , 1 ) + Rezultat altceva Rezultat := Copiere ( 'VLD' , 1 + i , d div 5 ) + Copiere ( 'IIIXXXCCCMMM' , 1 + i * 3 , ( d mod 5 )) + Rezultat ; sfârşitul ; sfârşitul ; Funcția de conversie arabă în romană în BASIC (cel mai scurt cod) [11] 10 INTRODUCEREA „NUMĂRUL ARAB:” ; A $ 20 PENTRU I = 0 LA LEN ( A$ ) -1 30 X = VAL ( MID$ ( A$ , LEN ( A$ ) - I , 1 )) 40 DACA X = 4 SAU X = 9 ATUNCI B$ = MID$ ( "IXCM" , I + 1 , 1 ) + MID$ ( "VXLCDM" , I * 2 + ( X + 1 ) / 5 , 1 ) + B$ 50 IF X < 4 THEN B$ = MID$ ( "IIIXXXCCCMMM" , 1 + I * 3 , X ) + B$ ELSE IF X > 4 AND X < 9 THEN B$ = MID$ ( "VLD" , I + 1 , 1 ) + MID$ ( "IIIXXXCCCMMM" , 1 + I * 3 , X -5 ) + B$ 60 NEXT I 70 PRINT "NUMĂR ROMAN: " ; B$ Funcția de conversie a numărului arab (în acest caz 1999) în roman pe XPath string-join( pentru $num în (1999) întoarcere ( ('','M','MM','MMM')[($num idiv 1000) mod 10+1], ('','C','CC','CCC','CD','D','DC','DCC','DCCC','CM')[($num idiv 100) mod 10+ unu], ('','X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC')[($num idiv 10) mod 10+ unu], ('','I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX')[$num mod 10+1] ), '') Funcție de conversie a numărului arab (în acest caz 1999) în roman în Perl folosiți strict ; folosiți avertismente ; my $n = 1999 ; numerele mele = [ [ '' , 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) ] ]; my $i = 0 ; @resul meu = (); push @res , ( $nums -> [ $i ++ ][ ( $n % 10 , $n = int ( $n / 10 ))[ 0 ] ]) pentru 0 .. 3 ; imprimare inversă @res ; Clasă pentru conversia numărului arab (de la 1 la 3999) în roman în Java import java.util.* ; clasă publică IntegerConverter { public static String intToRoman ( int number ) { if ( number >= 4000 || number <= 0 ) return null ; Rezultat StringBuilder = StringBuilder nou (); for ( Integer key : units . descendingKeySet ()) { while ( number >= key ) { number -= key ; rezultat . adaugă ( units . get ( cheie )); } } returnează rezultatul . toString (); } privat static final NavigableMap < Integer , String > unități ; static { NavigableMap < Integer , String > initMap = new TreeMap <> (); initMap . pune ( 1000 , "M" ); initMap . pune ( 900 , "CM" ); initMap . pune ( 500 , „D” ); initMap . pune ( 400 , „CD” ); initMap . pune ( 100 , "C" ); initMap . pune ( 90 , "XC" ); initMap . pune ( 50 , "L" ); initMap . pune ( 40 , „XL” ); initMap . pune ( 10 , "X" ); initMap . pune ( 9 , "IX" ); initMap . pune ( 5 , "V" ); initMap . pune ( 4 , "IV" ); initMap . pune ( 1 , „eu” ); units = Colecţii . unmodifiableNavigableMap ( initMap ); } } Clasa de extensie pentru conversia romanului în arabă și invers, pe CSharp /// <summary> /// Clasa este concepută pentru a converti numere arabe în numere romane și invers /// </summary> /// <remarks> /// <para>Clasa conține inițial un alfabet roman numere care pot determina numere arabe de la 1 la 39999</para> /// <para>Dacă doriți să extindeți intervalul, puteți defini notații suplimentare pentru cifrele romane folosind câmpul /// <see cref="BasicRomanNumbers"/> BasicRomanNumbers</remarks> clasă publică statică RomanNumber { /// <summary> /// Alfabetul numerelor romane de bază /// <para>Alfabetul este construit ca un dicționar. Cheia dicționarului este un număr arab (int), valoarea este /// numărul roman (șir) corespunzător acestuia</para> /// </summary> /// <remarks> /// <para>Conține simbolurile romane pentru numerele arabe 1 *,4*,5*,9* - unde „*” reprezintă 0...N zerouri</para> /// <para>Când este creat, conține desemnarea numerelor de la 1 la 10000 (I...ↂ ) Deoarece un caracter nu poate /// să apară de mai mult de trei ori într-un număr roman, puteți converti inițial numerele de la 1 la 39999 în format roman.</para> /// <para>Dacă aveți vrei să poți lucra cu un număr mare de cifre romane, atunci trebuie să adaugi în listă /// desemnări suplimentare începând de la 40000 fără a sări peste elementele 1*,4*,5*,9*.</para> /// </remarks> public static SortedList < int , string > Basic Roman Numbers { get ; set ; } static RomanNumber () { BasicRomanNumbers = new SortedList < int , string >( 17 ); Numerele romane de bază . Adăugați ( 1 , „I” ); Numerele romane de bază . Se adaugă ( 4 , "IV" ); Numerele romane de bază . Adăugați ( 5 , "V" ); Numerele romane de bază . Adăugați ( 9 , "IX" ); Numerele romane de bază . Adăugați ( 10 , "X" ); Numerele romane de bază . Adăugați ( 40 , „XL” ); Numerele romane de bază . Adăugați ( 50 , "L" ); Numerele romane de bază . Adăugați ( 90 , "XC" ); Numerele romane de bază . Se adaugă ( 100 , "C" ); Numerele romane de bază . Adăugați ( 400 , „CD” ); Numerele romane de bază . Adăugați ( 500 , „D” ); Numerele romane de bază . Adăugați ( 900 , „CM” ); Numerele romane de bază . Adăugați ( 1000 , "M" ); Numerele romane de bază . Se adaugă ( 4000 , "Mↁ" ); Numerele romane de bază . Adăugați ( 5000 , "ↁ" ); Numerele romane de bază . Se adaugă ( 9000 , "Mↂ" ); Numerele romane de bază . Adăugați ( 10000 , „ↂ” ); } /// <rezumat> /// Calculează numărul roman maxim posibil pentru alfabetul curent al cifrelor romane. /// </summary> /// <returns>Număr roman maxim posibil</returns> public static uint MaxRomanNumber () { int lastNumber = BaseRomanNumbers . chei . Ultimul (); int numberNoZeros = int . Parse ( lastNumber . ToString (). Înlocuiește ( '0' , '\0' )); int pre = 0 ; comutare ( numărFărăZero ) { cazul 1 : precedent = ultimulNumăr * 4 - 1 ; rupe ; cazul 4 : cazul 9 : anterior = ultimulNumăr ; rupe ; cazul 5 : preliminar = lastNumber + lastNumber / 5 * 3 ; rupe ; implicit : break ; } return uint . Parse ( pre . ToString ( ). Înlocuiește ( '0' , '9' ));; } /// <summary> /// Convertește un număr întreg într-un număr roman /// </summary> /// <param name="Arab number">Numărul arab care trebuie convertit în notație romană</param> // / < exception cref="ArgumentOutOfRangeException">Aruns atunci când un număr egal cu „0” /// sau un număr mai mare decât numărul maxim roman este transmis ca parametru.</exception> /// <returns>Un șir reprezentând un Număr roman</returns> șir public static ArabicRoman ( this int numberArab ) { StringBuilder numberRoman = new StringBuilder (); //Excludeți semnul „-” din numărul arab și transformați-l în primul caracter al numărului roman dacă ( numărArab < 0 ) { numărRoman . anexează ( "-" ); numărArab = - numărArab ; } if ( numberArab == 0 ) throw new ArgumentOutOfRangeException ( "numberArab" , numberArab , "Valoare argument nevalidă: cifrele romane nu pot fi egale cu\"0\"" ); else if ( numberArab > MaxRomanNumber ()) throw new ArgumentOutOfRangeException ( "numberArab" , numberArab , string . Format ( "Valoare argument nevalidă: Nu se poate specifica un număr roman mai mare de {0}" , MaxRomanNumber ())); //Descompuneți numărul arab în numerele sale constitutive și combinați-le într-un singur șir var requiredBasicRomanNumbers = de la la în BasicRomanNumbers . Tastele unde < = numberArab orderby to descending select to ; foreach ( int current in requiredBaseRomanNumbers ) { while (( numberArab / current ) >= 1 ) { numberArab - = curent ; numărRoman . Adăugați ( BaseRomanNumbers [ tech ]); } } return numberRoman . ToString (); } /// <summary> /// Convertește numărul roman în arabă /// </summary> /// <param name="Roman number">Numărul roman care urmează să fie convertit în tip int</param> /// <excepție cref="FormatException">Aruns atunci când un număr non-roman este trecut ca parametru</exception> /// <returns>Un număr întreg care reprezintă notația arabă a unui număr roman</returns> public static int RomanToArabic ( acest șir de caractere numărRoman ) { int numărArab = 0 ; sbyte negativ = 1 ; șir roman = numărRoman . tuns (); if ( roman [ 0 ] == '-' ) { negativ = - 1 ; roma = roma . subșir ( 1 ); } StringBuilder RomanNumber template = new StringBuilder (); foreach ( int to in Base Roman Numbers . Keys ) { int index = Base Roman Numbers . chei . IndexOf ( k ); cuantificator de șir = "?" ; if ( index == 0 || ( index % 4 ) == 0 ) cuantificator = "{0,3}" ; șablon de număr roman . Insert ( 0 , șir . Format ( "(?<{0}>({1}){2})?" , to . ToString (), Basic Roman Numbers [ to ], quantifier )); } //Ignorați majuscule și potrivire trebuie să înceapă la începutul șablonului șir RomanNumber . Inserați ( 0 , "(?i)^" ); //Potrivirea trebuie să apară la sfârșitul șirului model RomanNumber . adăugați ( "$" ); // Verificare simplificată. Nu verifică erori precum IVII dacă (! Regex . IsMatch ( roman , model numeric roman . ToString ())) aruncă o nouă FormatException ( șir . Format ( „Text \"{0}\" nu este un număr roman" , numeral roman )); Număr de potrivire = Regex . Potrivire ( rome , RomanNumber Pattern . ToString ()); foreach ( int to in Base Roman Numbers . Keys ) { numberArab += number . Grupuri [ la . ToString ()]. Lungime / Numere romane de bază [ la ]. Lungime * până la ; } return numberArab * negativ ; } }

Note

  1. Numerale și sisteme de numere Arhivat 22 noiembrie 2018 la Wayback Machine . Enciclopedie online în jurul lumii.
  2. M. Ya. Vygodsky „Manual de matematică elementară” Moscova 1958 Editura de stat de literatură fizică și matematică. pagina 62
  3. Drumul lui Beckham către Roman Arhivat 1 mai 2020 la Wayback Machine // BBC , 17 aprilie 2002
  4. Standard Unicode, 15.3 Arhivat la 27 iunie 2010 la Wayback Machine ("Pentru majoritatea scopurilor, este de preferat să compuneți numerele romane din secvențe ale literelor latine corespunzătoare.")
  5. 12 formulare de numere Unicode . Consultat la 30 martie 2009. Arhivat din original pe 25 martie 2009.
  6. ^ Perry, David J. Proposal to Add Additional Ancient Roman Characters la UCS Arhivat 22 iunie 2011 la Wayback Machine .
  7. Pentru primele două rânduri
  8. Capitolul 31. Notația numerică romană :: Idei de implementare . Data accesului: 15 octombrie 2015. Arhivat din original pe 18 noiembrie 2015.
  9. „Science and Life” N12 1986 p. 95, V. Ptitsyn, Moscova
  10. Autor - Kuznetsov Evgeny A.
  11. Autor - Evgheni A. Kuznetsov, 1992

Vezi și