برنامه‌ای به زبان C++ بنویسید که سه آرگومان خط فرمان (مقدار شروع، مقدار پایان و تعداد بخش‌ها n) را می‌گیرد، با استفاده از std::atol از آرگومان‌ها را به long تبدیل می‌کند و انتگرال عددی تابع f(x)=x*x را با روش ذوزنقه محاسبه و نتیجه اعشاری را چاپ کند.

2.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:32

0.0

برای حل، از و تابع std::atol برای تبدیل argv به long استفاده کنید، سپس مقادیر مرزها را به double کست کنید و با تقسیم بازه به n بخش (n>0) عرض هر بخش h=(b-a)/n را محاسبه کنید. با یک حلقه ساده جمع مقادیر میانی را محاسبه و فرمول ذوزنقه را اعمال کنید؛ از double برای انباشت استفاده کنید تا دقت کافی در محاسبات عددی داشته باشید. نکات: بررسی کنید n>0 و تبدیل std::atol ممکن است سرریز کند، برای دقت بیشتر n را بزرگتر انتخاب کنید ولی توجه داشته باشید که n بزرگ زمان اجرا را افزایش می‌دهد (نکته‌ای مرتبط با HPC و بهینه‌سازی حلقه‌ها).

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

نکته کلیدی این پیاده‌سازی استفاده از std::atol است، زیرا ممکن است ورودی‌های خیلی بزرگ باعث overflow شوند؛ پس قبل از استفاده بررسی کنید argc برابر ۴ است و مقادیر argv را با محدوده long مطابقت دهید. برای دقت بیشتر، مقادیر a و b را به double تبدیل کنید، n>0 را بررسی کنید و h=(b-a)/n را محاسبه کنید و جمع میانی را با double انجام دهید. با اینکه افزایش n دقت را بهبود می‌دهد، زمان اجرا را نیز افزایش می‌دهد، بنابراین در کاربردهای HPC به بهینه‌سازی حلقه یا موازی‌سازی فکر کنید. همچنین از accumulation با double استفاده کنید تا خطاهای جانبی کاهش یابد.

گزارش

1 پاسخ

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

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