الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ضرب مصفوفتين

بدأه Mr.Raed في 20 فبراير 2012 · 1 رد · 610 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
#include <iostream>
using namespace std ;
int main ()
{
 int i,j,k,sum ;
 int a[2][2],b[2][2] ;
 for (i=0; i<2; i++)
 { 
   for (j=0; j<2; j++)
   {
    cout << "Enter for " << "a[" << i << "][" << j << "]" << " element";
    cin >> a[j];
   }
  }

  cout << endl << endl;
  for (i=0; i<2; i++){ // this is for b
   for (j=0; j<2; j++){
    cout << "Enter for" << "b[" << i << "][" << j << "]" << " element" ;
    cin >> b[j];
   }
  }
  cout << "Now you see here that you typed for Matrix a" << endl << endl;
  cout << "********************************************" << endl << endl;
  for (i=0; i<2; i++)
  {
   for (j=0; j<2; j++)
   {
    cout << a[j] << '\t';
   }
   cout << endl << endl ;
  }
  cout << endl << endl;
  cout << "Now you see here that you typed for Matrix b" << endl<<endl;
  cout << "*********************************************" <<endl << endl;
  for (i=0; i<2; i++)
  {
   for (j=0; j<2; j++)
   {
    cout << b[j] << '\t';
   }
   cout << endl << endl;
  }
  cout << "\n";
  cout << "Now you see here the multiplication of Matrix a and b" << endl<< endl ;
  cout << "+******************************************************+" << endl << endl ;
  for (i =0; i<2; i++)
  {
   for (j=0; j<2; j++)
   {
    sum = 0; 
    for (k=0; k<2; k++){
     sum = sum + a[k] * b[k][j];
    }
    cout << sum << '\t';
   }
   cout << endl <<  endl;
   }
  return 0;
}

الكود شغال مية المية

لكن الاستفسار

  cout << "Now you see here the multiplication of Matrix a and b" << endl<< endl ;
  cout << "+******************************************************+" << endl << endl ;
  for (i =0; i<2; i++)
  {
   for (j=0; j<2; j++)
   {
    sum = 0; 
    for (k=0; k<2; k++){
     sum = sum + a[k] * b[k][j];
    }
    cout << sum << '\t';
   }
   cout << endl <<  endl;
   }
  return 0;

كيفية عمل الكود هنا كيف سيسير البرنامج ؟

1f557e95a4.jpg
#2

السلام عليكم

إذا كانت لدينا مصفوفة A مكونة من m صف و n عمود :

mimetex.cgi?A = a_{ij}

و مصفوفة أخرى B تتكون من n صف و p عمود :

mimetex.cgi?B = b_{ij}

فإن جداء (أو ضرب) هاتين المصفوفتين عبارة عن مصفوفة جديدة تتكون من m صف و p عمود و نرمز لها بــ :

mimetex.cgi?AB = c_{ij}

يتم حساب عناصر المصفوفة الجديدة عن طريق القانون التالي :

post-219439-004166600 1329734799_thumb.p

إليك هذا المثال (A و B مصفوفات مربعة ثنائية) :

post-219439-034649700 1329735060_thumb.p

عودا على بدء :

for (i =0; i<2; i++)
  {
   for (j=0; j<2; j++)
   {
    sum = 0; 
    for (k=0; k<2; k++){
     sum = sum + a[k] * b[k][j];
    }
    cout << sum << '\t';
   }
   cout << endl <<  endl;
   }

بالنسبة لعداد الحلقة الأولى i = 0, و صفر أقل تماما من اثنين إذن سيتم الدخول إلى الحلقة الثانية و ستكون قيمة العداد j = 0 و صفر أقل تماما من اثنين إذا ندخل في جسم الحلقة :

نُسند القيمة صفر للمتغير sum ثم ندخل في الحلقة الثالثة, k = 0 و صفر أقل تماما من اثنين إذا قيمة المتغير sum ستكون :

sum = 0 + a[0][0] * b[0][0]

نقوم بزيادة k بواحد و تكون قيمة sum :

sum = 0 + a[0][1] * b[1][0]

الآن أصبح k = 2 إذ شرط الحلقة لم يعد مُحقق >> يتم الخروج من الحلقة الثالثة.

المتغير sum يحوى الآن قيمة أول عنصر من المصفوفة الجديدة. نُظهر قيمة sum بالإضافة إلى مسافات بيضاء بفعل \t

نعود للحلقة الثانية, الآن j أصبح يساوي 1 و ما زال الشرط محققا (1 أقل تماما من 2) إذا نُسند من جديد القيمة صفر للمتغير sum (هذا المتغير يعمل كصندوق مؤقت حيث يحتفظ بقيمة أحد عناصر المصفوفة الجديدة لذا لابد من إفراغ الصندوق قبل كل عملية جمع)

الآن ندخل إلى الحلقة الثالثة من جديد ونكرر نفس الخطوات السابقة لنحصل على قيمة ثاني عنصر من عناصر المصفوفة الجديدة.

...

و هكذا دواليك.

لكي تكتمل الفكرة لديك, خذ ورقة و قلم ثم أكمل الخطوات السابقة.

أرجو أن أكون قد وُفقت في إيصال الفكرة

تحياتي.

المرفقات
prod.pngcdd226eca019412b443eb7cb4700426b.png

مواضيع مشابهة