Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
682.73 Кб
Скачать

Экзаменационный вопрос № 36. Программа вычисления корней алгебраического уравнения методом хорд

Уравнение f(x) = 0

Метод

Интерв [а; b]

Точн. вычисл.

Ответ

Число итер-й

1

F = x2 + x – 5=0

Хорд

[0; 10]

104

1,791 1

22

Задание. Используя подпрограмму-процедуру, составить программу для определения корней уравнения методом Хорд.

Код программы.

Program primer3;

uses crt;

Var x: real; iter: integer; {x - значение вычисляемого корня}{iter - кол-во итераций}

Const

eps =0.001; {точность вычислений}

a:=–5.0 ; {a — левая граница отрезка }

b:=5.0; {b — правая граница отрезка}

Function Y(x:real) : real;

begin

Y:= x–1.1*sin(x)–0.245; {вычисление функции в точке}

end;

Procedure Metod_PolDel ( a, b : real; eps: real);

begin

Y:= x*x+x–5;

{Вычисление значения искомой функции в заданной точке x}

end;

function Y2(x:real):real;

begin

Y2:=2;

{Вычисление значения второй производной искомой функции в заданной

точке x}

end;

Procedure Metod_Hord ( a, b : real; eps: real);

var c,x0,x1 :real;

{x0 — первое приближенное значение корня функции}

{x1 — второе приближенное значение корня функции}

begin

if Y(a)*Y2(a)>0 then

{Условный оператор, проверка на отличие знаков функции и ее второй

производной}

{Y(a) — вычисление искомой функции на левой границе отрезка}

{Y2(a) — вычисление второй производной функции на левой границе отрезка}

begin

c:=a; {Переопределение промежуточной границы функции}

x1:=b; {Выбор приближенного корня функции от правого конца

отрезка}

end

else {Если условие на различие знаков функции и ее второй производной

не выполняется}

begin

c:=b; {Переопределение промежуточной границы функции}

x1:=a; {Выбор приближенного корня функции от левого конца

отрезка}

end;

repeat

x0:=x1; {Переопределение предыдущего приближенного решения

корня функции}

x1:=(c*Y(x0)–x0*Y(c))/(Y(x0)–Y(c));

{Вычисление следующего приближенного решения корня функции}

iter:=iter+1; {Происходит увеличение числа итераций}

until abs(x0–x1)<=eps;

{abs(x0–x1)<=eps — проверка точности достижения результата}

{Если abs(x0–x1) оказалось <=eps, то цикл завершает свое выполнение}

{Если abs(x0–x1) оказалось >eps, то цикл проводит еще одну итерацию}

x:=x1; {Получение корня функции}

end;

begin

clrscr; {clrscr- — метод из модуля CRT, осуществляющий очистку экрана}

writeln(‘a=’,a:2:1);

writeln(‘b=’,b:2:1);

Metod_Hord(a,b,eps);

{вызов процедуры, вычисляющей корень уравнения}

writeln('Ответ: x=',x:5:3);

writeln(‘Кол-во итераций: i=’,iter);

write(‘Нажмите ENTER’); {Вывод сообщения на экран}

readln();

end.