برنامهای بنویسید که n عدد اعشاری را از ورودی بخواند، با استفاده از تابع qsort از stdlib.h آنها را مرتب کند و میانگین، میانه و انحراف معیار نمونه را محاسبه و چاپ کند.
4.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:16برای حل، تعداد n را بخوانید، با malloc یک آرایهٔ double تخصیص دهید و اعداد را در آن ذخیره کنید؛ سپس با استفاده از تابع qsort (از stdlib.h) و یک تابع مقایسهگر مناسب برای double آرایه را مرتب کنید و میانه را از روی آرایهٔ مرتب شده استخراج کنید. برای میانگین و انحراف معیار بهتر است از اعداد با دقت double استفاده کنید و برای پایداری عددی از الگوریتم Welford یا دو پاس (محاسبهٔ میانگین سپس مجموع مربعات اختلافات) استفاده کنید؛ فراموش نکنید از stdio.h برای ورودی/خروجی و math.h برای sqrt استفاده کنید، و پس از اتمام حافظهٔ malloc شده را free کنید. برای دادههای بزرگ qsort پیچیدگی O(n log n) دارد و در محیطهای HPC میتوان به جای آن از پیادهسازیهای موازی یا بهینهتر استفاده کرد؛ در سطح مبتدی توجه به بررسی مقدار بازگشتی malloc و پیادهسازی درست تابع مقایسه مهم است.
برای qsort، تابع مقایسه باید امضای const void* داشته باشد و مقادیر را به double تبدیل کند تا مرتبسازی صحیح انجام شود. برای پایداری عددی محاسبهٔ میانگین میتواند با الگوریتم دو پاس یا روش Welford انجام شود تا خطای تجمعی کاهش یابد. میانه را از آرایهٔ مرتبشده استخراج کنید: اگر n فرد است عنصر n/2 و اگر زوج است میان دو عنصر وسط. همچنین مقدار بازگشتی malloc را بررسی کنید و در پایان با free آزاد کنید تا از نشت حافظه جلوگیری شود.
گزارش