Написать программу, которая определяет количество полей, которые находятся под боем этих фигур. На шахматной доске стоит ферзь и конь.

Вопрос посетителя

Написать программу, которая определяет количество полей, которые находятся под боем этих фигур.
На шахматной доске стоит ферзь и конь. Расположение каждой фигуры задано ее координатами в шахматных обозначениях

Ответ эксперта

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               else for j:=1 to jk-1 do a[ife,j]:=0;
  if jfe=jk then
    if ife               else for i:=1 to ik-1 do a[i,jfe]:=0;
  if ife-jfe=ik-jk then
    if ife               else for i:=1 to ik-1 do a[i,jk+i-ik]:=0;
  if ife+jfe=ik+jk then
    if ife               else for i:=1 to ik-1 do a[i,jk-i+ik]:=0;
  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.

image_pdfСкачать ответimage_printРаспечатать решение

Добавить комментарий

Похожие вопросы от пользователей