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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xackep
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 20
#1

сравнить матрицы - C++

25.06.2013, 22:06. Просмотров 802. Ответов 6
Метки нет (Все метки)

есть функция для нахождения суммы элементов главной диагонали матрицы:
C++
1
2
3
int i, s=0;
for(i=0; i<summa.m; i++)
s+=summa.p_m[i][i];
а нужно сравнить 12 матриц и у той, у которой сумма будет больше произвести там дальнейшие операции, то как их можно сравнить?

я сделал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (sum (AB) > max) max = sum (AB);
if (sum (BA) > max) max = sum (BA);
if (sum (AC) > max) max = sum (AC);
if (sum (CA) > max) max = sum (CA);
if (sum (AD) > max) max = sum (AD);
if (sum (DA) > max) max = sum (DA);
if (sum (BC) > max) max = sum (BC);
if (sum (CB) > max) max = sum (CB);
if (sum (BD) > max) max = sum (BD);
if (sum (DB) > max) max = sum (DB);
if (sum (CD) > max) max = sum (CD);
if (sum (DC) > max) max = sum (DC);
вроде работает, только просто находит максимальную сумму, а мне еще с той матрицой продолжить работу надо... как это можно сделать? подскажите плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 22:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сравнить матрицы (C++):

Выбрать максимальные элементы матрицы, сравнить их и вывести самый максимальный - C++
Вообщем. Есть двумерный массив(матрица) Matrix] и одномерный массив pi 1 часть Заполняем массив pi 2,3,4,7,8,9 Заполняем...

Сравнить минимум матрицы и минимум каждой ее строки - C++
помогите пожалуйста сравнить минимум матрицы и минимум каждой строки и вывести те строки в которой минимум матрицы равно минимуму...

Сравнить 2 подпоследовательности - C++
Есть строка,которую нужно заполнить тремя символами,но не должно быть смежных подпоследовательностей, то есть как обеспечить сравнение двух...

Сравнить 2-й и 4-й символы - C++
Дано слово. Определить, одинаковы ли второй и четвёртый символы в нем. Код ниже, независимо от результата выводит No всегда... И что...

сравнить double с 0 - C++
спортивный интерес - наткнулся в вк, стало любопытно, а как правильно (хороший тон или стиль итп итд) сравнить double с 0, были варианты с...

Сравнить переменные - C++
Всем доброго времени суток, подскажите как сравнить 5 целочисленных переменных и большую из них распечатать?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 22:11 #2
Цитата Сообщение от xackep Посмотреть сообщение
C++
1
if (sum (AB) > max) max = sum (AB);
AB это произведение матриц A и B?
xackep
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 20
25.06.2013, 22:13  [ТС] #3
да, я могу полностью код выложить. просто там нужно перемножить 4 матрицы между собой всеми способами

Добавлено через 45 секунд
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include "stdafx.h"
#include <iostream>
#include <iomanip>
 
using namespace std;
 
 class matrix {                                                 // клас матрица
        private:                                                //писать необязательно
        public:
        int n, m;
        float *massiv;
        float **p_m;
        float **sort;
 
            matrix();                                           //конструктор по умолчанию
        matrix (int count_n, int count_m);                      //конструктор инициализации
        matrix (const matrix& matr);                            //конструктор копирования
        int sum (matrix& summa);
        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] = float (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\n";
    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;
}
int sum (matrix& summa)
{
    int i;
    float s=0;
    for(i=0; i<summa.m; i++)
        s+=summa.p_m[i][i];
    return s;
}            
 void main ()
 {
     float max=0;
     setlocale(LC_CTYPE, "rus");            //функция для включения русского языка
     matrix A;
     matrix B;
     matrix C;
     matrix D;
     cin >> A;
     cout << A;
     cin >> B;
     cout << B;
     cin >> C;
     cout << C;
     cin >> D;
     cout << D;
 
 
 
     matrix AB=A*B;
     matrix BA=B*A;
     matrix AC=A*C;
     matrix CA=C*A;
     matrix AD=A*D;
     matrix DA=D*A;
     matrix BC=B*C;
     matrix CB=C*B;
     matrix BD=B*D;
     matrix DB=D*B;
     matrix CD=C*D;
     matrix DC=D*C;
     cout << AB << "\n";
     cout << BA << "\n";
     cout << AC << "\n";
     cout << CA << "\n";
     cout << AD << "\n";
     cout << DA << "\n";
     cout << BC << "\n";
     cout << CB << "\n";
     cout << BD << "\n";
     cout << DB << "\n";
     cout << AB << "\n";
 
      if (sum (AB) > max) max = sum (AB);
      if (sum (BA) > max) max = sum (BA);
      if (sum (AC) > max) max = sum (AC);
      if (sum (CA) > max) max = sum (CA);
      if (sum (AD) > max) max = sum (AD);
      if (sum (DA) > max) max = sum (DA);
      if (sum (BC) > max) max = sum (BC);
      if (sum (CB) > max) max = sum (CB);
      if (sum (BD) > max) max = sum (BD);
      if (sum (DB) > max) max = sum (DB);
      if (sum (CD) > max) max = sum (CD);
      if (sum (DC) > max) max = sum (DC);
 
     system("pause");
 
 }
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 22:15 #4
так облегчите себе задачу. сумма элементов диагоналей это след матрицы, который обладает свойством коммутативности
tr(AB) = tr(BA),
поэтому половину сравнений можно уже убрать.
xackep
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 20
25.06.2013, 22:19  [ТС] #5
просто я не могу сообразить щас, как взять эту матрицу с максимальной суммой элементов главной диагонали(((

Добавлено через 3 минуты
а tr тут - это что?

Добавлено через 41 секунду
то есть получается, что функцию для нахождения суммы можно тоже убрать?
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 22:22 #6
создайте указатель
float **pa;
и в него записывайте адрес динамической матрицы с максимальной суммой, а потом с ним и работайте.

Добавлено через 1 минуту
Цитата Сообщение от xackep Посмотреть сообщение
а tr тут - это что?
tr (track) это ваша sum

Добавлено через 46 секунд
Цитата Сообщение от xackep Посмотреть сообщение
то есть получается, что функцию для нахождения суммы можно тоже убрать?
нет, tr это общеизвестное обозначение
xackep
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 20
25.06.2013, 22:31  [ТС] #7
спасибо, попробую, только не сейчас, а то голова болит уже, 5 часов программированием занимаюсь...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 22:31
Привет! Вот еще темы с ответами:

Сравнить 2 массива - C++
Есть 2 массива. один 15х13 другой 6х6. Нужно узнать содержится второй массив в первом. Не знаю как это делать с двухмерными массивами.

как сравнить даты?? - C++
допустим у меня есть две даты.как определить какая из них больше?? например char data; char Data; strcpy(data,&quot;10.10.2010&quot;); ...

Файлы(сравнить строки) - C++
/* Написать программу, которая открывает в текстовом режиме произвольный текстовый файл в указанном каталоге, в соответствии с его...

Сравнить скорость сходимости - C++
Задачка


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.06.2013, 22:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru