sahana
sahana
Branch Unspecified
18 Mar 2008

problem in matrix multiplication

i have to multiply 2 n*m matrices using pointers and the most optimal solution is expected.
pradeep_agrawal

pradeep_agrawal

Branch Unspecified
11 years ago
sahana
i have to multiply 2 n*m matrices using pointers
When you say pointers, do you meant that the matrices are implemented using linked list? Could you please provide more details on how the matrices are implemented.

-Pradeep
sahana

sahana

Branch Unspecified
11 years ago
yeah u can implement it by a linked list.
friendster7

friendster7

Branch Unspecified
11 years ago
if u need to multiply then check out this..this might help

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

main()
{
    int mtrx1[5][5],mtrx2[5][5],product[5][5],ro1,ro2,col1,col2;
    unsigned short int posblty;
    static unsigned short int call_main = 0;
    if(call_main == 0 || call_main % 10 == 0)
    {
        clrscr();
        printf("\nThis program will calculate the product of two matrices");
        printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }
    call_main++;
    getnum(&ro1,1);
    getnum(&col1,3);
    getnum(&ro2,2);
    getnum(&col2,4);
    posblty = is_posble(col1,ro2);
    if(!posblty)
    {
        getch();
        repeat();
    }
    getmatrix(mtrx1,ro1,col1,1);
    getmatrix(mtrx2,ro2,col2,2);
    multiply(mtrx1,mtrx2,product,ro1,col2,col1);
    print_matrix(product,ro1,col2);
    find_trace(product,ro1,col2);
    repeat();
}

getnum(num,message)
int *num,message;
{
    do
    {
    switch(message)
    {
        case 1:
        printf("\nEnter the number of rows in matrix 1:");
        break;

        case 2:
        printf("\nEnter the number of rows in matrix 2:");
        break;

        case 3:
        printf("\nEnter the number of columns in matrix 1:");
        break;

        case 4:
        printf("\nEnter the number of columns in matrix 2:");
        break;

        default:
        printf("\nEnter a number:");
    }
    scanf("%d",num);
    }
    while(*num > 5);
    return;
}

is_posble(col_1,row_2)
int row_2,col_1;
{
    if(col_1 != row_2)
    {
        printf("\nThe multiplication of given matrices is not possible");
        return(0);
    }
    else
    {
        return(1);
    }
}

getmatrix(array,row,column,mtrx_num)
int *array[5],row,column,mtrx_num;
{
    int i,j;
    printf("\nEnter matrix %d\n",mtrx_num);

    for(i = 0;i < row;i++)
    {
        for(j = 0;j < column;j++)
        {
            scanf("%d",array+(5*i+j));
        }
    }
    return;
}

multiply(matrix1,matrix2,product,l,m,n)
int *matrix1[5],*matrix2[5],*product[5],l,m,n;
{
    int i,j,k,temp1,temp2,temp3;

    for(i=0;i < l;i++)
    {
        for(j = 0;j < m;j++)
        {
            *(product+(5*i+j)) = 0;
            for(k = 0;k < n;k++)
            {
                temp1 = *(matrix1+(5*i+k));
                temp2 = *(matrix2+(5*k+j));
                temp3 = *(product+(5*i+j));
                *(product+(5*i+j)) = temp1 * temp2 + temp3;
            }
        }
    }
    return;
}

print_matrix(array,row,col)
int *array[5];
{
    int i,j;
    printf("\nThe product is :");
    for(i = 0;i < row;i++)
    {
        printf("\n");
        for(j = 0;j < col;j++)
        {
            printf("%5d \t",*(array+(5*i+j)));
        }
    }
    return;
}

sahana

sahana

Branch Unspecified
11 years ago
hi friendster7,
i got your code.but is the most optimal?this code is designed for matrices which have a maximum of 5 rows and 5 columns right?so if i dont use a 5*5 matrix (say 3*3 ), its going to be a waste of space right?can we make it a little more optimal.how about dyanamic memory allocation?
please tell me if i have undserstood it wrongly.
another constraint i forgot to add in the question is that we cannot get the size of the matrix during runtime and then assign the subscript of the array.
ie something like
scanf("%d,%d",&rows,&col);
int array[row][col];

otherwise your code was really good.

Share this content on your social channels -

Only logged in users can reply.