program ConvertMatrixToString;
uses
SysUtils; // IntToStr // Format // Trim
const
Rows = 5;
Cols = 6;
type
TMatrix = array[1..Rows, 1..Cols] of Integer;
TSizeArray = array[1..Cols] of Integer;
function RowToString(Row: array of Integer; SizesArr: TSizeArray): String;
var
i: Integer;
StrVal: String;
begin
RowToString := '';
for i := 0 to High(Row) do
begin
StrVal := IntToStr(Row[i]);
RowToString := RowToString + Format('%-' + IntToStr(SizesArr[i + 1]) + 's', [StrVal]) + ' ';
end;
end;
function ConvertMatrixToString(Matrix: TMatrix): String;
var
SizesArr: TSizeArray;
i, j: Integer;
TempRow: array of Integer;
begin
// Initialize column size tracking
for j := 1 to Cols do
SizesArr[j] := 0;
// Find max width of each column
for i := 1 to Rows do
for j := 1 to Cols do
begin
if Length(IntToStr(Matrix[i, j])) > SizesArr[j] then
SizesArr[j] := Length(IntToStr(Matrix[i, j]));
end;
// Convert matrix to formatted string
ConvertMatrixToString := '';
for i := 1 to Rows do
begin
SetLength(TempRow, Cols);
for j := 1 to Cols do
TempRow[j - 1] := Matrix[i, j];
ConvertMatrixToString := ConvertMatrixToString + RowToString(TempRow, SizesArr) + LineEnding;
end;
ConvertMatrixToString := Trim(ConvertMatrixToString);
end;
var
Matrix: TMatrix = (
(4, 7, 9, 18, 29, 0),
(1, 9, 18, 99, 4, 3),
(9, 17, 89, 2, 7, 5),
(19, 49, 6, 1, 9, 8),
(29, 4, 7, 9, 18, 6)
);
begin
WriteLn(ConvertMatrixToString(Matrix));
end.
(*
run:
4 7 9 18 29 0
1 9 18 99 4 3
9 17 89 2 7 5
19 49 6 1 9 8
29 4 7 9 18 6
*)