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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2013, 19:27   #1
Канунникова
Новичок
Джуниор
 
Регистрация: 22.06.2013
Сообщений: 2
По умолчанию Pascal метод дихотомии и модули

Здравствуйте! Подскажите, пожалуйста, никак не возьму в толк, программа выполняется, но не даёт результата, то есть её выполнение приходится прерывать самостоятельно.
Условия:. С погрешностью 0.001 уточнить методом дихотомии корни уравнений на отрезке [0; 1] и на отрезке [2.5; 4.5].

program zadacha_2;
const e=0.001;
type fun=function(x:real):real; {процедурный тип}
{$F+}{директива дальней компиляции}
function f1(x:real):real; {функция для первого уравнения }
begin
if (x<>-1) then {если х равно -1, то на ноль делить нельзя, поэтому проверка}
f1:=x-1/(5*(x+1))
else f1:=0
end;
function f2(x:real):real; {функция для второго уравнения}
begin
f2:=exp(x)-x*x*x;
end;
{$F-}{отмена директивы}
Function dihotom(a,b:real; f:fun):real;
var x:real;
begin
x:=(a+b)/2;
while abs(f(x))>e do
begin
if f(a)*f(b)<0 then b:=x
else a:=x;
end;
dihotom:=x;
end;
begin
writeln ('Корень первого уравнения = ', dihotom(0,1,f1):5:3);
writeln ('Корень второго уравнения = ', dihotom(2.5,4.5,f2):5:3);
readln;
end.

и посмотрите, пожалуйста, вот задание "Запрограммировать решение соответствующего варианта задания из темы № 2 “Процедурный тип”. Процедурный тип и относящиеся к нему под-программы должны быть описаны в отдельном модуле. В другом модуле должна быть описана основная подпрограмма." Ну, соответственно, выполнить его относительно этой задачи. Вообще никак не могу взять в толк, как это будет выглядеть
Канунникова вне форума Ответить с цитированием
Старый 22.06.2013, 22:06   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Код:
Function dihotom(a,b:real; f:fun):real;
var x:real;
begin
x:=(a+b)/2;
while (abs(f(x))>e) and (b > a) do
Begin
  if f(a)*f(x)<0 then b:=x
               else a:=x;
  x:=(a+b)/2;
end;
dihotom:=x;
end;
Для функции f2 условие ABS(f(x)) < e не выполняется, поэтому для избежания зацикливания надо отлавливать выход за границы отрезка.

Цитата:
Процедурный тип и относящиеся к нему под-программы должны быть описаны в отдельном модуле. В другом модуле должна быть описана основная подпрограмма."
Создаете модуль, описываете в нем процедурный тип и функции f1 и f2. Затем создаете второй модуль, подключаете в нем ранее созданный модуль (uses Имя_первого_модуля) и реализуете в нем функцию dihotom. В основной программе подключаете второй модуль и вызываете из него созданную в нем функцию.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681

Последний раз редактировалось GetMax; 23.06.2013 в 15:02.
GetMax вне форума Ответить с цитированием
Старый 23.06.2013, 14:36   #3
Канунникова
Новичок
Джуниор
 
Регистрация: 22.06.2013
Сообщений: 2
По умолчанию

Спасибо Вам огромнейшее! Всё поняла.
Канунникова вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод дихотомии Kalina) Помощь студентам 14 21.11.2012 17:49
Метод дихотомии funke_monkey Помощь студентам 1 15.11.2012 21:51
Метод перебора, Метод дихотомии, Метод золотого сечения Delphi !!! OneBri Помощь студентам 0 03.10.2012 08:42
C++ метод дихотомии MIKE72 Помощь студентам 0 02.10.2011 14:21
Метод Дихотомии Roland_Lviv_ua Помощь студентам 5 13.06.2010 18:23