ধরা যাক একটি ফাংশন আছে যা জটিল গাণিতিক অপারেশন করে। অপারেশন করার সময় বিভিন্ন ধরনের এক্সেপশন ঘটতে পারে। আমাদের বিভিন্ন ধরনের এক্সেপশন হ্যান্ডেল করতে হবে:
- যদি মেমরি অ্যালোকেট করা না যায় (bad_alloc), তবে "Memory Low!" প্রিন্ট করুন
- যদি অন্য কোনো স্ট্যান্ডার্ড C++ এক্সেপশন হয়, তবে "Exception: " এবং এক্সেপশনের বিবরণ প্রিন্ট করুন
- অন্য যেকোনো এক্সেপশন হলে "Unhandled Exception" প্রিন্ট করুন
আমাদের একটি অ্যারে দেওয়া আছে যাতে ভ্যালুর জোড়া রয়েছে। প্রতিটি জোড়া ফাংশনে পাস করতে হবে। এক্সেপশন হ্যান্ডেল করুন বা রেজাল্ট প্রিন্ট করুন।
উদাহরণস্বরূপ, arr = {{361643035132, 2297873642249}, {-17, 15}} হলে আউটপুট হবে:
Memory Low! Exception: val1 is negative
প্রথম জোড়াটি খুব বড় হলে মেমরি লো হয়। দ্বিতীয় জোড়ার প্রথম মান নেগেটিভ, তাই ফাংশন "val1 is negative" এক্সেপশন থ্রো করে।
সমাধানের ধাপসমূহ
- প্রতিটি টেস্ট কেসের জন্য:
- val1 := values[i][0], val2 := values[i][1]
- try ব্লকে foo(val1, val2) কল করুন
- catch (bad_alloc) -> "Memory Low!" প্রিন্ট করুন
- catch (exception &e) -> "Exception: " এবং e.what() প্রিন্ট করুন
- catch (...) -> "Unhandled Exception" প্রিন্ট করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
#include <iostream> #include <exception> #include <string> #include <stdexcept> #include <vector> #include <cmath> using namespace std; class Solution { private: static int value; public: static int foo(long long val1, long long val2) { value += 1; if(val1 < 0) { throw std::invalid_argument("val1 is negative"); } vector<int> vectorList(val1, 0); int r = -1, c = sqrt(-1); if(val2 == 0) throw 0; r = (val1 / val2) * r; int ans = vectorList.at(val2); return r + val1 - val2 * ans; } static int getVal() { return value; } }; int Solution::value = 0; void solve(int t, long int values[][2]) { for (int i = 0; i < t; i++) { long long val1, val2; val1 = values[i][0]; val2 = values[i][1]; try { cout << Solution::foo(val1, val2) << '\n'; } catch (const std::bad_alloc&) { cout << "Memory Low!\n"; } catch (const std::exception& e) { cout << "Exception: " << e.what() << '\n'; } catch (...) { cout << "Unhandled Exception\n"; } } } int main() { long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}}; solve(2, arr); }ইনপুট
long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}}; solve(2, arr);আউটপুট
Memory Low! Exception: val1 is negative