Форум программистов, компьютерный форум CyberForum.ru

Найти произведение матриц - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.69
coldspirit
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 39
09.12.2010, 23:22     Найти произведение матриц #1
Даны две матрицы. Найти произведение матриц. Размерности массивов, где хранятся матрицы, должны соответствовать правилам умножения матриц

 Комментарий модератора 
Дублирование тем запрещено правилами форума (п. 3.4).
Не плодите одинаковых тем.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
10.12.2010, 00:21     Найти произведение матриц #2
Так ?
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 <stdio.h>
 
#define LINE 3
#define COLUMNS 3
 
void enter_matr(int matr[][COLUMNS])
{
    for(int i = 0; i < LINE; ++i)
    {
        for(int j = 0; j < COLUMNS; ++j)
        {
            printf("\n\tmatr[%d][%d] -> ", i, j );
            scanf("%d", &matr[i][j]);
        }
    }
}
 
void print_matr(int matr[][COLUMNS])
{
    for(int i = 0; i < LINE; ++i)
    {
        for(int j = 0; j < COLUMNS; ++j)
        {
            printf(" %d ", matr[i][j]);
        }
        printf("\n");
    }
}
 
void multi_matr(int matr[][COLUMNS], int _matr[][COLUMNS])
{
    for(int i = 0; i < LINE; ++i)
    {
        for(int j = 0; j < COLUMNS; ++j)
        {
            int tmp = matr[i][j] * _matr[i][j];
            printf("   %d ", tmp);
        }
        printf("\n");
    }
}
 
int main(void)
{
    int matr[LINE][COLUMNS], _matr[LINE][COLUMNS];
 
    printf("Enter first matrix: ");
    enter_matr(matr);
 
    printf("\nEnter second matrix: ");
    enter_matr(_matr);
 
    printf("\nFirst matrix: \n");
    print_matr(matr);
 
    printf("\nSecond matrix: \n");
    print_matr(_matr);
 
    printf("\nMultiplication matrix: \n");
    multi_matr(matr, _matr);
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.12.2010, 00:26     Найти произведение матриц #3
asics, Матрицы перемножаются не так.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
12.12.2010, 15:28     Найти произведение матриц #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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <iomanip>
 
void matrixmult( int **m1, int m1_row, int m1_col, int **m2, int m2_row, int m2_col, int **m3, int m3_row, int m3_col);
 
void matrixfill( int **m, int row, int col)
{
                for (int i = 0; i < row; ++i)
                        for (int j = 0; j < col; ++j)
                        {
                                std::cout << "Enter [ " << i << " ][ " << j <<" ] element: ";
                                std::cin >> m[i][j];
                        }
}
 
void print_matr(int **m, int row, int col)
{
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
            std::cout << std::setw(3) << m[i][j] << ' ';
 
        std::cout << std::endl;
    }
}
 
int main()
{
        int row1 = 0;
        int col1 = 0;
 
        std::cout << "Enter number of rows of the first matrix: ";
        std::cin >> row1;
 
        std::cout << "Enter number of columns of the first matrix: ";
        std::cin >> col1;
 
        int **arr1 = new int*[row1];
        for (int i = 0; i < row1; ++i)
                arr1[i] = new int[col1];
 
        matrixfill(arr1,row1,col1);
 
        int row2 = 0;
        int col2 = 0;
 
        std::cout << "Enter number of rows of the second matrix: ";
        std::cin >> row2;
 
        std::cout << "Enter number of columns of the second matrix: ";
        std::cin >> col2;
 
        int **arr2 = new int*[row2];
        for (int i = 0; i < row2; ++i)
                arr2[i] = new int[col2];
 
        matrixfill(arr2,row2,col2);
 
        int row3 = row1;
        int col3 = col2;
 
        int **arr3 = new int*[row3];
        for (int i = 0; i < row3; ++i)
                arr3[i] = new int[col3];
 
        for (int i = 0; i < row3; ++i)
                        for (int j = 0; j < col3; ++j)
                                arr3[i][j] = 0;
 
        std::cout << "\nFirst matrix: \n";
        print_matr(arr1, row1, col1);
 
        std::cout << "\nSecond matrix: \n";
        print_matr(arr2, row2, col2);
        //если число столбцов первой матрицы равно числу строк второй матрицы
        if(col1 == row2)
            matrixmult(arr1,row1,col1, arr2,row2,col2, arr3,row3,col3);
 
        else
        {
            std::cerr << " Error! " << std::endl;
            return 1;
        }
 
        std::cout << "\nResult matrix:" << std::endl;
        print_matr(arr3, row3, col3);
 
        for(int i = 0; i < row1; i++)
          delete[] arr1[i];
        delete[] arr1;
        for(int i = 0; i < row2; i++)
           delete[] arr2[i];
        delete[] arr2;
        for(int i = 0;i < row3 ; i++)
            delete[] arr3[i];
        delete[] arr3;
 
        return 0;
}
 
 
 
void matrixmult( int **m1, int m1_row, int m1_col, int **m2, int m2_row, int m2_col, int **m3, int m3_row, int m3_col)
{
        for (int k = 0; k < m2_col; ++k)
                for (int i = 0; i < m1_row; ++i)
                        for (int j = 0; j < m1_col; ++j)
                                m3[i][k] += m1[i][j] * m2[j][k];
}
Yandex
Объявления
12.12.2010, 15:28     Найти произведение матриц
Ответ Создать тему
Опции темы

Текущее время: 22:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru