uses GraphABC; var i,j, //счетчики циклов xo,yo, //начальные координаты доски dx,dy, //ширина и высота клетки поля xk,yk, //координаты коня xf,yf //координаты ферзя :integer; var answer:string; const x0=2; //начало координат для доски y0=2; a=40; //размеры клетки поля b=40; d=2; //бордюр между ячейками procedure field;//Процедура строит на экране шахматное поле begin for i:=1 to 8 do begin for j:=1 to 8 do begin //Строим последовательно клетки поля if((i mod 2)<>(j mod 2))then SetBrushColor(clLtGray) else SetBrushColor(clWhite); rectangle(xo+i*(a+d),yo+j*(b+d), xo+i*(a+d)+dx,yo+j*(b+d)+dy); //И подписываем индексы каждой клетки TextOut(xo+i*(a+d)+2,yo+j*(b+d)+1, IntToStr(j*10+i)); end; end; end; procedure horse;//Процедура строит коня begin xk:=random(8)+1;//Получаем координаты коня yk:=random(8)+1; //Подписываем координаты коня для последующей визуальной проверки //совпадения координат фигуры с координатами клетки поля TextOut(xo+xk*(a+d)+1,yo+yk*(b+d)+1, IntToStr(yk*10+xk)); //Строим черного коня SetBrushColor(clBlack); ellipse(xo+xk*(a+d)+round(0.47*a),yo+yk*(b+d)+round(0.2*b), xo+xk*(a+d)+round(0.85*a),yo+yk*(b+d)+round(0.4*b)); //Голова коня ellipse(xo+xk*(a+d)+round(0.45*a),yo+yk*(b+d)+round(0.15*b), xo+xk*(a+d)+round(0.68*a),yo+yk*(b+d)+round(0.8*b)); //Туловище rectangle(xo+xk*(a+d)+round(0.33*a),yo+yk*(b+d)+round(0.7*b), xo+xk*(a+d)+round(0.8*a),yo+yk*(b+d)+round(0.85*b));//Основание коня end;//horse procedure queen;//Процедура строит ферзя begin xf:=random(8)+1;//Получаем координаты ферзя yf:=random(8)+1; while((xk=xf)and(yk=yf))do//если фигуры попадают begin //на одну клетку xf:=random(8)+1; //берем новые координаты ферзя yf:=random(8)+1; end; //Строим ферзя приблизительно кремового цвета line(xo+xf*(a+d)+round(0.35*a),yo+yf*(b+d)+round(0.82*b), xo+xf*(a+d)+round(0.3*a),yo+yf*(b+d)+round(0.3*b)); line(xo+xf*(a+d)+round(0.3*a),yo+yf*(b+d)+round(0.3*b), xo+xf*(a+d)+round(0.4*a),yo+yf*(b+d)+round(0.5*b)); line(xo+xf*(a+d)+round(0.4*a),yo+yf*(b+d)+round(0.5*b), xo+xf*(a+d)+round(0.46*a),yo+yf*(b+d)+round(0.2*b)); line(xo+xf*(a+d)+round(0.46*a),yo+yf*(b+d)+round(0.2*b), xo+xf*(a+d)+round(0.54*a),yo+yf*(b+d)+round(0.47*b)); line(xo+xf*(a+d)+round(0.54*a),yo+yf*(b+d)+round(0.47*b), xo+xf*(a+d)+round(0.62*a),yo+yf*(b+d)+round(0.2*b)); line(xo+xf*(a+d)+round(0.62*a),yo+yf*(b+d)+round(0.2*b), xo+xf*(a+d)+round(0.68*a),yo+yf*(b+d)+round(0.5*b)); line(xo+xf*(a+d)+round(0.68*a),yo+yf*(b+d)+round(0.5*b), xo+xf*(a+d)+round(0.78*a),yo+yf*(b+d)+round(0.3*b)); line(xo+xf*(a+d)+round(0.78*a),yo+yf*(b+d)+round(0.3*b), xo+xf*(a+d)+round(0.73*a),yo+yf*(b+d)+round(0.82*b)); line(xo+xf*(a+d)+round(0.73*a),yo+yf*(b+d)+round(0.82*b), xo+xf*(a+d)+round(0.6*a),yo+yf*(b+d)+round(0.87*b)); line(xo+xf*(a+d)+round(0.6*a),yo+yf*(b+d)+round(0.87*b), xo+xf*(a+d)+round(0.45*a),yo+yf*(b+d)+round(0.87*b)); line(xo+xf*(a+d)+round(0.45*a),yo+yf*(b+d)+round(0.87*b), xo+xf*(a+d)+round(0.35*a),yo+yf*(b+d)+round(0.82*b)); FloodFill(xo+xf*(a+d)+round(0.4*a),yo+yf*(b+d)+round(0.8*b),rgb(246,250,200)); SetBrushColor(rgb(246,250,200)); circle(xo+xf*(a+d)+round(0.3*a),yo+yf*(b+d)+round(0.3*b),round(0.05*b)); circle(xo+xf*(a+d)+round(0.46*a),yo+yf*(b+d)+round(0.2*b),round(0.05*b)); circle(xo+xf*(a+d)+round(0.62*a),yo+yf*(b+d)+round(0.2*b),round(0.05*b)); circle(xo+xf*(a+d)+round(0.79*a),yo+yf*(b+d)+round(0.3*b),round(0.05*b)); end;//queen Begin//Начало самой программы randomize; xo:=x0; yo:=y0; dx:=a; dy:=b; field; horse; queen; //Выше строилась доска с фигурами для наглядности //Теперь сама задача: // Координаты двух полей шахматной доски заданы в виде //двух пар чисел x1 , y1 и x2 , y2. На первом поле стоит ферзь, //на втором - конь. //Определить, бьет ферзь коня, конь - ферзя, или фигуры не угрожают друг другу. //*************** Решение задачи ****************** if ((abs(xf-xk)=2)and (abs(yf-yk)=1))or ((abs(xf-xk)=1)and (abs(yf-yk)=2)) then answer:='Конь бьет ферзя.' else if (xf=xk)or (yf=yk)or ((xf+yf)=(xk+yk))or ((yf-yk)=(xf-xk)) then answer:='Ферзь бьет коня.' else answer:='Фигуры не угрожают друг другу.'; SetBrushColor(clWhite); SetFontSize(18); TextOut(64,5,answer); //*************************************************** End.