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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.77
Кемаль
0 / 0 / 0
Регистрация: 02.11.2010
Сообщений: 38
#1

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

22.12.2010, 18:25. Просмотров 5877. Ответов 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];
            }
        }
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2010, 18:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция перемножения матриц. (C++):

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

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

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

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

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

Ошибка в алгоритме перемножения двух матриц - C++
Ошибка в алгоритме произведения двух матриц. Я так понял, что где-то выходит за границы массивов. private: void com(int size, int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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_
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
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];
                        }
                }
        }
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2010, 23:27
Привет! Вот еще темы с ответами:

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

Оптимизация алгоритма перемножения двух матриц - C++
Здравствуйте, нужна помощь. Есть 2 матрицы, нужно их перемножить так, что бы алгоритм выполнялся со скорость O(n) и O(log(n))

Массив: перемножения двух матриц A,B размерности n*n - C++
Разработать программу перемножения двух матриц A,B размерности n*n. Все матрицы размещаются в оперативной памяти динамически с помощью...

Алгоритм Штрассена для быстрого перемножения матриц - C++
Помогите реализовать алгоритм Штрассена! Может у кого нибудь есть исходник на С++? Если не программой то помогите с идеями, как это все...


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

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

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