یک برنامه به زبان 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 کامپایل کنید.

توسط پژوهشگر در 220 روز قبل ساعت 01:45
دسته بندی ها: C Plus Plus C Plus Plus for beginner
sara در 220 روز قبل ساعت 12:06

برای درجا انجام دادن ترانپسِ ماتریس، از دو حلقه با i از 0 تا n-1 و j از i+1 تا n-1 استفاده کنید تا فقط عناصر بالای قطر اصلی جابهجا شوند. با std::swap می‌توانید مقدارهای a[i][j] و a[j][i] را به‌طور ایمن در یک‌بار جابه‌جا کنید. برای کارایی با ماتریس‌های بزرگ، حفظ دسترسی row-major و استفاده از بلاک‌بندی یا فناوری‌های موازی مانند OpenMP می‌تواند کش را بهبود دهد. همچنین با کامپایلر مدرن و گزینه‌های بهینه‌سازی مانند -O2، کارایی اجرای کد تقویت می‌شود.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری