Как автоматизировать процедуру на Pascal

Есть процедура, которая очень плохо написана:

procedure PrintLeftPartOfDiamond(k, n : integer);
begin
   if (k = 1) then
   begin
      PrintChars(' ', 2*n + 1);
      write('*');
   end;
   if (k = 2) then
   begin
      PrintChars(' ', 2*n - 1);
      write('*');
   end;
   if (k = 3) then
   begin
      PrintChars(' ', 2*n - 3);
      write('*');
   end;
   if (k = 4) then
   begin
      PrintChars(' ', 2*n - 5);
      write('*');
   end
end;

Не пойму, как её сделать нормально. Подскажите, пожалуйста. Весь код выглядит так:

program diamonds;
procedure PrintChars(ch : char; count : integer);
var i : integer;
begin
   for i := 1 to count do
      write(ch)
end;

procedure PrintLeftPartOfDiamond(k, n : integer);
begin
   if (k = 1) then
   begin
      PrintChars(' ', 2*n + 1);
      write('*');
   end;
   if (k = 2) then
   begin
      PrintChars(' ', 2*n - 1);
      write('*');
   end;
   if (k = 3) then
   begin
      PrintChars(' ', 2*n - 3);
      write('*');
   end;
   if (k = 4) then
   begin
      PrintChars(' ', 2*n - 5);
      write('*');
   end
end;

procedure PrintRightPartOfDiamond(k : integer );
begin
   if k > 1 then
   begin
      PrintChars(' ', 2*k -3);
      write('*');
   end
end;

procedure PrintLineOfDiamonds(k, n, count : integer);
var i : integer;
begin
   i := 0;
   PrintChars(' ' , n + 1 - k);
   write('*');
   if (k > 1)  then 
   begin   
      PrintRightPartOfDiamond(k);
   end;   
   while i < count - 1 do begin
      PrintLeftPartOfDiamond(k, n);
      PrintRightPartOfDiamond(k);
      i := i + 1;
   end;
   writeln
end;

var n, k, h, count : integer;
begin
   repeat
      write('Enter the diamond''s height (positive odd): ');
      read(h);
      write('Enter the count of diamonds: ');
      read(count);
   until (h > 0) and (h mod 2 = 1);
   n := h div 2;
   for k := 1 to n + 1 do
      PrintLineOfDiamonds(k, n, count);
   for k := n downto 1 do
      PrintLineOfDiamonds(k, n, count)
end.

Он выводит такую фигуру, пользователь задаёт размер и количество двумя параметрами:

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

Ответы (1 шт):

Автор решения: Владимир Клыков

Если вы всё еще про "сократить код" то можно так сделать:

const
  POSITION: array [1..4] of Integer = (1, -1, -3, -5);

procedure PrintLeftPartOfDiamond(k, n: integer);
begin
   if (k >= 1) and (k <= 4) then
   begin
      PrintChars(' ', 2 * n - POSITION[k]);
      write('*');
   end
end;
→ Ссылка