1 Контрольное зачетное задание (0, 0)(0, m-1) (n-1, 0)(n-1, m-1) Дано прямоугольное поле, расчерченное на клетки: n клеток в высоту и m клеток в ширину. Таким образом, каждая клетка уникальным образом определяется парой целых значений: 0 i n-1 и 0 j m-1 ====================== Поле представляет из себя двумерный массив (n x m), элементами которого являются строки длиной в 4 символа.
2 Контрольное зачетное задание (0, 0)(0, m-1) _R1_ (n-1, 0)(n-1, m-1) По клеткам поля движется робот. Робот ходит за один шаг на одну клетку вверх (север – «N»), вниз (юг – «S»), влево (запад – «W») или вправо (восток – «E»). По диагонали ходить нельзя. Направление каждого шага определяется случайным образом. Таким образом, текущее положение робота определяется парой целых значений («координатами»): 0 i n-1 и 0 j m-1, совпадающими с номером (адресом) клетки поля.
3 Контрольное зачетное задание (0, 0) _R1_ (0, m-1) _R1_ (n-1, 0) _R1_ (n-1, m-1) Поскольку направление каждого шага определяется случайным образом, робот может сделать попытку выйти за границы поля. Это считается неправильным шагом и робот в таком случае получает «штрафное очко» и возвращается в клетку, из которой он пытался выйти за границу поля.
4 Контрольное зачетное задание (0, 0)(0, m-1) (n-1, 0)(n-1, m-1) ЗАДАНИЕ: Составить алгоритм движения робота из начальной клетки (0,0) до конечной клетки (n-1,m-1). При достижении конечной клетки вывести общее количество сделанных роботом шагов и количество неправильных шагов («штрафных очков»).
5 Контрольное зачетное задание Для выполнения зачетного задания выдается вспомогательный материал со структурой программы. Жирным шрифтом выделены фрагменты, которые необходимо воспроизвести полностью как есть. Комментариями (нежирный шрифт) определены места для самостоятельной разработки и вставки необходимых операторов в текст программы. Необходимо строго следовать инструкциям, в точности воспроизводить в коде программы указанные в комментариях имена переменных. Сами комментарии набирать в программе не нужно.
6 Контрольное зачетное задание // Файл Robot2.java import /* присоединить библиотеку, в которой находятся математические операции и счетчик случайных чисел */ ; class Pole { /* Определить две целые переменные n и m, определяющие размер поля, к которым можно обращаться по имени класса Pole и static переменную pole - двумерную матрицу, элементами которой являются объекты типа String */ Pole(int x, int y) { // инициализировать n и m в конструкторе значением параметров x и y pole = new String [n][]; /* далее провести инициализацию матрицы pole пробелами, т.е. строками со значениями */ System.out.println ("Размер поля: " + n + " X " + m); } void inPole() { /*вставить операторы, заполняющие каждый элемент массива pole четырьмя символами «подчеркивание» _ */ }
7 Контрольное зачетное задание void prPole() { // Метод выводит на экран содержимое переменной pole в специальном формате. for (int i=0; i < n; i++) { System.out.println("\n"); for (int j=0; j < m; j++) { System.out.print("\t" + pole[i][j]); } System.out.println("\n"); } } // конец класса Pole class Robot { /* Определить целые переменные класса kX и kY – текущее положение робота; определить и инициализировать целую переменную ws, в которую будет заноситься число неправильных шагов робота */ Robot(int x, int y) { // инициализировать kX и kY параметрами конструктора и вывести на печать System.out.println("Робот в точке х = " + kX + ", y = " + kY); }
8 Контрольное зачетное задание void moveN() { /* метод, описывающий шаг робота наверх если робот пытается выйти за границу поля, вернуть его в ту же клетку, прибавить счетчик неправильных ходов и напечатать */ System.out.println("Выше нельзя!"); // напечатать текущее положение робота System.out.println("Робот в точке х = " + kX + ", y = " + kY); } void moveE() { /* метод, описывающий шаг робота направо если робот пытается выйти за границу поля, вернуть его в ту же клетку, прибавить счетчик неправильных ходов и напечатать */ System.out.println("Правее нельзя!"); // напечатать текущее положение робота System.out.println("Робот в точке х = " + kX + ", y = " + kY); }
9 Контрольное зачетное задание void moveW() { /* метод, описывающий шаг робота влево если робот пытается выйти за границу поля, вернуть его в ту же клетку, прибавить счетчик неправильных ходов и напечатать */ System.out.println("Левее нельзя!"); // напечатать текущее положение робота System.out.println("Робот в точке х = " + kX + ", y = " + kY); } void moveS() { /* метод, описывающий шаг робота вниз если робот пытается выйти за границу поля, вернуть его в ту же клетку, прибавить счетчик неправильных ходов и напечатать */ System.out.println("Ниже нельзя!"); // напечатать текущее положение робота System.out.println("Робот в точке х = " + kX + ", y = " + kY); } } // конец класса Robot
10 Контрольное зачетное задание class Robot2 { // Класс для запуска программы public static void main(String args[ ]) { /* определить и инициализировать нулем целую переменную ns1, в которую будет суммироваться общее число шагов робота; объявить и инициализировать значениями (10, 5) переменную p, как экземпляр класса Pole; объявить и инициализировать значениями (0,0) переменную r1, как экземпляр класса Robot */ Random rand = new Random(); p.inPole(); p.pole[0][0] = "_R1_"; p.prPole(); while ( /* написать условие, задающее положение робота, отличное от конечной точки поля (n-1, m-1) */ ) { /* написать пустой цикл с не менее проходов, имитирующий визуальную задержку вывода; сгенерировать случайным образом целую переменную i1 меньшую или равную 4 с помощью метода Math.abs(rand.nextInt()) или другим способом */
11 Контрольное зачетное задание // с помощью оператора switch – case имитировать шаги робота switch (i1) { case 1 : {System.out.println("шаг вверх..."); // сделать шаг наверх, прибавить общее число шагов break;} /* выполнить аналогичные действия, т.е. написать case-секции при шаге вправо (значение – 2), влево (значение – 3) и вниз (значение – 4) */ default : System.out.println("Стоим на месте"); } // конец switch p.inPole(); p.pole[r1.kX][r1.kY] = "_R1_"; p.prPole(); } // конец while // сделать вывод результатов: System.out.println("====================================="); System.out.println ("Размер поля: + /* продолжить вывод */); System.out.println ("Кратчайший путь : " + /* продолжить вывод */); System.out.println ("Робот дошел за " /* вставить нужную переменную */ + " шагов"); System.out.println ("Из них " + /*вставить нужную переменную */ + " неправильных шагов"); } // конец main } // конец класса Robot2
12 Контрольное зачетное задание Начало Создание объектов классов Pole и Robot, объявление и инициализация нулем счетчика шагов Инициализация поля, установка робота в (0,0), прорисовка позиции Текущее положение робота (kX,kY) не равно (n-1,m-1) Случайная генерация i1={1,2,3,4} Шаг наверх (N) kX--; kY=const; Проверка на выход; счетчик неправильных шагов Шаг вправо (E) kX=const; kY=++; Проверка на выход; счетчик неправильных шагов Шаг влево (W) kX=const; kY=--; Проверка на выход; счетчик неправильных шагов Шаг вниз (S) kX++; kY=const; Проверка на выход; счетчик неправильных шагов Изменение счетчика шагов; прорисовка позиции поля Печать результатов Конец + - i1=1 i1=2 i1=3 i1=4