Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2015, 23:04   #1
Марина357
Пользователь
 
Аватар для Марина357
 
Регистрация: 26.09.2015
Сообщений: 16
Вопрос Пожалуйста, помогите проверить программу

Помогите пожалуйста проверить правильно ли записана программа к заданию на языке Паскаль
Вычислить корни функционального уравнения.
Составить программу для решения уравнения f(x)=0 на отрезке [A,B] с точностью Е методом деления отрезка пополам. Метод состоит в последовательном приближении к корню за счет уменьшения отрезка, на котором находится корень. Каждое новое положение Х находится как середина текущего отрезка. Концы текущего отрезка выбираются из условия противоположности знака f(х) на его концах. Вычисления корня заканчивается, когда длина отрезка станет меньше Е.
Для проверки программы задать: А≈0, В≈2, Е≈10-4.
Код:
program lab17;
var C,A,B,E:real;
begin
writeln('Введите A,B,E');
readln(A,B,E);
while(B-A)>E do 
begin
C:=(A+B)/2;
if (1/(sqrt(5)+sin(0.1*c)+ln(1+c))-c)*(1/(sqrt(5)+sin(0.1*b)+ln(1+b))-b)>0
then b:=c
else A:=C;
end;
writeln((A+B)/2);
end.
Решение.

Введите A,B,E
0
2
0.0001
0.384613037109375
Изображения
Тип файла: jpg TfoGlG7ycyo.jpg (45.1 Кб, 74 просмотров)

Последний раз редактировалось Stilet; 28.10.2015 в 07:36.
Марина357 вне форума Ответить с цитированием
Старый 27.10.2015, 23:19   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,375
По умолчанию

Опишите функцию:
Код:
function MyF(x: real): real;
begin
   MyF := 1/(sqrt(5)+sin(0.1*x)+ln(1+x))-x);
end;
Тогда оператор:
Код:
if (1/(sqrt(5)+sin(0.1*c)+ln(1+c))-c)*(1/(sqrt(5)+sin(0.1*b)+ln(1+b))-b)>0
then b:=c
else A:=C;
можно будет записать так:
Код:
if (MyF(c)*MyF(b) > 0) then
   b:=c
else
   a:=c;
И вот ещё. В этом коде предполагается, что на левом конце интервала значение функции меньше нуля, а на правом - больше.
В общем случае это следует проверять, и перед циклом выполнить соответствующую перестановку границ.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 27.10.2015, 23:54   #3
Марина357
Пользователь
 
Аватар для Марина357
 
Регистрация: 26.09.2015
Сообщений: 16
Печаль

А не подскажете, как сделать эту перестановку границ?
Марина357 вне форума Ответить с цитированием
Старый 28.10.2015, 00:30   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,375
По умолчанию

Например, переменным a и b присвоены некоторые значения.
Код:
a := <что-то>;
b := <что-то>;
if (MyF(a) * MyF(b) > 0) then
   writeln("Уточните границы)
else
   if (MyF(a) > MyF(b)) then
    begin
      p := a;
      a:= b;
      b := p;
   end;

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста помогите закомментировать программу(С++) Саша1990 Помощь студентам 2 09.02.2015 16:52
Помогите пожалуйста описать программу AkiraRudeGirl Общие вопросы C/C++ 4 28.12.2009 21:02
Помогите пожалуйста с математикой. Проверить примеры. blackstersl Свободное общение 7 07.02.2009 20:31
Помогите пожалуйста написать программу (си++) Annes Помощь студентам 3 11.04.2008 22:51