मान लीजिए एक फंक्शन है जो कुछ जटिल गणितीय संक्रियाओं की गणना करता है। लेकिन संक्रियाओं के दौरान, कुछ अपवाद उत्पन्न हो सकते हैं। हमें विभिन्न प्रकार के अपवादों को संभालना है और निम्नलिखित करना है:
- यदि कंप्यूटर गणना के लिए मेमोरी आवंटित करने में असमर्थ है, तो 'Memory Low!' प्रिंट करें
- यदि कोई अन्य C++-संबंधित अपवाद होता है, तो 'Exception:' और फिर अपवाद प्रिंट करें
- यदि कुछ और होता है, तो 'Unhandled exception' प्रिंट करें
हमें एक सरणी दी गई है जिसमें मानों के जोड़े हैं, और हम इसे फंक्शन को पास करते हैं। यदि कोई अपवाद होता है, तो हम उसे संभालते हैं, अन्यथा हम आउटपुट मान प्रिंट करते हैं।
हमें केवल अपवादों को संभालना है, उन तंत्रों की परवाह किए बिना जो अपवाद उत्पन्न करते हैं।
उदाहरण के लिए, यदि इनपुट arr = {{361643035132, 2297873642249}, {-17, 15}} है, तो आउटपुट होगा:
Memory Low! Exception: val1 is negative
पहला मान युग्म बहुत बड़ा है, इसलिए 'Memory Low!' प्रिंट होता है। दूसरे युग्म का पहला मान ऋणात्मक है। प्रदान किया गया फंक्शन इसके साथ काम नहीं कर सकता इसलिए यह 'val1 is negative' अपवाद फेंकता है।
समाधान दृष्टिकोण
इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- i := 0 से t-1 तक:
- val1 := values[i][0]
- val2 := values[i][1]
- try:
- foo(val1, val2) प्रिंट करें
- यदि bad_alloc अपवाद पकड़ा जाता है:
- "Memory Low!" प्रिंट करें
- अन्यथा यदि कोई मानक C++ अपवाद e पकड़ा जाता है:
- "Exception: " प्रिंट करें
- अपवाद का विवरण प्रिंट करें
- अन्यथा यदि कोई अन्य अपवाद पकड़ा जाता है:
- "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