Вопрос задан 21.02.2019 в 03:25. Предмет Информатика. Спрашивает Котов Никита.

Где здесь ошибка метод хорд 9.x5+3*sin(x)-3x2-12 program P12; var a,b,c,x:real; i,n:integer;

function F(x:real):real; begin f:=sqr(sqr(x))+3*sin(x)-3*x*sqr(x)-12; end; begin a:=0.5; b:=1.5; n:=12; for i:=1 to n do begin x:=x-(f(x))/(f(c)-f(x))*(c-x); c:=a-(f(a))/(f(a))*(b-a); writeln(x:10:8,'',f(x):12:8); if f(c)*f(a)>0 then break else begin c:=a; x:=b;end; end; end.
0 0
Перейти к ответам

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Крюков Артём.
Везде, начиная с того что даже f написана не верно
вот рабочий код. Формулы брались на вики, потому что в ваших я сомневаюсь весьма

function F(x: real): real;
begin
    f := sqr(sqr(x)) * x + 3 * sin(x) - 3 * sqr(x) - 12;
end;

function FindRoot(a, b, epsilon: real): real;
begin
    while(abs(b - a) > epsilon) do
    begin
        a := b - (b - a) * f(b) / (f(b) - f(a));
        b := a + (a - b) * f(a) / (f(a) - f(b));
        writeln(a, ' ', b);
    end;
   
    FindRoot := b;
end;

begin
    writeln('x = ', FindRoot(0.5, 1.5, 0.001));
end.


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Ошибка в методе хорд

Код, который вы предоставили, содержит несколько ошибок. Вот подробный анализ:

Неправильное использование оператора "for"

Оператор цикла "for" должен выглядеть как `for i := 1 to n do`, но в вашем коде он выглядит как `for+i:=1+to+n+do`. Правильный синтаксис оператора for в Паскале должен быть "for <переменная> := <начальное значение> to <конечное значение> do".

Необъявленная переменная "c"

Переменная "c" не была объявлена перед использованием в вашем коде. Вам следует объявить переменную "c", прежде чем использовать ее в вашем коде.

Отсутствие присваивания начального значения переменной "x"

Переменная "x" используется в выражении `x := x - (f(x)) / (f(c) - f(x)) * (c - x);`, но до этого момента ей не было присвоено начальное значение. Вы должны присвоить начальное значение переменной "x", прежде чем использовать ее в этом выражении.

Опечатка в функции "F"

В вашей функции "F" вы используете `f := sqr(sqr(x))`, но правильное написание этой строки должно быть `f := sqr(x) * sqr(x)`.

Опечатка в условии "if"

В вашем условии `if +f(c)*f(a)>0+then` вы использовали символ ">", который представляет "больше", но выражение должно выглядеть как `if f(c) * f(a) > 0 then`.

Неявное объявление типа переменных

В вашем коде переменные объявлены без указания их типов, что может вызвать проблемы. Вам следует явно указывать тип каждой переменной.

Пропущена точка с запятой в цикле "for"

В вашем цикле "for" вы пропустили точку с запятой после `for i := 1 to n do`, это приведет к ошибке компиляции.

Неправильное использование оператора "break"

В языке Pascal оператор "break" не используется для выхода из цикла, вместо этого используется оператор "exit". Правильное использование: `if f(c) * f(a) > 0 then exit`.

После исправления этих ошибок, ваш код может выглядеть примерно так:

```pascal program P12; var a, b, x: real; i, n: integer;

function F(x: real): real; begin F := sqr(x) * sqr(x) + 3 * sin(x) - 3 * x * sqr(x) - 12; end;

begin a := 0.5; b := 1.5; n := 12; x := 0; // Присвоение начального значения переменной x for i := 1 to n do begin x := x - (F(x)) / (F(b) - F(x)) * (b - x); writeln(x:10:8, '', F(x):12:8); if F(b) * F(a) > 0 then exit else begin b := a; x := b; end; end; end. ```

После внесения этих изменений ваш код должен работать корректно.

0 0

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

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

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