J'essaye d'écrire un programme qui peut calculer le déterminant de n'importe quelle matrice NxN indépendamment de la taille mais il y a quelque chose de mal avec le programme se bloque pour toute matrice avec une taille supérieure à 1.Utilisation de la récursivité et allocation dynamique de mémoire de tableaux multidimensionnels pour trouver le déterminant d'une matrice NxN
Je serais très reconnaissant à tous ceux qui peuvent me dire ce que je fais mal. Je suis nouveau à C++ et de la mémoire dynamique ainsi, prendre facile sur moi s'il vous plaît (:.
Voici mon programme:
#include <iostream>
using namespace std;
int determinant(int *matrix[], int size);
void ijMinor(int *matrix[], int *minorMatrix[], int size, int row, int column);
int main()
{
int size;
cout << "What is the size of the matrix for which you want to find the determinant?:\t";
cin >> size;
int **matrix;
matrix = new int*[size];
for (int i = 0 ; i < size ; i++)
matrix[i] = new int[size];
cout << "\nEnter the values of the matrix seperated by spaces:\n\n";
for(int i = 0; i < size; i++)
for(int j = 0; j < size; j++)
cin >> matrix[i][j];
cout << "\nThe determinant of the matrix is:\t" << determinant(matrix, size) << endl;
return 0;
}
int determinant(int *matrix[], int size){
if(size==1)return matrix[0][0];
else{
int result=0, sign=-1;
for(int j = 0; j < size; j++){
int **minorMatrix;
minorMatrix = new int*[size-1];
for (int k = 0 ; k < size-1 ; k++)
matrix[k] = new int[size-1];
ijMinor(matrix, minorMatrix, size, 0, j);
sign*=-1;
result+=sign*matrix[0][j]*determinant(minorMatrix, size-1);
for(int i = 0; i < size-1; i++){
delete minorMatrix[i];
}
}
return result;
}
}
void ijMinor(int *matrix[], int *minorMatrix[], int size, int row, int column){
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
if(i < row){
if(j < column)minorMatrix[i][j] = matrix[i][j];
else if(j == column)continue;
else minorMatrix[i][j-1] = matrix[i][j];
}
else if(i == row)continue;
else{
if(j < column)minorMatrix[i-1][j] = matrix[i][j];
else if(j == column)continue;
else minorMatrix[i-1][j-1] = matrix[i][j];
}
}
}
}
Je suggère d'abord de refactoring pour utiliser [std :: vector] (http://www.cplusplus.com/reference/vector/vector/), au lieu de tableaux basés sur la mémoire dynamique, pour éliminer le besoin de 'nouveau' et 'delete'. –
Toujours utiliser 'delete []' quand vous avez fait 'new []'. – molbdnilo
Merci pour l'aide .. Le programme fonctionne maintenant – theintegral