program ideone;
{$MODE OBJFPC}{$LONGSTRINGS ON}
const
N = 3;
M = 3;
type
T1DNumbers = array [0 .. N * M - 1] of UInt8;
T2DNumbers = array [0 .. N - 1, 0 .. M - 1] of UInt8;
procedure FillNumbers(out ANumbers: T2DNumbers);
var
LNumbers: T1DNumbers absolute ANumbers;
LNumIdx: Integer;
begin
for LNumIdx := Low(LNumbers) to High(LNumbers) do
LNumbers[LNumIdx] := Random(10);
end;
procedure SortNumbers(var ANumbers: T2DNumbers);
var
LNumbers: T1DNumbers absolute ANumbers;
LSize, LNumIdx: Integer;
LSwap: UInt8;
begin
for LSize := Low(LNumbers) to High(LNumbers) do
for LNumIdx := Low(LNumbers) to High(LNumbers) - 1 do
if LNumbers[LNumIdx] > LNumbers[LNumIdx + 1] then
begin
LSwap := LNumbers[LNumIdx];
LNumbers[LNumIdx] := LNumbers[LNumIdx + 1];
LNumbers[LNumIdx + 1] := LSwap;
end;
end;
procedure SortNumbersCol(var ANumbers: T2DNumbers);
var
LNumbers: T2DNumbers;
LCol, LRow: Integer;
begin
LNumbers := ANumbers;
SortNumbers(LNumbers);
for LCol := Low(LNumbers) to High(LNumbers) do
for LRow := Low(LNumbers[LCol]) to High(LNumbers[LCol]) do
ANumbers[LCol, LRow] := LNumbers[LRow, LCol];
end;
procedure ShowNumbersAs1D(const ANumbers: T2DNumbers);
var
LNumbers: T1DNumbers absolute ANumbers;
LNumber: UInt8;
begin
for LNumber in LNumbers do
Write(LNumber:2);
Write(LineEnding, LineEnding);
end;
procedure ShowNumbersAs2D(const ANumbers: T2DNumbers);
var
LColIdx: Integer;
LNumber: UInt8;
begin
for LColIdx := Low(ANumbers) to High(ANumbers) do
begin
for LNumber in ANumbers[LColIdx] do
Write(LNumber:2);
WriteLn();
end;
WriteLn();
end;
var
LNumbers: T2DNumbers;
begin
Randomize();
FillNumbers(LNumbers);
ShowNumbersAs1D(LNumbers);
ShowNumbersAs2D(LNumbers);
SortNumbers(LNumbers);
ShowNumbersAs1D(LNumbers);
ShowNumbersAs2D(LNumbers);
SortNumbersCol(LNumbers);
ShowNumbersAs1D(LNumbers);
ShowNumbersAs2D(LNumbers);
end.