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

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

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

Пользователь задает 3 параметра: число в p-чной системе счисления, p, и систему счисления, в которую нужно перевести число. Находил на форуме исходники данной программы, но они все были на С++ с примочками, которых нет на С. Помогите, пожалуйста.

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char *convert(char *value, int sorce, int target)
  6. {
  7.     char *pos, *temp;
  8.     long number = 0;
  9.     int digit;
  10.    
  11.     pos = value;
  12.     while(*pos++ = toupper(*pos))
  13.         ;
  14.     pos = value;
  15.     while(*pos) {
  16.         if ((*pos >= '0') && (*pos <= '9')) {
  17.             if ((*pos - '0') >= sorce) {
  18.                 puts("incorrect value");
  19.                 exit(1);
  20.             }
  21.             number = *pos - '0' + number * sorce;
  22.         }
  23.         if ((*pos >= 'A') && (*pos <= 'Z')) {
  24.             if ((*pos-'A' + 10) >= sorce) {
  25.                 puts("incorrect value");
  26.                 exit(1);
  27.             }
  28.             number = *pos - 'A' + 10 + number * sorce;
  29.         }
  30.         ++pos;
  31.     }
  32.     pos = value;
  33.     while(number) {
  34.         digit = number % target;
  35.         if (digit < 10)
  36.             *pos = digit + '0';
  37.         else
  38.             *pos = digit + 'A' - 10;
  39.         number /= target;
  40.         ++pos;
  41.     }
  42.     *pos = '\0';
  43.     --pos;
  44.     temp = value;
  45.     while (pos > temp) {
  46.         digit = *pos;
  47.         *pos = *temp;
  48.         *temp = digit;
  49.         --pos;
  50.         ++temp;
  51.     }      
  52.     return value;
  53. }
  54.  
  55. int main(void)
  56. {
  57.     int sorce, target;
  58.     char value[25];
  59.    
  60.     printf("value : ");
  61.     scanf("%24s", value);
  62.     do {
  63.         printf("sorce (2 - 35): ");
  64.         scanf("%i", &sorce);
  65.     } while (sorce < 2 && sorce > 35);
  66.     do {
  67.         printf("target (2 - 35): ");
  68.         scanf("%i", &target);
  69.     } while (target < 2 && target > 35);
  70.     printf("result: %s\n", convert(value,sorce,target));
  71.    
  72.     return 0;
  73. }

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

  1. В функции convert происходит перевод числа из одной системы счисления в другую.
  2. Передаются три параметра: char *value - значение числа, int sorce - исходная система счисления, int target - целевая система счисления.
  3. Происходит проход по исходному значению, проверяется каждый символ на принадлежность к определенной системе счисления.
  4. Если символ принадлежит системе счисления sorce, то он преобразуется в десятичное число и добавляется к номеру.
  5. Если символ принадлежит системе счисления target, то он заменяет текущий символ в строке.
  6. Происходит проход по полученному числу в системе счисления target, где каждый символ преобразуется обратно в символ соответствующей системы счисления.
  7. В функции main происходит считывание исходного значения, выбор исходной и целевой систем счисления.
  8. Вызывается функция convert для перевода числа из одной системы счисления в другую.
  9. Результат выводится на экран.

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


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

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

15   голосов , оценка 3.733 из 5

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

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

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