Mnożenie macierzy 2D

0

Hey,

Potrzebuje wymnożyć dwie macierze rozm. 4x1 i 4x4 .
Jestem początkujaca z c++, napisałam już kawałek tego programu, ale gdzieś zapętlilam się ;/
Coś robię źle w pętlach for chyba ?
Czy mogłyby ktoś spojrzeć na ten mój skrypt ?
Będę wdzięczna za każdą pomoc : )


#include "stdafx.h"
#include <iostream>
#include "stdio.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

	// macierz wejściowa 4x1 (wektor)
	double p1[4][1];
	p1[0][0] = 10;
	p1[1][0] = 10;
	p1[2][0] = 10;
	p1[3][0] = 1;

	// macierze wejściowa 4x4 
	double pReturn[4][4] = {
	{1, 1, 1, 1}, 
    {1, 1, 2, 2},
	{1, 3, 7, 2}, 
    {0, 0, 0, 1}};

	// macierz wynikowa -> wektor 4x1
	double p1Out[4][1];

    // Mnożenie macierzy
  for(int i = 0; i < 4; i++)
    for(int j = 0; j < 1; j++)
      p1Out[i][j] = 0;
  for(int i = 0; i < 1; i++)
    for(int j = 0; j < 4; j++)
      for(int k = 0; k < 1; k++)
	  {
        p1Out[i][j] = p1Out[i][j] + p1[i][k] * pReturn[k][j];
		std::cout<<" " <<p1Out[i][j]<<std::endl;
	  }


	  system("Pause");
	return 0;
}

 
1

Nie zaglądałem zbytnio do kodu, ale tutaj masz błąd:
p1Out[i][j] = p1Out[i][j] + p1[i][k] * pReturn[k][j];
Wychodzisz poza indeks tablicy p1Out.

0

Ok, już problem rozwiązany. Znalazłam błąd ;)
Kod zamieszczam poniżej.

 
#include "stdafx.h"
#include <iostream>
#include "stdio.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

	// macierz wejściowa 4x1 (wektor)
	double p1[4][1];
	p1[0][0] = 1;
	p1[1][0] = 1;
	p1[2][0] = 1;
	p1[3][0] = 1;

	// macierze wejściowa 4x4 
	double pReturn[4][4] = {
	{1, 1, 1, 1}, 
    {1, 1, 1, 1},
	{1, 1, 1, 1}, 
    {0, 0, 0, 1}};

	// macierz wynikowa -> wektor 4x1
	double p1Out[4][1];

    // Mnożenie macierzy
  for(int i = 0; i < 4; i++)
    for(int j = 0; j < 1; j++)
      p1Out[i][j] = 0;
  for(int i = 0; i < 4; i++)
    for(int j = 0; j < 1; j++)
      for(int k = 0; k < 4; k++)
	  {
        p1Out[i][j] = p1Out[i][j] + pReturn[i][k]*p1[i][j];
		
	  }



	  for(int i=0; i< 4; i++)
	  {
		  for(int j=0;j<1 ; j++)
		  {

			  std::cout << " " << p1Out[i][j]<<std::endl;
		  }



	  }
	  system("Pause");
	return 0;
}


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