Нужен код программы для перевода чисел с десятичной системы счисления в римские числа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

нужен код простой программы с проверками на ANSI C, которая переводит числа из десятичной системы счисления в римские числа.

Решение задачи: «Нужен код программы для перевода чисел с десятичной системы счисления в римские числа»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. char res[20] = {'\0'};
  4.  
  5. void made_rom(int count, char litera);
  6. char * end_str(void);
  7.  
  8. int main(void) {
  9.     int div[8] =  {1,1,5,10,50,100,500,1000};
  10.     char rom[8] = {' ','I','V','X','L','C','D','M'};
  11.     int ab, x, y, i;
  12.  
  13.  
  14.     ab = 2949;   // Переводимое число в арабском виде.
  15.                  //в данном случае, должно быть меньше 3999, т.к. asci буков не хватает
  16.  
  17.     for(i=7; i>0; i--)
  18.        {
  19.          x = ab/div[i];
  20.          y = ab % div[i];
  21.  
  22.          if(x)
  23.          {
  24.            if(i==5 && x==4)   // for 400
  25.              {
  26.                made_rom(1,'C');
  27.                made_rom(1,'D');
  28.                ab = y;
  29.                continue;
  30.              }
  31.            else if(i==3 && x==4)   // for 40
  32.              {
  33.                made_rom(1,'X');
  34.                made_rom(1,'L');
  35.                ab = y;
  36.                continue;
  37.              }
  38.            else if(i==1 && x==4)   // for 4
  39.              {
  40.                made_rom(1,'I');
  41.                made_rom(1,'V');
  42.                break;
  43.              }
  44.  
  45.            if(i==6 && y >=400)   // for 900
  46.              {
  47.                made_rom(1,'C');
  48.                made_rom(1,'M');
  49.                ab = y - 400;
  50.                continue;
  51.              }
  52.            else if(i==4 && y >=40)   // for 90
  53.              {
  54.                made_rom(1,'X');
  55.                made_rom(1,'C');
  56.                ab = y - 40;
  57.                continue;
  58.              }
  59.            else if(i==2 && y ==4)   // for 9
  60.              {
  61.                made_rom(1,'I');
  62.                made_rom(1,'X');
  63.                break;
  64.              }
  65.  
  66.            made_rom(x,rom[i]);
  67.          }
  68.          ab = y;
  69.        }
  70.  
  71.     printf("%s", res);
  72.     return 0;
  73. }
  74. //#######################
  75. void made_rom(int count, char litera)
  76.   {
  77.     char *ptr;
  78.  
  79.     ptr = end_str();
  80.  
  81.     while(count)
  82.       {
  83.     *ptr = litera;
  84.     ptr++;
  85.     count--;
  86.       }
  87.  
  88.   }
  89. //######################
  90. char * end_str(void)
  91.   {
  92.     char *ptr_res;
  93.     ptr_res = res;
  94.  
  95.     while(*ptr_res)
  96.     ptr_res++;
  97.  
  98.     return ptr_res;
  99.   }

Объяснение кода листинга программы

  1. В программе присутствует функция made_rom, которая принимает два аргумента: целое число count и символ litera. Эта функция отвечает за преобразование чисел в римскую систему счисления.
  2. Функция end_str возвращает указатель на последний символ в строке res. Она используется для добавления символов в конец строки res в функции made_rom.
  3. В функции main определены две массивы: div и rom. div содержит делители для чисел от 1 до 8, а rom содержит римские символы для этих чисел.
  4. Переводимое число в арабском виде хранится в переменной ab. В данном случае, это число 2949.
  5. В цикле for происходит деление числа ab на делители из массива div и сохранение остатка в переменной y.
  6. Если остаток от деления больше или равен 4, то выполняется блок кода, который добавляет соответствующие римские символы в строку res.
  7. Если остаток от деления меньше 4, то выполняется другой блок кода, который добавляет римские символы в строку res.
  8. После выполнения всех блоков кода, в строку res добавляется символ пробела.
  9. В конце программы, с помощью функции printf, выводится значение переменной res, которое представляет собой римское число для исходного числа.
  10. Возвращаемое значение функции main равно 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы