Advertisement
Solingen

z15.3.cpp

Dec 22nd, 2024
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <iostream>
  2. #include "string.h"
  3. #include "array.h"
  4. using namespace std;
  5.  
  6. Array<Array<double>> transpose(const Array<Array<double>>& A)
  7. {
  8.     int m = A.size();
  9.     int n = A[0].size();
  10.     // создадим (n x m)
  11.     Array<Array<double>> AT;
  12.     for(int j = 0; j < n; j++)
  13.     {
  14.         Array<double> row;
  15.         for(int i = 0; i < m; i++)
  16.         {
  17.             row.append(A[i][j]);
  18.         }
  19.         AT.append(row);
  20.     }
  21.     return AT;
  22. }
  23.  
  24. Array<Array<double>> multiplyMatrix(const Array<Array<double>>& A, const Array<Array<double>>& B)
  25. {
  26.     int m = A.size();
  27.     int n = A[0].size();
  28.     int p = B[0].size();
  29.     Array<Array<double>> C;
  30.     // Инициализируем (m x p) нулями
  31.     for(int i = 0; i < m; i++)
  32.     {
  33.         Array<double> rowC;
  34.         for(int j = 0; j < p; j++)
  35.         {
  36.             rowC.append(0.0);
  37.         }
  38.         C.append(rowC);
  39.     }
  40.  
  41.     for(int i = 0; i < m; i++)
  42.     {
  43.         for(int j = 0; j < p; j++)
  44.         {
  45.             double sum = 0.0;
  46.             for(int k = 0; k < n; k++)
  47.             {
  48.                 sum += A[i][k] * B[k][j];
  49.             }
  50.             C[i][j] = sum;
  51.         }
  52.     }
  53.     return C;
  54. }
  55.  
  56. int main()
  57. {
  58.     // Считываем A
  59.     int m, n;
  60.     cin >> m >> n;
  61.     Array<Array<double>> A;
  62.     for(int i = 0; i < m; i++)
  63.     {
  64.         Array<double> row;
  65.         for(int j = 0; j < n; j++)
  66.         {
  67.             double val;
  68.             cin >> val;
  69.             row.append(val);
  70.         }
  71.         A.append(row);
  72.     }
  73.  
  74.     // Транспонируем
  75.     auto AT = transpose(A);
  76.     cout << "A^T:\n";
  77.     for(int i = 0; i < AT.size(); i++)
  78.     {
  79.         for(int j = 0; j < AT[i].size(); j++)
  80.         {
  81.             cout << AT[i][j] << " ";
  82.         }
  83.         cout << endl;
  84.     }
  85.  
  86.     // Считываем B (n x p)
  87.     int p;
  88.     cin >> p;
  89.     Array<Array<double>> B;
  90.     for(int i = 0; i < n; i++)
  91.     {
  92.         Array<double> rowB;
  93.         for(int j = 0; j < p; j++)
  94.         {
  95.             double val;
  96.             cin >> val;
  97.             rowB.append(val);
  98.         }
  99.         B.append(rowB);
  100.     }
  101.  
  102.     auto C = multiplyMatrix(A, B);
  103.  
  104.     cout << "A x B:\n";
  105.     for(int i = 0; i < C.size(); i++)
  106.     {
  107.         for(int j = 0; j < C[i].size(); j++)
  108.         {
  109.             cout << C[i][j] << " ";
  110.         }
  111.         cout << endl;
  112.     }
  113.  
  114.     return 0;
  115. }
  116.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement