fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. void det_calc(double *matrix, int pivot[], int dim){
  7. int m, n, p;
  8. double *mat, *row, *col, max;
  9. mat = matrix;
  10. for (p = 0; p < dim; mat += dim, p++){ // Get the pivot
  11. pivot[p] = p;
  12. max = fabs(*(mat + p));
  13. row = mat + dim;
  14. for (n = p + 1; n < dim; n++, row += dim){
  15. if (max < fabs(*(row + p))){
  16. max = fabs(*(row + p));
  17. pivot[p] = n;
  18. col = row;
  19. }
  20. }
  21. if (pivot[p] != p) // If pivot is diff from current row, swap
  22. for (n = 0; n < dim; n++){
  23. max = *(mat + n);
  24. *(mat + n) = *(col + n);
  25. *(col + n) = max;
  26. }
  27. if (*(mat + p) == 0) return; // Singular matrix
  28. row = mat + dim;
  29. for (m = p + 1; m < dim; row += dim, m++) // Get lower triangular matrix
  30. *(row + p) /= *(mat + p);
  31. row = mat + dim;
  32. for (m = p + 1; m < dim; row += dim, m++) // Update matrix
  33. for (n = p + 1; n < dim; n++)
  34. *(row + n) -= *(row + p) * *(mat + n);
  35. }
  36. }
  37.  
  38. double* getRow(int size){
  39. double* row = malloc(size*sizeof(double));
  40. for (int i = 0; i < size; i++) scanf("%f", row+i);
  41. return row;
  42. }
  43.  
  44. int main(void){
  45. int dim, count = 0;
  46. double result = 1.0, test, numArr[3];
  47. char line[100];
  48. char *p = line, *beginning = p;
  49. // fgets(line, sizeof(line), stdin); // Get the first number
  50. scanf("%d", &dim); // Convert to int
  51. double* matrix[dim];
  52. int pivot[dim]; // Array to track pivot
  53. for (int i = 0; i < dim; i++){
  54. matrix[i] = getRow(dim);
  55. }
  56. printf("Dim = %d\n", dim);
  57. for (int i = 0; i < dim; i++){
  58. for (int j = 0; j < dim; j++){
  59. printf("%.1f ", matrix[i][j]);
  60. } printf("\n");
  61. }
  62. /*det_calc(&matrix[0][0], pivot, dim);
  63.   for(int i = 0; i < dim; i++) result *= matrix[i][i];
  64.   printf("%f", result);*/
  65. return 0;
  66. }
Success #stdin #stdout 0s 5380KB
stdin
9
0 0 0 0 0 0 2 3 1
0 0 0 7 3 2 3 3 1
0 0 0 0 9 10 2 8 3
0 0 0 0 0 0 0 6 4
0 4 7 10 5 10 5 9 6
0 0 0 0 0 3 9 9 6
2 1 2 1 7 6 3 10 9
0 0 5 7 7 3 10 2 5
0 0 0 0 0 0 0 0 5
stdout
Dim = 9
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0