Система счисления как исправить ошибку? - 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().