Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВСЯ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
10.25 Mб
Скачать

А. Алгоритм уточнения корня уравнения методом деления отрезка пополам на школьном алгоритмическом языке (Ершоле).

алг корень уравнения (арг вещ a, b, e в, рез ещ x)

дано │a – левая граница выделенного отрезка [a; b], b – правая граница,

│e – заданная точность вычисления корня уравнения f(x) = 0.

надо

│найдено и напечатано x – приближенное значение корня

│уравнения f(x) = 0 с заданной точностью e

нач вещ c, a1,b1, лог fl

a1:=a; b1:=b

│ a и b внутри программы менять нельзя

│ введем для работы переменные a1 и b1

если f(a1)*f(b1) >= 0

то

вывод нс, «Такой отрезок не рассматривается»

иначе

fl:=ложно

нц пока (b1 – a1) > 2*e и не fl

c := a1+(b1-a1)/2

если f(c) =0

то

fl:=истинно

все

если f(a1)*f(с) < 0

то b1:= c

иначе a1:= c

все

кц

если fl

то

x:=c

иначе

x:= a1+(b1-a1)/2

все

все

кон

алг вещ f (арг вещ x)

дано

надо

нач

знач:= x – cos(x)

кон

В. Программа уточнения действительного корня уравнения f(x) = 0 методом деления отрезка пополам на Turbo Pascal'e.

Program Root;

var a, b, c, e: real; fl:boolean;

function f (x: real): real;

begin

f := x – cos (x)

end;

begin

write ('Введите значение левого конца отрезка [a;b] ');

readln (a);

write ('Введите значение правого конца отрезка [a;b] ');

readln (b);

write ('Введите точность вычисления корня на отрезке [a;b] ');

readln (e);

if f(a)*f(b) >= 0

then writeln ('Такой отрезок не рассматривается')

else

begin

fl:=false;

while ((b – a) > 2*e) and (not fl) do

begin c:=a+(b-a)/2;

if f (c)= 0 then fl:=true;

if f(a)*f(с) < 0 then b:= c else a:= c;

end;

if fl then x := c else x:= a+(b-a)/2;

writeln ('х =', х:17:11, ' с точностью ', е:17:11)

end;

end.

С. Код уточнения действительного корня уравнения f(x) = 0 методом деления отрезка пополам на Visual Basic’е.

Dim a As Double, b As Double, c As Double

Dim x As Double, e As Double

Private Sub Command1_Click()

a = InputBox("Введите левый конец отрезка", "Функция ввода")

b = InputBox("Введите правый конец отрезка", "Функция ввода")

e = InputBox("Введите значение точности", "Функция ввода")

If f(a) * f(b) >=0 Then

Form1.Print "Такой отрезок не рассматривается"

Else

Do While Abs(a - b) > 2 * e

c = a + (b - a) / 2

If f(c) = 0 Then Exit Do

If f(a) * f(c) < 0 Then

b = c

Else

a = c

End If

Loop

If f(c) = 0 Then

x = c

Else

x = a + (b - a) / 2

End If

MsgBox ("Значение корня" & x)

MsgBox ("Точность" & e)

'Form1.Print "Значение корня" , x, "Точность" ,e

'Можно вывести результат и предыдущим оператором, убрав апостроф

End If

End Sub

Function f(x As Double) As Double

f = x - Cos(x)

End Function