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

توسط پژوهشگر در 201 روز قبل ساعت 03:28
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 201 روز قبل ساعت 06:19

نکته کلیدی این است که ورودی‌ها را قبل از محاسبه به بازه [-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 یا سایر روش‌های موازی بهره ببرید.

گزارش

1 پاسخ

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

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