Romertal

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 12. oktober 2022; checks kræver 2 redigeringer .
Talsystemer i kultur
indo-arabisk
arabisk
tamil
burmesisk
Khmer
Lao
Mongolsk
Thai
østasiatisk
kinesisk
japansk
Suzhou
koreansk
Vietnamesiske
tællestokke
Alfabetisk
Abjadia
Armensk
Aryabhata
kyrillisk
græsk
Georgisk
etiopisk
jødisk
Akshara Sankhya
Andet
Babylonsk
egyptisk
etruskisk
romersk
Donau
Attic
Kipu
Mayan
Aegean
KPPU-symboler
positionelle
2 , 3 , 4 , 5 , 6 , 8 , 10 , 12 , 16 , 20 , 60
Nega-positionel
symmetrisk
blandede systemer
Fibonacci
ikke-positionelle
Ental (unær)

Romertal  er tal brugt af de gamle romere i deres ikke-positionelle talsystem .

Naturlige tal skrives ved at gentage disse cifre. Samtidig, hvis et større tal kommer før et mindre, så lægges de sammen (additionsprincippet), men hvis et mindre kommer før et større, så trækkes det mindre fra det større (subtraktionsprincippet). Den sidste regel gælder kun for at undgå den firedobbelte gentagelse af samme figur.

Romertal dukkede op 500 f.Kr. fra etruskerne (se etruskisk alfabet ), som kunne låne nogle af tallene fra proto-kelterne .

Tal og notation af tal

Romersk notation for tal er nu bedre kendt end noget andet gammelt talsystem. Dette forklares ikke så meget af nogle særlige fordele ved det romerske system, men af ​​den enorme indflydelse, som Romerriget nød i den relativt nye fortid. Etruskere , der erobrede Rom i det 7. århundrede f.Kr. e. var påvirket af østlige middelhavskulturer. Dette forklarer til dels ligheden mellem de grundlæggende principper i de romerske og attiske talsystemer. Begge systemer var decimaler, selvom tallet fem spillede en særlig rolle i begge talsystemer. Begge systemer brugte gentagne tegn, når de skrev tal.

De gamle romerske symboler for tallene 1, 5, 10, 100 og 1000 ( hindo-arabisk notation ) var symbolerne I, V, X, Θ (eller ⊕ eller ⊗ ) og Φ (eller ↀ eller CIƆ ) , henholdsvis. Selvom der er skrevet meget om den oprindelige betydning af disse symboler, er der stadig ingen tilfredsstillende forklaring på dem. Ifølge en af ​​de udbredte teorier viser romertallet V en åben hånd med fire fingre presset sammen og tommelfingeren forlænget; symbolet X, ifølge samme teori, forestiller to krydsede hænder eller et tocifret V. Symbolerne for tallene 100 og 1000 stammer sandsynligvis fra de græske bogstaver Θ og φ. Det vides ikke, om de senere betegnelser C og M er afledt af ældre romerske tegn eller er akrofonisk relateret til begyndelsesbogstaverne i de latinske ord, der betyder 100 (centum) og 1000 (mille). Det menes, at det romerske symbol for tallet 500, bogstavet D , stammer fra halvdelen af ​​det gamle symbol for 1000. Bortset fra at de fleste romerske symboler højst sandsynligt ikke var akrofoniske, og at mellemsymbolerne for tallene 50 og 500 ikke var kombinationer af symboler for tallene 5 og 10 eller 5 og 100, lignede resten af ​​det romerske talsystem Loftet. Romerne brugte ofte subtraktionsprincippet, så nogle gange brugte de IX i stedet for VIIII og XC i stedet for LXXXX; forholdsvis senere symbolet IV i stedet for IIII. Derfor kan alle romertal nu skrives med store latinske bogstaver.

Generelt var romerne ikke tilbøjelige til at lave matematik, så de følte ikke meget behov for store tal. De brugte dog af og til symbolet CCIƆƆ for 10000 og symbolet CCCIƆƆƆ for tallet 100000 . Halvdelene af disse symboler blev nogle gange brugt til at repræsentere tallene 5000 ( IƆƆ ) og 50000 ( IƆƆƆ ).

