Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
4 / 4 / 1
Регистрация: 04.11.2012
Сообщений: 72
1

Умножение + создание матриц

30.04.2013, 15:20. Показов 796. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу разобраться с умножением матриц
Выдает либо числовой мусор, либо просто нули...
Вот код:
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
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
//---------------------------------------------------------------------------
enum {max_size=10};
struct Matrix {
        double coef[max_size][max_size];
        int sx, sy;
        };
 
void CreatMatrix(Matrix &m, int a, int b);
void PrintMatrix(const Matrix &);
 
void SummMatrix(
        const Matrix & m1,
        const Matrix & m2,
                Matrix & res);
void MultMatrix(
                const Matrix & m1,
                const Matrix & m2,
                Matrix & mres);
 
//---------------------------------------------------------------------------
void main() {
  clrscr();
  int n,qn,a,b,d,c;
  double tmp;
  cout <<"Enter size matrix A\n";
  cin >>a >> b;
  cout <<"Enter size matrix B\n";
  cin>> c >> d;
  clrscr();
  Matrix q1,q2,qSum,qMult;
/*  q1.sx=a; q1.sy=b;
  q2.sx=c; q2.sy=d;
   */
  cout << "Press Matrix A" << "\n";
  CreatMatrix(q1,a,b);
  cout << "Press matrix B" << "\n";
  CreatMatrix(q2,c,d);
  cout <<"\nMatrix A\n";
  PrintMatrix(q1);
  cout <<"\nMatrix B\n";
  PrintMatrix(q2);
  cout <<"\n\tMenu!\n 1.Sum of Matrix;\n 2.Multiplication of Matrix;\n 3.Exit\n";
  cout <<"=>: ";
  cin >>n;
  switch(n) {
    case 1: if (q1.sx!=q2.sx && q1.sy!=q2.sy) {cout <<"Sum - impossible, select 4!\n";
                         break;}
      SummMatrix(q1,q2,qSum);
      PrintMatrix(qSum);
      break;
  case 2: if (q1.sx!=q2.sy) {cout <<"Multiplication - impossible, select 4!\n";
                break;}
      MultMatrix(q1,q2,qMult);
      PrintMatrix(qMult);
      break;
    }
    getch();
}
 
void CreatMatrix(Matrix &m, int a, int b) {
 
m.sx=a; m.sy=b;//Creating matrix1...
for (int i=0; i<m.sy;i++)
for(int j=0;j<m.sx;j++) scanf("%d",&m.coef[i][j]);
}
 
void PrintMatrix(const Matrix &w)
{
for (int i=0;i<w.sy;i++)
    {
for (int j=0;j<w.sx;j++) printf("%d\t",w.coef[i][j]);
cout <<'\n';
     }
}
void SummMatrix( const Matrix &m1,
         const Matrix &m2,
         Matrix &sres) {
  sres.sx = m1.sx; sres.sy = m2.sy;
  cout<<"\nSummMatrix...\n";
  for (int i=0;i<m1.sy;i++)
    for (int j=0;j<m1.sx;j++) sres.coef[i][j]=m1.coef[i][j]+m2.coef[i][j];
}
 
