Zadatak radi , samo mi trebaju komentari ?ta je ?ta i za ?to slu?i . Npr. ?ta je konvertor , za?to optere?enje i sl.
#include <iostream>
using namespace std;
#define MAX_REDOVA 50
#define MAX_KOLONA 50
class Matrica {
private:
int red,kol;
double** elem;
public:
void IspisMatrice();
void def(int m,int n);
void UpisMatrice();
bool kvad();
bool IstiRed(Matrica);
bool UslovProizvoda(Matrica);
Matrica T();
Matrica Saberi(Matrica);
Matrica Oduzmi(Matrica);
Matrica PomnoziSkalar(double Skalar);
Matrica Pomnozi(Matrica);
};
bool Matrica :: IstiRed (Matrica Pomocna) {
return (this->red!=Pomocna.red || this->kol!=Pomocna.kol);
}
bool Matrica::UslovProizvoda(Matrica Pomocna){
return (this->kol==Pomocna.red);
}
void Matrica::IspisMatrice(){
for (int i=0;i<red;i++){
for (int j=0;j<kol;j++)
cout<< " "<<this-> elem[i][j] ;
cout<<endl;
}
}
void Matrica::def( int m, int n){
this->red=m;
this->kol=n;
elem=new double *[m];
// rezervisanje memorije za matricu dimenzija m*n
for (int i=0;i<this->red;i++){
elem[i]=new double [n];
for (int j=0;j<this->kol;j++)
this->elem[i][j]=0;
}
}
void Matrica::UpisMatrice(){
for (int i=0;i<red;i++){
for (int j=0;j<kol;j++){
cout<< " M["<<i<<"]["<<j<<"]=";
cin>>this->elem[i][j] ;
}
}
}
bool Matrica::kvad(){
return (this->red==this->kol );
}
Matrica Matrica::T(){
Matrica T;
T.def(kol,red);
for (int i=0;i<red;i++)
for (int j=0;j<kol;j++)
T.elem[j][i]=this->elem[i][j];
return T;
}
Matrica Matrica::Saberi(Matrica Pomocna){
Matrica Saberi;
Saberi.def(red,kol);
if (this->IstiRed(Pomocna)) {
cout<<"Matrice se ne mogu sabrati jer nisu istog reda!"<<endl;
return Saberi;
}
for (int i=0;i<red;i++)
for (int j=0;j<kol;j++)
Saberi.elem[i][j]=this->elem[i][j]+Pomocna.elem[i][j];
return Saberi;
}
Matrica Matrica::Oduzmi(Matrica Pomocna){
Matrica Oduzmi;
Oduzmi.def(red,kol);
if (this->IstiRed(Pomocna)) {
cout<<"Matrice se ne mogu oduzeti jer nisu istog reda!"<<endl;
return Oduzmi;
}
for (int i=0;i<red;i++)
for (int j=0;j<kol;j++)
Oduzmi.elem[i][j]=this->elem[i][j]-Pomocna.elem[i][j];
return Oduzmi;
}
Matrica Matrica::PomnoziSkalar(double Skalar){
Matrica PomnoziSkalar ;
PomnoziSkalar.def(red,kol);
for (int i=0;i<red;i++)
for (int j=0;j<kol;j++)
PomnoziSkalar.elem[i][j]=Skalar*(this->elem[i][j]);
return PomnoziSkalar;
}
Matrica Matrica::Pomnozi(Matrica Pomocna){
Matrica Pomnozi;
Pomnozi.def(red,Pomocna.kol);
if (this->UslovProizvoda(Pomocna)) {
cout<<"Matrice se ne mogu pomnoziti jer nije zadovoljen uslov proizvoda!"<<endl;
return Pomnozi;
}
for (int i=0;i<this->red;i++)
for (int j=0;j<Pomocna.kol;j++)
for (int k=0;k<this->kol;k++)
Pomnozi.elem[i][j]=Pomnozi.elem[i][j] + this->elem[i][k]*Pomocna.elem[k][j];
return Pomnozi;
}
int main(){
Matrica M,M1;
M.def(2,3);
M.IspisMatrice();
M1.def(2,3);
M.UpisMatrice();
M.IspisMatrice();
M1.UpisMatrice();
if (M.kvad()) cout<<"Matrica je kvadratna!"<<endl;
cout<<"Transponovana matrica je:"<<endl;
Matrica Mt=M.T();
// Mt=M.T();
Mt.IspisMatrice() ;
cout<<"Druga matrica je:"<<endl;
M1.IspisMatrice();
cout<<"Zbir matrica je:"<<endl;
Matrica Ms=M.Saberi(M1);
Ms.IspisMatrice();
cout<<"Razlika matrica je:"<<endl;
Matrica Mr=M.Oduzmi(M1);
Mr.IspisMatrice();//operator dodjele za dinamicki kreiran objekat moramo preklopoiti
cout<<"Mnozenje skalara sa matricom:"<<endl;
Matrica Mps=M.PomnoziSkalar(5);
Mps.IspisMatrice();
cout<<"Proizvod matrica je:"<<endl;
Matrica Mp=M.Pomnozi(M1);
Mp.IspisMatrice();
system ("pause");
return 0;
}
[code]
[/code]