برنامهای به زبان 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 میتوان به نسخههای موازی یا الگوریتمهای خاص نیز فکر کرد.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای استفاده از 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 کارآمدترند.
گزارش