Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2014
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAXN 3
  6. #define EPS 0.0000001
  7. #define ABS(a) ( (a) < 0.0 ? -(a) : (a) )
  8.  
  9. double m[MAXN+3][MAXN+3];
  10.  
  11. void normalize()
  12. {
  13.     for (int i = 0; i < 3; i++) {
  14.         for (int j = 0; j < 4; j++) {
  15.             if (ABS(m[i][j]) < EPS) {
  16.                 m[i][j] = 0.0;
  17.             }
  18.         }
  19.     }
  20. }
  21. void printMat()
  22. {
  23.     normalize();
  24.     for (int i = 0; i < 3; i++) {
  25.         for (int j = 0; j < 4; j++) {
  26.             printf("% .3lf  ", m[i][j]);
  27.         }
  28.         printf("\n");
  29.     }
  30.     printf("\n");
  31. }
  32.  
  33.  
  34. void addrow(int a, int b)
  35. {
  36.     for (int j = 0; j < 4; j++) {
  37.         m[b][j] += m[a][j];
  38.     }
  39. }
  40.  
  41. void mulrow(int a, double n)
  42. {
  43.     for (int j = 0; j < 4; j++) {
  44.         m[a][j] *= n;
  45.     }
  46. }
  47.  
  48. int N;
  49. void solverec(int n)
  50. {
  51.     if (n == N) {
  52.         return;
  53.     }
  54.  
  55.  
  56.     for (int i = n + 1; i < N; i++) {
  57.         mulrow(n, -m[i][n] / m[n][n]);
  58.         printMat();
  59.         addrow(n, i);
  60.         printMat();
  61.     }
  62.  
  63.     solverec(n + 1);
  64. }
  65. void divGuys() {
  66.     for (int i = 0; i < N; i++) {
  67.         mulrow(i, 1.0 / m[i][i]);
  68.     }
  69. }
  70. void solverec2(int n)
  71. {
  72.     if (n < 0) {
  73.         return;
  74.     }
  75.  
  76.     for (int i = n - 1; i >= 0; i--) {
  77.         mulrow(n, - m[i][n] / m[n][n]);
  78.         printMat();
  79.         addrow(n, i);
  80.         printMat();
  81.     }
  82.  
  83.     solverec2(n - 1);
  84. }
  85. void solve()
  86. {
  87.     N = 3;
  88.     solverec(0);
  89.     solverec2(N - 1);
  90.     divGuys();
  91.     printMat();
  92. }
  93.  
  94. int main(int argc, char * argv[])
  95. {
  96.  
  97.     for (int i = 0; i < 3; i++) {
  98.         for (int j = 0; j < 3; j++) {
  99.             scanf("%lf", &m[i][j]);
  100.         }
  101.     }
  102.     for(int i=0;i<3;++i)
  103.         scanf("%lf",&m[i][3]);
  104.     printMat();
  105.     solve();
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement