Шахматную доску будем представлять в виде квадратного символьного массива размера 8×8. Даны натуральные числа v1 и g1, указывающие номера вертикали (при счете слева направо) и горизонтали (при счете снизу вверх) для поля, на котором стоит белая шахматная фигура, и числа v2 и g2 – указывающие соответствующие координаты второй черной фигуры (1v≤1≤8, 1g≤1≤8, 1≤v2≤8, 1≤g2е≤8). Определить поля (отметить их символом «+»), на которые может пойти первая фигура, не попав под удар второй фигуры. Рассмотреть следующие варианты сочетаний первой и второй фигур:конь и слон — Pascal(Паскаль)

uses crt;
const n=8;
function HodK(a,b,f,g:integer):boolean;
begin
HodK:=((abs(a-f)=1)and(abs(b-g)=2))or((abs(a-f)=2)and(abs(b-g)=1))
      and((a<>f)or(b<>g)){все ходы коня}
end;
function HodB(a,b,f,g:integer):boolean;
begin
HodB:=(abs(a-f)=abs(b-g)) and((a<>f)or(b<>g)){все ходы слона}
end;
 
var d:array[1..n,1..n] of char;
    i,j,v1,g1,v2,g2:integer;
begin
clrscr;
textcolor(15);
repeat
writeln('Введите координаты белого коня от 1 до 8:');
readln(v1,g1);
until(v1 in [1..8])and(g1 in [1..8]);
repeat
writeln('Введите координаты черного слона от 1 до 8, отличные от координат коня:');
readln(v2,g2);
until(v2 in [1..8])and(g2 in [1..8])and((v1<>v2)or(g1<>g2));
for i:=1 to n do
for j:=1 to n do
if(n-i+1=g1)and(j=v1) then d[i,j]:='K'{поле где конь}
{поле где слон, если оно не бъется конем}
else if((n-i+1=g2)and(j=v2))and not HodK(v1,g1,v2,g2) then d[i,j]:='B'
{поле куда может пойти конь без боя}
else if HodK(v1,g1,j,n-i+1)and not HodB(v2,g2,j,n-i+1)and((j<>v2)or(n-i+1<>g2)) then d[i,j]:='+'
{поле где стоит слон под боем}
else if HodK(v1,g1,j,n-i+1)and((j=v2)and(n-i+1=g2)) then d[i,j]:='X'
{прочие клетки}
else d[i,j]:=#219;
{вывод массива}
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    if((i+j) mod 2=0)then{белые клетки}
      begin
       textcolor(15);
       write(d[i,j]);
      end
    else
     begin
      textcolor(6); {коричневые клетки}
      write(d[i,j]);
     end;
   end;
  writeln;
 end;
readln
end.

Leave a Comment

4 + 1 =