Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <time.h>
- #include <random>
- #include <iomanip>
- using namespace std;
- int main()
- {
- // Квадратная матрица А(треугольная или симметричная) порядка n в целях экономии памяти задана в виде
- // одномерного массива из(n + 1)n / 2 чисел: сначала идет n элементов первой строки,
- // затем n – 1 элементов второй строки, начиная со второго элемента, и т.д.
- // (из последней n-й строки берется только n-й элемент).
- // 2. Задана вещественная левая треугольная матрица А. Найти матрицу В = A * А^T.
- setlocale(LC_ALL, "rus");
- cout << "Размерность матрицы. n = ";
- int n;
- cin >> n;
- int N = (n + 1)*n / 2;
- int *B = new int[N];
- for (int j = 0; j < N; j++) {
- B[j] = 0;
- }
- int *A = new int[N];
- srand(time(0));
- cout << "A : ";
- for (int i = 0; i < N; i++) {
- cout << (A[i] = rand() % 11) << " ";
- }
- cout << endl << endl;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- cout << setw(3) << (i < j ? 0 : A[j * n - (j - 1) * j / 2 + i - j]);
- }
- cout << endl;
- }
- cout << endl << endl;
- cout << "A^T : " << endl;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- cout << setw(3) << (i > j ? 0 : A[i * n - (i - 1) * i / 2 + j - i]);
- }
- cout << endl;
- }
- cout << endl << endl;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- if (i > j) {
- continue;
- }
- int adr = i * n - (i - 1) * i / 2 + j - i;
- for (int s = 0; s < n; s++) {
- 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]);
- }
- }
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- cout << setw(4) << B[i < j ? i * n - (i - 1) * i / 2 + j - i : j * n - (j - 1) * j / 2 + i - j];
- }
- cout << endl;
- }
- cout << endl << endl;
- delete[] A;
- delete[] B;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement