Отметьте положение коня на доске и все клетки, которые бьет конь - Turbo Pascal
Формулировка задачи:
На шахматной доске стоит конь. Отметьте положение коня на доске и все клетки, которые бьет конь. Клетку, где стоит конь, отметьте буквой “K”, клетки, которые бьет конь, отметьте символами “*”, остальные клетки заполните точками.
Входные данные
Программа получает на вход координаты коня на шахматной доске в шахматной нотации (то есть в виде “e4”, где сначала записывается номер столбца (буква от “a” до “h”, слева направо), затем номеру строки (цифра от 1 до 8, снизу вверх).
Выходные данные
Выведите на экран изображение доски.
Примеры
входные данные
b6
выходные данные
* . * . . . . . . . . * . . . . . K . . . . . . . . . * . . . . * . * . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Решение задачи: «Отметьте положение коня на доске и все клетки, которые бьет конь»
textual
Листинг программы
var y,i:integer;
x,j:char;
a:array[1..8,'a'..'h'] of char;
begin
repeat
write('Введите букву вертикали, на которой стоит конь от a до h x=');
readln(x);
until x in ['a'..'h'];
repeat
write('Введите номер горизонтали, на которой стоит конь от 1 до 8 y=');
readln(y);
until y in [1..8];
for i:=1 to 8 do
for j:='a' to 'h' do
if abs(i-y)*abs(ord(j)-ord(x))=2 then a[i,j]:='*'
else a[i,j]:='.';
a[y,x]:='K';
for i:=8 downto 1 do
begin
for j:='a' to 'h' do
write(a[i,j]:2);
writeln;
end;
end.
Объяснение кода листинга программы
- Создается переменная
yтипаintegerи инициализируется значением 0. - Создается переменная
iтипаintegerи инициализируется значением 0. - Создается переменная
xтипаcharи инициализируется значением 'a'. - Создается переменная
jтипаcharи инициализируется значением 'a'. - Создается массив
aтипаarray[1..8,'a'..'h'] of char, который представляет собой двумерный массив символов размером 8x8. - Запускается цикл
repeat, который будет выполняться до тех пор, пока значение переменнойxне станет равным значению переменнойa[y,x]. - Внутри цикла
repeatвыполняется чтение значения переменнойxс помощью функцииreadln(). - Запускается еще один цикл
repeat, который будет выполняться до тех пор, пока значение переменнойyне станет равным значению переменнойa[y,x]. - Внутри цикла
repeatвыполняется чтение значения переменнойyс помощью функцииreadln(). - Для каждой строки массива
a(от 1 до 8) выполняется циклfor i:=1 to 8 do. - Внутри цикла
for i:=1 to 8 doвыполняется циклfor j:='a' to 'h' do. - Внутри внутреннего цикла
for j:='a' to 'h' doпроверяется условиеabs(i-y)*abs(ord(j)-ord(x))=2. Если условие истинно, то в соответствующую ячейку массиваaзаписывается символ '*', иначе записывается символ '.'. - После завершения внутреннего цикла
for j:='a' to 'h' doдля каждой строки массиваaзаписывается символ 'K'. - Запускается еще один цикл
for i:=8 downto 1 do. - Внутри цикла
for i:=8 downto 1 doвыполняется циклfor j:='a' to 'h' do. - Для каждой ячейки массива
a(от 1 до 8) выводится символ, соответствующий этой ячейке, с помощью функцииwrite(). - После завершения внутреннего цикла
for j:='a' to 'h' doдля каждой строки массиваaвыводится символwriteln(). - Цикл
repeatзавершается. - Программа завершается.