ответ давал уже когда-то... отклика не дождался, видимо. оно так надо было.
function Knight(x1, y1, x2, y2: integer): Boolean; { Возвращает True, если возможен переход с (x1,y1) на (x2,y2) } begin if abs(x2 - x1) = 2 then Knight := (abs(y2 - y1) = 1) else if abs(x2 - x1) = 1 then Knight := (abs(y2 - y1) = 2) else Knight := false end;
function Queen(x1, y1, x2, y2: integer): Boolean; { Возвращает True, если возможен переход с (x1,y1) на (x2,y2) } begin Queen := (x1 = x2) or (y1 = y2) or (abs(x2 - x1) = abs(y2 - y1)) end;
var xk, yk, xq, yq: integer;
begin Write('Укажите через пробел координаты коня [1..8]: '); Readln(xk, yk); Write('Укажите через пробел координаты ферзя [1..8]: '); Readln(xq, yq); if Knight(xk, yk, xq, yq) then Writeln('Конь бьет ферзя') else if Queen(xq, yq, xk, yk) then Writeln('Ферзь бьет коня') else Writeln('Фигуры не угрожают друг другу') end.
1. Редактор отдает приоритет комбинации 555, потому что она стоит сразу после ЕСЛИ. Потому сначала Редактор преобразует все 555 к 3.
Среди 62 пятерок комбинация 555 встретится 20 раз (62 делим нацело на 3, потому что в группе 3 цифры). Поэтому получим 20 троек и за ними 55 (62 - 60 = 2 пятерки останутся).
2. Теперь 555 больше нет и Редактор начнет заменяать каждые 333 на 5. Он так сделает три раза (заменит 9 троек на 555), потому что снова появится 555, которое более приоритетно. Поэтому 9 троек заменятся на 555, а 555 заменится на 3. Из 20 исходных троек обработали 9 и заменили их на одну троку, поэтому теперь будет строка из 12 троек (20 -9 + 1) и двух пятерок в конце.
3. Снова 9 из 12 троек заменятся на 555, а те потом заменятся на 3. Получим строку 333355. В ней 333 заменится на 5. И окончательно будет 5355.
function Knight(x1, y1, x2, y2: integer): Boolean;
{ Возвращает True, если возможен переход с (x1,y1) на (x2,y2) }
begin
if abs(x2 - x1) = 2 then Knight := (abs(y2 - y1) = 1)
else
if abs(x2 - x1) = 1 then Knight := (abs(y2 - y1) = 2)
else Knight := false
end;
function Queen(x1, y1, x2, y2: integer): Boolean;
{ Возвращает True, если возможен переход с (x1,y1) на (x2,y2) }
begin
Queen := (x1 = x2) or (y1 = y2) or (abs(x2 - x1) = abs(y2 - y1))
end;
var
xk, yk, xq, yq: integer;
begin
Write('Укажите через пробел координаты коня [1..8]: ');
Readln(xk, yk);
Write('Укажите через пробел координаты ферзя [1..8]: ');
Readln(xq, yq);
if Knight(xk, yk, xq, yq) then Writeln('Конь бьет ферзя')
else
if Queen(xq, yq, xk, yk) then Writeln('Ферзь бьет коня')
else Writeln('Фигуры не угрожают друг другу')
end.
5355
Объяснение:
1. Редактор отдает приоритет комбинации 555, потому что она стоит сразу после ЕСЛИ. Потому сначала Редактор преобразует все 555 к 3.
Среди 62 пятерок комбинация 555 встретится 20 раз (62 делим нацело на 3, потому что в группе 3 цифры). Поэтому получим 20 троек и за ними 55 (62 - 60 = 2 пятерки останутся).
2. Теперь 555 больше нет и Редактор начнет заменяать каждые 333 на 5. Он так сделает три раза (заменит 9 троек на 555), потому что снова появится 555, которое более приоритетно. Поэтому 9 троек заменятся на 555, а 555 заменится на 3. Из 20 исходных троек обработали 9 и заменили их на одну троку, поэтому теперь будет строка из 12 троек (20 -9 + 1) и двух пятерок в конце.
3. Снова 9 из 12 троек заменятся на 555, а те потом заменятся на 3. Получим строку 333355. В ней 333 заменится на 5. И окончательно будет 5355.