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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2011, 20:10   #1
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию Вывод массива

Программа для обхода конем шахматной доски.

Код:
program Horse;


const
  Dim = 5;
  PathLen = Dim * Dim;

type
  TField = Array[1..Dim, 1..Dim] of integer;
  tTraceXY = array[1..PathLen, 1..2] of integer;



function TryMove(i, j: integer; var Field: tField; var TraceXY: tTraceXY; n: integer): Boolean;
begin
  if n > PathLen then TryMove := true { путь найден }
  else
  begin
    TryMove := false;
    if (i >= 1) AND (i <= Dim) AND (j >= 1) AND (j <= Dim) AND (Field[i, j] = 0) then
    begin
      Field[i, j] := n;
      TraceXY[n, 1] := i; TraceXY[n, 2] := j;
      n := n + 1;
      if TryMove(i + 1, j + 2, Field, TraceXY, n) = true then TryMove := true
      else if TryMove(i + 1, j - 2, Field, TraceXY, n) = true then TryMove := true
      else if TryMove(i - 1, j + 2, Field, TraceXY, n) = true then TryMove := true
      else if TryMove(i - 1, j - 2, Field, TraceXY, n) = true then TryMove := true
      else if TryMove(i + 2, j + 1, Field, TraceXY, n) = true then TryMove := true
      else if TryMove(i + 2, j - 1, Field, TraceXY, n) = true then TryMove := true
      else if TryMove(i - 2, j + 1, Field, TraceXY, n) = true then TryMove := true
      else if TryMove(i - 2, j - 1, Field, TraceXY, n) = true then TryMove := true;
      Field[i, j] := 0;
      n := n - 1;
    end;
  end;
end;


var
  Field, FldOut: TField; 
  TraceXY: tTraceXY;
  n: integer; { текущая длина пути }
  x, y: integer;

begin
  for x := 1 to Dim do
    for y := 1 to Dim do
      Field[x, y] := 0;
  WriteLn(' Шахматное поле ', Dim, 'x', Dim);
  WriteLn('Введите координаты начального положения коня');
  Write('X='); ReadLn(x);
  Write('Y='); ReadLn(y);
  if (x < 1) OR (x > Dim) OR (y < 1) OR (y > Dim) then
    WriteLn('Неверный ввод.')
  else
  begin
    n := 1;
    WriteLn('Поиск путей длины  ', PathLen, ' ...');
    case TryMove(x, y, Field, TraceXY, n) of
      true: 
        begin
          WriteLn('Найденый путь');
          for x := 1 to PathLen do
            FldOut[TraceXY[x, 1], TraceXY[x, 2]] := x;
          for y := 1 to Dim do
          begin
            for x := 1 to Dim do
              write(FldOut[x, y]:4);
            writeln;
          end;
        end;
      false:       
      writeln('Путь не найден');
    end;
  end;
  readln;
end.

В самом конце программы, если false то как вывести массив последовательности ходов? и где невозможно походить заполнить его нулями.
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 26.12.2011, 20:27   #2
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Люди добрые....спасайте...
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...

Последний раз редактировалось McFrey; 26.12.2011 в 20:33.
McFrey вне форума Ответить с цитированием
Старый 26.12.2011, 20:50   #3
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

неужели никто не знает как это осуществить?(
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод массива saix Общие вопросы C/C++ 3 26.03.2011 23:13
вывод массива DrSMERTb C++ Builder 6 23.02.2011 18:07
Вывод массива с конца gufon PHP 1 24.12.2010 16:30
вывод элементов из массива kirosin PHP 3 15.05.2010 13:00