کد ضرب ماتریس ها در سی پلاس پلاس c++

کد ضرب ماتریس ها در c++

سلام. اگر دانشجوی رشته‌ی کامپیوتر باشید مطمعنا در طول دوران تحصیلتان حداقل یک بار با مسئله ضرب ماتریس ها بخورد داشتید یا خواهید داشت.در واقع ضرب ماتریس ها در برنامه نویسی یک مثال خیلی مناسب جهت آموزش حلقه های تو در تو و مبحث آرایه های دو بعدیست.در این مطلب قصد دارم که ضرب ماتریس ها را به طور کامل و مرحله به مرحله برای شما شرح دهم.

برای ضرب دو ماتریس لازم است که تعداد ستون های ماتریس اول با تعداد سطر های ماتریس دوم برابر باشد زیرا عنصر مورد نظر در ماتریس حاصل برابر است با حاصل ضرب نقطه ای سطری از ماتریس اول در ستونی از ماتریس دوم برای درک بهتر این قضیه به مثال زیر توجه کنید.

فرض کنید که میخواهیم یک ماتریس ۲ در ۳ را در یک ماتریس ۳ در ۲ ضرب کنیم برای بدست آوردن عنصر (۱و۱) ماتریس حاصل کافیست ستون اول از ماتریس اول را در ستون دوم از ماتریس دوم ضرب نقطه ای کنیم

کد ضرب ماتریس ها در c++

مطابق روش بالا برای بدست آوردن عنصر (۱و۲) باید سطر اول از ماتریس اول را در ستون دوم از ماتریس دوم ضرب کنیم.

کد ضرب ماتریس ها در c++

و در پایان ماتریس حاصل به صورت زیر است و اندازه آن ۲ در ۲ است.

کد ضرب ماتریس ها در c++

حال بیایید برنامه ای بنویسیم که دو ماتریس m در n و p در q را از کاربر گرفته و حاصل ضرب آن ها را در خروجی نمایش دهد.

اولین کاری که باید انجام دهیم این است که برنامه تعداد سطر ها و ستون های دو ماتریس را از کاربر دریافت کند. بنابراین ۴ متغیر از نوع int تعریف میکنیم و انها را یک به یک از کاربر دریافت میکنیم.

توجه داشته باشید
ممکن است کاربر هنگام وارد کردن اندازه ماتریس ها به این نکته توجه نداشته باشد که برای ضرب دو ماتریس باید تعداد ستون های ماتریس اول با تعداد سطر های ماتریس دوم برابر باشد.پس نیاز است که ما به عنوان برنامه نویس جلوی این خطا را بگیریم.

برای جلوگیری از این خطا کافیست که از یک حلقه ی همیشه درست و یک دستور شرطی استفاده کنیم و درون حلقه از کاربر بخوایم تعداد سطر های ماتریس دوم را وارد کند بعد از آن چک کنیم که اگر تعداد ستون های ماتریس اول با مقداری که کاربر وارد کرده برابر بود از حلقه بیرون بیاید و ادامه دهد در غیر این صورت پیغامی به کار بر نمایش دهیم و از او بخوایم که دوباره تعداد سطر ها را وارد کند.

قطعه کد این قسمت از برنامه به صورت زیر است:

بعد از این مرحله به تعریف ماتریس ها و مقدار دهی آن ها میرسیم.برای تعریف یک ماتریس از آرایه دو بعدی استفاده میکنیم سه آرایه از نوع int (فرض میکنیم عناصر ماتریس ها همه از نوع int هستند) تعریف میکنم.اندازه ی آرایه ی حاصل را m در q قرار میدهیم و تمام عناصر آن را ۰ مقدار دهی میکنیم.

سپس باید دو آرایه ای که قرار است با هم ضرب شون توسط کاربر مقدار دهی شوند.برای این کار نیاز به استفاده از دو حلقه ی تو در تو  داریم به این صورت که تا زمانی به سطر آخر آرایه نرسیدیم یک به یک به صورت ستونی جلو رفته و مقادیر را از کاربر دریافت کنیم.بیایید از روی کد جلو بریم

خب کد فوق برای مقدار دهی ماتریس اول است. در حلقه ی اول ما خانه های آرایه را از ۰ تا زمانی که مقدار آن کمتر از m یعنی m-1 پیمایش میکنیم و در حلقه دوم این کار را برای ستون های آرایه انجام میدهیم و سپس از کاربر مقدار [a[i][j را را دریافت میکنیم به این صورت خانه های آرایه به ترتیب [a[0][0 و [a[0][2 و … [a[m-1][n-1 مقدار دهی میشوندو

برای ماتریس دوم هم مشابه روش بالا عمل میکنیم

خب به قسمت اصلی و پیچیده ی برنامه میرسیم که قرار است حاصل ضرب دو ماتریس را درون ماتریس c ذخیره کند.قبل از هر چیز بیایید یک نگاهی به کد این قسمت بیاندازیم.

مشاهده میکنید که از سه حلقه ی تو در تو استفاده کردیم که حلقه اول برای پیمایش سطری ماتریس a و حلقه دوم برای پیمایش ستونی ماتریس دوم و حلقه سوم برای عملیات ضرب نقطه ای و مقدار دهی عنصر حاصل است.فرض کنید بخوایم حاصل [c[1][2 را بدست آوریم برای این کار نیاز است که سطر دوم از ماتریس a در ستون سوم از ماتریس b ضرب نقطه ای شود که این عملیا در حلقه سوم انجام میگیرد. کار حلقه های اول و دوم دقیقا مانند کد های مقدار دهی دو ماتریس a و b است با این تفاوت که آنجا مقادیر را به صورت دستی از کاربر دریافت میکردیم اما اینجا از ضرب نقطه ای و دو ماتریس a و b استفاده میکنیم.

خب تموم شد دیگه و برنامه ما آماده اجراست کد نهایی به صورت زیر است

مشاهده کد ضرب ماتریس ها

و این هم نتیجه ی اجرای برنامه برای یک مثال ساده

کد ضرب ماتریس ها در c++

 

25
اشتراک گذاری
Ali F. Harandi

8 دیدگاه

  1. hosseinaref

    کامل ترین توضیح توی سایتای ایرانی

  2. Neda

    عالی بود ممنون

  3. داود

    دمت گرم خیلی خوب و با کیفیت و ساده

  4. مایکل اسکافیلد

    خیلی عالی بود دمتون گررررم

  5. سعید

    سلام
    این کدی که نوشتین جواب ضرب هر دو ماتریسی که در هم ضرب بشه رو میده؟

  6. سعید

    نوشتن کدی که بتونه هر ماتریسی رو معکوس کنه به چه صورت هستش؟
    اگه امکان داره راهنمایی کنید.

ارسال نظر