Напишите на том языке, который вам удобен(желательно Pascal, Python или C++). Даю 50 баллов. Заранее спасибо
Ответы
type
Поле = class
private
h, v: integer;
public
constructor(ph, pv: integer) := (h, v) := (ph, pv);
function Корректно := (h in 1..8) and (v in 1..8);
end;
Доска = class
private
class поле1, поле2: Поле;
public
class результат: List<string>;
constructor(ph1, pv1, ph2, pv2: integer);
begin
поле1 := new Поле(ph1, pv1);
if not поле1.Корректно then
begin
Print('Incorrect data.');
Halt
end;
поле2 := new Поле(ph2, pv2);
if not поле2.Корректно then
begin
Print('Incorrect data.');
Halt
end;
результат := new List<string>;
end;
class function ВзятиеСлоном: boolean;
begin
Result := Abs(поле2.h - поле1.h) = Abs(поле2.v - поле1.v);
if Result then результат.Add('Bishop.')
end;
class function ВзятиеЛадьей: boolean;
begin
Result := (поле2.h = поле1.h) or (поле2.v = поле1.v);
if Result then результат.Add('Castle.')
end;
class function ВзятиеКонем: boolean;
begin
var dh := Abs(поле2.h - поле1.h);
var dv := Abs(поле2.v - поле1.v);
Result := (dh = 1) and (dv = 2) or (dh = 2) and (dv = 1);
if Result then результат.Add('Knight.')
end;
class function ВзятиеФерзем: boolean;
begin
Result := (Abs(поле2.h - поле1.h) = Abs(поле2.v - поле1.v)) or
(поле2.h = поле1.h) or (поле2.v = поле1.v);
if Result then результат.Add('Queen.')
end;
class function ВзятиеПешки: boolean;
begin
var слон := ВзятиеСлоном;
var ладья := ВзятиеЛадьей;
var конь := ВзятиеКонем;
var ферзь := ВзятиеФерзем;
Result := слон or ладья or конь or ферзь
end;
end;
begin
var (h1, v1, h2, v2) := ReadInteger4;
var cb := new Доска(h1, v1, h2, v2);
if Доска.ВзятиеПешки then Доска.результат.PrintLines
else Print('The pawn is not under attack.')
end.