帕斯卡循环

问题描述 投票:-1回答:1

我想输出像这样的输出enter image description here

我让它像这样

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.

并且输出变成这样,有点不同,我想像在白板上那样,并使其与enter image description here

pascal freepascal
1个回答
0
投票

免责声明:我不知道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个
© www.soinside.com 2019 - 2024. All rights reserved.