Конь в шахматах — это фигура, которая перемещается по доске особым образом. Она делает шаг в виде буквы "Г": две клетки в одном направлении и одну в перпендикулярном, или наоборот. На пустой шахматной доске конь может стоять на любой клетке, и в зависимости от его позиции, он может оказаться в одной из восьми возможных клеток за один ход, если они не выходят за пределы доски.
Чтобы решить задачу, нужно рассмотреть все возможные перемещения коня от заданной начальной позиции и проверить, остаются ли они внутри границ 8x8 шахматной доски. Давайте напишем программу на языке Паскаль, которая выполняет эту задачу.
program KnightMoves;
uses
SysUtils;
const
MAX_COORD = 8;
MIN_COORD = 1;
type
TMove = record
dx, dy: Integer;
end;
const
Moves: array [1.8] of TMove = (
(dx: 2; dy: 1), (dx: 2; dy: -1),
(dx: -2; dy: 1), (dx: -2; dy: -1),
(dx: 1; dy: 2), (dx: 1; dy: -2),
(dx: -1; dy: 2), (dx: -1; dy: -2)
);
var
x, y, i: Integer;
newX, newY: Integer;
input: string;
begin
// Чтение входных данных
Write('Введите координаты клетки (x y): ');
ReadLn(input);
x := StrToInt(Trim(Copy(input, 1, Pos(' ', input) - 1)));
y := StrToInt(Trim(Copy(input, Pos(' ', input) + 1, Length(input))));
// Проверка корректности введенных данных
if (x < MIN_COORD) or (x > MAX_COORD) or (y < MIN_COORD) or (y > MAX_COORD) then
begin
WriteLn('Координаты должны быть в диапазоне от 1 до 8.');
Exit;
end;
// Перебор всех возможных ходов коня
WriteLn('Конь может пойти в следующие клетки:');
for i := 1 to Length(Moves) do
begin
newX := x + Moves[i].dx;
newY := y + Moves[i].dy;
// Проверка, что новая позиция находится на доске
if (newX >= MIN_COORD) and (newX = MIN_COORD) and (newY