2015-06-20 13 views
1

所以我做了一個程序來解決一個線性方程3,但由於某種原因它沒有給我適當的答案,我已經做了我的研究,但似乎無法找到什麼是錯的我的編碼無法使編碼解決線性方程

我使用Visual C++二千零十五​​分之二千零一十

void linear() 
    { 
     int y[3][3], inv[3][3], co[3][3], d[3], sol[3], D = 0, i = 0, j = 0; 
     char z; 
     printf("The format for the linear equation is\na1.X + b1.Y + c1.Z = d1\na2.X + b2.Y + c2.Z = d2\na3.X + b3.Y + c3.Z = d3\n"); 
     for (i = 0;i < 3;i++) 
     { 
      for (z = 'a';z < 'd';z++) 
      { 
       printf("Enter the value for %c%i\n", z, i + 1); 
       scanf("%i", &y[i][j++]); 
      } 
      printf("Enter the valie for D%i\n", i + 1); 
      scanf("%i", &d[i]); 
      j = 0; 
     } 
     for (i = 0;i < 3;i++) 
      for (j = 0;j < 3;j++) 
      co[i][j] = (y[(i + 1) % 3][(j + 1) % 3] * y[(i + 2) % 3][(j + 2) % 3]) - (y[(i + 1) % 3][(j + 2) % 3] * y[(i + 2) % 3][(j + 1) % 3]); 
     for (i = 0;i < 3;i++) 
      D += y[i][0] * co[i][0]; 
     if (D == 0) 
     { 
      printf("\nThese equations cannot be solved!\n"); 
      return; 
     } 
     for (i = 0;i < 3;i++) 
      for (j = 0;j < 3;j++) 
      swap(&co[i][j], &co[j][i]); 
     for (i = 0;i < 3;i++) 
      for (j = 0;j < 3;j++) 
      inv[i][j] = co[i][j]/D; 
     for (i = 0;i < 3;i++) 
     { 
      sol[i] = 0; 
      for (j = 0;j < 3;j++) 
       sol[i] += inv[i][j] * d[j]; 
     } 
     printf("The solutions are\nX=%i\nY=%i\nZ=%i\n", sol[0], sol[1], sol[2]); 
     getch(); 
    } 
+0

嘗試打印行列式和輔助因子,看看他們都是對 –

+3

請添加您的電流輸入,你會得到什麼,以及預期的輸出。請參見[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – usr2564301

+1

C++不是C,反之亦然。請選擇一個 – Olaf

回答

1

整數除法。

隨着矩陣解決方案,即使整數輸入,不約而同的解決方案將需要浮點運算。

// int inv[3][3], sol[3]; 
double inv[3][3], sol[3]; 
... 

for (i = 0;i < 3;i++) 
    for (j = 0;j < 3;j++) 
    // inv[i][j] = co[i][j]/D; 
    inv[i][j] = 1.0 * co[i][j]/D; 
... 
    sol[i] += inv[i][j] * d[j]; 
... 
// printf("The solutions are\nX=%i\nY=%i\nZ=%i\n", sol[0], sol[1], sol[2]); 
printf("The solutions are\nX=%e\nY=%e\nZ=%e\n", sol[0], sol[1], sol[2]);