Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 26.12.2011, 23:43   #1 (permalink)
Мартулька
Новичок
 
Регистрация: 25.12.2011
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Unhappy Задача на перебор состояний

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

помогите прошу очень=(
Мартулька вне форума   Ответить с цитированием

Старый 26.12.2011, 23:43
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Данные топики очень похожи по содержанию на вашу тему

Задача на C#
Задача по С + +
Задача по С++

Старый 27.12.2011, 09:44   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

М-да... Боюсь, что выйдет "а иначе...". Ни языка программирования, ни толком сформулированных условий... Здесь что, графика нужна? В чем, собственно, состоит решение? Как перемещается обезьяна - по неким клеткам в системе X-Y или еще как? Каков шаг? Перемещения задаются с клавиатуры? В общем, ничего не понятно.
Сочувствую.
Vladimir_S вне форума   Ответить с цитированием
Старый 27.12.2011, 10:02   #3 (permalink)
Reks
Banned
 
Регистрация: 12.12.2011
Сообщений: 361
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 658
По умолчанию

Алгоритм аналогичный задачи "пятнашке" (все помнят ручную игру на передвижение цифр с одной пустой клеткой).
Состояний как я понял-три-Обезьяна стоит на полу-обезьяна двигает ящик-обезьяна стоит на ящике.
В координатах Х...Y...-висит банан.
В координатах Х...Y...-стоит ящик.
В координатах X...Y..-исходная позиция обезьяны.
Это получается условие. Координаты можно задать любые.
Алгоритм решения.
1.Методом прохождения клеток cовместить ящик с обезьяной.
if-else false-true проходить все клетки до нахождения ящика.
2.Встать на него Банан есть-нет??? если есть-двигать на клетку вперед.Снова встать на него. И так по всем клеткам до нахождения банана.
Reks вне форума   Ответить с цитированием
Старый 27.12.2011, 11:43   #4 (permalink)
Мартулька
Новичок
 
Регистрация: 25.12.2011
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

На языке паскаль надо.Графику не нужно рисовать=((((((Помогите((((((((
Мартулька вне форума   Ответить с цитированием
Старый 27.12.2011, 15:28   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Мартулька Посмотреть сообщение
На языке паскаль надо.Графику не нужно рисовать=((((((Помогите((((((((
Ну вот, нарисовал, как понял. Мартышку гонять стрелками клавиатуры. Алгоритм: сначала обезьяна (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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 27.12.2011, 18:44   #6 (permalink)
Мартулька
Новичок
 
Регистрация: 25.12.2011
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Smile

Спасибо огромное=)Вы мне жизнь можно сказать спасли)
Мартулька вне форума   Ответить с цитированием
Старый 27.12.2011, 19:27   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Мартулька Посмотреть сообщение
Спасибо огромное=)Вы мне жизнь можно сказать спасли)
Ну что Вы - какие пустяки!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:45.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.