Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Mental handicap
1243 / 621 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
1

Умножение матриц

26.04.2016, 20:19. Просмотров 447. Ответов 2
Метки нет (Все метки)


Вообщем при вводе матриц размером 1х4 или 3х4, получается такое(на картинке), но если вводить матрицы к примеру 4х1 или 4х4, то все окей, оно перемножает.. Как пофиксить?
Вот сам код:
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
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <conio.h>
 
const int n = 1, m = 4;
 
using namespace std;
 
void vvid(int** a, int** b)
{
    cout << "Vvedite A:\n";
    for (int i = 0; i<n; i++)
    {
        for (int j = 0; j<m; j++)
        {
            cin >> a[i][j];
        }
    }
    cout << "Vvedite B:\n";
    for (int i = 0; i<n; i++)
    {
        for (int j = 0; j<m; j++)
        {
            cin >> b[i][j];
        }
    }
}
 
void mnoj(int** a, int **b, int** (&c))
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            c[i][j] = 0;
            for (int k = 0; k < m; k++)
            {
                c[i][j] += a[i][k] * b[k][j];
            }
        }
    }
}
 
void out(int **c)
{
    for (int i = 0; i<n; i++)
    {
        for (int j = 0; j<m; j++)
        {
            cout << setw(4) << c[i][j];
        }
        cout << endl;
    }
}
 
int main()
{
    
    int **a = new int*[n];
    int **b = new int*[n];
    int **c = new int*[n];
    
    for (int i = 0; i < n; i++)
    {
        a[i] = new int[m];
        b[i] = new int[m];
        c[i] = new int[m];
        
        for (int j = 0; j < m; j++)
        {
            a[i][j] = i * j;
            b[i][j] = i * j;
        }
    }
    vvid(a, b);
    cout << "Mas A:" << endl;
    out(a);
    cout << "Mas B:" << endl;
    out(b);
    mnoj(a, b, c);
    cout << "Mas C:" << endl;
    out(c);
    for (int i = 0; i < n; i++)
    {
        delete[]a[i]; 
        delete[]b[i]; 
        delete[]c[i];
    }
    delete[] a;
    delete[] b;
    delete[] c;
    _getch();
    return 0;
}
0
Миниатюры
Умножение матриц  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2016, 20:19
Ответы с готовыми решениями:

Умножение треугольных матриц«Методы обработки разреженных матриц»
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ...

Умножение матриц
Добрый день, возникла проблема на этапе заполнения матриц. Вызвано исключение по адресу 0x01252DB5...

Умножение матриц
int **calculation3(int **mat1,int **mat2,int q,int e,int w,int t){ int m,ww=0,x,z;...

Умножение матриц
Уважаемые форумчане пожалуйста помогите разобраться и решить задачку. Не смог понять постановку...

2
381 / 275 / 478
Регистрация: 09.05.2014
Сообщений: 769
28.04.2016, 10:55 2
Операция умножения двух матриц выполнима только в том случае, если число столбцов в первом сомножителе равно числу строк во втором;
(с) википедия. короче нужно задать три размерности: m, n, k, соответственно матрицы будут иметь размерность A[m][n], B[n][k], C[m][k]. иначе при перемножении выход за границу С и имеем то, что имеем.
0
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
28.04.2016, 11:03 3
может поможет мой старый код
Кликните здесь для просмотра всего текста
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
/*///////////////////////////
Умножение матриц         ////
*////////////////////////////
#include <iostream>
#include <conio.h>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL , "Russian");
    int a1(0), b1(0), a2(0), b2(0);
 
    cout << "Введите длину и высоту 1й матрицы: ";
    cin >> b1 >> a1;
    cout << "\nВведите длину и высоту 2й матрицы: ";
    cin >> b2 >> a2;
 
    if(b1 != a2)
    {
        cout << "\nМатрицы не согласованы!\n ";
        cout << "(количество столбцов матрицы 1, должно быть равным количеству строк матрицы 2!\n";
        main();
    }
        int n = 0;
        int **matrix1 = new int* [a1];
        int **matrix2 = new int* [a2];
        int **matrix3 = new int* [a1];
        for (int i(0); i < a1; i++)
            matrix1[i] = new int[b1];
        for (int i(0); i < a2; i++)
            matrix2[i] = new int[b2];
        for (int i(0); i < a1; i++)
            matrix3[i] = new int[b2];
 
        // Заполняем матрицу3 нулями
        for (int i(0); i < a1; i++)
            for ( int j(0); j < b2; j++)
                matrix3[i][j] = 0;
 
        // Выводим "скелеты матриц" на экран
        for (int i(0); i < a1; i++)
        {
            cout << endl << endl;
            for ( int j(0); j < b1; j++)
                cout << '*' << "  ";
        }
        cout << endl << endl;
 
            for (int i(0); i < a2; i++)
            {
                cout << endl << endl;
                for ( int j(0); j < b2; j++)
                    cout << '*' << "  ";
            }
        cout << endl << endl;
 
            for (int i(0); i < a1; i++)
            {
                cout << endl << endl;
                for ( int j(0); j < b2; j++)
                    cout << '*' << "  ";
            }
 
        cout << "\nЗаполните матрицу 1:\n";
        for (int i(0); i < a1; i++)
            for ( int j(0); j < b1; j++)
                cin >> matrix1[i][j];
 
        cout << "\nЗаполните матрицу 2:\n";
        for (int i(0); i < a2; i++)
            for ( int j(0); j < b2; j++)
                cin >> matrix2[i][j];
        
        system("cls");
 
        // Выводим наши матрицы на экран
        for (int i(0); i < a1; i++)
        {
            cout << endl;
            for ( int j(0); j < b1; j++)
                cout << matrix1[i][j] << "\t";
        }
 
        cout << endl << endl;
 
            for (int i(0); i < a2; i++)
        {
            cout << endl;
            for ( int j(0); j < b2; j++)
                cout << matrix2[i][j] << "\t";
        }
 
        cout << endl << endl;
 
        // Считаем результирующую матрицу
        for (int h(0); h < a1; h++)
        {
            for (int i(0); i < b2; i++)
            {
                int n(0);
                for ( int j(0); j < b1; j++)
                    matrix3[h][i] += ((matrix1[h][j]) * (matrix2[j][i]));
            }
        }
 
        // Выводим результирующую матрицу
        for (int i(0); i < a1; i++)
        {
            cout << endl;
            for ( int j(0); j < b2; j++)
                cout << matrix3[i][j] << "\t";
        }
 
        // Удаляем динамичемкую память
        for (int i(0); i < a1; i++)
            delete [] matrix1[i];
 
        for (int i(0); i < a2; i++)
            delete [] matrix2[i];
 
        for (int i(0); i < a1; i++)
            delete [] matrix3[i];
 
        delete [] matrix1;
        delete [] matrix2;
        delete [] matrix3;
    
 
                
    _getch();
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2016, 11:03

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

Умножение матриц
Мне нужно перемножить матрицы скажите что не провильно,почему она не работает for (int i=0; i&lt;...

Умножение матриц
Помогите умножить 2 матрицы размерностью 4х4, нужно создать ф-ю. Я пробовал, не получилось.....

Умножение матриц
Первую строку новой матрицы, полученной произведением двух других, выводит неправильно, а вторую -...

Умножение матриц
помогите сделать задачу: Даны матрицы: А размером m*k и В размером k*n.Получить матрицуС=A*В....


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

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

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