ارسال پاسخ 
 
رتبه موضوع:
  • 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;
}
//*************************

Just OpenGL

International Stroop Test link1
International Stroop Test link2
Android and Web programming
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
Like Post نقل قول این ارسال در پاسخ
22-12-2007, 06:58 PM
ارسال: #2
RE: ضرب دو ماتریس M*N
سلام . برنامه زیبایی بود. اما ممکنه که بگی int** این دو تا ضربی که گذاشتی به چه معنی ایه ؟
اگرم امکانش باشه ممنون می شم الگوریتم کاریه این برنامرو به طور کلی بگی . ممنون - پویان
یافتن تمامی ارسال‌های این کاربر
Like Post نقل قول این ارسال در پاسخ
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.
امیدوارم خوب توضیح داده باشم.
موفق باشین.

Just OpenGL

International Stroop Test link1
International Stroop Test link2
Android and Web programming
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
Like Post نقل قول این ارسال در پاسخ
ارسال پاسخ 


پرش در انجمن:


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









ترجمه MyBB فارسی - فارسی ساز نسخه ۱.۶
قدرت گرفته از MyBB, © 2002-2014 MyBB Group.

Theme "Aadamentium" created by: MyBB Themes | Tutoriale


server monitor