PDA

Visualizza la versione completa : [C++] Problema matrici


XXXVXXXZ
16-03-2008, 14:56
Sto realizzando un programma in visual c++ con le matrici....
Ho utilizzato la seguente funzione per il calcolo del determinante



void determinante()
{

float matrice[10][10];
int rig,col;
int i,j;

system("CLS");

do{
cout<<"Inserisci il numero di righe della matrice: "<<endl;
cin>>rig;
}while(rig<=0);

do{
cout<<"\nInserisci il numero di colonne della matrice: "<<endl;
cin>>col;
}while(col<=0);

for(i=1;i<=rig;i++){
for(j=1;j<=col;j++){
cout<<"Inserire l'elemento ["<<i<<"]["<<j<<"]"<<endl;
cin>>matrice[i][j];
}
}
cout<<"\nLa matrice inserita e':\n\n"<<endl;
for(i=1;i<=rig;i++){
cout<<"\n";
for(j=1;j<=col;j++){
cout<<matrice[i][j]<<" ";
}
}

cout<<"\n\n";
system("pause");
system("CLS");
i=0;
j=0;
float det,q,w,e,r,t,u,o,p,d,f,g,z;

if (rig==col)
{
switch (rig)
{
case 1:
//matrice 1 x 1
system("CLS");
cout << " Il determinante della matrice e': ";
cout << matrice[i][j];
break;
case 2: //matrice 2 x 2
det=((matrice[0][0]*matrice[1][1])-(matrice[1][0]*matrice[0][1]));
system("CLS");
cout << " Il determinante della matrice e': ";
cout << det;
break;
case 3: //matrice 3 x 3
q=(matrice[0][0]*matrice[1][1]*matrice[2][2])+(matrice[0][1]*matrice[1][2]*matrice[2][0])+(matrice[0][2]*matrice[1][0]*matrice[2][1]);
w=(matrice[0][2]*matrice[1][1]*matrice[2][0])+(matrice[0][0]*matrice[1][2]*matrice[2][1])+(matrice[0][1]*matrice[1][0]*matrice[2][2]);
det=q-w;
system("CLS");
cout << " Il determinante della matrice e': ";
cout << det;
break;
case 4: //matrice 4 x 4
q= ( matrice[1][1] * (( matrice[2][2] * matrice[3][3]) - ( matrice[3][2] * matrice[2][3] )));
w= ( matrice[1][2] * ((matrice[2][1] * matrice[3][3]) - (matrice[3][1] * matrice[2][3])));
e= ( matrice[1][3] * ((matrice[2][1] * matrice[3][2]) - (matrice[3][1] * matrice[2][2])));
r= ( matrice[1][0] * ((matrice[2][2] * matrice[3][3]) - (matrice[3][2] * matrice[2][3])));
t= ( matrice[1][2] * ((matrice[2][0] * matrice[3][3]) - (matrice[3][0] * matrice[2][3])));
u= ( matrice[1][3] * ((matrice[2][0] * matrice[3][2]) - (matrice[3][0] * matrice[2][2])));
o= ( matrice[1][0] * ((matrice[2][1] * matrice[3][3]) - (matrice[3][1] * matrice[2][3])));
p= ( matrice[1][1] * ((matrice[2][0] * matrice[3][3]) - (matrice[3][0] * matrice[2][3])));
d= ( matrice[1][3] * ((matrice[2][0] * matrice[3][1]) - (matrice[3][0] * matrice[2][1])));
f= ( matrice[1][0] * ((matrice[2][1] * matrice[3][2]) - (matrice[3][1] * matrice[2][2])));
g= ( matrice[1][1] * ((matrice[2][0] * matrice[3][2]) - (matrice[3][0] * matrice[2][2])));
z= ( matrice[1][2] * ((matrice[2][0] * matrice[3][1]) - (matrice[3][0] * matrice[2][1])));
det=((matrice[0][0] * (q-w+e))-(matrice[0][1] * (r-t+u)) + (matrice[0][2] * (o-p+d)) - (matrice[0][3] * (f-g+z)));
system("CLS");
cout << " Il determinante della matrice e': ";
cout << det;
break;
default:
cout<< "ERRORE: Massimo 4 righe e 4 colonne\n";
}
}
else //le righe sono diverse dalla colonne
{
cout<<" ERRORE: la matrice deve essere quadrata\n";
}
if (((rig>=5)||(rig<=0))&&((rig>=5)||(rig<=0))) {
cout<<" ERRORE: il valore massimo sopportato e' 4 x 4\n";
}
cout<<"\n\n";
system("pause");
system("CLS");
}


Il risultato per errato...
Se per esempio inserisco una matrice 2 X 2
1 2
2 1

Come risultato ottengo -1.15292e+016


Ki in grado d aiutarmi....grazie

br0tz
16-03-2008, 17:10
scusa, non ho letto bene tutto, pero' mi sembra che nella parte di input usi indici (i,j) che partono da 1.. mentre nel calcolo del determinante assumi che partano da 0...

sbaglio ?;)

XXXVXXXZ
16-03-2008, 19:14
B in effetti hai ragione ora provo a modificarlo!!! grazie

LeleFT
17-03-2008, 10:00
Ricorda che il linguaggio va sempre indicato nel titolo (l'ho aggiunto io) e che il codice va postato all'interno dei tag [ CODE ] per evitare che, come nel tuo caso, il tutto risulti un miscuglio semi-illeggibile.


Ciao. :ciauz:

MacApp
17-03-2008, 11:53
Dovresti cercare di realizzare un algoritmo indipendente dalle dimensioni della matrice..

Loading