На этой странице мы решаем задачи 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