Программирование на языке Java
Программирование на языке Java
1.25M
Category: programmingprogramming

Программирование на языке Java. Многомерные массивы (матрицы)

1. Программирование на языке Java

Тема 28. Многомерные
массивы (матрицы)
1

2.

2
Двумерные массивы
Задача: запомнить положение фигур на шахматной доске.
1
a
b
c
2
d
e
f
3
g
4
h
5
6
0
1
2
3
4
5
6
7
8
7
0
0
0
0
2
0
0
0
7
6
0
0
0
0
0
0
0
0
6
5
0
0
3
0
0
0
0
0
5
4
0
0
0
0
0
0
0
0
3
0 A[5][2]
0 0 0
0
0
4
0
3
2
0
0
0
0
0
0
0
0
2
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
4
c6

3.

3
Двумерные массивы
0
1
2
3
Чикаго
Бостон
Нью-Йорк
Даллас
Чикаго
0
983
787
967
Бостон
983
0
214
1723
Нью-Йорк
787
214
0
1548
Даллас
967
1763
1548
0
0
1
2
3
A[3][1]

4.

4
Матрицы
Матрица – это прямоугольная таблица однотипных элементов.
Матрица – это массив, в котором каждый элемент имеет два
индекса (номер строки и номер столбца).
столбец 2
A
0
1
2
3
4
0
1
4
7
3
6
1
2
-5
0
15 10
2
8
9
11 12 20
строка 1
ячейка A[2][3]

5.

5
Матрицы
Объявление:
int A[][], N = 3, M = 4;
A = new int[N][M];
Ввод с клавиатуры:
for ( i
j = 0; i
j < N;
M; i
j ++ )
for ( j
i = 0; j
i < M;
N; j
i ++ ) {
printf("A[%d][%d]=",i,j);
A[i][j] = in.nextInt();
}
? Если переставить циклы?
Элементы
массива
заполнены
нулевыми
значениями
j
i
A[0][0]= 25
A[0][1]= 14
A[0][2]= 14
...
A[2][3]= 54

6.

6
Матрицы
Заполнение случайными числами
?
цикл по строкам
for ( i = 0; i < N; i ++ )
Какой интервал?
цикл по столбцам
for ( j = 0; j < M; j ++ )
A[i][j] = random(25)- 10;
Вывод на экран
вывод строки
for ( i = 0; i < N; i ++ ) {
12 25
1 13
for
(j
))
for
( =j 0;
= 0;j <j M;
< M;j ++
j ++
System.out.printf("%5d",A[i][j]);
System.out.printf("%5d",
A[i][j]);
156
1 12 447
System.out.println(" ");
1 456 222 23
}
в той же строке
перейти на
новую строку
? Если переставить циклы?
6

7.

7
Обработка всех элементов матрицы
Задача: заполнить матрицу из 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
= SA[i][j];
+ A[i][j];
S +=
printf("Сумма элементов матрицы = %d“,S);
}

8.

8
Операции с матрицами
Задача 1. Вывести на экран главную диагональ квадратной
матрицы из N строк и N столбцов.
A[0][0]
for ( i = 0; i < N; i ++ )
…printf (“%d “, A[i][i]);
A[1][1]
A[2][2]
A[N-1][N-1]
Задача 2. Вывести на экран вторую диагональ.
A[0][N-1]
сумма номеров строки и столбца N-1
A[1][N-2]
A[N-2][1]
A[N-1][0]
for ( i = 0; i < N; i ++)
…printf (“%d “, A[i][ N-1-i ]);

9.

9
Операции с матрицами
Задача 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 (( jj==0;
0; jj<=
<=i;
i; jj++
++))
for
SS =+=S A[i][j];
+ A[i][j];
складываем нужные
элементы строки i

10.

10
Операции с матрицами
Задача 4. Перестановка строк или столбцов. В матрице из N
строк и M столбцов переставить 1-ую и 3-ю строки.
j
A[1][j]
1
1
2
5
2
1
3
7
3
1
3
7
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];

11.