void MultMatrix( const Matrix & m1,
         const Matrix & m2,
         Matrix & mres) {
  mres.sx=m1.sx; mres.sy = m2.sy;
  double M=0;
  cout <<"\nMultMatrix...\n";
  for (int i1=0;i1<m1.sx;i1++)
    for (int j1=0;j1<m2.sy;j1++)
    {
     for(int i2=0;i2<m2.sx;i2++)
     M+=(m1.coef[i1][i2]*m2.coef[i2][j1]);
     mres.coef[i1][j1]=M;
     //      M=0;
    }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2013, 15:20
Ответы с готовыми решениями:

Умножение треугольных матриц«Методы обработки разреженных матриц»
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ...

Умножение матриц
complex &lt;double&gt; c; for (int r = 0; r &lt; 4; r++) for (int col = 0; col &lt; 8;...

Умножение матриц
Добрый день, пишу алгоритм умножения матриц, я сначала понять не мог , как реализовать этот...

Умножение матриц
Даны две квадратные матрицы A и B, вычислить A2B2

5
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
30.04.2013, 15:24 2
Цитата Сообщение от Vlad708 Посмотреть сообщение
// * * *M=0;
и в чём прикол этого коммента ? в 100-й строке
0
4 / 4 / 1
Регистрация: 04.11.2012
Сообщений: 72
30.04.2013, 16:01  [ТС] 3
Цитата Сообщение от Ternsip Посмотреть сообщение
и в чём прикол этого коммента ? в 100-й строке
Обнулял значение результат, его я закоментировал, потому что ответ выдавало одни нули(

Добавлено через 35 минут
Блин,(( никто не может подсказать?
0
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
30.04.2013, 18:23 4
Vlad708,
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
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <queue>
#include <string>
#include <map>
#include <algorithm>
#include "Windows.h"
#include <conio.h>
 
using namespace std;
 
const int max_size = 100;
 
struct Matrix {
    double coef[max_size][max_size];
    int n, m;
    Matrix(int _n, int _m) {
        n = _n;
        m = _m;
        for (int i = 0; i < n; i++) 
            for (int j = 0; j < m; j++)
                coef[i][j] = 0;
    }
    void ScanMatrix(int _n, int _m) {
        n = _n;
        m = _m;
        for (int i = 0; i < n; i++) 
            for (int j = 0; j < m; j++)
                scanf("%lf", &coef[i][j]);
    }
    void PrintMatrix() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                printf("%.15lf ", coef[i][j]);
            }
            printf("\n");
        }
    }
};
 
Matrix MultMatrix(const Matrix & m1, const Matrix & m2) {
    Matrix ans(m1.n, m2.n);
    for (int i = 0; i < m1.n; i++) 
        for (int j = 0; j < m2.m; j++)
            for (int k = 0; k < m2.n; k++)
                ans.coef[i][j] += m1.coef[i][k] * m2.coef[k][j];
    return ans;
}
 
 
 
int main(){            
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    Matrix a(100, 100), b(100, 100);
    a.ScanMatrix(3, 3);
    b.ScanMatrix(3, 3);
    Matrix c = MultMatrix(a, b);
    c.PrintMatrix();
    return 0;
}
Добавлено через 55 секунд
ВВод
1 2 3
4 5 6
7 8 9

1 0 0
0 1 0
0 0 1
Вывод
1.000000000000000 2.000000000000000 3.000000000000000
4.000000000000000 5.000000000000000 6.000000000000000
7.000000000000000 8.000000000000000 9.000000000000000
1
4 / 4 / 1
Регистрация: 04.11.2012
Сообщений: 72
30.04.2013, 18:44  [ТС] 5
Цитата Сообщение от Ternsip Посмотреть сообщение
Vlad708,
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
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <queue>
#include <string>
#include <map>
#include <algorithm>
#include "Windows.h"
#include <conio.h>
 
using namespace std;
 
const int max_size = 100;
 
struct Matrix {
    double coef[max_size][max_size];
    int n, m;
    Matrix(int _n, int _m) {
        n = _n;
        m = _m;
        for (int i = 0; i < n; i++) 
            for (int j = 0; j < m; j++)
                coef[i][j] = 0;
    }
    void ScanMatrix(int _n, int _m) {
        n = _n;
        m = _m;
        for (int i = 0; i < n; i++) 
            for (int j = 0; j < m; j++)
                scanf("%lf", &coef[i][j]);
    }
    void PrintMatrix() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                printf("%.15lf ", coef[i][j]);
            }
            printf("\n");
        }
    }
};
 
Matrix MultMatrix(const Matrix & m1, const Matrix & m2) {
    Matrix ans(m1.n, m2.n);
    for (int i = 0; i < m1.n; i++) 
        for (int j = 0; j < m2.m; j++)
            for (int k = 0; k < m2.n; k++)
                ans.coef[i][j] += m1.coef[i][k] * m2.coef[k][j];
    return ans;
}
 
 
 
int main(){            
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    Matrix a(100, 100), b(100, 100);
    a.ScanMatrix(3, 3);
    b.ScanMatrix(3, 3);
    Matrix c = MultMatrix(a, b);
    c.PrintMatrix();
    return 0;
}
Добавлено через 55 секунд
ВВод
1 2 3
4 5 6
7 8 9

1 0 0
0 1 0
0 0 1
Вывод
1.000000000000000 2.000000000000000 3.000000000000000
4.000000000000000 5.000000000000000 6.000000000000000
7.000000000000000 8.000000000000000 9.000000000000000
Данные берутся из готового текстового файла? я правильно вас понял?
0
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
30.04.2013, 18:50 6
Vlad708, freopen-ом перегрузил cin на файловый ввод и вывод. Да, берётся из файла input.txt
0
30.04.2013, 18:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2013, 18:50
Помогаю со студенческими работами здесь

Умножение матриц
Я юзаю Qt, но пишу сюда т.к. он никак не влияет на код (почти) У меня есть две матрицы A и B...

Умножение матриц
Помогите с умножением матриц создал две идентичные таблицы 3х3 и тепер хочу вывести матрицу этих...

Умножение матриц
Здравствуйте помогите пожалуйста, не понимаю почему не получается перемножить матрицы. #include...

Умножение матриц
Ребят помогите пожалуйста!!! Требуется написать программку умножения матриц,значения в матрице...

Умножение матриц
Помогите умножить 2 матрицы размерностью 4х4, нужно создать ф-ю. Я пробовал, не получилось.....

Умножение матриц
Здравствуйте, у меня простая прога для умножения матриц относительно произвольных размеров...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru