Отрисовать алмаз на паскале
Всем добрый день. Делаю простые упражнения на паскале, мне удалось вывести алмаз таким образом. Высота его задаётся пользователем. К примеру, если задать число 5, результат будет таким:
*
* *
* *
* *
*
Код выглядит так:
program diamontest;
procedure PrintSpaces (count : integer);
var i : integer;
begin
for i := 1 to count do
write(' ')
end;
procedure PrintLineOfDiamonds (k, n : integer);
begin
PrintSpaces(n + 1 - k);
write('*');
if (k > 1) then
begin
PrintSpaces(2*k -3);
write('*');
end;
writeln
end;
var n, k, h : integer;
begin
repeat
write('Enter the diamond''s height (positive odd): ');
readln(h)
until (h > 0) and (h mod 2 = 1);
n:= h div 2;
for k:= 1 to n + 1 do
PrintLineOfDiamonds(k, n);
for k := n downto 1 do
PrintLineOfDiamonds(k, n);
end.
Но теперь мне нужно сделать его инверсию таким образом, если снова задаём число 5:
*******
*** ***
** **
* *
** **
*** ***
*******
Добавил процедуру PrintStars, поправил формулы в PrintLineOfDiamonds, вышло следующее:
program diamontest;
procedure PrintSpaces (count : integer);
var i : integer;
begin
for i := 1 to count do
write(' ')
end;
procedure PrintStars (count : integer);
var i : integer;
begin
for i := 1 to count do
write('*')
end;
procedure PrintLineOfDiamonds (k, n : integer);
begin
PrintStars(n + 2 - k);
write(' ');
if (k > 1) then
begin
PrintSpaces(2*k -2);
end;
PrintStars(n + 2 - k);
writeln
end;
var n, k, h : integer;
begin
repeat
write('Enter the diamond''s height (positive odd): ');
readln(h)
until (h > 0) and (h mod 2 = 1);
n:= h div 2;
PrintStars(h + 2);
writeln;
for k:= 1 to n + 1 do
PrintLineOfDiamonds(k, n);
for k := n downto 1 do
PrintLineOfDiamonds(k, n);
PrintStars(h+2);
end.
В принципе вывод, если я его копирую из консоли сюда соответсвует задаче, но выглядит в самой консоли это вот так
Звёзды в третьем ряду от середины алмаза и сверху и снизу при любом размере фигуры всегда слипаются. Это можно поправить или это так консоль в любом случае выдаёт?
