1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Шахматная задача, Фигуры не могут прыгать через друг друга
Задача: НА шахматной доске слон и ладья(белые). НАйти сколько на доске клеток, куда можно поставить черную пешку чтобы ее нельзя было срубить слоном или ладьей. Это я сделал.
Код
if (i+j=cs+bs) or (i-j=cs-bs) then mas[i,j]:=1; end; mas[cs,bs]:=2; for i:=1 to n do for j:=1 to n do begin if (i=cl) or (j=bl) then mas[i,j]:=1; end; mas[cl,bl]:=3; for i:=n downto 3 do for j:=1 to n do if mas[i,j]=0 then s:=s+1;
cl, cs - цифра ладьи и слона соответственно bl, bs - буква ладьи и слона соответственно
В этом решении я не учел, что фигуры не могут прыгать друг через друга. Как это сделать?
To: Hindelberg Я понимаю ,это выглядит ужасно, но я бы сразу делал проверку бьющихся полей с учетом того, закрывается ли одна фигура другой:
const n = 8; var arr: array[1 .. n, 1 .. n] of integer;
var i, j: integer; const cs = 2; bs = 2; bl = 2; cl = 5;
begin for i := 1 to n do for j := 1 to n do arr[i, j] := 0;
arr[cl, bl] := 0; arr[cs, bs] := 2;
j := pred(bl); while (j > 1) and (arr[cl, j] < 2) do dec(j); while (j < 9) and (arr[cl, j] < 2) do begin arr[cl, j] := 1; inc(j); end;
i := pred(cl); while (i > 0) and (arr[i, bl] < 2) do dec(i); inc(i); while (i < 9) and (arr[i, bl] < 2) do begin arr[i, bl] := 1; inc(i); end;
arr[cl, bl] := 3; arr[cs, bs] := 0;
i := bs; while (i > 0) and (cs - (bs-i) > 0) and (arr[cs - (bs - i), i] < 2) do dec(i); inc(i); while (i < 9) and (cs - (bs-i) < 9) and (arr[cs - (bs - i), i] < 2) do begin arr[cs - (bs - i), i] := 1; inc(i); end;
i := bs; while (i > 0) and (cs + (bs-i) in [1 .. 8]) and (arr[cs + (bs - i), i] < 2) do dec(i); inc(i); while (i < 9) and (cs + (bs-i) < 9) and (arr[cs + (bs - i), i] < 2) do begin arr[cs + (bs - i), i] := 1; inc(i); end;
arr[cl, bl] := 3; arr[cs, bs] := 2;
for i := 1 to n do begin for j := 1 to n do write(arr[i, j]:2); writeln end; writeln;