Форум программистов, компьютерный форум CyberForum.ru

Вычислить все возможные произведения матриц. Упорядочить по возрастанию элементы главной диагонали... - C++

Восстановить пароль Регистрация
 
xackep
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 20
15.04.2013, 21:37     Вычислить все возможные произведения матриц. Упорядочить по возрастанию элементы главной диагонали... #1
Даны четыре вещественные матрицы произвольной размерности (размерности вводятся пользователем). Вычислить все возможные произведения матриц. Упорядочить по возрастанию элементы главной диагонали той из полученных матриц, след которой является наибольшим (следом матрицы называется сумма элементов главной диагонали). Если в результате вычисления произведений получена одна матрица, применить к ней указанное упорядочение.

вот, что я сделал совместными усилиями с одним знакомым, дальше мне сказал самому делать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 class matrix {                                                 // клас матрица
        private:                                                //писать необязательно
        float **p_m;
        int n, m;
        public:
            matrix();                                           //конструктор по умолчанию
        matrix (int count_n, int count_m);                      //конструктор инициализации
        matrix (const matrix& matr);                            //конструктор копирования
        matrix operator*(matrix& umn1);
        friend istream& operator >> (istream& is, matrix& matr);
        friend ostream& operator << (ostream& os, matrix& matr);
        ~matrix();
        };
 matrix::matrix()
 {
     m=0;
     n=0;
 }
 matrix::matrix(int count_m, int count_n)
 {
     m=count_m;
     n=count_n;
     p_m = new float *[m];
     for (int i=0; i<m; i++)
     {
         p_m[i]=new float [n];
     }
     for (int i=0; i<m; i++)
     {
         for (int j=0; j<n; j++)
             p_m[i][j]=0;
     }
 }
 
 matrix::matrix (const matrix& matr)
 {
     m=matr.m;
     n=matr.n;
     p_m = new float *[m];
     for (int i=0; i<m; i++)
     {
         p_m[i]=new float [n];
     }
     for (int i=0; i<m; i++)
     {
         for (int j=0; j<n; j++)
             p_m[i][j]=matr.p_m[i][j];
     }
 }
 
 matrix::~matrix()
 {
 }
 
 istream& operator >> (istream& is, matrix& matr)
 {
     int m, n;
     cout << "ВВедите размер матрицы через пробел: ";
     is >> m; 
     is >> n;
     matr = matrix (m, n);
     for (int i=0; i<matr.m; i++)
         for (int j=0; j<matr.n; j++)
             matr.p_m[i][j] = rand()%10/2;
     return is;
 }
 matrix matrix::operator *(matrix &umn1)
{
    float sum;
    matrix umn(this->m,umn1.n);
    if (this->n==umn1.m)
    {
        for(int i=0;i<this->m;i++)
            for(int j=0;j<umn1.n;j++)   
            {
                sum=0;
                for(int k=0;k<this->n;k++)
                    sum+=p_m[i][k]*umn1.p_m[k][j];
                umn.p_m[i][j]=sum;
            }
    }
    else
        cout<< "Error: incorrect size of the matrix";
    return umn;
}
ostream& operator << (ostream& os, matrix& matr)
{
    for (int i=0; i<matr.m; i++)
    {
        for (int j=0; j<matr.n; j++)
            os << "\t" << matr.p_m[i][j];
        cout << endl;
    }
    return os;
}
 
 void main ()
 {
     setlocale(LC_CTYPE, "rus");            //функция для включения русского языка
     matrix A;
     matrix B;
     matrix C;
     matrix D;
     cin >> A;
     cin >> B;
     cin >> C;
     cin >> D;
 
     matrix E=A*B;
     cout << E;
     system("pause");
 }
а непонятно мне, собственно, как зафигачить сюда, например, алгоритм сортировки главной диагонали:
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0; i<n; i++)
        for(int j=0; j<n-i; j++)
        {
            if(A[j][j] > A[j+1][j+1])
            {
                int tmp = A[j][j];
                A[j][j] = A[j+1][j+1];
                A[j+1][j+1] = tmp;
            }
        }
и как работать с получившимися после перемножения матрицами? в исходнике я умножать пока не стал, ибо не ясно - то ли нужно умножить "тупо" в main или задать какую то функцию, которая сама перемножит их...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 21:37     Вычислить все возможные произведения матриц. Упорядочить по возрастанию элементы главной диагонали...
Посмотрите здесь:

Упорядочить строки матрицы по возрастанию значений элементов ее главной диагонали методом обмена. C++
Квадратная матрица: Вычислить сумму элементов, расположенных на главной диагонали и выше, которые превосходят все элементы C++
Упорядочить элементы на главной диагонали по возрастанию C++
В прямоугольной целочисленной матрицы упорядочить элементы размещенных на главной диагонали по убыванию C++
Упорядочить элементы главной диагонали перестановкой столбцов C++
C++ Вычислить сумму тех из m элементов, которые превосходят по величине все элементы, расположенные ниже главной диагонали
Сохранить все нулевые элементы, размещенные на главной диагонали и в верхней половине области выше диагонали C++
C++ Вычислить среднее арифметическое побочной диагонали матрицы, и заменить им элементы ниже главной диагонали

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 15:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru