SHARE
TWEET

Untitled

a guest Sep 22nd, 2019 73 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.          Writeln('Точность удовлетворяет условию')
  49.       else
  50.          Writeln('Значение точности должно быть в диапазоне (0;1)!');
  51.    until (IsCorrect) and (Accuracy > 0) and (Accuracy < 1);
  52.    x0 := ((a + b) / 2);
  53.    while (Accuracy < abs(a - x0)) or (k > MaxIter) do
  54.    begin
  55.       fFromDeltaMinus := FirstCoef * sin(SecondCoef * (a - Accuracy)) / ThirdCoef;
  56.       fFromDeltaPlus := FirstCoef * sin(SecondCoef * (a + Accuracy)) / ThirdCoef;
  57.       Difference := -(fFromDeltaPlus - fFromDeltaMinus) / (2 * Accuracy);
  58.       x0 := a;
  59.       fFromx0 := FirstCoef * sin(SecondCoef * x0) / ThirdCoef;
  60.       a := x0 + fFromx0 / Difference;
  61.       inc(k);
  62.       Writeln('C = ', a:12:6, ' f(c) = ', fFromx0:12:6);
  63.    end;
  64.    if (abs(a - x0) > Accuracy) then
  65.       Writeln('Ответ не найден!')
  66.    else
  67.       Writeln('C = ', a:12:6,' Количество итераций: ', k);
  68.    Readln;
  69.    Readln;
  70. end.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top