Рисование звёздочками букв z - Free Pascal

Формулировка задачи:

Привет. Такая задача: Вводится 2 числа k и n, где k-это ширина и высота буквы "z", а n- это кол-во нарисованных букв "z". при k=7 и n=4, программа рисует звёздочками букву z размером 7 на 7 и со сдвигом в половину вниз ещё такие же 4 раза. Скриншот. Нужно, что бы программа была гибкая, т.е. что бы программа могла бы нарисовать и при значениях k=103 n=50. Заранее спасибо!Очень нужно!

Код к задаче: «Рисование звёздочками букв z - Free Pascal»

textual
const xm = 80; //размер вывода по горизонтали
      ym = 25; //размер вывода по вертикали
var k, n, x, y, dx, dy, my, d: integer;
    scr: array [0..ym-1, 0..xm-1] of char;
begin
  //ввод k и n с проверкой
  repeat
    repeat
      write('Размер буквы (1..', ym, '): ');
      readln(k)
    until k in [1..ym];
    repeat
      write('Количество букв (1..', xm, '): ');
      readln(n)
    until n in [1..xm];
    d := k div 2; //шаг смещения букв по вертикали
    my := d * (n + 1) + k mod 2 - 1; //максимальная позиция по вертикали - 1
    if (k * n > xm) or (my >= ym) then writeln('Не помещается, повторите ввод.')
  until (k * n <= xm) and (my < ym);
  //формируем массив
  for y := 0 to ym - 1 do
    for x := 0 to xm - 1 do
      scr[y, x] := ' ';
  for y := 0 to n - 1 do
    for x := 0 to n - 1 do
      for dy := 0 to k - 1 do
        for dx := 0 to k - 1 do
          if (dy mod (k - 1) = 0) or (k - 1 - dy = dx)
            then scr[y * d + dy, y * k + dx] := '*';
  //выводим
  for y := 0 to my do
    begin
      for x := 0 to k * n - 1 do write(scr[y, x]);
      if y < my then writeln
    end;
  readln
end.

11   голосов, оценка 3.818 из 5


СОХРАНИТЬ ССЫЛКУ