Mnożenie macierzy prostokątnych

0

Mam funkcje ktora dotaje 3 macierze, 2 z liczbami i trzecia w ktorej zapisuje wynik:

 
int** mnoznie(int** m1, int row1, int col1, int** m2, int row2, int col2, int** m3 )
{
	if ( col1 == row2 )
	{
		//operacja mnozenia i zapisania wyniku w macierzy m3
		for (int i=0; i<row1; i++)
			for (int j=0; j<col2; j++)
				m3[i][j] = 0;
		for (int i = 0; i < row1 ; i++)
		{
			for (int j = 0; j < col2; j++)
			{
				for (int k = 0; k < col1; k++)
				{
					m3[i][j] += m1[i][k] * m2[k][j];
				}
			}
		}


		print (m3, row1, col2);
	}
	else
		cout << "Nie można pomnożyc tych macierzy!";
	return m3;
}

zauwazylem ze kiedy mnoze 2 macierze z ktorych pierwsza ma wiecej wierszy niz kolum to wywala mi bład: "Unhandled exception at 0x77da15de in Macierze.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd." . Używam Visuala 2010.

0

Coś masz le przy tworzeniu macierzy! "Access violation writing location 0xcdcdcdcd" oznacza, że użyłeś wskaźnika o nieustalonej wartości (0xcdcdcdcd to domyślna wartość wskaźnika w trybie debug).
Całkiem możliwe, że gdzieś wcześniej pomyliłeś wiersze z kolumnami.

0
int** miloczyn(int **m1, int **m2, int x, int y, int x2, int y2)
{
	int **m = new int *[x];
	for(int i = 0; i < x; ++i)
		m[i] = new int [y2];
		
	for(int i = 0; i < x; i++)
		for(int j = 0; j < y2; j++)
			m[i][j]=0;
			
	for(int i = 0; i < x; i++)
		for(int j = 0; j < y2; j++)
			for(int k = 0; k < y; k++)
				m[i][j] +=m1[i][k]*m2[k][j];
				
	
	return m;
}

Czy macierze można pomnożyć proponuję sprawdzić przed wywołaniem funkcji.

0

Tez chciałem zrobić tak żeby macierz utworzyć w funkcji tylko potem bardzo nie wiem jak mogę ja wypisać na ekranie kiedy funkcja ją zwraca..

1 użytkowników online, w tym zalogowanych: 0, gości: 1