Главная страница

массивы. Задача запомнить положение фигур на шахматной доске. 1 2 3 4 5


Скачать 1.25 Mb.
НазваниеЗадача запомнить положение фигур на шахматной доске. 1 2 3 4 5
Анкормассивы
Дата31.03.2022
Размер1.25 Mb.
Формат файлаppt
Имя файла11_java_array2.ppt
ТипЗадача
#430815




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





Двумерные массивы


Задача: запомнить положение фигур на шахматной доске.


1


2


3


4


5


6


a


b


c


d


e


f


g


h


8


7


6


5


4


3


2


1


0


0


0


0


2


0


0


0


0


0


0


0


0


0


0


0


0


0


3


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


4


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0


7


6


5


4


3


2


1


0


0


1


2


3


4


5


6


7


c6


A[5][2]





Двумерные массивы


Чикаго


Бостон


Нью-Йорк


Даллас


Чикаго


0


983


787


967


Бостон


983


0


214


1723


Нью-Йорк


787


214


0


1548


Даллас


967


1763


1548


0


0


1


2


3


0


1


2


3


A[3][1]





Матрицы


Матрица – это прямоугольная таблица однотипных элементов.
Матрица – это массив, в котором каждый элемент имеет два индекса (номер строки и номер столбца).


1


4


7


3


6


2


-5


0


15


10


8


9


11


12


20


0


1


2


0


1


2


3


4


A


7


0


11


2


-5


0


15


10


12


строка 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]);


вывод строки


12


25


1


13


156


1


12


447


1


456


222


23


Если переставить циклы?


?


в той же строке





Обработка всех элементов матрицы


Задача: заполнить матрицу из 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


2


5


2


1


7


3


1


3


7


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



написать администратору сайта