Перевод целых положительных чисел из любой СС в любую - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д