Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/89: Рейтинг темы: голосов - 89, средняя оценка - 4.73
1 / 1 / 1
Регистрация: 27.09.2015
Сообщений: 69

Решение кубического уравнения

09.11.2015, 13:00. Показов 18459. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа для решения кубического уравнения вида
https://www.cyberforum.ru/cgi-bin/latex.cgi?a*{x}^{3}+b*{x}^{2}+c*x+d=0
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.11.2015, 13:00
Ответы с готовыми решениями:

Решение кубического уравнения по формулам Кардано
Помогите написать программу, совсем не понимаю какое кубическое ур-ие решать и как его делать.

Найти коэффициенты кубического уравнения
Заданы корни кубического уравнения. Найти его коэффициенты.

Найти количество целых корней кубического уравнения
дано уравнение ax^3 +bx^2 +cx+d=0, 0<|d|<=2. Может кто-нибудь помочь? Нужно описать математическое решение, описать блок схему и...

25
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
09.11.2015, 14:46
Найти целые корни кубического уравнения
0
1 / 1 / 1
Регистрация: 27.09.2015
Сообщений: 69
09.11.2015, 14:48  [ТС]
нужны не только целые корни
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
09.11.2015, 18:17
https://ru.wikipedia.org/wiki/... 0%BD%D0%BE
1
Модератор
10361 / 5635 / 3394
Регистрация: 17.08.2012
Сообщений: 17,197
27.11.2015, 04:51
Вообще, в плане написания программ, удобнее не формула Кардано, а тригонометрическая формула Виета: https://ru.wikipedia.org/wiki/... 1%82%D0%B0, так как в формуле Кардано есть неудобство при нахождении корней в плане выбора коэффициентов α и β таких, чтобы αβ=-p/3, поскольку из-за ошибок усечения при вычислениях на компьютере придётся это сравнение делать приближённо, и корректность результата сравнения будет неочевидна из-за сложности с выбором степени приближения. Возможные возражения насчёт присутствия тригонометрических функций в тригонометрической формуле Виета отметаются тем фактом, что по Кардано при поиске всех значений кубического корня всё равно придётся применять формулу Муавра, то есть, те же самые тригонометрические функции. Замечание: комплексные значения результата извлечения кубического корня по Кардано вполне могут присутствовать в рассчётах в том числе и тогда, когда все корни уравнения вещественные. Также могут потребоваться, помимо извлечения корня кубического, и другие операции с комплексными числами. По Виету нет танцев с бубном при сравнении чисел, и, кроме того, операции с комплексными числами фактически не требуются.
0
Модератор
10361 / 5635 / 3394
Регистрация: 17.08.2012
Сообщений: 17,197
13.12.2015, 13:34
Так, на всякий случай, решение по формуле Виета, программу умышленно не оптимизировал:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
function sgn(x: double): double;
begin
  sgn := ord(x > 0) - ord(x < 0)
end;
 
function sqrt_3(x: double): double;
begin
  if x > 0
    then sqrt_3 := exp(ln(x) / 3)
    else if x < 0
      then sqrt_3 := -exp(ln(-x) / 3)
      else sqrt_3 := x
end;
 
function arccos(x: double): double;
begin
  if x = -1 then arccos := pi else arccos := 2 * arctan(sqrt((1 - x) / (1 + x)))
end;
 
function arch(x: double): double;
begin
  arch := ln(x + sqrt(x * x - 1))
end;
 
function arsh(x: double): double;
begin
  arsh := ln(x + sqrt(x * x + 1))
end;
 
function ch(x: double): double;
begin
  ch := (exp(x) + exp(-x)) / 2
end;
 
function sh(x: double): double;
begin
  sh := (exp(x) - exp(-x)) / 2
end;
 
type complex = record re, im: double end;
 
var a, b, c, d, q, r, s, f, t: double;
    x: array [1..3] of complex;
    i: byte;
 
begin
  for i := 1 to 3 do
    begin
      x[i].re := 0;
      x[i].im := 0
    end;
  writeln('Введите коэффициенты кубического уравнения, начиная с коэффициента при x^3:');
  repeat
    write('a = ');
    readln(d);
    if d = 0 then writeln('Программа решает только кубические уравнения. Введите коэффициент при x^3:')
  until d <> 0;
  write('b = '); readln(a);
  write('c = '); readln(b);
  write('d = '); readln(c);
  a := a / d;
  b := b / d;
  c := c / d;
  q := (a * a - 3 * b) / 9;
  r := (2 * a * a * a - 9 * a * b + 27 * c) / 54;
  s := q * q * q - r * r;
  if s > 0
    then begin
      f := arccos(r / sqrt(q * q * q)) / 3;
      t := - 2 * sqrt(q);
      x[1].re := t * cos(f) - a / 3;
      x[2].re := t * cos(f + 2 / 3 * pi) - a / 3;
      x[3].re := t * cos(f - 2 / 3 * pi) - a / 3
    end
    else if s = 0
      then begin
        x[2].re := sqrt_3(r) - a / 3;
        x[3].re := x[2].re;
        x[1].re := -2 * sqrt_3(r) - a / 3
      end
      else if q = 0
        then begin
          x[1].re := -sqrt_3(c - a * a * a / 27) - a / 3;
          x[2].re := (a + x[1].re) / -2;
          x[3].re := x[2].re;
          x[2].im := sqrt(abs((a - 3 * x[1].re) * (a + x[1].re) - 4 * b)) / 2;
          x[3].im := -x[2].im
        end
        else if q > 0
          then begin
            f := arch(abs(r) / sqrt(q * q * q)) / 3;
            x[1].re := -2 * sgn(r) * sqrt(q) * ch(f) - a / 3;
            x[2].re := sgn(r) * sqrt(q) * ch(f) - a / 3;
            x[3].re := x[2].re;
            x[2].im := sqrt(3 * q) * sh(f);
            x[3].im := -x[2].im
          end
          else begin
            f := arsh(abs(r) / sqrt(abs(q * q * q))) / 3;
            x[1].re := -2 * sgn(r) * sqrt(abs(q)) * sh(f) - a / 3;
            x[2].re := sgn(r) * sqrt(abs(q)) * sh(f) - a / 3;
            x[3].re := x[2].re;
            x[2].im := sqrt(3 * abs(q)) * ch(f);
            x[3].im := -x[2].im
          end;
  writeln('Корни уравнения:');
  for i := 1 to 3 do
    begin
      write('x', i, ' = ', x[i].re);
      if x[i].im <> 0 then write(' + i * (', x[i].im, ')');
      writeln
    end;
  readln
end.
2
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
02.02.2017, 17:37
Делал тоже самое на лазарусе. Ответ выдает неверный))


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
a:=a/d;
b:=b/d;
c:=c/d;
 
 
Q:=(a*a-3*b)/9;// вычисляем  дискриминант
R:=(2*a*a*a-9*a*b+27*c)/54;
S:=Q*Q*Q-R*R;
 
 
if S>0//вычисляем корни
then begin
 
 
n:= arccos(R/sqrt(a*a*a))/3;
t:=-2*sqrt(Q);
x1:=t*cos(n) - a/3;
x2:=t*cos(n + 2*3/Pi) - a/3;
x3:=t*cos(n - 2*3/Pi) - a/3;
{формируем строку ответа}
Memo1.Text:='X1 = ' + FloatToStr(x1) + #13 +
'X2 = ' + FloatToStr(x2) + #13 + 'X3 = ' + FloatToStr(x3) + #13 + 'Q = ' + FloatToStr(Q) + #13 + 'S = ' + FloatToStr(S);
end
else
 
 
if Q>0//вычисляем корни
then begin
 
 
n:=arch(abs(R)/sqrt(Q*Q*Q))/3;
x1:=-2*sgn(R)*sqrt(Q)*ch(n)-a/3;
{формируем строку ответа}
Memo1.Text:='X1 = ' + FloatToStr(x1) + #13 +
'X2 = ' + FloatToStr(sgn(R)*sqrt(Q)*ch(n)) + 'i' + FloatToStr(sqrt(3*Q)*sh(n)-a/3) +
#13 + 'X3 = ' + FloatToStr(sgn(R)*sqrt(Q)*ch(n)-a/3) +  '-i' +  FloatToStr(sqrt(3*Q)*sh(n)-a/3) + #13 + 'Q = ' + FloatToStr(Q) +
#13 + 'S = ' + FloatToStr(S);
end
else
 
 
if Q<0//вычисляем корни
then begin
 
 
n:=arch(abs(R)/sqrt(abs(Q*Q*Q)))/3;
x1:=-2*sgn(R)*sqrt(abs(Q))*sh(n)-a/3;
{формируем строку ответа}
Memo1.Text:='X1 = ' + FloatToStr(x1) + #13 +
'X2 = ' + FloatToStr(sgn(R)*sqrt(abs(Q))*sh(n)-a/3) + 'i' + FloatToStr(sqrt(3)*abs(Q)*ch(n)) +
#13 + 'X3 = ' + FloatToStr(sgn(R)*sqrt(abs(Q))*ch(n)) +  '-i' +  FloatToStr(sqrt(3)*abs(Q)*ch(n)) + #13 + 'Q = ' + FloatToStr(Q)
+ #13 + 'S = ' + FloatToStr(S);
end
else
 
 
if Q=0//вычисляем корни
then begin
z:=c-a*a*a/27;
w:=PowerFn(z,1/3);
x1:=-w-a/3;
{формируем строку ответа}
Memo1.Text:='X1 = ' + FloatToStr(x1) + #13 +
'X2 = ' + FloatToStr((a + x1)/-2) + 'i' + FloatToStr(sqrt(abs((a-3*x1)*(a+x1)-4*b))/2) +
#13 + 'X3 = ' + FloatToStr((-a + x1)/2) + '-i' + FloatToStr(-(sqrt(abs((a-3*x1)*(a+x1)-4*b))/2)) + #13 + 'Q = ' + FloatToStr(Q)
+ #13 + 'S = ' + FloatToStr(S);
end
else
 
 
if S=0//вычисляем корни
then begin
 
 
x1:=-2*PowerFn(R,1/3) - a/3;
x2:=PowerFn(R,1/3) - a/3;
{формируем строку ответа}
Memo1.Text:='X1 = ' + FloatToStr(x1) +
#13 + 'X2 = ' + FloatToStr(x2) + #13 + 'Q = ' + FloatToStr(Q) + #13 + 'S = ' + FloatToStr(S);
end;
end;
0
Модератор
10361 / 5635 / 3394
Регистрация: 17.08.2012
Сообщений: 17,197
02.02.2017, 23:36
Исправьте программу. Сравните, к примеру, строки 72 и 73 моей программы и строки 18 и 19 Вашей. Остальное не проверял, но вполне может быть, что и далее в Вашей программе есть неточности.
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
03.02.2017, 16:25
Перенес эту программу в свой скрипт (убрал,естественно, ввод коэффициентов с клавиатуры). Для пробы решил вывести ответ так:
Pascal
1
2
3
Memo1.Text:='X1 =' + FloatToStr(w[1].re) + FloatToStr(w[1].im) + #13 +
 'X2 = ' + FloatToStr(w[2].re) + ' + i* (' + FloatToStr(w[2].im) + ')' + #13 +
 'X3 = ' + FloatToStr(w[3].re) + ' + i* (' + FloatToStr(w[3].im) + ')';
Но ответ все равно неверный))
0
Модератор
10361 / 5635 / 3394
Регистрация: 17.08.2012
Сообщений: 17,197
03.02.2017, 22:18
Тест в Lazarus:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
function sgn(x: double): double;
begin
  sgn := ord(x > 0) - ord(x < 0)
end;
 
function sqrt_3(x: double): double;
begin
  if x > 0
    then sqrt_3 := exp(ln(x) / 3)
    else if x < 0
      then sqrt_3 := -exp(ln(-x) / 3)
      else sqrt_3 := x
end;
 
function arccos(x: double): double;
begin
  if x = -1 then arccos := pi else arccos := 2 * arctan(sqrt((1 - x) / (1 + x)))
end;
 
function arch(x: double): double;
begin
  arch := ln(x + sqrt(x * x - 1))
end;
 
function arsh(x: double): double;
begin
  arsh := ln(x + sqrt(x * x + 1))
end;
 
function ch(x: double): double;
begin
  ch := (exp(x) + exp(-x)) / 2
end;
 
function sh(x: double): double;
begin
  sh := (exp(x) - exp(-x)) / 2
end;
 
procedure TForm1.Button1Click(Sender: TObject);
type complex = record re, im: double end;
var a, b, c, d, q, r, s, f, t: double;
    x: array [1..3] of complex;
    i: byte;
    sq: string;
begin
  for i := 1 to 3 do
  begin
    x[i].re := 0;
    x[i].im := 0
  end;
  d := StrToFloat(Edit1.Text);
  if d = 0
    then begin
      ShowMessage('Программа решает только кубические уравнения. Введите коэффициент при x^3.');
      Exit
    end;
  a := StrToFloat(Edit2.Text) / d;
  b := StrToFloat(Edit3.Text) / d;
  c := StrToFloat(Edit4.Text) / d;
  q := (a * a - 3 * b) / 9;
  r := (2 * a * a * a - 9 * a * b + 27 * c) / 54;
  s := q * q * q - r * r;
  if s > 0
    then begin
      f := arccos(r / sqrt(q * q * q)) / 3;
      t := - 2 * sqrt(q);
      x[1].re := t * cos(f) - a / 3;
      x[2].re := t * cos(f + 2 / 3 * pi) - a / 3;
      x[3].re := t * cos(f - 2 / 3 * pi) - a / 3
    end
    else if s = 0
      then begin
        x[2].re := sqrt_3(r) - a / 3;
        x[3].re := x[2].re;
        x[1].re := -2 * sqrt_3(r) - a / 3
      end
      else if q = 0
        then begin
          x[1].re := -sqrt_3(c - a * a * a / 27) - a / 3;
          x[2].re := (a + x[1].re) / -2;
          x[3].re := x[2].re;
          x[2].im := sqrt(abs((a - 3 * x[1].re) * (a + x[1].re) - 4 * b)) / 2;
          x[3].im := -x[2].im
        end
        else if q > 0
          then begin
            f := arch(abs(r) / sqrt(q * q * q)) / 3;
            x[1].re := -2 * sgn(r) * sqrt(q) * ch(f) - a / 3;
            x[2].re := sgn(r) * sqrt(q) * ch(f) - a / 3;
            x[3].re := x[2].re;
            x[2].im := sqrt(3 * q) * sh(f);
            x[3].im := -x[2].im
          end
          else begin
            f := arsh(abs(r) / sqrt(abs(q * q * q))) / 3;
            x[1].re := -2 * sgn(r) * sqrt(abs(q)) * sh(f) - a / 3;
            x[2].re := sgn(r) * sqrt(abs(q)) * sh(f) - a / 3;
            x[3].re := x[2].re;
            x[2].im := sqrt(3 * abs(q)) * ch(f);
            x[3].im := -x[2].im
          end;
  Memo1.Lines.Clear;
  Memo1.Lines.Add('Корни уравнения:');
  for i := 1 to 3 do
    begin
      sq := 'x' + IntToStr(i) + ' = ' + FloatToStr(x[i].re);
      if x[i].im <> 0 then sq := sq + ' + i * (' + FloatToStr(x[i].im) + ')';
      Memo1.Lines.Add(sq)
    end
end;
 
end.
Коэффициенты:

при x3: Edit1
при x2: Edit2
при x: Edit3
свободный член: Edit4

Ответ: Memo1

Прогон 1:

Edit1: 2
Edit2: 3
Edit3: -4
Edit4: -1

Memo1:

Корни уравнения:
x1 = -2,28077640640441
x2 = 1
x3 = -0,219223593595585

Прогон 2:

Edit1: 1
Edit2: 2
Edit3: 3
Edit4: 4

Memo 1:

Корни уравнения:
x1 = -1,65062919143939
x2 = -0,174685404280306 + i * (1,5468688872314)
x3 = -0,174685404280306 + i * (-1,5468688872314)

Ответы верные. Ищите, что Вы сделали не так.
1
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
04.02.2017, 10:12
Была проблема с делением на коэффициент А. Спасибо=)
0
2 / 2 / 0
Регистрация: 23.02.2016
Сообщений: 12
06.04.2017, 16:35
Попробовал запустить Вашу программу. Выдает ошибку: Неизвестное имя типа "double"
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
06.04.2017, 16:54
Taljat, Вы полностью скопировали код?
0
Модератор
10361 / 5635 / 3394
Регистрация: 17.08.2012
Сообщений: 17,197
06.04.2017, 19:22
Taljat, запускали в этом убогом Pascal ABC? В нём нет типа double, замените в программе все double на real. И срочно переходите с учебного паскаля на что-либо более серьёзное.

Добавлено через 2 минуты
Да, и ещё. Моя программа, подходящая для большинства диалектов паскаля, в посте #6.
1
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
06.04.2017, 19:24
Cyborg Drone, я запускал туже программу на Pascal ABC - все работало.
0
Модератор
10361 / 5635 / 3394
Регистрация: 17.08.2012
Сообщений: 17,197
06.04.2017, 19:35
Zwelenewskiy, точно на ABC? Может, всё-таки на ABC.NET?
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
06.04.2017, 19:58
Cyborg Drone, да,спутал) Просим прощения =)
0
2 / 2 / 0
Регистрация: 23.02.2016
Сообщений: 12
07.04.2017, 11:30
Заменил как вы сказали double на real. Теперь выдает ошибку: функция ORD с параметрами указанных типов не найдена
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
07.04.2017, 11:53
Цитата Сообщение от Taljat Посмотреть сообщение
Заменил как вы сказали double на real
Ну, вот и я тоже заменил.
Цитата Сообщение от Taljat Посмотреть сообщение
выдает ошибку
Никаких ошибок. Всё считает.
Совет вам уже дали.
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
И срочно переходите с учебного паскаля на что-либо более серьёзное.


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
function sgn(x: real): real;
begin
  sgn := ord(x > 0) - ord(x < 0)
end;
 
function sqrt_3(x: real): real;
begin
  if x > 0
    then sqrt_3 := exp(ln(x) / 3)
  else if x < 0
    then sqrt_3 := -exp(ln(-x) / 3)
  else sqrt_3 := x
end;
 
function arccos(x: real): real;
begin
  if x = -1 then arccos := pi else arccos := 2 * arctan(sqrt((1 - x) / (1 + x)))
end;
 
function arch(x: real): real;
begin
  arch := ln(x + sqrt(x * x - 1))
end;
 
function arsh(x: real): real;
begin
  arsh := ln(x + sqrt(x * x + 1))
end;
 
function ch(x: real): real;
begin
  ch := (exp(x) + exp(-x)) / 2
end;
 
function sh(x: real): real;
begin
  sh := (exp(x) - exp(-x)) / 2
end;
 
type
  complex = record re, im: real end;
 
var
  a, b, c, d, q, r, s, f, t: real;
  x: array [1..3] of complex;
  i: byte;
 
