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

Функция перемножения матриц. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.77
Кемаль
 Аватар для Кемаль
0 / 0 / 0
Регистрация: 02.11.2010
Сообщений: 38
22.12.2010, 18:25     Функция перемножения матриц. #1
Функция mult, прошу помощи, ибо не пойму в чем ошибка.
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
#include <iostream>
#include <math.h>
#include <time.h>
#include <cstdlib>
using namespace std;
void shape(int** x, int n, int m, int** y, int** c);
void mult (int** x, int n, int m, int** y, int** mt);
int main ()
{
    int n;
    int m;
    cout <<"Enter the number of strings of matrix A"<<endl;
    cin >> n;
    cout <<"Enter the number of columns of matrix A"<<endl;
    cin >> m;
    srand(time(NULL));
    int **a = new int* [n];
    for (int i = 0; i < n; i++)
    {
        a[i] = new int [m];
    }
    cout <<"The array A is"<< endl;
    for (int i = 0; i< n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            a[i][j] = rand()% 10;
            cout << a[i][j]<<' ';
        }
        cout << endl;
    }
    // определили первую матрицу
    int z;
    int w;
    cout <<"Enter the number of strings of matrix B"<<endl;
    cin >> z;
    cout <<"Enter the number of columns of matrix B"<<endl;
    cin >> w;
    int **b = new int* [z];
    for (int i = 0; i < z; i++)
    {
        b[i] = new int [w];
    }
    cout <<"The array B is"<< endl;
    for (int i = 0; i< z; i++)
    {
        for (int j = 0; j < w; j++)
        {
            b[i][j] = rand()% 10;
            cout << b[i][j]<<' ';
        }
        cout << endl;
    }
    // определили вторую матрицу
    int l;
    int k;
    cout <<"Enter the number of strings of matrix C"<<endl;
    cin >> l;
    cout <<"Enter the number of columns of matrix C"<<endl;
    cin >> k;
    int **add = new int* [l];
    for (int i = 0; i < l; i++)
    {
        add[i] = new int [k];
    }
    for (int i = 0; i< l; i++)
    {
        for (int j = 0; j < k; j++)
        {
            add[i][j] = 0;
        }
        cout << endl;
    }
    if (n == z && m == w)
        shape (a, n, m, b, add);
    cout <<" The addition is" << endl;
    for (int i = 0; i< l; i++)
    {
        for (int j = 0; j < k; j++)
        {
            cout << add[i][j]<<' ';
        }
        cout << endl;
    }
    // матрица- заполнитель умножения
    int **mt = new int* [l];
    for (int i = 0; i < l; i++)
    {
        mt[i] = new int [k];
    }
    for (int i = 0; i< l; i++)
    {
        for (int j = 0; j < k; j++)
        {
            mt[i][j] = 0;
        }
        cout << endl;
    }
    if (m == z)
        mult(a, n, m, b, mt);
    else cout <<"Error in mult"<< endl;
    cout <<" The mult is is" << endl;
    for (int i = 0; i< l; i++)
    {
        for (int j = 0; j < k; j++)
        {
            cout << add[i][j]<<' ';
        }
        cout << endl;
    }
    system ("PAUSE");
    for(int i = 0; i < n; i++)
    delete[] a[i];
    delete[] a;
    for(int i = 0; i < z; i++)
    delete[] b[i];
    delete[] b;
    for(int i = 0; i < l; i++)
    delete[] add[i];
    delete[] add;
    for(int i = 0; i < l; i++)
    delete[] mt[i];
    delete[] mt;
    return 0;
}
void shape(int** x, int n, int m, int** y, int** add)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            add[i][j] = x[i][j] + y[i][j];
        }
    }
}
void mult(int** x, int n, int m, int** y, int** mt)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            {
                mt[i][j] += x[i][i] * y[i][j];
            }
        }
    }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DAgot_
 Аватар для DAgot_
22 / 22 / 1
Регистрация: 03.01.2010
Сообщений: 68
22.12.2010, 18:43     Функция перемножения матриц. #2
Насколько я помню, матрицы перемножаются по правилу «строка на столбец».
И, если функция mult должна перемножать матрицы так, как я это понимаю, то вместо
C++
1
mt[i][j] += x[i][i] * y[i][j];
должно стоять
C++
1
mt[i][j] = x[j][i] * y[i][j];
Кемаль
 Аватар для Кемаль
0 / 0 / 0
Регистрация: 02.11.2010
Сообщений: 38
22.12.2010, 20:17  [ТС]     Функция перемножения матриц. #3
мы как бы каждый элемент строки, умножаем на каждый элемент столбца и их складываем, ( если число столбцов левой матрицы равно числу строк левой матрицы), а у меня умножается лишь по одному элементу.
DAgot_
 Аватар для DAgot_
22 / 22 / 1
Регистрация: 03.01.2010
Сообщений: 68
22.12.2010, 23:22     Функция перемножения матриц. #4
Точно, точно.
Тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void mult(int** x, int n, int m, int** y, int** mt)
int temp = 0;
{
        for (int i = 0; i < n; i++)
        {
                for (int j = 0; j < m; j++)
                {
                        for(int k = 0; k < n; k++)
                        {
                                temp += x[j][k] * y[k][j];
                        }
                        mt[i][j] = temp;
                }
        }
 
}
Kostyanych77
 Аватар для Kostyanych77
172 / 11 / 2
Регистрация: 21.12.2010
Сообщений: 66
22.12.2010, 23:27     Функция перемножения матриц. #5
Ты просто много раз объявлял переменную "i", вот твойже код только обработанный:
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
#include <iostream>
#include <math.h>
#include <time.h>
#include <cstdlib>
using namespace std;
void shape(int** x, int n, int m, int** y, int** c);
void mult (int** x, int n, int m, int** y, int** mt);
int main ()
{
        int n;
        int m;
        cout <<"Enter the number of strings of matrix A"<<endl;
        cin >> n;
        cout <<"Enter the number of columns of matrix A"<<endl;
        cin >> m;
        srand(time(NULL));
        int **a = new int* [n];
        for (int i = 0; i < n; i++)
        {
                a[i] = new int [m];
        }
        cout <<"The array A is"<< endl;
        for (i = 0; i< n; i++)
        {
                for (int j = 0; j < m; j++)
                {
                        a[i][j] = rand()% 10;
                        cout << a[i][j]<<' ';
                }
                cout << endl;
        }
        // îïðåäåëèëè ïåðâóþ Г¬Г*òðèöó
        int z;
        int w;
        cout <<"Enter the number of strings of matrix B"<<endl;
        cin >> z;
        cout <<"Enter the number of columns of matrix B"<<endl;
        cin >> w;
        int **b = new int* [z];
        for (i = 0; i < z; i++)
        {
                b[i] = new int [w];
        }
        cout <<"The array B is"<< endl;
        for (i = 0; i< z; i++)
        {
                for (int j = 0; j < w; j++)
                {
                        b[i][j] = rand()% 10;
                        cout << b[i][j]<<' ';
                }
                cout << endl;
        }
        // îïðåäåëèëè âòîðóþ Г¬Г*òðèöó
        int l;
        int k;
        cout <<"Enter the number of strings of matrix C"<<endl;
        cin >> l;
        cout <<"Enter the number of columns of matrix C"<<endl;
        cin >> k;
        int **add = new int* [l];
        for (i = 0; i < l; i++)
        {
                add[i] = new int [k];
        }
        for (i = 0; i< l; i++)
        {
                for (int j = 0; j < k; j++)
                {
                        add[i][j] = 0;
                }
                cout << endl;
        }
        if (n == z && m == w)
                shape (a, n, m, b, add);
        cout <<" The addition is" << endl;
        for (i = 0; i< l; i++)
        {
                for (int j = 0; j < k; j++)
                {
                        cout << add[i][j]<<' ';
                }
                cout << endl;
        }
        // Г¬Г*òðèöГ*- Г§Г*ïîëГ*èòåëü ГіГ¬Г*îæåГ*ГЁГї
        int **mt = new int* [l];
        for (i = 0; i < l; i++)
        {
                mt[i] = new int [k];
        }
        for (i = 0; i< l; i++)
        {
                for (int j = 0; j < k; j++)
                {
                        mt[i][j] = 0;
                }
                cout << endl;
        }
        if (m == z)
                mult(a, n, m, b, mt);
        else cout <<"Error in mult"<< endl;
        cout <<" The mult is is" << endl;
        for (i = 0; i< l; i++)
        {
                for (int j = 0; j < k; j++)
                {
                        cout << add[i][j]<<' ';
                }
                cout << endl;
        }
        system ("PAUSE");
        for(i = 0; i < n; i++)
        delete[] a[i];
        delete[] a;
        for(i = 0; i < z; i++)
        delete[] b[i];
        delete[] b;
        for(i = 0; i < l; i++)
        delete[] add[i];
        delete[] add;
        for(i = 0; i < l; i++)
        delete[] mt[i];
        delete[] mt;
        return 0;
}
void shape(int** x, int n, int m, int** y, int** add)
{
        for (int i = 0; i < n; i++)
        {
                for (int j = 0; j < m; j++)
                {
                        add[i][j] = x[i][j] + y[i][j];
                }
        }
}
void mult(int** x, int n, int m, int** y, int** mt)
{
        for (int i = 0; i < n; i++)
        {
                for (int j = 0; j < m; j++)
                {
                        {
                                mt[i][j] += x[i][i] * y[i][j];
                        }
                }
        }
 
}
Yandex
Объявления
22.12.2010, 23:27     Функция перемножения матриц.
Ответ Создать тему
Опции темы

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