0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 29
1

Произведение матриц

17.10.2016, 19:16. Показов 1341. Ответов 5
Метки нет (Все метки)

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

Необходимо вычислить произведение двух произвольных матриц.

Вот, что имею:

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
#include <iostream>
#include <ctime>
 
using namespace std;
 
void matr_in(int **A, int n, int m)
{
    
    for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
            A[i][j]=rand()%10;
}
void matr_out(int **A, int n, int m)
{
    for (int i=0;i<n;i++)
        {
            for (int j=0;j<m;j++)
            cout<<A[i][j]<<"   ";
    cout<<endl;
    }
    
}
void mult_matr(int **A, int **B, int **C, int n, int l, int m)
{
    int i,j,k;
    
    for (i=0;i<n;i++);
    {
        for (j=0;j<m;j++)
        {
            for (k=0;k<l;k++)
            {
            C[i][j] +=A[i][k]*B[k][j];
            }
        }
    }
}
 
 
void main()
    {int **A,**B, **C;
int n,l,m,i,j;
setlocale(LC_ALL,"Russian");
    cout<<"Введите размерность матриц n,l,m:"<<endl;
    cin>>n>>l>>m;
    A=new int *[n];
    for (int i=0;i<n;i++)
        A[i]=new int [l];
        B=new int *[l];
    for (int i=0;i<l;i++)
        B[i]=new int [m];
        C=new int *[n];
    for (int i=0;i<n;i++)
        C[i]=new int [m];
    matr_in(A,n,l);
    cout<<"Матрица A:"<<endl;
    matr_out(A,n,l);
    matr_in(B,l,m);
    cout<<"Матрица B:"<<endl;
    matr_out(B,l,m);
    for (i=0;i<n;i++);
    for (j=0;j<m;j++)
        C[i][j]=0;
    mult_matr(A,B,C,n,l,m);
    matr_out(C,n,m);
    system("Pause");
        for (int i=0;i<n;i++)
    delete [] A[i];
for (int i=0;i<l;i++)
    delete [] B[i];
for (int i=0;i<n;i++)
    delete [] C[i];
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2016, 19:16
Ответы с готовыми решениями:

Транспонирование матриц. Произведение транспонированных матриц
Найти матрицу С: C=ATBTB; A=\begin{bmatrix}1\\ 1\\ 1\end{bmatrix} B=\begin{bmatrix}1 &amp;...

Произведение матриц
Вобщем вот задача:&quot;Напишите перегружаемую функцию product, которая возвращает произведение...

Произведение матриц O(n^2)
Кто нибудь может скинуть код произведения матриц со сложностью O(n^2)? Никак не получается решить...

Произведение матриц
Всем привет. Пожалуйста подскажите, в чем ошибка? #include &lt;iostream&gt; using namespace std; int...

5
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
17.10.2016, 19:40 2
Лучший ответ Сообщение было отмечено VladimirML как решение

Решение

VladimirML, 61 строчка, не нужна точка с запятой
27 строчка не нужна точка с запятой

вот с удаленными ненужными ";"
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
#include <iostream>
#include <ctime>
using namespace std;
 
void matr_in(int **A, int n, int m)
{
 
    for (int i = 0; i<n; i++)
        for (int j = 0; j<m; j++)
            A[i][j] = rand() % 10;
}
void matr_out(int **A, int n, int m)
{
    for (int i = 0; i<n; i++)
    {
        for (int j = 0; j<m; j++)
            cout << A[i][j] << "   ";
        cout << endl;
    }
 
}
void mult_matr(int **A, int **B, int **C, int n, int l, int m)
{
    int i, j, k;
 
    for (i = 0; i<n; i++)
    {
        for (j = 0; j<m; j++)
        {
            for (k = 0; k<l; k++)
            {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
}
 
 
void main()
{
    int **A, **B, **C;
    int n, l, m, i, j;
    setlocale(LC_ALL, "Russian");
    cout << "Введите размерность матриц n,l,m:" << endl;
    cin >> n >> l >> m;
    A = new int *[n];
    for (int i = 0; i<n; i++)
        A[i] = new int[l];
    B = new int *[l];
    for (int i = 0; i<l; i++)
        B[i] = new int[m];
    C = new int *[n];
    for (int i = 0; i<n; i++)
        C[i] = new int[m];
    matr_in(A, n, l);
    cout << "Матрица A:" << endl;
    matr_out(A, n, l);
    matr_in(B, l, m);
    cout << "Матрица B:" << endl;
    matr_out(B, l, m);
    for ( i = 0; i<n; i++)
    for (int j = 0; j<m; j++)
        C[i][j] = 0;
    mult_matr(A, B, C, n, l, m);
    matr_out(C, n, m);
    system("Pause");
    for (int i = 0; i<n; i++)
        delete[] A[i];
    for (int i = 0; i<l; i++)
        delete[] B[i];
    for (int i = 0; i<n; i++)
        delete[] C[i];
}
Теперь все работает
1
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 29
17.10.2016, 19:40  [ТС] 3
В процессе работы программы изменяются значения переменных n, l, m, которые отвечают за размерности массивов. Как это устранить?
0
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
17.10.2016, 19:43 4
VladimirML, для изменения завести вспомогательные переменные. когда переменные n, l, m получат через консоль свои значения. Эти значения передать вспомогательным и их уже изменять в процессе работы программы
1
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 29
17.10.2016, 19:45  [ТС] 5
NRX, огромное спасибо за оперативную помощь! Обидно, такая простая ошибка. Если не секрет, как вы смогли так быстро найти ошибку? Наверное, у меня уже просто глаз замылен, как говорится.
0
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
17.10.2016, 19:51 6
VladimirML, да скорее уже глаз замылен. Я просто смотрел где ошибка с помощью дебага в visual studio. с начало думал, что выход за пределы массива.
Например тут:
C++
1
2
3
for (i=0;i<n;i++);
    for (j=0;j<m;j++)
        C[i][j]=0;
в момент работы 3 строчки i равнялось двум(я проверял на матрицах 2x2) но в первой же строчке значение i было установлено в 0. Непонятно ; а потом я заметил что в первой строчке стоит точка с запятой. и так далее...
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2016, 19:51
Помогаю со студенческими работами здесь

Произведение матриц
Даны две матрицы. Получите их произведение.

Найти произведение матриц
Дано: прямоугольные матрицы A и B. Найти произведение AB. Вычисление элемента матрицы AB оформить...

Найти произведение матриц
Даны две матрицы. Найти произведение матриц. Размерности массивов, где хранятся матрицы, должны...

Найти произведение матриц
1)Даны матрицы А и В размера k×m и m×l соответственно. Найти произведение АВ. Перемножение матриц...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru