2016-03-22 23 views
-1

プログラミングとC++には新しく、Cramerのルールを使用してシステムを解決する必要があります。それはすべて問題なく機能しましたが、機能をよりよく活用しなければなりませんでした。 変換エラーが発生するたびに、通常はわかりますが、 というエラーが表示されます。 "行51エラー: 'long double'を 'long double *'に '1'から ' long double Cramer_3x3(long double *、long double(*)[3]、int) '"C++は引数 '1'〜 'long'の 'long double'を 'long double *'に変換できません。

#include <iostream> 

using namespace std; 

long double Determinant_3x3(long double matrix_3x3[3][3]) 
{ 
    long double determinant; 
    determinant = matrix_3x3[0][0] * matrix_3x3[1][1] * matrix_3x3[2][2] + matrix_3x3[0][1] * matrix_3x3[1][2] * matrix_3x3[2][0] + matrix_3x3[0][2] * matrix_3x3[1][0] * matrix_3x3[2][1] - matrix_3x3[0][2] * matrix_3x3[1][1] * matrix_3x3[2][0] - matrix_3x3[0][1] * matrix_3x3[1][0] * matrix_3x3[2][2] - matrix_3x3[0][0] * matrix_3x3[1][2] * matrix_3x3[2][1]; 
    return determinant; 
} 

long double Cramer_3x3(long double d[3], long double matrix_3x3[3][3], int step) 
{ 
long double result; 

if(step == 0){ 
    long double matrix_3x3d[3][3] = {d[0], matrix_3x3[0][1], matrix_3x3[0][2], d[1], matrix_3x3[1][1], matrix_3x3[1][2], d[2], matrix_3x3[2][1], matrix_3x3[2][2]}; 
    result = Determinant_3x3(matrix_3x3d)/Determinant_3x3(matrix_3x3); 
} 

else if(step == 1){ 
    long double matrix_3x3d[3][3] = {matrix_3x3[0][0], d[0], matrix_3x3[0][2], matrix_3x3[1][0], d[1], matrix_3x3[1][2], matrix_3x3[2][0], d[2], matrix_3x3[2][2]}; 
    result = Determinant_3x3(matrix_3x3d)/Determinant_3x3(matrix_3x3); 
} 

else{ 
    long double matrix_3x3d[3][3] = {matrix_3x3[0][0], matrix_3x3[0][1], d[0], matrix_3x3[1][0], matrix_3x3[1][1], d[1], matrix_3x3[2][0], matrix_3x3[2][1], d[2]}; 
    result = Determinant_3x3(matrix_3x3d)/Determinant_3x3(matrix_3x3); 
} 

return result; 
} 

int main() 
{ 
long double d[3], matrix_3x3[3][3], result[3]; 

cout << "Voer een 3x3 matrix in.\n"; 
for(int i = 0; i < 3; i++){ 
    for(int j = 0; j < 3; j++){ 
     cin >> matrix_3x3[i][j]; 
    } 
} 
cout << "Voer d1, d2 en d3 in.\n"; 
for(int k = 0; k < 3; k++){ 
    cin >> d[k]; 
    result[k] = Cramer_3x3(d[3], matrix_3x3[3][3], k); //line 51, where the error happens 
} 



cout << "Het ingevoerde stelsel ziet er zo uit.\n" << matrix_3x3[0][0] << "x + " << matrix_3x3[0][1] << "y + " << matrix_3x3[0][2] << "z = " << d[0] << endl << matrix_3x3[1][0] << "x + " << matrix_3x3[1][1] << "y + " << matrix_3x3[1][2] << "z = " << d[1] << endl << matrix_3x3[2][0] << "x + " << matrix_3x3[2][1] << "y + " << matrix_3x3[2][2] << "z = " << d[2] << endl << "x = " << result[0] << "\ny = " << result[1] << "\nz = " << result[2] << endl; 

return 0; 
} 

私はGNU GCCコンパイラを使用しています:

は、ここに私のコードです。

私は似たような質問をしましたが、助けにはなりませんでした。あなたが特定の渡している

+0

であるべきあなたのエラーメッセージがどこかで、あなたが言っていることを述べていますコンパイラは 'long double'を*ポインタ*に変換して' long double'に変換します。これはどこかのタイプミスかもしれません。 –

答えて

1

(未定義の)あなたの関数へのあなたの配列のインデックスの代わりに、配列自体

result[k] = Cramer_3x3(d[3], matrix_3x3[3][3], k) 

result[k] = Cramer_3x3(d, matrix_3x3, k) 
関連する問題