Нужен дельный совет. Правильно ли создана программа.
Описание программы:
Составить программу позволяющую решать нелинейное уравнение.
В программе предусмотреть отделение корней, уточнение корней
произвести тремя способами методом деления отрезка пополам,
методом касательных, методом интераций. Уравнение решить на
заданном отрезке. Точность взять 10^-6/. Программа должна
начинаться с меню, в котором пользователю необходимо
выбрать метод, с помощью которого необходимо уточнить
корни уравнения
А вот код:
Код:
function f(x: real): real;
begin
f:=sqr(cos(x)); // уравнение
end;
var
a, b, e, c, x,u: real;
t: integer;
m: byte;
begin
Writeln(Rus('Вычисление нелинейного уравнения по формуле: '));
Writeln(Rus('x=sqr(cos(x)'));
Writeln(Rus('На интервале [0;1]'));
Writeln(Rus('Точность 10^-6'));
Writeln(Rus('Выберите метод которым необходимо решить уравнение:'));
Writeln(Rus('1: Метод половинного деления'));
Writeln(Rus('2: Метод касательных'));
Writeln(Rus('3: Метод итераций'));
Readln(m); // вводим переменную m
case m of
1: begin
a:=0; // интервал от 0 до 1
b:=1;
e:=exp(-6*ln(10));// 10 в степени -6
c:=(a+b)/2;
while abs(b-a)>e do
begin
if f(a)*f(c)<0 then
b:=c
else
a:=c;
c:=(a+b)/2;
end;
x:=(a+b)/2;
Writeln(Rus('Решение уравнения:'));
Writeln(Rus('Вычисление занчения корня: '),x:3:3,' F(x)=',f(x):4:4);
Writeln(Rus('Программа закончена, нажмите Enter.'));
Readln;
end;
2: begin
a:=0; // интервал от 0 до 1
b:=1;
e:=exp(-6*ln(10));// 10 в степени -6
while abs(b-a)>e do
begin
x:=(a+b)/2;
if f(a)*f(x)<0
then b:=x
else a:=x;
end;
Writeln(Rus('Решение уравнения:'));
Writeln(Rus('Вычисление значения корня: '),x:3:3,' F(x)=',f(x):4:4);
Writeln(Rus('Программа закончена, нажмите Enter.'));
Readln;
end;
3: begin
Write(Rus('Введите приближённое значение X: '));
Readln(x);
a:=0; // интервал от 0 до 1
b:=1;
e:=exp(-6*ln(10));// 10 в степени -6
t:=0;
repeat
t:=t+1;
u:=x;
x:=f(u);
until (abs(x-u)<=e);
Writeln(Rus('Решение уравнения:'));
Writeln(Rus('Вычисленное значение корня:'),x:6:5);
Writeln(Rus('Число итераций равно: '),t);
Writeln(Rus('Программа закончена, нажмите Enter.'));
Readln;
end;
end;