wtorek, 4 listopada 2014

#include "macierz.h"
#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