The solution will be copied and pasted into a NetBeans IDE, so please make compa
ID: 3681894 • Letter: T
Question
The solution will be copied and pasted into a NetBeans IDE, so please make compatible. And please make sure the program actually compiles and executes. Please test.
Write a program that reads a text file (input.txt) from this location C:/input.txt and uses a recursive algorithm to compute the determinant of the given matrix. It should read the a order of the matrix, read the matrix, print it out, compute, and print the determinant to an output text file (called output.txt) and be placed at C:/output.txt. Your program should be able to evaluate multiple matrices on a single execution. Your program should handle matrices up to and including those of order 6. In a real application, the sizes could be much larger. You are required to use an array for this problem. Your solution must be recursive. Incorporate error checking as well. The input txt file (input.txt) should look like this:
1
5
2
2 3
5 9
3
3 -2 4
-1 5 2
-3 6 4
4
2 4 5 6
0 3 6 9
0 0 9 8
0 0 0 5
4
2 4 5 6
0 0 0 0
0 0 9 8
0 0 0 5
4
2 0 0 0
0 3 0 0
0 0 9 0
0 0 0 5
4
2 4 0 6
1 3 0 0
4 0 0 8
2 5 0 5
6
6 4 6 4 6 4
1 2 3 4 5 6
6 5 4 3 2 1
3 2 3 2 3 2
4 6 4 6 4 6
1 1 1 1 1 1
Explanation / Answer
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;
/**
* @author srinu
*
*/
public class Determinant {
/**
* @param A
* @param N
* @return
*/
public static int determinant(int A[][], int N) {
int det = 0;
if (N == 1) {
det = A[0][0];
} else if (N == 2) {
det = A[0][0] * A[1][1] - A[1][0] * A[0][1];
} else {
det = 0;
for (int j1 = 0; j1 < N; j1++) {
int[][] m = new int[N - 1][];
for (int k = 0; k < (N - 1); k++) {
m[k] = new int[N - 1];
}
for (int i = 1; i < N; i++) {
int j2 = 0;
for (int j = 0; j < N; j++) {
if (j == j1)
continue;
m[i - 1][j2] = A[i][j];
j2++;
}
}
det += Math.pow(-1.0, 1.0 + j1 + 1.0) * A[0][j1]
* determinant(m, N - 1);
}
}
return det;
}
/**
* @param matrix
*/
public static void printMatrix(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(" " + matrix[i][j]);
}
System.out.println();
}
}
/**
* @param args
*/
public static void main(String args[]) {
Scanner input = null;
try {
File outFile = new File("C:/output.txt");
input = new Scanner(new File("C:/input.txt"));
if (!outFile.exists()) {
outFile.createNewFile();
}
FileWriter fw = new FileWriter(outFile.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
while (input.hasNext()) {
int n = input.nextInt();
int[][] matrix = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = input.nextInt();
}
}
System.out.println(" Size :" + n);
printMatrix(matrix);
int det = determinant(matrix, n);
bw.write(det + " ");
}
bw.close();
} catch (Exception e) {
// TODO: handle exception
} finally {
input.close();
}
}
}
OUTPUT:
Size :1
5
Size :2
2 3
5 9
Size :3
3 -2 4
-1 5 2
-3 6 4
Size :4
2 4 5 6
0 3 6 9
0 0 9 8
0 0 0 5
Size :4
2 4 5 6
0 0 0 0
0 0 9 8
0 0 0 5
Size :4
2 0 0 0
0 3 0 0
0 0 9 0
0 0 0 5
Size :4
2 4 0 6
1 3 0 0
4 0 0 8
2 5 0 5
Size :6
6 4 6 4 6 4
1 2 3 4 5 6
6 5 4 3 2 1
3 2 3 2 3 2
4 6 4 6 4 6
1 1 1 1 1 1
input.txt
1
5
2
2 3
5 9
3
3 -2 4
-1 5 2
-3 6 4
4
2 4 5 6
0 3 6 9
0 0 9 8
0 0 0 5
4
2 4 5 6
0 0 0 0
0 0 9 8
0 0 0 5
4
2 0 0 0
0 3 0 0
0 0 9 0
0 0 0 5
4
2 4 0 6
1 3 0 0
4 0 0 8
2 5 0 5
6
6 4 6 4 6 4
1 2 3 4 5 6
6 5 4 3 2 1
3 2 3 2 3 2
4 6 4 6 4 6
1 1 1 1 1 1
output.txt
5 3 64 270 0 270 0 0