program FindTwoLargestElements;
{$mode objfpc}
uses
SysUtils;
type
TIntArray = array of Integer;
{
Finds the two largest elements in an array.
Parameters:
Arr - Input array
Largest - Largest element found
SecondLargest - Second largest element found
}
procedure FindTwoLargest(const Arr: TIntArray;
var Largest, SecondLargest: Integer);
var
I: Integer;
begin
if Length(Arr) < 2 then
raise Exception.Create('Array must contain at least two elements.');
Largest := Low(Integer);
SecondLargest := Low(Integer);
for I := Low(Arr) to High(Arr) do
begin
if Arr[I] > Largest then
begin
SecondLargest := Largest;
Largest := Arr[I];
end
else if Arr[I] > SecondLargest then
begin
SecondLargest := Arr[I];
end;
end;
end;
var
Numbers: TIntArray;
Largest, SecondLargest: Integer;
I: Integer;
begin
Numbers := TIntArray.Create(3, 4, 9, 6, 7, 1, 2, 5);
FindTwoLargest(Numbers, Largest, SecondLargest);
Write('Array: ');
for I := Low(Numbers) to High(Numbers) do
Write(Numbers[I], ' ');
Writeln;
Writeln('Largest element: ', Largest);
Writeln('Second largest element: ', SecondLargest);
end.
(*
run:
Array: 3 4 9 6 7 1 2 5
Largest element: 9
Second largest element: 7
*)