یک برنامهٔ 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).
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای ایمنی ورودی، قبل از استفاده از 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های خیلی بزرگ افزایش جملات اثر کمی دارد و از نظر عملکرد/دقت باید احتیاط شود.
گزارش