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)
|
|
Această pagină sau secțiune conține caractere speciale Unicode . Dacă nu aveți fonturile necesare , este posibil ca unele caractere să nu se afișeze corect.
|
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”:
- IV = 4
- IX = 9
- XL=40
- XC = 90
- CD=400
- CM=900
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:
- 999. Mie (M), scădeți 1 (I), obțineți 999 (IM) în loc de CMXCIX. Consecință: 1999 - MIM în loc de MCMXCIX
- 95. O sută (C), scădeți 5 (V), obțineți 95 (VC) în loc de XCV
- 1950: O mie (M), scade 50 (L), obținem 950 (LM). Consecință: 1950 - MLM în loc de MCML
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:
- Secolul sau numărul mileniului: secolul XIX, mileniul II î.Hr. e.
- Conjugarea verbelor.
- Marcarea fețelor ceasului „ antic ” .
- Numărul de volum dintr-o carte cu mai multe volume sau un volum de reviste (uneori numere de părți ale unei cărți, secțiuni sau capitole ).
- În alfabetizarea muzicală.
- Numărul ordinal al monarhului .
- Grupa de sânge pe peticele uniformei militarilor Forțelor Armate ale Federației Ruse .
- Pe navele sovietice , pescajul era indicat în metri cu litere romane (la navele engleze - în picioare cu litere romane).
- În unele ediții, numere de pagini cu prefața cărții, pentru a nu corecta referințele din textul principal la schimbarea prefaței.
- Alte evenimente importante sau articole de listă, de exemplu: V postulatul lui Euclid , Al Doilea Război Mondial , XX Congres al PCUS , Jocurile Olimpiadei XXII și altele asemenea.
- Valența elementelor chimice.
- Numărul de corp în forțele armate.
- Anul finalizării clădirii pe frontonul acesteia.
- Numărul ordinal al unei trepte din scară.
- În analiza matematică , numărul derivatului este scris cu cifre romane , totuși, când citesc (de obicei) se spune „loc” în loc de I, „două linii” în loc de II, „trei linii” în loc de III. În fine, începând de la IV, se citește „derivata a patra”: și .
![{\displaystyle f'(x)=f^{I}(x)=f^{(1)}(x)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ad375198a1c303c29900fc1fca7f51cf7c47e8f7)
![{\displaystyle f^{IV}(x)=f^{(4)}(x)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/40538c134643e3767f9f1d8d43fa46a533a1922e)
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.
![{\displaystyle 18{\textstyle {\frac {25}{XI)}}87\sim 19{\textstyle {\frac {26}{I)}}43}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9dce3d864f4b2807470c4ecb35ff45f57a6874ee)
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
- ↑ Numerale și sisteme de numere Arhivat 22 noiembrie 2018 la Wayback Machine . Enciclopedie online în jurul lumii.
- ↑ M. Ya. Vygodsky „Manual de matematică elementară” Moscova 1958 Editura de stat de literatură fizică și matematică. pagina 62
- ↑ Drumul lui Beckham către Roman Arhivat 1 mai 2020 la Wayback Machine // BBC , 17 aprilie 2002
- ↑ 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.")
- ↑ 12 formulare de numere Unicode . Consultat la 30 martie 2009. Arhivat din original pe 25 martie 2009. (nedefinit)
- ^ Perry, David J. Proposal to Add Additional Ancient Roman Characters la UCS Arhivat 22 iunie 2011 la Wayback Machine .
- ↑ Pentru primele două rânduri
- ↑ Capitolul 31. Notația numerică romană :: Idei de implementare . Data accesului: 15 octombrie 2015. Arhivat din original pe 18 noiembrie 2015. (nedefinit)
- ↑ „Science and Life” N12 1986 p. 95, V. Ptitsyn, Moscova
- ↑ Autor - Kuznetsov Evgeny A.
- ↑ Autor - Evgheni A. Kuznetsov, 1992
Vezi și