Функция, Решающая Квадратное Уравнение

  • Автор темы ShiroKuro
  • Дата начала
S

ShiroKuro

Гость
#1
помогите пожалуйста нужно: напишите функцию, решающую квадратное уравнение вида a(x)^2+bx+c=0. Функция должна возвращать количество (через тип возврата) и значения (через аргументы) действительных корней уравнения.
Как известно, квадратное уравнение будет иметь действительные корни, если его дискриминант будет неотрицательным, т.е. когда D=b^2-4ac≥0
x=(-b±√D)/2a
помогите пожалуйста!!!

код Си.

попытка с функцией...не работает...
PHP:
#include <stdio.h>
#include <conio.h>
#include <math.h>
int kvadur(double a,double b,double c,double *x1,double *x2)
{
double d;
if(a==0)//не квадратное уравнение
{
if(b!=0){*x1=-c/b;return 1;}
else if(c!=0)return 0;//нет корней
else return -1;//бесконечно много корней
}
d=(b*b)-(4*a*c);
if (d < 0) return 0;
if (d == 0) {*x1=-b/(2*a);return 1;}
*x1 = (-b+sqrt(d))/(2*a);
*x2 = (-b-sqrt(d))/(2*a);
return 2;
} 
int main(void) 
{
double a,b,c,x1,x2;
printf("a, b, c = ");
scanf("%%lf%%lf%%lf", &a, &b, &c);
a,b,c,x1,x2 = kvadur(a,b,c,&x1,&x2);
printf("x1=%lf x2=%lf",x1,x2);
getch(); 
return 0;
}
 
A

Araneus

Гость
#3
Я бы сделал так:

C++:
#include <stdio.h>
#include <conio.h>
#include <math.h>
//-------------------------------
// Собственно, функция, которая решает уравнение
//-------------------------------
int solve (float a, float b, float c, float *x1, float *x2)
{
float D;
D=b*b-4*a*c;
if (D>0) 
{
*x2=(b-sqrt(D))/(-2*a);
*x1=(b+sqrt(D))/(-2*a);
return 2; // 2 корня
} else if (D==0)
{
*x1=b/(-2*a);
*x2=*x1;
return 1; // корень 1
} else return 0;
// корни принадлежат множеству комплексных чисел;
// натуральных корней нету;
}
//--------------------------------
// Сама прога
//--------------------------------
void main ()
{
float A,B,C,X1,X2;
A=0.0;
for (;A==0.0;) // пользователь будет вводить коэфициенты до тех пор, пока это не будет действительно квадратное уравнение
{
clrscr(); // чистим экран, если это не первая попытка
printf("Enter the A, B and C for equation:\tAx^2+bx+c=0:\nA have to be not equal 0, else you have to reenter conditions\n\t");
scanf("%f %f %f", &A, &B, &C);	// считываем
}; 

switch (solve(A,B,C,&X1,&X2)) // зависимо от количества корней выводим:
{
case 1: 
{
printf("\nX1=X2=\t%f",X1);
break;
};
case 2: 
{
printf("\nX1=%f X2=%f",X1,X2);
break;
};
default : 
{
printf("\nThere are no real solutions. They are complex");
break;
};
};
getch();	// ждем пока пользователь полюбуеться на это всё и нажмёт 
//любую клавишу
};