Red de conocimiento informático - Conocimiento del nombre de dominio - ¡Urgente! ¡urgente! ¡urgente! ! ! Le ruego a un experto en programación que me ayude a implementar una clase matricial usando C++ (en matrices generales, el número de filas y columnas no necesariamente son iguales), ¡urgente!

¡Urgente! ¡urgente! ¡urgente! ! ! Le ruego a un experto en programación que me ayude a implementar una clase matricial usando C++ (en matrices generales, el número de filas y columnas no necesariamente son iguales), ¡urgente!

Alguien pareció hacer la misma pregunta ayer:

#include

#include

usando espacio de nombres estándar;

clase Cmatrix

{

público:

Cmatrix();

Cmatrix(Cmatrix &x );

Cmatrix(int ​​​​i,int j,doble a[]);

~Cmatrix();

doble getA(int, int); //Obtener elementos de la matriz

int getH();

int getL();

double* getpt();

double getHL_value();//Calcular el valor del determinante

bool isOdd();//Matriz singular

Cmatrix inv();//Inversa

void setpt(double*);//Establecer el valor del elemento de matriz

Cmatrix T();//Transponer

privado:

int H; // Número de filas de la matriz

int L;//Número de columnas de la matriz

double* pt;//El valor de la matriz se almacena en forma de uno -matriz dimensional

} ;

Cmatrix::Cmatrix()

{

H=0;

L=0;

pt=NULL;

}

Cmatrix::Cmatrix(int ​​​​i,int j,doble a[])

{

H=i;

L=j;

pt=a;

}

Cmatrix::~Cmatrix()

{

}

void Cmatrix::setpt(doble* p)

{

pt=p ;

}

bool Cmatrix::isOdd()

{

if (abs (getHL_value()) < 0.000000001) devuelve verdadero; de lo contrario, devuelve falso;

}

doble* Cmatrix::getpt()

{

return pt;

}

int Cmatrix::getH()

{

return H;

}

int Cmatrix::getL()

{

return L;

}

doble Cmatrix::getA(int i ,int j)

{

//return *(pt+(i-1)*H+(j-1) );

return pt[( i-1)*H+(j-1)];

}

Cmatrix::Cmatrix(Cmatrix &x)

{

pt=nuevo doble[x.getH()*x.getL()];

<

p> largo i;

for (i=0;i

{

pt [i]=x.getpt()[i];

}

H=x.getH();

L=x.getL() ;

}

Cmatrix Cmatrix::T()

{

Cmatrix temp(L,H,NULL); p>

doble *p;

p=nuevo doble[H*L];

int i,j;

for (i =0 ;i

{

para (j=0;j

{

p [i*H+j]=pt[j*L+i];

}

}

temp.setpt(p);

p=NULL;

temperatura de retorno;

}

doble Cmatrix::getHL_value()

{

doble max,temp,a;

doble num=1;

doble *p;

p=nuevo doble[H *H ];

int maxid;

int i,j,k,s,n;

int flag=1;

para (i=0;i

{

p[i]=pt[i];

}

for(i=0;i

{

max=fabs(p[i*H+i]);

maxid=i;

for(s=i+1;s<=H-1;s++)

{

si( fabs( p[s*H+i])>max)

{

max=fabs(p[s*H+i]);

maxid= s;

}

}

si(max==0)

devuelve 0;

if (maxid!=i)

{ bandera=bandera*(-1);

for(n=i;n<=H-1;n++)

{

temp=p[maxid*H+n];

p[maxid*H+n]=p[i*H+n];

p[i*H+n]=temp;

}

}

for(j=i+1;j<= H- 1;j++)

{

a=-p[j*H+i]/p[i*H+i];

para (k =i;k<=H-1;k++)

{

p[j*H+k]=p[j*H+k]+a*p [i *H+k];

}

}

}

for(i=0;i<=H- 1; i++)

{

num=num*p[i*H+i];

}

eliminar [] p;

volver

rn bandera*num;

}

Cmatrix Cmatrix::inv()

{

int i,j,k,n ;

int chax=0,chay=0;

doble suma;

doble *p;

doble *q; /p>

p=nuevo doble[H*H];

q=nuevo doble[(H-1)*(H-1)];

Cmatrix temp1 (H,H,NULL);

Cmatrix temp2(H-1,H-1,NULL);

add=1/this->getHL_value();

para(k=0;k

{

para(n=0;n

{

for(i=0;i

{

si(i

chax=0;

else

chax=1;

for(j=0;j

{

if(j

chay=0;

else

chay=1;

q[i*(H-1)+j]=pt[(i+chax)*H+(j+chay)];

}

}

temp2.setpt(q);

p[n*H+k]=pow(-1.0,k+n)*add*temp2.getHL_value();

}

}

temp1.setpt(p);

eliminar []q;

devolver temp1;

}