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