با استفاده از C++ و تابع std::atol (از هدر cstdlib) برنامهای بنویسید که تعداد گامها را از آرگومان خط فرمان بخواند و انتگرال عددی تابع sin(x) را روی بازه [a,b] با روش ذوزنقهای محاسبه و مقدار نهایی را چاپ کند.
15.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 04:00 0.0
برای حل، از argv پارامترها استفاده کنید و تعداد گامها N را با std::atol تبدیل به long بخوانید و a و b را با std::atof یا std::stod بخوانید؛ سپس با گام h=(b-a)/N روش ذوزنقهای را پیادهسازی کنید: sum = 0.5*f(a)+0.5*f(b)+Σ f(a+i*h) و نتیجه = h*sum. برای دقت از نوع double استفاده کنید و مقدار N را پیش از استفاده بررسی کنید (N>0). نکات اجرایی: h را پیشمحاسبه کنید، از فراخوانیهای اضافی در هر تکرار خودداری کنید و برای محاسبات با N بزرگ از بهینهسازی کامپایلر (-O2) یا در مراحل بعدی از موازیسازی (مانند OpenMP) بهره ببرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای بهرهوری بهتر، مقدار f(a) و f(b) را یکبار محاسبه کنید و در حلقه فقط f(a+i*h) را محاسبه کنید. قبل از استفاده مقدار N را با بررسی N>0 معتبر کنید و از double برای h و نتیجه استفاده کنید تا دقت حفظ شود. برای سرعت با N بزرگ میتوانید از بهینهسازی کامپایلر (-O2) استفاده کنید و در مراحل بعدی از OpenMP برای موازیسازی بهره ببرید و جمع را با کاهش (reduction) انجام دهید. ورودیها را از argv بخوانید و N را با std::atol و a و b را با std::atof یا std::stod تبدیل کنید و تبدیلها را با بررسی خطاها مدیریت کنید.
گزارش