Страница 1 из 1

Перемножение/транспонирование матриц

Добавлено: 23 мар 2013, 19:00
VIST
Написал программу , в ней две функции: одна для транспонирования, другая для перемножения матриц. Обе возвращают указатели на массив указателей на массив (чтобы как-то вывести массив из функции). Функция transpose нормально возвращает транспонированную матрицу, но функция multiply возвращает матрицу ( ну т. е. указатель) , в которой почему-то только элементы с индексами 1/3 2/3 3/3 нормальные , в остальных бредятина выводится. Пожалуйста, помогите найти ошибку.

Код: Выделить всё

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;

int **transpose(int arr[][3], int x, int y){
	int **tmass;
	tmass=new int*[3];
	for (int i=0; i<x; i++){
		tmass[i]=new int[3];
		for (int j=0; j<y; j++){
		tmass[i][j]=arr[j][i];		
		}
	}
return tmass;
}
int **multiply(int massiv1[][3], int massiv2[][3], int x ,int y){
int **ResultMatrix;
int sum;
ResultMatrix=new int*[3];	
for (int i=0; i<x; i++){
 for (int j=0; j<y; j++){
	sum=0;
	ResultMatrix[i]=new int[y];
	  for (int n=0; n<y; n++){
      sum+=massiv1[i][n]*massiv2[n][j];
	  }
ResultMatrix[i][j]=sum;  	  

 }

}
return ResultMatrix;
}


int main()
{
	int E[3][3]={1,0,0,
	             0,1,0,
	             0,0,1};
	int A[3][3], B[3][3],X[3][1];
	for (int i=0; i<3; i++){
		for(int j=0;j<3;j++){
		A[i][j]=rand()%(9+9+1)-9;
		B[i][j]=rand()%(9+9+1)-9;
				}
		}
	
	for (int i=0; i<3; i++){
		for(int j=0;j<1;j++){
        X[i][j]=rand()%(9+9+1)-9;
		}
	}
	int AE1 [3][3];
	int **AE=multiply(A, B, 3, 3);
	
	multiply(A, B, 3,3);
	for(int i=0;i<3;i++){
	for(int j=0; j<3;j++){
	AE1[i][j]=AE[i][j];
	cout<<AE1[i][j]<<",";	
	}
cout<<endl;
}
	getch();
	return 0;
}
Заранее спасибо!

Re: Перемножение/транспонирование матриц

Добавлено: 23 мар 2013, 22:21
Albor
У вас строка ResultMatrix=new int[y]; на каждой итерации выделяет новую память под ResultMatrix. Нужно перенести эту строчку между строками "for (int i=0; i<x; i++){" и
"for (int j=0; j<y; j++){"

Re: Перемножение/транспонирование матриц

Добавлено: 23 мар 2013, 22:30
VIST
большое спасибо вам, Albor!

Re: Перемножение/транспонирование матриц

Добавлено: 31 мар 2013, 15:09
VIST
а не подскажете, как сделать функцию для умножения матриц разных размерностей? Чтобы перемножала , например, матрицу А[3][3] на матрицу Х[3][1]. Искал везде , но ничего путного не нашел

Re: Перемножение/транспонирование матриц

Добавлено: 31 мар 2013, 16:37
rrrFer
алгоритм тот же, но количество столбцов в первой матрицы должно совпадать с количеством строк во второй. Иначе перемножать вообще нельзя.