Модуль 1. Вариант 4

This commit is contained in:
Victor 2013-11-05 11:05:01 +02:00
parent 7e38b7adae
commit aa490a1387
4 changed files with 291 additions and 73 deletions

View File

@ -53,7 +53,7 @@ javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
main.class=tse.Main
main.class=module1.variant4.Task_2
manifest.file=manifest.mf
meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false

View File

@ -0,0 +1,98 @@
package module1.variant4;
/**
*
* @author aNNiMON
*/
public class Matrix {
protected int[][] matrix;
public Matrix(int row, int columns) {
if ( (row < 1) || (columns < 1) ) {
throw new RuntimeException("Размер матрицы должен быть больше 0");
}
matrix = new int[row][columns];
}
public Matrix(int[][] matrix) {
this.matrix = matrix;
}
public int getRowSize() {
return matrix.length;
}
public int getColumnSize() {
return matrix[0].length;
}
public int[][] getMatrix() {
return matrix;
}
public void setMatrix(int[][] matrix) {
this.matrix = matrix;
}
public void setRow(int row, int[] vector) {
this.matrix[row] = vector;
}
public void setCell(int row, int column, int value) {
this.matrix[row][column] = value;
}
public Matrix multiply(Matrix other) {
int[][] matrixA = matrix;
int[][] matrixB = other.matrix;
int rowsA = matrixA.length;
int columnsA = matrixA[0].length;
int columnsB = matrixB.length;
if (columnsB != columnsA) {
throw new RuntimeException("Размеры матриц не совпадают");
}
int[][] matrixC = new int[rowsA][columnsB];
for (int i = 0; i < rowsA; i++) {
for (int j = 0; j < columnsB; j++) {
for (int k = 0; k < columnsA; k++) {
matrixC[i][j] += matrixA[i][k] * matrixB[k][j];
}
}
}
return new Matrix(matrixC);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Матрица\n");
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
sb.append(matrix[i][j]).append(' ');
}
sb.append("\n");
}
return sb.toString();
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
public int hashCode() {
return super.hashCode();
}
}

View File

@ -0,0 +1,47 @@
package module1.variant4;
import java.util.ArrayList;
import java.util.Random;
/**
*
* @author aNNiMON
*/
public class Task_2 {
public static void main(String[] args) {
Random rnd = new Random();
Matrix mt1 = new Matrix(1, 3);
for (int i = 0; i < mt1.getColumnSize(); i++) {
mt1.setCell(0, i, rnd.nextInt(10));
}
Matrix mt2 = new Matrix(3, 3);
for (int i = 0; i < mt2.getRowSize(); i++) {
for (int j = 0; j < mt2.getColumnSize(); j++) {
mt2.setCell(i, j, rnd.nextInt(10));
}
}
Vector vector = new Vector(3);
for (int i = 0; i < vector.getVectorSize(); i++) {
vector.setCell(i, rnd.nextInt(10));
}
ArrayList<Matrix> list = new ArrayList<>();
list.add(mt1);
list.add(mt2);
list.add(vector);
for (Matrix matrix : list) {
System.out.println(matrix.toString());
}
System.out.println("AxB= " + mt1.multiply(mt2).toString());
System.out.println("V*A= " + vector.getMultiplyMatrixAndVector(mt1).toString());
System.out.println("V*B= " + vector.getMultiplyMatrixAndVector(mt2).toString());
System.out.println("V*V= " + vector.getVectorScalarMultiply(vector));
}
}

View File

@ -0,0 +1,73 @@
package module1.variant4;
/**
*
* @author aNNiMON
*/
public class Vector extends Matrix {
public Vector(int size) {
super(new int[1][size]);
}
public Vector(int[] vector) {
super(new int[][] {
vector
});
}
public int[] getVector() {
return matrix[0];
}
public int getVectorSize() {
return matrix[0].length;
}
public void setCell(int column, int value) {
super.setCell(0, column, value);
}
public Vector getMultiplyMatrixAndVector(Matrix matrix) {
int[][] matrixA = matrix.getMatrix();
int rowsA = matrixA.length;
int columnsA = matrixA[0].length;
int[] vector = getVector();
if (vector.length != columnsA) {
throw new RuntimeException("Размер матрицы и длина вектора не совпадают");
}
int[] result = new int[rowsA];
for (int i = 0; i < rowsA; i++) {
for (int j = 0; j < columnsA; j++) {
result[i] += (matrixA[i][j] * vector[j]);
}
}
return new Vector(result);
}
public int getVectorScalarMultiply(Vector other) {
int[] vectorA = getVector();
int[] vectorB = other.getVector();
int result = 0;
for (int i = 0; i < vectorA.length; i++) {
result += vectorA[i] * vectorB[i];
}
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Вектор\n");
for (int j = 0; j < matrix[0].length; j++) {
sb.append(matrix[0][j]).append(' ');
}
sb.append("\n");
return sb.toString();
}
}