Advertisement
Queses

[QSS] CPP Lab 2

Sep 11th, 2016
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.36 KB | None | 0 0
  1. #include <fstream>      // чтение файла
  2. #include <iostream>     // cin, cout
  3. #include <iomanip>      // setw() - установка длинны строки вывода
  4. #include <stdlib.h>     // atoi() - перевод из строки в integer
  5. #include <string.h>     // строки
  6. #include <math.h>      
  7. // #include <stdio.h>  
  8.  
  9. using namespace std;
  10.  
  11. void printArray(int rowNum, int colNum, float **array)
  12. {
  13.     int i, j;
  14.     for (i = 0; i < rowNum; i++) {
  15.         cout << "|";
  16.         for (j = 0; j < colNum; j++)
  17.         {  
  18.             cout << setw(6) << array[i][j] ;
  19.         }
  20.         cout << setw(3) << "|";
  21.         cout << endl;
  22.     }
  23. }
  24.  
  25. void replaceFloats(float &num1, float &num2)
  26. {
  27.     float temp;
  28.     temp     = num1;
  29.     num1     = num2;
  30.     num2     = temp;
  31. }
  32.  
  33. void replaceRows(int row1, int row2, int colNum, float** array)
  34. {
  35.     int j;
  36.     for (j = 0; j < colNum; j++) {
  37.         replaceFloats(array[row1][j], array[row2][j]);
  38.     }
  39. }
  40.  
  41. void replaceCols(int col1, int col2, int rowNum, float** array)
  42. {
  43.     int i;
  44.     for (i = 0; i < rowNum; i++) {
  45.         replaceFloats(array[i][col1], array[i][col2]);
  46.     }
  47. }
  48.  
  49. void sortArrayByRow(int rowNum, int colNum, int rowToSort, bool asc, float **array)
  50. {
  51.     int i = rowToSort - 1;
  52.     int j, temp;
  53.     bool unSorted = true;
  54.     while (unSorted == true) {
  55.         unSorted = false;
  56.         for (j = 1; j < colNum; j++) {
  57.             if ( asc == true ) {
  58.                 if ( array[i][j] > array[i][j-1] ) {
  59.                     replaceCols(j, (j-1), rowNum, array);
  60.                     unSorted = true;
  61.                 }
  62.             }
  63.             else {
  64.                 if ( array[i][j] < array[i][j-1] ) {
  65.  
  66.                     replaceCols(j, (j-1), rowNum, array);
  67.                     unSorted = true;
  68.                 }
  69.             }
  70.         }
  71.     }
  72. }
  73.  
  74. void sortArrayByCol(int rowNum, int colNum, int colToSort, bool asc, float **array)
  75. {
  76.     int j = colToSort - 1;
  77.     int i, temp;
  78.     bool unSorted = true;
  79.     while (unSorted == true) {
  80.         unSorted = false;
  81.         for (i = 1; i < rowNum; i++) {
  82.             if ( asc == true ) {    
  83.                 if ( array[i][j] > array[i-1][j] ) {
  84.                     unSorted = true;
  85.                     replaceRows(i, (i-1), colNum, array);
  86.                 }
  87.             }
  88.             else {
  89.                 if ( array[i][j] < array[i-1][j]) {
  90.                     unSorted = true;
  91.                     replaceRows(i, (i-1), colNum, array);
  92.                 }
  93.             }
  94.         }
  95.     }
  96. }
  97.  
  98. float** createArray(int n, int m)
  99. {
  100.     int i;
  101.     float** tmp = new float* [n];
  102.     for (i = 0; i < n; i++) {
  103.         tmp[i] = new float [m];
  104.     }
  105.     return tmp;
  106. }
  107.  
  108. void readArray(int n, int m, float** array, fstream &file)
  109. {
  110.     int i, j;
  111.     char s[20];
  112.     for (i = 0; i < n; i++) {
  113.         for (j = 0; j < m; j++) {
  114.             file >> s;
  115.             array[i][j] = atoi(s);
  116.         }
  117.     }
  118. }
  119.  
  120. float** getVectorByRows(int n, int m, float** array)
  121. {
  122.     int i, j;
  123.     float sum;
  124.     float** array0 = createArray(1, m);
  125.     for (j = 0; j < m; j++) {
  126.         sum = 0;
  127.         for (i = 0; i < n; i++) {
  128.             sum += array[i][j];
  129.         }
  130.         array0[0][j] = sum;
  131.     }
  132.     return array0;
  133. }
  134.  
  135. float** multipleArray(int &n0, int &m0, int n1, int m1, int n2, int m2, float** array1, float** array2)
  136. {
  137.     /*  Умножать друг на друга можно только те матрицы,
  138.         для которых число столбцов первого сомножителя равно числу строк второго сомножителя.
  139.     */
  140.     if (m1 != n2) {
  141.         cout << "Число столбцов первой матрицы не равно числу строк второй.";
  142.         return NULL ;
  143.     }
  144.  
  145.     int i, j, k;
  146.     /*  Результатом умножения является матрица,
  147.         у которой число строк равно числу строк первого сомножителя,
  148.         а число столбцов совпадает с числом столбцов второго сомножителя.
  149.     */
  150.     n0 = n1, m0 = m2; // n0 - кол-во строк полученной матрицы, m0 - кол-во её столбцов
  151.  
  152.     float **array0 = createArray(n0, m0);
  153.     for (i = 0; i < n0; i++) {
  154.         for (j = 0; j < m0; j++) {
  155.             array0[i][j] = 0;
  156.             for (k = 0; k < m1; k++) array0[i][j] += array1[i][k] * array2[k][j];
  157.         }
  158.     }
  159.     return array0;
  160. }
  161.  
  162. int main()
  163. {
  164.     char s[20];
  165.     int n1, m1, n2, m2; // n - кол-во строк, m - кол-во столбцов
  166.     int i, j;
  167.     fstream file("myfile.txt");
  168.    
  169.     file >> s;
  170.     n1 = atoi(s);
  171.     file >> s;
  172.     m1 = atoi(s);
  173.  
  174.     cout << "Первая матрица: " << endl;
  175.     float **massiv1 = createArray(n1, m1);
  176.     readArray(n1, m1, massiv1, file);
  177.     printArray(n1, m1, massiv1);
  178.     cout << endl;
  179.  
  180.     // Читаем второй массив
  181.     file >> s;
  182.     n2 = atoi(s);
  183.     file >> s;
  184.     m2 = atoi(s);
  185.  
  186.     cout << "Вторая матрица: " << endl;
  187.     float **massiv2 = createArray(n2, m2);
  188.     readArray(n2, m2, massiv2, file);
  189.     printArray(n2, m2, massiv2);
  190.     cout << endl;
  191.  
  192.     cout << "Умноженная матрица: " << endl;
  193.     int n0, m0; // n0 - кол-во строк умноженной матрицы, m0 - кол-во её столбцов
  194.                 // будут заданы после выполнения функции multipleArray()
  195.     float **massiv0 = multipleArray(n0, m0, n1, m1, n2, m2, massiv1, massiv2);
  196.     printArray(n0, m0, massiv0);
  197.     cout << endl;
  198.  
  199.     cout << "Умноженная матрица, сортированная по первой строке: " << endl;
  200.     sortArrayByRow(n0, m0, 1, true, massiv0);
  201.     printArray(n0, m0, massiv0);
  202.     cout << endl;
  203.  
  204.     cout << "Умноженная матрица, сортированная по первому столбцу: " << endl;
  205.     sortArrayByCol(n0, m0, 1, true, massiv0);
  206.     printArray(n0, m0, massiv0);
  207.     cout << endl;
  208.  
  209.     cout << "Вектор матрицы: " << endl;
  210.     float** vectorRows = getVectorByRows(n0, m0, massiv0);
  211.     printArray(1, m0, vectorRows);    
  212.     cout << endl;
  213.  
  214.     return 0;
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement