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

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

В этом коде реализован перевод числа из одной системы счисления в другую. Вот список ключевых действий, которые происходят в коде:

  1. Ввод начальной и конечной систем счисления:
    • Пользователю предлагается ввести начальную систему счисления (2 <= basefrom <= 16). Если введенное значение не соответствует этому условию, выводится сообщение об ошибке и программа завершается.
    • Пользователю предлагается ввести конечную систему счисления (2 <= baseto <= 16). Если введенное значение не соответствует этому условию, выводится сообщение об ошибке и программа завершается.
  2. Ввод числа в начальной системе счисления:
    • Пользователю предлагается ввести число в начальной системе счисления.
    • После ввода числа, код проверяет, что все символы числа соответствуют допустимым символам для данной системы счисления. Если найден несоответствующий символ, выводится сообщение об ошибке и программа завершается.
  3. Перевод числа в десятичную систему счисления:
    • Введенное число переводится в десятичную систему счисления путем последовательного умножения каждого символа числа на соответствующую степень начальной системы счисления и сложения полученных произведений.
  4. Перевод числа из десятичной системы счисления в конечную систему счисления:
    • Десятичное число переводится в конечную систему счисления путем последовательного деления числа на соответствующую степень конечной системы счисления и записи остатков от деления в конечную систему счисления.
  5. Вывод числа в конечной системе счисления:
    • Число в конечной системе счисления выводится на экран с помощью функции printf().

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


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

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

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