با استفاده از std::atoi از یک برنامهٔ C++ بنویسید که دو عدد صحیح a و b و یک عدد n را از آرگومان‌های خط فرمان بخواند و انتگرال تابع sin(x) را روی بازهٔ [a, b] با قاعدهٔ ذوزنقه و n قسمت محاسبه و مقدار تقریبی را چاپ کند.

16.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 00:27

0.0

برای حل، فایل C++ را با هدرهای , , (و در صورت نیاز ) بنویسید؛ ابتدا argc را بررسی کنید تا سه پارامتر خوانده شوند، سپس با std::atoi پارامترها را به int تبدیل کنید و مقادیر a و b را به double تبدیل نمایید. قدم بعدی محاسبهٔ طول هر بخش h = (b-a)/double(n) و جمع‌بندی مقادیر sin در گره‌ها طبق فرمول ذوزنقه (sum = 0.5*sin(a) + 0.5*sin(b) + جمع سین‌های نقاط میانی) و ضرب در h است. نکته‌ها: n باید بزرگ‌تر از صفر باشد، تبدیل‌های نوع را درست انجام دهید و برای بازده بالاتر در مسئله‌های بزرگ می‌توانید حلقهٔ جمع‌بندی را با OpenMP یا بهینه‌سازی کامپایلر موازی کنید.

توسط پژوهشگر در 198 روز قبل ساعت 00:27
دسته بندی ها: C Plus Plus C Plus Plus for beginner
nima در 198 روز قبل ساعت 00:28

توجه کنید که std::atoi در صورت ورودی نامعتبر خطا را گزارش نمی‌کند و مقدار صفر برمی‌گرداند، بنابراین برای استحکام بیشتر بهتر است از std::strtol یا std::stoi استفاده کرده یا ورودی‌ها را دستی بررسی کنید. حتما n را بزرگ‌تر از صفر بررسی کنید و هنگام محاسبه h = (b-a)/double(n) از تبدیل به double استفاده کنید تا تقسیم صحیح پیش نیاید. از <cmath> برای sin و از نوع double برای جمع و ضرب نهایی استفاده کنید تا دقت حفظ شود و برای حجم بزرگ محاسبات می‌توانید حلقهٔ جمع‌بندی را با OpenMP یا الگوریتم‌های موازی بهینه‌سازی کنید.

گزارش

1 پاسخ

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

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