Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- using namespace std;
- class Matriz {
- private:
- int nLinha, nColuna;
- double* m;
- public:
- Matriz( int nLinha, int nColuna ):nLinha(nLinha), nColuna(nColuna),m(new double[nLinha*nColuna] ) {
- for( int i = 0; i < nLinha*nColuna; i++ ) m[i] = 0;
- }
- public:
- class Linha {
- private:
- Matriz& ma;
- int linha;
- int col;
- public:
- Linha( Matriz& ma, int linha ): ma(ma), linha(linha),col(0) {}
- double& operator[] (int coluna) {
- return ma.at( linha, coluna );
- }
- void imprime(Matriz ma,ostream& o ) {
- cout << "Linha " << linha << ":";
- for( int j = 0; j < ma.nColuna; j++ ) cout << " " << ma.m[linha*ma.nColuna + j];
- cout << endl;
- }
- Linha& operator= (double valor ) {
- ma.m[linha*ma.nColuna + col] = valor;
- col++;
- return *this;
- }
- Linha& operator, (double valor ) {
- if(col<ma.nColuna){
- ma.m[linha*ma.nColuna + col] = valor;
- col++;
- }
- return *this;
- }
- };
- int getNumeroLinhas(const Matriz& x){
- return x.nLinha;
- }
- int getNumeroColunas(const Matriz& x){
- return x.nColuna;
- }
- Linha operator [] ( int linha ) {
- return Linha( *this, linha );
- }
- Linha operator , ( int linha ) {
- return Linha( *this, linha );
- }
- double& at( int linha, int coluna ) {
- return m[linha*nColuna + coluna];
- }
- double& e( int l, int c ) {
- if( l < nLinha && c < nColuna ) return m[l*nColuna + c];
- else {
- cout << "Limite Ultrapassado" << endl;
- exit(0);
- }
- }
- Matriz operator+ (const Matriz x){
- if ( x.nLinha != nLinha )
- {
- cout<<"Erro ao somar: Numero Linhas diferentes"<<endl;
- exit(0);
- }
- if (x.nColuna != nColuna)
- {
- cout<<"Erro ao somar: Numero de colunas diferentes"<<endl;
- exit(0);
- }
- Matriz temp(nLinha,nColuna);
- for (int i = 0; i < nLinha; i++)
- {
- for (int j=0; j < nColuna; j++)
- {
- temp.m[i*nColuna + j] = x.m[i*nColuna + j]+ m[i*nColuna + j];
- }
- }
- return temp;
- }
- Matriz operator- (const Matriz x){
- if ( x.nLinha != nLinha )
- {
- cout<<"Erro ao subtrair: Numero Linhas diferentes"<<endl;
- exit(0);
- }
- if (x.nColuna != nColuna)
- {
- cout<<"Erro ao subtrair: Numero de colunas diferentes"<<endl;
- exit(0);
- }
- Matriz temp(nLinha,nColuna);
- for (int i = 0; i < nLinha; i++)
- {
- for (int j=0; j < nColuna; j++)
- {
- temp.m[i*nColuna + j] = m[i*nColuna + j] - x.m[i*nColuna + j] ;
- }
- }
- return temp;
- }
- Matriz operator* (const double valor){
- Matriz temp(nLinha,nColuna);
- for (int i = 0; i < nLinha; i++)
- {
- for (int j=0; j < nColuna; j++)
- {
- temp.m[i*nColuna + j] = m[i*nColuna + j] * valor ;
- }
- }
- return temp;
- }
- Matriz operator* (const Matriz x){
- if ( x.nColuna != nLinha )
- {
- cout<<"Erro ao multiplicar: Numero de linhas de uma matriz diferente do numero de colunas da outra"<<endl;
- exit(0);
- }
- Matriz temp(nLinha,x.nColuna);
- for (int j = 0; j < x.nColuna; j++){
- for (int i=0; i < x.nLinha; i++){
- for(int k=0;k<x.nColuna;k++){
- temp.m[j*x.nColuna + k] += m[j*x.nColuna + i] * x.m[i*x.nColuna + k] ;
- }
- }
- }
- return temp;
- }
- Matriz& operator= (const Matriz& x){
- if ( x.nLinha != nLinha )
- {
- cout<<"Erro ao atribuir: Numero linhas diferentes"<<endl;
- exit(0);
- }
- if ( x.nColuna != nColuna )
- {
- cout<<"Erro ao atribuir: Numero linhas diferentes"<<endl;
- exit(0);
- }
- for (int i = 0; i < nLinha; i++)
- {
- for (int j=0; j < nColuna; j++)
- {
- m[i*nColuna + j] = x.m[i*nColuna + j];
- }
- }
- return *this;
- }
- Matriz operator~ (){
- Matriz temp(nColuna,nLinha);
- int k =0;
- for (int i = 0; i < nLinha; i++)
- {
- for (int j=0; j < nColuna; j++)
- {
- temp.m[j*nLinha + i] = m[i*nColuna + j] ;
- }
- }
- return temp;
- }
- void imprime( ostream& o ) {
- for( int i = 0; i < nLinha; i++ ) {
- cout << "Linha " << i << ":";
- for( int j = 0; j < nColuna; j++ ) cout << " " << m[i*nColuna + j];
- cout << endl;
- }
- }
- };
- Matriz operator* (double valor,Matriz& x){
- return x*valor;
- }
- int main(int argc, char *argv[])
- {
- Matriz v( 2, 3 );
- Matriz u( 3, 2 );
- Matriz w( 2, 3 );
- Matriz z( 2, 2 );
- v[0] = 1,1,1;
- v[1][0] = 2;
- v[1][1] = 2;
- v[1][2] = 2;
- u[0] = 3,3;
- u[1] = 4,4;
- z[0] = 5,5;
- z[1] = 6,6;
- w = 3*v;
- v.imprime(cout);
- cout<<endl;
- u.imprime(cout);
- cout<<endl;
- w.imprime(cout);
- cout << endl;
- //w.imprime(cout);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement