یک برنامه به زبان C++ بنویسید که یک ماتریس مربع n×n را از ورودی بخواند و با استفاده از تابع std::swap در هدر آن را بهصورت درجا (in-place) transpose کند و ماتریس نتیجه را چاپ نماید.
2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 01:45 0.0
برای حل، ماتریس را در یک بردار دو بعدی (vector> یا نوع عددی دلخواه) ذخیره کنید و با دو حلقه تو در تو برای i از 0 تا n-1 و j از i+1 تا n-1 عناصر a[i][j] و a[j][i] را با std::swap از هدر جابجا کنید تا نیازی به حافظه اضافی نباشد. برای بهبود کارایی در سناریوهای HPC به ترتیب دسترسی ردیف-محور توجه کنید و در ماتریسهای بزرگ میتوان از تکنیکهای بلاکبندی (blocking) استفاده نمود؛ برنامه را با یک کامپایلر C++ مدرن و آپشنهای بهینهسازی مثل -O2 کامپایل کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای درجا انجام دادن ترانپسِ ماتریس، از دو حلقه با i از 0 تا n-1 و j از i+1 تا n-1 استفاده کنید تا فقط عناصر بالای قطر اصلی جابهجا شوند. با std::swap میتوانید مقدارهای a[i][j] و a[j][i] را بهطور ایمن در یکبار جابهجا کنید. برای کارایی با ماتریسهای بزرگ، حفظ دسترسی row-major و استفاده از بلاکبندی یا فناوریهای موازی مانند OpenMP میتواند کش را بهبود دهد. همچنین با کامپایلر مدرن و گزینههای بهینهسازی مانند -O2، کارایی اجرای کد تقویت میشود.
گزارش