یک برنامهٔ C++ بنویسید که با استفاده از std::atol عدد صحیح n را از آرگومان خط فرمان بخواند و مقدار تقریبی عدد اویلر e را با جمع n جملهٔ اول سری 1 + 1/1! + 1/2! + ... محاسبه و چاپ کند.

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

0.0

برای حل، آرگومان ورودی را از argv[1] با std::atol (بعد از include ) به نوع long تبدیل کنید و اگر منفی یا خالی بود خطا یا مقدار پیش‌فرض در نظر بگیرید. برای محاسبهٔ سری از نوع double استفاده کنید و به‌جای محاسبهٔ فاکتوریل کامل در هر جمله، از رابطهٔ بازگشتی term_i = term_{i-1} / i استفاده کنید تا هم سرعت بهتر شود هم خطای محاسباتی کم‌تر شود؛ یعنی term=1.0؛ sum=term؛ برای i از 1 تا n-1 انجام دهید: term/=i; sum+=term;. نکات: نتیجه را با دقت double نگه دارید، خروجی را چاپ کنید و برای n‌های خیلی بزرگ هشدار دهید که افزایش جملات تأثیر کمی دارد و از نظر عملکرد/دقت باید احتیاط شود (مربوط به مباحث محاسبات عددی و بهینه‌سازی حلقه‌ها در حوزه HPC).

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

برای ایمنی ورودی، قبل از استفاده از argv[1] بررسی کنید که argc حداقل ۲ باشد و مقدار argv[1] را با std::atol به long تبدیل کنید؛ اگر مقدار ورودی منفی یا خالی بود، مقدار پیش‌فرض یا خطا در نظر بگیرید. برای محاسبه e از سری 1 + 1/1! + … از نوع double استفاده کنید و با ترم اولیه term = 1.0 و sum = 1.0 آغاز کنید و از i = 1 تا n-1 با عملیات term /= i؛ sum += term ادامه دهید. این روش به‌جای محاسبه فاکتوریل کامل از رابطه بازگشتی استفاده می‌کند که هم سرعت را افزایش می‌دهد و هم خطای محاسباتی را کاهش می‌دهد. همچنین به کاربر هشدار بدهید که برای n‌های خیلی بزرگ افزایش جملات اثر کمی دارد و از نظر عملکرد/دقت باید احتیاط شود.

گزارش

1 پاسخ

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

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