program GroupWordsProgram;
type
TString = string[64];
{ A group of words that share the same first letter }
TWordGroup = record
Letter : char;
Words : array[1..20] of TString; { fixed-size list for simplicity }
Count : integer;
end;
{ Named array types for use in parameters }
TWordArray = array[1..10] of TString;
TGroupArray = array[1..26] of TWordGroup;
var
Words: TWordArray;
Groups: TGroupArray;
GroupCount: integer;
{---------------------------------------------------------------}
{ Groups words by their first letter }
{---------------------------------------------------------------}
procedure GroupByFirstLetter(
var Input: TWordArray;
InputCount: integer;
var Output: TGroupArray;
var OutCount: integer);
var
i, g: integer;
First: char;
Found: boolean;
begin
OutCount := 0;
for i := 1 to InputCount do
begin
First := UpCase(Input[i][1]); { extract first letter }
Found := False;
{ Check if a group for this letter already exists }
for g := 1 to OutCount do
if Output[g].Letter = First then
begin
Found := True;
Inc(Output[g].Count);
Output[g].Words[Output[g].Count] := Input[i];
Break;
end;
{ If no group exists, create a new one }
if not Found then
begin
Inc(OutCount);
Output[OutCount].Letter := First;
Output[OutCount].Count := 1;
Output[OutCount].Words[1] := Input[i];
end;
end;
end;
{---------------------------------------------------------------}
{ Main program }
{---------------------------------------------------------------}
var
i, j: integer;
begin
{ Initialize word list }
Words[1] := 'Python';
Words[2] := 'JavaScript';
Words[3] := 'C';
Words[4] := 'Java';
Words[5] := 'C#';
Words[6] := 'PHP';
Words[7] := 'C++';
Words[8] := 'Pascal';
Words[9] := 'SQL';
Words[10] := 'Rust';
GroupByFirstLetter(Words, 10, Groups, GroupCount);
{ Print results }
for i := 1 to GroupCount do
begin
Write(Groups[i].Letter, ': ');
Write('[');
for j := 1 to Groups[i].Count do
begin
Write(Groups[i].Words[j]);
if j < Groups[i].Count then
Write(', ');
end;
Writeln(']');
end;
end.
(*
run:
P: [Python, PHP, Pascal]
J: [JavaScript, Java]
C: [C, C#, C++]
S: [SQL]
R: [Rust]
*)