Система счисления как исправить ошибку? - C (СИ)
Формулировка задачи:
#include<stdio.h> #include<ctype.h> #include<math.h> #include<stdlib.h> #include<string.h> void IsErrorNotation(int i){ /*???°?®?????°???* ?®???????®?? ?????®?¤?**/ if(i<2||i>16){ puts("Error: numeric system must be between [2...16]"); exit(1); } } void IsErrorNumber(char* a, int basefrom){ if(basefrom<=10){ for(int i=0; i<strlen(a); a++) if(basefrom<=10) { if( a[i]>='0' && a[i]<='0'+basefrom-1 ) continue; printf("Error: all inputted digits symbols must be between [0...%d]\n", basefrom-1); system("pause"); exit(1); }else { if( a[i]>='0' && a<='9' || a[i]>='a' && a[i]<='a'+baseform-10 || a[i]>='A' && a[i]<='A'+baseform-10 || a[i]>='b' && a[i]<='b'+baseform-10 || a[i]>='B' && a[i]<='B'+baseform-10 || a[i]>='c' && a[i]<='c'+baseform-10 || a[i]>='C' && a[i]<='C'+baseform-10 || a[i]>='d' && a[i]<='d'+baseform-10 || a[i]>='D' && a[i]<='D'+baseform-10 || a[i]>='e' && a[i]<='e'+baseform-10 || a[i]>='E' && a[i]<='E'+baseform-10 || a[i]>='f' && a[i]<='f'+baseform-10 || a[i]>='F' && a[i]<='F'+baseform-10) continue; printf("Error: all inputted number symbols must be between [0...%d]", basefrom-1); printf("\n"); system("pause"); exit(1); } } } int main(){ int i=0, x=0, basefrom, baseto; char a[20]={'\0'}, b[20], *p=a; puts("Input initial numeric system [2...16]"); /*???±?µ?®?¤?*?*?? ?±???±?????¬?* ?±?·???±?«???*????*/ scanf("%d", &basefrom); IsErrorNotation(basefrom); puts("Input final numeric system [2...16]"); /*?°???§???«???????°???????*?? ?±???±?????¬?* ?±?·???±?«???*????*/ scanf("%d", &baseto); IsErrorNotation(baseto); getchar(); printf("Input number in %d notation:\n", basefrom); /*?±?*?¬?® ?·???±?«?®*/ gets(a); IsErrorNumber(a, basefrom); while(*(p+1)) ++p; for(; p>=a; --p, ++i){ if(*p>'9'){ *p=toupper(*p); *p-=7; } x+=(*p-48)*pow(basefrom, i); } printf("number in 10 notation:\n%d\n", x); i=0; while (x){ b[i]=x%baseto; x/=baseto; ++i; } printf("number in %d notation:\n", baseto); while(--i>=0){ b[i]>=9? printf("%c", b[i]+55): printf("%d", b[i]); };printf("\n"); system ("pause"); }
осталась одна ошибка помогите
#include<stdio.h> #include<ctype.h> #include<math.h> #include<stdlib.h> #include<string.h> void IsErrorNotation(int i){ /*???°?®?????°???* ?®???????®?? ?????®?¤?**/ if(i<2||i>16){ puts("Error: numeric system must be between [2...16]"); exit(1); } } void IsErrorNumber(char* a, int basefrom) {int i; if(basefrom<=10){ for( i=0; i<strlen(a); a++) if(basefrom<=10) { if( a[i]>='0' && a[i]<='0'+basefrom-1 ) continue; printf("Error: all inputted digits symbols must be between [0...%d]\n", basefrom-1); system("pause"); exit(1); }else { if( a[i]>='0' && a<='9' || a[i]>='a' && a[i]<='a'+baseform-10 || a[i]>='A' && a[i]<='A'+baseform-10 || a[i]>='b' && a[i]<='b'+baseform-10 || a[i]>='B' && a[i]<='B'+baseform-10 || a[i]>='c' && a[i]<='c'+baseform-10 || a[i]>='C' && a[i]<='C'+baseform-10 || a[i]>='d' && a[i]<='d'+baseform-10 || a[i]>='D' && a[i]<='D'+baseform-10 || a[i]>='e' && a[i]<='e'+baseform-10 || a[i]>='E' && a[i]<='E'+baseform-10 || a[i]>='f' && a[i]<='f'+baseform-10 || a[i]>='F' && a[i]<='F'+baseform-10) continue; printf("Error: all inputted number symbols must be between [0...%d]", basefrom-1); printf("\n"); system("pause"); exit(1); } } } int main(){ int i=0, x=0, basefrom, baseto; char a[20]={'\0'}, b[20], *p=a; puts("Input initial numeric system [2...16]"); /*???±?µ?®?¤?*?*?? ?±???±?????¬?* ?±?·???±?«???*????*/ scanf("%d", &basefrom); IsErrorNotation(basefrom); puts("Input final numeric system [2...16]"); /*?°???§???«???????°???????*?? ?±???±?????¬?* ?±?·???±?«???*????*/ scanf("%d", &baseto); IsErrorNotation(baseto); getchar(); printf("Input number in %d notation:\n", basefrom); /*?±?*?¬?® ?·???±?«?®*/ gets(a); IsErrorNumber(a, basefrom); while(*(p+1)) ++p; for(; p>=a; --p, ++i){ if(*p>'9'){ *p=toupper(*p); *p-=7; } x+=(*p-48)*pow(basefrom, i); } printf("number in 10 notation:\n%d\n", x); i=0; while (x){ b[i]=x%baseto; x/=baseto; ++i; } printf("number in %d notation:\n", baseto); while(--i>=0){ b[i]>=9? printf("%c", b[i]+55): printf("%d", b[i]); };printf("\n"); system ("pause"); }
Решение задачи: «Система счисления как исправить ошибку?»
textual
Листинг программы
#include<stdio.h> #include<ctype.h> #include<math.h> #include<stdlib.h> #include<string.h> void IsErrorNotation(int i){ if(i<2||i>16){ puts("Error: numeric system must be between [2...16]"); exit(1); } } void IsErrorNumber(char* a, int basefrom) { int i; if(basefrom<=10){ for( i=0; i<strlen(a); a++) if(basefrom<=10) { if( a[i]>='0' && a[i]<='0'+basefrom-1 ) continue; printf("Error: all inputted digits symbols must be between [0...%d]\n", basefrom-1); system("pause"); exit(1); } else { if( a[i]>='0' && a<='9' || a[i]>='a' && a[i]<='a'+basefrom-10 || a[i]>='A' && a[i]<='A'+basefrom-10 || a[i]>='b' && a[i]<='b'+basefrom-10 || a[i]>='B' && a[i]<='B'+basefrom-10 || a[i]>='c' && a[i]<='c'+basefrom-10 || a[i]>='C' && a[i]<='C'+basefrom-10 || a[i]>='d' && a[i]<='d'+basefrom-10 || a[i]>='D' && a[i]<='D'+basefrom-10 || a[i]>='e' && a[i]<='e'+basefrom-10 || a[i]>='E' && a[i]<='E'+basefrom-10 || a[i]>='f' && a[i]>='f'+basefrom-10 || a[i]>='F' && a[i]>='F'+basefrom-10) continue; printf("Error: all inputted number symbols must be between [0...%d]", basefrom-10); printf("\n"); system("pause"); exit(1); } } } int main(){ int i=0, x=0, basefrom, baseto; char a[20]={'\0'}, b[20], *p=a; puts("Input initial numeric system [2...16]"); scanf("%d", &basefrom); IsErrorNotation(basefrom); puts("Input final numeric system [2...16]"); scanf("%d", &baseto); IsErrorNotation(baseto); getchar(); printf("Input number in %d notation:\n", basefrom); gets(a); IsErrorNumber(a, basefrom); while(*(p+1)) ++p; for(; p>=a; --p, ++i){ if(*p>'9'){ *p=toupper(*p); *p-=7; } x+=(*p-48)*pow(basefrom, i); } printf("number in 10 notation:\n%d\n", x); i=0; while (x){ b[i]=x%baseto; x/=baseto; ++i; } printf("number in %d notation:\n", baseto); while(--i>=0){ b[i]>=9? printf("%c", b[i]+55): printf("%d", b[i]); };printf("\n"); system ("pause"); }
Объяснение кода листинга программы
В этом коде реализован перевод числа из одной системы счисления в другую. Вот список ключевых действий, которые происходят в коде:
- Ввод начальной и конечной систем счисления:
- Пользователю предлагается ввести начальную систему счисления (2 <= basefrom <= 16). Если введенное значение не соответствует этому условию, выводится сообщение об ошибке и программа завершается.
- Пользователю предлагается ввести конечную систему счисления (2 <= baseto <= 16). Если введенное значение не соответствует этому условию, выводится сообщение об ошибке и программа завершается.
- Ввод числа в начальной системе счисления:
- Пользователю предлагается ввести число в начальной системе счисления.
- После ввода числа, код проверяет, что все символы числа соответствуют допустимым символам для данной системы счисления. Если найден несоответствующий символ, выводится сообщение об ошибке и программа завершается.
- Перевод числа в десятичную систему счисления:
- Введенное число переводится в десятичную систему счисления путем последовательного умножения каждого символа числа на соответствующую степень начальной системы счисления и сложения полученных произведений.
- Перевод числа из десятичной системы счисления в конечную систему счисления:
- Десятичное число переводится в конечную систему счисления путем последовательного деления числа на соответствующую степень конечной системы счисления и записи остатков от деления в конечную систему счисления.
- Вывод числа в конечной системе счисления:
- Число в конечной системе счисления выводится на экран с помощью функции printf().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д