Root /ArchiveAbout
()

Координаты полей шахматной доски

Координаты полей шахматной доски

На этой странице мы решаем задачи Boolean34 - Boolean40 из задачника Абрамяна, где речь идет о координатах полей шахматной доски.

Boolean34. Даны координаты поля шахматной доски x, y (целые числа, лежащие в диапазоне 1–8). Учитывая, что левое нижнее поле доски (1, 1) является черным, проверить истинность высказывания: «Данное поле является белым».

var
  x, y: byte;

begin
  writeln('Введите координаты поля шахматной доски (1-8):');
  write('x = ');
  readln(x);
  write('y = ');
  readln(y);
  writeln;
  { Если посмотреть на шахматную доску, то увидим, что для не-
  четных вертикалей (координата x) белые поля размещены на 
  четных горизонталях (координата y); и наоборот: четным вер-
  тикалям с белыми полями соответствуют нечетные горизонтали.
  Таким образом, числа x и y всегда имеют противоположную чет-
  ность, а поэтому их сумма нечетна. Как следствие отсюда: 
  чтобы поле было белым, необходимо и достаточно, чтобы сумма 
  координат была нечетна, то есть при делении на 2 давала в 
  остатке единицу. }
  writeln(odd(x + y));
  readln
end.

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

Boolean35. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Данные поля имеют одинаковый цвет».

var
  x1, y1, x2, y2: byte;

begin
  writeln('Введите координаты полей шахматной доски (1-8):');
  write(' x1 = ');
  readln(x1);
  write(' y1 = ');
  readln(y1);
  write(' x2 = ');
  readln(x2);
  write(' y2 = ');
  readln(y2);
  writeln('Данные поля имеют одинаковый цвет?');
  { Из задачи boolean34 видно, что у белых полей сумма координат
  нечетная, а у черных полей - четная. Рассмотрим сумму всех 
  координат двух полей и перепишем её в виде:
           x1+y1+x2+y2 = (x1+y1) + (x2+y2).
  Отсюда следует, что если указанная сумма четная, то числа 
  (x1+y1) и (x2+y2) имеют одинаковую четность, а это означает, 
  что поля с координатами (x1,y1) и (x2,y2) одного цвета, так
  как полям разного цвета соответствуют суммы их координат раз-
  ной четности. Таким образом, для проверки совпадения цветов 
  двух полей надо проверить сумму всех координат на четность: }
  writeln(not odd(x1 + y1 + x2 + y2));
  readln
end.

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

Boolean36. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Ладья за один ход может перейти с одного поля на другое».

var
  x1, y1, x2, y2: byte;

begin
  writeln('Введите координаты полей шахматной доски (1-8):');
  write(' x1 = ');
  readln(x1);
  write(' y1 = ');
  readln(y1);
  write(' x2 = ');
  readln(x2);
  write(' y2 = ');
  readln(y2);
  writeln;
  { Поскольку ладья ходит только по горизонтали и вертикали, 
  то для успешного перехода должны совпадать или координаты 
  x (вертикаль), или координаты y (горизонталь): }
  writeln((x1 = x2)or(y1 = y2));
  readln
end.

$1 $2Boolean37. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Король за один ход может перейти с одного поля на другое».

var
  x1, y1, x2, y2: byte;

begin
  writeln('Введите координаты полей шахматной доски (1-8):');
  write('x1 = ');
  readln(x1);
  write('y1 = ');
  readln(y1);
  write('x2 = ');
  readln(x2);
  write('y2 = ');
  readln(y2);
  writeln;
  { Поскольку король ходит только на одно поле, то его 
  соответствующие координаты x и y не могут отличаться 
  больше чем на 1 (то есть они меньше 2): }
  writeln(' ', (abs(x1 - x2) < 2)and(abs(y1 - y2) < 2));
  readln
end.

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

Boolean38. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Слон за один ход может перейти с одного поля на другое».

var
  x1, y1, x2, y2: byte;

begin
  writeln('Введите координаты полей шахматной доски (1-8):');
  write(' x1 = ');
  readln(x1);
  write(' y1 = ');
  readln(y1);
  write(' x2 = ');
  readln(x2);
  write(' y2 = ');
  readln(y2);
  writeln;
  { Поскольку слон ходит по диагонали квадрата, а у квадрата
  все стороны равны, то это означает, что насколько изменяется 
  координата x, настолько же меняется и координата y; то есть 
  нужно находить разницу. Но поскольку мы не знаем, каково из 
  чисел больше или меньше, то эту разницу вычисляем по модулю: }
  writeln(abs(x1 - x2) = abs(y1 - y2));
  readln
end.

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

Boolean39. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Ферзь за один ход может перейти с одного поля на другое».

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.

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

Boolean40. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Конь за один ход может перейти с одного поля на другое».

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;
  { Если посмотреть на ход коня, то он сначала "прыгает" на два
  поля, например, в горизонтальном направлении (влево-вправо),
  а потом на одно поле в вертикальном (координата x менняется 
  на 2, координата y - на 1). Или наоборот: сначала делает ход
  вверх-вниз на два поля, а потом влево-вправо на одно (x 
  меняется на 1, y - на 2).
    Таким образом, запишем выражение f, соостоящее в том, что 
  конь сначала ходит по горизонтали (на 2 поля), а потом по 
  вертикали (на 1 поле): }
  f := (abs(x1 - x2) = 2)and(abs(y1 - y2) = 1);
  { Далее запишем выражение g, соостоящее в том, что конь 
  сначала ходит по вертикали (на 2 поля), а потом по горизон-
  тали (на 1 поле): }
  g := (abs(x1 - x2) = 1)and(abs(y1 - y2) = 2);
  { Логический оператор and ("и") пишем потому, что два указан-
  ных условия должны выполнятся одновремено.
    Таким образом, поскольку конь может ходить или в горизон-
  тальном, или в вертикальном направлениях, то выражения f и
  g объединим логическим оператором or: }
  writeln(f or g);
  readln
end.

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255