11
Задания
int[][] m = new int[5][4];
1. Назовите индексы элемента двумерного массива m,
стоящего в самой верхней строке в левом столбце
(нумерация ведется с левого столбца с верхней строки).
2. Назовите индексы элемента двумерного массива m,
стоящего в последнем столбце в последней строке.
3. Какими значениями заполнен массив m?
4. Сколько элементов содержится в массиве m?

12.

12
Задания
Заполнить матрицу из 8 строк и 5 столбцов случайными
числами в интервале [-10,10] и вывести ее на экран.
Задача: Найти минимальный и максимальный элементы
в матрице их номера. Формат вывода:
Минимальный элемент
A[3][4]=-6
Максимальный элемент A[2][2]=10

13.

Программирование
на языке Java
Тема 29. Работа с многомерными
массивами в Java

14. Программирование на языке Java

15
Объявление и инициализация массива
Вместо конструкции
int month_days[] = new int[12];
month_days[0] = 31;
...
month_days[11] = 31;
можно использовать
int month_days[] = {31, 28, 31, ..., 30, 31 };

15.

16
Неоднородные (нерегулярные) массивы
При распределении памяти под многомерный массив
необходимо указать память только для первого (левого)
измерения.
Для каждого из остальных измерений память можно
распределять отдельно.

16.

17
Неоднородные (нерегулярные) массивы
int A[][] = new int[4][], i, j, k = 0;
A[0] = new int[1];
0
A[1] = new int[2];
1 2
A[2] = new int[3];
3 4 5
A[3] = new int[4];
6 7 8
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();
}
9

17.

18
Инициализация многомерных массивов
Для объявления инициализатор каждого
измерения заключается в отдельный набор
фигурных скобок.
int A[][] = {
0
{0*0, 1*0, 2*0, 3*0},
0
{0*1, 1*1, 2*1, 3*1},
{0*2, 1*2, 2*2, 3*2},
0
{0*3, 1*3, 2*3, 3*3},
0
};
for (int i = 0; i < 4; i++){
for (int j = 0; j < 4; j++)
printf("%3d", A[i][j]);
println();
}
0
0
0
1
2
3
2
4
6
3
6
9

18.

19
Инициализация нерегулярных массивов
int A[][] = {
1 2 3 4
{1, 2, 3, 4, 5},
2 3 4 5
{2, 3, 4, 5},
3 4 5
{3, 4, 5},
{4, 5},
4 5
{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();
}
5

19.

Размерность матрицы
Двумерный массив является массивом, в котором каждый
элемент также является одномерным массивом.
Пусть A – двумерный массив размерности N на M.
Тогда A[0], A[1], … A[N-1] – одномерные массивы.
А количество таких элементов можно получить с помощью
свойства length – A.length.
Размерность массивов A[i] можно получить с помощью
конструкции A[i].length.
20

20.

Двумерные массивы в методах
Двумерный массив можно передавать методам точно так же как
и одномерный массив.
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;
}
21

21.

Двумерные массивы в методах
Двумерный массив можно возвращать из метода.
public static int[][] getArray() {
int[][] a = new int[3][4];
a[1][1] = 5;
return a;
}
22

22.

23
Задания
1. Дан массив int[][] x = {{1, 2}, {3, 4}, {5, 6}};
Чему равны значения x.length и x[0].length?
2.
Дан массив
int[][] y = {{1, 2}, {3, 4, 5},
{5, 6, 5, 9}};
Чему равны значения y.length, y[0].length,
y[1].length и y[2].length?

23.

24
Случайное блуждание без самоповторений
Собака потерялась в большом городе. С севера на юг и с
запада на восток город состоит из n улиц, пересекающихся под
прямым углом и образуют узор в виде решетки. Пытаясь
убежать из города, собака выбирает направление случайным
образом, но на каждом перекрестке проверяет по запаху не
была ли она уже здесь раньше. Но собака может застрять в
тупике, когда у нее нет никакого выбора, кроме как попасть на
собственные следы.
Каков шанс, что собака выберется из города?
English     Русский Rules