Задача:
Напишите класс для хранения матриц и реализуйте основные операции работы с ними.
Тесты:
№ | Исходные данные | Операция | Результат |
1. |
A: B: -9 1 0 1 0 0 4 1 1 0 2 0 -2 2 -1 0 0 1
|
+ | -8 1 0 4 3 1 -2 2 0 |
2. | — | -10 1 0 4 -1 1 -2 2 -2 |
|
3. | * | -9 2 0 4 2 1 -2 4 -1 |
|
4. | -9 1 0 4 1 1 -2 2 -1 |
transposition | -9 4 -2 1 1 2 0 1 -1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
public class Matrix { private int a[][]; public Matrix(int n, int m) { a = new int[n][m]; } public Matrix(int a[][]) { this.a = a; } public int getVerticalSize() { return a.length; } public int getHorizontalSize() { return a[0].length; } public int getElement(int i, int j) { return a[i][j]; } public void setElement(int i, int j, int value) { a[i][j] = value; } @Override public String toString() { String s = "\n"; for (int[] vector : a) { for (int value : vector) s += value + " "; s += "\n"; } return s; } public static Matrix add(Matrix a, Matrix b) { int v = a.getVerticalSize(); int h = a.getHorizontalSize(); Matrix result = new Matrix(v, h); for (int i = 0; i < h; i++) { for (int j = 0; j < v; j++) { int value = 0; value = a.getElement(i, j) + b.getElement(i, j); result.setElement(i, j, value); } } return result; } public static Matrix subtract(Matrix a, Matrix b) { int v = a.getVerticalSize(); int h = a.getHorizontalSize(); Matrix result = new Matrix(v, h); for (int i = 0; i < h; i++) { for (int j = 0; j < v; j++) { int value = 0; value = a.getElement(i, j) - b.getElement(i, j); result.setElement(i, j, value); } } return result; } public static Matrix multiply(Matrix a, Matrix b) { int v = a.getVerticalSize(); int h = b.getHorizontalSize(); int temp = a.getHorizontalSize(); Matrix result = new Matrix(v, h); for (int i = 0; i < v; i++) for (int j = 0; j < h; j++) { int value = 0; for (int k = 0; k < temp; k++) { value += a.getElement(i, k) * b.getElement(k, j); } result.setElement(i, j, value); } return result; } public void transMatrix() { int x = a.length; int retA[][] = new int[x][x]; for (int i = 0; i < x; i++) { for (int j = 0; j < x; j++) { retA[j][i] = a[i][j]; } } for (int i = 0; i < a.length; i++) { System.arraycopy(retA[i], 0, a[i], 0, a.length); } } public static void main(String[] args) { int[][] a = {{-9, 1, 0}, {4, 1, 1}, {-2, 2, -1}}; int[][] b = {{0, 0, 0}, {0, 2, 0}, {0, 0, 1}}; Matrix A = new Matrix(a); System.out.println("A" + A); System.out.println("Element [0,0] : " + A.getElement(0, 0)); Matrix B = new Matrix(b); B.setElement(0, 0, 1); System.out.println("Size of matrix B : " + B.getHorizontalSize() + " " + B.getVerticalSize() + B); Matrix C; C = add(A, B); System.out.println("add " + C); C = subtract(A, B); System.out.println("subtract " + C); C = multiply(A, B); System.out.println("multiply " + C); A.transMatrix(); System.out.println("Transposed A : " + A); } } |
При сложении размеры матриц должны совпадать. При умножении количество столбцов левого операнда должно совпадать с количеством строк правого. Если это не так, то необходимо возбудить свою исключительную ситуацию.