Вопрос задан 26.07.2026 в 06:41. Предмет Информатика. Спрашивает Шалесный Артём.

x=5arctg(x)-1/4 arccos⁡(x)(x+3|x-y|+x^2)/(|x-y|z+x^2 ) нужно решение этог8о уравнения в паскале, СРОЧНО ПОМОГИТЕ

Перейти к ответам

Ответы на вопрос

Отвечает Филипова Настя.

В записи есть переменные yy и zz, поэтому конкретное числовое значение xx невозможно получить, пока не заданы yy и zz.

Будем считать, что уравнение записано так:

x=5arctan(x)14arccos(x)x+3xy+x2xyz+x2.x=5\arctan(x)-\frac14\arccos(x)\cdot \frac{x+3|x-y|+x^2}{|x-y|z+x^2}.

Перенесём всё в левую часть:

f(x)=x5arctan(x)+14arccos(x)x+3xy+x2xyz+x2=0.f(x)=x-5\arctan(x)+\frac14\arccos(x)\cdot \frac{x+3|x-y|+x^2}{|x-y|z+x^2}=0.

Поскольку используется arccos(x)\arccos(x), обязательно должно выполняться:

1x1.-1\leq x\leq1.

Также знаменатель не должен быть равен нулю:

xyz+x20.|x-y|z+x^2\neq0.

Ниже программа на Pascal, которая вводит значения yy и zz, просматривает промежуток [1;1][-1;1] и находит все корни методом половинного деления.

pascal
program SolveEquation;

uses Math;

const LeftBorder = -1.0; RightBorder = 1.0; Step = 0.001; Eps = 1E-10; DenomEps = 1E-12; MaxRoots = 100;

type TRootArray = array[1..MaxRoots] of Double;

var y, z: Double; x1, x2, f1, f2: Double; root: Double; roots: TRootArray; rootCount, i: Integer;

{ Проверка допустимости значения x } function IsValid(x: Double): Boolean; var denominator: Double; begin denominator := Abs(x - y) * z + Sqr(x);

IsValid := (x >= -1.0) and (x <= 1.0) and (Abs(denominator) > DenomEps); end;

{ Левая часть уравнения f(x) = 0 } function F(x: Double): Double; var numerator, denominator: Double; begin numerator := x + 3.0 * Abs(x - y) + Sqr(x);

denominator := Abs(x - y) * z + Sqr(x);

F := x - 5.0 * ArcTan(x) + 0.25 * ArcCos(x) * numerator / denominator; end;

{ Метод половинного деления } function Bisection(a, b: Double): Double; var middle: Double; fa, fm: Double; iteration: Integer; begin fa := F(a);

for iteration := 1 to 200 do begin middle := (a + b) / 2.0;

if not IsValid(middle) then begin { Если попали в точку разрыва, немного смещаемся } middle := middle + Eps; end;

fm := F(middle);

if Abs(fm) < Eps then begin Bisection := middle; Exit; end;

if fa * fm <= 0 then b := middle else begin a := middle; fa := fm; end;

if Abs(b - a) < Eps then Break; end;

Bisection := (a + b) / 2.0; end;

{ Проверка, не был ли корень уже найден } function IsNewRoot(value: Double): Boolean; var j: Integer; begin IsNewRoot := True;

for j := 1 to rootCount do if Abs(roots[j] - value) < 1E-6 then begin IsNewRoot := False; Exit; end; end;

begin Write('Введите y: '); ReadLn(y);

Write('Введите z: '); ReadLn(z);

rootCount := 0; x1 := LeftBorder;

while x1 < RightBorder do begin x2 := x1 + Step;

if x2 > RightBorder then x2 := RightBorder;

if IsValid(x1) and IsValid(x2) then begin f1 := F(x1); f2 := F(x2);

{ Корень находится непосредственно в точке x1 } if Abs(f1) < Eps then begin root := x1;

if IsNewRoot(root) and (rootCount < MaxRoots) then begin Inc(rootCount); roots[rootCount] := root; end; end;

{ На отрезке произошла смена знака } if f1 * f2 < 0 then begin root := Bisection(x1, x2);

if IsValid(root) and (Abs(F(root)) < 1E-7) and IsNewRoot(root) and (rootCount < MaxRoots) then begin Inc(rootCount); roots[rootCount] := root; end; end; end;

x1 := x2; end;

if rootCount = 0 then WriteLn('На промежутке [-1; 1] корни не найдены.') else begin WriteLn; WriteLn('Найдено корней: ', rootCount);

for i := 1 to rootCount do begin WriteLn( 'x', i, ' = ', roots[i]:0:10, ' Проверка f(x) = ', F(roots[i]):0:12 ); end; end;

ReadLn; end.

Например, программа запросит:

Введите y: 2
Введите z: 1

После этого она выведет найденные значения xx.

Если компилятор сообщает, что функция ArcCos не найдена, необходимо проверить наличие строки:

pascal
uses Math;

Код предназначен для Free Pascal или PascalABC.NET. В Turbo Pascal готовой функции ArcCos может не быть, и её можно определить вручную:

pascal
function MyArcCos(x: Real): Real;
begin
  if x = 1.0 then
    MyArcCos := 0.0
  else if x = -1.0 then
    MyArcCos := Pi
  else
    MyArcCos := Pi / 2.0 - ArcTan(x / Sqrt(1.0 - x * x));
end;

Тогда в функции F вместо:

pascal
ArcCos(x)

нужно написать:

pascal
MyArcCos(x)

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос