Программа для перевода из одной системы счисления в другую - 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;
}
Объяснение кода листинга программы
- В функции convert происходит перевод числа из одной системы счисления в другую.
- Передаются три параметра: char *value - значение числа, int sorce - исходная система счисления, int target - целевая система счисления.
- Происходит проход по исходному значению, проверяется каждый символ на принадлежность к определенной системе счисления.
- Если символ принадлежит системе счисления sorce, то он преобразуется в десятичное число и добавляется к номеру.
- Если символ принадлежит системе счисления target, то он заменяет текущий символ в строке.
- Происходит проход по полученному числу в системе счисления target, где каждый символ преобразуется обратно в символ соответствующей системы счисления.
- В функции main происходит считывание исходного значения, выбор исходной и целевой систем счисления.
- Вызывается функция convert для перевода числа из одной системы счисления в другую.
- Результат выводится на экран.