Показать сообщение отдельно
  #1  
Старый 27.04.2008, 21:31
overclocker01 overclocker01 вне форума
Прохожий
 
Регистрация: 20.04.2008
Сообщения: 6
Репутация: 10
По умолчанию Помогите, пожалуйста, составить блок-схемы

На интегрирование методом Симпсона(только чтоб все переменные были как у меня):
Код:
function Simpson(A, B: double; N: cardinal; Func: TFunction): double;
var
  h: double;
  X: double;
  K: double;
  I: Integer;
begin
  h := 0.5 * (B - A) / N;
  Result := Func(A);
  X := A + h;
  for I := 1 to 2 * N - 1 do
  begin
    if I mod 2 = 0 then
      K := 2
    else
      K := 4;
    Result := Result + K * Func(X);
    X := X + h;
  end;
  Result := h * (Result+Func(B)) / 3;
end;


На метод трапеций(только чтоб все переменные были как у меня):

Код:
function TrapezeInt(a, b: double; eps: double; IntF: TIntFunc):double;
var
  //S - площадь на предыдущей итерации,
  //x - текущее значение аргумента
  //base - высота трапеции
  //n - число трапеций, удваивается на каждой итерации
  S, x, base: double;
  i, n: Integer;
begin
  //Сначала приближение одной трапецией
  base := b - a;
  Result := (IntF(a) + IntF(b)) / 2 * base;
  eps := eps / 10; //Вообще говоря, величина делителя зависит от функции
  n := 1;
  repeat
    S := Result;
    base := base / 2;
    n := n * 2;
    //Новая площадь вычисляется на основе старой
    Result := Result / 2;
    //Ниже - просто вычисляем площади новых трапеций
    for i := 1 to n div 2 do
    begin
      x := a + base * (i * 2 - 1);
      Result := Result + IntF(x) * base;
    end;
  until abs(S - Result) <= eps;
end;

Admin: Используем теги для оформления кода, иначе последуют санкции!

Большое спасибо заранее =))
Ответить с цитированием