Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2012, 22:04   #1
kristy08
Новичок
Джуниор
 
Регистрация: 13.01.2012
Сообщений: 1
По умолчанию Поиск фигур, которые сможет срубить ферзь

Здравствуйте,
Прошу помощи с решением задачи:

Есть шахматное поле, записанное в файле. На поле расставлены фигуры: сам ферзь (F); те, которые он может срубить (Е); и те, которые нет (R).
Нужно вывести координаты тех фигур, которые могут быть срублены.

Само поле:
* * R * E * * *
E * * * * * R *
* * * * R * * *
* * R * * * * *
R * * * * * E *
* * E * * * * *
* * * * * * R *
* E * * R E * *

Вот вариант моего кода:
Код:
const
      fi=5;
      fj=5;
 
type pole = array [1..8,1..8] of string; 
 
var f:text;
    i,j,x:integer;
    Board: pole;
    s:string;

begin
assign(f,'init.txt');


  reset(f);
  for i:=1 to 8 do
  begin
  while not eof(f) do begin
    while not eoln(f) do begin
      read(f,s);
      
      for x:=1 to length(s) do begin
      
      for j:=1 to 8 do
      Board[i,j]:=s[x];
      
      end;
      end;
    readln(f);
   end;
   end;



for i:=1 to 8 do
 for j:=1 to 8 do
  begin
  if Board[i,j]='E' then
   if (i=fi) or (j=fj) or ((i-j)=(fi-fj)) or ((i+j)=(fi+fj)) then
  writeln('Queen hits an enemy on ',i,':',j);
  end;

close(f);
end.
Попытаюсь объяснить, что я тут хотела сделать:

fi,fj - координаты ферзя.

1) Считывание "доски" из файла и перенос ее в двумерный массив
Код:
  reset(f);
  for i:=1 to 8 do
  begin
  while not eof(f) do begin
    while not eoln(f) do begin
      read(f,s);
      
      for x:=1 to length(s) do begin
      
      for j:=1 to 8 do
      Board[i,j]:=s[x];
      
      end;
      end;
    readln(f);
   end;
   end;
Массив
Код:
type pole = array [1..8,1..8] of string;
2) Проверка путей ферзя на наличие фигур, которые можно срубить.
Код:
for i:=1 to 8 do
 for j:=1 to 8 do
  begin
  if Board[i,j]='E' then
   if (i=fi) or (j=fj) or ((i-j)=(fi-fj)) or ((i+j)=(fi+fj)) then
  writeln('Queen hits an enemy on ',i,':',j);
  end;
Уже ничего придумать не могу, чтобы она работала... надеюсь поможете.
kristy08 вне форума Ответить с цитированием
Старый 13.01.2012, 22:23   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
if abs(i-fi)=abs(j-fj) or (i=fi) or (j=fj)  then writeln('Queen hits an enemy on ',i,':',j);
(*
abs(i-fi)=abs(j-fj) проверка диагоналей
(i=fi)  горизонталей
(j=fj)  вертикалей 
*)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверить по позициям на шахматной доске бьёт ли ферзь заданное поле (Delphi) kaznachey1993 Помощь студентам 19 29.05.2014 20:58
Поиск фигур hamlook Microsoft Office Excel 12 22.04.2010 20:27
алгоритмы 2д фигур tarakannn Общие вопросы C/C++ 2 23.11.2008 11:23