برنامهای به زبان C++ بنویسید که مقدار اعشاری دریافتی از یک سنسور را با استفاده از مقادیر موجود در بررسی کند و اگر مقدار NaN یا بینهایت بود یا از بازه допустلو (-FLT_MAX, FLT_MAX) خارج بود یک استثنا پرتاب کند و در بخش catch استثنا را مدیریت و یا مقدار را به بازه مجاز کلَمپ کند و نتیجه معتبر را چاپ نماید.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:17 0.0
برای حل این مسئله از هدرهای برای دسترسی به FLT_MAX و -FLT_MAX و از برای توابع std::isnan و std::isinf استفاده کنید؛ مقدار را در متغیر float بخوانید، ابتدا isnan/isinf را چک کنید و سپس با مقایسه با FLT_MAX و -FLT_MAX تصمیم به پرتاب std::runtime_error یا یک استثنای سفارشی بگیرید. در بلوک catch پیام خطا را چاپ کنید یا مقدار را با شرط ساده به [-FLT_MAX, FLT_MAX] کلَمپ کنید و مقدار نهایی را نمایش دهید. نکات: برای سیستمهای تعبیهشده در عمل بهتر است به جای استفاده سنگین از استثناها از کدهای خطا یا فرآیندهای بازگردانی استفاده کنید، اما برای تمرین مبتدی از throw/catch و هدرهای ذکرشده استفاده کنید؛ از float برای مصرف حافظه کمتر و مقایسههای ساده برای کلَمپ بهره ببرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای مطمئن شدن از مقدار ورودی از سنسور، ابتدا با std::isnan و std::isinf مقدار را بررسی کنید و بر پایه بازه FLT_MAX و -FLT_MAX تصمیم به پرتاب استثناء بگیرید. در بلوک catch میتوانید، یا پیام خطا چاپ شود یا مقدار را با کلَمپ ساده به بازه مجاز برگردانید و نمایش دهید. برای خوانایی بهتر کد، تعریف یک استثناء سفارشی میتواند مفید باشد تا نوع خطا روشن باشد. در محیطهای تعبیهشده بهجای استثناها، معمولاً استفاده از کدهای خطا یا بازگردانی مقدار مناسب است، هرچند برای تمرین ابتدایی این ساختار مفید است.
گزارش