所以任务就是画这个形状:
******
** **
* *
** **
******
行数由用户设置,标记为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.
我不知道如何将它们放在一起.. 可能有一种更简单的方法,但我尝试这样做。
让我们通过编写一个非常基本的程序来重复打印一个字符来简化。
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.