Задача 1.3

1. Условие

Даны действительные числа a, b, c (a не равно 0). Полностью исследовать биквадратное уравнение


ax4+bx2+c=0.

Если действительных корней нет, то должно быть выдано сообщение об этом, иначе должны быть выданы два или четыре корня.

2. Решение

Оператор вводит значения коэффициентов уравнения. Вычисляется значение дискриминанта

d=b2-4ac.

Если дискриминант меньше нуля, то уравнение не имеет действительных корней, иначе вычисляются корни уравнения по следующим формулам:

         ___
x1= y1 ,
            ___
x2= – y1 ,
         ___
x3= y2 ,
            ___
x4= – y2 ;

где

                   __
      – b + d
y1= ———— ,
            2a
                   __
      – b – d
y2= ———— .

            2a

При вычислениях контролируется ситуация, при которой y1 или y2 меньше нуля, и находятся два или четыре корня.

3. Алгоритм решения

4. Текст программы

 
 1:  #include <stdio.h>
 2:  #include <math.h>
 3:  #include <conio.h>
 4:  void main()
 5:  {
 6:    float a, b, c, d, y1, y2, x1, x2, x3, x4;
 7:    clrscr();
 8:    printf ("Введите a, b, c:\n");
 9:    scanf ("%f%f%f", &a, &b, &c);
10:    d = b*b - 4*a*c;
11:    printf ("d=%f\n", d);
12:    if (d<0)
13:    { 
14:     printf ("Уравнение не имеет действительных корней.\n");
15:    }
16:    else 
17:    {
18:     if ( fabs(d)<0.00001)                     /*Сравнение с нулем.*/
19:     {
20:      if (-b / (2*a)<0)
21:       printf ("Уравнение не имеет действительных корней.\n");
22:      else
23:      { 
24:       x1 = sqrt(-b/(2*a));
25:       x2 = -x1;
26:       printf ("x1=%.2f\n", x1);
27:       printf ("x2=%.2f\n", x2);
28:      }
29:     }
30:     else
31:     {
32:      y1 = (-b + sqrt(d))/(2*a);
33:      y2 = (-b - sqrt(d))/(2*a);
34:      if (y1>0 && y2>0)
35:      { 
36:       x1 =  sqrt(y1);
37:       x2 = -sqrt(y1);
38:       x3 =  sqrt(y2);
39:       x4 = -sqrt(y2);
40:       printf ("x1=%.2f\n", x1);
41:       printf ("x2=%.2f\n", x2);
42:       printf ("x3=%.2f\n", x3);
43:       printf ("x4=%.2f\n", x4); 
44:      }
45:      else if (y1>0 && y2<0)
46:      { 
47:       x1 = sqrt(y1);
48:       x2 = -x1;
49:       printf ("x1=%.2f\n", x1);
50:       printf ("x2=%.2f\n", x2);
51:      }
52:      else if (y1<0 && y2>0)
53:      { 
54:       x1 = sqrt(y2);
55:       x2 = -x1;
56:       printf ("x1=%.2f\n", x1);
57:       printf ("x2=%.2f\n", x2); 
58:      }
59:      else 
60:       printf ("Уравнение не имеет действительных корней.\n");
61:     }
62:    }
63:    printf ("Для завершения нажмите любую клавишу.\n");
64:    getchar( );
65:  }

5. Работа программы

  Введите a, b, c:
  1
  -13
  36
  d=25.000000
  x1=3.00
  x2=-3.00
  x3=2.00
  x4=-2.00
  Для завершения нажмите любую клавишу.
  

6. Проверка

При a = 1, b = -13, c=36 расчет будет следующим:
d = (-13)2 - 4*36*1 = 169 - 144 = 25;
y1 = 9;
y2 = 4;
x1 = 3;
x2 = -3;
x3 = 2;
x4 = -2.

Программа работает корректно.

Хостинг от uCoz