массивы. Задача запомнить положение фигур на шахматной доске. 1 2 3 4 5
Скачать 1.25 Mb.
|
Тема 28. Многомерные массивы (матрицы) Двумерные массивы Задача: запомнить положение фигур на шахматной доске. 1 2 3 4 5 6
c6 A[5][2] Двумерные массивы
A[3][1] Матрицы Матрица – это прямоугольная таблица однотипных элементов. Матрица – это массив, в котором каждый элемент имеет два индекса (номер строки и номер столбца).
A
строка 1 столбец 2 ячейка A[2][3] Матрицы Объявление: int A[][], N = 3, M = 4; A = new int[N][M]; Ввод с клавиатуры: for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) { printf("A[%d][%d]=",i,j); A[i][j] = in.nextInt(); } Если переставить циклы? ? A[0][0]= 25 A[0][1]= 14 A[0][2]= 14 ... A[2][3]= 54 i j for ( j = 0; j < M; j ++ ) for ( i = 0; i < N; i ++ ) { Элементы массива заполнены нулевыми значениями Матрицы Заполнение случайными числами for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) A[i][j] = random(25)- 10; Какой интервал? ? цикл по строкам цикл по столбцам Вывод на экран for ( i = 0; i < N; i ++ ) { for ( j = 0; j < M; j ++ ) System.out.printf("%5d", A[i][j]); System.out.println(" "); } перейти на новую строку for ( j = 0; j < M; j ++ ) System.out.printf("%5d",A[i][j]); вывод строки
Если переставить циклы? ? в той же строке Обработка всех элементов матрицы Задача: заполнить матрицу из 3 строк и 4 столбцов случайными числами и вывести ее на экран. Найти сумму элементов матрицы. public static void main (String[] args) { int A[][], N = 3, M = 4, i, j, S = 0; A = new int[N][M]; ... // заполнение матрицы и вывод на экран for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) S = S + A[i][j]; printf("Сумма элементов матрицы = %d“,S); } for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) S += A[i][j]; Операции с матрицами Задача 1. Вывести на экран главную диагональ квадратной матрицы из N строк и N столбцов. A[0][N-1] A[1][1] A[2][2] A[N-1][N-1] for ( i = 0; i < N; i ++ ) …printf (“%d “, A[i][i]); Задача 2. Вывести на экран вторую диагональ. A[N-1][0] A[N-2][1] A[1][N-2] сумма номеров строки и столбца N-1 A[0][0] for ( i = 0; i < N; i ++) …printf (“%d “, A[i][ N-1-i ]); N-1-i Операции с матрицами Задача 3. Найти сумму элементов, стоящих на главной диагонали и ниже ее. Одиночный цикл или вложенный? ? строка 0: A[0][0] строка 1: A[1][0]+A[1][1] ... строка i: A[i][0]+A[i][2]+...+A[i][i] S = 0; for ( i = 0; i < N; i ++ ) for ( j = 0; j <= i; j ++ ) S += A[i][j]; цикл по всем строкам for ( j = 0; j <= i; j ++ ) S = S + A[i][j]; складываем нужные элементы строки i Операции с матрицами Задача 4. Перестановка строк или столбцов. В матрице из N строк и M столбцов переставить 1-ую и 3-ю строки.
1 3 j A[1][j] A[3][j] for ( j = 0; j < M; j ++ ) { c = A[1][j]; A[1][j] = A[3][j]; A[3][j] = c; } Задача 5. К третьему столбцу добавить шестой. for ( i = 0; i < N; i ++ ) A[i][3] = A[i][3] + A[i][6]; Задания Назовите индексы элемента двумерного массива m, стоящего в самой верхней строке в левом столбце. Назовите индексы элемента двумерного массива m, стоящего в последнем столбце в последней строке. Какими значениями заполнен массив m? Сколько элементов содержится в массиве m? int[][] m = new int[5][4]; Задания Заполнить матрицу из 8 строк и 5 столбцов случайными числами в интервале [-10,10] и вывести ее на экран. Задача: Найти минимальный и максимальный элементы в матрице их номера. Формат вывода: Минимальный элемент A[3][4]=-6 Максимальный элемент A[2][2]=10 Задания Задача: Заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале [-10,10] и вывести ее на экран. Обнулить элементы, отмеченные зеленым фоном, и вывести полученную матрицу на экран. Тема 29. Работа с многомерными массивами в Java Объявление и инициализация массива Вместо конструкции int month_days[] = new int[12]; month_days[0] = 31; ... month_days[11] = 31; можно использовать int month_days[] = {31, 28, 31, ..., 30, 31 }; Неоднородные (нерегулярные) массивы При распределении памяти под многомерный массив необходимо указать память только для первого (левого) измерения. Для каждого из остальных измерений память можно распределять отдельно. Неоднородные (нерегулярные) массивы int A[][] = new int[4][], i, j, k = 0; A[0] = new int[1]; A[1] = new int[2]; A[2] = new int[3]; A[3] = new int[4]; for (i = 0; i < 4; i++){ for (j = 0; j < i + 1; j++) { A[i][j] = k; k++; printf("%3d", A[i][j]); } System.out.println(); } 0 1 2 3 4 5 6 7 8 9 Инициализация многомерных массивов Для объявления инициализатор каждого измерения заключается в отдельный набор фигурных скобок. int A[][] = { {0*0, 1*0, 2*0, 3*0}, {0*1, 1*1, 2*1, 3*1}, {0*2, 1*2, 2*2, 3*2}, {0*3, 1*3, 2*3, 3*3}, }; for (int i = 0; i < 4; i++){ for (int j = 0; j < 4; j++) printf("%3d", A[i][j]); println(); } 0 0 0 0 0 1 2 3 0 2 4 6 0 3 6 9 Инициализация нерегулярных массивов int A[][] = { {1, 2, 3, 4, 5}, {2, 3, 4, 5}, {3, 4, 5}, {4, 5}, {5} }; for (int i = 0; i < A.length; i++){ for (int j = 0; j < A[i].length; j++) printf("%3d", A[i][j]); println(); } 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 Размерность матрицы Двумерный массив является массивом, в котором каждый элемент также является одномерным массивом. Пусть A – двумерный массив размерности N на M. Тогда A[0], A[1], … A[N-1] – одномерные массивы. А количество таких элементов можно получить с помощью свойства length – A.length. Размерность массивов A[i] можно получить с помощью конструкции A[i].length. Двумерные массивы в методах Двумерный массив можно передавать методам точно так же как и одномерный массив. public static int sum(int[][] a) { int sum = 0; for (int i = 0; i < a.length; i++) for (int j = 0; j < a[i].length; j++) sum = sum + a[i][j]; return sum; } Двумерные массивы в методах Двумерный массив можно возвращать из метода. public static int[][] getArray() { int[][] a = new int[3][4]; a[1][1] = 5; return a; } Задания Дан массив Чему равны значения x.length и x[0].length? Дан массив Чему равны значения y.length, y[0].length, y[1].length и y[2].length? int[][] x = {{1, 2}, {3, 4}, {5, 6}}; int[][] y = {{1, 2}, {3, 4, 5}, {5, 6, 5, 9}}; Случайное блуждание без самоповторений Собака потерялась в большом городе. С севера на юг и с запада на восток город состоит из n улиц, пересекающихся под прямым углом и образуют узор в виде решетки. Пытаясь убежать из города, собака выбирает направление случайным образом, но на каждом перекрестке проверяет по запаху не была ли она уже здесь раньше. Но собака может застрять в тупике, когда у нее нет никакого выбора, кроме как попасть на собственные следы. Каков шанс, что собака выберется из города? |