Показать сообщение отдельно

  #7  
Старый 30.05.2008, 15:48
Ping.Win
Новичок
Регистрация: 12.08.2007
Сообщений: 3
Провел на форуме:
27221

Репутация: 0
По умолчанию

Препод озадачил задачкой про робота=( суть такова:

“Глупый” робот движется по клеткам прямоугольного поля n x m случайным образом. Начальное положение робота - клетка (0,0).
Необходимо написать алгоритм, в результате которого робот попадет в клетку (n-1, m-1)
Робот может двигаться за один шаг только на одну клетку вверх (север), влево (запад), вправо (восток) или вниз (юг) и не может выходить за границы поля.
Каждый следующий шаг робота определяется случайным образом с помощью генератора случайных чисел. Попытка выхода за границы поля считается неправильным шагом, и робот насильно возвращается в предыдущую неправильному шагу клетку поля.
Необходимо подсчитать общее количество шагов, сделанных роботом и количество неправильных шагов.
Ниже приведена структура программы. Жирным шрифтом выделены фрагменты, которые
необходимо воспроизвести полностью, как есть. Короткими комментариями (нежирный шрифт) определены места для самостоятельной вставки кода программы. Необходимо строго следовать инструкциям, воспроизводить в коде программы указанные в комментариях имена переменных. Сами комментарии воспроизводить не нужно.

Ниже сам текст программы, который нужно дополнить:

Цитата:
//= == == === ===
//Глупый робот» . Файл Robot2.java

import /* присоединить библиотеку, в которой находятся математические операции и счетчик
случайных чисел */

class Pole {
// Определить две целые переменные n и m, определяющие размер поля, к которым можно
//обращаться по имени класса Pole и static переменную Pole - двумерную матрицу, элементами
// которой являются объекты типа string

Pole (int x, int y) {
// инициализировать п и м в конструкторе значением параметров х и у
pole = new string [n][];
// далее провести инициализацию матрицы pole пробелами, те. строками со ~

System.out.println (“Размер поля:”+ n + “Х ” + m);
}
}
void inPole() {
/*вставить операторы, заполняющие каждый элемент массива pole четырьмя символами
«подчеркивание” _
*/

}
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”);
}

class Robot {
// Определить целые переменные kX и kY - текущее положение робота;
// определить и инициализировать целую переменную ws, в которую будет заноситься число
// неправильных шагов робота

Robot(int x, int у) {
// инициализировать kX и kY параметрами конструктора и вывести на печать
System.out.println (”Робот в точке х= “+ kX + “,у = “ + kY);
}

void moveN( ) {
// метод, описывающий шаг робота наверх
// если робот пытается выйти за границу поля, вернуть его в ту же клетку, прибавить счетчик неправильных ходов и напечатать

System.out.println (”Выше нельзя!”);
// напечатать текущее положение робота
System.out.println (”Робот в точке х = “+ kX + “,у =“+ kY);
}

void moveE( ) {
// метод, описывающий шаг робота направо
// если робот пытается выйти за границу поля, вернуть его в ту же клетку, прибавить счетчик
// неправильных ходов и напечатать
System.out.println (”правее нельзя!”);
// напечатать текущее положение робота
System.out.println (”Робот в точке х = “+ kX + “,у =“ + kY);
}

void moveW( ) {
// метод, описывающий шаг робота влево
// если робот пытается выйти за границу поля, вернуть его в ту же клетку, прибавить счетчик
//неправильных ходов и напечатать
System.out.println (”левее нельзя!”);
// напечатать текущее положение робота
System.out.println (”Робот в точке х = “+ kX + “,у =“ + kY);
}

void moveS( ) {
// метод, описывающий шаг робота вниз
// если робот пытается выйти за границу поля, вернуть его в ту же клетку, прибавить счетчик
//неправильных ходов и напечатать
System.out.println (”Ниже нельзя!”);
//напечатать текущее положение робота
System.out.println (”Робот в точке х = “+ kX + “, у =“ + kY);
}
class Robot2 {

// Класс для запуска программы

public static void main(string args[]) {

// определить и инициализировать нулем целую переменную ns1, в которую будет
// суммироваться общее число шагов робота
// объявить и инициализировать значениями (10, 5) переменную р, как экземпляр класса Pole
//объявить и инициализировать значениями (0,0) переменную r1 как экземпляр класса Robot

Random rand = new Rаndоm();

p.inPole();
p.pole[0][0] = “_R1_”;



p.prPole();

while (//1 написать условие, задающее положение робота, отличное от конечной точки поля (n-1, m-1))
{

// написать пустой цикл с не менее 1 000 000 000 проходов, имитирующий визуальную задержку
//вывода

//сгенерировать случайным образом целую переменную ii меньшую или равную 4 с помощью метода
// Math.abs(rand.nextlnt())

// с помощью оператора switch — case имитировать шаги робота
switсh (i1) {
case 1: {System.out.println (”шаг вверх…”);
// сделать шаг наверх, прибавить общее число шагов
break ;}
// выполнить аналогичные действия, т.е. написать case-секции при шаге вправо (значение — 2),
//влево (значение — 3) и вниз (значение — 4)

default: System.out.println (”стоим на месте”);
}

p.inPole ();
p.pole[r1.kX][r1.kY] = “_R1_”;
p.prPole();

}
// сделать вывод результатов:
System.out.println (“=====================================“);
System.out.println (“Размер поля: “+ /* продолжить вывод */);
System.out.println (“Кратчайший путь: “+ /* продолжить вывод */);
System.out.println (”Робот дошел за “/* вставить нужную переменную */ + “шагов”);
System.out.println (”Из них”+ /*вставить нужную переменную */ +“неправильных шагов”);
}
}
Таблица по которой он должен двигаться по вертикали 7 клеток по горизонтали 10, координаты-
Верхний левый клетка - (0, 0)
Верхний правый клетка - (0, m-1)
Нижний левый клетка - (n-1, 0)
Нижниый правый клетка - (n-1, m-1)


Буду очень благодарен за помощь, с меня плюс, большой=)
 
Ответить с цитированием