On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 18.02.20 22:01. Заголовок: Функция умножения матриц на C++.


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

Ниже представлена программа, которая демонстрирует такую функцию. Используемый в программе перегруженный оператор operator <<, естественно не предназначен для вывода массивов любых чисел. В программе он используется для простоты демонстрации функции. Вам самим нужно будет обеспечивать вывод массивов на консоль в зависимости от типов и величин элементов массивов. Тем не менее приведенный в программе оператор operator << может быть взят за основу при написании вами вашего собственного перегруженного оператора.

 
#include <iostream>
#include <iomanip>

template <typename T, size_t N1, size_t N2, size_t N3>
void multiply_matrices( const T ( &a1 )[N1][N2],
const T ( &a2 )[N2][N3],
T ( &a3 )[N1][N3] )
{
for ( size_t i = 0; i < N1; i++ )
{
for ( size_t j = 0; j < N3; j++ )
{
a3[j] = 0;
for ( size_t k = 0; k < N2; k++ )
{
a3[j] += a1[k] * a2[k][j];
}
}
}
}

template <typename T, size_t N1, size_t N2>
std::ostream & operator <<( std::ostream &os, const T ( &a )[N1][N2] )
{
for ( const auto &row : a )
{
for ( const auto &item : row )
{
os << std::setw( 3 ) << item << ' ';
}
os << '\n';
}

return os;
}

int main()
{
const size_t N1 = 2;
const size_t N2 = 3;
const size_t N3 = 4;

int a1[N1][N2] =
{
{ 3, 9, 7 },
{ 1, 5, 4 }
};

int a2[N2][N3] =
{
{ 6, 2, 8, 1 },
{ 3, 9, 4, 0 },
{ 5, 3, 1, 3 }
};

int a3[N1][N3];

std::cout << a1 << '\n';
std::cout << a2 << '\n';

multiply_matrices( a1, a2, a3 );

std::cout << a3 << '\n';

return 0;
}

Вывод программы на консоль:
 
3 9 7
1 5 4

6 2 8 1
3 9 4 0
5 3 1 3

80 108 67 24
41 59 32 13


Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 31
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет