برنامه‌ای به زبان C بنویسید که N عدد اعشاری را از ورودی بگیرد، با استفاده از تابع qsort از stdlib.h آرایه را به‌صورت صعودی مرتب کند و میانگین و میانه (median) را محاسبه و چاپ کند.

13.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:46

0.0

برای حل مسئله از هدر stdlib.h و تابع qsort استفاده کنید؛ یک تابع مقایسه‌گر با امضای مناسب (const void *، const void *) بنویسید که عناصر double را با تبدیل اشاره‌گرها مقایسه کند و مقدار منفی/صفر/مثبت برگرداند. پس از مرتب‌سازی با qsort(arr, n, sizeof(double), cmp)، میانگین را با جمع و تقسیم بر n و میانه را با توجه به زوج یا فرد بودن n محاسبه کنید (برای n فرد عنصر میانه arr[n/2] و برای n زوج میانگین دو عنصر میانی). نکته‌های مفید: از مقایسه منطقی در تابع cmp استفاده کنید (مثلاً if (*a *b) return 1; else return 0;) و برای مجموعه‌های بزرگ qsort عملکرد خوبی دارد اما برای محاسبات HPC می‌توان به نسخه‌های موازی یا الگوریتم‌های خاص نیز فکر کرد.

توسط پژوهشگر در 201 روز قبل ساعت 03:46
دسته بندی ها: C for beginner
sara در 201 روز قبل ساعت 05:19

برای استفاده از qsort با آرایه double، مقایسه‌گر باید امضای int cmp(const void*, const void*) بگیرد و با استفاده از cast به const double* دو مقدار را مقایسه کند. همچنین مطمئن شوید n>0 است و برای محاسبه میانگین از جمع با دقت بالا (مثلاً long double) استفاده کرده و آن را به double تبدیل کنید تا از افت دقت جلوگیری کنید. برای محاسبه میانه، اگر n فرد است arr[n/2] و اگر زوج است (arr[n/2 - 1] + arr[n/2])/2.0 را به کار ببرید. در مجموعه‌های بزرگ، علاوه بر qsort می‌توانید به الگوریتم‌های موازی یا روش‌های انتخاب سریع median فکر کنید که برای HPC کارآمدترند.

گزارش

1 پاسخ

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

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