Написать программу, которая определяет количество полей, которые находятся под боем этих фигур. На шахматной доске стоит ферзь и конь.
Вопрос посетителя
Написать программу, которая определяет количество полей, которые находятся под боем этих фигур.
На шахматной доске стоит ферзь и конь. Расположение каждой фигуры задано ее координатами в шахматных обозначениях
Ответ эксперта
var
f, k, s : string;
a : array [-1..10,-5..14] of byte;
b : array [1..2,1..8] of integer;
i, j, ife, jfe, ik, jk, ch : integer;
f1, f2 : text;
begin
assign(f1,’input.txt’); reset(f1);
assign(f2,’output.txt’); rewrite(f2);
s:=’abcdefgh’;
b[1,1]:= 1; b[2,1]:= 2;
b[1,2]:= 1; b[2,2]:=-2;
b[1,3]:= 2; b[2,3]:= 1;
b[1,4]:= 2; b[2,4]:=-1;
b[1,5]:=-2; b[2,5]:= 1;
b[1,6]:=-2; b[2,6]:=-1;
b[1,7]:=-1; b[2,7]:= 2;
b[1,8]:=-1; b[2,8]:=-2;
readln(f1,f); readln(f1,k);
jfe:=pos(f[1],s); ife:=ord(f[2])-48;
jk:=pos(k[1],s); ik:=ord(k[2])-48;
for i:=1 to 8 do
for j:=1 to 8 do a[i,j]:=0;
for i:=1 to 8 do
for j:=1 to 8 do
begin
if (i=ife) then a[i,j]:=1;
if (j=jfe) then a[i,j]:=1;
if ( i-j=ife-jfe ) then a[i,j]:=1;
if ( i+j=ife+jfe ) then a[i,j]:=1;
end;
for i:=1 to 8 do
a[ik+b[1,i], jk+b[2,i]]:=1;
a[ife,jfe]:=0; a[ik,jk]:=0;
if ife=ik then
if jfe
if jfe=jk then
if ife
if ife-jfe=ik-jk then
if ife
if ife+jfe=ik+jk then
if ife
ch:=0;
for i:=1 to 8 do
for j:=1 to 8 do ch:=ch+a[i,j];
{Печать поля для проверки
for i:=8 downto 1 do
begin
write(i,’ ‘);
for j:=1 to 8 do
if (i=ife) and (j=jfe) then write(‘Ф’) else
if (i=ik) and (j=jk) then write(‘К’) else
if a[i,j]=1 then write(‘+’) else write(‘ ‘);
writeln
end;
writeln(‘ abcdefgh’);
}
writeln(f2,ch); close(f2)
end.