Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Леднева_программирование_на_JAVA.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

Содержание отчета

Готовится один отчет на бригаду в печатном виде для заданий по вариантам из табл. 7.1. Он должен содержать следующие разделы:

  • титульный лист;

  • задание;

  • словесное описание алгоритма;

  • текст программы на языке Java.

Контрольные вопросы

1. Что представляют собой многомерные массивы и для чего они используются?

2. Как объявляются многомерные массивы в Java и как для них выделяется память?

3. Могут ли многомерные массивы иметь разную длину строк?

4. Каковы основные правила обработки матриц? Какие алгоритмы для этого используются?

5. Как осуществляется ввод и вывод матрицы по строкам?

6. Каковы особенности алгоритмов обработки матрицы в целом?

7. Каковы особенности алгоритмов обработки матрицы по строкам?

8. Каковы особенности алгоритмов обработки матрицы по столбцам?

9. Есть ли отличия в алгоритмах подсчета сумм и нахождения минимума и максимума в строках?

10. Есть ли отличия в алгоритмах подсчета сумм и нахождения минимума и максимума в столбцах?

Лабораторная работа № 8 диагонали матрицы, умножение матриц

Цель работы – знакомство с алгоритмами обработки матриц: ввод/вывод диагоналей матриц, формирование элементов при умножении матриц.

Источники: [3, с. 161-164], [4, с. 124-127].

Краткая теория Обработка главной и побочной диагоналей матриц

Понятие диагоналей применимо только для квадратных матриц, у которых количество строк и столбцов одинаковое. На рис. 8.1 представлена квадратная матрица размером n*n.

b00

b01

b02

b03

b04

b05

…

b0(n-1)

b10

b11

b12

b13

b14

b15

…

b1(n-1)

b20

b21

b22

b23

b24

b25

…

b2(n-1)

b

B =

30

b31

b32

b33

b34

b35

…

b3(n-1)

b40

b41

b42

b43

b44

b45

…

b4(n-1)

b50

b51

b52

b53

b54

b55

…

b5(n-1)

…

…

…

…

…

…

…

…

b(n-1)0

b(n-1)1

b(n-1)2

b(n-1)3

b(n-1)4

b(n-1)5

…

b(n-1)(n-1)

Рис. 8.1

Главная диагональ матрицы проходит от верхнего левого к нижнему правому углу. Она содержит следующие элементы:

b00, b11, b22, b33, …, b(n-1)(n-1).

Побочная диагональ, напротив, расположена от верхнего правого к нижнему левому углу. Она включает в себя такие элементы:

b0(n-1), b1(n-2), b2(n-3), …, b(n-1)0.

Очевидно, что обе диагонали представляют собой одномерные массивы. Номер последнего элемента строки или столбца вместо (n – 1) принято обозначать через параметр длины массива (b.length – 1). Для их обработки необходим один цикл, параметром которого является, например, первый индекс. При этом второй индекс j (номер столбца) можно вычислять через первый i (номер строки) следующим образом:

– так как элементы главной диагонали имеют одинаковые индексы (номер строки равен номеру столбца), обращение к элементу, стоящему на этой диагонали, можно записать bii;

– для элементов побочной диагонали сумма индексов для любого из них равна b.length – 1 (номер строки + номер столбца=n – 1). Поэтому при известном первом индексе i второй может быть вычислен как n – 1 – i. Другими словами, обращение к элементу побочной диагонали можно записать так: bi,n-1-i.

Задача 8.1. Ввести матрицу x размерностью m*m. Вывести элементы ее главной и побочной диагоналей. Для заполнения массива использовать объект класса Random, генерирующий целые числа в интервале от 0 до 3.

public class VivodDiag {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

System.out.print("Введите размер квадратной матрицы => ");

int m=sc.nextInt();

// Заполнение массива случайными числами с использованием класса Random

Random rn= new Random();

int x[][]=new int [m][m];

for (int i = 0; i < x.length; i++)

for (int j = 0; j < i+1; j++)

x[i][j]=rn.nextInt(3);

// Вывод массива

System.out.println("\n Матрица:");

for (int i = 0; i < x.length; i++) {

for (int j = 0; j < x[i].length; j++)

System.out.print("\t"+ x[i][j]);

System.out.println("");

}

System.out.println("Главная диагональ:");

for (int i = 0; i < x.length; i++) {

System.out.print("\t"+x[i][i]);

}

System.out.println("\nПобочная диагональ:");

for (int i = 0; i < x.length; i++) {

System.out.print("\t"+x[i][x.length – i –1]);

}

}

}