Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
xeqtr22
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 10
#1

Ошибка вывода при перемножении матриц - C++

29.05.2013, 12:15. Просмотров 282. Ответов 2
Метки нет (Все метки)

Здравствуйте! Программирую на C++ совсем недавно, столкнулся с проблемой, при выводе матрицы. Вместо результата перемножения двух матриц ( M x N и N x M ) выводится числовой мусор. Прошу совета у опытных людей.
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
#include "StdAfx.h"
#include <iostream>
#include <time.h>
using namespace std;
 
int main(){
    
    const int row = 5;
    const int col = 3;
    const int N = 5;
 
    int a[row][col];
    int b[col][row];
    int c[row][row];
 
    srand(time(NULL));
            
    cout << "Matrica #1" << endl;
    
    for (int j = 0; j < row; j++){
        cout << endl;
        for (int i = 0; i < col; ++i){
            a[i][j] = rand()%10+1;
            cout << a[i][j] << " ";
        }
    }
 
    cout << endl;
 
    cout << endl << "Matrica #2"  << endl;
    for (int j = 0; j < col; j++){
        cout << endl;
        for (int i = 0; i < row; ++i){
            b[i][j] = rand()%10+1;
            cout << b[i][j] << " ";
        }
    }
    
    cout << endl;
    
    
     for (int i = 0; i < row; i++) {
        for (int j = 0; j < row; j++){
            c[i][j] = 0;
            for (int k = 0; k < row; k++)
               c[i][j] += a[i][k] * b[k][j];
            }
        cout  << endl;
    }
    
    cout << "Rezultat peremnojenuya matric 1 u 2" << endl;  
    for (int i = 0; i < row; i++){
        cout << endl;
        for (int j = 0; j < row; j++)
            cout << c[i][j] << " ";
        }
    
 
    cout << endl;
    system("PAUSE");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 12:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка вывода при перемножении матриц (C++):

При перемножении матриц ошибка с памятью - C++
Написал класс матрица с алгоритмом умножения, но при выходе из проги выбивает ошибку. Не пойму как написать деструктор. Подскажите как...

Ошибка в перемножении матриц - C++
Имеется программка для перемножения матриц. void matrix_iter(double **mas_e, double **mas1, double **mas2, int size) { for (int...

Определить может ли введенное число получиться при перемножении его десятичных цифр - C++
Вот сама задача: Знайка и Незнайка играют в такую игру: Знайка называет Незнайке число, а Незнайка перемножает все цифры в числе и...

Ошибка при транспонировании матриц - C++
всем привет. Ошибка заключается в том ,что при указании размера любой из 3-х матриц (размера 1|2) то-есть 1-строка и 2-столбца,вылазит...

Ошибка при сложении матриц - C++
Если убрать деструктор, ошибки нет. Подскажите, пожалуйста, в чем проблема? #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include...

Ошибка при перегрузке оператора вывода в файл - C++
Добрый день, есть такой кусок кода: #include &lt;iostream&gt; #include &lt;ostream&gt; using std::ostream; using namespace std; ...

2
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
29.05.2013, 13:57 #2
Похоже, тут выход за пределы массива:
C++
1
2
for (int k = 0; k < row; k++)
               c[i][j] += a[i][k] * b[k][j];
массив "a" имеет всего 3 столбца (0 - 2), а row = 5. Когда k принимает значение k > 2, a[i][k] лежит за пределами массива.

Добавлено через 1 час 10 минут
Как говорится: "Самый лучший код - свой код". Пытался найти ошибку в Вашем, поменял цикл умножения матриц - ничего не вышло. Ошибку так и не нашел. Написал свой - работает.
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const int row = 5, col = 3;
    int matrix1[row][col];
    int matrix2[col][row];
    int matrix3[row][row] = {0};
 
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            matrix1[i][j] = 1 + rand() % 10;
 
    for (int i = 0; i < col; i++)
        for (int j = 0; j < row; j++)
            matrix2[i][j] = 1 + rand() % 10;
 
    cout << "Матрица 1:" << endl;
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
            cout << setw(3) << matrix1[i][j];
        cout << endl;
    }       
 
    cout << endl << endl <<"Матрица 2:" << endl;
    for (int i = 0; i < col; i++)
    {
        for (int j = 0; j < row; j++)
            cout << setw(3) << matrix2[i][j];
        cout << endl;
    }
 
    cout << endl << endl <<"Матрица 3:" << endl;
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < row; j++)
            cout << setw(3) << matrix3[i][j];
        cout << endl;
    }
 
    for (int i = 0; i < row; i++)
        for (int j = 0; j < row; j++)
            for (int k = 0; k < col; k++)
                matrix3[i][j] += matrix1[i][k] * matrix2[k][j];
 
    cout << endl << endl <<"Матрица 3:" << endl;
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < row; j++)
            cout << setw(5) << matrix3[i][j];
        cout << endl;
    }
    system("pause");
    return 0;
}
При изменении цикла в Вашем коде у меня вылетает ошибка:
Run-Time Check Failure #2 - Stack around the variable 'b' was corrupted.
. Причину так и не выяснил
1
xeqtr22
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 10
29.05.2013, 14:14  [ТС] #3
Спасибо большое за быстрый ответ( и привильный ответ). Ваша программа работает без ошибок. Попробовал ограничить цикл с переменной k до 3, выдает нормальные числа, но всё равно выпадает ошибка.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 14:14
Привет! Вот еще темы с ответами:

Ошибка при работе с потоками ввода (вывода) в файл (из файла) - C++
Изучаю перегрузку операторов ввода/вывода с файлом и без. Вылетает такая ошибка при отработанном коде: Необработанное исключение по...

Список: Ошибка вывода членов списка при дублировании ключей - C++
Есть список с числами от 0 до 9. Всё выводит по заданию, но... Ввожу я число например 2, если их несколько, то выводит их порядковые...

Написать процедуру для суммирования матриц. Ошибка при передаче массива в функцию - C++
Помогите пожалуйста! Дано задание: Написать процедуру для суммирования матриц. С ее помощью сложить исходную матрицу и...

Ошибка при использовании перегруженного оператора вывода в поток: no match for 'operator<<' - C++
Пытаюсь написать класс комплексных чисел, но не могу сделать вот что: #include &lt;iostream&gt; #include &quot;head.h&quot; using namespace std; ...


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

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

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