56 lines
1.2 KiB
Plaintext
56 lines
1.2 KiB
Plaintext
Program FloydDemo (input, output);
|
|
|
|
function digits(number: integer): integer;
|
|
begin
|
|
digits := trunc(ln(number) / ln(10)) + 1;
|
|
end;
|
|
|
|
procedure floyd1 (numberOfLines: integer);
|
|
{ variant with repeat .. until loop }
|
|
var
|
|
i, j, numbersInLine, startOfLastlLine: integer;
|
|
|
|
begin
|
|
startOfLastlLine := (numberOfLines - 1) * numberOfLines div 2 + 1;
|
|
i := 1;
|
|
j := 1;
|
|
numbersInLine := 1;
|
|
repeat
|
|
repeat
|
|
write(i: digits(startOfLastlLine - 1 + j), ' ');
|
|
inc(i);
|
|
inc(j);
|
|
until (j > numbersInLine);
|
|
writeln;
|
|
j := 1;
|
|
inc(numbersInLine);
|
|
until (numbersInLine > numberOfLines);
|
|
end;
|
|
|
|
procedure floyd2 (numberOfLines: integer);
|
|
{ Variant with for .. do loop }
|
|
var
|
|
i, j, numbersInLine, startOfLastlLine: integer;
|
|
|
|
begin
|
|
startOfLastlLine := (numberOfLines - 1) * numberOfLines div 2 + 1;
|
|
i := 1;
|
|
for numbersInLine := 1 to numberOfLines do
|
|
begin
|
|
for j := 1 to numbersInLine do
|
|
begin
|
|
write(i: digits(startOfLastlLine - 1 + j), ' ');
|
|
inc(i);
|
|
end;
|
|
writeln;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
writeln ('*** Floyd 5 ***');
|
|
floyd1(5);
|
|
writeln;
|
|
writeln ('*** Floyd 14 ***');
|
|
floyd2(14);
|
|
end.
|