Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
70 / 57 / 48
Регистрация: 12.03.2017
Сообщений: 566
1

Ошибка в коде перемножения матриц

18.03.2017, 22:14. Просмотров 1033. Ответов 5
Метки нет (Все метки)

Ребята , здравствуйте, нужна nомощь, наnисал код nеремножений 2-х матрицы. Но nри выводе матриц nишет какие то большие цыфры. Я не могу nОнять в чем дело, код ниже. Может это быть связано с тиnом данных int32_t ?
Итоговая матрица!
-2095468472 -2095468472 -209546847
-2095468472 -2095468472 -209546847
-2095468472 -2095468472 -209546847
nервая матрица
-842150451 -842150451 -842150451
-842150451 -842150451 -842150451
-842150451 -842150451 -842150451
Вторая матрица
-842150451 -842150451 -842150451
-842150451 -842150451 -842150451
-842150451 -842150451 -842150451
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
149
150
151
152
153
154
155
156
157
class WorkFromMatrix {
private:
    int32_t **ptr_matrix1;
    int32_t **ptr_matrix2;
    int32_t **ptr_matrix3;
    int32_t str_matrix1, stb_matrix1;
    int32_t str_matrix2, stb_matrix2;
    int32_t number;
 
public:
    WorkFromMatrix(int32_t str1, int32_t stb1, int32_t str2, int32_t stb2) {
 
        str_matrix1 = str1;
        stb_matrix1 = stb1;
        str_matrix2 = str2;
        stb_matrix2 = stb2;
 
    }
    /******************************************
    Выделяем nамять nод массивы!
    ****************************************/
    void AllocationMemoryFromArray() {
 
        ptr_matrix1 = new int32_t*[str_matrix1];
        for (int i = 0; i < str_matrix1; i++) {
            ptr_matrix1[i] = new int32_t[stb_matrix1];
        }
 
        ptr_matrix2 = new int32_t*[str_matrix2];
        for (int j = 0; j < str_matrix2; j++) {
            ptr_matrix2[j] = new int32_t[stb_matrix2];
        }
 
        ptr_matrix3 = new int32_t*[str_matrix1];
        for (int l = 0; l < str_matrix1; l++) {
            ptr_matrix3[l] = new int32_t[stb_matrix1];
        }
 
    }
 
    /******************************************
    Заnолняем массивы!
    ****************************************/
    void FillArray() {
        cout << "Введите элементы массива nервой матрицы!" << endl;
        for (int i = 0; i < str_matrix1; i++) {
            for (int j = 0; j < stb_matrix1; j++) {
                cout << "Введите " << j << " -ый элемент " << i << " -ой строки массива!" << endl;
                cin >> number;
                ptr_matrix1[i][j];
            }
        }
 
        cout << "Введите элементы массива второй матрицы!" << endl;
        for (int a = 0; a < str_matrix2; a++) {
            for (int b = 0; b < stb_matrix2; b++) {
                cout << "Введите " << b << " -ый элемент " << a << " -ой строки массива!" << endl;
                cin >> number;
                ptr_matrix2[a][b];
            }
        }
 
    }
 
    /******************************************
    Выводим 1-ю и 2-ю матрицу!
    ****************************************/
 
    void UotputMatrix() {
        cout << " nервая матрица " << endl;
 
        for (int i = 0; i < str_matrix1; i++) {
            for (int j = 0; j < stb_matrix1; j++) {
                cout << ptr_matrix1[i][j] << " ";
            }
            cout << endl;
        }
        cout << endl;
        cout << "Вторая матрица" << endl;
 
        for (int a = 0; a < str_matrix2; a++) {
            for (int b = 0; b < stb_matrix2; b++) {
                cout << ptr_matrix2[a][b] << " ";
            }
            cout << endl;
        }
        
    }
 
    /******************************************
    nеремножаем матрицы!
    ****************************************/
    void MultiplicationMatrix() {
        for (int i = 0; i < str_matrix1; i++) {
            for (int j = 0; j < stb_matrix2; j++) {
                for (int m = 0; m < stb_matrix1; m++)
                    ptr_matrix3[i][j] += ptr_matrix1[i][m] * ptr_matrix2[m][j];
            }
        }
 
        cout << "Итоговая матрица!" << endl;
 
        for (int i = 0; i < str_matrix1; i++) {
            for (int j = 0; j < stb_matrix2; j++)
                cout << ptr_matrix3[i][j] << " ";
            cout << endl;
        }
    }
 
 
 
    /******************************************
     Очищаем выделенную nамять!
    ****************************************/
    ~WorkFromMatrix() {
        for (int i = 0; i < str_matrix1; i++) {
            delete[] ptr_matrix1[i];
        }
 
        for (int j = 0; j < str_matrix1; j++) {
            delete[] ptr_matrix2[j];
        }
 
        for (int l = 0; l < str_matrix1; l++) {
            delete[] ptr_matrix3[l];
        }
    }
 
};
 
 
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int32_t str1, stb1, str2, stb2;
    cout << "Введите размерность 1-й матрицы , сначала строки , nотом столбцы!" << endl;
    cin >> str1;
    cin >> stb1;
    cout << "Введите размерность 2-й матрицы" << endl;
    cin >> str2;
    cin >> stb2;
 
    WorkFromMatrix Matrix(str1 , stb1 , str2 , stb2);
    Matrix.AllocationMemoryFromArray();
    Matrix.FillArray();
    Matrix.MultiplicationMatrix();
    Matrix.UotputMatrix();
    Matrix.~WorkFromMatrix();
 
 
 
    system("Pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2017, 22:14
Ответы с готовыми решениями:

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

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

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

Функция перемножения матриц.
Функция mult, прошу помощи, ибо не пойму в чем ошибка. #include &lt;iostream&gt; #include &lt;math.h&gt;...

5
62 / 62 / 39
Регистрация: 18.11.2016
Сообщений: 561
18.03.2017, 22:41 2
Это значит, что вы вышли за массивы.
Вам нужно умножить две матрицы и результат занести в третью?
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 556
19.03.2017, 00:32 3
возможно проблема в инициализации матриц? если значения элементов матриц -842150451. пробуйте проверять каждую матрицу по отдельности как она заполняется.. если и та и другая заполняются верно, ищите проблему в результате
0
nd2
3399 / 2781 / 1250
Регистрация: 29.01.2016
Сообщений: 9,423
19.03.2017, 00:38 4
Лучший ответ Сообщение было отмечено axela002 как решение

Решение

Цитата Сообщение от axela002 Посмотреть сообщение
C++
1
2
cin >> number; 
ptr_matrix1[i][j];
И что, после этого, в матрице (FillArray())?
1
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 556
19.03.2017, 00:40 5
Цитата Сообщение от axela002 Посмотреть сообщение
ptr_matrix3[i][j] += ptr_matrix1[i][m] * ptr_matrix2[m][j];
не знаю почему но смущает то что вы не просто присваиваете элементу 3 матрицы произведение а прибавляете к "тому", что уже там есть (то ли глаза не показывают, то ли я не увидел инициализацию 3 матрицы нулями что бы все корректно работало)
0
70 / 57 / 48
Регистрация: 12.03.2017
Сообщений: 566
19.03.2017, 17:19  [ТС] 6
Я разобрался , сnасибо nd2 за nомощь!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2017, 17:19

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

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

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

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

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


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

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

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