Hi folks,

I'm a beginner in c++. The other day was trying to multiply 2 matrices using friend function. The program did run ,but the result showed some garbage values. plz help..

#include<iostream.h>

class matrix
{   
    int a[10][10],b[10][10],d[10][10],r,c,l,m;
    public:
        void read (void);
        void display (void);
        friend void multiply1 (matrix m1);
};

void matrix :: read()
{
    int i,j;
    cout<<"enter r and c of 1st mat"<<"\n";
    cin>>r>>c;
    cout<<"enter elements\n";
    for(i=0;i<r;i++)
        for(j=0;j<c;j++)
                cin>>a[i][j];

}
void matrix :: display()
{
    int i,j;
    cout<<"the elements are --"<<"\n";
    cout<<"The elements of 1st\n";
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
                cout<<a[i][j]<<" ";
        }
        cout<<"\n";
    }
    cout<<r;    //The value being printed here is right.
}
void  multiply1(matrix m1)
{
    int i,j,k;
    cout<<"\n"<<m1.r; //The value being printed here is always 0 .. :-(
    cout<<"\n Enter the dimension (n*m) for the second matrix:";
    cin>>m1.l>>m1.m;

    cout<<"\n Enter "<< m1.l*m1.m <<" element:";
    for(i=0;i<m1.l;i++)
    {
         for(j=0;j<m1.m;j++)
        {
             cin>>m1.b[i][j];
        }
    }

    cout<<"The elements of 2nd\n";
    for(i=0;i<m1.l;i++)
    {
        for(j=0;j<m1.m;j++)
        {
                cout<<m1.b[i][j]<<" ";
        }
        cout<<"\n";
    }

// Multiplication
if(m1.r==m1.m)
{
    for(i=0;i<m1.l;i++)
    {
        for(j=0;j<m1.m;j++)
        {
            m1.d[i][j]=0;
            for(k=0;k<m1.m;k++)
                m1.d[i][j]=m1.a[i][k]*m1.b[k][j]+m1.d[i][j];
        }
    }
cout<<"\n Resultant Matrix:";
    for(i=0;i<m1.l;i++)
    {
        cout<<"\n";
        for(j=0;j<m1.m;j++)
            cout<<m1.d[i][j]<<"\t";
    }
}
}

main()
{
    matrix obj,m1,m2;
    obj.read();
    obj.display();
    multiply1(m1);

}

The rows of the first matrix ('r' here) is not being passed into the method 'multiply'. The value of r when i print is showing 0 always. Any idea???

Edited 4 Years Ago by pyTony: fixed formating

Hi folks,

I'm a beginner in c++. The other day was trying to multiply 2 matrices using friend function. The program did run ,but the result showed some garbage values. plz help..

#include<iostream.h>

class matrix
{
int a[10][10],b[10][10],d[10][10],r,c,l,m;
public:
void read (void);
void display (void);
friend void multiply1 (matrix m1);
};

void matrix :: read()
{
int i,j;
cout<<"enter r and c of 1st mat"<<"\n";
cin>>r>>c;
cout<<"enter elements\n";
for(i=0;i<r;i++)
for(j=0;j<c;j++)
cin>>a[i][j];

}
void matrix :: display()
{
int i,j;
cout<<"the elements are --"<<"\n";
cout<<"The elements of 1st\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
cout<<r; //The value being printed here is right.
}
void multiply1(matrix m1)
{
int i,j,k;
cout<<"\n"<<m1.r; //The value being printed here is always 0 .. :-(
cout<<"\n Enter the dimension (n*m) for the second matrix:";
cin>>m1.l>>m1.m;

cout<<"\n Enter "<< m1.l*m1.m <<" element:";
for(i=0;i<m1.l;i++)
{
for(j=0;j<m1.m;j++)
{
cin>>m1.b[i][j];
}
}

cout<<"The elements of 2nd\n";
for(i=0;i<m1.l;i++)
{
for(j=0;j<m1.m;j++)
{
cout<<m1.b[i][j]<<" ";
}
cout<<"\n";
}

// Multiplication
if(m1.r==m1.m)
{
for(i=0;i<m1.l;i++)
{
for(j=0;j<m1.m;j++)
{
m1.d[i][j]=0;
for(k=0;k<m1.m;k++)
m1.d[i][j]=m1.a[i][k]*m1.b[k][j]+m1.d[i][j];
}
}
cout<<"\n Resultant Matrix:";
for(i=0;i<m1.l;i++)
{
cout<<"\n";
for(j=0;j<m1.m;j++)
cout<<m1.d[i][j]<<"\t";
}
}
}

main()
{
matrix obj,m1,m2;
obj.read();
obj.display();
multiply1(m1);

}

The rows of the first matrix ('r' here) is not being passed into the method 'multiply'. The value of r when i print is showing 0 always. Any idea???

This article has been dead for over six months. Start a new discussion instead.