Перевод целых положительных чисел из любой СС в любую - C (СИ)
Формулировка задачи:
Ребят, помогите пожалуйста, пишу программу по переводу целых положительных чисел из любой СС в любую. Но по непонятным мне причинам вылетает программа. Может вы что-то увидите?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void scanNmbr();
void verif(int i);
int decompsNmbr (int len);
int getTr10 (int i);
void getTrless10 (int i);
void getTrmore10 (int i);
int a,ss0,ss1,len;
int b[10];
char c[10];
int main()
{
int i;
scanNmbr();//ввод числа
i = decompsNmbr (len);//разложение числа по разрядам
verif (i);
if (ss1==10)
printf ("Результат:%d",getTr10(i));
else
if (ss1<10)
getTrless10 (i);
else
getTrmore10 (i);
return 0;
}
void scanNmbr()
{
printf("Введите систему счисления, в которой находится число:");
fflush (stdout);
scanf("%d",&ss0);
printf("Введите систему счисления, в которую необходжимо перевести число:");
fflush (stdout);
scanf("%d",&ss1);
printf("Введите число:");
fflush (stdout);
gets (c);
len = strlen(c);
}
int decompsNmbr (int len)
{
int n,i = 0;
for (n = len; n >=0; n--)
{
switch (c[n])
{
case '0':b[i]=0;break;
case '1':b[i]=1;break;
case '2':b[i]=2;break;
case '3':b[i]=3;break;
case '4':b[i]=4;break;
case '5':b[i]=5;break;
case '6':b[i]=6;break;
case '7':b[i]=7;break;
case '8':b[i]=8;break;
case '9':b[i]=9;break;
case 'A':b[i]=10;break;
case 'B':b[i]=11;break;
case 'C':b[i]=12;break;
case 'D':b[i]=13;break;
case 'E':b[i]=14;break;
case 'F':b[i]=15;break;
}
i++;
}
return i;
}
void verif(int i)
{
int n;
for (n=0;n<i;n++)
{
if (b[n]>=ss0)
{
printf ("Введенное число не соответствует указанной системе счисления");
fflush (stdout);
exit (0);
}
}
}
int getTr10 (int i)
{
int n,a=0,j=0;
for (n=0;n<i;n++)
{
a=a+b[n]*pow(ss0,j);
//printf ("Число %d\n",b[n]);
//printf("А = %d\n",a);
j++;
}
return a;
}
void getTrless10 (int i)
{
int n,j=0;
int sca = getTr10 (i);
//printf("%d\n",sca);
while (sca/ss1!=0)
{
b[j]=sca%ss1;
sca=sca/ss1;
j++;
}
printf("Результат:");
for (n=j;n>=0;n--)
printf("%d",b[n]);
}
void getTrmore10 (int i)
{
int n,j=0;
int sca = getTr10 (i);
while (sca!=0)
{
b[j]=sca%ss1;
sca=sca/ss1;
j++;
}
printf("Результат:");
for (n=j-1;n>=0;n--)
{
if (b[n]<10)
printf("%d",b[n]);
else
switch (b[n])
{
case 10:printf ("A");break;
case 11:printf ("B");break;
case 12:printf ("C");break;
case 13:printf ("D");break;
case 14:printf ("E");break;
case 15:printf ("F");break;
}
}
}Решение задачи: «Перевод целых положительных чисел из любой СС в любую»
textual
Листинг программы
if ('0' <= c[n] && c[n] <= '9') b[i] = c[n] - '0';
else if ('A' <= c[n] && c[n] <= 'F') b[i] = c[n] - 'A' + 10;
Объяснение кода листинга программы
- В условии if проверяется, является ли символ
c[n]цифрой от '0' до '9'. Если это так, то выполняется присваиваниеb[i] = c[n] - '0'. - В условии else if проверяется, является ли символ
c[n]буквой от 'A' до 'F'. Если это так, то выполняется присваиваниеb[i] = c[n] - 'A' + 10.