امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ضرب دو ماتریس M*N
29-10-2007, 08:07 PM, (آخرین ویرایش در این ارسال: 22-12-2007, 08:33 PM، توسط mohammad.)
#1
ضرب دو ماتریس M*N
سلام
این برنامه از ورودی 2 ماتریس رو میگیره و حاصل ضرب اونا رو به خروجی میبره
البته اگه میبینین خیلی طولانی شده به خاطر اینه که سعی کردم خروجیش قشنگ باشه وگرنه اصل کار همون تابع پایین برنامس:
کد:
#include<iostream>
using namespace std;
int** mul (int**,int,int,int**,int,int);
int main()
{
    int i,j,n1,n2,m1,m2,**p1,**p2,**p3;
    cout<<"MULTIPLY TWO MATRIX N1xM1 AND N2xM2\n\n";
    cout<<"Enter number of rows and colume of first matrix :\n\n";
    cout<<"Rows: ";
    cin>>n1;
    cout<<"Colume: ";
    cin>>m1;
    cout<<endl;
    cout<<"Enter number of rows and colume of second matrix :\n\n";
    cout<<"Rows: ";
    cin>>n2;
    cout<<"Colume: ";
    cin>>m2;
    cout<<endl;
    if (m1 != n2)
    {
           cout<<"We cant multipy matrix "<<n1<<"X"<<m1<<" and "<<n2<<"X"<<m2<<endl;
           system("pause");
           exit(0);
    }
    p1=new int* [n1];
    for (i=0 ; i<n1 ; i++)
        p1[i]=new int [m1];
    p2=new int* [n2];
    for (i=0 ; i<n2 ; i++)
        p2[i]=new int [m2];
    p3=new int* [n1];
    for (i=0 ; i<n1 ; i++)
        p3[i]=new int [m2];
    //Enter first matrix
    cout<<"Enter numbers of first matrix :\n";
    for (i=0 ; i<n1 ; i++)
        for (j=0 ; j<m1 ; j++)
        {
            cout<<"Enter M1["<<i<<"]["<<j<<"]: ";
            cin>>p1[i][j];
        }
    cout<<endl;
    //Enter second matrix
    cout<<"Enter numbers of second matrix :\n";
    for (i=0 ; i<n2 ; i++)
        for (j=0 ; j<m2 ; j++)
        {
            cout<<"Enter M2["<<i<<"]["<<j<<"]: ";
            cin>>p2[i][j];
        }
    cout<<"\n\n\n";
    //calculate
    p3=mul(p1,n1,m1,p2,n2,m2);
    
    //Print result
    cout<<"First matrix is:\n";
    for (i=0 ; i<n1 ; i++)
    {
        for (j=0 ; j<m1 ; j++)
            cout<<p1[i][j]<<"  ";
        cout<<"\n\n";
    }
    cout<<"\n\n";
    cout<<"Second matrix is :\n";
    for (i=0 ; i<n2 ; i++)
    {
        for (j=0 ; j<m2 ; j++)
            cout<<p2[i][j]<<"  ";
        cout<<"\n\n";
    }
    cout<<"\n\n";
    cout<<"Result:\n";
    for (i=0 ; i<n1 ; i++)
    {
        for (j=0 ; j<m2 ; j++)
            cout<<p3[i][j]<<"  ";
        cout<<"\n\n";
    }
    cout<<endl;
    system("pause");
    return 0;
}
//*************************
int** mul (int **a,int n1,int m1,int **b,int n2,int m2)
{
      int i,j,k,**temp;
      temp=new int* [n1];
      for (i=0 ; i<n1 ; i++)
        temp[i]=new int [m2];
        
      for (i=0 ; i<n1 ; i++)
          for (j=0 ; j<m2 ; j++)
          {
              temp[i][j]=0;
              for (k=0 ; k<m1 ; k++)
                  temp[i][j]+=a[i][k]*b[k][j];
          }
      return temp;
}
//*************************
پاسخ
22-12-2007, 06:58 PM,
#2
RE: ضرب دو ماتریس M*N
سلام . برنامه زیبایی بود. اما ممکنه که بگی int** این دو تا ضربی که گذاشتی به چه معنی ایه ؟
اگرم امکانش باشه ممنون می شم الگوریتم کاریه این برنامرو به طور کلی بگی . ممنون - پویان
پاسخ
22-12-2007, 10:48 PM,
#3
RE: ضرب دو ماتریس M*N
سلام
**int یک اشاره گر به اشاره گره ، یعنی یک اشاره گر (یا آرایه) که هر خونه ی اون به یک جای دیگه اشاره میکنه و با کمک ایم نوع اشاره گر میشه یک آرایه ی دوبعدی ساخت که اندازه ی سطر و ستونش متغیر باشه.
تو این برنامه هم چون ما اندازه ی ماتریس رو نمیدونیم و از کاربر میگیریم ، با کمک این نوع اشاره گر و new کردن حافظه ( به همون شکل مشاهده شده تو برنامه ) میتونیم یک آرایه ی دوبعدی با سایز دلخواه بشازیم.
برنامه توضیح خاصی نداره فقط در تابع mul با کمک تکه کد زیر :
کد:
for (i=0 ; i<n1 ; i++)
          for (j=0 ; j<m2 ; j++)
          {
              temp[i][j]=0;
              for (k=0 ; k<m1 ; k++)
                  temp[i][j]+=a[i][k]*b[k][j];
          }
دو تا ماتریس رو در هم ضرب میکنیم و در یک ماتریس دیگه که از نوع **int (یا همون آرایه ی دوبعدی پویا) هست میریزیم و در پایان این تابع ، آدرس این آرایه رو ( که از نوع **int ) برمیگردونه به تابع main.
امیدوارم خوب توضیح داده باشم.
موفق باشین.
پاسخ


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان






صفحه‌ی تماس | Code Corona | بازگشت به بالا | | بایگانی | پیوند سایتی RSS
Persian Translation by MyBBIran.com - Ver: 5.2
Powered by MyBB, © 2002-2015 MyBB Group.

Theme "Aadamentium" created by: MyBB Themes | Tutoriale


server monitor