Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.05.2012, 17:40
Аватар для CONDOR
CONDOR CONDOR вне форума
Прохожий
 
Регистрация: 20.05.2012
Сообщения: 4
Репутация: 10
По умолчанию Правильно ли составлена программа для решения нелинейного уравнения.

Нужен дельный совет. Правильно ли создана программа.

Описание программы:
Составить программу позволяющую решать нелинейное уравнение.
В программе предусмотреть отделение корней, уточнение корней
произвести тремя способами методом деления отрезка пополам,
методом касательных, методом интераций. Уравнение решить на
заданном отрезке. Точность взять 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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:26.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025