• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Задача: Умножение матриц. С++

  • Автор темы Fam
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

Fam

Напишите функцию, осуществляющую умножение двух квад-ратных матриц.
Код:
// matrica: умножение матриц 
int matrica(a[2][2], b][2][2], c[2][2])
{
c[1][1]=a[1][1]*b[1][1]+a[1][2]*b[2][1];
c[1][2]=a[1][1]*b[2][1]+a[1][2]*b[2][2];
c[2][1]=a[2][1]*b[1][1]+a[2][2]*b[2][1];
c[2][2]=a[2][1]*b[1][2]+a[2][2]*b[2][2];
}
#include<iostream.h>
#include<math.h>
#include<conio.h>
int main()
{
int i,j,a[2][2], b[2][2], c[2][2];
for(i=1;i<=2;i++) {
for(j=1;j<=2;j++) {
cout<<"Введите а["<<i<<"]["<<j<<"]";
cin>>a[i][j];
cout<<"Введите b["<<i<<"]["<<j<<"]";
cin>>b[i][j];
}
}
getch();
return 0;
}

Ввод матриц я сделал, умножение тоже, а как вывести матрицк C
 
L

lazybiz

int matrica(n, a[2][2], b][2][2], c[2][2])
параметры каких типов? и зачем нужен параметр 'n' ?

Функция matrica откуда-нибудь вызывается?

Индексация массива размером [2] осуществляется индексами 0 и 1 и все!! А у вас 1 и 2.

Добавлено:
c[1][1]=a[1][1]*b[1][1]+a[1][2]*b[2][1]
Полагаю в конце каждой строки должен стоять символ ';' или ',' (кроме последней строки)

Добавлено: Блоки циклов почему у вас не закрываются?
Проверьте синтаксис от и до. Ошибок тьма.
 
L

lazybiz

У вас же банальные ошибки.
Теперь сравните со своей. Каждую строку!
C++:
#include <iostream.h>
#include <math.h>
#include <conio.h>

void matrica( int (&a)[2][2], int (&b)[2][2], int (&c)[2][2] )
{
c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0];
c[0][1] = a[0][0] * b[1][0] + a[0][1] * b[1][1];
c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0];
c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1];
}

int main( void )
{
int	i, j;
int	a[2][2], b[2][2], c[2][2];

for ( i = 0; i < 2; i++ ) {
for ( j = 0; j < 2; j++ ) {
cout << "Введите а["<<i<<"]["<<j<<"]";
cin >> a[i][j];
cout << "Введите b["<<i<<"]["<<j<<"]";
cin >> b[i][j];
}
}

matrica( a, b, c );
// вывод...

getch();
return 0;
}

Правильность умножения матриц не проверял.
 
F

Fam

спасибо, ошибки да, никак от Паскаля не от учусь сначала даже циклы как в паскале писал
 
L

lazybiz

Вывод так же как и ввод:
C++:
for ( i = 0; i < 2; i++ ) {
for ( j = 0; j < 2; j++ ) {
cout << c[i][j] << ' ';
}
cout << endl;
}
 
F

Fam

ещё перевод строки забыл, чтобы выводил какматрицу
cout << endl; //перевод строки - все на месте
 
L

lazybiz

Он будет выводить так же как ты вводил. Что именно ты имеешь в виду?
 
F

Fam

Да он будет выводить так, а я имею в виду что то вроде двумерного массива 2*2
 
L

lazybiz

Ты что-то путаешь. Покажи код который компилируешь.
Тот код который я писал у меня правильно работает. У меня такое чувство что ты опять там что-то наколдовал.
 
F

Fam

Возможно путаю
Код:
#include <math.h>
#include <conio.h>

void matrica( int (&a)[2][2], int (&b)[2][2], int (&c)[2][2] )
{
c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0];
c[0][1] = a[0][0] * b[1][0] + a[0][1] * b[1][1];
c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0];
c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1];
}

int main( void )
{
int	i, j;
int	a[2][2], b[2][2], c[2][2];

for ( i = 0; i < 2; i++ ) {
for ( j = 0; j < 2; j++ ) {
cout << "Введите а["<<i<<"]["<<j<<"]";
cin >> a[i][j];
cout << "Введите b["<<i<<"]["<<j<<"]";
cin >> b[i][j];
}
}

matrica( a, b, c );
for ( i = 0; i < 2; i++ ) {
for ( j = 0; j < 2; j++ ) {
cout << c[i][j] << ' ';
}
}
cout << endl;
getch();
return 0;
}
 
F

Fam

я сам нашёл ошибку
в код полез чтобы добавить вывод матриц а и b тоже и заметил, спасибо парни
 
L

lazybiz

rrrFer
Да блин я уже немного нервничать начал))

Добавлено: Fam
Да всегда пожалуйста!)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!