begin
  for i := 1 to 3 do
  begin
    x[i].re := 0;
    x[i].im := 0
  end;
  writeln('Введите коэффициенты кубического уравнения, начиная с коэффициента при x^3:');
  repeat
    write('a = ');
    readln(d);
    if d = 0 then writeln('Программа решает только кубические уравнения. Введите коэффициент при x^3:')
  until d <> 0;
  write('b = ');readln(a);
  write('c = ');readln(b);
  write('d = ');readln(c);
  a := a / d;
  b := b / d;
  c := c / d;
  q := (a * a - 3 * b) / 9;
  r := (2 * a * a * a - 9 * a * b + 27 * c) / 54;
  s := q * q * q - r * r;
  if s > 0
  then begin
    f := arccos(r / sqrt(q * q * q)) / 3;
    t := -2 * sqrt(q);
    x[1].re := t * cos(f) - a / 3;
    x[2].re := t * cos(f + 2 / 3 * pi) - a / 3;
    x[3].re := t * cos(f - 2 / 3 * pi) - a / 3
  end
  else if s = 0
  then begin
    x[2].re := sqrt_3(r) - a / 3;
    x[3].re := x[2].re;
    x[1].re := -2 * sqrt_3(r) - a / 3
  end
  else if q = 0
  then begin
    x[1].re := -sqrt_3(c - a * a * a / 27) - a / 3;
    x[2].re := (a + x[1].re) / -2;
    x[3].re := x[2].re;
    x[2].im := sqrt(abs((a - 3 * x[1].re) * (a + x[1].re) - 4 * b)) / 2;
    x[3].im := -x[2].im
  end
  else if q > 0
  then begin
    f := arch(abs(r) / sqrt(q * q * q)) / 3;
    x[1].re := -2 * sgn(r) * sqrt(q) * ch(f) - a / 3;
    x[2].re := sgn(r) * sqrt(q) * ch(f) - a / 3;
    x[3].re := x[2].re;
    x[2].im := sqrt(3 * q) * sh(f);
    x[3].im := -x[2].im
  end
  else begin
    f := arsh(abs(r) / sqrt(abs(q * q * q))) / 3;
    x[1].re := -2 * sgn(r) * sqrt(abs(q)) * sh(f) - a / 3;
    x[2].re := sgn(r) * sqrt(abs(q)) * sh(f) - a / 3;
    x[3].re := x[2].re;
    x[2].im := sqrt(3 * abs(q)) * ch(f);
    x[3].im := -x[2].im
  end;
  writeln('Корни уравнения:');
  for i := 1 to 3 do
  begin
    write('x', i, ' = ', x[i].re);
    if x[i].im <> 0 then write(' + i * (', x[i].im, ')');
    writeln
  end;
  readln
end.
0
2 / 2 / 0
Регистрация: 23.02.2016
Сообщений: 12
07.04.2017, 14:19
ну, выдает ошибку и все))). На третьей строке sgn := ord(x > 0) - ord(x < 0) Ошибка: "функция ORD с параметрами указанных типов не найдена"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2017, 14:19
Помогаю со студенческими работами здесь

Методом дихотомии (деления отрезка пополам) найти корни кубического уравнения
Здравствуйте, помогите пожалуйста не понимаю как написать правильный код к такому заданию:Методом дихотомии (деления отрезка пополам) найти...

Найти решение кубического уравнения
такая вот задачка! нужно построить определитель матрицы: 3-G -6 0 -6 3-G 0 0 0 -6-G и найти решение получившегося...

Найти корень кубического уравнения
Time limit: 100 ms Memory limit: 128 M Дано кубическое уравнение ax3 + bx2 + cx + d = 0 (a ≠ 0). Известно, что у этого уравнения есть...

Найти корни кубического уравнения с комплексными коэффициентами
Есть уравнение x3 + ax2 + bx + c = 0. Найти его корни с помощью формулы Кардано, и также найти один корень итерационным методом. ...

Решение кубического уравнения
Доброе утро! Можете помочь решить 10x3+5x2-x+14=0, я без понятия как решать подобные уравнения? Спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru