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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
 
char res[20] = {'\0'};
 
void made_rom(int count, char litera);
char * end_str(void);
 
int main(void) {
    int div[8] =  {1,1,5,10,50,100,500,1000};
    char rom[8] = {' ','I','V','X','L','C','D','M'};
    int ab, x, y, i;
 
 
    ab = 2949;   // Переводимое число в арабском виде.
                 //в данном случае, должно быть меньше 3999, т.к. asci буков не хватает
 
    for(i=7; i>0; i--)
       {
         x = ab/div[i];
         y = ab % div[i];
 
         if(x)
         {
           if(i==5 && x==4)   // for 400
             {
               made_rom(1,'C');
               made_rom(1,'D');
               ab = y;
               continue;
             }
           else if(i==3 && x==4)   // for 40
             {
               made_rom(1,'X');
               made_rom(1,'L');
               ab = y;
               continue;
             }
           else if(i==1 && x==4)   // for 4
             {
               made_rom(1,'I');
               made_rom(1,'V');
               break;
             }
 
           if(i==6 && y >=400)   // for 900
             {
               made_rom(1,'C');
               made_rom(1,'M');
               ab = y - 400;
               continue;
             }
           else if(i==4 && y >=40)   // for 90
             {
               made_rom(1,'X');
               made_rom(1,'C');
               ab = y - 40;
               continue;
             }
           else if(i==2 && y ==4)   // for 9
             {
               made_rom(1,'I');
               made_rom(1,'X');
               break;
             }
 
           made_rom(x,rom[i]);
         }
         ab = y;
       }
 
    printf("%s", res);
    return 0;
}
//#######################
void made_rom(int count, char litera)
  {
    char *ptr;
 
    ptr = end_str();
 
    while(count)
      {
    *ptr = litera;
    ptr++;
    count--;
      }
 
  }
//######################
char * end_str(void)
  {
    char *ptr_res;
    ptr_res = res;
 
    while(*ptr_res)
    ptr_res++;
 
    return ptr_res;
  }

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

  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
Похожие ответы