我让它像这样
uses crt;
var n,i,j:integer;
begin
clrscr;
write('Masukkan Bilangan: ');
readln(n);
for i:= n downto i do
begin
for j:=1 to i do
begin
write(' ',j);
end;
writeln;
end;
readln;
end.
免责声明:我不知道FreePascal;下面的代码无需修改即可在Delphi中工作。其他Pascal实现可能需要稍作修改。
让y
为行索引,从顶部的10到底部的1。
让ColumnWidth
为每一列的宽度。我们需要ColumnWidth
至少为3(为什么?)。
由于控制台输出基于行,因此很自然地将y
用作外部循环变量。
在线y
上,我们首先需要写入10 - y
空单元格。由于每个单元格由ColumnWidth
空格组成,因此我们首先在此行上写入StringOfChar(#32, (10-y) * ColumnWidth)
。 32
是空格的ASCII码。
然后我们要打印实际数字。由于有10列,并且10 - y
为空白,因此10 - (10 - y) = y
为非空白,并且它们都包含y
。因此,我们编写了y
的许多实例,其宽度为ColumnWidth
。
将所有内容放在一起:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, StrUtils;
var
i, y: Integer;
const
ColumnWidth = 3;
begin
for y := 10 downto 1 do
begin
Write(StringOfChar(#32, (10-y) * ColumnWidth));
for i := 1 to y do
Write(y:ColumnWidth);
Writeln;
end;
Readln;
end.
示例输出:
ColumnWidth = 3
:10 10 10 10 10 10 10 10 10 109 9 9 9 9 9 9 9 98 8 8 8 8 8 8 87 7 7 7 7 7 76 6 6 6 6 65 5 5 5 54 4 4 43 3 32 21个
ColumnWidth = 4
:10 10 10 10 10 10 10 10 10 109 9 9 9 9 9 9 9 98 8 8 8 8 8 8 87 7 7 7 7 7 76 6 6 6 6 65 5 5 5 54 4 4 43 3 32 21个