یک برنامهٔ C++ بنویسید که مقادیر a (ضریب اولیه)، r (نسبت) و n (تعداد جملهها) را از ورودی بخواند و مجموع سری هندسی S = sum_{i=0}^{n} a * r^i را ابتدا با حلقهای که برای هر جمله از std::pow استفاده میکند و سپس با فرمول بستهای S = a*(1-std::pow(r,n+1))/(1-r) (حالت r=1 را جداگانه بررسی کنید) محاسبه کند و دو مقدار و خطای مطلق بین آنها را چاپ کند.
3.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:29 0.0
برای حل این مسئله از هدر و تابع std::pow برای محاسبه توان استفاده کنید و از نوع double یا long double برای دقت عددی بهره ببرید. در حلقه از std::pow(r,i) برای محاسبه هر جمله استفاده کنید و برای روش بستهای یک بار std::pow(r,n+1) را محاسبه کنید؛ در ضمن نکات عددی مانند r نزدیک به 1 و استفاده از long double برای کاهش خطا و اجتناب از فراخوانی مکرر std::pow در حلقه (در مسائل بزرگتر از ضربهای متوالی استفاده کنید) را لحاظ کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکتهٔ کلیدی این کار استفاده از long double برای هر دو روش است تا کاهش خطای گردشی مخصوصاً با r نزدیک به 1 تضمین شود و حالت r=1 بهطور جداگانه بررسی شود تا تقسیم بر صفر اتفاق نیفتد. در حلقه، برای بهبود کارایی میتوانید مقدار جاری را با ضرب متوالی در r بهروزرسانی کنید و از std::pow(r,i) فقط برای توضیحات مسئله استفاده کنید تا از محاسبات تکراری پرهیز کنید. با وجود اینکه سؤال میگوید از std::pow در حلقه استفاده کنید، برای تحلیلهای عددی بزرگتر بهتر است از نگهداری توان استفاده کنید و در هر صورت از long double بهره ببرید. در فرمول بستهای، مقدار pow(r, n+1) را یکبار محاسبه کنید و مراقب خطای مطلق و خطای نسبت باشید.
گزارش