package j1.lesson12;
import java.io.*;
/**
* 課題1202 - 解答例.
* @author arakawa
* @version $Id: MatrixMult_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public class MatrixMult {
/**
* 行列の掛け算を行うプログラム。
* 以下の擬似コードで表される。
* <pre>
* プログラム全体
* a = 3x3の新しい配列 (double[][])
* for i = 0 to 2
* for j = 0 to 2
* print "a[" i "][" j "] = "
* a[i][j] = コンソール入力 (実数)
* b = 3x3の新しい配列 (double[][])
* for i = 0 to 2
* for j = 0 to 2
* print "b[" i "][" j "] = "
* b[i][j] = コンソール入力 (実数)
* c = a * b
* print c
* </pre>
* @param args 無視される
* @throws IOException 入力中に例外が発生した場合
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// a = 3x3の新しい配列 (double[][])
double[][] a = new double[3][3];
// for i = 0 to 2
for (int i = 0; i <= 2; i++) {
// for j = 0 to 2
for (int j = 0; j <= 2; j++) {
// print "a[" i "][" j "] = "
System.out.print("a["+i+"]["+j+"] = ");
// a[i][j] = コンソール入力 (実数)
a[i][j] = Double.parseDouble(reader.readLine());
}
}
// b = 3x3の新しい配列 (double[][])
double[][] b = new double[3][3];
// for i = 0 to 2
for (int i = 0; i <= 2; i++) {
// for j = 0 to 2
for (int j = 0; j <= 2; j++) {
// print "b[" i "][" j "] = "
System.out.print("b["+i+"]["+j+"] = ");
// b[i][j] = コンソール入力 (実数)
b[i][j] = Double.parseDouble(reader.readLine());
}
}
// c = a * b
double[][] c = mult(a, b);
// print c
printMatrix(c);
}
/**
* 3x3の行列の積を計算する。
* 以下の擬似コードで表される。
* <pre>
* 3x3行列の積を計算(a, b)
* result = 3x3の新しい配列 (double[][])
* for i = 0 to 2
* for j = 0 to 2
* result[i][j] = Σ{k=0..2}(a[i][k] * b[k][j])
* result を返す
* </pre>
* @param a 掛けられる行列
* @param b 掛ける行列
* @return <code>a * b</code>
*/
// 3x3行列の積を計算(a, b)
public static double[][] mult(double[][] a, double[][] b) {
// result = 3x3の新しい配列 (double[][])
double[][] result = new double[3][3];
// for i = 0 to 2
for (int i = 0; i <= 2; i++) {
// for j = 0 to 2
for (int j = 0; j <= 2; j++) {
// result[i][j] = Σ{k=0..2}(a[i][k] * b[k][j])
double sum = 0;
for (int k = 0; k <= 2; k++) {
sum += a[i][k] * b[k][j];
}
result[i][j] = sum;
}
}
// result を返す
return result;
}
/**
* 行列を表示する。
* 以下の擬似コードで表される。
* <pre>
* 行列の表示(matrix)
* for i = 0 to matrixの長さ - 1
* for j = 0 to matrix[i]の長さ - 1
* print matrix[i][j] " "
* print 改行
* </pre>
* @param matrix 表示する行列
*/
// 行列の表示(matrix)
public static void printMatrix(double[][] matrix) {
// for i = 0 to matrixの長さ - 1
for (int i = 0; i < matrix.length; i++) {
// for j = 0 to matrix[i]の長さ - 1
for (int j = 0; j < matrix[i].length; j++) {
// print matrix[i][j] " "
System.out.print(matrix[i][j]);
System.out.print(" ");
}
// print 改行
System.out.println();
}
}
}
|