Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Столкновение двух поездов


Автор: AndreySS 26.2.2010, 17:13
Есть железная дорога она бесконечна. На ней есть 2 поезда, между ними стоит флаг "солнце". Поезд ничего не знает о другом и наоборот.Каждый поезд запускается в отдельном потоке.

Есть такие операции:

1)Метка
2)goto
3) if("солнце") goto
4)ехать налево
5)ехать направо
6)стоп

Надо написать функцию из вышеперечисленных операций испол-я кот. поезда б столкнулись.Помогите!!!!! smile   

Автор: Akina 26.2.2010, 17:25
И это все операции? мало. 
Независимо от длины программы она получится циклической. А если за время выполнения цикла флаг не встретится, то каждый следующий цикл будет повторять предыдущий либо в том диапазоне, либо с постоянным смещением, причём в одну и ту же сторону. Если флаг в другой стороне для обоих поездов - ничего не получится. 
Нужен либо какой-то счётчик, либо возможность самомодификации программы.

Автор: AndreySS 26.2.2010, 18:16
Флаг находится между поездами.Решение точно есть.
Если они поедут в одно и тоже направление кто-то из них встретит солнце, а как сказать чтоб другой  развернулся т.к. солнце уже другой достиг и ехал в другом направлении не знаю!

Автор: Akina 26.2.2010, 18:23
Ааа. Ну тогда:

Код

метка 1:
  вправо
  if флаг goto метка 2
  goto метка 1
метка 2:
  вправо
  goto метка 2


Тот, кто встретит флаг, догонит второго в задницу.

Автор: AndreySS 26.2.2010, 18:36
Ага правильно!!!!только последний goto идет на метку 1.Спасибо большое!!!!!

Автор: Akina 26.2.2010, 18:49
Цитата(AndreySS @  26.2.2010,  19:36 Найти цитируемый пост)
только последний goto идет на метку 1.

 smile Это ещё зачем?

Автор: AndreySS 26.2.2010, 18:59
С твоего решения один другого не догонит.
Смотри они начнут двигаться вправо.Кто то встретит солнце и перейдет на метку два и будет двигаться вправо , а другой останется в середине метки 1 и тоже будет двигаться вправо. И как тот его в задницу дагонит?
А если так:

 
Код

метка 1:
  вправо
  if флаг goto метка 2
  goto метка 1
метка 2:
  вправо
  goto метка 1


Тот кто встретит солнце на один шаг вправо будет делать больше чем другой.И рано или поздно он его догонит в врежиться.

Автор: Akina 26.2.2010, 19:11
Цитата(AndreySS @  26.2.2010,  19:59 Найти цитируемый пост)
Смотри они начнут двигаться вправо.Кто то встретит солнце и перейдет на метку два и будет двигаться вправо , а другой останется в середине метки 1 и тоже будет двигаться вправо. И как тот его в задницу дагонит?

А подумать? до того, как он встретит флаг, он делает один шаг за три такта, а после - за два, т.е. ускоряется.
Хочется сделать это более явным? сделай так:
Код

метка 1:
  вправо
  влево
  вправо
  влево
  вправо
  влево
  вправо
  влево
  вправо
  if флаг goto метка 2
  goto метка 1
метка 2:
  вправо
  вправо
  вправо
  вправо
  вправо
  вправо
  вправо
  вправо
  goto метка 2

Автор: AndreySS 26.2.2010, 19:15
Понятно smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)