Similar presentations:
Программирование на языке 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 улиц, пересекающихся под
прямым углом и образуют узор в виде решетки. Пытаясь
убежать из города, собака выбирает направление случайным
образом, но на каждом перекрестке проверяет по запаху не
была ли она уже здесь раньше. Но собака может застрять в
тупике, когда у нее нет никакого выбора, кроме как попасть на
собственные следы.
Каков шанс, что собака выберется из города?