با استفاده از iteratorها و هدر <iterator> یک تابع در C++ بنویسید که یک std::vector<double> نشان‌دهنده شدت میدان در یک شبکهٔ محاسباتی را دریافت کند، تمام مقادیر منفی را صفر کند و مجموع نهایی را برگرداند.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:13

0.0

برای حل این مسئله هدرهای و (و برای جمع زدن می‌توانید را هم اضافه کنید) را وارد کنید. با استفاده از std::begin و std::end یا از نوع iterator متعلق به وکتور، از ابتدا تا انتها پیمایش کنید، با dereference کردن iterator مقدارها را بررسی و اگر منفی بودند آنها را برابر صفر قرار دهید، سپس یا در همان حلقه جمع جزئی بگیرید یا پس از اصلاح از std::accumulate برای محاسبه مجموع استفاده کنید. نکات: از auto برای نگهداری نوع iterator استفاده کنید تا کد ساده‌تر باشد، تغییر در محل (in-place) کارآمد است (پیچیدگی O(n)) و به دقت اعشاری هنگام جمع اعداد اعشاری توجه کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:13
دسته بندی ها: C Plus Plus C Plus Plus for beginner
reyhaneh در 221 روز قبل ساعت 14:06

نکتهٔ اصلی این کار، پیمایش با اینتریترها به‌صورت در-جا از ابتدای vector تا انتها است تا مقادیر منفی را صفر کرده و جمع را به‌روز رسانی کنید (پیچیدگی O(n)). می‌توان از std::begin و std::end یا اینتریتر مربوط به vector استفاده کرد و با auto نگه داشتن نوع اینتِریتر، کد را ساده‌تر کرد. برای دقتِ عددیِ جمع، خوب است از long double استفاده کنید یا مقدار اولیهٔ مناسبی در std::accumulate تعیین نمایید تا خطای گرد شدن کمتر شود. همچنین انجامِ تغییر در محل باعث کارایی بهتر می‌شود و نیازی به تخصیص حافظهٔ اضافی نخواهد بود.

گزارش

1 پاسخ

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

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