Поле шахматной доски определяется парой натуральных чи-сел, каждое из которых не превосходит восьми: первое число – номер вертикали (при счете слева направо), второе – номер горизонтали (при счете снизу вверх). Даны натуральные числа k, l, m, n, каждое из которых не превосходит восьми. Требуется:
a) Выяснить, являются ли поля (k, l) и (m, n) полями одного цвета;
b) На поле (k, l) расположен ферзь. Угрожает ли он полю (m, n)?
c) Аналогично b), но ферзь заменяется на коня.
d) Выяснить, можно ли с поля (k, l) одним ходом ладьи попасть на поле (m, n). Если нет, то выяснить, как это можно сделать за два хода (указать поле, на которое приводит первый ход).
e) Аналогично d), но ладья заменяется на ферзя.
f) Аналогично d), но ладья заменяется на слона.
Предполагается, что указанные поля имеют один и тот же цвет.
попрошу всю задачу не решать, а только помогать по мере поступления вопросов... извините, если что не так, я тут новенький !
.
Program Z165;
uses crt;
var k, l, m, n:integer;
Begin
clrscr;
writeln ('Vvedite znachenie pervogo polja');
readln (k, l);
writeln ( 'Vvedite znachenie vtorogo polja');
readln (n, m);
begin
if (k mod 2=0 and l mod 2=0 and m mod 2=0 and n mod 2=0 or k mod 2=1 and l mod 2=1 and m mod 2=1 and n mod 2=1) then
writeln ( 'a) polja odnogo cveta')
else
writeln ( 'a) polja raznogo cveta');
end;
readkey;
End.
if (k mod 2=0) and (l mod 2=0) and (m mod 2=0) and (n mod 2=0) orИначе компилятор неправильно разберет выражение. Попробуй самостоятельно расставить в выражении
(k mod 2=1) and (l mod 2=1) and (m mod 2=1) and (n mod 2=1) then
Прочитай, пожалуйста, про приоритет операций - сразу же поймешь.
if (k+l+m+n)mod 2 =0 then
Если пытаться приделать логичность, то тогда так:
if odd(k xor l) = odd(m xor n) then...
А сумма может сделать плохо, если координаты заданы типом-диапазоном.
Всем большое спасибо... все советы полезны
begin
if (k=m) or (l=n) or (k+l=m+n) then
writeln ('b) ferz` ygrogaet!')
else
writeln ('b) ferz` ne ygrogaet, rasslabtes`')
end;
begin
if (k=m+-1) and (l=n+-2)or (k=m+-2) and (l=n+-1)then
writeln ('c) kon` ygrogaet!')
else
writeln( 'c) kon` ne ygrogaet, rasslabtes`')
end;
begin
if (k=m) or (l=n) or (k+l=m+n) then
writeln ('b) ferz` ygrogaet!')
else
writeln ('b) ferz` ne ygrogaet, rasslabtes`')
end;
begin
if (k=m+-1) and (l=n+-2)or (k=m+-2) and (l=n+-1)then
writeln ('c) kon` ygrogaet!')
else
writeln( 'c) kon` ne ygrogaet, rasslabtes`')
end;
if Abs(k-m)=1 then ..
> if (k=m+-1) and (l=n+-2)or (k=m+-2) and (l=n+-1)then
if sqr(k-m) + sqr(l-n) = 5 then
попробуй так (((k mod 2=0) and (l mod 2=0) and (m mod 2=0) and (n mod 2=0)) or ((k mod 2=1) and (l mod 2=1) and (m mod 2=1) and (n mod 2=1)))
Неправильно.
Не работает для
k=1
l=2
m=2
n=1
как в этом можно что то понять