Z
Z1ppeR
Вот пример консольной программы на C++ :
Сам не до конца понимаю всё, но здесь исп. двойные указатели для того, чтобы определить квадратную матрицу. Проблема в том, что фактические данные не вводятся и определитель всегда равен 0! Как их ввести (например, заполнить случ. числами)?
Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>
int** csmatr(int**,int); // --- Функция создания и вывода матрицы -------
double determinant(int**,int); // --- Функция вычисления определителя ---------
void main(void)
{
int **a,i,N,**matr;
// -------------------- Указываем порядок матрицы ------------------------ //
clrscr();
cout<<"Введите порядок матрицы: "; cin>>N;
cout<<'\n';
// -------------------- Создание матрицы и вывод ее на экран ------------- //
a=csmatr(matr,N);
// -------------------- Вывод определителя на экран ---------------------- //
cout<<"Определитель матрицы = "<<determinant(a,N);
// -------------------- Освобождение памяти ------------------------------ //
for (i=0;i<=N-1;i++) delete a[i];
delete a;
getch();
}
/*---------------------------------------------------------------------------
Функция создания матрицы (обязательно должен быть динамический массив)
---------------------------------------------------------------------------*/
int** csmatr(int **matr,int N)
{
int i,j;
// -------------------- Формирование строк матрицы ----------------------- //
matr=new int*[N];
// -------------------- Формирование столбцов матрицы -------------------- //
for (i=0;i<=N-1;i++) {matr[i]=new int[N];}
return matr;
}
/*---------------------------------------------------------------------------
Функция вычисления определителя (должна быть обязательно рекурсия)
---------------------------------------------------------------------------*/
double determinant(int **a, int N)
{
int i,j;
int **matr1;
/* int sign=1;*/
double determ=0;
if (N==2)
{
determ=a[0][0]*a[1][1]-a[0][1]*a[1][0];
}
else
{
matr1=new int*[N-1];
for(i=0;i<N;i++)
{
for(j=0;j<N-1;j++)
{
if(j<i) {matr1[j]=a[j];}
else {matr1[j]=a[j+1];}
}
determ+=pow(-1,(i+j))*determinant(matr1,N-1)*a[i][N-1];
}
delete matr1;
}
return determ;
cout<<'\n';
}
Сам не до конца понимаю всё, но здесь исп. двойные указатели для того, чтобы определить квадратную матрицу. Проблема в том, что фактические данные не вводятся и определитель всегда равен 0! Как их ввести (например, заполнить случ. числами)?