Write a program that reads a text file (input.txt) and uses a recursive algorith
ID: 3681827 • Letter: W
Question
Write a program that reads a text file (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 (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) looks 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
Program code for recursive algorithm to calculate determinant of a matrix:
int main(int argc, char* argv[])
{
FILE *input;
int record, i, j;
int curr_col;
const int dim = DIMENSION;
double entries[dim][dim];
double tmp, determinant;
const char inp_fn[]="matrix.data";
/* Open file */
input = fopen(inp_fn, "r");
/* Check the pointer to file are not NULL */
if(input != (FILE*) NULL)
{
record = 0;
// Read the file at most (dim * dim) times to fill up the array
// The reading also stops when it cannot read any double number
while(fscanf(input,"%lf",&tmp) == 1 && record < dim * dim)
{
// Use some math to calculate the cell to put the new entry
entries[record / dim][record % dim] = tmp; // entries and tmp are double, no need for casting
record++;
}
// Close the file after done reading
fclose(input);
}
else
printf("*** Could not open input or output file! *** ");
/* Calculates determinant */
determinant = det(dim, entries);
printf(" A = ");
for(i=0; i<dim; i++)
{
for(j=0; j<dim; j++)
{
printf("%.1lf ", entries[i][j]);
}
printf(" ");
}
printf(" ");
printf("det(A) = %.3lf ", determinant);
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.