Romerne undgik fraktioner lige så stædigt som store tal. I praktiske måleopgaver brugte man ikke brøker, idet man normalt underinddelte måleenheden i 12 dele, således at resultatet af målingen præsenteres som et sammensat tal, summen af ​​multipla af forskellige enheder, som man gør i dag, når længden er udtrykt i yards, fod og inches. De engelske ord "ounce" ( ounce ) og "inch" ( inch ) kommer fra det latinske ord lat.  uncia ( ounce ), der angiver en tolvtedel af den grundlæggende længdeenhed [1] [2] .

en jeg lat.  unus, unum
5 V lat.  quinque
ti x lat.  decem
halvtreds L lat.  quinquaginta
100 C lat.  procent
500 D lat.  quingenti
1000 M lat.  mille
Arabisk notation romersk notation
en jeg
2 II
3 III
fire IV
5 V
6 VI
7 VII
otte VIII
9 IX
ti x
elleve XI
12 XII
13 XIII
fjorten XIV
femten XV
16 XVI
17 XVII
atten XVIII
19 XIX
tyve XX
tredive XXX
40 XL
halvtreds 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

For korrekt at skrive store tal i romertal, skal du først nedskrive antallet af tusinder, derefter hundreder, så tiere og til sidst enheder.

Der er intet nul i det romerske talsystem, men nul blev tidligere brugt som nulla (nej), nihil (intet) og N (det første bogstav i disse ord).

I dette tilfælde kan nogle af tallene (I, X, C, M) gentages, men ikke mere end tre gange i træk ; således kan de bruges til at skrive ethvert naturligt tal, der ikke er mere end 3999 (MMMCMXCIX). I de tidlige perioder var der tegn på større tal - 5000, 10.000, 50.000 og 100.000 (så er det maksimale antal ifølge den nævnte regel 399.999). Når man skriver tal i det romerske talsystem, kan det mindre ciffer være til højre for det større; i dette tilfælde tilføjes det. For eksempel skrives tallet 283 på romersk som CCLXXXIII, det vil sige 100+100+50+30+3=283. Her gentages tallet, der repræsenterer hundrede, to gange, og tallene, der repræsenterer henholdsvis ti og én, gentages tre gange.

Eksempel: nummer 1988. Et tusinde M, ni hundrede CM, otte tiere LXXX, otte enheder VIII. Lad os skrive dem sammen: MCMLXXXVIII.

Ganske ofte, for at fremhæve tal i teksten, blev der tegnet en streg over dem: LXIV . Nogle gange blev linjen tegnet både over og under: XXXII  - især er det sædvanligt at fremhæve romertal i russisk håndskrevet tekst (dette bruges ikke i typografisk sætning på grund af teknisk kompleksitet). For andre forfattere kunne overlinjen indikere en stigning i værdien af ​​figuren med 1000 gange: V = 5000.

Det var først i 1800-tallet , at tallet "fire" blev skrevet ned som "IV" overalt , før det blev rekorden "IIII" oftest brugt. Indgangen "IV" kan dog findes allerede i dokumenterne til Forme of Cury- manuskriptet , der dateres tilbage til 1390 . Urskiver har traditionelt brugt " IIII " i stedet for "IV" i de fleste tilfælde, hovedsageligt af æstetiske årsager: denne stavemåde giver visuel symmetri med tallene "VIII" på den modsatte side, og den omvendte "IV" er sværere at læse end "III". Der er også en version, hvor IV ikke var skrevet på urskiven, fordi IV er de første bogstaver i det latinske navn på guden Jupiter (IVPITER).

Det mindre tal kan skrives til venstre for det større, så skal det trækkes fra det større. I dette tilfælde kan kun tal, der angiver 1 eller potenser af 10, trækkes fra, og kun de to nærmeste tal i talrækken til det subtraherede (det vil sige det subtraherede, ganget med 5 eller 10) kan fungere som minuend. Gentagelser af et mindre antal er ikke tilladt. Der er således kun seks anvendelser af "subtraktionsreglen":

For eksempel vil tallet 94 være XCIV = 100 - 10 + 5 - 1 = 94 - den såkaldte "subtraktionsregel" (optrådte i senantikkens æra, og før det skrev romerne tallet 4 som IIII, og tallet 40 som XXXX).

Det skal bemærkes, at andre metoder til "subtraktion" ikke er tilladt; således skal tallet 99 skrives som XCIX, men ikke som IC. Men i dag bruges i nogle tilfælde også en forenklet notation af romerske tal: for eksempel i Microsoft Excel , når du konverterer arabiske tal til romerske ved hjælp af funktionen "ROMAN ()", kan du bruge flere typer repræsentation af tal, fra klassisk til meget forenklet (f.eks. kan tallet 499 skrives som CDXCIX, LDVLIV, XDIX, VDIV eller ID). Forenklingen er, at for at reducere et hvilket som helst ciffer, kan et hvilket som helst andet ciffer skrives til venstre for det:

Tilfælde af sådan notation af tal (normalt år) findes ofte i krediteringerne af amerikanske tv-serier. For eksempel for året 1998: MIIM i stedet for MCMXCVIII.

Romertal kan også bruges til at skrive større klasser af tal. For at gøre dette placeres en linje over de tal, der repræsenterer tusinder, og en dobbelt linje er placeret over de tal, der repræsenterer millioner. Undtagelsen er tallet I; i stedet for en linje over, skrives tallet M, og startende fra en million - en linje fra oven. For eksempel ville tallet 123123 se sådan ud:

CXXIII CXXIII

Og en million er ligesom jeg , men ikke med én, men med to funktioner i spidsen: Jeg

Ansøgning

På russisk bruges romertal i følgende tilfælde:

Romertal blev meget brugt i USSR, når de angiver datoen for at angive årets måned , for eksempel: 11 / III-85 eller 9.XI.89, dette kan ses på mange arkivdokumenter fra dengang. På lignende måde skrev de gennem en skråstreg også datoen for lektionen ned i klassens journaler , for eksempel 24/II. For at angive datoer for liv og død på gravsten blev der ofte brugt et særligt format, hvor måneden i året også blev angivet med romertal, for eksempel (25. november 1887 ~ 26. januar 1943). Et lignende format blev brugt i lægeerklæringer i 1970'erne og 1980'erne.

Med overgangen til computerbehandling af information er datoformater baseret på romertal praktisk talt gået ud af brug.

På andre sprog kan omfanget af romertal variere. I vestlige lande er årstallet ofte skrevet med romertal, for eksempel på bygningers gavle og i krediteringer af video-, film- og tv-produkter [3] .

I det moderne Litauen , på vejskilte , på butiksvinduer , på skilte fra virksomheder, kan romertal angive ugedagene .

Unicode

Unicode- standarden anbefaler, at romertal repræsenteres med almindelige latinske tegn [4] . Standarden omfatter dog også specialtegn for romertal som en del af Number Forms [ 5 ] i tegnområdet med koderne U+2160 til U+2188. For eksempel kan MCMLXXXVIII være repræsenteret i formen ⅯⅭⅯⅬⅩⅩⅩⅧ. Dette interval omfatter både små og store cifre for tallene 1 (Ⅰ eller I) til 12 (Ⅻ eller XII), inklusive kombinerede glyffer for sammensatte tal såsom 8 (Ⅷ eller VIII), primært for at sikre kompatibilitet med østasiatiske tegnsæt i industristandarder såsom JIS X 0213 , hvor disse karakterer er defineret. Kombinerede glyffer bruges til at repræsentere tal, der tidligere bestod af enkelte tegn (for eksempel Ⅻ i stedet for dets repræsentation som Ⅹ og Ⅱ). Derudover findes der glyffer for de arkaiske [5] former for 1000, 5000, 10.000, kapital invers C (Ɔ), sent 6 (ↅ, svarende til det græske stigma : Ϛ), tidligt 50 ( ↆ, som ligner en pil peger ned ↓⫝⊥ [6] ), 50.000 og 100.000. Det skal bemærkes, at det lille omvendte c, ↄ ikke er inkluderet i romertalstegn, men er inkluderet i Unicode-standarden som det store Claudian-bogstav Ↄ.  

Koden 0 en 2 3 fire 5 6 7 otte 9 EN B C D E F
Værdi [7] en 2 3 fire 5 6 7 otte 9 ti elleve 12 halvtreds 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
Betyder 1000 5000 10.000 100 6 halvtreds 50.000 100.000
U+2180
2180

2181

2182

2183

2185

2186

2187

2188

Visning af alle disse tegn kræver software, der understøtter Unicode-standarden og en skrifttype , der indeholder de tilsvarende glyffer for disse tegn (f.eks. Universalia -skrifttypen ).

Regulære udtryk

Regulært udtryk til kontrol af romertal - ^(M{0,3})(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$[8] I Perl kan du bruge et regulært udtryk til at søge efter romertal i en streng 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.

Transformation

For at konvertere tal skrevet med arabiske tal til romerske, bruges specielle funktioner.

For eksempel, i den engelske version af Microsoft Excel og i enhver version af OpenOffice.org Calc , er der en ROMAN (argument; form) funktion for dette , i den russiske version af Microsoft Excel kaldes denne funktion ROMAN (tal; form) . Det valgfrie argument "shape" kan have værdier fra 0 til 4, såvel som "False" og "True". Fraværet af argumentet "Form" eller dets lighed med 0 eller "Sandt" giver transformationens "klassiske" (strenge) form; en værdi på 4 eller "False" giver den mest forenklede; værdier 1, 2, 3 giver varianter, der er mellemliggende i rigor-simplifikation. Forskelle vises for eksempel i tallene 45, 49, 495, 499 (de første er angivet i området [1;3999]).

Eksempel på funktionsapplikation ROMAN(tal; form)
formen 0 en 2 3 fire
nummer
45 XLV VL VL VL VL
49 XLIX VLIV IL IL IL
495 CDXCV LDVL XDV VD VD
499 CDXCIX LDVLIV XDIX VDIV ID

Ikke-heltalsværdier af "number"-argumentet rundes ned til et heltal; hvis værdien derefter er større end 3999 eller mindre end 0, returnerer funktionen "#Value"; for en værdi på 0 returneres en tom celle.


JavaScript transformationsfunktioner 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' ]; funktion arabToRoman ( tal ) { if ( ! tal ) returnerer '' ; varret = ' ' ; var i = arabisk . længde - 1 ; while ( tal > 0 ) { if ( tal >= arabisk [ i ]) { ret += romersk [ i ]; tal -= arabisk [ i ]; } andet { i -- ; } } returnere ret ; } function romanToArab ( str ) { str = str . toStore bogstaver (); varret = 0 ; _ var i = arabisk . længde - 1 ; var pos = 0 ; while ( i >= 0 && pos < str . length ) { if ( str . substr ( pos , romersk [ i ]. længde ) == romersk [ i ]) { ret += arab [ i ]; pos += romersk [ i ]. længde ; } andet { i -- ; } } returnere ret ; } Lignende funktioner i C-sprog (C89): #include <string.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 ( usigneret kort int arab ) { statisk char romersk [ 80 ]; const int m = størrelse på ( arabar ) / størrelse på ( int ) -1 , arabmax = arabar [ m ]; const char romanmax = romanar [ m ][ 0 ]; int i , n ; if ( ! arab ) { * romersk = 0 ; returnere romersk ; } i = 0 _ while ( arab > arabmax ) { roman [ i ++ ] = romanmax ; arab -= arabmax ; } n = m ; while ( arabisk > 0 ) { if ( arab >= arabar [ n ]) { roman [ i ++ ] = romanar [ n ][ 0 ]; hvis ( n & 1 ) roman [ i ++ ] = romanar [ n ][ 1 ]; arab -= arabar [ n ]; } andet n- ; _ } roman [ i ] = 0 ; returnere romersk ; } usigneret kort int roman2arab ( char * roman ) { const int m = størrelse ( arabar ) / størrelse på ( int ) -1 ; usigneret kort int arab ; int len , n , i , pir ; len = strlen ( romersk ); arabisk = 0 ; n = m ; i = 0 _ mens ( 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 ; } andet n- ; _ } returnere arabisk ; } Program til at konvertere arabiske tal til romerske i Scala : val arabar = Array ( 1 , 4 , 5 , 9 , 10 , 40 , 50 , 90 , 100 , 400 , 500 , 900 , 1000 ) val romanar = Array ( "I" , "IV" , "IX " , "V" , " , "X" , "XL" , "L" , "XC" , "C" , "CD" , "D" , "CM" , "M" ) def arab2roman ( arab : Int , acc : String = " " , n : Int = arabar . længde - 1 ): String = if ( arab == 0 ) acc else if ( arab >= arabar ( n )) arab2roman ( arab - arabar ( n ), acc + romanar ( n ), n ) andet arab2roman ( arab , acc , n - 1 ) // arab2roman(4933) = MMMMCMXXXIII Program til at konvertere arabiske tal til romertal og omvendt på Pascal -sprog [9] type str2 = streng [ 2 ] ; const Rims : array [ 1 .. 14 ] of str2 = ( 'M' , 'CM' , 'D' , 'CD' , 'C' , 'XC' , 'L' , 'XL' , 'X' , 'IX' , 'V' , 'IV' , 'I' , '' ) ; Arabisk : matrix [ 1 .. 14 ] af heltal = ( 1000 , 900 , 500 , 400 , 100 , 90 , 50 , 40 , 10 , 9 , 5 , 4 , 1 , 0 ) ; var N , NI , I , J : heltal ; S : streng _ funktion Arab2Rim ( N : heltal ) : streng ; var S : streng ; I : heltal ; begynde S := '' ; I := 1 ; mens N > 0 begynder, mens Arab [ I ] < = N begynder S : = S + Rims [ I ] ; N := N - Arabisk [ I ] ende ; I := I + 1 ende ; Arab2Rim := S ende ; funktion Rim2Arab ( S : streng ) : heltal ; var I , N : heltal ; begynder I := 1 ; N : = 0 mens S <> '' begynder, mens Fælge [ I ] = Kopi ( S , 1 , Længde ( Fælge [ I ] ) ) begynder S := Kopi ( S , 1 + Længde ( Fælge [ I ] ) , 255 ) ; N := N + arabisk [ I ] ende ; I := I + 1 ende ; Rim2Arab := N ende ; start WriteLn ( 'Oversættelse fra arabisk til romertal. 1999 B_SA' ) ; { Write('Indtast tal for at konvertere:'); ReadLn(N);} for NI := 26 til 46 gør WriteLn ( NI , ' = ' , Arab2Rim ( NI ) , ' back ' , Rim2Arab ( Arab2Rim ( NI ) ) ) ; ende . Funktion til at konvertere arabisk til romersk tal i Pascal [10] funktion Arab2Roman ( arabisk : heltal ) : streng ; var i : heltal ; d : heltal ; arab_str : streng _ arab_len : heltal ; start Resultat := '' ; arab_str := IntToStr ( arabisk ) ; arab_len := Længde ( arab_str ) ; for i := 0 til arab_len - 1 begynder d := StrToInt ( String ( arab_str [ arab_len - i ] )) ; hvis ( d + 1 ) mod 5 = 0 , så Resultat := Kopi ( 'IXCM' , 1 + i , 1 ) + Kopi ( 'VXLCDM' , i * 2 + ( d + 1 ) div 5 , 1 ) + Resultat andet Resultat := Kopi ( 'VLD' , 1 + i , d div 5 ) + Kopi ( 'IIIXXXCCCMMM' , 1 + i * 3 , ( d mod 5 )) + Resultat ; ende ; ende ; Arabisk til romersk konverteringsfunktion i BASIC (den korteste kode) [11] 10 INDFØR "ARABISK NUMMER: " ; A $ 20 FOR I = 0 TIL LEN ( A$ ) -1 30 X = VAL ( MID$ ( A$ , LEN ( A$ ) - I , 1 )) 40 HVIS X = 4 ELLER X = 9 B$ = MID$ ( "IXCM" , I + 1 , 1 ) + MID$ ( "VXLCDM" , I * 2 + ( X + 1 ) / 5 , 1 ) + B$ 50 HVIS X < 4 B$ = MID$ ( "IIIXXXCCCMMM" , 1 + I * 3 , X ) + B$ ELSE HVIS X > 4 OG X < 9 B$ = MID$ ( "VLD" , I + 1 , 1 ) + MID$ ( "IIIXXXCCCMMM" , 1 + I * 3 , X -5 ) + B$ 60 NÆSTE I 70 UDSKRIV "ROMERSK NUMMER: " ; B$ Funktion til at konvertere arabisk tal (i dette tilfælde 1999) til romersk på XPath string-join( for $num (1999) Vend tilbage ( ('','M','MM','MMM')[($num idiv 1000) mod 10+1], ('','C','CC','CCC','CD','D','DC','DCC','DCCC','CM')[($num idiv 100) mod 10+ en], ('','X','XX','XXX','XL','L','LX','LXX','LXXX','XC')[($num idiv 10) mod 10+ en], ('','I','II','III','IV','V','VI','VII','VIII','IX')[$num mod 10+1] ), '') Funktion til at konvertere arabisk tal (i dette tilfælde 1999) til romersk i Perl brug streng ; brug advarsler ; min $n = 1999 ; mine $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) ] ]; min $i = 0 ; min @res = (); push @res , ( $nums -> [ $i ++ ][ ( $n % 10 , $n = int ( $n / 10 ))[ 0 ] ]) for 0 .. 3 ; udskriv omvendt @res ; Klasse til konvertering af arabisk tal (fra 1 til 3999) til romersk i Java importer java.util.* ; public class IntegerConverter { public static String intToRoman ( int tal ) { if ( tal >= 4000 || tal <= 0 ) returner null ; StringBuilder- resultat = ny StringBuilder (); for ( Heltalstast : enheder . descendingKeySet ()) { while ( number > = key ) { number -= key ; resultat . tilføj ( enheder . ( nøgle )); } } returner resultat . toString (); } private static final 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 , "I" ); enheder = Samlinger . unmodificableNavigableMap ( initMap ); } } Udvidelsesklasse til at konvertere romersk til arabisk og omvendt på CSharp /// <resumé> /// Klassen er designet til at konvertere arabiske tal til romerske tal og omvendt /// </summary> /// <remarks> /// <para >Klassen indeholder oprindeligt et alfabet af romersk tal, der kan bestemme arabiske tal fra 1 til 39999</para> /// <para >Hvis du vil udvide området, kan du definere yderligere notationer for romertal ved at bruge /// felt <see cref="BasicRomanNumbers"/> BasicRomanNumbers</remarks> offentlig statisk klasse RomanNumber { /// <summary> /// Alfabet af grundlæggende romertal /// <para>Alfabetet er bygget som en ordbog. Nøglen til ordbogen er et arabisk tal (int), værdien er dets tilsvarende /// romersk tal (streng)</para> /// </summary> /// <remarks> /// <para >Indeholder de romerske symboler for arabiske tal 1 *,4*,5*,9* - hvor "*" repræsenterer 0...N nuller</para> /// <para >Indeholder, når de er oprettet, betegnelsen for tal fra 1 til 10000 (I...ↂ ) Da et tegn ikke kan /// forekomme mere end tre gange i et romersk tal, kan du i første omgang konvertere tal fra 1 til 39999 til romersk format.</para> /// <para>Hvis du ønsker at kunne arbejde med et stort antal romertal, så skal du tilføje til listen /// yderligere betegnelser startende fra 40000 uden at springe elementerne 1*,4*,5*,9* over.</para> /// </remarks> public static SortedList < int , string > Grundlæggende romerske tal { get ; sæt ; } static RomanNumber () { BasicRomanNumbers = new SortedList < int , string >( 17 ); Grundlæggende romerske tal . Tilføj ( 1 , "I" ); Grundlæggende romerske tal . Tilføj ( 4 , "IV" ); Grundlæggende romerske tal . Tilføj ( 5 , "V" ); Grundlæggende romerske tal . Tilføj ( 9 , "IX" ); Grundlæggende romerske tal . Tilføj ( 10 , "X" ); Grundlæggende romerske tal . Tilføj ( 40 , "XL" ); Grundlæggende romerske tal . Tilføj ( 50 , "L" ); Grundlæggende romerske tal . Tilføj ( 90 , "XC" ); Grundlæggende romerske tal . Tilføj ( 100 , "C" ); Grundlæggende romerske tal . Tilføj ( 400 , "CD" ); Grundlæggende romerske tal . Tilføj ( 500 , "D" ); Grundlæggende romerske tal . Tilføj ( 900 , "CM" ); Grundlæggende romerske tal . Tilføj ( 1000 , "M" ); Grundlæggende romerske tal . Tilføj ( 4000 , "Mↁ" ); Grundlæggende romerske tal . Tilføj ( 5000 , "ↁ" ); Grundlæggende romerske tal . Tilføj ( 9000 , "Mↂ" ); Grundlæggende romerske tal . Tilføj ( 10000 , "ↂ" ); } /// <resumé> /// Beregner det maksimalt mulige romertal for det aktuelle alfabet af romertal. /// </summary> /// <returns>Maksimalt muligt romersk tal</returns> public static uint MaxRomanNumber () { int lastNumber = BaseRomanNumbers . nøgler . Sidste (); int numberNoZeros = int . Parse ( lastNumber . ToString (). Erstat ( '0' , '\0' )); int præ = 0 ; switch ( nummerUdenNuller ) { tilfælde 1 : forrige = sidsteNumber * 4-1 ; _ _ bryde ; case 4 : case 9 : previous = lastNumber ; bryde ; tilfælde 5 : foreløbig = sidste tal + sidste tal / 5 * 3 ; bryde ; default : break ; } returnere uint . Parse ( pre . ToString ( ). Erstat ( '0' , '9' ));; } /// <summary> /// Konverterer et heltal til et romersk tal /// </summary> /// <param name="Arabisk tal">Det arabiske tal, der skal konverteres til romersk notation</param> // / < exception cref="ArgumentOutOfRangeException">Kastet, når et tal lig med "0" /// eller et tal større end det maksimale romerske tal sendes som en parameter.</exception> /// <returns>En streng, der repræsenterer en Romersk tal</returns> offentlig statisk streng ArabiskRoman ( dette int nummerArab ) { StringBuilder numberRoman = new StringBuilder (); //Ekskluder tegnet "-" fra det arabiske tal og gør det til det første tegn i det romerske tal, hvis ( talArab < 0 ) { nummerRoman . tilføje ( "-" ); numberArab = - numberArab ; } if ( numberArab == 0 ) smid nyt ArgumentOutOfRangeException ( "numberArab" , numberArab , "Ugyldig argumentværdi: Romertal kan ikke være lig med\"0\"" ); else if ( numberArab > MaxRomanNumber ()) throw new ArgumentOutOfRangeException ( "numberArab" , numberArab , string . Format ( "Ugyldig argumentværdi: Kan ikke angive romersk tal større end {0}" , MaxRomanNumber ())); //Dekomponér det arabiske tal i dets konstituerende romertal og kombiner dem i én streng var requiredBasicRomanNumbers = fra til i BasicRomanNumbers . Taster hvor skal <= nummerArabisk rækkefølge efter til faldende vælg til ; foreach ( int current in requiredBaseRomanNumbers ) { while ( ( antalArab / aktuel ) >= 1 ) { numberArabisk- = aktuel ; nummerromersk . Tilføj ( BaseRomanNumbers [ tech ]); } } returnummerromersk . _ ToString (); } /// <summary> /// Konverterer romersk tal til arabisk /// </summary> /// <param name="romersk tal">romersk tal, der skal konverteres til int type</param> /// <exception cref="FormatException">Kastet, når et ikke-romersk tal sendes som en parameter</exception> /// <returns>Et heltal, der repræsenterer den arabiske notation af et romersk tal</returns > offentlig statisk int RomanToArabic ( dette strengnummerRoman ) { int talArab = 0 ; sbyte negativ = 1 ; streng roman = talRoman . trim (); if ( romersk [ 0 ] == '-' ) { negativ = - 1 ; rom = rom . understreng ( 1 ); } StringBuilder RomanNumber skabelon = ny StringBuilder (); foreach ( int to in Base romertal . Keys ) { int index = Basis romertal . nøgler . Indeks af ( k ); strengkvantifier = " ?" ; if ( indeks == 0 || ( indeks % 4 ) == 0 ) kvantifier = "{0,3}" ; romersk tal skabelon . Indsæt ( 0 , streng . Formater ( "(?<{0}>({1}){2})?" , til . ToString (), Grundlæggende romerske tal [ til ], kvantifier )); } //Ignorer store og små bogstaver + match skal starte i begyndelsen af ​​strengen RomanNumber-skabelonen . Indsæt ( 0 , "(?i)^" ); //Tilpasningen skal forekomme i slutningen af ​​strengen RomanNumber-mønsteret . tilføje ( "$" ); // Forenklet kontrol. Kontrollerer ikke for fejl såsom IVII, hvis (! Regex . IsMatch ( romersk , romertalsmønster . ToString ())) kaster nyt FormatException ( streng . Format ( "Tekst \"{0}\" er ikke et romertal" , romertal )); Matchnummer = Regex . _ Match ( rom , RomanNumber Pattern . ToString ()); foreach ( int til i basis romertal . Keys ) { numberArab += tal . Grupper [ til . ToString ()]. Længde / Grundlæggende romerske tal [ til ]. Længde * til ; } returner talArab * negativ ; } }

Noter

  1. Tal og talsystemer Arkiveret 22. november 2018 på Wayback Machine . Online Encyclopedia Around the World.
  2. M. Ya. Vygodsky "Håndbog i elementær matematik" Moskva 1958 Statens forlag for fysisk og matematisk litteratur. side 62
  3. Beckhams vej til Roman Arkiveret 1. maj 2020 på Wayback Machine // BBC , 17. april 2002
  4. Unicode Standard, 15.3 Arkiveret 27. juni 2010 på Wayback Machine ("Til de fleste formål er det at foretrække at sammensætte romertallene ud fra sekvenser af de passende latinske bogstaver.")
  5. 12 Unicode -nummerformularer . Hentet 30. marts 2009. Arkiveret fra originalen 25. marts 2009.
  6. Perry, David J. Forslag om at tilføje yderligere antikke romerske karakterer til UCS Arkiveret 22. juni 2011 på Wayback Machine .
  7. For de første to linjer
  8. Kapitel 31. Romersk numerisk notation :: Implementeringsidéer . Dato for adgang: 15. oktober 2015. Arkiveret fra originalen 18. november 2015.
  9. "Science and Life" N12 1986 s. 95, V. Ptitsyn, Moskva
  10. Forfatter - Kuznetsov Evgeny A.
  11. Forfatter - Evgeny A. Kuznetsov, 1992

Se også