Перевод чисел - исправить синтаксические ошибки - C (СИ)
Формулировка задачи:
помогите исправить хотя бы синтаксические ошибки уже сдавать через несколько часов
main.cpp
main.h
func.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); } }
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
#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); }
Объяснение кода листинга программы
- Перевод чисел - исправить синтаксические ошибки: Код содержит несколько функций для работы с числами различных систем счисления. Некоторые функции могут вызывать ошибки синтаксиса, которые нужно исправить.
- Перечислим функции, которые присутствуют в коде:
- 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) - функция вывода числа в заданной системе счисления
- Проблемы, которые можно заметить в коде:
- В функции 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) необходимо убедиться, что вывод числа в заданной системе счисления выполняется корректно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д