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

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

Восстановить пароль Регистрация
 
Vlad708
4 / 4 / 0
Регистрация: 04.11.2012
Сообщений: 72
30.04.2013, 15:20     Умножение + создание матриц #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
#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;
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 15:20     Умножение + создание матриц
Посмотрите здесь:

C++ умножение матриц
C++ Умножение матриц
Умножение матриц C++
Умножение матриц C++
Умножение матриц C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
30.04.2013, 15:24     Умножение + создание матриц #2
Цитата Сообщение от Vlad708 Посмотреть сообщение
// * * *M=0;
и в чём прикол этого коммента ? в 100-й строке
Vlad708
4 / 4 / 0
Регистрация: 04.11.2012
Сообщений: 72
30.04.2013, 16:01  [ТС]     Умножение + создание матриц #3
Цитата Сообщение от Ternsip Посмотреть сообщение
и в чём прикол этого коммента ? в 100-й строке
Обнулял значение результат, его я закоментировал, потому что ответ выдавало одни нули(

Добавлено через 35 минут
Блин,(( никто не может подсказать?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 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
Vlad708
4 / 4 / 0
Регистрация: 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
Данные берутся из готового текстового файла? я правильно вас понял?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
30.04.2013, 18:50     Умножение + создание матриц #6
Vlad708, freopen-ом перегрузил cin на файловый ввод и вывод. Да, берётся из файла input.txt
Yandex
Объявления
30.04.2013, 18:50     Умножение + создание матриц
Ответ Создать тему
Опции темы

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