Верно ли, что шахматный ферзь за один ход может переместиться с одного заданного поля на другое - Pascal ABC
Формулировка задачи:
Решение задачи: «Верно ли, что шахматный ферзь за один ход может переместиться с одного заданного поля на другое»
var x1, y1, x2, y2: byte; f, g: boolean; begin writeln('Координаты первого поля:'); write(' x1 = '); readln(x1); write(' y1 = '); readln(y1); writeln('Координаты второго поля:'); write(' x2 = '); readln(x2); write(' y2 = '); readln(y2); writeln; { Поскольку Ферзь ходит и как ладья (горизонталь - вертикаль), и как слон (диагональ), нам надо объединить эти направления. Как было сказано в задаче boolean36, для успешного перехода ладьей необходимо совпадение или координат x, или координат y. Поэтому выражение f будет состоять в том, что или x1=x2, или y1=y2: } f := (x1 = x2)or(y1 = y2); { Но ферзь может ходить и как слон, поэтому выражение g будет состоять в том, что разницы соответствующих координат по модулю равны между собой (см. предыдущую задачу boolean38):} g := abs(x1 - x2) = abs(y1 - y2); { Таким образом, поскольку ферзь ходит или как ладья, или как слон, то выражения f и g объединим логическим оператором or ("или" - или ладья, или слон):} writeln(f or g); readln end.
Объяснение кода листинга программы
var
x1, y1, x2, y2: byte;
f, g: boolean;
begin
writeln('Координаты первого поля:');
write(' x1 = ');
readln(x1);
write(' y1 = ');
readln(y1);
writeln('Координаты второго поля:');
write(' x2 = ');
readln(x2);
write(' y2 = ');
readln(y2);
writeln;
// Поскольку Ферзь ходит и как ладья (горизонталь — вертикаль),
// и как слон (диагональ), нам надо объединить эти направления.
// Как было сказано в задаче boolean36, для успешного перехода
// ладьей необходимо совпадение или координат x, или координат
// y. Поэтому выражение f будет состоять в том, что или x1=x2,
// или y1=y2:
f := (x1 = x2)or(y1 = y2);
// Но ферзь может ходить и как слон, поэтому выражение g будет
// состоять в том, что разницы соответствующих координат по
// модулю равны между собой (см. предыдущую задачу boolean38):
g := abs(x1 - x2) = abs(y1 - y2);
// Таким образом, поскольку ферзь ходит или как ладья, или как
// слон, то выражения f и g объединим логическим оператором or
// (или
— или ладья, или слон):
writeln(f or g);
readln
end.