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

توسط پژوهشگر در 202 روز قبل ساعت 02:29
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 202 روز قبل ساعت 09:29

نکتهٔ کلیدی این کار استفاده از long double برای هر دو روش است تا کاهش خطای گردشی مخصوصاً با r نزدیک به 1 تضمین شود و حالت r=1 به‌طور جداگانه بررسی شود تا تقسیم بر صفر اتفاق نیفتد. در حلقه، برای بهبود کارایی می‌توانید مقدار جاری را با ضرب متوالی در r به‌روزرسانی کنید و از std::pow(r,i) فقط برای توضیحات مسئله استفاده کنید تا از محاسبات تکراری پرهیز کنید. با وجود اینکه سؤال می‌گوید از std::pow در حلقه استفاده کنید، برای تحلیل‌های عددی بزرگ‌تر بهتر است از نگهداری توان استفاده کنید و در هر صورت از long double بهره ببرید. در فرمول بسته‌ای، مقدار pow(r, n+1) را یک‌بار محاسبه کنید و مراقب خطای مطلق و خطای نسبت باشید.

گزارش

1 پاسخ

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

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