Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.36 KB | None | 0 0
  1. program Project3;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. uses
  7.    System.SysUtils;
  8. const
  9.    MaxIter = 100;
  10.    FirstCoef = 9.33;
  11.    SecondCoef = 6.977;
  12.    ThirdCoef = 7.25;
  13.  
  14. var a, b, Accuracy, Difference, x0, fFromDeltaMinus, fFromDeltaPlus, fFromx0, Convergence: Real;
  15.     k: Integer;
  16.     IsCorrect: Boolean;
  17.  
  18. begin
  19.    IsCorrect := False;
  20.    k := 0;
  21.    Writeln('Тема: Найти корни уравнения 9.33sin(6.977x) - 7.25x = 0 с точностью Epsilon методом простой итерации');
  22.    repeat
  23.       try
  24.          Writeln('Введите границы промежутка [a;b]');
  25.          Read(a);
  26.          Read(b);
  27.          IsCorrect := True;
  28.       except
  29.          Writeln('Введённое значение должно быть числом!');
  30.       end;
  31.       Convergence := (FirstCoef * sin(SecondCoef * a) / ThirdCoef) *
  32.         (FirstCoef * sin(SecondCoef * b) / ThirdCoef);
  33.       if Convergence > 0 then
  34.       begin
  35.          Writeln('Процесс итерации не сходится. Введите границы ещё раз');
  36.          IsCorrect := False;
  37.       end;
  38.    until (IsCorrect);
  39.    repeat
  40.       try
  41.          Writeln('Введите точность Epsilon');
  42.          Read(Accuracy);
  43.          IsCorrect := True;
  44.       except
  45.          Writeln('Введённое значение должно быть числом!')
  46.       end;
  47.       if (Accuracy > 0) and (Accuracy < 1) then
  48.          IsCorrect := True
  49.       else
  50.          Writeln('Значение точности должно быть в диапазоне (0;1)!');
  51.          IsCorrect := False;
  52.    until (IsCorrect);
  53.    x0 := ((a + b) / 2);
  54.    while (Accuracy < abs(a - x0)) or (k > MaxIter) do
  55.    begin
  56.       fFromDeltaMinus := FirstCoef * sin(SecondCoef * (a - Accuracy)) / ThirdCoef;
  57.       fFromDeltaPlus := FirstCoef * sin(SecondCoef * (a + Accuracy)) / ThirdCoef;
  58.       Difference := -(fFromDeltaPlus - fFromDeltaMinus) / (2 * Accuracy);
  59.       x0 := a;
  60.       fFromx0 := FirstCoef * sin(SecondCoef * x0) / ThirdCoef;
  61.       a := x0 + fFromx0 / Difference;
  62.       inc(k);
  63.       Writeln('C = ', a:12:6, ' f(c) = ', fFromx0:12:6);
  64.    end;
  65.    if (abs(a - x0) > Accuracy) then
  66.       Writeln('Ответ не найден!')
  67.    else
  68.       Writeln('C = ', a:12:6,' Количество итераций: ', k);
  69.    Readln;
  70.    Readln;
  71. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement