#include <iostream>
using namespace std;
Macierz::~Macierz()
{
for(int i=0;i<a;++i)//a bo destruktor jest polem w klasie
delete [] macierz [i];
delete [] macierz;
}
Macierz::Macierz(int w, int k)
{
macierz=new double *[w];
for(int i=0; i<w; ++i)
macierz[i]=new double [k];
/*for(int x=0;x<w;++x)
{for(int y=0;y<k;++y)
macierz[x][y]=0;
}
*/
a=w;
b=k;
sztuczna=1;
}
Macierz::Macierz(Macierz&A)//tak jakby macierz D=A;
{macierz=new double *[a];
for(int i=0; i<a; ++i)
macierz[i]=new double [b];
a=A.a;
b=A.b;//podajemy wymiary D
sztuczna=1;//bo my powolujemy macierz D do zycia
for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
macierz[i][j]=A.macierz[i][j];
}
istream& operator >>(istream &in,Macierz &A)
{for(int i=0;i<A.a;++i)
{cout<<i+1<<":";
for(int j=0;j<A.b;++j)
{in>>A.macierz[i][j];
}
}
return in;
}
ostream& operator << (ostream &out,Macierz &A)
{for(int i=0;i<A.a;++i)
{for(int j=0;j<=A.b-1;++j)
{out<<A.macierz[i][j]<<" ";
if(j==A.b-1) cout<<"\n";
}
}
return out;
}
void Macierz::zmiana(int w, int k, double n)
{macierz[w][k]=n;
}
double Macierz::det()
{if(a==b)
{if(a==1) return macierz[0][0];
double wynik=0;
for(int i=0;i<b;++i)
if(macierz[0][i]!=0)
{cout<<"\n"<<wynik<<"\n";
Macierz M(a-1,a-1);
for(int w=0;w<a-1;++w)
for(int k=0;k<a-1;++k)
{
if(i>k)
M.macierz[w][k]=macierz[w+1][k];
if(i<=k)
M.macierz[w][k]=macierz[w+1][k+1];
}
cout<<"\n"<<M;
wynik+=(((i%2)==0) ? 1 : (-1))*macierz[0][i]*M.det();
}
return wynik;
}
else cout<<"B³¹d";
if(sztuczna==0) delete this;
}
Macierz& Macierz::operator=(Macierz &M)
{if((a==M.a)&&(b==M.b))//rowne wymiary
{for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
macierz[i][j]=M.macierz[i][j];
}
else
cout<<"Nie udalo sie przypisac";
return *this;//bo obiekt niejawny
}
Macierz& Macierz::operator+ (Macierz&A)
{if((a==A.a)&&(b==A.b))
{Macierz *S;
S=new Macierz(a,b);
for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
(*S).macierz [i][j]=macierz[i][j]+A.macierz[i][j];
}//czy sa sztuczne i jak tak to usunac
}
/*
Macierz& Macierz::operator- (Macierz&A)
{if((a==A.a)&&(b==A.b))//rowne wymiary
{Macierz *S;
S=new Macierz(a,b);
for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
S macierz [i][j]=macierz[i][j]-A.macierz[i][j];
}
}
Macierz& Macierz::operator* (Macierz&A)
{if((a==A.a)&&(b==A.b)&&(a==b))//rowne wymiary
{Macierz *S;
S=new Macierz(a,b);
for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
for(int k=0;k<a;++k)
S macierz[i][j]=macierz[i][k]*A.macierz[k][j];
}
}
Macierz& operator* (double a, Macierz&A)
{for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
macierz[i][j]=macierz[a*i][a*j];
}
Macierz& Macierz::operator* (double a);
{for(int i=0;i<a;++i)
for(int j=0;j<b;++j)
macierz[i][j]=macierz[a*i][a*j];
}
*/
Brak komentarzy:
Prześlij komentarz