Вывести фигуру 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д