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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 14:37   #1
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию Интеграл

Здравствуйте Господа программисты! Возникли сложности с решением следующей задачи: вычислить интеграл для функции заданной графически. График во вложении. Вот мои наработки:
Код:
{$N+}
program task1;
uses crt;

procedure InputData(var a,b,c,d,fd,Eps:extended);
begin
  write('Введите точность вычислений Eps=');
  readln(Eps);
  write('Введите c=');
  readln(c);

  repeat
    write('Введите d=');
    readln(d);
    if (d<=c) then
      writeln('Значение d должно быть больше значения c');
  until (d>c);
  write('Введите значение функции в точке d=');
  readln(fd);
  write('Введите нижний предел интегрирования a=');
  readln(a);
  write('Введите верхний предел интегрирования b=');
  readln(b);
end;

procedure ChangeBordersByPlaces(a,b:extended; var a1,b1:extended);
begin
  if b>a then
    begin
      a1:=a;
      b1:=b;
    end
  else
    begin
      a1:=b;
      b1:=a;
    end;
end;

function F(x,c,d,fd:extended):extended;
var res:extended;
begin
    if (x>=-c) and (x<=c) then
      res:=0
  else
    if (x>=d) then
      res:=fd
  else
    if (x<=-d) then
      res:=(-1)*fd
  else
    if (x>c) and(x<d) then
      res:=fd*(x-c)/(d-c)
  else
      res:=(-1)*fd*(abs(x)-c)/(d-c);
  F:=res;
end;

procedure Splittings(I1,I2,b1,a1:extended; var n:longint; var h:extended);
begin
  n:=1;
  I1:=0;  I2:=0;
  I1:=I2; I2:=0;
  n:=2*n;
  h:=(b1-a1)/n;
end;

function CalculationIntegral(n:longint; I1,Eps,c,d,fd,h,a,b,a1:extended; var x:extended):extended;
var i:longint;
    I2:extended;
begin
  repeat
    for i:=1 to n do
      x:=a1+h*i;
      if a>b then
        I2:=I2+F(x,c,d,fd)*(-h)
      else
        I2:=I2+F(x,c,d,fd)*h;
  until (abs(I2-I1)<Eps);
  CalculationIntegral:=I2;
end;

procedure OutputData(n:longint; I1,h,a,b,x,Eps,c,d,fd,a1:extended);
begin
  writeln('Значение интеграла равно ',CalculationIntegral(n,I1,Eps,c,d,fd,h,a,b,x,a1));
end;

var n:longint;
    a,b,a1,b1,c,d,Eps,x,fd,I1,h,I2:extended;
begin
  clrscr;
  InputData(a,b,c,d,fd,Eps);
  ChangeBordersByPlaces(a1,b1,a,b);
  F(x,c,d,fd);
  Splittings(I1,I2,b1,a1,n,h);
  OutputData(n,I1,h,a1,b1,x,Eps,c,d,fd,a1);
  readln;
end.
Программа при запуске запрашивает все входные значения, а после этого выскакивает ошибка 207 (Invalid Floating point operation) Я не знаю с чем это связано.. Помогите плз. Заранее спасибо!!!
Вложения
Тип файла: doc Doc2.doc (25.5 Кб, 12 просмотров)

Последний раз редактировалось StudeHt; 21.04.2009 в 14:42.
StudeHt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определенный интеграл. J0n1cK Паскаль, Turbo Pascal, PascalABC.NET 1 16.04.2009 11:30
ИНТЕГРАЛ(( oblachko Помощь студентам 4 21.01.2009 16:00