Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 04.06.2019
Сообщений: 9
1

Написать функцию перемножения матриц

05.06.2019, 11:08. Просмотров 218. Ответов 2
Метки нет (Все метки)

Написать программу , которая вводит матрицу А,транспонирует ее , транспонированную перемножает на А и печатает результат. При написании программы использовать классы
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2019, 11:08
Ответы с готовыми решениями:

Написать процедуру перемножения матриц.
ребят нужна помощь Задачи по программированию. Задача решается на двух языках. Задача 8....

Не могу написать программу перемножения матриц
#include <iostream> #include <conio.h> using namespace std; int i,j; void vvod(int X) {...

Программа перемножения 2 матриц
ДОброго времени суток прошу помочь написать программу перемножения 2 матриц,матрицы вводятся с...

Оптимизация перемножения матриц
В конечном итоге нужно получить результат не менее 2500 (самый последний вывод). Вот код: ...

2
3508 / 1967 / 825
Регистрация: 07.02.2019
Сообщений: 5,277
05.06.2019, 17:30 2
Polyandmitr,
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <iostream>
#include <random>
#include <utility>
#include <exception>
 
class Bad_operation :public std::exception
{
public:
    Bad_operation(const char* err) :std::exception(err) {}
};
 
class Matrix_base
{
protected:
    size_t dim1{};
    size_t dim2{};
    double* data{};
    Matrix_base() = default;
    Matrix_base(size_t, size_t, double*);
public:
    Matrix_base(const Matrix_base&) = default;
    Matrix_base& operator=(const Matrix_base&) = default;
};
 
class Matrix : public Matrix_base
{
public:
    Matrix(size_t, size_t);
    Matrix(const Matrix&);
    Matrix& operator=(const Matrix&);
    Matrix(Matrix&&) noexcept;
    Matrix& operator=(Matrix&&) noexcept;
    ~Matrix();
 
    size_t rows() const noexcept;
    size_t cols() const noexcept;
    void rand_int(int, int);
    double* operator[](size_t);
    const double* operator[](size_t) const;
    Matrix transpose() const;
    Matrix operator*(Matrix&&) const;
};
 
 
Matrix_base::Matrix_base(size_t dim1_, size_t dim2_, double* data_)
    : dim1(dim1_), dim2(dim2_), data(data_) {}
 
Matrix::~Matrix()
{
    delete data;
}
 
Matrix::Matrix(size_t dim1_, size_t dim2_)
    : Matrix_base(dim1_, dim2_, new double[dim1_ * dim2_]{}) {}
 
Matrix::Matrix(const Matrix& other)
    : Matrix(other.dim1, other.dim2)
{
    std::memcpy(data, other.data, dim1 * dim2);
}
 
Matrix& Matrix::operator=(const Matrix& other)
{
    return *this = Matrix(other);
}
 
Matrix::Matrix(Matrix&& other) noexcept
    : Matrix_base(std::exchange(other.dim1, 0), std::exchange(other.dim2, 0), std::exchange(other.data, nullptr)) {}
 
Matrix& Matrix::operator=(Matrix&& other) noexcept
{
    std::swap<Matrix_base, Matrix_base>(*this, other);
    return *this;
}
 
size_t Matrix::rows() const noexcept
{
    return dim1;
}
 
size_t Matrix::cols() const noexcept
{
    return dim2;
}
 
void Matrix::rand_int(int min, int max)
{
    std::random_device rd;
    std::uniform_int_distribution<int> uid{ min, max };
    for (size_t idx{}; idx < dim1*dim2; ++idx)
        data[idx] = uid(rd);
}
 
const double* Matrix::operator[](size_t row) const
{
    return data + dim2 * row;
}
 
double* Matrix::operator[](size_t row)
{
    return data + dim2 * row;
}
 
Matrix Matrix::transpose() const
{
    Matrix ret(dim2, dim1);
    for (size_t row{}; row < dim1; ++row)
        for (size_t col{}; col < dim2; ++col)
            ret[col][row] = (*this)[row][col];
    return ret;
}
 
Matrix Matrix::operator*(Matrix&& other) const
{
    if (dim2 != other.dim1) throw Bad_operation("Matrix::operator*");
    Matrix ret(dim1, other.dim2);
    for (size_t row{}; row < dim1; ++row)
        for (size_t col{}; col < other.dim2; ++col)
            for (size_t k{}; k < dim2; ++k)
                ret[row][col] += (*this)[row][k] * other[k][col];
    return ret;
}
 
std::ostream& operator<<(std::ostream& os, const Matrix& m)
{
    for (size_t row{}; row < m.rows(); ++row)
    {
        for (size_t col{}; col < m.cols(); ++col)
            os << m[row][col] << ' ';
        os << std::endl;
    }
    return os;
}
 
int main()
{
    try
    {
        Matrix a(5, 3);
        a.rand_int(0, 9);
        std::cout << a << std::endl;
        std::cout << a * a.transpose() << std::endl;
    }
    catch (Bad_operation& err)
    {
        std::cerr << err.what();
    }
    catch (...)
    {
        std::cerr << "oops";
    }
}
0
0 / 0 / 0
Регистрация: 04.06.2019
Сообщений: 9
05.06.2019, 19:23  [ТС] 3
zayats80888, благодарю
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2019, 19:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Оптимизация перемножения матриц
Доброго времени суток! Помогите пожалуйста с оптимизацией перемножения матриц. Транспонировал,...

Функция перемножения матриц.
Функция mult, прошу помощи, ибо не пойму в чем ошибка. #include &lt;iostream&gt; #include &lt;math.h&gt;...

Оператор перемножения матриц
не работает оператор* двух матриц, никак не могу понять как сделать так, чтобы в операторе была уже...

Ошибка в коде перемножения матриц
Ребята , здравствуйте, нужна nомощь, наnисал код nеремножений 2-х матрицы. Но nри выводе матриц...


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

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

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