LOGO
Главная Регистрация Вход RSS
Приветствую Вас, Гость
Категории раздела
Случайное решение
[19.09.2015][ОГЭ]
В период распродажи магазин снижал цены дважды: в первый раз — на 50%, во второй — на 10%. Сколько рублей стал стоить чайник после второго с (0)
[28.02.2016][ЕГЭ (П)]
Диагональ правильной четырёхугольной призмы наклонена к плоскости основания под углом 30°. Боковое ребро равно 3. Найдите диагональ призмы. (0)
[27.01.2016][ОГЭ]
х^2+7=8х (0)
[02.02.2016][ОГЭ]
Велосипедист выехал с постоянной скоростью из города А в город В, расстояние между которыми равно 45 км. На следующий день он отправился обр (0)
[30.12.2013][Фракталы]
Обратная кривая Коха (0)
[14.10.2015][ОГЭ]
Диагональ прямоугольника образует угол 50° с одной из его сторон. Найдите острый угол между диагоналями этого прямоугольника. Ответ дайте в (0)
[11.02.2016][ОГЭ]
Установите соответствие между графиками функций и формулами, которые их задают. (0)
[14.10.2015][ОГЭ]
На диаграмме представлены семь крупнейших по площади территории (в млн км2) стран мира. Какие из следующих утверждений верны? (0)
Статистика
Яндекс.Метрика
Поделиться
Реклама
Вход на сайт
Популярное
[14.10.2015][ОГЭ]
Площадь четырёхугольника можно вычислить по формуле s=d1*d2*sin a/2 , где d1 и d2 — длины диагоналей четырехугольника, а —угол между диа (0)
[11.03.2016][ОГЭ]
Найдите площадь квадрата, описанного около окружности радиуса 9. (0)
[21.12.2014][ЕГЭ (П)]
Диагональ правильной четырёхугольной призмы наклонена к плоскости основания под углом 30°. Боковое ребро равно 3. Найдите диагональ призмы. (0)
[15.04.2015][ЕГЭ (П)]
В прямоугольном параллелепипеде ABCDA1B1C1D1 известны длины рёбер: АВ = 3, AD = 4, АА1 = 32. Найдите площадь сечения, про¬ходящего через вер (0)
[14.10.2015][ОГЭ]
12. На клетчатой бумаге с размером клетки 1x1 изображён параллелограмм. Найдите его пло¬щадь (0)
[21.12.2014][ЕГЭ (П)]
Корень(9 - 4*корень(5)) - корень(5) или √9-4√5-√5 (0)
[29.01.2016][ОГЭ]
Биссектриса равностороннего треугольника равна 9Корень(3) . Найдите его сторону. (0)
[11.02.2016][ОГЭ]
На клетчатой бумаге с размером клетки 1x1 изображена трапеция. Найдите длину её средней линии. (0)
[21.12.2014][ЕГЭ (П)]
В случайном эксперименте симметричную монету бросают триж¬ды. Найдите вероятность того, что решка выпадет все три раза (0)
[14.10.2015][ОГЭ]
После уценки телевизора его новая цена составила 0,57 старой. На сколько процентов уменьшилась цена телевизора в результате уценки? (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)
Просмотров: 2011 | Рейтинг: 0.0/0