2016-03-22 20 views
-1

Programlama ve C++ için çok yeni ve bir sistemi çözmek için Cramer kuralını kullanmam gereken bir atamam var . Her şey yolundaydı ve işe yaradı, ama fonksiyonları daha iyi kullanmak zorundaydım. İşlevleri kullandığım her defasında, dönüştürme hatalarıyla karşılaşıyorum, genellikle bunu çözebilirim, ancak "satırı 51 hatası diyerek bir hata oluştu: '1' - 'argümanı için' uzun çift '-' uzun çift * 'dönüştüremiyor uzun çift Cramer_3x3 (uzun çift *, uzun çift (*) [3], int) '".C++ 'uzun' çiftini '1' - 'uzun' için '1' 'uzun' için '' dönüştüremiyor '' uzun

#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; 
} 

Ben GNU GCC derleyicisi kullanıyorum:

İşte benim kodudur.

Yardımı büyük bir memnuniyetle karşılayacağım, benzer sorulara baktım ama çok yardımcı olmadı.

+0

Kişisel hata mesajı bir yere anlatıyorsun söylüyor 'long double' bir' işaretçiye * 'uzun double' dönüştürmek için derleyici. Bu bir yerlerde bir yazım hatası olabilir. –

cevap

1

Sen

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

olmalı yerine dizinin kendisi için işleve bir özgü senin dizinin (tanımsız) endeksi geçiyoruz

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