Афина.
Преобразование целых десятичных чисел в римские числа

К содержанию

   

В библиотеке пишется простая функция для преобразования:

функция ЧислоВРимское(число num): строка !в параметре передается целое десятичное число
переменные
  колонка(число) vals;
  колонка(строка) roms;
  число b := 13;
  строка Рез;
начало
  Рез := "";
  vals := Массив(1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
  roms := Массив('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
  пока num > 0 делать
    пока vals(b) > num делать Инк(b, -1); конец;
    Инк(num, -vals(b));
    Рез := Рез + roms(b)
  конец;
  выход Рез
конец
 

 

  Транслитерация - преобразование русских букв в латинские. Принятое в ПВУ (паспортно-визовое управление)
   

функция Транс(строка Стр) : строка !в параметре передается строка на русском языке
переменные
  строка Л, Л2, Рез;
  число А, К;
начало
  А := 0; Рез := "";
  пока А < ДлинаСтроки(Стр) делать
    Инк(А);
    Л := ЧастьСтроки(Стр, А, 1); К := КодСим(Л);
    если А < ДлинаСтроки(Стр) то Л2 := ЧастьСтроки(Стр, А+1, 1); иначе Л2 := "" конец;
    если Л = "А" или Л = "а" то Рез := Рез + "A"; продолжить конец;
    если Л = "Б" или Л = "б" то Рез := Рез + "B"; продолжить конец;
    если Л = "В" или Л = "в" то Рез := Рез + "V"; продолжить конец;
    если Л = "Г" или Л = "г" то Рез := Рез + "G"; продолжить конец;
    если Л = "Д" или Л = "д" то Рез := Рез + "D"; продолжить конец;
    если Л = "Е" или Л = "е" или Л = "Ё" или Л = "ё" то
      если Л2 <> "" и (Л2 = "Й" или Л2 = "й") то
        Рез := Рез + "EY"; Инк(А);
      иначе
        Рез := Рез + "YE";
      конец;
      продолжить
    конец;
    если Л = "Ж" или Л = "ж" то Рез := Рез + "ZH"; продолжить конец;
    если Л = "З" или Л = "з" то Рез := Рез + "Z"; продолжить конец;
    если Л = "И" или Л = "и" то Рез := Рез + "I"; продолжить конец;
    если Л = "Й" или Л = "й" то Рез := Рез + "Y"; продолжить конец;
    если Л = "Ф" или Л = "ф" то Рез := Рез + "F"; продолжить конец;
    если Л = "Х" или Л = "х" то Рез := Рез + "KH"; продолжить конец;
    если Л = "Ц" или Л = "ц" то Рез := Рез + "TS"; продолжить конец;
    если Л = "Ч" или Л = "ч" то Рез := Рез + "CH"; продолжить конец;
    если Л = "Ш" или Л = "ш" то Рез := Рез + "SH"; продолжить конец;
    если Л = "Щ" или Л = "щ" то Рез := Рез + "SHCH"; продолжить конец;
    если Л = "Ы" или Л = "ы" то Рез := Рез + "Y"; продолжить конец;
    если Л = "Э" или Л = "э" то Рез := Рез + "E"; продолжить конец;
    если Л = "Ю" или Л = "ю" то Рез := Рез + "YU"; продолжить конец;
    если Л = "Я" или Л = "я" то Рез := Рез + "YA"; продолжить конец;
    если Л2 <> "" и (Л = "Ь" или Л = "ь") то
      если Л = "А" или Л = "а" то Рез := Рез + "YA"; продолжить конец;
      если Л = "Е" или Л = "е" или Л = "Ё" или Л = "ё" то
        Рез := Рез + "YE"; продолжить
      конец;
      если Л = "И" или Л = "и" то Рез := Рез + "YI"; продолжить конец;
      если Л = "О" или Л = "о" то Рез := Рез + "YO"; продолжить конец;
      если Л = "Э" или Л = "э" то Рез := Рез + "YE"; продолжить конец;
      если Л = "Ю" или Л = "ю" то Рез := Рез + "YYU"; продолжить конец;
      если Л = "Я" или Л = "я" то Рез := Рез + "YYA"; продолжить конец;
    конец;
    если К >= 202 и К <= 207 то Рез := Рез + Символ(К-127); продолжить конец;
    если К >= 234 и К <= 239 то Рез := Рез + Символ(К-159); продолжить конец;
    если К >= 208 и К <= 211 то Рез := Рез + Символ(К-126); продолжить конец;
    если К >= 240 и К <= 243 то Рез := Рез + Символ(К-158); продолжить конец;
    Рез := Рез + Л;
  конец;
  выход Рез;
конец
 

  К содержанию