Advertisement
HyperSensualNarwhal

Сортировка, транспонирование и умножение матриц

Jan 15th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. using std::cin;
  5. using std::cout;
  6. using std::endl;
  7.  
  8. #define TAB '\t'
  9. #define EL2 cout << endl << endl
  10. #define EL5 cout << endl << endl << endl << endl << endl
  11. #define EL10 cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl
  12.  
  13. #define InsertionSort       // cортировка двумерного массива по строкам и столбцам
  14. //#define Transposition     // транспонирование матрицы из одного массива в другой
  15. //#define Multiplication    // умножение матриц
  16.  
  17. void main()
  18. {
  19.     setlocale(0, "");
  20.     srand(time(NULL));
  21.  
  22.     const int sz = 10; // размер для всех массивов
  23.  
  24.     int alpha[sz][sz];
  25.     int beta[sz][sz];
  26.     int gamma[sz][sz];
  27.  
  28.     int tmp;
  29.  
  30.     cout << "Массив Alpha: \n" << endl;
  31.  
  32.     // инициализация массива alpha случайными числами от 10 до 100 (только двузначными) и вывод его на экран
  33.     for (int i = 0; i < sz; cout << endl << endl, ++i)
  34.     for (int j = 0; j < sz; ++j)
  35.         cout << (alpha[i][j] = rand() % 90 + 10) << TAB;
  36.  
  37.  
  38. #ifdef InsertionSort    // сортировка вставками строк и столбцов в массиве alpha
  39.  
  40.     // сортировка строк массива
  41.     for (int i = 0; i < sz; ++i)
  42.         for (int j = 1; j < sz; ++j)
  43.             for (int k = j; k > 0 && alpha[i][k - 1] > alpha[i][k]; --k)
  44.                 {
  45.                     tmp = alpha[i][k - 1];
  46.                     alpha[i][k - 1] = alpha[i][k];
  47.                     alpha[i][k] = tmp;
  48.                 }
  49.        
  50.     //сортировка столбцов массива
  51.     for (int i = 0; i < sz; ++i)
  52.         for (int j = 1; j < sz; ++j)   
  53.             for (int k = j; k > 0 && alpha[k - 1][i] > alpha[k][i]; --k)
  54.                 {
  55.                     tmp = alpha[k - 1][i];
  56.                     alpha[k - 1][i] = alpha[k][i];
  57.                     alpha[k][i] = tmp;
  58.                 }
  59.  
  60.     EL5;
  61.     cout << "Массив Alpha после сортировки: \n" << endl;
  62.  
  63.     // вывод отсортированого массива на экран
  64.     for (int i = 0; i < sz; cout << endl << endl, ++i)
  65.     for (int j = 0; j < sz; ++j)
  66.         cout << alpha[i][j] << TAB;
  67. #endif
  68.  
  69.  
  70. #ifdef Transposition // транспонирование матриц
  71.  
  72.     // присваивание элементам в строках массива значения элементов столбцов, а элементам столбцов значения элементов его строк
  73.     for (int i = 0; i < sz; ++i)
  74.     for (int j = 0; j < sz; ++j)
  75.         beta[i][j] = alpha[j][i];
  76.     EL5;
  77.     cout << "Массив beta с транспониро-\nванной матрицей из массива alpha: \n" << endl;
  78.  
  79.     // вывод транспонированого массива на экран
  80.     for (int i = 0; i < sz; cout << endl << endl, ++i)
  81.     for (int j = 0; j < sz; ++j)
  82.         cout << beta[i][j] << TAB;
  83. #endif     
  84.  
  85.  
  86. #ifdef Multiplication // умножение матриц
  87.     EL5;
  88.     cout << "Матрица A: \n" << endl;
  89.  
  90.     // инициализация массива beta (матрицы А) случайными числами от 0 до 10
  91.     for (int i = 0; i < sz; cout << endl << endl, ++i)
  92.     for (int j = 0; j < sz; ++j)
  93.         cout << (alpha[i][j] = rand() % 10) << TAB;
  94.     EL5;
  95.     cout <<"Матрица B: \n" << endl;
  96.  
  97.     // инициализация массива Beta (матрицы B) случайными числами от 0 до 10
  98.     for (int i = 0; i < sz; cout << endl << endl, ++i)
  99.     for (int j = 0; j < sz; ++j)
  100.         cout << (beta[i][j] = rand() % 10) << TAB;
  101.  
  102.     // умножение матрицы А на B в массивах Alpha и Beta
  103.     for (int i = 0; i < sz; ++i)
  104.     for (int j = 0; j < sz; ++j)
  105.     {
  106.         tmp = 0;
  107.  
  108.         for (int k = 0; k < sz; ++k)
  109.             tmp += alpha[j][k] * beta[k][i];
  110.  
  111.         gamma[j][i] = tmp;
  112.     }
  113.  
  114.     EL5;
  115.     cout << "Произведение матриц А и B: \n" << endl;
  116.  
  117.     // вывод массива Gamma с произведением матриц на экран
  118.     for (int i = 0; i < sz; cout << endl << endl, ++i)
  119.     for (int j = 0; j < sz; ++j)
  120.         cout << gamma[i][j] << TAB;
  121.  
  122.     // проверка на правильность решения простым способом
  123.     /*int delta[sz][sz];
  124.  
  125.     delta[0][0] = alpha[0][0] * beta[0][0] + alpha[0][1] * beta[1][0] + alpha[0][2] * beta[2][0];
  126.     delta[0][1] = alpha[0][0] * beta[0][1] + alpha[0][1] * beta[1][1] + alpha[0][2] * beta[2][1];
  127.     delta[0][2] = alpha[0][0] * beta[0][2] + alpha[0][1] * beta[1][2] + alpha[0][2] * beta[2][2];
  128.  
  129.     delta[1][0] = alpha[1][0] * beta[0][0] + alpha[1][1] * beta[1][0] + alpha[1][2] * beta[2][0];
  130.     delta[1][1] = alpha[1][0] * beta[0][1] + alpha[1][1] * beta[1][1] + alpha[1][2] * beta[2][1];
  131.     delta[1][2] = alpha[1][0] * beta[0][2] + alpha[1][1] * beta[1][2] + alpha[1][2] * beta[2][2];
  132.  
  133.     delta[2][0] = alpha[2][0] * beta[0][0] + alpha[2][1] * beta[1][0] + alpha[2][2] * beta[2][0];
  134.     delta[2][1] = alpha[2][0] * beta[0][1] + alpha[2][1] * beta[1][1] + alpha[2][2] * beta[2][1];
  135.     delta[2][2] = alpha[2][0] * beta[0][2] + alpha[2][1] * beta[1][2] + alpha[2][2] * beta[2][2];
  136.  
  137.     // вывод массива delta с произведением матриц на экран
  138.     for (int i = 0; i < sz; cout << endl << endl, ++i)
  139.     for (int j = 0; j < sz; ++j)
  140.     cout << delta[i][j] << TAB;
  141.  
  142.     cout << endl;*/
  143. #endif
  144.  
  145.     EL10;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement