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

Сумма, разность, перемножение матриц - C++

Восстановить пароль Регистрация
 
zhivushko
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 16
16.01.2014, 16:56     Сумма, разность, перемножение матриц #1
2-е матрицы 3 на 3. необходимо реализовать сложение, разность и перемножение.
Пробовал преподу это припихнуть, но он меня отправил и сказал что мы еще такое не проходим (я на ФЗО)
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
#include <iostream>
 
using namespace std;
//Размер квадратной матрицы:
const int n=3;
//Класс для реализации матриц:
class Matrix
{
    public:
//Поле - двумерный массив:
    int matr[n][n];
//Перегрузка оператора []:
    int *operator[](int k)
    {
        return matr[k];
    }
//Перегрузка оператора сложения +:
    Matrix operator+(Matrix obj)
    {
        Matrix tmp(0);
        for(int i=0; i < n; i++)
        for(int j=0; j < n; j++)
        tmp[i][j]=matr[i][j]+obj[i][j];
        return tmp;
    }
//Перегрузка оператора умножения *:
    Matrix operator*(Matrix obj)
    {
        Matrix tmp(0);
        for(int i=0; i < n; i++)
        for(int j=0; j < n; j++)
        for(int k=0; k < n; k++)
        tmp[i][j]+=matr[i][k]*obj[k][j];
        return tmp;
    }
//Перегрузка оператора вычитания -:
    Matrix operator-(Matrix obj)
    {
        Matrix tmp(0);
        for(int i=0; i <n; i++)
        for(int j=0; j < n; j++)
        tmp[i][j]=matr[i][j]-obj[i][j];
        return tmp;
    }
//Метод для отображения значений матрицы:
    void show()
    {
        for(int i=0; i < n; i++){
        for(int j=0; j < n; j++){
        printf("%3d",matr[i][j]);
    }
    cout << endl;
}
    }
//Конструктор с аргументом:
Matrix(int k)
{
    for(int i=0; i < n; i++)
    for(int j=0; j < n; j++)
    matr[i][j]=k;
}
//Конструктор с аргументом:
Matrix()
{
    for(int i=0; i < n; i++)
    for(int j=0; j < n; j++)
    matr[i][j]=rand()%8-5;
}
};
int main()
{
//Создание объектов:
Matrix A,B,C(0),D(0),E(0);
cout << "Matrix A:\n";
A.show();
cout << "Matrix B:\n";
B.show();
//Сумма матриц:
cout << "Matrix C=A+B:\n";
C=A+B;
C.show();
//Произведение матриц:
cout << "Matrix D=A*B:\n";
D=A*B;
D.show();
//Разность матриц:
cout << "Matrix E=A-B:\n";
E=A-B;
E.show();
system("pause");
return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 16:56     Сумма, разность, перемножение матриц
Посмотрите здесь:

C++ Перемножение матриц
Перемножение матриц C++
Сумма\разность матриц C++
Перемножение двух квадратных целочисленных матриц C++
Перемножение матриц. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
genock94
 Аватар для genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
16.01.2014, 17:03     Сумма, разность, перемножение матриц #2
zhivushko, что именно вы не проходили? Перегрузку операторов или классы?
zhivushko
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 16
16.01.2014, 17:07  [ТС]     Сумма, разность, перемножение матриц #3
вот как это из его уст прозвучало: Это написано ООП. А мы ООП не занимаемся. Как-то так
genock94
 Аватар для genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
16.01.2014, 17:17     Сумма, разность, перемножение матриц #4
zhivushko, существует две стратегии разработки программ: объектно-ориентированная стратегия и функционально-ориентированная стратегия. Раз уж препод не хочет смотреть на ООП, то попробуйте ФОП:
1) вместо объектов класса используйте простые массивы.
2) вместо методов класса используйте функции, которые работают с массивами (например вместо метода show() используйте функцию void show(matrix[][]), которая будет выводить массив, переданный в качестве аргумента)
И, мне кажется, перегрузка операторов тоже слишком изящный нюанс. Думаю, если вы это не проходили, то и без них можно обойтись.
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
16.01.2014, 17:24     Сумма, разность, перемножение матриц #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
zhivushko, Так сойдет?
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <time.h>
 
void Display(int **M,int N)
{
    for(int i=0;i<N;i++,std::cout<<std::endl)
        for(int j=0;j<N;j++)
            std::cout<<std::setw(4)<<M[i][j];
 
}
 
void SumMatrix(int **M1,int **M2,int **Rez,int N)
{
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            Rez[i][j]=M1[i][j] + M2[i][j];
}
 
void MinusMatrix(int **M1,int **M2,int **Rez,int N)
{
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            Rez[i][j]=M1[i][j] - M2[i][j];
}
 
void Multmatrix(int **M1,int **M2,int **Rez,int N)
{
    double P=1.0, S=0.0;
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<N; j++)
        {
            for (int k=0; k<N; k++)
            {
                P=M1[i][k]*M2[k][j];
                S=S+P;
            }
            Rez[i][j]=S;
            P=1;
            S=0;
        }
    }
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int N = 3;
    int **M1 = new int *[N];
    for(int i=0;i<N;i++)
        M1[i] = new int [N];
 
    int **M2 = new int *[N];
    for(int i=0;i<N;i++)
        M2[i] = new int [N];
 
    int **Rez = new int *[N];
    for(int i=0;i<N;i++)
        Rez[i] = new int [N];
 
    srand(time(NULL));
 
    std::cout<<"First matrix:\n";
    for(int i=0;i<N;i++,std::cout<<std::endl)
        for(int j=0;j<N;j++)
        {
            M1[i][j] = 10 - rand()%20;
            std::cout<<std::setw(4)<<M1[i][j];
        }
 
    std::cout<<"Second matrix:\n";
    for(int i=0;i<N;i++,std::cout<<std::endl)
        for(int j=0;j<N;j++)
        {
            M2[i][j] = 10 - rand()%20;
            std::cout<<std::setw(4)<<M2[i][j];
        }
    std::cout<<"multiplication matrix:\n";
    Multmatrix(M1,M2,Rez,N);
    Display(Rez,N);
 
    std::cout<<"sum matrix:\n";
    SumMatrix(M1,M2,Rez,N);
    Display(Rez,N);
 
    std::cout<<"Minus matrix:\n";
    MinusMatrix(M1,M2,Rez,N);
    Display(Rez,N);
 
    system("pause");
 
    return 0;
}
zhivushko
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 16
16.01.2014, 17:25  [ТС]     Сумма, разность, перемножение матриц #6
думаю да спасибо
Yandex
Объявления
16.01.2014, 17:25     Сумма, разность, перемножение матриц
Ответ Создать тему
Опции темы

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