Показать сообщение отдельно
  #7  
Старый 06.06.2014, 06:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, в принципе, почти правильно.
Только очень уж как-то сложно получается местами.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function f(x : double) : double;
begin
  // Это твоя подинтегральная функция
end;
 
function Integral(x1, x2 : double; k : integer) : double;
var
  x, y, ym : double;
  n : Integer;
begin
  n := 0; // Кол-во точек, попавших в площадь
  Result := 0;
 
  ym := max(f(x1),f(x2));
  For I := 1 To k Do // Кол-во проб
    Begin
      x := x1 + Random*(x2-x1);
      y := Random*ym;
      If y < f(x) Then inc(n);
    End;
  Result := (x2-x1)*ym*n/k; // результат  - площадь прямоугольника * коэф "попадания"
end;
 
// использование
procedure TForm1.Button1Click(Sender : TObject);
begin
  // Edit1 - нижняя граница интеграла
  // Edit2 - верхняя граница интеграла
  // Edit3 - кол-во проб
  ShowMessage('Интеграл = ' + FloatToStr(Integral(strtofloat(Edit1.Text),strtofloat(Edit2.Text),strtoint(Edit3.Text))));
  // Надеюсь, со скобками не ошибся...
end;
Ответить с цитированием