Перевод арабского числа в римское до 3999 на Паскале (Pascal) - Pascal, Delphi, Lazarus - Программирование - Каталог статей - Учись!
Главная Регистрация Вход RSS
Приветствую Вас, Гость
Категории раздела
Случайное решение
[11.02.2016][ОГЭ]
На диаграмме показало содержание питательных веществ в твороге. Определите по диаграмме, содержание каких веществ наименьшее (0)
[19.09.2015][ЕГЭ (П)]
Найдите значение выражения 2/3+2/5-1/15 (0)
[19.09.2015][ОГЭ]
В период распродажи магазин снижал цены дважды: в первый раз — на 50%, во второй — на 10%. Сколько рублей стал стоить чайник после второго с (0)
[15.04.2015][ЕГЭ (П)]
13. Первый сплав содержит 5% меди, второй — 11% меди. Масса второго сплава больше массы первого на 4 кг. Из этих двух спла¬вов получили трет (0)
[22.06.2013][Pascal, Delphi, Lazarus]
Вычисление функций при помощи Lazarus (0)
[11.04.2015][ЕГЭ (П)]
Флакон шампуня стоит 190 рублей. Какое наибольшее число фла¬конов можно купить на 1000 рублей во время распродажи, когда скидка составляет 3 (0)
[05.04.2015][ЕГЭ (П)]
№ 17 решите неравенство (0)
[25.01.2016][ЕГЭ (П)]
Первый сплав содержит 5% меди, второй — 11% меди. Масса второго сплава больше массы первого на 4 кг. Из этих двух спла¬вов получили трет (0)
Реклама
Статистика
Яндекс.Метрика
Поделиться
Реклама
Вход на сайт
Популярное
[14.10.2015][ОГЭ]
Площадь четырёхугольника можно вычислить по формуле s=d1*d2*sin a/2 , где d1 и d2 — длины диагоналей четырехугольника, а —угол между диа (0)
[21.12.2014][ЕГЭ (П)]
Диагональ правильной четырёхугольной призмы наклонена к плоскости основания под углом 30°. Боковое ребро равно 3. Найдите диагональ призмы. (0)
[15.04.2015][ЕГЭ (П)]
В прямоугольном параллелепипеде ABCDA1B1C1D1 известны длины рёбер: АВ = 3, AD = 4, АА1 = 32. Найдите площадь сечения, про¬ходящего через вер (0)
[21.12.2014][ЕГЭ (П)]
В случайном эксперименте симметричную монету бросают триж¬ды. Найдите вероятность того, что решка выпадет все три раза (0)
[21.12.2014][ЕГЭ (П)]
Корень(9 - 4*корень(5)) - корень(5) или √9-4√5-√5 (0)
[14.10.2015][ОГЭ]
После уценки телевизора его новая цена составила 0,57 старой. На сколько процентов уменьшилась цена телевизора в результате уценки? (0)
[15.04.2015][ЕГЭ (П)]
13. Первый сплав содержит 5% меди, второй — 11% меди. Масса второго сплава больше массы первого на 4 кг. Из этих двух спла¬вов получили трет (0)
[11.03.2016][ОГЭ]
Найдите площадь квадрата, описанного около окружности радиуса 9. (0)
[14.10.2015][ОГЭ]
10. Отрезки АС и BD — диаметры окружности с центром О. Угол АСВ равен 78° . Найдите угол AOD. Ответ дайте в градусах (0)
[21.12.2014][ЕГЭ (П)]
В кубе ABCDA1B1C1D1 точки Е, F, Е1 и F1 являются серединами рёбер ВС, DC, B1C1 и D1C1 соответственно. Объём призмы, отсекаемой от куба плоск (0)
Главная » Статьи » Программирование » Pascal, Delphi, Lazarus

Перевод арабского числа в римское до 3999 на Паскале (Pascal)

Алгоритм

Основные числа:

I — 1
V — 5
X — 10
L — 50
C — 100
D — 500
M — 1000

Ноль отсутствует вообще, поэтому будем использовать пустое значение.

Итак, сам алгоритм достаточно прост:

1. Выделяем (если есть) количество целых тысяч. Полученное значение позволить сгенерировать строку с n количеством «M» (читаем, n*1000).
Пример: 2012 после первого пункта даст «MM»

2. Получаем остаток после деления на 1000, чтобы выделить в дальнейшем следующие значения.

3. Выделяем (если возможно), целые 500. При этом учитываем что если полученное значение равно 4 (5+4=9), то следует записывать как значение 1000-100, что в римский СС равнозначно «CM».
Пример: 1887 после этого пункта даст нам «MD».
1945 соответственно «MCM».

4. Получаем остаток от деления на 500.

5. Делим на 100 чтобы выделить целые сотни и складываем к предыдущему результату. Учитываем что если получили 4, что равнозначно 400, то записываем как 500-100, то есть «CD».
Пример: 1709 даст после этого шага «MDCCC».

6. Получаем остаток от деления на 100.

7. Выделяем из него целые пол сотни. Если значение будет равно 4 (то есть 90), то записываем как 100-10, что равно «XC». Иначе прибавляем к строке «L»
Пример: 1986 после всего выдаст нам «MCML».

8. Выделяем остаток от 50.

9. Выделяем целое количество десятков и складываем к строке n раз символ «X». При этом учитываем что 40 пишется как 50-10, то есть «XL».
Пример: 1986 после всего выдаст нам «MCMLXXX».

10. Получаем остаток от деления на 10. Этот шаг отличается от других тем, что можно сразу приравнять остаток к его эквиваленту. 1=I, 7=VII и так далее.

 


Код

 var
      x,i,t:integer;
      result:string;
 begin
 readln(x);
 result:='';
  if x div 1000<>0 then for i:=1 to x div 1000 do result:= result+'M';
   t:=x mod 1000;
  if t div 500 <> 0 then
                  begin
                      if  t div 500 = 4 then   result:= result+'CM';
                      if t div 500 <> 4 then  for i:=1 to t div 500 do result:= result+'D';
                      end;
 t:=t mod 500;
  if t div 100 <> 0 then
                  begin
                      if  t div 100 = 4 then   result:= result+'CD';
                      if t div 100 <> 4 then for i:=1 to t div 100 do  result:= result+'C';
                      end;
   t:=t mod 100;
  if t div 50 <> 0 then
                  begin
                      if  t div 50 = 4 then   result:= result+'XC';
                      if t div 50 <> 4 then for i:=1 to t div 50 do   result:= result+'L';
                      end;
  t:=t mod 50;
  if t div 10 <> 0 then
                  begin
                      if  t div 10 = 4 then   result:= result+'XL';
                      if t div 10 <> 4 then for i:=1 to t div 10 do   result:= result+'X';
                      end;
  t:=t mod 10;
            if t=1 then result:= result+'I';
            if t=2 then result:= result+'II';
            if t=3 then result:= result+'III';
            if t=4 then result:= result+'IV';
            if t=5 then result:= result+'V';
            if t=6 then result:= result+'VI';
            if t=7 then result:= result+'VII';
            if t=8 then result:= result+'VIII';
            if t=9 then result:= result+'IX';
  writeln(result);
  end.

 

 

Файл скачать

Категория: Pascal, Delphi, Lazarus | Добавил: Ret-Ar (09.11.2015)
Просмотров: 1683 | Рейтинг: 0.0/0
-->