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

Интересная задачка на 10 мин.
Как-то так:
Код:
uses Math;

function F(Z : Double; Idx : Integer) : Double;
begin
  Result := Sin(Sqr(Z)) - Z/(Idx+2);
end;

function FindMaxF(A : Array Of Double; ALow, AHigh : Integer) : Double;
begin
  If ALow = AHigh
    Then Result := F(A[ALow],ALow)
    Else Result := Max(FindMaxF(A,ALow,ALow + (AHigh-ALow) div 3),FindMaxF(A,(ALow + (AHigh-ALow) div 3) + 1,AHigh));
end;

// Проверка.
procedure TForm1.Button1Click(Sender: TObject);
var
  I : Integer;
  A : Array [1..9] Of Double;
begin
  Memo1.Clear;
  For I := Low(A) To High(A) Do A[i] := Random(100);

  ShowMessage(FloatToStr(FindMaxF(A,Low(A),High(A))));
end;
Ответить с цитированием