Преобразовать Число В Римскую или Арабскую Нотацию

Печать (Ctrl+P)

Работа со строками в БСП 3.0

Общий модуль СтроковыеФункцииКлиентСервер

Для преобразования арабского числа в римское используется следующая функция:.

 Строка = СтроковыеФункцииКлиентСервер. ПреобразоватьЧислоВРимскуюНотацию ( АрабскоеЧисло, ИспользоватьКириллицу);  

Параметры:
АрабскоеЧисло – Число – число, целое, от 0 до 999;
ИспользоватьКириллицу – Булево – использовать в качестве арабских цифр кириллицу или латиницу.

Возвращаемое значение: Строка – число в римской нотации.
Пример:
СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВРимскуюНотацию(17) = “ХVII”.

Функция ПреобразоватьЧислоВРимскуюНотацию(АрабскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт
 РимскоеЧисло = ""; 
АрабскоеЧисло = ДополнитьСтроку(АрабскоеЧисло, 3);
 Если ИспользоватьКириллицу Тогда 
    c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М"; 
Иначе   
  c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M";
 КонецЕсли; 
Единицы = Число(Сред(АрабскоеЧисло, 3, 1)); 
Десятки = Число(Сред(АрабскоеЧисло, 2, 1)); Сотни   = Число(Сред(АрабскоеЧисло, 1, 1)); 
РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Сотни, c100, c500, c1000); 
РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Десятки, c10, c50, c100);
 РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Единицы, c1, c5, c10); 
Возврат РимскоеЧисло;
 КонецФункции 

 
Функция ПреобразоватьЦифруВРимскуюНотацию(Цифра, РимскаяЕдиница, РимскаяПятерка, РимскаяДесятка)
 РимскаяЦифра=""; 
Если Цифра = 1 Тогда  
   РимскаяЦифра = РимскаяЕдиница
 ИначеЕсли Цифра = 2 Тогда 
    РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница;
 ИначеЕсли Цифра = 3 Тогда  
   РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; ИначеЕсли Цифра = 4 Тогда   
  РимскаяЦифра = РимскаяЕдиница + РимскаяПятерка; 
ИначеЕсли Цифра = 5 Тогда    
 РимскаяЦифра = РимскаяПятерка; 
ИначеЕсли Цифра = 6 Тогда  
   РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница; 
ИначеЕсли Цифра = 7 Тогда 
    РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница; ИначеЕсли Цифра = 8 Тогда  
   РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; 
ИначеЕсли Цифра = 9 Тогда  
   РимскаяЦифра = РимскаяЕдиница + РимскаяДесятка; 
КонецЕсли;
 Возврат РимскаяЦифра;
 КонецФункции 

В теле данной функции вызывается функция ДополнитьСтроку(АрабскоеЧисло, 3) , которая дополняет строку символами слева или справа до заданной длины и возвращает ее.

Для преобразования римского числа в арабское используется следующая функция:

 Число = СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВАрабскуюНотацию( РимскоеЧисло , ИспользоватьКириллицу); 

Параметры:
РимскоеЧисло – Строка – число, записанное римскими цифрами;
ИспользоватьКириллицу – Булево – использовать в качестве арабских цифр кириллицу или латиницу.
Возвращаемое значение: Число – преобразованное число.
Пример:
СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВАрабскуюНотацию(“ХVII”) = 17.

Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт

АрабскоеЧисло = 0;

 Если ИспользоватьКириллицу Тогда 
     c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М"; 
 Иначе  
   c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M"; 
 КонецЕсли;
  РимскоеЧисло = СокрЛП(РимскоеЧисло); 
 ЧислоСимволов = СтрДлина(РимскоеЧисло); 
 Для Сч = 1 По ЧислоСимволов Цикл 
     Если Сред(РимскоеЧисло,Сч,1) = c1000 Тогда
         АрабскоеЧисло = АрабскоеЧисло+1000;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c500 Тогда 
        АрабскоеЧисло = АрабскоеЧисло+500;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c100 Тогда
          Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c500) Или (Сред(РимскоеЧисло,Сч+1,1) = c1000))  Тогда 
    АрабскоеЧисло = АрабскоеЧисло-100; 
         Иначе  
            АрабскоеЧисло = АрабскоеЧисло+100; 
         КонецЕсли; 
     ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c50 Тогда 
         АрабскоеЧисло = АрабскоеЧисло+50;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c10 Тогда 
         Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c50) Или (Сред(РимскоеЧисло,Сч+1,1) = c100)) Тогда
              АрабскоеЧисло = АрабскоеЧисло-10;
          Иначе 
             АрабскоеЧисло = АрабскоеЧисло+10; 
         КонецЕсли;  
    ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c5 Тогда 
         АрабскоеЧисло = АрабскоеЧисло+5; 
     ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c1 Тогда
         Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c5) Или (Сред(РимскоеЧисло,Сч+1,1) = c10)) Тогда 
             АрабскоеЧисло = АрабскоеЧисло-1; 
         Иначе 
             АрабскоеЧисло = АрабскоеЧисло+1; 
         КонецЕсли; 
     КонецЕсли; 
 КонецЦикла; 
 Возврат АрабскоеЧисло;
  КонецФункции   

0

Автор публикации

не в сети 3 часа

master1c8

0
Комментарии: 14Публикации: 439Регистрация: 25-12-2016

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.