\b;Ćwiczenie Pokieruj zdalnie robotem podległym bez używania \l;stacji przekaźnikowej informacji\u object\exchange;. Robot powinien przejść przez 6 niebieskich plusów. Dwoma głównymi postaciami tego ćwiczenia są¦: 1) \l;Transporter na kołach\u object\botgr; bez ogniwa elektrycznego, wobec czego unieruchomiony. Jest to robot nadrzędny, który powinien zostać zaprogramowany aby mógł przesyłać rozkazy do podległego mu robota. 2) Podległy \l;robot treningowy\u object\bottr;, który jest już zaprogramowany i tylko czeka na rozkazy od robota nadrzędnego. Rozkazy powinny być przechowywane, tak aby robot nadrzędny mógł wysłać wiele rozkazów bez czekania na przetworzenie każdego z nich. Do tego celu należy użyć \l;tablicy\u cbot\array;. \b;Robot podległy Najpierw musimy zrozumieć jak działa program robota podległego. \l;Klasa\u cbot\class; \c;order\n; zawiera dwa elementy: \c;m_type\n; jest rozkazem do wykonania (move lub turn), a \c;m_param\n; jest odległością do pokonania lub kątem obrotu¦: \c;\s;\l;public\u cbot\public; \l;class\u cbot\class; order \s;{ \s; \l;int\u cbot\int; m_type; \s; \l;float\u cbot\float; m_param; \s;} \n; Druga \l;klasa\u cbot\class; \c;exchange\n; zawiera mechanizm przekazywania rozkazów. Deklarujemy jako \c;\l;static\u cbot\static;\n; element klasy \c;m_fifo\n;, który będzie zawierał listę rozkazów do wykonania. Słowo \c;static\n; zapewnia, że element \c;m_fifo\n; jest współużytkowany przez wszystkie instancje \l;klasy\u cbot\class; exchange. \c;\s;{ \s; \l;static\u cbot\static; \l;private\u cbot\private; order m_fifo[] = null; \n; Metoda \c;put\n; będzie używana przez robota nadrzędnego do przesyłania rozkazów. Rozkaz będzie dodawany na końcu tablicy \c;m_fifo\n;: \c;\s; \l;synchronized\u cbot\synchro; void put(order a) \s; { \s; m_fifo[sizeof(m_fifo)] = a; \s; } \n; Kolejna metoda \c;get\n; będzie używana przez robota podległego do otrzymywania rozkazów. Metoda ta jako wynik zwraca rozkaz do wykonania. Jeśli lista jest pusta, zostanie zwrócona wartość \c;null\n; i robot powinien czekać na więcej rozkazów. W przeciwnym przypadku powinien zostać zwrócony pierwszy rozkaz na liście, a pozostałe muszą zostać "przesunięte". Ponieważ tablica nie może być "skrócona", używamy pomocniczej tablicy \c;copy\n;¦: \c;\s; \l;synchronized\u cbot\synchro; order get() \s; { \s; if ( sizeof(m_fifo) == 0 ) return null; \s; \s; order a = m_fifo[0]; \s; order copy[] = null; \s; for ( int i=1 ; i