При использовании одновременного движение в начале и середине проекта возникает проблема синхронизации финиша. Она состоит в следующем: две параллельные команды заканчиваются не одновременно; а третья команды должна начаться, когда закончатся обе первые.
Можно предложить три способа синхронизации.
Способ-1 заключается в том, что более короткий процесс выполняется с помощью ЗАПУСТИ, а более длинный – обычной командой. При использовании этого способа надо уметь рассчитывать время каждого процесса по значениям параметров универсальных процедур. В следующем примере движение длится 20 (второй параметр процедуры), а мультик – 60 (жди-3 * 2-формы-в-периоде * 10-повторений). Поэтому «запускаем» мы более короткое движение:
Программа | Пример | Выполнение программы | |
запусти [Команда1] | для "машина запусти [движение 5 20] | ||
Команда2 | для "человек мульт_ск [1 2] 10 15 3 | ||
Команда3 | для "человек сч |
Способ-2 состоит в использовании специальной формулы, состоящей из двух инструкций ЛогоМиров (к которым пока лучше относится именно как к одной формуле):
|
|
жди_пока [готово? [<процесс>]] например:
жди_пока [готово? [движение 2 80]]
Эта формула приостанавливает выполнение программы до тех пор, пока не закончится процесс, заданный командой ЗАПУСТИ. В качестве аргумента <процесс> должно быть написана ровно та инструкция, которая была написана в качестве аргумента команды ЗАПУСТИ. Преимущество этого способа состоит в том, что можно не задуматься о том, какая команда является более короткой (во втором примере команда Движение длится уже 80, а мультик – по-прежнему 60).
Текст программы (пример) | Выполнение программы | ||
для "машина запусти [движение 2 80] | |||
для "человек мульт_ск [1 2] 10 15 3 | |||
жди_пока [готово? [движение 2 80]] | |||
для "человек сч |
Способ-3 заключается в использовании команды ЖДИ. Он актуален в тех случаях, когда процессы должны закончиться именно одновременно. Зная продолжительность процессов по времени, можно рассчитать, на какое время надо задержать начало более короткого процесса: Вернемся к первому примеру, когда движение длится 20, а мультик – 60. Разница во времени – 40.
Текст программы | Выполнение программы | ||
для "человек запусти [мульт_ск [1 2] 10 15 3] | |||
жди 40 | |||
для "машина движение 5 20 | |||
для "человек сч |
ПК ---
Задание-2 (а,б,в). Доработка проекта Такси (работайте прямо в «старой» процедуре, не делайте копию).
В начале проекта первые два этапа, которые сделаны последовательно, надо сделать одновременно:
|
|
– человек подходит к такси,
– такси подъезжает к человеку.
Использовать любой способ синхронизации (или поочередно все три). Имейте в виду, что расчеты времени надо выполнять с учетом Ваших значений аргументов и с учетом того, что в Вашем мультике – 4 шага в периоде.
На оценку «5» надо сделать третий способ.
--- ПК