\b;Упражнение
Достигните финишной площадки (25 м перед вами) как можно быстрее, используя инструкцию \c;motor( , )\n;. В конце движения вы должны будете постепенно снизить свою скорость, или бот подорвется на \l;минах\u object\mine;.

Вы можете ничего больше не писать кроме \c;\l;move\u cbot\move;(25);\n;, это должно сработать просто идеально. Тем не менее, это упражнение преследует цель изучить использование инструкции \c;\l;motor\u cbot\motor;\n;.

Эта инструкция запрашивает два значения:
1) Скорость левостороннего мотора.
2) Скорость правостороннего мотора.

\s;\c;	motor( left, right );
\n;
Значения должны быть между -1 и 1:
-1 = полная тяга назад
 0 = стоп
 1 = полная тяга вперед

Например, \c;motor(0.5, 0.5);\n; будет двигать машину вперед на среднем ходу, пока она не получит дальнейших инструкций.

С помощью инструкции \c;motor(0.5, 0.6);\n;, можно заставить бота двигаться вперед на среднем ходу, одновременно медленно поворачиваясь влево: правосторонний мотор движется немного быстрее (\c;0.6\n;), чем левосторонний мотор (\c;0.5\n;).

\b;Обший принцип
Чтобы переместиться вперед точно на 25 метров и остановиться, вы должны двигаться первые 23 метра на полной скорости, а после этого снизить скорость на последнем отрезке длиной два метра.
\l;Переменная\u cbot\var; \l;position\u cbot\object; в любой момент сообщает вам о текущей позиции бота, а инструкция \c;\l;distance\u cbot\dist;( , );\n; выдает расстояние между двумя точками. Лучший способ узнать ваше текущее положение заключается в сохранении текущей позиции перед тем, как задать \l;переменную\u cbot\var;. Например, переменную, которая называется \c;start\n;. После этого вы сможете высчитать расстояние между начальной позицией и вашей текущей позицией: \c;distance(позиция, старт)\n;.

\b;Программа
1) задание переменных
\s;\c;	point start;
\s;	float len;
\n;
2) сохранение стартовой позиции
\s;\c;	start = position;
\n;
3) start full throttle :
\s;\c;	motor(1, 1);
\n;
4) Бесконечный цикл \c;\l;while\u cbot\while;\n;:
\s;\c;	while ( true )
\s;	{
\s;		len = distance(позиция, старт);
\s;		if ( len > 25-2 )
\s;		{
\s;			motor( меньше, чем раньше ! );
\s;		}
\s;	}
\n;
Пока расстояние между стартовой и текущей позициями меньше 23 метров, инструкция в скобках после \c;\l;if\u cbot\if;\n; выполняться не будет, поэтом моторы будут продолжать на максимальной мощности, как им и было приказано инструкцией \c;\l;motor\u cbot\motor;(1,1);\n;.

Чтобы постепенно снизить скорость, скорость моторов должна быть пропорциональной оставшемуся расстоянию:
o  \c;2.0\n; метра осталось -> скорость = \c;1.00\n; (максимум)
o  \c;1.5\n; метра осталось -> скорость = \c;0.75\n;
o  \c;1.0\n; метр остался  -> скорость = \c;0.50\n;
o  \c;0.5\n; метра осталось  -> скорость = \c;0.25\n;
o  \c;0.0\n; метров осталось  -> скорость = \c;0.00\n; (стоп)

\image tdragst1 12 6;
Вы можете использовать следующее \l;выражение\u cbot\expr; \c;(25-len)/2\n; чтобы высчитать значение для инструкции скорости, которая должна быть дана моторам.

Теперь вы должны сложить все это вместе и проверить программу.

\b;Комментарий
Вы можете использовать значения больше 1 для инструкции \c;\l;motor\u cbot\motor;();\n;, но от этого бот быстрее двигаться не будет.

\t;См. также
\l;Программирование\u cbot;, \l;типы\u cbot\type; и \l;категории\u cbot\category;.
