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

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

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

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

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

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

Здравствуйте, Господа эксперты. Помогите полжалуйста переписать следующюю программу с использованием функций. Вот код:
Код:
Program task1;
uses CRT;
var a,b,c,d,R,n,j:integer;
    e,I,I0,F,x,y,h:real;
Begin
  CLRSCR;
  repeat
    write('Введите R (R>0): ');
    readln(R);
  until (R>0);

  repeat
    write('Введите c (c>0): ');
    readln(c);
  until (c>0);

  repeat
    write('Введите d (d>0): ');
    readln(d);
  until (d>0);
  write('Введите a: ');
  readln(a);
  repeat
    write('Введите b (b>a): ');
    readln(b);
  until (b>a);

  repeat
    write('Введите точность вычислений e (e>0): ');
    readln(e);
  until (e>0);
    n:=1;       {начальное значение n}
    x:=a;       {начальное значение x}
    if x>=R then y:=c
       else   if x>-R then y:=sqrt(R*R-x*x)
       else  y:=d;         {начальное значение y}
       I:=(b-a)*y;  {начальное значение интеграла}

    repeat
      I0:=1;    {старое значение интеграла}
      I:=0;
      n:=n*512;     {новое значение n}
      h:=(b-a)/n;   {длина каждого отрезка}
    for j:=1 to n do  {в цикле считаем интеграл при текущем значении n}
    begin
      x:=a+h*(j-1);
      if x<>R then y:=c
      else
        if x>-R then y:=sqrt(R*R-x*x)
           else y:=d;
         I:=I+h*y;
    end;
    until ((I0-I)<e);  {Повторять до заданной точности e}
      writeln('Интеграл разбит на ',n,' отрезков. Его значение на отрезке [',a,',',b,']=',I:10:3);
      readln;
end.
Вот, то что у меня получилось:
Код:
{$N+}
program task1;
uses crt;

procedure InputData(var R,c,d,a,b,Eps:extended);
begin
  repeat
    write('Введите R (R>0): ');
    readln(R);
  until (R>0);

  repeat
    write('Введите c (c>0): ');
    readln(c);
  until (c>0);

  repeat
    write('Введите d (d>0): ');
    readln(d);
  until (d>0);
  write('Введите a: ');
  readln(a);

  repeat
    write('Введите b (b>a): ');
    readln(b);
  until (b>a);

  repeat
    write('Введите точность вычислений Eps (Eps>0): ');
    readln(Eps);
  until (Eps>0);
end;

function F(x,R,c,d:extended):extended;
var res:extended;
begin
    if x>=R then
      res:=c
  else if x>-R then
      res:=sqrt(R*R-x*x)
  else if x<>R then
      res:=c
  else if x>-R then
      res:=sqrt(R*R-x*x)  else
      res:=d;
      F:=res;
end;

procedure StepOfCalculation(b,a:extended; var n:longint; var h:extended);
begin
  n:=n*512;
  h:=(b-a)/n;
end;

function CalculationIntegral(n:longint; a,b,I1,h,Eps,c,d,R:extended; var x:extended):extended;
var i:longint;
    I2:extended;
begin
  n:=1;
  I2:=0;

  repeat
    x:=a;
    I1:=1;
    StepOfCalculation(b,a,n,h);
    I2:=0;
    for i:=1 to n do
      begin
        x:=a+h*(i-1);
        I2:=I2+h*F(x,R,c,d);
      end;
  until ((I1-I2)<Eps);
  CalculationIntegral:=I2;
end;

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

var Eps,x,I1,h,a,b,c,d,R:extended;
    n:longint;
begin
  clrscr;
  InputData(R,c,d,a,b,Eps);
  OutputData(n,a,b,I1,h,Eps,c,d,R,x);
  readln;
end.
Но программа почему то неправильно вычисляет значение интеграла. Помогите пожалуйста найти ошибку. Заранее огромное спасибо!!!
StudeHt вне форума Ответить с цитированием
Старый 01.05.2009, 19:16   #2
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Всем спасибо! Нашел ошибку.
StudeHt вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вычисление интеграла(помогите найти ошибку) [C++] Айат Помощь студентам 7 10.04.2009 18:25
Методом трапеций высислить значение интеграла zloygeniyrus Помощь студентам 0 09.04.2009 08:44
Вычисление определённого интеграла Mr_Frost Помощь студентам 11 14.03.2009 02:09
Решение интеграла на ПАСКАЛЕ 34882 Паскаль, Turbo Pascal, PascalABC.NET 2 08.03.2008 13:13