![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Нужен дельный совет. Правильно ли создана программа.
Описание программы: Составить программу позволяющую решать нелинейное уравнение. В программе предусмотреть отделение корней, уточнение корней произвести тремя способами методом деления отрезка пополам, методом касательных, методом интераций. Уравнение решить на заданном отрезке. Точность взять 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; |