برنامه‌ای به زبان 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) استفاده کنید؛ در صورت نیاز به پایداری عددی می‌توانید الگوریتم کاهان یا محاسبهٔ دو مرحله‌ای را مد نظر قرار دهید.

توسط پژوهشگر در 201 روز قبل ساعت 03:54
دسته بندی ها: C Plus Plus C Plus Plus for beginner
sara در 201 روز قبل ساعت 04:47

برای پایداری عددی بهتر در محاسبهٔ میانگین و انحراف معیار، از الگوریتم ولفورد (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 استفاده کنید و مقادیر نرمال‌شده را چاپ کنید.

گزارش

1 پاسخ

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

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