Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/91: Рейтинг темы: голосов - 91, средняя оценка - 4.65
0 / 0 / 1
Регистрация: 02.11.2010
Сообщений: 38
1

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

22.12.2010, 18:25. Просмотров 16603. Ответов 4
Метки нет (Все метки)

Функция 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];
            }
        }
    }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2010, 18:25
Ответы с готовыми решениями:

Функция перемножения матриц выдает неверный результат
int **mas_1; int **mas_2; int **mas_3;//глобальные void multiply(int row1, int col1, int row2,...

Оператор перемножения матриц
не работает оператор* двух матриц, никак не могу понять как сделать так, чтобы в операторе была уже...

Оптимизация перемножения матриц
В конечном итоге нужно получить результат не менее 2500 (самый последний вывод). Вот код: ...

Оптимизация перемножения матриц
Доброго времени суток! Помогите пожалуйста с оптимизацией перемножения матриц. Транспонировал,...

4
23 / 23 / 6
Регистрация: 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];
1
0 / 0 / 1
Регистрация: 02.11.2010
Сообщений: 38
22.12.2010, 20:17  [ТС] 3
мы как бы каждый элемент строки, умножаем на каждый элемент столбца и их складываем, ( если число столбцов левой матрицы равно числу строк левой матрицы), а у меня умножается лишь по одному элементу.
0
23 / 23 / 6
Регистрация: 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;
                }
        }
 
}
0
173 / 12 / 4
Регистрация: 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];
                        }
                }
        }
 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2010, 23:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Программа перемножения 2 матриц
ДОброго времени суток прошу помочь написать программу перемножения 2 матриц,матрицы вводятся с...

Ошибка в коде перемножения матриц
Ребята , здравствуйте, нужна nомощь, наnисал код nеремножений 2-х матрицы. Но nри выводе матриц...

Написать процедуру перемножения матриц.
ребят нужна помощь Задачи по программированию. Задача решается на двух языках. Задача 8....

Написать функцию перемножения матриц
Написать программу , которая вводит матрицу А,транспонирует ее , транспонированную перемножает на А...

Не могу написать программу перемножения матриц
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int i,j; void vvod(int X) {...

Ошибка в алгоритме перемножения двух матриц
Ошибка в алгоритме произведения двух матриц. Я так понял, что где-то выходит за границы массивов. ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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