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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 15:31   #1
Tattoquardas
Пользователь
 
Регистрация: 15.10.2011
Сообщений: 16
Восклицание Задача про модули

Написать модуль, который содержит подпрограммы приблизительного подсчета интеграла (x^2 - 1)3/2dx (от 0 до 1) методом прямоугольников и Симпсона. подпрограммы должны содержать как один из параметров функцию типа function ff(x:real):real.
Tattoquardas вне форума Ответить с цитированием
Старый 19.11.2011, 15:36   #2
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

симпсон
Код:
{код Delphi}
type
  TDoubleFunc = function(X: Double): Double;

function Integral(A, B, Eps: Double; F: TDoubleFunc): Double;

  function InternalCalc(A, B: Double; F: TDoubleFunc; N: Integer): Double;
  var
    x, dx: Double;
    i: Integer;
  begin
    dx := (B - A) / N;
    Result := 0;
    x := A;
    for i := 1 to N do
    begin
      Result := Result + dx * (F(x) + 4 * F(x + dx / 2) + F(x + dx)) / 6;
      x := x + dx;
    end;
  end;

var
  N: Integer;
  Prev: Double;
begin
  Result := InternalCalc(A, B, F, 4);
  N := 4;
  repeat
    Prev := Result;
    N := N shl 1;
    Result := InternalCalc(A, B, F, N);
  until (Result = 0) or (Abs((Result - Prev) / Result) < Eps);
end;
(с) Dimka Maslov
Цитата:
методом прямоугольников
каких ? левых? правых?


Код:
{код Delphi}
function LeftPramInt(a, b: Double; eps: Double; IntF: TDoubleFunc): Double;
var
  //S - площадь на предыдущей итерации,
  //step - "толщина" прямоугольника
  //gran - передвигаемая от a до b граница
  //n - число прямоугольников, удваивается на каждой итерации
  S, step, gran: Double;
  n: integer;
begin
  //Сначала приближение одного прямоугольника
  step := b - a;
  Result := IntF(a) * step;
  n := 1;
  repeat
    S := Result;
    n := n * 2;
    step := (b - a) / n;
    Gran := a;
    Result := 0;
    //Ниже - просто вычисляем площади новых прямоугольников
    while gran < b do
    begin
      Result := Result + IntF(gran) * step;
      gran := gran + step;
    end;
  until abs(S - Result) <= eps;
end;

function RightPramInt(a, b: Double; eps: Double; IntF: TDoubleFunc): Double;
var
  //S - площадь на предыдущей итерации,
  //step - "толщина" прямоугольника
  //gran - передвигаемая от a до b граница
  //n - число прямоугольников, удваивается на каждой итерации
  S, step, gran: Double;
  n: integer;
begin
  //Сначала приближение одного прямоугольника
  step := b - a;
  Result := IntF(b) * step;
  n := 1;
  repeat
    S := Result;
    n := n * 2;
    step := (b - a) / n;
    Gran := b;
    Result := 0;
    //Ниже - просто вычисляем площади новых прямоугольников
    while a < gran do
    begin
      Result := Result + IntF(gran) * step;
      gran := gran - step;
    end;
  until abs(S - Result) <= eps;
end;
(c) Алексей Глеб
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»

Последний раз редактировалось IT-man; 19.11.2011 в 15:50.
IT-man вне форума Ответить с цитированием
Старый 19.11.2011, 15:43   #3
Tattoquardas
Пользователь
 
Регистрация: 15.10.2011
Сообщений: 16
По умолчанию

одним из методов прямоугольников.
программа пишет, имя типа Double неизвестное... что делать?
Tattoquardas вне форума Ответить с цитированием
Старый 19.11.2011, 15:48   #4
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Цитата:
имя типа Double неизвестное... что делать
Заменить везде Double на Real
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по теме модули ! Lunatik125 Помощь студентам 1 19.12.2010 16:55
Задача по теме модули ! Lunatik125 Паскаль, Turbo Pascal, PascalABC.NET 2 19.12.2010 15:19
Задача про абанента, H E L P!! Ya_tolko_uchus Помощь студентам 1 16.12.2010 12:10
Вопрос про массивы и модули ? juan666777 Общие вопросы Delphi 6 21.07.2009 22:43