Даны две литеры - латинская буква (от a до h) и цифра (от 1 до восьми). Рассматривая их как координаты поля шахматной доски, на котором находится конь, нарисовать шахматную доску, пометив крестиками все поля, которые «бьет» этот конь, и ноликами все остальные.
шахматку нарисовал - вот код
Program zadacha1;
uses graph,crt;
var driver,mode,m,n:integer;
stroka:string[1];
const
l:array [0..7] of string[1] =('a','b','c','d','e','f','g','h');
begin
driver:=detect;
Initgraph(driver,mode,'c:/bp/bgi');
setcolor(15);
for n:=1 to 8 do
for m:=0 to 7 do
rectangle(n*50,m*50,n*50+50,M*50+50);
for n:=0 to 3 do
begin
for m:=0 to 3 do
begin
floodfill(100*n+75,100*m+25,15);
floodfill(100*n+125,100*m+75,15);
end;
end;
for n:=0 to 7 do
begin
str(n+1,stroka);
OutTextXY(25,n*50+22,stroka);
end;
for n:=0 to 7 do
OutTextXY(n*50+70,415,l[n]);
readln;
closegraph;
end.
Конь ходит буквой "Г".
Значит надо просто вычислить координаты клеток на которые может встать конь.
Всего есть максимум 8 вариантов, если он не у края доски.
Я так понимаю координаты коня вводит пользователь.
остаеться только вычислить его возможные ходы.
RaV в задании написано просто пометить крестиками все поля, которые «бьет» этот конь. Мне кажется надо просто вывести на экран шахматку с уже помеченными крестиками и ноликами.
А как ты считал?
Я понимаю что он может сделать только один ход, и он может встать на 8 разных клеток.
я просто брал коня и ходил им по полю буквой Г, или я не понял задания? там вроде написано пометить все поля которые бьет конь
Я думаю что так не правильно.А то так можно всю доску обойти.
Я немного причесал твою прогу, изменений вносить не стал (хотя руки чесались.. ).
Вставил код, который рисует кресты (мои вставки помечены строчками комментов со звездочками) - надеюсь, разберешься..
Program zadacha1;
uses
graph,crt;
var
driver,mode,m,n:integer;
stroka:string[1];
const
l:array [0..7] of string[1] =('a','b','c','d','e','f','g','h');
{**************************}
Kx:integer=5;
Ky:integer=4;
{**************************}
begin
driver:=detect;
Initgraph(driver,mode,'c:/bp/bgi');
setcolor(15);
SetFillStyle(1,15);
for n:=1 to 8 do
for m:=0 to 7 do rectangle(n*50,m*50,n*50+50,M*50+50);
for n:=0 to 3 do begin
for m:=0 to 3 do begin
floodfill(100*n+75,100*m+25,15);
floodfill(100*n+125,100*m+75,15);
end;
end;
for n:=0 to 7 do begin
str(n+1,stroka);
OutTextXY(25,n*50+22,stroka);
end;
for n:=0 to 7 do OutTextXY(n*50+70,415,l[n]);
{**************************}
SetColor(LightRed);
Ky:=8-Ky;
for n:=1 to 8 do
for m:=0 to 7 do
if (Abs(n-Kx)=2)and(Abs(m-Ky)=1)or(Abs(n-Kx)=1)and(Abs(m-Ky)=2) then begin
Line(n*50,m*50,(n+1)*50,(m+1)*50);
Line(n*50,(m+1)*50,(n+1)*50,m*50);
end;
{**************************}
readln;
closegraph;
end.
я так всю доску и обошел
то есть я так понимаю надо задать двумерный массив изначально заполненный нулями, каждому его элементу будет соответствовать поле шахматной доски. (1, 1) - A1, (2,2) -B2, (1,8) - A8. Проблема в том что я не знаю как привязать координаты к шахматной доске. Я не волшебник ,я только учусь
lapp спасибо, сейчас попробую нули ставить
а кружки через Ellipse рисовать?
lapp извини за мою тупость , но куда эту процедуру засунуть?
Вот сюда :
{**************************}
SetColor(LightRed);
Ky:=8-Ky;
for n:=1 to 8 do
for m:=0 to 7 do
if (Abs(n-Kx)=2)and(Abs(m-Ky)=1)or(Abs(n-Kx)=1)and(Abs(m-Ky)=2) then begin
Line(n*50,m*50,(n+1)*50,(m+1)*50);
Line(n*50,(m+1)*50,(n+1)*50,m*50);
end{<---- убери ';'}
else {<----вот сюда ,рисуем окружность}
{**************************}
Circle (X, Y: Integer; R: word)
если да - то она выдает ошибку на двоеточие после Y
X и Y - центр твоей клетки
2 Malice: спасибо, конечно +.
Circle (X, Y: Integer; R: word)
{**************************}
SetColor(LightRed);
Ky:=8-Ky;
for n:=1 to 8 do
for m:=0 to 7 do
if (Abs(n-Kx)=2)and(Abs(m-Ky)=1)or(Abs(n-Kx)=1)and(Abs(m-Ky)=2) then begin
Line(n*50,m*50,(n+1)*50,(m+1)*50);
Line(n*50,(m+1)*50,(n+1)*50,m*50);
end
else Circle(n*50+25,m*50+25,20);
{**************************}
я как раз примерно тоже самой уже сделал только R вычислял, поставил 50 и испугался - узоры какие то фрактальные вышли , самому смешно
Спасибо всем кто решил вместо меня это задание.