Перевод чисел - исправить синтаксические ошибки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

помогите исправить хотя бы синтаксические ошибки уже сдавать через несколько часов main.cpp
 #include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include"main.h"

int main()
{
   int w,a,b1,b2,n=0,n1=0,l=0,l1=0;
   int k=0,i,i1=0,i2=0;
   double result,fractional,celie;
   char c[14];
   scanf("%d%d",&b1,&b2);
   scanf("%s",c);
 
   bad(b1,b2);
   bad_input(c,n,b1);
 
   n=schet(c);
   if (w=1)
       {
           l1=celiy_schet(c);
           result=celie_v_dec_system(c,b1,l1);
           celie=celie_v_b2(result,b2);
           result=0;
           result=fractional_v_dec(l1,n,b1,c);
           fractional=result_to_b2_fractional(l1,b2,result);
           crazy_vivod(w,celie,fractional);
   }
   else
   {
       result=celie_v_dec_system(c,b1,n);
       celie=celie_v_b2(result,b2);
              fractional=0;
       crazy_vivod(w,celie,fractional);
   }
}
main.h
int powe( int a, int x);
//возведение в положительную и отрицательную степень
void bad(int b1,int b2);
//смотрим действительно ли б1 и б2 от 2 до 16
int schet(char c);
//считает кол-во символов попутно сообщая дробьное число это или нет
int celiy_schet(char c);
//считает кол-во четных символов
int bad_input(char c,int n,int b1);
//смотрит то ли введено
int celie_v_dec_system(char* c,int b1,int l1);
//берем целую часть и переводим в 10-ную систему
int celie_v_b2(double result,int b2);
//результат предыдущей деятельности в б2
int fractional_v_dec(int l1,int n,int b1,char c);
//дробину при наличии оной в десятичную
int result_to_b2_fractional(int l1,int b2,double  result);
//а потом в б2
void crazy_vivod(int w,double celie,double fractional);
//все это чудо выводим
//PROFIT
func.cpp
#include<stdlib.h>
#include"main.h"
#include<stdio.h>
int powe( int a, int x){ // а в степени х
    int result = 1;
    if (x>0){
        while(x>0){
            result = result * a;
            --x;
        }
    } else
        while(x>0){
            result = result * (1/a);
            --x;
        }
        return result;
}
void bad(int b1,int b2)
{
    if (b1>16||b2>16||b1<2||b2<2) // 2<b1 b2<16
    {printf("bad input");
    exit(0);}
}
int schet(char* c){
int i,w,n;
    for(i=0;c[i]!=0;i++)
    {if (c[i]=='.')
            w=1;
    n++;}
    return w,n;
}
int celiy_schet(char* c)
{
    int i,l1;
for(i = 0; c[i] != '.' && c[i] != 0; i++)
        l1++;
    return l1;
}
void bad_input(char* c[],int n,int b1)
{
    int i;
    for(i=0;i<n;i++)
        if (!(c[i]-'0'<b1||c[i]==','))
        {
            printf("bad input");
            exit(0);
        }
}
int celie_v_dec_system(char* c,int b1,int l1)
{
    int i;
    double celie;
    for(i=0;i<l1;i++)
        { 
            celie=celie+c[i]*powe(b1,l1-1);
            l1--;
    }
return celie;
}
int celie_v_b2(double result,int b2)
{
    int i,a;
    double celie;
    for(i=0;celie!=0;i++)
    {   a =(int) celie % b2;
        celie = celie / b2;
        celie=celie+a*powe(10,i);
    }
    return result;
}
int fractional_v_dec(int l1,int n,int b1,char* c)
{
    int i,k=0;
    double result=0;
    for(i=l1;i<n;i++)
    { 
 
        result=result+c[i]*powe(b1,-k);
        k++;
        l1--;
    }
    return result;
}
int result_to_b2_fractional(int l1,int b2,double result,double celie)
{
    double fractional;
    int i,a;
 
        for(i=l1;fractional!=0;i++)
    {   a =(int)fractional % b2;
        fractional = celie / b2;
        result=result+a*powe(10,i);
        }
        return fractional;
}
void crazy_vivod(int w,double celie,double fractional)
{
        
    if(w=1)
        printf("%s.%s",celie,fractional);
    else
        printf("%s",celie);
}

Решение задачи: «Перевод чисел - исправить синтаксические ошибки»

textual
Листинг программы
#include<stdlib.h>
#include"main.h"
#include<stdio.h>
int powe( int a, int x){ // а в степени х
    int result = 1;
    if (x>0){
        while(x>0){
            result = result * a;
            --x;
        }
    } else
    while(x>0){
        result = result * (1/a);
        --x;
    }
    return result;
}
void bad(int b1,int b2)
{
    if (b1>16||b2>16||b1<2||b2<2) // 2<b1 b2<16
    {printf("bad input");
        exit(0);}
}
int schet(char *c){
    int i,w,n;
    for(i=0;c[i]!=0;i++)
    {if (c[i]=='.')
        w=1;
        n++;}
    return w,n;
}
int celiy_schet(char *c)
{
    int i,l1;
    for(i = 0; c[i] != '.' && c[i] != 0; i++)
    l1++;
    return l1;
}
int bad_input(char *c,int n,int b1)
{
    int i;
    for(i=0;i<n;i++)
    if (!(c[i]-'0'<b1||c[i]==','))
    {
        printf("bad input");
        exit(0);
    }
}
int celie_v_dec_system(char *c,int b1,int l1)
{
    int i;
    double celie;
    for(i=0;i<l1;i++)
    { 
        celie=celie+c[i]*powe(b1,l1-1);
        l1--;
    }
    return celie;
}
int celie_v_b2(double result,int b2)
{
    int i,a;
    double celie;
    for(i=0;celie!=0;i++)
    {   a =(int) celie % b2;
        celie = celie / b2;
        celie=celie+a*powe(10,i);
    }
    return result;
}
int fractional_v_dec(int l1,int n,int b1,char *c)
{
    int i,k=0;
    double result=0;
    for(i=l1;i<n;i++)
    { 
 
        result=result+c[i]*powe(b1,-k);
        k++;
        l1--;
    }
    return result;
}
int result_to_b2_fractional(int l1,int b2,double result,double celie)
{
    double fractional;
    int i,a;
 
    for(i=l1;fractional!=0;i++)
    {   a =(int)fractional % b2;
        fractional = celie / b2;
        result=result+a*powe(10,i);
    }
    return fractional;
}
void crazy_vivod(int w,double celie,double fractional)
{
    
    if(w=1)
    printf("%s.%s",celie,fractional);
    else
    printf("%s",celie);
}

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

  1. Перевод чисел - исправить синтаксические ошибки: Код содержит несколько функций для работы с числами различных систем счисления. Некоторые функции могут вызывать ошибки синтаксиса, которые нужно исправить.
  2. Перечислим функции, которые присутствуют в коде:
    • powe(int a, int x) - функция возведения в степень
    • bad(int b1,int b2) - функция проверки корректности ввода
    • schet(char *c) - функция подсчета количества цифр в числе
    • celiy_schet(char *c) - функция подсчета количества цифр в числе с плавающей точкой
    • bad_input(char *c,int n,int b1) - функция проверки корректности ввода
    • celie_v_dec_system(char *c,int b1,int l1) - функция преобразования числа из одной системы счисления в другую с учетом разрядов
    • celie_v_b2(double result,int b2) - функция преобразования числа из десятичной системы счисления в число с плавающей точкой, кратное b2
    • fractional_v_dec(int l1,int n,int b1,char *c) - функция преобразования числа из десятичной системы счисления в число с плавающей точкой
    • result_to_b2_fractional(int l1,int b2,double result,double celie) - функция преобразования числа из одной системы счисления в другую с учетом разрядов
    • crazy_vivod(int w,double celie,double fractional) - функция вывода числа в заданной системе счисления
  3. Проблемы, которые можно заметить в коде:
    • В функции bad_input(char *c,int n,int b1) проверка корректности ввода выполняется некорректно. Необходимо проверить, что каждый символ в числе соответствует допустимому диапазону.
    • В функции celie_v_dec_system(char *c,int b1,int l1) и celie_v_b2(double result,int b2) возможна переполнение при выполнении операций с плавающей точкой. Необходимо использовать функции для безопасных вычислений с плавающей точкой.
    • В функции fractional_v_dec(int l1,int n,int b1,char *c) возможна переполнение при выполнении операций с плавающей точкой. Необходимо использовать функции для безопасных вычислений с плавающей точкой.
    • В функции result_to_b2_fractional(int l1,int b2,double result,double celie) возможна переполнение при выполнении операций с плавающей точкой. Необходимо использовать функции для безопасных вычислений с плавающей точкой.
    • В функции crazy_vivod(int w,double celie,double fractional) необходимо убедиться, что вывод числа в заданной системе счисления выполняется корректно.

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


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

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

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