Перевод целых положительных чисел из любой СС в любую - 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;

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

  1. В условии if проверяется, является ли символ c[n] цифрой от '0' до '9'. Если это так, то выполняется присваивание b[i] = c[n] - '0'.
  2. В условии else if проверяется, является ли символ c[n] буквой от 'A' до 'F'. Если это так, то выполняется присваивание b[i] = c[n] - 'A' + 10.

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


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

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

8   голосов , оценка 3.5 из 5
Похожие ответы