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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char *convert(char *value, int sorce, int target)
{
    char *pos, *temp;
    long number = 0;
    int digit;
    
    pos = value;
    while(*pos++ = toupper(*pos))
        ;
    pos = value;
    while(*pos) {
        if ((*pos >= '0') && (*pos <= '9')) {
            if ((*pos - '0') >= sorce) {
                puts("incorrect value");
                exit(1);
            }
            number = *pos - '0' + number * sorce;
        }
        if ((*pos >= 'A') && (*pos <= 'Z')) {
            if ((*pos-'A' + 10) >= sorce) {
                puts("incorrect value");
                exit(1);
            }
            number = *pos - 'A' + 10 + number * sorce;
        }
        ++pos;
    }
    pos = value;
    while(number) {
        digit = number % target;
        if (digit < 10)
            *pos = digit + '0';
        else
            *pos = digit + 'A' - 10;
        number /= target;
        ++pos;
    }
    *pos = '\0';
    --pos;
    temp = value;
    while (pos > temp) {
        digit = *pos;
        *pos = *temp;
        *temp = digit;
        --pos;
        ++temp;
    }       
    return value;
}
 
int main(void)
{
    int sorce, target;
    char value[25];
    
    printf("value : ");
    scanf("%24s", value);
    do {
        printf("sorce (2 - 35): ");
        scanf("%i", &sorce);
    } while (sorce < 2 && sorce > 35);
    do {
        printf("target (2 - 35): ");
        scanf("%i", &target);
    } while (target < 2 && target > 35);
    printf("result: %s\n", convert(value,sorce,target));
    
    return 0;
}

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

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