# Thread: two dimensional array

1. ## two dimensional array

given below is a code about multiplication of two matrices m1(m*n) and m2(n*p) and the multilplied matrix is stored in m3.

for(i=0;i<m;i++)
for(j=0;j<p;j++)
sum=0;
for(k=0;k<n;k++)
sum=sum+*(*(m1+i)+k)*(*(*(m2+k)+j))
*(*(m3+i)+j)=sum;
this code is basically is in a function where i took the base addresses of the all three matrixes.
The compiler shows error for the last two code lines.
I will be thankful to every help.

2. ## my matmult solution

using pointers makes it a little difficult to read/write..

this is what i wrote for my matrix multiplication program:

Code:
```void multmatrix (float a[100][100], float b[100][100], float c[100][100], int rowsa, int rowsb, int colsb) {
int i,j,k;
for (i=1; i<=rowsa;i++){
for (j=1; j<=colsb;j++){
c[i][j]=0;
for (k=1; k<=rowsb; k++){
c[i][j]= c[i][j]+a[i][k]*b[k][j];
}
}
}
}```
oh and...

typedef float matrix[50][50];

3. that's true moonwalker that pointer makes the program difficult,but the question actually was to write a fuction of multiplication of matrixes and above all i had to print the multilpied matrix in the main.So, i had to do it by using pointers,by returning the address of the third matrix.

4. ## hmm

>the question actually was to write a fuction of multiplication of matrixes
Didn't I show you a function that multiplies the matrices???
it is very easy to tweak it to work directly from main..
is there a problem?

>and above all i had to print the multilpied matrix in the main.
well, figure out your multiplication thing properly first...
printing from main is fairly simple..
Does using the above function obstruct you from printing
the matrix from main ????

the point is... you need not complicate the simple thing...
especially with pointers, when it is intimidating.
anyway, here's my whole program..

Code:
```//Matrix Calculator//

#include <stdio.h>
#include <conio.h>

typedef float matrix[50][50];

void takematrix (char name, matrix box, int rows, int cols)
{
int i , j;
printf("For Matrix %c :\n", name);
for (i=1; i<=rows; i++)
{
for (j=1; j<=cols; j++)
{
printf("Enter %c(%dx%d) :", name, i, j);
scanf("%f", &box[i][j]);
}
}
}

void showmatrix (char name, matrix box, int rows, int cols)
{
int i, j;
printf("Matrix %c :\n", name);

for (i=1; i<=rows; i++)
{
for (j=1; j<=cols; j++)
{
printf("%6.2f ", box[i][j]);
}

printf("\n");
}

}

void addmatrix(matrix box1, matrix box2, matrix box3, int rows, int cols )
{
int i, j;

for (i=1; i<=rows; i++)
{
for (j=1; j<=cols; j++)
{
box3[i][j]=box1[i][j]+box2[i][j];
}
}
}

void submatrix(matrix box1, matrix box2, matrix box3, int rows, int cols)
{
int i, j;

for (i=1; i<=rows; i++)
{
for (j=1; j<=cols; j++)
{
box3[i][j]=box1[i][j]-box2[i][j];
}
}
}

void multmatrix(matrix box1, matrix box2, matrix box3, int rows1, int rows2, int cols2)
{
int i, j, k;

for (i=1; i<=rows1; i++)
{
for (j=1; j<=cols2; j++)
{
box3[i][j]=0;
for (k=1; k<=rows2; k++)
{
box3[i][j]=box3[i][j]+(box1[i][k])*(box2[k][j]);
}
}
}
}

main()
{

clrscr();
int rowsa, colsa, rowsb, colsb, i, j;
matrix A, B, C, D, E;
char a, b, c, d, e;
a='A';
b='B';
c='C';
d='D';
e='E';

clrscr();
printf("Matrix Calculator\n");
printf("Programmed By Mahurshi Akilla\n");
printf("http://mahurshi.tripod.com\n\n\n");

printf("Enter order of matrix A (e.g. 3x5) : ");
scanf("%dx%d", &rowsa, &colsa);
printf("Enter order of Matrix B (e.g. 5x4) : ");
scanf("%dx%d", &rowsb, &colsb);

printf("\n");

takematrix(a, A, rowsa, colsa);
printf("\n");

takematrix(b, B, rowsb, colsb);
printf("\n");

clrscr();
showmatrix(a, A, rowsa, colsa);
showmatrix(b, B, rowsb, colsb);

if (rowsa==rowsb && colsa==colsb)
{
addmatrix(A, B, C, rowsa, colsa);
showmatrix(c, C, rowsa, colsa);
printf("Where Matrix C = A+B\n");

submatrix(A, B, D, rowsa, colsa);
showmatrix(d, D, rowsa, colsa);
printf("Where Matrix D = A-B\n");
}
else
{
printf("\n");
printf("Addition and Subtraction Could Not Be Carried Out.\n");
printf("Matrices 'C=A+B' and 'D=A-B' Do Not Exist\n");
printf("\n");
}

if (colsa==rowsb)
{
multmatrix(A, B, E, rowsa, rowsb, colsb);
showmatrix(e, E, rowsa, colsb);
printf("Where Matrix E = A x B\n");
}

else
{
printf("\n");
printf("Multiplication Could Not Be Carried Out.\n");
printf("Matrix 'E = A * B' Does Not Exist.\n");
}

getchar();
getchar();

}```
Hope this helps!

I prefer writing seperate functions instead of cramming it up
in main .. if you want to put the whole thing in main, you can
do it with small changes..

good luck

5. Yes but moonwalker, your function only multiplies matrices of fixed size... saurav's version looks as if it's meant for matrices of dynamic size

6. ## huh

what ?

This one? :
Code:
```for(i=0;i<m;i++)
for(j=0;j<p;j++)
sum=0;
for(k=0;k<n;k++)
sum=sum+*(*(m1+i)+k)*(*(*(m2+k)+j))
*(*(m3+i)+j)=sum;```

The thing already has 2 errors... .. dont even know
where it goes from here...

by the way, you can easily change the array thing into pointer if you want from the code i just posted

Popular pages Recent additions