rdelgado

14th June 2011, 23:09

Hi,

I am working in a simple QConsole application, and what I want to do now is some matrix operations.

Let me explain on the go:

Outside my main as global variables I have defined two matrices:

QVector<QVector<int> > A, B;

Inside the main, I set the sizes to them using:

A.resize(10);

B.resize(10);

for(int i=0; i<10; i++)

{

A[i].resize(10);

B[i].resize(10);

}

And then I fill the A matrix with random values from 1 to 10.

What I want to do in some point, is to multiply matrix A by some scalar, but I want the result to be stored in matrix B.

So, I wrote the following void function:

void Multiply(int scalar, int rows, int cols, QVector<QVector<int> > matrix, QVector<QVector<int> > result)

{

for(int i=0; i<rows; i++)

{

for(int j=0; j<cols; j++)

{

result[i][j]=scalar*matrix[i][j];

}

}

}

And then, inside main, I call, for example:

Multiply(5, 10, 10, A, B);

But the function is not working because matrix B ends up with all values to 0.

However, if I debug and print the values of result[i][j] inside my function, it shows the correct values for the operation.

Do you know why is that happening?

I tried the same multiply function using regular C arrays:

void Multiply(int scalar, int Matrix[10][10], int Result[10][10])

And it works well that way...

Can you tell me why my void function is not working properly? Should I try some other way to do the same, since I wanted to do some matrix operations the same way, for example, multiply matrix A with B, and store the result in other matrix C, using some similar void function.

Thanks!

I am working in a simple QConsole application, and what I want to do now is some matrix operations.

Let me explain on the go:

Outside my main as global variables I have defined two matrices:

QVector<QVector<int> > A, B;

Inside the main, I set the sizes to them using:

A.resize(10);

B.resize(10);

for(int i=0; i<10; i++)

{

A[i].resize(10);

B[i].resize(10);

}

And then I fill the A matrix with random values from 1 to 10.

What I want to do in some point, is to multiply matrix A by some scalar, but I want the result to be stored in matrix B.

So, I wrote the following void function:

void Multiply(int scalar, int rows, int cols, QVector<QVector<int> > matrix, QVector<QVector<int> > result)

{

for(int i=0; i<rows; i++)

{

for(int j=0; j<cols; j++)

{

result[i][j]=scalar*matrix[i][j];

}

}

}

And then, inside main, I call, for example:

Multiply(5, 10, 10, A, B);

But the function is not working because matrix B ends up with all values to 0.

However, if I debug and print the values of result[i][j] inside my function, it shows the correct values for the operation.

Do you know why is that happening?

I tried the same multiply function using regular C arrays:

void Multiply(int scalar, int Matrix[10][10], int Result[10][10])

And it works well that way...

Can you tell me why my void function is not working properly? Should I try some other way to do the same, since I wanted to do some matrix operations the same way, for example, multiply matrix A with B, and store the result in other matrix C, using some similar void function.

Thanks!