帕斯卡 - 形状绘图

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

所以任务就是画这个形状:

******
**  **
*    *
**  **
******

行数由用户设置,标记为n。本例中n=3。 所以我尝试将它分成两部分,并且我设法得到如下所示的输出。

***
**
*
**
***
***
 **
  *
 **
***

我的代码:

translation : brojredova is number of rows
brojzvezda is number of stars *
broj praznih is number of empty fields
--------------------------------------------
program veasdsa; 
var 
  n,brojredova,brojzvezda,brojpraznih : integer;

begin
  readln(n);

  // prva polovina 1st half

  for brojredova := 1 to n do
  begin  
    // *
    for brojzvezda := 1 to ((n-brojredova) + 1) do
    begin
      write('*');
    end;

    writeln;
  end;       

  for brojredova := 2 to n do
  begin
    for brojzvezda := 1 to brojredova do
    begin
      write('*');
    end;

    writeln;
  end;   // ovde pocinje druga polovina ( second half starts from here)

  for brojredova := 1 to n do
  begin
    //prazna
    for brojpraznih := 1 to (brojredova - 1) do
    begin
      write(' ');
    end;

    // * 
    for brojzvezda := 1 to ((n - brojredova) + 1) do
    begin
      write('*');
    end;

    writeln;
  end;

  for brojredova := 2 to n do
  begin
    //prazna
    for brojpraznih := 1 to (n - brojredova) do
    begin
      write(' ');
    end;

    // * 
    for brojzvezda := 1 to brojredova do
    begin
      write('*');
    end; 
        
    writeln;
  end;
end.

我不知道如何将它们放在一起.. 可能有一种更简单的方法,但我尝试这样做。

for-loop nested-loops pascal
1个回答
0
投票

让我们通过编写一个非常基本的程序来重复打印一个字符来简化。

procedure print_char_times (ch : char; n : integer);
var
  i : integer;
begin
  for i := 1 to n do
    write (ch)
end;

现在您不需要一遍又一遍地重复这个循环。有了这个定义,你只需要从 0 到

i
n - 1
即可获得形状的上半部分:

  • 打印
    '*'
    n - i
    次。
  • 打印
    ' '
    i * 2
    次。
  • 打印
    '*'
    n - i
    次。

将其转换为代码非常简单。

program Test;
var
  i, n : integer;

  procedure print_char_times (ch : char; n : integer);
  var
    i : integer;
  begin
    for i := 1 to n do
      write (ch)
  end;

begin
  n := 3;

  for i := 0 to n - 1 do
  begin
    print_char_times('x', n - i);
    print_char_times(' ', i * 2);
    print_char_times('x', n - i);
    writeln
  end;

  for i := n - 2 downto 0 do
  begin
    print_char_times('x', n - i);
    print_char_times(' ', i * 2);
    print_char_times('x', n - i);
    writeln
  end
end.
© www.soinside.com 2019 - 2024. All rights reserved.