Помощь - Поиск - Пользователи - Календарь
Полная версия: Определитель матрицы - рекурсия?
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Unknown
Задание такое:
9. Создать класс Matrix для работы с квадратными матрицами. Обязательно должны быть реализованы: операции сложения, умножения, умножения на скаляр, транспонирования и вычисления определителя.
Все работает правильно, кроме определителя...
Вот, что я сделал:

class Matrix {
public:
int n; //Ðàçìåðíîñòü ìàòðèöû n - размерность матрицы + 1

...

int Array[10][10]; //Ñàìà ìàòðèöà
int Opr(){ //íàõîæäåíèå îïðåäåëèòåëÿ ìàòðèöû
int d=0; //d=E(aij*Aij)
if (this->n==3) return (this->Array[1][1])*(this->Array[2][2])-(this->Array[1][2])*(this->Array[2][1]);
else
for (int i=1; i<(this->n); i++)
for (int j=1; j<(this->n); j++)
d+=(this->Add(i,j))*(this->Array[i][j]);
return d;
};

int Add(int k,int l){ //äîïîëíåíèå k,l
Matrix C;
C.n=(this->n)-1;
int i,j;
for (int i=1; i<k; i++){
for (int j=1; j<l; j++)
C.Array[i][j]=this->Array[i][j];
for (j=l+1; j<(this->n); j++)
C.Array[i][j-1]=this->Array[i][j];
};
for (i=k+1; i<(this->n); i++){
for (j=1; j<l; j++)
C.Array[i-1][j]=this->Array[i][j];
for (j=l+1; j<(this->n); j++)
C.Array[i-1][j-1]=this->Array[i][j];
};
if ((k+l)%2==1) return ((-1)*(C.Opr()));
else return (C.Opr());
};

...

};



А обращаюсь к этим функциям так:


Form1->Edit2->Text=IntToStr(A.Opr());


В результате для матриц 2х2 работает нормально smile.gif, а для матриц с большей размерностью выдает некоторое число, которое не является определителем матрицы...

Кстати, а как определитель матрицы по-английски звучит?
klem4
В следующай раз пользуйся поиском. Вот тут есть решение на Паскале, перевести сможешь ?

Массивы. Матрицы. Типичные задачи.
Unknown
Постараюсь. Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.