\b;Exercice Télécommandez un robot, sans utiliser une \l;borne d'information\u object\exchange;, pour qu'il passe par les 6 croix bleues. Les 2 acteurs principaux de cet exercice sont: 1) Un \l;robot déménageur\u object\botgr; sans pile, donc immobile. C'est lui l'émetteur que vous devez programmer. 2) Un \l;robot d'entraînement\u object\bottr; qui attend les ordres. Ce robot est déjà programmé. Il faudra mémoriser les ordres, afin que le robot émetteur puisse donner tous les ordres sans attendre. Pour cela, le plus simple est d'utiliser un \l;tableau\u cbot\array; d'ordres. \b;Le robot récepteur Pour commencer, il faut comprendre le programme du robot d'entraînement qui attend les ordres. Une \l;classe\u cbot\class; \c;order\n; contient deux variables: \c;global_type\n; détermine l'ordre à effectuer (avancer ou tourner) et \c;global_param\n; détermine la distance à avancer ou l'angle de rotation: \c;\s;\l;public\u cbot\public; \l;class\u cbot\class; order \s;{ \s; \l;int\u cbot\int; global_type; \s; \l;float\u cbot\float; global_param; \s;} \n; Une deuxième \l;classe\u cbot\class; \c;exchange\n; contient le mécanisme d'échange et de mémorisation des ordres. Il faut d'abord déclarer une variable \c;\l;static\u cbot\static;\n; appelée ici \c;global_fifo[]\n;. Cette variable contient une liste d'ordres à effectuer. Les accolades \c;[]\n; indiquent qu'il s'agit d'un \l;tableau\u cbot\array;. L'instruction \c;static\n; permet à tous les robots d'accéder à la même variable unique. \c;\s;\l;public\u cbot\public; \l;class\u cbot\class; exchange \s;{ \s; \l;static\u cbot\static; \l;private\u cbot\private; order global_fifo[] = null; \n; Une première méthode \c;put\n; sera utilisée par le robot émetteur pour donner un ordre. L'ordre est simplement ajouté à la fin du tableau: \c;\s; \l;synchronized\u cbot\synchro; void put(order a) \s; { \s; global_fifo[sizeof(global_fifo)] = a; \s; } \n; Une deuxième méthode \c;get\n; sera utilisée par le robot récepteur pour prendre connaissance d'un ordre à effectuer. Si la liste est vide, on retourne \c;null\n; et le robot devra attendre. Dans le cas contraire, il faut retourner le premier ordre de la liste, et décaler tout le contenu de la liste vers le haut. Pour cela, il est nécessaire d'utiliser une nouvelle liste intermédiaire \c;copy\n;, car une liste existante n'est jamais raccourcie: \c;\s; \l;synchronized\u cbot\synchro; order get() \s; { \s; if ( sizeof(global_fifo) == 0 ) return null; \s; \s; order a = global_fifo[0]; \s; order copy[] = null; \s; for ( int i=1 ; i