Как автоматизировать процедуру на 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;