• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача на перебор состояний

Мартулька

Ученик
Регистрация
25 Дек 2011
Сообщения
8
Реакции
0
Баллы
0
Задача на перебор состояний

Задача на перебор состояний.
"обезьяна и банан". Имеется комната, в которой в произвольном месте находиться ящик и также в произвольном месте на потолке висит банан. Обезьяна может ходить по комнате, двигать(или не двигать) ящик, залезать( или не залезать) на ящик ( если он рядом). Требуется найти решение - обезьяна на ящике, достала банан, и схватила его.

помогите прошу очень=(
 
М-да... Боюсь, что выйдет "а иначе...". Ни языка программирования, ни толком сформулированных условий... Здесь что, графика нужна? В чем, собственно, состоит решение? Как перемещается обезьяна - по неким клеткам в системе X-Y или еще как? Каков шаг? Перемещения задаются с клавиатуры? В общем, ничего не понятно.
Сочувствую.
 
Алгоритм аналогичный задачи "пятнашке" (все помнят ручную игру на передвижение цифр с одной пустой клеткой).
Состояний как я понял-три-Обезьяна стоит на полу-обезьяна двигает ящик-обезьяна стоит на ящике.
В координатах Х...Y...-висит банан.
В координатах Х...Y...-стоит ящик.
В координатах X...Y..-исходная позиция обезьяны.
Это получается условие. Координаты можно задать любые.
Алгоритм решения.
1.Методом прохождения клеток cовместить ящик с обезьяной.
if-else false-true проходить все клетки до нахождения ящика.
2.Встать на него Банан есть-нет??? если есть-двигать на клетку вперед.Снова встать на него. И так по всем клеткам до нахождения банана.
 
На языке паскаль надо.Графику не нужно рисовать=((((((Помогите((((((((
 
На языке паскаль надо.Графику не нужно рисовать=((((((Помогите((((((((
Ну вот, нарисовал, как понял. Мартышку гонять стрелками клавиатуры. Алгоритм: сначала обезьяна (M) находит ящик (B), потом начинает передвигаться вместе с ящиком, пока не найдет фрукт (F). Ситуация, чтобы мартышка не забиралась на ящик в каждой клетке, не предусмотрена: считается, что уж если притащила ящик, то и влезет на него.
"Досрочный" выход из программы - клавишей "Esc".
Код:
USES CRT;
CONST
 N=10;
VAR
 Xm,Ym,Xb,Yb,Xf,Yf,i,j:Byte;
 Ch:Char;
 S:String;
 b,b1,f:Boolean;

PROCEDURE Test_Box(Xt,Yt:Byte; var bt:boolean);
Begin
 bt:=false;
 If (Xt=Xb) and (Yt=Yb) then
  begin
   bt:=true;
   gotoXY(1,N*2+2);
   Write('Monkey found the box!');
   gotoXY(Xt,Yt);
   S:='MB';
  end;
End;

PROCEDURE Test_Fruit(Xt,Yt:Byte; var bf:boolean);
Begin
 bf:=false;
 If (Xt=Xf) and (Yt=Yf) then
  begin
   bf:=true;
   gotoXY(1,N*2+3);
   Writeln('Monkey got its fruit!');
   Write('Press "Enter" to exit');
   gotoXY(Xt,Yt);
   S:='MBF';
  end;
End;

BEGIN
 Randomize;
 ClrScr;
 For i:=1 to N+1 do
  begin
   For j:=1 to N do Write('|---');
   Writeln('|');
   If i<=N then
    begin
     For j:=1 to N do Write('|   ');
     Writeln('|');
    end;
  end;
 Xb:=Random(N)*4+2;
 Yb:=Random(N)*2+2;
 Repeat
  Xf:=Random(N)*4+2;
  Yf:=Random(N)*2+2;
 Until Not((Xf=Xb) and (Yf=Yb));
 Repeat
  Xm:=Random(N)*4+2;
  Ym:=Random(N)*2+2;
 Until Not((Xm=Xb) and (Ym=Yb)) and Not((Xm=Xf) and (Ym=Yf));
 GotoXY(Xm,Ym);
 Write('M');
 b:=false;
 f:=false;
 S:='M';
 Repeat
  Ch:=ReadKey;
  If (Ch=#72) and (Ym>2) then
   begin
    GotoXY(Xm,Ym);
    Write('   ');
    Ym:=Ym-2;
    GotoXY(Xm,Ym);
    If not(b) then
     begin
      Test_Box(Xm,Ym,b1);
      If b1 then b:=true;
     end;
    If b then
     begin
      Test_Fruit(Xm,Ym,b1);
      If b1 then f:=true;
     end;
    Write(S);
   end;
  If (Ch=#75) and (Xm>2) then
   begin
    GotoXY(Xm,Ym);
    Write('   ');
    Xm:=Xm-4;
    GotoXY(Xm,Ym);
    If not(b) then
     begin
      Test_Box(Xm,Ym,b1);
      If b1 then b:=true;
     end;
    If b then
     begin
      Test_Fruit(Xm,Ym,b1);
      If b1 then f:=true;
     end;
    Write(S);
   end;
  If (Ch=#77) and (Xm<4*N-2) then
   begin
    GotoXY(Xm,Ym);
    Write('   ');
    Xm:=Xm+4;
    GotoXY(Xm,Ym);
    If not(b) then
     begin
      Test_Box(Xm,Ym,b1);
      If b1 then b:=true;
     end;
    If b then
     begin
      Test_Fruit(Xm,Ym,b1);
      If b1 then f:=true;
     end;
    Write(S);
   end;
  If (Ch=#80) and (Ym<2*N) then
   begin
    GotoXY(Xm,Ym);
    Write('   ');
    Ym:=Ym+2;
    GotoXY(Xm,Ym);
    If not(b) then
     begin
      Test_Box(Xm,Ym,b1);
      If b1 then b:=true;
     end;
    If b then
     begin
      Test_Fruit(Xm,Ym,b1);
      If b1 then f:=true;
     end;
    Write(S);
   end;
  If Ch=#27 then Halt(0);
 Until f;
 Readln;
END.
 
Спасибо огромное=)Вы мне жизнь можно сказать спасли)
 
Назад
Сверху