Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.72 KB | None | 0 0
  1. //    Student: Den Kryvoshey
  2. //    Group:   IO-71
  3. //
  4. //    F1 = A = B + C + D*(MD*ME)
  5. //    F2 = MF=MF*MG*k
  6. //    F3 = (MP *MR)*S + T
  7.  
  8. #include "Data.h"
  9. #include <windows.h>
  10. #include <iostream>
  11. #include <mpi.h>
  12.  
  13. #define N 3
  14.  
  15. #pragma push_macro("max")
  16. #undef max
  17.  
  18. void Thread1();
  19. void Thread2();
  20. void Thread3();
  21.  
  22. using namespace std;
  23.  
  24. int main(int argc, char** argv)
  25. {
  26.  
  27.     MPI_Init(&argc, &argv);
  28. #pragma comment(linker, "/STACK:400000000")
  29.  
  30.     int tid;
  31.  
  32.     MPI_Comm_rank(MPI_COMM_WORLD, &tid);
  33.  
  34.     //switch (tid)
  35.     //{
  36.     //case 0:
  37.     //  Thread1();
  38.     //  break;
  39.     //case 1:
  40.     //  Thread2();
  41.     //  break;
  42.     //case 2:
  43.     //  Thread3();
  44.     //  break;
  45.     //}
  46.  
  47.     Thread1();
  48.     Thread2();
  49.     Thread3();
  50.  
  51.     MPI_Finalize();
  52.  
  53.     //system("pause");
  54.     return 0;
  55. }
  56.  
  57. void Thread1()
  58. {
  59.     cout << "Thread 1 started!\n";
  60.  
  61.     Vector* A = new Vector(N, true);
  62.     Vector* B = new Vector(N, true);
  63.     Vector* C = new Vector(N, true);
  64.     Vector* D = new Vector(N, true);
  65.     Matrix* MD = new Matrix(N, true);
  66.     Matrix* ME = new Matrix(N, true);
  67.  
  68.     D = *(*B + *B) + *(*(*MD * *ME) * *D);
  69.     delete A, B, C, MD, ME;
  70.     Sleep(1000);
  71.     printf("F1 =\n");
  72.     D->print();
  73.  
  74.     cout << "Thread 1 finished execution!\n";
  75. }
  76.  
  77. void Thread2()
  78. {
  79.     cout << "Thread 2 started!\n";
  80.  
  81.     Matrix* MF = new Matrix(N, true);
  82.     Matrix* MK = new Matrix(N, true);
  83.     long k = 1;
  84.     //Matrix* ML = (*MF->transpose() * *MK)->sort();
  85.     //Matrix* ML = (*(*MF * *MK) * k);
  86.     Matrix* ML = (*MF * *MK);
  87.  
  88.     Sleep(100);
  89.     printf("F2 = \n");
  90.     ML->print();
  91.     delete MF, MK, ML;
  92.  
  93.     cout << "Thread 2 finished execution!\n";
  94. }
  95.  
  96. void Thread3()
  97. {
  98.     cout << "Thread 3 started!\n";
  99.  
  100.     Vector* T = new Vector(N, true);
  101.     Vector* S = new Vector(N, true);
  102.     Matrix* MR = new Matrix(N, true);
  103.     Matrix* MP = new Matrix(N, true);
  104.     Matrix* MS = new Matrix(N, true);
  105.  
  106.     Vector A = *(*(*(*MP * *MR) * *S) + *T) ;
  107.     delete T, S, MR, MP, MS;
  108.     printf("F3 = \n");
  109.     A.print();
  110.     cout << "Thread 3 finished execution\n";
  111. }
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121. #pragma once
  122.  
  123.  
  124. #ifndef LAB5_DATA_H
  125. #define LAB5_DATA_H
  126.  
  127.  
  128. class Vector {
  129. private:
  130.     int _size;
  131.     int* _data;
  132.  
  133. public:
  134.     Vector(int size, bool fill);
  135.  
  136.     ~Vector();
  137.  
  138.     Vector* operator+(Vector& that);
  139.  
  140.     void setElement(int index, int value);
  141.  
  142.     void print();
  143.  
  144.     int operator*(Vector& that);
  145.  
  146.     int getElement(int index);
  147.  
  148.     int max();
  149. };
  150.  
  151. class Matrix {
  152. private:
  153.     int _size;
  154.     int** _data;
  155.  
  156. public:
  157.     Matrix(int size, bool fill);
  158.  
  159.     ~Matrix();
  160.  
  161.     Matrix* operator+(Matrix& that);
  162.  
  163.     Matrix* operator-(Matrix& that);
  164.  
  165.     Matrix* operator*(Matrix& that);
  166.  
  167.     Matrix* operator*(long& that);
  168.  
  169.     Vector* operator*(Vector& vector);
  170.  
  171.     void print();
  172. };
  173.  
  174. #endif
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185. #include "Data.h"
  186.  
  187. #include <iostream>
  188.  
  189. using namespace std;
  190.  
  191. Matrix::Matrix(int size, bool fill)
  192. {
  193.     _size = size;
  194.     _data = new int* [size];
  195.     for (int i = 0; i < size; i++)
  196.         _data[i] = new int[size];
  197.  
  198.     if (fill)
  199.         for (int i = 0; i < size; i++)
  200.             for (int j = 0; j < size; j++)
  201.                 _data[i][j] = /*rand() % 100 + */1;
  202.  
  203.     else
  204.         for (int i = 0; i < size; i++)
  205.             for (int j = 0; j < size; j++)
  206.                 _data[i][j] = 0;
  207. }
  208.  
  209. Matrix::~Matrix()
  210. {
  211.     for (int i = 0; i < _size; i++)
  212.         delete[] _data[i];
  213.     delete[] _data;
  214. }
  215.  
  216. Matrix* Matrix::operator+(Matrix& that)
  217. {
  218.     auto* result = new Matrix(_size, false);
  219.     for (int i = 0; i < _size; i++)
  220.         for (int j = 0; j < _size; j++)
  221.             result->_data[i][j] = _data[i][j] + that._data[i][j];
  222.     return result;
  223. }
  224.  
  225. Matrix* Matrix::operator-(Matrix& that)
  226. {
  227.     auto* result = new Matrix(_size, false);
  228.     for (int i = 0; i < _size; i++)
  229.         for (int j = 0; j < _size; j++)
  230.             result->_data[i][j] = _data[i][j] - that._data[i][j];
  231.     return result;
  232. }
  233.  
  234. Matrix* Matrix::operator*(Matrix& that)
  235. {
  236.     auto* result = new Matrix(_size, false);
  237.     for (int i = 0; i < _size; i++)
  238.         for (int j = 0; j < _size; j++)
  239.             for (int k = 0; k < _size; k++)
  240.                 result->_data[i][j] += _data[i][k] * that._data[k][j];
  241.     return result;
  242. }
  243.  
  244. Matrix* Matrix::operator*(long& that)
  245. {
  246.     auto* result = new Matrix(_size, false);
  247.     for (int i = 0; i < _size; i++)
  248.         for (int j = 0; j < _size; j++)
  249.                 result->_data[i][j] *= that;
  250.     return result;
  251. }
  252.  
  253. Vector* Matrix::operator*(Vector& that)
  254. {
  255.     auto* result = new Vector(_size, false);
  256.     for (int i = 0; i < _size; i++)
  257.         for (int j = 0; j < _size; j++)
  258.             result->setElement(i, result->getElement(i) + _data[i][j] * that.getElement(i));
  259.     return result;
  260. }
  261.  
  262.  
  263. void Matrix::print()
  264. {
  265.     for (int i = 0; i < _size; i++)
  266.     {
  267.         printf("[");
  268.         for (int j = 0; j < _size - 1; j++) {
  269.             printf("%1d,", _data[i][j]);
  270.         }
  271.         printf("%1d]", _data[i][_size - 1]);
  272.         printf("\n");
  273.     }
  274. }
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284. #include "Data.h"
  285.  
  286. #include <iostream>
  287. #include <cstdlib>
  288.  
  289. using namespace std;
  290.  
  291. Vector::Vector(int size, bool fill)
  292. {
  293.     _size = size;
  294.     _data = new int[size];
  295.     if (fill)
  296.         for (int i = 0; i < _size; i++)
  297.             _data[i] = /*rand() % 100 +*/ 1;
  298.     else
  299.         for (int i = 0; i < _size; i++)
  300.             _data[i] = 0;
  301. }
  302.  
  303. Vector::~Vector()
  304. {
  305.     delete[] _data;
  306. }
  307.  
  308. Vector* Vector::operator+(Vector& that)
  309. {
  310.     auto* result = new Vector(_size, false);
  311.     for (int i = 0; i < _size; i++)
  312.         result->_data[i] = _data[i] + that._data[i];
  313.     return result;
  314. }
  315.  
  316. void Vector::setElement(int index, int value)
  317. {
  318.     _data[index] = value;
  319. }
  320.  
  321. void Vector::print()
  322. {
  323.     printf("[");
  324.     for (int i = 0; i < _size - 1; i++)
  325.         printf("%1d,", _data[i]);
  326.     printf("%1d]", _data[_size - 1]);
  327.     printf("\n");
  328. }
  329.  
  330. int Vector::operator*(Vector& that)
  331. {
  332.     int result = 0;
  333.     for (int i = 0; i < _size; i++)
  334.         result += _data[i] * that._data[i];
  335.     return result;
  336. }
  337.  
  338. int Vector::getElement(int index)
  339. {
  340.     return _data[index];
  341. }
  342.  
  343. int Vector::max()
  344. {
  345.     int max = 0;
  346.     for (int i = 0; i < _size; i++)
  347.         if (_data[i] > max)
  348.             max = _data[i];
  349.     return max;
  350. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement