Advertisement
bubuzaka

Untitled

Apr 26th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5.  
  6. class matr
  7. {
  8. public:
  9. static int countmatr;
  10. int nummatr;
  11. matr ();
  12. matr (int h, int w);
  13. matr (int h, int w, double **x);
  14. matr (matr &x);
  15. ~matr();
  16. void print();
  17. matr& operator +(matr &r); //сложение матриц
  18. friend matr& operator-(matr &l, matr &r); //вычитание
  19. matr& operator-(); //унарный минус
  20. matr& operator*(matr &r); //умножение матриц
  21. matr& operator*(int c); //умножение на число
  22. friend matr& operator*(int c, matr &r); //число на матрицу
  23. matr& operator=(matr &r); //присваивание
  24. /*void modifyvect (matr &x);*/ //друж ф-я к вект
  25. private:
  26. int height;
  27. int width;
  28. double **matrix;
  29.  
  30. };
  31.  
  32. int matr::countmatr=0;
  33.  
  34. matr::matr()
  35. {
  36. countmatr++;
  37. nummatr=countmatr;
  38. height=3;
  39. width=3;
  40. matrix=new double* [height];
  41. for (int c=0; c<height; c++){
  42. matrix[c]=new double [width];
  43. }
  44. for (int i=0; i<height; i++){
  45. for (int j=0; j<width; j++)
  46. matrix[i][j]=1;
  47. }
  48. cout<<endl<<"Конструктор matr () создал матрицу #"<<nummatr<<endl;
  49. }
  50.  
  51. matr::matr (int h, int w)
  52. {
  53.  
  54. countmatr++;
  55. nummatr=countmatr;
  56. height=h;
  57. width=w;
  58. matrix=new double* [height];
  59. for (int c=0; c<height; c++){
  60. matrix[c]=new double [width];
  61. }
  62. for (int i=0; i<height; i++){
  63. for (int j=0; j<width; j++)
  64. matrix[i][j]=1;
  65. }
  66. cout<<endl<<"Конструктор matr (int, int) создал матрицу #"<<nummatr<<endl;
  67. }
  68.  
  69. matr::matr (int h, int w, double **x)
  70. {
  71. countmatr++;
  72. nummatr=countmatr;
  73. width=w;
  74. height=h;
  75. matrix=new double* [height];
  76. for (int c=0; c<height; c++){
  77. matrix[c]=new double [width];
  78. }
  79. for (int i=0; i<height; i++) {
  80. for (int j=0; j<width; j++){
  81. matrix[i][j]=x[i][j];
  82. }
  83. }
  84. cout<<endl<<"Конструктор matr (int, int. double *) создал матрицу #"<<nummatr<<endl;
  85. }
  86.  
  87. matr::matr (matr &x)
  88. {
  89. countmatr++;
  90. nummatr=countmatr;
  91. height=x.height;
  92. width=x.width;
  93. matrix=new double* [height];
  94. for (int c=0; c<height; c++){
  95. matrix[c]=new double [width];
  96. }
  97. for (int i=0; i<height; i++){
  98. for (int j=0; j<width; j++)
  99. matrix[i][j]=x.matrix[i][j];
  100. }
  101. cout<<endl<<"Коструктор копирования matr (matr &) создал матрицу #"<<nummatr<<endl;
  102. }
  103.  
  104. matr::~matr()
  105. {
  106. cout<<endl<<"Удаление матрицы #"<<nummatr<<endl;
  107. /*delete []v;*/
  108. }
  109.  
  110. void matr::print()
  111. {
  112. cout<<endl<<"Матрица #"<<nummatr<<endl;
  113. for (int i=0; i<height; i++){
  114. for (int j=0; j<width; j++)
  115. {
  116. cout<<matrix[i][j]<<" ";
  117. }
  118. cout<<endl;
  119. }
  120. cout<<endl;
  121. }
  122.  
  123. matr& matr::operator +(matr &r)
  124. {
  125. cout<<endl<<"Сложение матриц #"<<nummatr<<" и #"<<r.nummatr<<endl;
  126. matr tmp (height, width);
  127. if (height!=r.height || width!=r.width){
  128. cout<<"Error! Matrixes rn't the same";
  129. }
  130. else {
  131. for (int i=0; i<height; i++){
  132. for (int j=0; j<width; j++)
  133. tmp.matrix[i][j]=matrix[i][j]+r.matrix[i][j];
  134. }
  135. tmp.print();
  136. return tmp;
  137. }
  138.  
  139. }
  140.  
  141. matr& operator-(matr &l, matr &r)
  142. {
  143. cout<<endl<<"Вычитание матриц #"<<l.nummatr<<" и #"<<r.nummatr;
  144. matr tmp(l.height, l.width);
  145. for (int i=0; i<l.height; i++){
  146. for (int j=0; j<l.width; j++)
  147. tmp.matrix[i][j]=l.matrix[i][j]-r.matrix[i][j];
  148. }
  149. tmp.print();
  150. return tmp;
  151. }
  152.  
  153. matr& matr::operator-()
  154. {
  155. cout<<endl<<"Унарный минус матрицы #"<<nummatr;
  156. matr tmp (height, width);
  157. for (int i=0; i<height; i++){
  158. for (int j=0; j<width; j++)
  159. tmp.matrix[i][j]=-matrix[i][j];
  160. }
  161. tmp.print();
  162. return tmp;
  163. }
  164.  
  165. matr& matr::operator*(matr &r)
  166. {
  167. cout<<endl<<"Умножение матриц #"<<nummatr<<" и #"<<r.nummatr<<": "<<endl;
  168. matr tmp (height, r.width);
  169. int c=0;
  170. if (width==r.height){
  171. for (int i=0; i<height; i++){
  172. for (int j=0; j<r.width; j++){
  173. for (int p=0; p<width; p++){
  174. c=c+matrix[i][p]*r.matrix[p][j];
  175. tmp.matrix[i][j]=c;
  176. }
  177. }
  178. }
  179. }
  180. else {
  181. cout<<"Действие невозможно";
  182. }
  183. tmp.print();
  184. return tmp;
  185. }
  186.  
  187. matr& matr::operator*(int c)
  188. {
  189. cout<<endl<<"Умножение матрицы #"<<nummatr<<" на число "<<c;
  190. matr tmp (height, width);
  191. for (int i=0; i<height; i++){
  192. for (int j=0; j<width; j++)
  193. tmp.matrix[i][j]=matrix[i][j]*c;
  194. }
  195. tmp.print();
  196. return tmp;
  197. }
  198.  
  199. matr& operator*(int c, matr &r)
  200. {
  201. cout<<endl<<"Умножение числа "<<c<<" на матрицу #"<<r.nummatr;
  202. matr tmp (r.height, r.width);
  203. for (int i=0; i<r.height; i++){
  204. for (int j=0; j<r.width; j++)
  205. tmp.matrix[i][j]=r.matrix[i][j]*c;
  206. }
  207. tmp.print();
  208. return tmp;
  209. }
  210.  
  211. matr& matr::operator=(matr &r)
  212. {
  213. cout<<endl<<"Присваивание матрице #"<<nummatr<<" значений матрицы #"<<r.nummatr;
  214. height=r.height;
  215. width=r.width;
  216. if (matrix!=NULL) delete[]matrix;
  217. matrix=new double* [height];
  218. for (int c=0; c<height; c++){
  219. matrix[c]=new double [width];
  220. }
  221. for (int i=0; i<height; i++){
  222. for (int j=0; j<width; j++)
  223. matrix[i][j]=r.matrix[i][j];
  224. }
  225. return *this;
  226. }
  227.  
  228. class vect
  229. {
  230. public:
  231. static int count;
  232. int num;
  233. vect (int d); //конструктор
  234. vect (int d, double *x); //конструктор
  235. vect(); //конструктор
  236. vect (vect &x); //copyconstructor
  237. ~vect(); //деструктор
  238. void print(); //печать
  239. vect& operator+(vect r); //сложение векторов
  240. friend vect& operator-(vect &l, vect &r); //разность векторов
  241. vect& operator-(); //унарный минус
  242. double operator*(vect &r); //произведение векторов
  243. vect& operator*(int c); //умножение вектора на число
  244. vect& operator=(vect &r); //присваивание
  245. friend vect& operator*(int c, vect &r); //умножение числа на вектор
  246. /*friend class matr;*/
  247. private:
  248. int dim;
  249. double *v;
  250. };
  251.  
  252. int vect::count=0;
  253.  
  254. vect::vect()
  255. {
  256. count++;
  257. num=count;
  258. dim=1;
  259. v=new double [dim];
  260. for (int i=0; i<dim; i++)
  261. v[i]=0;
  262. cout<<endl<<"Конструктор vect () создал вектор #"<<num<<endl;
  263. }
  264.  
  265. vect::vect (int d)
  266. {
  267. count++;
  268. num=count;
  269. dim=d;
  270. v=new double [dim];
  271. for (int i=0; i<dim; i++)
  272. v[i]=0;
  273. cout<<endl<<"Конструктор vect (int) создал вектор #"<<num<<endl;
  274. }
  275.  
  276. vect::vect (int d, double *x)
  277. {
  278. count++;
  279. num=count;
  280. dim=d;
  281. v=new double [dim];
  282. for (int i=0; i<dim; i++)
  283. v[i]=x[i];
  284. cout<<endl<<"Конструктор vect (int, double *) создал вектор #"<<num<<endl;
  285. }
  286.  
  287. vect::vect (vect &x)
  288. {
  289. count++;
  290. num=count;
  291. dim=x.dim;
  292. v=new double [dim];
  293. for (int i=0; i<dim; i++)
  294. v[i]=x.v[i];
  295. cout<<endl<<"Коструктор копирования vect (vect &) создал вектор #"<<num<<endl;
  296. }
  297.  
  298. vect::~vect()
  299. {
  300. cout<<endl<<"Удаление вектора #"<<num<<endl;
  301. /*delete []v;*/
  302. }
  303.  
  304. vect& vect::operator+(vect r)
  305. {
  306. cout<<endl<<"Сложение векторов #"<<num<<" и #"<<r.num<<endl;
  307. vect tmp (dim);
  308. for (int i=0; i<dim; i++)
  309. tmp.v[i]=v[i]+r.v[i];
  310. tmp.print();
  311. return tmp;
  312. }
  313.  
  314. vect& operator-(vect &l, vect &r)
  315. {
  316. cout<<endl<<"Вычитание векторов #"<<l.num<<" и #"<<r.num;
  317. vect tmp(l.dim);
  318. for (int i=0; i<l.dim; i++)
  319. tmp.v[i]=l.v[i]-r.v[i];
  320. tmp.print();
  321. return tmp;
  322. }
  323.  
  324. vect& vect::operator-()
  325. {
  326. cout<<endl<<"Унарный минус вектора #"<<num;
  327. vect tmp (dim);
  328. for (int i=0; i<dim; i++)
  329. tmp.v[i]=-v[i];
  330. tmp.print();
  331. return tmp;
  332. }
  333.  
  334. double vect::operator*(vect &r)
  335. {
  336. cout<<endl<<"Умножение векторов #"<<num<<" и #"<<r.num<<": ";
  337. int c=0;
  338. for (int i=0; i<dim; i++)
  339. c=c+(v[i]*r.v[i]);
  340. cout<<c<<endl;
  341. return c;
  342. }
  343.  
  344. vect& vect::operator=(vect &r)
  345. {
  346. cout<<endl<<"Присваивание вектору #"<<num<<" значений вектора #"<<r.num;
  347. dim=r.dim;
  348. if (v!=NULL) delete[]v;
  349. v=new double [dim];
  350. for (int i=0; i<dim; i++)
  351. v[i]=r.v[i];
  352. return *this;
  353. }
  354.  
  355. vect& vect::operator*(int c)
  356. {
  357. cout<<endl<<"Умножение вектора #"<<num<<" на число "<<c;
  358. vect tmp (dim);
  359. for (int i=0; i<dim; i++)
  360. tmp.v[i]=v[i]*c;
  361. tmp.print();
  362. return tmp;
  363. }
  364.  
  365. vect& operator*(int c, vect &r)
  366. {
  367. cout<<endl<<"Умножение числа "<<c<<" на вектор #"<<r.num;
  368. vect tmp (r.dim);
  369. for (int i=0; i<r.dim; i++)
  370. tmp.v[i]=r.v[i]*c;
  371. tmp.print();
  372. return tmp;
  373. }
  374.  
  375. void vect::print()
  376. {
  377.  
  378. cout<<endl<<"Вектор #"<<num<<" (";
  379. for (int i=0; i<dim; i++)
  380. {
  381. cout<<v[i];
  382. if (i<dim-1) cout<<",";
  383. }
  384. cout<<")"<<endl;
  385. }
  386.  
  387. int main ()
  388. {
  389. setlocale (LC_ALL, "Russian");
  390. /*double x2[3] = {1, 2, 3}, x3[3] = {2, 3, 4};
  391. vect v1(3), v2(3, x2), v3(3, x3), v4;
  392. v1.print();
  393. v2.print();
  394. v3.print();
  395. v4.print();
  396. int c=v3*v2;
  397. v4=v3;
  398. v4.print();
  399. vect v5;
  400. v5=v3-v2;
  401. v5.print();
  402. vect v6;
  403. v6=v1+v2;
  404. v6.print();
  405. vect v7;
  406. v7=v2*3;
  407. v7.print();
  408. vect v8;
  409. v8=-v3;
  410. v8.print();
  411. vect v9;
  412. v9=9*v2;
  413. v9.print();*/
  414. double **m1;
  415. m1 = new double*[3];
  416. int k1=1;
  417. for (int i=0; i<3; i++)
  418. m1[i]=new double[3];
  419. /*for (int i=0; i<3; i++){
  420. for (int j=0; j<3; j++)
  421. m1[i][j]=1;
  422. }*/
  423. m1[0][0]=1;
  424. m1[0][1]=2;
  425. m1[0][2]=3;
  426. m1[1][0]=1;
  427. m1[1][1]=2;
  428. m1[1][2]=3;
  429. m1[2][0]=1;
  430. m1[2][1]=2;
  431. m1[2][2]=3;
  432. /*for (int i=0; i<3; i++){
  433. for (int j=0; j<3; j++)
  434. cout<<m1[i][j]<<" ";
  435. }*/
  436.  
  437. double **m2;
  438. m2 = new double*[3];
  439. int k2=1;
  440. for (int i=0; i<3; i++)
  441. m2[i]=new double [3];
  442. /*for (int i=0; i<3; i++){
  443. for (int j=0; j<3; j++)
  444. m2[i][j]=2;}*/
  445. m2[0][0]=1;
  446. m2[0][1]=2;
  447. m2[0][2]=3;
  448. m2[1][0]=1;
  449. m2[1][1]=2;
  450. m2[1][2]=3;
  451. m2[2][0]=1;
  452. m2[2][1]=2;
  453. m2[2][2]=3;
  454.  
  455. matr M1 (3, 3, m1), M2 (3, 3, m2), M3, M4(3, 3), M5, M6;
  456. M1.print();
  457. M2.print();
  458. M3.print();
  459. M4.print();
  460. M5=M3+M4;
  461. M5.print();
  462. M2=M3*M1;
  463. M2.print();
  464. M6=M1*2;
  465. M6.print();
  466. M6=2*M2;
  467. M6.print();
  468.  
  469. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement