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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.78
coldspirit
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 39
#1

Написать функцию, вычисляющую произведение двух матриц - C++

09.01.2011, 17:49. Просмотров 5219. Ответов 6
Метки нет (Все метки)

Написать функцию, вычисляющую произведение двух матриц..не судите сильно строго еще сильно туповат в С++..исправьте пожалуйста ошибки буду очень благодарен
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
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int sum(int matrix1; int matrix2; int matrix3)
{
    matrix3=0;
        matrix3=matrix1*matrix2;
        return maatrix3;
}
int main()
{
        int n=0; //Кол-во строк в наших матрицах (везде одинкаково) - введем мы
        int m=0; //Кол-во стобцов в наших матрицах (везде одинкаково) - введем мы
        int i=0; //Счетчик для строк
        int j=0; //Счетчик для столбцов
         //Вводим кол-во строк и столбцов в наших матрицах
        cout << "Vvedite kol-vo strok:\n";
        cin >> n;
        cout << "\nVvedite kol-vo stolbcov:\n";
        cin >> m;
        cout << "\n";
 
 
 
          //Заполняем первую матрицу по одному элементу
                for (i=0; i<n; i++)
                for (j=0; j<m; j++)
                {
                        cout << "Vvedite " << i+1 << " * " << j+1 << " element 1oy matrici:\n";
                        cin >> matrix1[i][j];
                }
 
 
                 //Заполняем вторую матрицу по одному элементу
        for (i=0; i<n; i++)
                for (j=0; j<m; j++)
                {
                        std::cout << "Vvedite " << i+1 << " * " << j+1 << " element 2oy matrici:\n";
                        std::cin >> matrix2[i][j];
                }
 
                
        //Выведем на экран вторую матрицу полностью
        cout << "\n\n2ya matrica:\n\n";
        for (i=0; i<n; i++)
        {
                for (j=0; j<m; j++)
                        cout << matrix2[i][j] << " ";
                cout << "\n";
        }
                
 
        //умножим матрицы - результат будем записывать в 3ю матрицу
        {
            sum(matrix1,matrix2,matrix3)
                cout<<"umnojenie="<<matrix3<<endl;
        }
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2011, 17:49     Написать функцию, вычисляющую произведение двух матриц
Посмотрите здесь:

C++ Написать функцию, вычисляющую произведение, используя только сложение
C++ Написать функцию, вычисляющую произведение двух матриц
Матрицы: Написать функцию, которая находит произведение ненулевых элементов двух строк матрицы C++
C++ Найти произведение двух матриц
Произведение двух матриц C++
Шаблоны: написать функцию, которая ищет произведение среди двух, трех и четырех целых и действительных чисел C++
Написать функцию f(r1, r2), вычисляющую площадь кольца, заключенного между кругами двух радиусов r1 и r2 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
09.01.2011, 17:50     Написать функцию, вычисляющую произведение двух матриц #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
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];
}
coldspirit
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 39
09.01.2011, 18:31  [ТС]     Написать функцию, вычисляющую произведение двух матриц #3
аа
блин ((
я не понимаю
эх...((
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
09.01.2011, 19:00     Написать функцию, вычисляющую произведение двух матриц #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
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
    int matrix1[200][200], matrix2[200][200], matrix3[200][200];
        int n=0; //Кол-во строк в наших матрицах (везде одинкаково) - введем мы
        int m=0; //Кол-во стобцов в наших матрицах (везде одинкаково) - введем мы
        int i=0; //Счетчик для строк
        int j=0; //Счетчик для столбцов
                 //Вводим кол-во строк и столбцов в наших матрицах
        cout << "Vvedite kol-vo strok:\n";
        cin >> n;
        cout << "\nVvedite kol-vo stolbcov:\n";
        cin >> m;
        cout << "\n";
                  //Заполняем первую матрицу по строкам
                cout << "Vvedite elementu 1oy matrici: \n";
                for (i=0; i<n; i++) for (j=0; j<m; j++) cin>>matrix1[i][j];
 
        cout << "\nVvedite elementu 2oy matrici: \n";                         //Заполняем вторую матрицу по строкам
        for (i=0; i<n; i++)
        {
                for (j=0; j<m; j++)
                {
                        cin>>matrix2[i][j];
                }
        }
        //умножим матрицы - результат будем записывать в 3ю матрицу
                cout<<"\nPolu4aem 3iu matricy : \n";
                for (i=0; i<n; i++)
                {
                for (j=0; j<m; j++)
                {
                        matrix3[i][j]=matrix1[i][j]*matrix2[i][j];
                        cout<<matrix3[i][j]<<" ";
                }
                cout<<"\n";
                }
              system("pause");   return 0;
}

Переделал твой вариант...
coldspirit
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 39
09.01.2011, 19:03  [ТС]     Написать функцию, вычисляющую произведение двух матриц #5
Александр,большое Вам спасибо
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
09.01.2011, 19:08     Написать функцию, вычисляющую произведение двух матриц #6
Незачто, обращайтесь )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2011, 10:53     Написать функцию, вычисляющую произведение двух матриц
Еще ссылки по теме:

Написать функцию, вычисляющую заданное выражение C++
C++ Написать функцию, возвращающую произведение двух параметров, если оба параметра < 0, иначе их сумму
C++ Написать функцию вычисляющую значение выражения
C++ Написать функцию, которая возвращает произведение двух целых чисел
Написать функцию вычисляющую проценты C++

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

Или воспользуйтесь поиском по форуму:
nepridymal
5 / 5 / 1
Регистрация: 09.02.2011
Сообщений: 189
17.08.2011, 10:53     Написать функцию, вычисляющую произведение двух матриц #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Здраствуйте, есть один вопрос.
Тут две "версии" програмы для сложения матриц, первая работает как надо, а вторая это тоже что и первая , только то что сделал отдельную функцию для ввода матрицы, во второй версии не правильный результат выдет, подскажите пожалуйста что не так.

Первая:
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
#include<stdio.h>
#include<conio.h>
#define n 100
 
void main()
{
        int i,j;
        int nl1,nc1;
        int nl2,nc2;    
        int nl,nc;
        int mt1[n][n];
        int mt2[n][n];
        int suma[n][n];
 
        printf("Nomer liniy dlia mt1:");  scanf("%d",&nl1);
        printf("Nomer colon dlia mt1:"); scanf("%d",&nc1);
        
        printf("Nomer liniy dlia mt2:");  scanf("%d",&nl2);
        printf("Nomer colon dlia mt2:"); scanf("%d",&nc2);
 
        if(nc1!=nc2 && nl1!=nl2)
        {
                printf("Summa nevozmojna!");
        }
 
        else
        {
                nl=nl1=nl2;             
                nc=nc1=nc2;
                
                printf("\nmt1:\n");
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                printf("Element: %d %d => ",i,j);
                                scanf(" %d",&mt1[i][j]);
                        }
                }
                
                printf("\nmt2:\n");
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                printf("Element: %d %d => ",i,j);
                                scanf("%d",&mt2[i][j]);
                        }
                }
                printf("\nResultat:\n");
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                suma[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                printf(" %d",suma[i][j]);
                        }
                        putchar('\n');
                }
        }
        getch();
}

Вторая:
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
#include<stdio.h>
#include<conio.h>
#define n 100
 
 
int matr(int mt[][n],int nl,int nc)
{
        int i,j;
        for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                printf("Elemento: %d %d => ",i,j);
                                scanf(" %d",&mt[i][j]);
                        }
                }
        return mt[i][j];
}
 
 
void main()
{
        int i,j;
        int nl,nc;
        int nl1,nc1,nl2,nc2;
        int a[n][n],b[n][n];
        int suma[n][n];
 
        printf("Nomer liniy dlia mt1:");  scanf("%d",&nl1);
        printf("Nomer colon dlia mt1:"); scanf("%d",&nc1);
        
        printf("Nomer liniy dlia mt2:");  scanf("%d",&nl2);
        printf("Nomer colon dlia mt2:"); scanf("%d",&nc2);
 
        if(nc1!=nc2 && nl1!=nl2)
        {
                printf("Summa nevozmojna!");
        }
 
        else
        {
                nl=nl1=nl2;             
                nc=nc1=nc2;
 
                printf("\nmt1:\n");
                matr(a,nl,nc);
 
                
                
                printf("\nmt2:\n");
                matr(a,nl,nc);
                
                printf("\nResultat:\n");
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                suma[i][j]=a[i][j]+b[i][j];
                        }
                }
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                printf(" %d",suma[i][j]);
                        }
                        putchar('\n');
                }
        }
        getch();
}
Добавлено через 11 часов 24 минуты
Ошибка найдена, линия 52, прога запрашивает 2 раза одну и ту же матрицу, там вместо "а" должно
быть "b". Вывод:" Поменьше Ctrl C, Ctrl V")))
Yandex
Объявления
17.08.2011, 10:53     Написать функцию, вычисляющую произведение двух матриц
Ответ Создать тему
Опции темы

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