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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2011, 19:03   #1
Aerowalk
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 15
По умолчанию Значение определенного интеграла

Здравствуйте, уважаемые программисты. Мне достался код программы (вычисление интеграла используя метод двойного пересчета по формуле средних прямоугольников), по идее он должен работать, но что-то не то. Я слабоват в паскале, так что просмотрите, пожалуйста, прогу и найдите ошибки. Сам паскаль вот на это ругается:
write('Znachenie integral = ', d_a(a,b,f));
PHP код:
program calc_int;

 
type func=function (x:real):real;
 var 
a,breal;
 
 function 
f(x:real):real;
  
begin f:=Exp((-0.5)*Ln(3*x*x-1));
  
end;

  
 {function 
v(x:real):real;}
 {
begin v:=}
 {
end;}

 
 function 
d_a(a,b:realf:func):real;
  const 
N0=10eps=0.001;
  var new,
old,delta:real;
   
N1:integer;

    function 
integral(a,b:realN2:integerf:func):real;
      var 
x,h,sum:real;
      
i:integer;
      
begin h:=(b-a)/N2;
        
x:=a-h/2;
        for 
i:=1 to N2 do begin x:=x+h;
        
sum:=sum+f(xend;
        
integral:=sum*h;
      
end;

 
begin {body of d_a}
  
N1:=N0;
  
old:=integral(a,b,N1,f);
  
repeat
   N1
:=2*N1;
   new:=
integral(a,b,N1,f);
   
delta:=abs(new-old);
   
old:=new;
  
until delta<eps;
  
d_a:=new;
 
end; {of d_a}

begin {main}
 
write('a,b = ');
 
read (a,b);
 
write('Znachenie integral = 'd_a(a,b,f));
readln
end

Алгоритм правильный, если что.

Последний раз редактировалось Aerowalk; 17.05.2011 в 19:05. Причина: поправка
Aerowalk вне форума Ответить с цитированием
Старый 18.05.2011, 14:26   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Вытащите integral из d_a и посмотрите, что получится.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 18.05.2011, 14:48   #3
Aerowalk
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 15
По умолчанию

я что-то недопонял, а зачем вытаскивать integral ведь все логично там... меня волнует другой вопрос, а как вообще в теле правильно вызвать функцию d_a? может не надо в write писать? а как тогда написать? почему паскалю не нравится write('', d_a(a,b,f)); вообще правильно ли так вызывать?

a,b - граничные значения интеграла, f-сама подынтегральная функция

Последний раз редактировалось Aerowalk; 18.05.2011 в 14:49. Причина: забыл
Aerowalk вне форума Ответить с цитированием
Старый 18.05.2011, 14:52   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Так. F должна вызываться со значением, т.к. в коде прописано
Код:
function f(x:real):real;
Т.е. надо как-то так:
Код:
write('Znachenie integral = ', d_a(a,b,f(c)));
Просто привычка, что все процедуры расположены отдельно.

И вообще, зачем Вы вызываете с f()?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 18.05.2011, 22:04   #5
Aerowalk
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 15
По умолчанию

О точно насчет f(x), вместо c x должен стоять же, но почему-то паскалю это не нравится все равно. Да и сказали мне так делать, до этой программы я вообще думал что можно только write('Znachenie integral = ', просто переменная); Вы, Vanta11a, можете исправить тело (если хотите то и функции вначале растусовать (алгоритмы правильные, не вникайте)) программы так, как вам видится правильнее, у меня у самого что-то не получается, сил нет видеть эти ошибки при запуске

А а можно вызывать без f()? паскаль ругается на это

может в паскале дело, он 7.1 версии?

Последний раз редактировалось Aerowalk; 18.05.2011 в 22:31.
Aerowalk вне форума Ответить с цитированием
Старый 19.05.2011, 13:43   #6
Aerowalk
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 15
По умолчанию

аа все разобрался спасибо Vanta11a
Aerowalk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление определенного интеграла. Diamond2107 Общие вопросы C/C++ 4 29.03.2011 17:55
Вычисление определенного интеграла. Diamond2107 Общие вопросы C/C++ 1 19.03.2011 17:51
Решение определенного интеграла!!! Ислам Помощь студентам 4 12.03.2011 21:09
Вычисление определенного интеграла с заданной точностью Arzamaks Помощь студентам 9 19.02.2010 10:09
Вычисление определенного интеграла методом трапеций Alexander886 Помощь студентам 0 06.12.2009 20:43