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

Тема в разделе "C/C++/C#", создана пользователем ShiroKuro, 4 июн 2012.

  1. ShiroKuro

    ShiroKuro Гость

    помогите пожалуйста нужно: напишите функцию, решающую квадратное уравнение вида 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;
    }
     
  2. Araneus

    Araneus Гость

    Похоже, что напартачили в этой строчке. Вы пяти разным переменным присваиваете одно и тоже значение.
     
  3. Araneus

    Araneus Гость

    Я бы сделал так:

    Код (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();    // ждем пока пользователь полюбуеться на это всё и нажмёт
    //любую клавишу
    };
     
Загрузка...

Поделиться этой страницей