Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Azazel-San
Mental handicap
123 / 123 / 65
Регистрация: 24.11.2015
Сообщений: 819
Завершенные тесты: 1
1

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

26.04.2016, 20:19. Просмотров 282. Ответов 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
Миниатюры
Умножение матриц  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2016, 20:19
Ответы с готовыми решениями:

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

Умножение матриц
complex &lt;double&gt; c; for (int r = 0; r &lt; 4; r++) for (int...

Умножение матриц
Здравствуйте. Я новичок в программировании. Помогите, пожалуйста написать...

Умножение матриц
Решил немного вспомнить матрицы // Перемножение двух матриц минора....

Умножение матриц
Решенная задача на умножение матриц для сборника. Матрицы вводятся с...

2
lawr
372 / 266 / 478
Регистрация: 09.05.2014
Сообщений: 769
28.04.2016, 10:55 2
Операция умножения двух матриц выполнима только в том случае, если число столбцов в первом сомножителе равно числу строк во втором;
(с) википедия. короче нужно задать три размерности: m, n, k, соответственно матрицы будут иметь размерность A[m][n], B[n][k], C[m][k]. иначе при перемножении выход за границу С и имеем то, что имеем.
0
Stitch Igorek
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2016, 11:03

Умножение матриц
Ошибка: не хочет умножать. c=c+a*b; int **mat(int n){ int **matrix; ...

Умножение матриц
Даны две квадратные матрицы A и B, вычислить A2B2

Умножение матриц
Помогите с умножением матриц создал две идентичные таблицы 3х3 и тепер хочу...


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

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

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