diff options
author | Patrick Simianer <p@simianer.de> | 2014-06-15 03:50:12 +0200 |
---|---|---|
committer | Patrick Simianer <p@simianer.de> | 2014-06-15 03:50:12 +0200 |
commit | 258e1b92ebbfdebefabc120969ab87c3d8b75c3d (patch) | |
tree | ef4ab11fe0bf9d720cea23b35711358a8465feeb /c,cc/matrix.cc | |
parent | cf3a29feb5887344b6633ead1b4b6d5657a15a4b (diff) |
old c,cc examples
Diffstat (limited to 'c,cc/matrix.cc')
-rw-r--r-- | c,cc/matrix.cc | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/c,cc/matrix.cc b/c,cc/matrix.cc new file mode 100644 index 0000000..9d1a1c0 --- /dev/null +++ b/c,cc/matrix.cc @@ -0,0 +1,210 @@ +#include <iostream> +#include <stdlib.h> + +using namespace std; + + +class MyMatrix +{ + public: + MyMatrix(int dimension); + MyMatrix(int rows, int columns); + ~MyMatrix(); + + void print(); + int get_rows(); + int get_columns(); + + double get_element(int row, int column); + void set_element(int row, int column, double value); + + MyMatrix operator + (MyMatrix A); + MyMatrix operator * (MyMatrix A); + void operator = (MyMatrix A); + + + private: + double* m; + int row_d; + int col_d; + int d; +}; + +MyMatrix::MyMatrix(int dimension) +{ + row_d = dimension; + col_d = dimension; + d = dimension*dimension; + m = new double[d]; + + unsigned int k=0; + for(unsigned int i=0; i<row_d; i++) { + for(unsigned int j=0; j<col_d; j++) { + if(i==j) { + m[k] = 1; + } else { + m[k] = 0; + } + k++; + } + } +} + +MyMatrix::MyMatrix(int rows, int columns) +{ + row_d = rows; + col_d = columns; + d = rows*columns; + m = new double[d]; + + + srand(time(NULL)); + for(unsigned int i=0; i<d; i++) { + m[i] = 1+(rand()%(100-1+1)); + } +} + +MyMatrix::~MyMatrix() +{ + delete[] m; +} + +void MyMatrix::print() +{ + unsigned int k=0; + for(unsigned int i=0; i<row_d; i++) { + for(unsigned int j=0; j<col_d; j++) { + cout << m[k] << " "; + k++; + } + cout << endl; + } +} + +int MyMatrix::get_rows() +{ + return row_d; +} + +int MyMatrix::get_columns() +{ + return col_d; +} + + +double MyMatrix::get_element(int row, int column) +{ + // first element is 1,1! + if((row*column)<=0) { + return -1; + } + return m[((row-1)*col_d)+(column-1)]; +} + +void +MyMatrix::set_element(int row, int column, double value) +{ + if((row*column)>0) { + m[((row-1)*col_d)+(column-1)] = value; + } +} + + +MyMatrix +MyMatrix::operator + (MyMatrix A) +{ + MyMatrix* res = new MyMatrix(row_d, col_d); + + unsigned int k=0; + for(unsigned int i=0; i<row_d; i++) { + for(unsigned int j=0; j<col_d; j++) { + res->m[k] = m[k]+A.get_element(i+1, j+1); + k++; + } + } + + return *res; +} + +MyMatrix MyMatrix::operator * (MyMatrix A) +{ + MyMatrix* res = new MyMatrix(row_d, col_d); + + unsigned int k=0; + for(unsigned int i=0; i<row_d; i++) { + for(unsigned int j=0; j<col_d; j++) { + res->m[k] = m[k]*A.get_element(i+1, j+1); + k++; + } + } + + return *res; +} + +void MyMatrix::operator = (MyMatrix A) +{ + unsigned int k=0; + for(unsigned int i=0; i<A.get_rows(); i++) { + for(unsigned int j=0; j<A.get_columns(); j++) { + m[k] = A.get_element(i+1, j+1); + k++; + } + } +} + + +int main (int argc, char* const argv[]) { + cout << "9x9 identity matrix:" << endl; + MyMatrix* m = new MyMatrix(9); + m->print(); + + cout << " rows: " << m->get_rows() << ", "; + cout << "columns: " << m->get_columns() << endl; + + delete m; + + + cout << endl << "2x5 matrix:" << endl; + MyMatrix n(2,5); + n.print(); + + cout << " rows: " << n.get_rows() << ", "; + cout << "columns: " << n.get_columns() << endl; + + cout << "(1,3) = " << n.get_element(1,3) << endl; + + cout << "last: (2,5) = " << n.get_element(2,5) << endl; + + cout << "second to last element = 100: " << endl; + n.set_element(2, 4, 100); + n.print(); + + cout << endl << "addition:" << endl; + cout << "matrix 1:" << endl; + MyMatrix* a1 = new MyMatrix(3,3); + a1->print(); + cout << "matrix 2:" << endl; + MyMatrix* a2 = new MyMatrix(3,3); + a2->print(); + cout << "result:" << endl; + MyMatrix* e1 = new MyMatrix(3,3); + *e1 = *a1+*a2; + e1->print(); + delete e1; + + cout << endl << "multiplication" << endl; + cout << "matrix 1:" << endl; + MyMatrix* m1 = new MyMatrix(3,3); + a1->print(); + cout << "matrix 2:" << endl; + MyMatrix* m2 = new MyMatrix(3,3); + m2->print(); + cout << "result:" << endl; + MyMatrix* e2 = new MyMatrix(3,3); + *e2 = *m1 * *m2; + e2->print(); + delete e2; + + return 0; +} + |