با استفاده از 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) بهره ببرید.

توسط پژوهشگر در 201 روز قبل ساعت 04:00
دسته بندی ها: C Plus Plus C Plus Plus for beginner
reyhaneh در 201 روز قبل ساعت 04:25

برای بهره‌وری بهتر، مقدار 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 تبدیل کنید و تبدیل‌ها را با بررسی خطاها مدیریت کنید.

گزارش

1 پاسخ

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

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