Advertisement
Caneq

lb3.7.2

Dec 12th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <time.h>
  4. #include <random>
  5. #include <iomanip>
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.     // Квадратная матрица А(треугольная или симметричная) порядка n в целях экономии памяти задана в виде
  11.     // одномерного массива из(n + 1)n / 2 чисел: сначала идет n элементов первой строки,
  12.     //  затем n – 1 элементов второй строки, начиная со второго элемента, и т.д.
  13.     //  (из последней n-й строки берется только n-й элемент).
  14.  
  15.     // 2.   Задана вещественная левая треугольная матрица А. Найти матрицу В = A * А^T.
  16.  
  17.     setlocale(LC_ALL, "rus");
  18.     cout << "Размерность матрицы. n = ";
  19.     int n;
  20.     cin >> n;
  21.     int N = (n + 1)*n / 2;
  22.     int *B = new int[N];
  23.     for (int j = 0; j < N; j++) {
  24.         B[j] = 0;
  25.     }
  26.     int *A = new int[N];
  27.     srand(time(0));
  28.     cout << "A : ";
  29.     for (int i = 0; i < N; i++) {
  30.         cout << (A[i] = rand() % 11) << " ";
  31.     }
  32.     cout << endl << endl;
  33.  
  34.  
  35.     for (int i = 0; i < n; i++) {
  36.         for (int j = 0; j < n; j++) {
  37.             cout << setw(3) << (i < j ? 0 : A[j * n - (j - 1) * j / 2 + i - j]);
  38.         }
  39.         cout << endl;
  40.     }
  41.     cout << endl << endl;
  42.  
  43.     cout << "A^T : " << endl;
  44.     for (int i = 0; i < n; i++) {
  45.         for (int j = 0; j < n; j++) {
  46.             cout << setw(3) << (i > j ? 0 : A[i * n - (i - 1) * i / 2 + j - i]);
  47.         }
  48.         cout << endl;
  49.     }
  50.     cout << endl << endl;
  51.  
  52.     for (int i = 0; i < n; i++) {
  53.         for (int j = 0; j < n; j++) {
  54.             if (i > j) {
  55.                 continue;
  56.             }
  57.             int adr = i * n - (i - 1) * i / 2 + j - i;
  58.             for (int s = 0; s < n; s++) {
  59.                 B[adr] += (i < s ? 0 : A[s * n - (s - 1) * s / 2 + i - s]) * (s > j ? 0 : A[s * n - (s - 1) * s / 2 + j - s]);
  60.             }
  61.         }
  62.     }
  63.  
  64.     for (int i = 0; i < n; i++) {
  65.         for (int j = 0; j < n; j++) {
  66.             cout << setw(4) << B[i < j ? i * n - (i - 1) * i / 2 + j - i : j * n - (j - 1) * j / 2 + i - j];
  67.         }
  68.         cout << endl;
  69.     }
  70.     cout << endl << endl;
  71.  
  72.     delete[] A;
  73.     delete[] B;
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement