Знаймо

Додати знання

приховати рекламу



Цей текст може містити помилки.

Римські цифри



План:


Введення

Римські цифри - цифри, що використовувалися стародавніми римлянами в своїй непозиційній системі числення.

Натуральні числа записуються за допомогою повторення цих цифр. При цьому, якщо більша цифра стоїть перед меншою, то вони складаються (принцип додавання), якщо ж менша - перед більшою, то менша віднімається від більшої (принцип віднімання). Останнє правило застосовується тільки щоб уникнути чотириразового повторення однієї і тієї ж цифри.

Римські цифри з'явилися за 500 років до нашої ери у етрусків.

Годинник-куранти Спаській вежі

1. Цифри

римські цифри

1 I лат. unus
5 V лат. quinque
10 X лат. decem
50 L лат. quinquaginta
100 C лат. centum
500 D лат. quingenti
1000 M лат. mille

У російській мові для закріплення в пам'яті буквених позначень цифр у порядку убування існують мнемонічні правила:

М и D Аріма З очні L Імон, Х ватіт V сем I х.

M и D аем C овети L бач X зрошення V оспітанним I ндівідуумам

Відповідно M, D, C, L, X, V, I


2. Приклади

Число Римське позначення Примітка
0 -
4 IV до XIX століття - IIII
8 VIII
9 IX
31 XXXI
46 XLVI
99 XCIX
583 DLXXXIII
888 DCCCLXXXVIII від 1 до 1000 - найдовше
1668 MDCLXVIII
1989 MCMLXXXIX
2009 MMIX
2010 MMX
2011 MMXI
3999 MMMCMXCIX
5000
10000

Для правильного запису великих чисел римськими цифрами необхідно спочатку записати число тисяч, потім сотні, потім десятків і, нарешті, одиниць.

При цьому деякі з цифр (I, X, C, M) можуть повторюватися, але не бажано більше трьох разів, таким чином з їх допомогою можна записати будь-яке ціле число не більше 3999 (MMMCMXCIX). У ранні періоди існували знаки для позначення великих цифр - 5000, 10000, 50000 та 100000 (Тоді максимальне число за згаданим правилом одно 399999). При записі чисел в римській системі числення менша цифра може стояти праворуч від більшої; в цьому випадку вона додається до неї. Наприклад, число 283 з-римськи записується як CCLXXXIII, тобто 200 +50 +30 +3 = 283. Тут цифра, що зображає сотню, повторена двічі, а цифри, що зображують відповідно десяток і одиницю, повторені по три рази.

Приклад: число 1988. Одна тисяча M, дев'ять сотень CM, вісім десятків LXXX, вісім одиниць VIII. Запишемо їх разом: MCMLXXXVIII.

Досить часто, щоб виділити числа в тексті, над ними малювали рису: LXIV . Іноді риску малювали і зверху, і знизу: XXXII - Зокрема, так прийнято виділяти римські цифри в російській рукописному тексті (в друкарському наборі це не використовують через технічної складності). У інших авторів риса зверху могла позначати збільшення значення цифри в 1000 разів: V M = 6000.

Годинники марки Tissot з традиційним написанням "IIII"

Повсюдно записувати число "чотири" як "IV" стали тільки в XIX столітті, до цього найбільш часто вживалася запис "IIII". Однак запис "IV" можна зустріти вже в документах манускрипту "Forme of Cury", датованих 1390 роком. На циферблатах годин в більшості випадків традиційно використовується "IIII" замість "IV", головним чином, за естетичним міркувань: таке написання забезпечує візуальну симетрію з цифрами "VIII" на протилежній стороні, а перевернуту "IV" прочитати важче, ніж "IIII".

Менша цифра може бути записана і зліва від більшої, тоді її слід відняти з більшою. У цьому разі повторення меншою цифри не допускаються. По-римському числі 94 буде XCIV = 100-10 +5-1 = 94 - так зване "правило віднімання" (з'явилося в епоху пізньої античності, а до цього римляни писали число 4 як IIII, а число 40 - як XXXX). Існує шість варіантів використання "правила віднімання":

  • IV = 4
  • IX = 9
  • XL = 40
  • XC = 90
  • CD = 400
  • CM = 900

Необхідно відзначити, що інші способи "вирахування" не допустимі; так, число 99 має бути записано як XCIX, але не як IC. Проте, в наші дні в деяких випадках використовується і спрощена запис римських чисел: наприклад, у програмі Microsoft Excel при перетворенні арабських цифр в римські за допомогою функції "Римський ()" можна використовувати декілька видів представлення чисел, від класичного до сильно спрощеного (так, число 499 може бути записано як CDXCIX, LDVLIV, XDIX, VDIV або ID). Спрощення полягає в тому, що для зменшення будь-якої цифри зліва від неї може писатися будь-яка інша цифра:

  • 999. Тисяча (M), віднімемо 1 (I), отримаємо 999 (IM) замість CMXCIX. Наслідок: 1999 - MIM замість MCMXCIX
  • 95. Сто (C), віднімемо 5 (V), отримаємо 95 (VC) замість XCV
  • 1950: Тисяча (M), віднімемо 50 (L), отримаємо 950 (LM). Слідство: 1950 - MLM замість MCML

За допомогою римських цифр можна записувати і великі числа. Для цього над тими цифрами, які позначають тисячі, ставиться риса, а над цифрами, які позначають мільйони, - подвійна риса. Наприклад, число 123123 буде виглядати так:

CXXIII CXXIII

А мільйон як I , Але тільки не з однією, а з двома рисами на чолі: I


3. Застосування

Автограф Б. М. Єльцина 10 листопада 1988. Місяць вказаний римськими цифрами.

У російській мові римські цифри використовуються в наступних випадках:

  • Номер століття або тисячоліття: XIX століття, II тисячоліття до н. е..
  • Порядковий номер монарха: Карл V, Катерина II.
  • Номер тому в багатотомній книзі (іноді - номери частин книги, розділів або глав).
  • У деяких виданнях - номери аркушів з передмовою до книги, щоб не виправляти посилання всередині основного тексту при зміні передмови.
  • Маркування циферблатів годин "під старовину".
  • Інші важливі події або пункти списку, наприклад: V постулат Евкліда, II світова війна, XX з'їзд КПРС, Ігри XXII Олімпіади і т. п.
  • Валентність хімічних елементів

Римські цифри широко використовувалися в СРСР за умов згадування дати для позначення місяця року: 11/III-85 або 9.XI.89. З переходом на комп'ютерну обробку інформації формати дати, засновані на римських цифрах, практично вийшли з ужитку.

В інших мовах сфера застосування римських цифр може мати особливості, наприклад, у західних країнах римськими цифрами іноді записується номер року.


4. Юнікод

Стандарт Юнікод рекомендує використовувати для подання римських цифр звичайні латинські букви. [1] Проте стандарт включає також спеціальні символи для римських цифр як частина Числових форм ( англ. Number Forms ) [2] в області знаків з кодами з U +2160 по U +2188. Наприклад, MCMLXXXVIII може бути представлено у формі Ⅿ Ⅽ Ⅿ Ⅼ Ⅹ Ⅹ Ⅹ Ⅷ . Цей діапазон включає як рядкові, так і прописні цифри від 1 ( або I) до 12 ( або XII), в тому числі і комбіновані гліфи для складених чисел, таких як 8 ( або VIII), головним чином для забезпечення сумісності з східноазіатських наборами символів у таких промислових стандартах, як JIS X 0213, де ці символи визначені. Комбіновані гліфи використовуються для подання чисел, які раніше складалися з окремих символів (наприклад, замість його представлення як і ). На додаток до цього, гліфи існують для архаїчних [2] форм запису чисел 1000, 5000, 10 000, великий зворотного C ( Ɔ ), Пізньої форми запису 6 ( , Схожої на грецьку стигму : Ϛ ), Ранньої форми запису числа 50 ( , Схожою на стрілку, що вказує вниз ↓ ⫝ ⊥ [3]), 50 000, і 100 000. Слід зазначити, що маленька зворотній c, не включена в символи римських цифр, але включена в стандарт Юнікод як прописна Клавдієва буква .

Римські цифри в Юнікод
Код 0 1 2 3 4 5 6 7 8 9 A B C D E F
Значення [4] 1 2 3 4 5 6 7 8 9 10 11 12 50 100 500 1000
U +2160
2160

2161

2162

2163

2164

2165

2166

2167

2168

2169

216A

216B

216C

216D

216E

216F
U +2170
2170

2171

2172

2173

2174

2175

2176

2177

2178

2179

217A

217B

217C

217D

217E

217F
Значення 1000 5000 10000 - - 6 50 50000 100000
U +2160! U +2180
2180

2181

2182

Відображення всіх цих символів вимагає наявності програмного забезпечення, що підтримує стандарт Юнікод, і шрифта, що містить відповідні цим символам гліфи.


5. Регулярні вирази

Регулярний вираз для перевірки римських цифр - "^ (? i) M {0,3} (D? C {0,3} | C [DM]) (L? X {0,3} | X [LC]) ( V? I {0,3} | I [VX ])$'. У мові Perl для пошуку римських цифр в рядку можна використовувати регулярний вираз 'm / ((? i) M {0,3} (D? C {0,3} | C [DM]) (L? X {0,3} | X [LC]) (I [VX] | V? I {0,3})) / g '.

6. Перетворення

Для перетворення чисел, записаних арабськими цифрами, в римські, використовуються спеціальні функції. Наприклад, в російській версії Microsoft Excel для цього існує функція Римської (аргумент), в англійській версії Microsoft Excel і в будь-якій версії OpenOffice.org Calc ця функція називається ROMAN (аргумент).

Функції перетворення на 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  (  number  )  {  if  (  !  number  )  return  ''  ;  var  ret  =  ''  ;  var  i  =  arab.  length  -  1  ;  while  (  number  >  0  )  {  if  (  number  > =  arab  [  i  ]  )  {  ret  + =  roman  [  i  ]  ;  number  -=  arab  [  i  ]  ;  }  else  {  i  -;  }  }  return  ret  ;  }  function  romanToArab  (  str  )  {  str  =  str.  toUpperCase  (  )  ;  var  ret  =  0  ;  var  i  =  arab.  length  -  1  ;  var  pos  =  0  ;  while  (  i  > =  0  & &  pos  <  str.  length  )  {  if  (  str.  substr  (  pos  ,  roman  [  i  ]  .  length  )  ==  roman  [  i  ]  )  {  ret  + =  arab  [  i  ]  ;  pos  + =  roman  [  i  ]  .  length  ;  }  else  {  i  -;  }  }  return  ret  ;  } 
Аналогічні функції на Сі (C89):
 # Include   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  ;  if  (  !  arab  )  {  *  roman  =  0  ;  return  roman  ;  }  i  =  0  ;  while  (  arab  >  arabmax  )  {  roman  [  i  + +  ]  =  romanmax  ;  arab  -=  arabmax  ;  }  n  =  m  ;  while  (  arab  >  0  )  {  if  (  arab  > =  arabar  [  n  ]  )  {  roman  [  i  + +  ]  =  romanar  [  n  ]  [  0  ]  ;  if  (  n  &  1  )  roman  [  i  + +  ]  =  romanar  [  n  ]  [  1  ]  ;  arab  -=  arabar  [  n  ]  ;  }  else  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  ;  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  ;  }  else  n  -;  }  return  arab  ;  } 
Програма перекладу арабських цифр в римські і навпаки [5]
 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  :  array  [  1  ..  14  ]  of integer  =  (  1000  ,  900  ,  500  ,  400  ,  100  ,  90  ,  50  ,  40  ,  10  ,  9  ,  5  ,  4  ,  1  ,  0  )  ;  var  N  ,  NI  ,  I  ,  J  :  integer  ;  S  :  string  ;  function  Arab2Rim  (  N  :  integer  )  :  string  ;  var  S  :  string  ;  I  :  integer  ;  begin S  : =  ''  ;  I  : =  1  ;  while  N  >  0  do  begin  while  Arab  [  I  ]  <=  N  do  begin S  : =  S  +  Rims  [  I  ]  ;  N  : =  N  -  Arab  [  I  ]  end  ;  I  : =  I  +  1  end  ;  Arab2Rim  : =  S end  ;  function  Rim2Arab  (  S  :  string  )  :  integer  ;  var  I  ,  N  :  integer  ;  begin I  : =  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  end  ;  Rim2Arab  : =  N end  ;  begin WriteLn  (  'Переклад з арабських цифр в римські. 1999 B_SA '  )  ;  {  Write  (  'Введіть число для перетворення:'  )  ;  ReadLn  (  N  )  ;  }  for  NI  : =  26  to  46  do  WriteLn  (  NI  ,  '='  ,  Arab2Rim  (  NI  )  ,  'Назад'  ,  Rim2Arab  (  Arab2Rim  (  NI  )  )  )  ;  end. 
Функція перетворення арабського числа в римське на Pascal [6]
 function  Arab2Roman  (  arab  :  integer  )  :  string  ;  var  i  :  integer  ;  d  :  integer  ;  arab_str  :  string  ;  arab_len  :  integer  ;  begin Result  : =  ''  ;  arab_str  : =  IntToStr  (  arab  )  ;  arab_len  : =  Length  (  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  then Result  : =  Copy  (  'IXCM'  ,  1  +  i  ,  1  )  +  Copy  (  'VXLCDM'  ,  i  *  2  +  (  d  +  1  )  div  5  ,  1  )  +  Result  else  Result  : =  Copy  (  'VLD'  ,  1  +  i  ,  d div  5  )  +  Copy  (  'IIIXXXCCCMMM'  ,  1  +  i  *  3  ,  d mod  5  )  +  Result  ;  end  ;  end  ; 

Відмінною особливістю даного алгоритму є те, що в ньому не використовуються масиви (якщо, звичайно, не вважати рядок масивом символів).

Функція перетворення арабського числа в римське на BASIC (самий короткий код) [7]
 10  INPUT  "Арабський ЧИСЛО:"  ;  А $  20  FOR  I  =  0  TO LEN  (  A $  )  -  1  30  X  =  VAL  (  MID $  (  A $  ,  LEN  (  A $  )  -  I  ,  1  )  )  40  IF  X  =  4  OR X  =  9  THEN 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  "Римські числа:"  ;  B $ 
Функція перетворення арабського числа (в даному випадку 1999) в римське на XPath
 string-join (for $ num in (1999) return (('',' M ',' MM ',' MMM')[($ num idiv 1000) mod 10 +1], ('',' C ', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM')[($ num idiv 100) mod 10 +1], ('',' X ',' XX ',' XXX ',' XL ',' L ',' LX ',' LXX ',' LXXX ',' XC')[($ num idiv 10) mod 10 +1], (' ',' I ',' II ',' III ',' IV ',' V ',' VI ',' VII ',' VIII ',' IX ') [$ num mod 10 +1]),'' ) 
Функція перетворення арабського числа (в даному випадку 1999) в римське на Perl
 use  strict  ;  use  warnings  ;  my  $ 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  )  ]  ]  ;  my  $ I  =  0  ;  my  @ Res  =  (  )  ;  push  @ Res  ,  (  $ Nums  ->  [  $ I  + +  ]  [  (  $ N  %  10  ,  $ N  =  int  (  $ N  /  10  )  )  [  0  ]  ]  )  for  0  ..  3  ;  print  reverse  @ Res  ; 
Клас для перетворення арабського числа (від 1 до 3999) в римське на Java
 class  ArabRome  {  private  int  [  ]  arabBase  =  {  1000  ,  500  ,  100  ,  50  ,  10  ,  5  ,  1  }  ;  private  String  [  ]  romeBase  =  {  "M"  ,  "D"  ,  "C"  ,  "L"  ,  "X"  ,  "V"  ,  "I"  }  ;  public  String  ArabToRome  (  int  arab  )  {  int  result  =  0  ;  int  remainder  =  0  ;  String  resultRome  =  ""  ;  for  (  short  i  =  0  ;  i  <  arabBase.  length  ;  i  + =  2  )  {  result  =  arab  /  arabBase  [  i  ]  ;  remainder  =  arab  %  arabBase  [  i  ]  ;  if  (  result  >  0  & &  result  <  4  )  {  for  (  short  j  =  0  ;  j  <  result  ;  j  + +  )  {  resultRome  + =  romeBase  [  i  ]  ;  }  }  else  if  (  result  > =  4  & &  result  <  9  )  {  for  (  short  j  =  (  short  )  result  ;  j  <  5  ;  j  + +  )  {  resultRome  + =  romeBase  [  i  ]  ;  }  resultRome  + =  romeBase  [  i  -  1  ]  ;  for  (  short  j  =  5  ;  j  <  result  ;  j  + +  )  {  resultRome  + =  romeBase  [  i  ]  ;  }  }  else  if  (  result  ==  9  )  {  resultRome  + =  romeBase  [  i  ]  +  romeBase  [  i  -  2  ]  ;  }  if  (  remainder  ==  0  )  break  ;  arab  =  remainder  ;  }  return  resultRome  ;  }  } 

Примітки

  1. Unicode Standard, 15.3 - www.unicode.org/versions/Unicode5.2.0/ch15.pdf
  2. 1 2 Unicode Number Forms - www.unicode.org/charts/PDF/U2150.pdf
  3. Perry, David J. Proposal To Add Additional Ancient Roman Characters To UCS - std.dkuug.dk/jtc1/sc2/wg2/docs/N3218.pdf.
  4. Для перших двох рядків
  5. "Наука і життя" N12 1986 cтр.95, В. Птіцин, м.Москва
  6. Автор - Кузнецов Євген А.
  7. Автор - Кузнецов Євген А., 1992 рік


Технічне примітка: Через технічні обмежень деякі браузери не можуть показувати спецсимволи, використовувані в цій статті. Такі символи можуть бути відображені у вигляді квадратиків, знаків питання або інших безглуздих символів в залежності від вашого веб-браузера, операційної системи і набору встановлених шрифтів. Навіть якщо ваш браузер здатний інтерпретувати UTF-8 і ви встановили шрифт, який підтримує великий діапазон Юнікод, наприклад Code2000, Arial Unicode MS, Lucida Sans Unicode або один з вільних шрифтів Unicode, - вам, можливо, доведеться використовувати інший браузер, оскільки можливості браузерів в цій галузі часто різняться.


Цей текст може містити помилки.

Схожі роботи | скачати

Схожі роботи:
Римські дороги
Римські фонтани
Римські канікули
Римські імена
Хрисанф і Дарія Римські
Цифри
Чуваські цифри
Арабські цифри
Цифри майя
© Усі права захищені
написати до нас
Рейтинг@Mail.ru