Вывести фигуру 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.
Объяснение кода листинга программы
- Ввод высоты и количества символов для вывода.
- Инициализация переменной
y
значениемn
, гдеn
— это высота дисплея. - Корректировка значения
n
путем умножения на 2 и сохранения остатка от деления. - Инициализация переменной
x
значением 1, что является начальной координатой нижнего левого угла буквы. - Очистка экрана с помощью функции
clrscr
. - Цикл, выполняющийся до тех пор, пока
k
больше 0 иn
больше 1. - Внутри цикла корректировка значения
n
путем деления на 2 и получения остатка от деления, что дает следующую высоту буквы. - Уменьшение значения
k
на 1. - Два вложенных цикла, первый итерации по
i
от 0 доn — 1
, а второй итерации поj
от 0 до 2. - Внутри вложенных циклов переход к соответствующей координате с помощью функции
gotoxy
, и вывод символа*
с помощью функцииwrite
. - Увеличение значения
x
наn + sp
, что является следующей координатой нижнего левого угла буквы. - После окончания вложенных циклов переход к новой координате
x
иy
с помощью функцииgotoxy
. - Цикл, выполняющийся до тех пор, пока не будет нажата любая клавиша.
- Код ожидает ввода, пока не будет нажата клавиша, с помощью функции
keypressed
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д