ты вместо использования c и d как ограничения значений, используешь их для ограничения номеров элементов и не проверяешь по последнему нечетному элементу (ну или я не понял задание).
Код:
function FindMaxBoundary(A : Array Of integer) : Integer;
var
I : Integer;
begin
For I := High(A) DownTo Low(A) Do
If (A[i] mod 2) <> 0 Then
Begin
Result := I;
Exit;
End;
Raise Exception.Create('Все элементы массива четные.');
end;
function FindMaxItem(A : Array Of Integer; c, d : Integer) : Integer;
var
MaxIdx : Integer;
begin
Result := -1;
MaxIdx := FindMaxBoundary(A);
For I := Low(A) To MaxIdx-1 Do
If (A[i] >= c) And (A[i] <= d) Then
If Result = -1
Then Result := I
Else
If A[i] > A[Result] Then Result := I;
If Result = -1 Then
Raise Exception.Create('Максимальный элемент не найден.');
end;
Собственно вызов для поиска:
Код:
Try
n := FindMaxItem(A,c,d);
WriteLn(Format('Макс. элемент A[%d] = %d.',[n,A[n]]));
Except
On E : Exception WriteLn(E.Message);
End;