برنامهای به زبان C++ بنویسید که یک آرایه بزرگ از اعداد اعشاری را از ورودی بخواند، میانگین و انحراف معیار نمونه را با یک گذر محاسباتی محاسبه کند و سپس بردار را با میانگین و انحراف معیار نرمالسازی کرده و مقادیر نرمالشده را چاپ کند.
12.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:54 0.0
برای حل مسئله از std::vector برای نگهداری دادهها و از هدر و تابع std::accumulate برای محاسبهٔ جمع و مجموع مربعات در یک گذر استفاده کنید (مثلاً با accumulate روی یک ساختار pair یا struct که مجموع و مجموع مربعات را نگه میدارد). برای دقت بالاتر مقادیر تجمعی را در long double جمع کنید و برای سرعت در ورودی/خروجی از ios::sync_with_stdio(false) و cin.tie(nullptr) استفاده کنید؛ در صورت نیاز به پایداری عددی میتوانید الگوریتم کاهان یا محاسبهٔ دو مرحلهای را مد نظر قرار دهید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای پایداری عددی بهتر در محاسبهٔ میانگین و انحراف معیار، از الگوریتم ولفورد (Welford) استفاده کنید یا حداقل در دو گذر کامل این کار را انجام دهید. میتوانید از std::accumulate با ساختاری مانند struct { long double sum, sumsq; } یا pair برای نگهداری مجموع و مجموع مربعات استفاده کنید و مقادیر را با long double جمعآوری نمایید. mean = sum / n و stddev = sqrt((sumsq - sum*sum/n) / (n-1)) را به دست آورید (یا از دو-pass برای پایداری بیشتر استفاده کنید). برای کارایی IO از ios::sync_with_stdio(false) و cin.tie(nullptr استفاده کنید و مقادیر نرمالشده را چاپ کنید.
گزارش