Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- using namespace std;
- class matr
- {
- public:
- static int countmatr;
- int nummatr;
- matr ();
- matr (int h, int w);
- matr (int h, int w, double **x);
- matr (matr &x);
- ~matr();
- void print();
- matr& operator +(matr &r); //сложение матриц
- friend matr& operator-(matr &l, matr &r); //вычитание
- matr& operator-(); //унарный минус
- matr& operator*(matr &r); //умножение матриц
- matr& operator*(int c); //умножение на число
- friend matr& operator*(int c, matr &r); //число на матрицу
- matr& operator=(matr &r); //присваивание
- /*void modifyvect (matr &x);*/ //друж ф-я к вект
- private:
- int height;
- int width;
- double **matrix;
- };
- int matr::countmatr=0;
- matr::matr()
- {
- countmatr++;
- nummatr=countmatr;
- height=3;
- width=3;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- matrix[i][j]=1;
- }
- cout<<endl<<"Конструктор matr () создал матрицу #"<<nummatr<<endl;
- }
- matr::matr (int h, int w)
- {
- countmatr++;
- nummatr=countmatr;
- height=h;
- width=w;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- matrix[i][j]=1;
- }
- cout<<endl<<"Конструктор matr (int, int) создал матрицу #"<<nummatr<<endl;
- }
- matr::matr (int h, int w, double **x)
- {
- countmatr++;
- nummatr=countmatr;
- width=w;
- height=h;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++) {
- for (int j=0; j<width; j++){
- matrix[i][j]=x[i][j];
- }
- }
- cout<<endl<<"Конструктор matr (int, int. double *) создал матрицу #"<<nummatr<<endl;
- }
- matr::matr (matr &x)
- {
- countmatr++;
- nummatr=countmatr;
- height=x.height;
- width=x.width;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- matrix[i][j]=x.matrix[i][j];
- }
- cout<<endl<<"Коструктор копирования matr (matr &) создал матрицу #"<<nummatr<<endl;
- }
- matr::~matr()
- {
- cout<<endl<<"Удаление матрицы #"<<nummatr<<endl;
- /*delete []v;*/
- }
- void matr::print()
- {
- cout<<endl<<"Матрица #"<<nummatr<<endl;
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- {
- cout<<matrix[i][j]<<" ";
- }
- cout<<endl;
- }
- cout<<endl;
- }
- matr& matr::operator +(matr &r)
- {
- cout<<endl<<"Сложение матриц #"<<nummatr<<" и #"<<r.nummatr<<endl;
- matr tmp (height, width);
- if (height!=r.height || width!=r.width){
- cout<<"Error! Matrixes rn't the same";
- }
- else {
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- tmp.matrix[i][j]=matrix[i][j]+r.matrix[i][j];
- }
- tmp.print();
- return tmp;
- }
- }
- matr& operator-(matr &l, matr &r)
- {
- cout<<endl<<"Вычитание матриц #"<<l.nummatr<<" и #"<<r.nummatr;
- matr tmp(l.height, l.width);
- for (int i=0; i<l.height; i++){
- for (int j=0; j<l.width; j++)
- tmp.matrix[i][j]=l.matrix[i][j]-r.matrix[i][j];
- }
- tmp.print();
- return tmp;
- }
- matr& matr::operator-()
- {
- cout<<endl<<"Унарный минус матрицы #"<<nummatr;
- matr tmp (height, width);
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- tmp.matrix[i][j]=-matrix[i][j];
- }
- tmp.print();
- return tmp;
- }
- matr& matr::operator*(matr &r)
- {
- cout<<endl<<"Умножение матриц #"<<nummatr<<" и #"<<r.nummatr<<": "<<endl;
- matr tmp (height, r.width);
- int c=0;
- if (width==r.height){
- for (int i=0; i<height; i++){
- for (int j=0; j<r.width; j++){
- for (int p=0; p<width; p++){
- c=c+matrix[i][p]*r.matrix[p][j];
- tmp.matrix[i][j]=c;
- }
- }
- }
- }
- else {
- cout<<"Действие невозможно";
- }
- tmp.print();
- return tmp;
- }
- matr& matr::operator*(int c)
- {
- cout<<endl<<"Умножение матрицы #"<<nummatr<<" на число "<<c;
- matr tmp (height, width);
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- tmp.matrix[i][j]=matrix[i][j]*c;
- }
- tmp.print();
- return tmp;
- }
- matr& operator*(int c, matr &r)
- {
- cout<<endl<<"Умножение числа "<<c<<" на матрицу #"<<r.nummatr;
- matr tmp (r.height, r.width);
- for (int i=0; i<r.height; i++){
- for (int j=0; j<r.width; j++)
- tmp.matrix[i][j]=r.matrix[i][j]*c;
- }
- tmp.print();
- return tmp;
- }
- matr& matr::operator=(matr &r)
- {
- cout<<endl<<"Присваивание матрице #"<<nummatr<<" значений матрицы #"<<r.nummatr;
- height=r.height;
- width=r.width;
- if (matrix!=NULL) delete[]matrix;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- matrix[i][j]=r.matrix[i][j];
- }
- return *this;
- }
- class vect
- {
- public:
- static int count;
- int num;
- vect (int d); //конструктор
- vect (int d, double *x); //конструктор
- vect(); //конструктор
- vect (vect &x); //copyconstructor
- ~vect(); //деструктор
- void print(); //печать
- vect& operator+(vect r); //сложение векторов
- friend vect& operator-(vect &l, vect &r); //разность векторов
- vect& operator-(); //унарный минус
- double operator*(vect &r); //произведение векторов
- vect& operator*(int c); //умножение вектора на число
- vect& operator=(vect &r); //присваивание
- friend vect& operator*(int c, vect &r); //умножение числа на вектор
- /*friend class matr;*/
- private:
- int dim;
- double *v;
- };
- int vect::count=0;
- vect::vect()
- {
- count++;
- num=count;
- dim=1;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=0;
- cout<<endl<<"Конструктор vect () создал вектор #"<<num<<endl;
- }
- vect::vect (int d)
- {
- count++;
- num=count;
- dim=d;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=0;
- cout<<endl<<"Конструктор vect (int) создал вектор #"<<num<<endl;
- }
- vect::vect (int d, double *x)
- {
- count++;
- num=count;
- dim=d;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=x[i];
- cout<<endl<<"Конструктор vect (int, double *) создал вектор #"<<num<<endl;
- }
- vect::vect (vect &x)
- {
- count++;
- num=count;
- dim=x.dim;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=x.v[i];
- cout<<endl<<"Коструктор копирования vect (vect &) создал вектор #"<<num<<endl;
- }
- vect::~vect()
- {
- cout<<endl<<"Удаление вектора #"<<num<<endl;
- /*delete []v;*/
- }
- vect& vect::operator+(vect r)
- {
- cout<<endl<<"Сложение векторов #"<<num<<" и #"<<r.num<<endl;
- vect tmp (dim);
- for (int i=0; i<dim; i++)
- tmp.v[i]=v[i]+r.v[i];
- tmp.print();
- return tmp;
- }
- vect& operator-(vect &l, vect &r)
- {
- cout<<endl<<"Вычитание векторов #"<<l.num<<" и #"<<r.num;
- vect tmp(l.dim);
- for (int i=0; i<l.dim; i++)
- tmp.v[i]=l.v[i]-r.v[i];
- tmp.print();
- return tmp;
- }
- vect& vect::operator-()
- {
- cout<<endl<<"Унарный минус вектора #"<<num;
- vect tmp (dim);
- for (int i=0; i<dim; i++)
- tmp.v[i]=-v[i];
- tmp.print();
- return tmp;
- }
- double vect::operator*(vect &r)
- {
- cout<<endl<<"Умножение векторов #"<<num<<" и #"<<r.num<<": ";
- int c=0;
- for (int i=0; i<dim; i++)
- c=c+(v[i]*r.v[i]);
- cout<<c<<endl;
- return c;
- }
- vect& vect::operator=(vect &r)
- {
- cout<<endl<<"Присваивание вектору #"<<num<<" значений вектора #"<<r.num;
- dim=r.dim;
- if (v!=NULL) delete[]v;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=r.v[i];
- return *this;
- }
- vect& vect::operator*(int c)
- {
- cout<<endl<<"Умножение вектора #"<<num<<" на число "<<c;
- vect tmp (dim);
- for (int i=0; i<dim; i++)
- tmp.v[i]=v[i]*c;
- tmp.print();
- return tmp;
- }
- vect& operator*(int c, vect &r)
- {
- cout<<endl<<"Умножение числа "<<c<<" на вектор #"<<r.num;
- vect tmp (r.dim);
- for (int i=0; i<r.dim; i++)
- tmp.v[i]=r.v[i]*c;
- tmp.print();
- return tmp;
- }
- void vect::print()
- {
- cout<<endl<<"Вектор #"<<num<<" (";
- for (int i=0; i<dim; i++)
- {
- cout<<v[i];
- if (i<dim-1) cout<<",";
- }
- cout<<")"<<endl;
- }
- int main ()
- {
- setlocale (LC_ALL, "Russian");
- /*double x2[3] = {1, 2, 3}, x3[3] = {2, 3, 4};
- vect v1(3), v2(3, x2), v3(3, x3), v4;
- v1.print();
- v2.print();
- v3.print();
- v4.print();
- int c=v3*v2;
- v4=v3;
- v4.print();
- vect v5;
- v5=v3-v2;
- v5.print();
- vect v6;
- v6=v1+v2;
- v6.print();
- vect v7;
- v7=v2*3;
- v7.print();
- vect v8;
- v8=-v3;
- v8.print();
- vect v9;
- v9=9*v2;
- v9.print();*/
- double **m1;
- m1 = new double*[3];
- int k1=1;
- for (int i=0; i<3; i++)
- m1[i]=new double[3];
- /*for (int i=0; i<3; i++){
- for (int j=0; j<3; j++)
- m1[i][j]=1;
- }*/
- m1[0][0]=1;
- m1[0][1]=2;
- m1[0][2]=3;
- m1[1][0]=1;
- m1[1][1]=2;
- m1[1][2]=3;
- m1[2][0]=1;
- m1[2][1]=2;
- m1[2][2]=3;
- /*for (int i=0; i<3; i++){
- for (int j=0; j<3; j++)
- cout<<m1[i][j]<<" ";
- }*/
- double **m2;
- m2 = new double*[3];
- int k2=1;
- for (int i=0; i<3; i++)
- m2[i]=new double [3];
- /*for (int i=0; i<3; i++){
- for (int j=0; j<3; j++)
- m2[i][j]=2;}*/
- m2[0][0]=1;
- m2[0][1]=2;
- m2[0][2]=3;
- m2[1][0]=1;
- m2[1][1]=2;
- m2[1][2]=3;
- m2[2][0]=1;
- m2[2][1]=2;
- m2[2][2]=3;
- matr M1 (3, 3, m1), M2 (3, 3, m2), M3, M4(3, 3), M5, M6;
- M1.print();
- M2.print();
- M3.print();
- M4.print();
- M5=M3+M4;
- M5.print();
- M2=M3*M1;
- M2.print();
- M6=M1*2;
- M6.print();
- M6=2*M2;
- M6.print();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement