یک برنامه C++ بنویسید که تعداد N و سپس N عدد اعشاری را از ورودی بخواند، برای هر عدد مقدار arcsin را با استفاده از std::asin از محاسبه کند، در صورت نیاز مقدار ورودی را به بازه [-1,1] ببندد و نتایج را بر حسب درجه چاپ کند.
24.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:28 0.0
برای حل این مسئله از هدر و تابع std::asin استفاده کنید؛ توجه داشته باشید که std::asin خروجی را بر حسب رادیان میدهد بنابراین باید آن را در 180/π ضرب کنید (π را میتوانید با constexpr double PI = acos(-1.0) محاسبه کنید). قبل از فراخوانی std::asin مقادیر را با std::clamp (یا با یک شرط ساده) به بازه [-1.0, 1.0] ببندید تا از تولید NaN جلوگیری شود. برای ورودیها از std::vector استفاده و برای پردازش میتوانید از حلقه ساده یا std::transform بهره ببرید؛ در صورت نیاز برای مقیاسپذیری و HPC میتوان تبدیلها را با OpenMP یا الگوریتمهای موازی دیگر موازیسازی کرد، ولی برای سطح مبتدی حلقه ساده کافی است.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکته کلیدی این است که ورودیها را قبل از محاسبه به بازه [-1,1] ببندید تا از NaN در std::asin جلوگیری شود (با std::clamp یا شرط ساده). خروجی std::asin رادیان است و برای نمایش در درجه باید نتیجه را با 180/PI ضرب کنید، که PI را میتوانید با constexpr double PI = acos(-1.0) تعریف کنید. برای خواندن N و N عدد از ورودی از std::vector استفاده کنید و میتوانید با حلقه ساده یا std::transform آن را پردازش کنید؛ چاپ با تنظیم دقت مناسب نمایش داده میشود. از منظر کارایی، همین پیادهسازی ابتدایی کافی است و در آینده میتوانید از OpenMP یا سایر روشهای موازی بهره ببرید.
گزارش