برنامه ی ضرب بولی ماتریس (زبان C# )
در پست های قبل نحوه ی ضرب بولی دو ماتریس را یادآوری کردیم و در این پست می خواهیم ابن ضرب را در زبان C# یا C++ پیاده سازی کنیم. (نحو زبان C# و C++ در محیط دات نت بسیار شبیه به یکدیگر است).
مقدمات (تعریف ، دریافت و بررسی دو ماتریس ورودی) این ضرب درست مانند ضرب معمولی ماتریس ها است و در این پست آنها توضیح داده شده اند. تنها نکته ی اضافی در مورد ضرب بولی این است که ماتریس های ورودی باید ماتریس های بولی باشند یعنی درایه های آنها تنها صفر یا یک (غلط و درست) باشند، پس هنگام دریافت ماتریس ها از ورودی باید به این نکته توجه کنیم.
انجام ضرب :
در پست های قبل گفتیم که ماتریس را به صورت آرایه ای دو بعدی در نظر میگیریم، به این ترتیب دو آرایه ورودی با سطر و ستون (یا طول و عرض) مشخص داریم. برای مثال فرض کنید که دو آرایه های ورودی به نام های M1 و M2 به صورت زیر داریم :
int [ , ] M1 = new int [Row1 , Col1];
int [ , ] M2 = new int [Row2 , Col2];
برای انجام عملیات ضرب به سه حلقه ی تو در تو نیاز داریم تا آرایه های را پیمایش کنند. برای مثال با استفاده از حلقه ی for به شکل زیر میتوان این پیمایش را انجام داد.
for (int j=0; j < Col2; j++)
for (int k=0; k < Col1; k++)
{
if (M1[i , k] == 1 && M2[k , j] == 1)
{
Result [i , j] = 1;
break;
}
در تکه کد بالا از حلقه ی For تودر تو برای پیمایش آرایه ها و از دستور if برای بررسی درایه های آرایه ها استفاده شده است. اگر شرط داخل پرنتز در دستور if درست باشد مقدار 1 به خانه ی مورد نظر در آرایه حاصلضرب اختصاص داده می شود و دستور break از ادامه دادن حلقه ی داخلی (حلقه ی k ) جلوگیری می کند؛ به این دلیل که دیگر نیازی به بررسی درایه های دیگر آرایه های ورودی نیست، ولی اگر شرط دستور if هیچگاه درست نباشد، آنگاه درایه ماتریس حاصلضرب همان مقدار 0 باقی خواهد ماند، زیرا هنگام تعریف و ایجاد، آرایه به صورت خودکار با مقدار 0 پر می شود. میتوانید از برنامه ساده زیر برای انجام ضرب بولی دو ماتریس استفاده کنید.
GENERAL INFORMATION