Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project3;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- const
- MaxIter = 100;
- FirstCoef = 9.33;
- SecondCoef = 6.977;
- ThirdCoef = 7.25;
- var a, b, Accuracy, Difference, x0, fFromDeltaMinus, fFromDeltaPlus, fFromx0, Convergence: Real;
- k: Integer;
- IsCorrect: Boolean;
- begin
- IsCorrect := False;
- k := 0;
- Writeln('Тема: Найти корни уравнения 9.33sin(6.977x) - 7.25x = 0 с точностью Epsilon методом простой итерации');
- repeat
- try
- Writeln('Введите границы промежутка [a;b]');
- Read(a);
- Read(b);
- IsCorrect := True;
- except
- Writeln('Введённое значение должно быть числом!');
- end;
- Convergence := (FirstCoef * sin(SecondCoef * a) / ThirdCoef) *
- (FirstCoef * sin(SecondCoef * b) / ThirdCoef);
- if Convergence > 0 then
- begin
- Writeln('Процесс итерации не сходится. Введите границы ещё раз');
- IsCorrect := False;
- end;
- until (IsCorrect);
- repeat
- try
- Writeln('Введите точность Epsilon');
- Read(Accuracy);
- IsCorrect := True;
- except
- Writeln('Введённое значение должно быть числом!')
- end;
- if (Accuracy > 0) and (Accuracy < 1) then
- IsCorrect := True
- else
- Writeln('Значение точности должно быть в диапазоне (0;1)!');
- IsCorrect := False;
- until (IsCorrect);
- x0 := ((a + b) / 2);
- while (Accuracy < abs(a - x0)) or (k > MaxIter) do
- begin
- fFromDeltaMinus := FirstCoef * sin(SecondCoef * (a - Accuracy)) / ThirdCoef;
- fFromDeltaPlus := FirstCoef * sin(SecondCoef * (a + Accuracy)) / ThirdCoef;
- Difference := -(fFromDeltaPlus - fFromDeltaMinus) / (2 * Accuracy);
- x0 := a;
- fFromx0 := FirstCoef * sin(SecondCoef * x0) / ThirdCoef;
- a := x0 + fFromx0 / Difference;
- inc(k);
- Writeln('C = ', a:12:6, ' f(c) = ', fFromx0:12:6);
- end;
- if (abs(a - x0) > Accuracy) then
- Writeln('Ответ не найден!')
- else
- Writeln('C = ', a:12:6,' Количество итераций: ', k);
- Readln;
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement