Составить функцию для решения уравнения - C (СИ)
Формулировка задачи:
Пользователь вводит три вещественных числа: a,b,c. Составить функцию для
решения уравнения (x+a)/(x+b)=сx, которая получает введенные числа в качестве
параметров. Найденные корни уравнения функция возвращает в качестве двух других
параметров.
Результат, который возвращает сама функция, должен позволять отслеживать
следующие случаи (зависящие от значений введенных чисел): уравнение имеет только
один корень, нет вещественных корней, корни одинаковые, деление на нуль.
не могу понять про то что функция должна возращать результат. как это надо писать7
#include <stdio.h> #include <stdlib.h> #include <math.h> void qvadr(float a, float b, float c){ float d,x1,x2; d=(c*b-1)*(c*b-1)+4*c*a; if (d>0) {x1=(-b+sqrt(d))/(2*a);printf("%f",x1); x2=(-b-sqrt(d))/(2*a);printf("%f",x2); } if (d=0) {x1=(-b+sqrt(d))/(2*a);printf("%f",x1); } if (d<0) printf("net kornei"); }
Решение задачи: «Составить функцию для решения уравнения»
textual
Листинг программы
#include <stdio.h> #include <math.h> #define EPS ( 1.0e-6 ) enum RESULT { R_NO_ROOTS, R_ONE_ROOT, R_TWO_ROOTS, R_DIV_ZERO, R_BAD_PARAM }; #define good_root(x, a, b, c) ( ( fabs((x) + (b)) >= EPS ) && ( fabs(((x) + (a)) / ((x) + (b)) - (x) * (c)) < EPS ) ) int equation(const double _a, const double _b, const double _c, double * pX1, double * pX2) { double a = _c; double b = _c * _b - 1.0; double c = -1.0 * _a; double d = b * b - 4.0 * a * c; int first = 0, second = 0; if ( fabs(a) < EPS ) return R_BAD_PARAM; else if ( d < 0.0 ) return R_NO_ROOTS; else if ( fabs(d) < EPS ) { *pX1 = ( -1.0 * b ) / ( 2.0 * a ); return ( fabs(*pX1 + _b) < EPS ) ? R_DIV_ZERO : ( fabs((*pX1 + _a) / (*pX1 + _b) - *pX1 * _c) < EPS ) ? R_ONE_ROOT : R_NO_ROOTS; } else { *pX1 = ( -1.0 * b - sqrt(d) ) / ( 2.0 * a ); *pX2 = ( -1.0 * b + sqrt(d) ) / ( 2.0 * a ); first = good_root(*pX1, _a, _b, _c); second = good_root(*pX2, _a, _b, _c); if ( first ) return ( second ) ? R_TWO_ROOTS : R_ONE_ROOT; else if ( second ) { *pX1 = *pX2; return R_ONE_ROOT; } } return R_NO_ROOTS; } int main(void) { double a, b, c, x1, x2; while ( printf("Enter space separated A, B and C: ") && scanf("%lf %lf %lf", &a, &b, &c) == 3 ) { switch ( equation(a, b, c, &x1, &x2) ) { case R_BAD_PARAM : printf("Parameter C can't be ZERO.\n"); break; case R_NO_ROOTS : printf("No roots for given parameters.\n"); break; case R_DIV_ZERO : printf("The only root cause zero division.\n"); break; case R_ONE_ROOT : printf("Just one root: %f\n", x1); break; case R_TWO_ROOTS : printf("First root: %f\nSecond root: %f\n", x1, x2); break; default : fprintf(stderr, "Unknown error!\n"); return 1; } } return 0; }
Объяснение кода листинга программы
- Объединение функций и переменных:
- Объединение функции
equation
и переменныхa
,b
,c
,d
,first
,second
,good_root
иEPS
в единый код. - Объединение переменных
x1
иx2
в массивdouble pX1
,double pX2
в функцииequation
. - Объединение переменных
a
,b
,c
в массивdouble _a
,double _b
,double _c
в функцииmain
.
- Объединение функции
- Исправление ошибок:
- Устранение ошибки с использованием
scanf
для ввода чисел. - Использование
double
вместоint
для переменныхa
,b
,c
,x1
,x2
в функцииmain
. - Устранение ошибки с использованием
printf
для вывода результатов.
- Устранение ошибки с использованием
- Улучшение кода:
- Использование определения
enum RESULT
для обработки результатов функцииequation
. - Использование функции
good_root
для проверки корней. - Использование условного оператора
switch
для обработки результатов функцииequation
. - Использование
break
для выхода из циклаwhile
в функцииmain
. - Использование
default
для обработки неизвестных ошибок. - Использование
fprintf
для вывода сообщения об ошибке в функцииmain
. - Использование
return 1;
для возврата ошибки в функцииmain
. - Использование
printf
для вывода значений переменныхa
,b
,c
,x1
,x2
в функцииmain
. - Использование функции
sqrt
для вычисления квадратного корня. - Использование функции
scanf
для ввода чисел с пробелами в функцииmain
. - Использование функции
printf
для вывода сообщения об ошибке в функцииmain
.
- Использование определения
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д