How to group elements of an array based on their first occurrence in Pascal

1 Answer

0 votes
program GroupElements;

const
  MaxSize = 13;
  MaxValue = 9;

type
  IntArray = array[1..MaxSize] of integer;
  FrequencyArray = array[0..MaxValue] of integer;

procedure GroupElements(arr: IntArray; len: integer);
var
  frequency: FrequencyArray;
  i, total_frequency: integer;
begin
  // Initialize frequency array
  for i := 0 to MaxValue do
    frequency[i] := 0;

  // Count frequencies and print debug info
  for i := 1 to len do
  begin
    frequency[arr[i]] := frequency[arr[i]] + 1;
    writeln('frequency[arr[', i - 1, ']] = ', frequency[arr[i]],
            ' arr[', i - 1, '] = ', arr[i]);
  end;

  for i := 1 to len do
  begin
    if frequency[arr[i]] <> 0 then
    begin
      total_frequency := frequency[arr[i]];
      while total_frequency > 0 do
      begin
        write(arr[i], ' ');
        total_frequency := total_frequency - 1;
      end;
      frequency[arr[i]] := 0;
    end;
  end;
end;

var
  arr: IntArray = (8, 3, 7, 8, 2, 5, 8, 5, 1, 9, 8, 1, 7);

begin
  GroupElements(arr, MaxSize);
end.



(*
run:

frequency[arr[0]] = 1 arr[0] = 8
frequency[arr[1]] = 1 arr[1] = 3
frequency[arr[2]] = 1 arr[2] = 7
frequency[arr[3]] = 2 arr[3] = 8
frequency[arr[4]] = 1 arr[4] = 2
frequency[arr[5]] = 1 arr[5] = 5
frequency[arr[6]] = 3 arr[6] = 8
frequency[arr[7]] = 2 arr[7] = 5
frequency[arr[8]] = 1 arr[8] = 1
frequency[arr[9]] = 1 arr[9] = 9
frequency[arr[10]] = 4 arr[10] = 8
frequency[arr[11]] = 2 arr[11] = 1
frequency[arr[12]] = 2 arr[12] = 7
8 8 8 8 3 7 7 2 5 5 1 1 9 

*)

 



answered Oct 10, 2025 by avibootz
...