Верно ли, что шахматный ферзь за один ход может переместиться с одного заданного поля на другое - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Задание:Pascal ABS Для каждой задачи составить программу, выводящую значение TRUE, если указанное высказывание является истинным, и FALSE, - в противном случае (использовать условный оператор нельзя). Шахматный ферзь за один ход может переместиться с одного заданного поля на другое (каждое поле задано двумя координатами — целыми числами от 1 до 8).

Решение задачи: «Верно ли, что шахматный ферзь за один ход может переместиться с одного заданного поля на другое»

textual
Листинг программы
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.

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы