Показать сообщение отдельно
Старый 14.06.2004, 19:09     # 5
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Второй метод, вот что получилось:
Код:
uses
  crt;

var
  a, b, c, d, x, xn, dx: real;

const
  e: real = 0.01;

function f (x: real): real;
begin
  f := a * x * x * x +
       (b - a) * x * x +
       (c - b) * x +
       (d - c);
end;

begin
  clrscr;
  write ('a  = '); readln (a);
  write ('b  = '); readln (b);
  write ('c  = '); readln (c);
  write ('d  = '); readln (d);
  write ('x  = '); readln (x);
  dx := 1;
  if abs(f(x)) < abs(f(x + dx)) then dx := -1;
  while f(x) > e do begin
    xn := x + dx;
    if abs(f(xn)) > abs(f(x)) else dx := -0.5 * dx;
    x := xn;
  end;
  writeln ('result = ', x : 8 : 6);
  readkey;
end.
После запуска вводишь коэффициенты и первое значение x. Потом программа начинает увеличивать (или уменьшать) x на dx (в начале = 1) до тех пор пока функции не начнут расходиться - тогда прога менят направление dx и уменьшает его. Сей процесс продолжается до тех пор, пока разница между функциями не будет меньше какого-то маленького числа e. Прогу не тестил, но, кажись, сработать должно...

Третий метод, как я понял, фактически состоит в решении уравнения

ax^3 + (b-a)x^2 + (c-b)x + (d-c) = 0

а я, хучь убей, не помню ни методов решения кубических уравнений в общем виде.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 14.06.2004 в 19:28.
Ghost вне форума