# Thread: Matrix Multiplication 2 - Error Message

1. ## Matrix Multiplication 2 - Error Message

Can anyone please explain what this error message means?

error 139 - Argument no 2 of 'scaling_multiplication' must be of type '<ptr>(double[3])', not 'int[3][3]'

My code is below:

Code:
```void scaling (double line[][3])
{

double s;
double new_line2[2][3];

printf("\nHow much would you like to scale the line by?\nEnter a value between 0 and 1:");
scanf("%lf", &s);

int scaling_matrix[3][3] = { {s, 0, 0}, {0, s, 0}, {0, 0, s} };

scaling_multiplication(line, scaling_matrix, new_line2);

printf("\nThe new start coordinates are: (%lf,%lf,%lf)", new_line2[0][0], new_line2[0][1], new_line2[0][2]);
printf("\nThe new end coordinates are: (%lf,%lf,%lf)", new_line2[1][0], new_line2[1][1], new_line2[1][2]);
}

void scaling_multiplication (double a[][3], double b[][3], double F[][3])
{

for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
for(k=0; k<3; k++)
{
F[i][j] = a[i][k] + b[k][j];
}
}
}
}```

2. You're passing scaling_multiplication() an integer array, and it expects a double one. (Not really an error, but still.)

Code:
`int scaling_matrix[3][3] = { {s, 0, 0}, {0, s, 0}, {0, 0, s} };`
s is a double.

3. scaling_matrix is a 2-d int array but the function is expecting a 2-d double array. There is no automatic conversion, it is an error.

4. Thanks for the help. I have made the change.

The program now runs, where as it didn't before but it comes up with an error when I try to use the scaling function.

Any suggestions?

Code:
```void scaling (double line[][3])
{

double s;
double new_line2[2][3];

printf("\nHow much would you like to scale the line by?\nEnter a value between 0 and 1:");
scanf("%lf", &s);

double scaling_matrix[3][3] = { {s, 0, 0}, {0, s, 0}, {0, 0, s} };

scaling_multiplication(line, scaling_matrix, new_line2);

printf("\nThe new start coordinates are: (%lf,%lf,%lf)", new_line2[0][0], new_line2[0][1], new_line2[0][2]);
printf("\nThe new end coordinates are: (%lf,%lf,%lf)", new_line2[1][0], new_line2[1][1], new_line2[1][2]);
}

void scaling_multiplication (double a[][3], double b[][3], double F[][3])
{

int i, j, k;
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
for(k=0; k<3; k++)
{
F[i][j] = a[i][k] + b[k][j];
}
}
}
}```

5. new_line2 is a 2x3 matrix, you pass it as the third argument to the function (which is F[][3]). Then you use the index i (which goes from 0 to 2) on the first dimension. But the first dimension of new_line2 only allows 0 or 1. When you use index 2, it fails. Maybe you meant to make new_line2 3x3.

6. My code now works with no errors. THANK YOU.

But when I run the program and use the scaling function, I get incorrect values. Ar emy equations correct?

Code:
```void scaling (double line[][3])
{
//double a=0;
double s;
double new_line2[2][3];

printf("\nHow much would you like to scale the line by?\nEnter a value between 0 and 1:");
scanf("%lf", &s);

double scaling_matrix[3][3] = { {s, 0, 0}, {0, s, 0}, {0, 0, s} };

//scaling_matrix[0][0]=s;
//scaling_matrix[1][0]=0;
//scaling_matrix[2][0]=0;
//scaling_matrix[0][1]=0;
//scaling_matrix[1][1]=s;
//scaling_matrix[2][1]=0;
//scaling_matrix[0][2]=0;
//scaling_matrix[1][2]=0;
//scaling_matrix[2][2]=s;

scaling_multiplication(line, scaling_matrix, new_line2);

printf("\nThe new start coordinates are: (%lf,%lf,%lf)", new_line2[0][0], new_line2[0][1], new_line2[0][2]);
printf("\nThe new end coordinates are: (%lf,%lf,%lf)", new_line2[1][0], new_line2[1][1], new_line2[1][2]);
}

void scaling_multiplication (double a[][3], double b[][3], double F[][3])
{
//F[0][0]=D[0][0]*E[0][0];
//F[0][1]=D[1][0]*E[0][1];
//F[0][2]=D[2][0]*E[0][2];
//F[1][0]=D[0][1]*E[1][0];
//F[1][1]=D[1][1]*E[1][1];
//F[1][2]=D[2][3]*E[1][2];
int i, j, k;
for(i=0; i<2; i++)
{
for(j=0; j<3; j++)
{
for(k=0; k<2; k++)
{
F[i][j] = a[i][k] + b[k][j];
}
}
}
}```