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

Умножение матриц с использованием динамических двумерных массивов

13.05.2019, 17:41. Показов 5361. Ответов 6

Нужно написать программу, которая будет считывать размер матриц и их члены с клавиатуры, умножать и выводить результат. Проблем с вводом и выводом нет, но как умножить - непонятно, слабоват в математике. Есть те, кто понимает?
C++ (Qt)
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
#include "pch.h"
#include <iostream>
 
using namespace std;
    
int main()
{
    setlocale(LC_ALL, "rus");
    int rows, cols, rows1, cols1, rows_max, cols_max;
    cout << "Введите количество строк в первой матрице: "; cin >> rows; cout << "Введите количество столбцов в первой матрице: "; cin >> cols; //ввод количества строк и столбцов в массиве
    cout << endl << "Введите количество строк во второй матрице: "; cin >> rows1; cout << "Введите количество столбцов во второй матрице: "; cin >> cols1;
    /*if (rows>=rows1)
    {
        rows_max = rows;
    }
    else
    {
        rows_max = rows1;
    } //определение большей строки
    if (cols >= cols1)
    {
        cols_max = cols;
    }
    else
    {
        cols_max = cols1;
    } //определение большего столбца */
    if (cols == rows1) {
        cout << "Введите первую матрицу: \n";
        int **matrix1 = new int*[rows]; //создание массива с указателями для первой матрицы
        for (int i = 0; i < rows; i++)
        {
            matrix1[i] = new int[cols];
        }
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                cout << "[" << i + 1 << "][" << j + 1 << "]: "; cin >> matrix1[i][j];
            }
        }
        cout << "Первая матрица\n";
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                cout << matrix1[i][j] << "\t";
            }
            cout << endl;
        }
 
        cout << "Введите вторую матрицу: \n";
        int **matrix2 = new int*[rows1]; //создание массива с указателями для второй матрицы
        for (int i = 0; i < rows1; i++)
        {
            matrix2[i] = new int[cols1];
        }
        for (int i = 0; i < rows1; i++)
        {
            for (int j = 0; j < cols1; j++)
            {
                cout << "[" << i + 1 << "][" << j + 1 << "]: "; cin >> matrix2[i][j];
            }
        }
        cout << "Вторая матрица\n";
        for (int i = 0; i < rows1; i++)
        {
            for (int j = 0; j < cols1; j++)
            {
                cout << matrix2[i][j] << "\t";
            }
            cout << endl;
        }
        int **matrix3 = new int*[rows1]; //создание массива с указателями для третьей матрицы
        for (int i = 0; i < rows1; i++)
        {
            matrix3[i] = new int[cols];
        }
 
        cout << endl << "Результат умножения матриц: \n";
        for (int i = 0; i < rows1; i++) { //умножение и вывод матрицы
            for (int j = 0; j < cols; j++) {
                int mas = 0;
                for (int k = 0; k < cols; k++)
                {
                    mas = mas + matrix1[i][k] * matrix2[k][j];
                }
                matrix3[i][j] = mas;
                cout << matrix3[i][j] << "\t";
            }
        }
        
        /*for (int i = 0; i < rows1; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                cout << matrix3[i][j] << "\t";
            }
            cout << endl;
        }*/
        for (int i = 0; i < rows; i++) //очищение озу от первой матрицы 
        {
            delete[] matrix1[i];
        }
        delete[] matrix1; //очищение озу от 1 массива указателей
        for (int i = 0; i < rows1; i++) //очищение озу от второй матрицы
        {
            delete[] matrix2[i];
        }
        delete[] matrix2; //очищение озу от 2 массива указателей
        for (int i = 0; i < rows1; i++) //очищение озу от третьей матрицы
        {
            delete[] matrix2[i];
        }
        delete[] matrix3; //очищение озу от 3 массива указателей
        cin.get();
        system("pause>nul");
        return (0);
    }
    else
    {
        cout << endl << "Умножение невозможно";
        cin.get();
        system("pause>nul");
        return (0);
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2019, 17:41
Ответы с готовыми решениями:

C++ Задача с использованием двумерных динамических массивов.
Собственно сабж. Близится время сессии, начал потихоньку делать контрольные работы. Дошёл до...

Перемножение матриц с использованием динамических массивов
Всем здравствуйте) Программа не считает матрицу С (С=A*B). В чём дело не понимаю. #include...

Копирование двумерных динамических массивов
Суть, есть два двумерных динамических массива одного размера, нужно скопировать в первый второй,...

Обработка двумерных динамических массивов
Помогите написать программу Даны два двумерных динамических массива одинакового размера. Создать...

6
3795 / 3108 / 859
Регистрация: 25.03.2012
Сообщений: 11,475
Записей в блоге: 1
13.05.2019, 17:49 2
Цитата Сообщение от ShonS1v4 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
cout << endl << "Результат умножения матриц: \n"; 
for (int i = 0; i < rows1; i++) { //умножение и вывод матрицы 
    for (int j = 0; j < cols; j++) { 
        int mas = 0; 
        for (int k = 0; k < cols; k++) 
        { 
            mas = mas + matrix1[i][k] * matrix2[k][j]; 
        } 
        matrix3[i][j] = mas; 
        cout << matrix3[i][j] << "\t"; 
    } 
}
А это тогда что, если не умножение????

Добавлено через 1 минуту
хотя вру, там полно незаметных косяков с размерами матриц.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
        int **matrix3 = new int*[rows1]; //создание массива с указателями для третьей матрицы
        for (int i = 0; i < rows1; i++)
        {
            matrix3[i] = new int[cols];
        }
 
        cout << endl << "Результат умножения матриц: \n";
у тебя ж по условию cols==rows1 - что же это получается? произведение всегда будет квадратной матрицей?
1
1 / 1 / 0
Регистрация: 13.05.2019
Сообщений: 6
13.05.2019, 17:50  [ТС] 3
Вот в этих косяках и проблема... Не понятно мне, мало слишком опыта работы с матрицами
0
3795 / 3108 / 859
Регистрация: 25.03.2012
Сообщений: 11,475
Записей в блоге: 1
13.05.2019, 17:50 4
надо
C++
1
2
3
4
5
6
7
 int **matrix3 = new int*[rows]; //создание массива с указателями для третьей матрицы
        for (int i = 0; i < rows; i++)
        {
            matrix3[i] = new int[cols1];
        }
 
        cout << endl << "Результат умножения матриц: \n";
1
1 / 1 / 0
Регистрация: 13.05.2019
Сообщений: 6
13.05.2019, 17:54  [ТС] 5
Все равно косяк где-то остается, но за указание на данную ошибку спасибо большое <3
0
3795 / 3108 / 859
Регистрация: 25.03.2012
Сообщений: 11,475
Записей в блоге: 1
13.05.2019, 17:55 6
Лучший ответ Сообщение было отмечено ShonS1v4 как решение

Решение

ну и далее соответственно умножать
C++
1
2
3
4
5
6
7
8
9
10
11
      for (int i = 0; i < rows; i++) { //умножение и вывод матрицы
            for (int j = 0; j < cols1; j++) {
                int mas = 0;
                for (int k = 0; k < cols; k++)
                                mas += matrix1[i][k] * matrix2[k][j]; 
 
                matrix3[i][j] = mas;
                cout << matrix3[i][j] << "\t";
            }
            cout << endl;
        }
Добавлено через 48 секунд
ShonS1v4, что значит <"где-то">? я же пишу где, там же не одна ошибка!
1
1 / 1 / 0
Регистрация: 13.05.2019
Сообщений: 6
13.05.2019, 18:00  [ТС] 7
Спасибо огромное за помощь, я понял где ошибся и теперь учту это в будущем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2019, 18:00
Помогаю со студенческими работами здесь

Создание динамических двумерных массивов
Ошибка в том что массиву не дает число массиву Вызвано исключение по адресу 0x006526FC в лаб 3...

Обработка двумерных динамических массивов
1. Составить программу в которой для введенного пользователем двумерного массива, выводится сумма...

Составить алгоритм и программу для решения задачи с использованием одномерных и двумерных (матриц) массивов
составить алгоритм и программу для решения задачи с использованием одномерных и двумерных (матриц)...

Создание динамических двумерных массивов
Помогите с созданием динамических двумерных массивов. С одномерным там усе понятно: Dim mas() as...

Умножение динамических массивов
Доброго времени суток, написал код (не без помощи вашего форума), все хорошо, все работает, но...

Умножение двух двумерных массивов
какие способы задания двумерных массивов есть? а также сможете ответить на вопрос специфика...


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

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

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