Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ios>
- #include <vector>
- #include <iostream>
- #include <iomanip>
- using namespace std;
- #define TYPE int
- #define line vector<TYPE>
- #define matrix vector<line>
- #define DEBUG(args) // cout << args << endl
- #define DEBUG2(args) cout << args << endl
- class diagonMatrix{
- public:
- diagonMatrix( int dim );
- diagonMatrix( matrix );
- int index( int i, int j );
- void edit( int i, int j, TYPE value );
- void print();
- matrix data;
- };
- int main(){
- matrix razr = { {1, 0, 0, 0, 0, 0, 0},
- {0, 2, 8, 9, 0, 0, 0},
- {0, 8, 3, 0, 0, 0, 0},
- {0, 9, 0, 4, 10,0, 0},
- {0, 0, 0, 10,5, 11,12},
- {0, 0, 0, 0, 11,6, 0},
- {0, 0, 0, 0, 12,0, 7} };
- /*
- matrix razr = { {1,2,3},
- {4,5,6},
- {7,8,9} };
- */
- int len = razr.size();
- diagonMatrix M1( razr );
- diagonMatrix M2( razr );
- diagonMatrix M3( razr.size() );
- for( int i = 0; i < len; i++ ){
- for( int j = 0; j < len; j++ ){
- M3.edit(i, j, 0);
- for( int k = 0; k < len; k++ ){
- int E1 = M1.index(i, k);
- int E2 = M2.index(k, j);
- int E3 = M3.index(i, j);
- M3.edit(i, j, E1*E2+E3);
- }
- }
- }
- M3.print();
- }
- diagonMatrix::diagonMatrix( int dim ){
- for( int i = 0; i < dim; i++ ){
- data.push_back(line());
- }
- }
- diagonMatrix::diagonMatrix( matrix m ){
- int len = m.size();
- line tmp;
- for( int i = 0; i < len; i++ ){
- tmp.push_back(0);
- }
- for( int i = 0; i < len; i++ ){
- data.push_back(tmp);
- }
- for( int i = 0; i < len; i++ ){
- for( int j = 0; j < len; j++ ){
- int I = 1-len + i + j;
- int J = j;
- int elem = 0;
- if( I >= 0 ){
- elem = m[I][J];
- }
- data[j][i] = elem;
- }
- }
- matrix data_copy = data;
- for( int i = 0; i < len; i++ ){
- bool empty_row = true;
- for( int j = 0; j < len; j++ ){
- if( data[j][i] != 0 ){
- empty_row = false;
- }
- }
- if( !empty_row ){
- break;
- }else{
- for( int j = 0; j < len; j++ ){
- data_copy[j].erase( data_copy[j].begin() ) ;
- }
- }
- }
- data = data_copy;
- /**/
- for( int i = 0; i < data.size(); i++ ){
- for( int j = 0; j < data[i].size(); j++ ){
- cout << data[i][j] << ' ';
- } cout << endl;
- }
- }
- void diagonMatrix::print(){
- int len = data.size();
- for( int i = 0; i < len; i++ ){
- for( int j = 0; j < len; j++ ){
- cout << right << setw(4) << diagonMatrix::index(i, j) << ' ';
- }
- cout << endl;
- }
- }
- int diagonMatrix::index( int i, int j ){
- int len = data.size();
- int depth = data[0].size();
- if( i < j ){
- int tmp = i;
- i = j;
- j = tmp;
- }
- int di = i - j;
- int I = i;
- int J = depth - di - 1;
- int elem = 0;
- if( J >= 0 )
- elem = data[I][J];
- return elem;
- }
- void diagonMatrix::edit( int i, int j, int val ){
- int len = data.size();
- int depth = data[0].size();
- if( i < j ){
- int tmp = i;
- i = j;
- j = tmp;
- }
- int di = i - j;
- int I = i;
- int J = depth - di - 1;
- while( J < 0 ){
- for( int i = 0; i < data.size(); i++ )
- data[i].insert( data[i].begin(), 0 );
- J++;
- }
- data[I][J] = val;
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement