Вывести фигуру Z из символов (*) - Free Pascal

Узнай цену своей работы

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

Каждая последующая фигура начинается с середины предыдущей, те c n div 2 +1.
Никак не могу разобраться со внутреннем циклом , а конкретно заставить Z выводится именно с середины предыдущей Z

Решение задачи: «Вывести фигуру Z из символов (*)»

textual
Листинг программы
uses crt;
const nm = 25; {высота дисплея в символах}
      sp = 4; {пробел между Z}
var n, k, i, j, x, y: integer;
begin
  repeat {ввод высоты с контролем}
    write('n in [1..', nm, '];  n = ');
    readln(n)
  until (n >= 1) and (n <= nm);
  repeat {ввод количества с контролем}
    write('k > 0;  k = ');
    readln(k)
  until k > 0;
  y := n; {координата Y низа букв}
  n := n * 2; {коррекция n перед циклом}
  x := 1; {начальная координата X нижнего левого угла буквы}
  clrscr; {чистим экран}
  while (k > 0) and (n > 1) do {цикл, пока количество и высота актуальны}
    begin
      n := n div 2 + n mod 2; {следующая высота буквы}
      dec(k); {сколько букв осталось вывести}
      for i := 0 to n - 1 do {цикл по приращению координаты X}
        for j := 0 to 2 do {цикл вывода низа, диагонали и верха}
          begin
            gotoxy(x + i, y - j div 2 * (n - 1) - j mod 2 * i); {переход к координате}
            write('*') {печать}
          end;
      x := x + n + sp; {следующая координата X нижнего левого угла буквы}
    end;
  gotoxy(x, y); {убираем курсор в эстетически оправданное место}
  repeat until keypressed {ждём нажатия любой клавиши для выхода из программы}
end.

Объяснение кода листинга программы

  1. Ввод высоты и количества символов для вывода.
  2. Инициализация переменной y значением n, где n — это высота дисплея.
  3. Корректировка значения n путем умножения на 2 и сохранения остатка от деления.
  4. Инициализация переменной x значением 1, что является начальной координатой нижнего левого угла буквы.
  5. Очистка экрана с помощью функции clrscr.
  6. Цикл, выполняющийся до тех пор, пока k больше 0 и n больше 1.
  7. Внутри цикла корректировка значения n путем деления на 2 и получения остатка от деления, что дает следующую высоту буквы.
  8. Уменьшение значения k на 1.
  9. Два вложенных цикла, первый итерации по i от 0 до n — 1, а второй итерации по j от 0 до 2.
  10. Внутри вложенных циклов переход к соответствующей координате с помощью функции gotoxy, и вывод символа * с помощью функции write.
  11. Увеличение значения x на n + sp, что является следующей координатой нижнего левого угла буквы.
  12. После окончания вложенных циклов переход к новой координате x и y с помощью функции gotoxy.
  13. Цикл, выполняющийся до тех пор, пока не будет нажата любая клавиша.
  14. Код ожидает ввода, пока не будет нажата клавиша, с помощью функции keypressed.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы