Ограничить используемые символы в представлении чисел - C (СИ)
Формулировка задачи:
Все правильно считает но не могу ограничить символы. Короче на 11-16 системе любую букву считает правильно но нужно только до A-F. как ограничить кто нибудь знает **???
#include<stdio.h> #include<ctype.h> #include<math.h> #include<stdlib.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(; *a; ++a){ if(*a<48||*a>=48+basefrom){ 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
Листинг программы
void IsErrorNumber(char* a, int basefrom) { for(int i=0;i<strlen(a);i++) 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' && [i]<='9' || a[i]>='a' && a[i]<='a'+baseform-10 || a[i]>='A' && a[i]<='A'+baseform-10) continue; printf("Error: all inputted symbols must be between [a...%c]\n",'a'+baseform-10); system("pause"); exit(1); } }
Объяснение кода листинга программы
- Входные данные:
- a - указатель на строку, в которой нужно проверить число
- basefrom - основание системы счисления числа (от 2 до 16), вводимая в шестнадцатеричной системе счисления
- Выходные данные:
- В случае ошибки выводится сообщение об ошибке, после чего программа ожидает нажатия любой клавиши, а затем завершается с кодом ошибки 1.
- Алгоритм:
- Проходим по всем символам входной строки
- Если основание системы счисления меньше или равно 10, то проверяем, является ли текущий символ цифрой от 0 до basefrom-1
- Если основание системы счисления больше 10, то проверяем, является ли текущий символ цифрой от 0 до 9, буквой от a до a+basefrom-10 или буквой от A до A+basefrom-10
- Если текущий символ не является допустимым символом, то выводим сообщение об ошибке и завершаем программу с кодом ошибки 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д