fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void choose_primary(int N, double** A, int k, int *det);
  5. void normalize_first_string(int N, double** A, int k);
  6. void deduct(int N, double** A, int k);
  7. void scan_matrix(int N, double **A);
  8. void scan_b(int N, double **A);
  9. void print_extended(int N, double **A);
  10.  
  11. int main(void) {
  12. int N, i, k, det = 1;
  13. scanf("%d", &N);
  14. double **A = malloc(N*sizeof(double*));
  15. for(i = 0; i < N; A[i++] = malloc((N + 1) * sizeof(double)));
  16. scan_matrix(N, A);
  17. scan_b(N, A);
  18. print_extended(N, A);
  19. for(k = 0; k < N; k++)
  20. {
  21. choose_primary(N, A, k, &det);
  22. det *= A[k][k];
  23. normalize_first_string(N, A, k);
  24. deduct(N, A, k);
  25. }
  26. print_extended(N, A);
  27. return 0;
  28. }
  29.  
  30. void choose_primary(int N, double** A, int k, int* det)
  31. {
  32. fprintf(stdout, "choose_primary in\n");
  33. int i, maxi = k;
  34. for(i = k; i < N; i++)
  35. if(A[i][k] > A[maxi][k])
  36. maxi = i;
  37. if(maxi != i)
  38. {
  39. int t;
  40. for(i = k; i < N + 1; i++)
  41. {
  42. t = A[maxi][i];
  43. A[maxi][i] = A[k][i];
  44. A[k][i] = t;
  45. }
  46. *det *= -1;
  47. }
  48. fprintf(stdout, "choose_primary out\n");
  49. return;
  50. }
  51.  
  52. void normalize_first_string(int N, double** A, int k)
  53. {
  54. fprintf(stdout, "normalize_first_string in\n");
  55. if(A[k][k] * A[k][k] > 0.0000000001)
  56. { int i;
  57. for(i = k + 1; i < N + 1; i++)
  58. A[k][i] /= A[k][k];
  59. A[k][k] = 1;
  60. }
  61. fprintf(stdout, "normalize_first_string out\n");
  62. return;
  63. }
  64.  
  65. void deduct(int N, double** A, int k)
  66. {
  67. fprintf(stdout, "deduct in\n");
  68. int i, j;
  69. for(i = k + 1; k < N; i++)
  70. {
  71. for(j = k + 1; j < N + 1; j++)
  72. A[i][j] -= A[k][j] * A[i][k];
  73. // A[i][k] = 0;
  74. }
  75. fprintf(stdout, "deduct out\n");
  76. return;
  77. }
  78.  
  79. void scan_matrix(int N, double** A)
  80. {
  81. fprintf(stdout, "scan_matrix in\n");
  82. int i, j;
  83. for(i = 0; i < N; i++)
  84. for(j = 0; j < N; j++)
  85. scanf("%lf", &A[i][j]);
  86. fprintf(stdout, "scan_matrix out\n");
  87. return;
  88. }
  89.  
  90. void scan_b(int N, double** A)
  91. {
  92. fprintf(stdout, "scan_b in\n");
  93. int i;
  94. for(i = 0; i < N; i++)
  95. scanf("%lf", &A[i][N]);
  96. fprintf(stdout, "scan_b out\n");
  97. return;
  98. }
  99.  
  100. void print_extended(int N, double** A)
  101. {
  102. fprintf(stdout, "print_extended in\n");
  103. int i, j;
  104. printf("Создана матрица %dx%d\n", N, N);
  105. for(i = 0; i < N; i++)
  106. {
  107. for(j = 0; j < N + 1; j++)
  108. printf("%.1f\t", A[i][j]);
  109. printf("\n");
  110. }
  111. fprintf(stdout, "print_extended out\n");
  112. return;
  113. }
Runtime error #stdin #stdout 0s 2296KB
stdin
2
1 2
2 1
3 3
stdout
Standard output is empty