Преобразовать Число В Римскую или Арабскую Нотацию
Работа со строками в БСП 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;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат АрабскоеЧисло;
КонецФункции