Функции преобразования в/из римские цифры

Источник: КОНВЕРТАЦИЯ В РИМСКИЕ ЦИФРЫ И ОБРАТНО В 1С

&НаКлиенте
Функция РазложитьСтрокуВМассивПодстрок(тСтрока, тРазделитель)
   мВозврат = Новый Массив;
 
   тМнСтрока = СтрЗаменить(тСтрока, тРазделитель,Символы.ПС);
   Для тСчет = 1 по СтрЧислоСтрок(тМнСтрока) Цикл
      мВозврат.Добавить(СтрПолучитьСтроку(тМнСтрока, тСчет));
   КонецЦикла;
 
   Возврат мВозврат;
КонецФункции
 
&НаКлиенте
Функция ArabicToRoman(Знач тЧисло)
   мБуквы = РазложитьСтрокуВМассивПодстрок("I,IV,V,IX,X,XL,L,XC,C,CD,D,CM,M", ",");
   мЦифры = РазложитьСтрокуВМассивПодстрок("1,4,5,9,10,40,50,90,100,400,500,900,1000", ",");
 
   тРимскоеЧисло = "";
 
   Для тСчет = 0 По мБуквы.Количество() - 1 Цикл
   тБуква=мБуквы.Количество() - тСчет - 1;
      Пока тЧисло >= Число(мЦифры[тБуква]) Цикл
         тРимскоеЧисло = тРимскоеЧисло + мБуквы[тБуква];
         тЧисло = тЧисло - Число(мЦифры[тБуква]);
      КонецЦикла;
   КонецЦикла;
 
   Возврат тРимскоеЧисло;
КонецФункции
 
&НаКлиенте
Функция RomanToArabic(тРимскоеЧисло)
   сРимские = Новый Структура("M, D, C, L, X, V, I", 1000, 500, 100, 50, 10, 5, 1);
   тЧислоСимволов = СтрДлина(тРимскоеЧисло);
 
   тАрабскоеЧисло = 0;
 
   Для тСчет=1 По тЧислоСимволов Цикл
      Если тСчет < тЧислоСимволов И сРимские[Сред(тРимскоеЧисло, тСчет, 1)] < сРимские[Сред(тРимскоеЧисло, тСчет+1, 1)] Тогда
         тАрабскоеЧисло = тАрабскоеЧисло - сРимские[Сред(тРимскоеЧисло, тСчет, 1)];
      Иначе
         тАрабскоеЧисло = тАрабскоеЧисло + сРимские[Сред(тРимскоеЧисло, тСчет, 1)];
      КонецЕсли;
   КонецЦикла;
 
   Возврат тАрабскоеЧисло;
КонецФункции

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

Ваш e-mail не будет опубликован.

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