How to find the two largest elements in an array with Pascal

1 Answer

0 votes
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

*)

 



answered 23 hours ago by avibootz
...