व्यायाम - तरीकों से सरणियों को लौटाएं
एप्लिकेशन विकसित करते समय, आपको अक्सर डेटा के सेट बनाने और संशोधित करने की आवश्यकता होगी। डेटा पर संचालन करने के लिए विधियाँ उपयोगी होती हैं, और वे डेटा सेट स्वयं बनाने के लिए विशेष रूप से शक्तिशाली उपकरण हैं। अपने डेटा सेट का प्रतिनिधित्व करने वाली सरणियाँ बनाने की विधियाँ विकसित करने से आपके कोड को पुनः प्रयोज्य, व्यवस्थित और सरलीकृत रखने में मदद मिलती है. इस अभ्यास में, आप विधियों से सरणियों को वापस करने का अभ्यास करेंगे।
परिवर्तन करने के लिए सिक्के खोजें
मान लीजिए कि आपके पास विभिन्न मूल्यों के कई सिक्के हैं। आपको दो सिक्के खोजने का काम सौंपा गया है जिनका योग लक्ष्य मूल्य के बराबर है। इस अभ्यास में, उपलब्ध सिक्कों को एक पूर्णांक सरणी में दर्शाया जाता है। आपको दो सिक्कों के सूचकांकों को एक नई सरणी में वापस करना होगा। आएँ शुरू करें!
Visual Studio कोड संपादक में, पिछले अभ्यासों से किसी भी मौजूदा कोड हटाएँ।
Visual Studio कोड संपादक में निम्न कोड दर्ज करें:
int[] TwoCoins(int[] coins, int target) { return new int[0]; }ऐसे मामले में जहां कोई दो सिक्के नहीं मिलते हैं, आपकी विधि एक खाली सरणी लौटाती है। लौटाए गए परिणाम के सिंटैक्स पर विचार करने के लिए कुछ समय निकालें। जब आप एक नई
int[]सरणी को संग्रहीत करने और चर वापस करने के लिए एक चर बना सकते हैं,returnतो कथन आपको एक साथ मान बनाने और वापस करने की अनुमति देता है।इस समस्या को हल करने के लिए कई दृष्टिकोण हैं। इस बात पर विचार करने के लिए कुछ समय निकालें कि आप किसी सरणी में दो संख्याओं की खोज कैसे कर सकते हैं जिनका योग किसी दिए गए मान के बराबर है।
इस अभ्यास में, निम्नलिखित दृष्टिकोण का उपयोग किया जाएगा:
- सरणी से एक संख्या चुनें
- यह देखने के लिए कि क्या वे लक्ष्य मान में जुड़ते हैं, एक-एक करके अन्य संख्याओं की जाँच करें
- मैच मिलते ही रिजल्ट लौटाएं
सरणी में प्रत्येक संख्या की जाँच करने के लिए, निम्न कोड के
TwoCoinsसाथ विधि को अद्यतन करें:int[] TwoCoins(int[] coins, int target) { for (int curr = 0; curr < coins.Length; curr++) { for (int next = curr + 1; next < coins.Length; next++) { } } return new int[0]; }यहां,
currएक निश्चित सिक्का सूचकांक का प्रतिनिधित्व करता है औरnextबाद के सिक्का सूचकांकों का प्रतिनिधित्व करता है। आप प्रत्येकnextसिक्के को निश्चितcurrसिक्के के साथ जोड़ने का प्रयास करेंगे यह देखने के लिए कि क्या वे लक्ष्य मूल्य के बराबर हैं।इसके बाद, लक्ष्य मूल्य के लिए दो सिक्कों के योग की जांच करने के लिए तर्क जोड़ें। ऐसा करने के लिए, निम्न कोड के साथ पिछले
forछोरों को अद्यतन करें:for (int curr = 0; curr < coins.Length; curr++) { for (int next = curr + 1; next < coins.Length; next++) { if (coins[curr] + coins[next] == target) { return new int[]{curr, next}; } } }इस कोड में, आप जांच रहे हैं कि सरणी में
currnextऔर सरणी में मानों का योग लक्ष्य मान के बराबर है या नहीं। यदि योग बराबर है, तो आप उन सूचकांकों को संग्रहीत करने और इसे वापस करने के लिए एक सरणी बनाते हैं। यदि वे समान नहीं हैं, तो आप उन्हें अनदेखा कर सकते हैं और जाँच कर सकते हैं।
अपने समाधान का परीक्षण करें
इस चरण में, आप यह सुनिश्चित करने के लिए अपने कोड का परीक्षण करेंगे कि यह ठीक से चल रहा है। पहले आप इनपुट डेटा को स्टोर करने के लिए कुछ वेरिएबल्स को इनिशियलाइज़ करेंगे, फिर आप मेथड को कॉल करेंगे और परिणाम प्रिंट करेंगे।
विधि हस्ताक्षर के ऊपर
TwoCoinsएक नई रिक्त कोड पंक्ति बनाएँ। फिर निम्न कोड दर्ज करें:int target = 60; int[] coins = new int[] {5, 5, 50, 25, 25, 10, 5}; int[] result = TwoCoins(coins, target);याद रखें कि
TwoCoinsयदि कोई परिवर्तन नहीं मिलता है तो विधि एक खाली सरणी लौटाती है। सरणी को प्रिंटresultकरने का प्रयास करने से पहले आपको सरणी आकार की जांच करनी होगी।एक नई रिक्त कोड पंक्ति दर्ज करें। फिर निम्न कोड दर्ज करें:
if (result.Length == 0) { Console.WriteLine("No two coins make change"); } else { Console.WriteLine($"Change found at positions {result[0]} and {result[1]}"); }यदि आवश्यक हो, तो Visual Studio Code का एकीकृत टर्मिनल पैनल खोलें।
टर्मिनल कमांड प्रॉम्प्ट पर, dotnet run दर्ज करें। निम्नलिखित के साथ अपने आउटपुट की तुलना करें:
Change found at positions 2 and 5अगर आपका कोड अनपेक्षित परिणाम दिखाता है, तो आपको अपनी गड़बड़ी ढूंढने और अपडेट करने के लिए अपने कोड की समीक्षा करनी होगी. यह देखने के लिए कोड फिर से चलाएं कि क्या आपने समस्या ठीक कर दी है। अपना कोड अपडेट करना और चलाना तब तक जारी रखें जब तक कि आपका कोड अपेक्षित परिणाम न दे।
परिवर्तन करने वाले सिक्कों के कई जोड़े खोजें
इस चरण में, आप सिक्कों के अधिक जोड़े खोजने के लिए विधि का विस्तार TwoCoins करेंगे जिनका योग लक्ष्य मूल्य के बराबर है। इस अभ्यास के लिए, आपको अधिकतम पांच जोड़े मिलेंगे। इसका मतलब है कि रिटर्न प्रकार 1 डी सरणी के बजाय 2 डी सरणी होगा, और आपको अपने कोड के परिणाम देने के तरीके को संशोधित करने की आवश्यकता होगी। आएँ शुरू करें!
विधि हस्ताक्षर में वापसी प्रकार को परिवर्तित करने के
int[]लिएint[,]से अपने कोड को निम्न में अद्यतन करके:int[,] TwoCoins(int[] coins, int target)इसके बाद, आप अपने परिणामों को संग्रहीत करने और वापस करने के लिए एक
int[,]सरणी बनाएंगे, और सरणी में जोड़े गए जोड़े की संख्या का ट्रैक रखने के लिए एक काउंटर चर बनाएंगे।TwoCoinsविधि को निम्न कोड से अद्यतन करें:int[,] TwoCoins(int[] coins, int target) { int[,] result = {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}}; int count = 0;ध्यान दें कि आपने परिणाम सरणी तत्वों को
-1. यह आपको बाद में मदद करेगा जब आप पाए गए जोड़े को प्रिंट करना चाहते हैं।इसके बाद, आप पहले मैच को वापस करने के
resultबजाय प्रत्येक पाए गए जोड़े को स्टोर करने के लिए सरणी का उपयोग करेंगे।TwoCoinsविधि को निम्न कोड से अद्यतन करें:int[,] TwoCoins(int[] coins, int target) { int[,] result = {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}}; int count = 0; for (int curr = 0; curr < coins.Length; curr++) { for (int next = curr + 1; next < coins.Length; next++) { if (coins[curr] + coins[next] == target) { result[count, 0] = curr; result[count, 1] = next; count++; } } }ध्यान दें कि
countहर बार एक जोड़ी सरणी में जोड़ी जाने पर बढ़ जाती है। यह एक इंडेक्स आउट ऑफ बाउंड्स त्रुटि का कारण बन सकता है यदि पाँच से अधिक जोड़े पाए जाते हैं। इस त्रुटि को रोकने के लिए, आप मान की जांच करने केcountलिए कोड जोड़ सकते हैं और सरणी काresultपरिणाम भर सकता है।विधि में
TwoCoinsतर्क को निम्न कोड के साथ अद्यतन करें:for (int next = curr + 1; next < coins.Length; next++) { if (coins[curr] + coins[next] == target) { result[count, 0] = curr; result[count, 1] = next; count++; } if (count == result.GetLength(0)) { return result; } }अंत में, आपको सही परिणाम वापस करने के लिए अंतिम रिटर्न स्टेटमेंट को अपडेट करना होगा यदि कोई मिलान नहीं मिलता है, या यदि पांच से कम मैच पाए गए हैं।
विधि में
returnकथन परTwoCoinsनेविगेट करें। निम्न कोड से मेल खाने केreturnलिए कथन को संशोधित करें:if (count == 0) { return new int[0,0]; } return result;आप टर्नरी ऑपरेटर का उपयोग करके इस रिटर्न कोड को छोटा भी कर सकते हैं:
return (count == 0) ? new int[0,0] : result;महत्वपूर्ण
कीवर्ड का
returnलचीलापन आपको एक अभिव्यक्ति के मूल्य को वापस करने की अनुमति देता है, जब तक कि परिणाम विधि के निर्दिष्ट रिटर्न प्रकार से मेल खाता है।इस बिंदु पर,
TwoCoinsविधि निम्न कोड से मेल खाना चाहिए:int[,] TwoCoins(int[] coins, int target) { int[,] result = {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}}; int count = 0; for (int curr = 0; curr < coins.Length; curr++) { for (int next = curr + 1; next < coins.Length; next++) { if (coins[curr] + coins[next] == target) { result[count, 0] = curr; result[count, 1] = next; count++; } if (count == result.GetLength(0)) { return result; } } } return (count == 0) ? new int[0,0] : result; }
नई वापसी सरणी कैप्चर करें
अब जब आपकी विधि 2D सरणी लौटा रही है, तो आप परिणामों को पुनः प्राप्त करने और प्रिंट करने के लिए अपना कोड अपडेट कर सकते हैं। चूंकि परिणाम सरणी तत्वों को इनिशियलाइज़ किया -1गया था, इसलिए आप मान मिलने तक सभी जोड़े प्रिंट करने के -1 लिए एक चेक जोड़ सकते हैं।
अपने प्रोग्राम की शुरुआत में नेविगेट करें जहां
targetचर परिभाषित किया गया है। अपने कोड को निम्नानुसार संशोधित करें:int target = 30; int[] coins = new int[] {5, 5, 50, 25, 25, 10, 5}; int[,] result = TwoCoins(coins, target);इसके बाद, आप मानों को सही ढंग से प्रिंट
Console.WriteLineकरने के लिएresultकॉल को अपडेट करेंगे।कॉल पर
Console.WriteLineनेविगेट करें। निम्न से मेल खाने के लिए अपना कोड अद्यतित करें:if (result.Length == 0) { Console.WriteLine("No two coins make change"); } else { Console.WriteLine("Change found at positions:"); for (int i = 0; i < result.GetLength(0); i++) { if (result[i,0] == -1) { break; } Console.WriteLine($"{result[i,0]},{result[i,1]}"); } }यहां, आप एक खाली सरणी as-isके लिए चेक रखते हैं, और 2 डी सरणी के मूल्यों को फॉर-लूप में प्रिंट करते हैं। जब कोई
-1मान मिलता है, तो आप लूप से बाहर निकलते हैं क्योंकि कोई अगला जोड़ा नहीं होता है।
अपने काम की जाँच करें
इस कार्य में, आप एकीकृत टर्मिनल से अपना एप्लिकेशन चलाएंगे और सत्यापित करेंगे कि आपका कोड ठीक से काम कर रहा है। आएँ शुरू करें।
यह सुनिश्चित करने के लिए अपने कोड की तुलना निम्नलिखित के साथ करें:
int target = 30; int[] coins = new int[] {5, 5, 50, 25, 25, 10, 5}; int[,] result = TwoCoins(coins, target); if (result.Length == 0) { Console.WriteLine("No two coins make change"); } else { Console.WriteLine("Change found at positions:"); for (int i = 0; i < result.GetLength(0); i++) { if (result[i,0] == -1) { break; } Console.WriteLine($"{result[i,0]},{result[i,1]}"); } } int[,] TwoCoins(int[] coins, int target) { int[,] result = {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}}; int count = 0; for (int curr = 0; curr < coins.Length; curr++) { for (int next = curr + 1; next < coins.Length; next++) { if (coins[curr] + coins[next] == target) { result[count, 0] = curr; result[count, 1] = next; count++; } if (count == result.GetLength(0)) { return result; } } } return (count == 0) ? new int[0,0] : result; }Ctrl + का उपयोग करके या Visual Studio Code फ़ाइल मेनू का उपयोग करके अपना कार्य सहेजें.
यदि आवश्यक हो, तो Visual Studio Code का एकीकृत टर्मिनल पैनल खोलें।
EXPLORER पैनल में, अपने TestProject फ़ोल्डर स्थान पर कोई टर्मिनल खोलने के लिए, TestProject राइट-क्लिक करें, और उसके बाद एकीकृत टर्मिनल में खोलेंका चयन करें।
टर्मिनल कमांड प्रॉम्प्ट पर, dotnet run दर्ज करें
सत्यापित करें कि आपका कोड निम्न आउटपुट उत्पन्न करता है:
Change found at positions: 0,3 0,4 1,3 1,4 3,6अगर आपका कोड अलग-अलग नतीजे दिखाता है, तो आपको अपनी गड़बड़ी ढूंढने और अपडेट करने के लिए अपने कोड की समीक्षा करनी होगी. यह देखने के लिए कोड फिर से चलाएं कि क्या आपने समस्या ठीक कर दी है। अपना कोड अपडेट करना और चलाना तब तक जारी रखें जब तक कि आपका कोड अपेक्षित परिणाम न दे।
इसके बाद, के मान
targetको निम्न मान80में अद्यतन करें:int target = 80;अपना काम सहेजें फिर टर्मिनल कमांड प्रॉम्प्ट पर डॉटनेट रन दर्ज करें
सत्यापित करें कि आपका कोड अपेक्षा के अनुरूप काम कर रहा है करने के लिए, निम्न आउटपुट के साथ अपने अनुप्रयोग के आउटपुट की तुलना करें:
No two coins make changeअगर आपका कोड अलग-अलग नतीजे दिखाता है, तो आपको अपनी गड़बड़ी ढूंढने और अपडेट करने के लिए अपने कोड की समीक्षा करनी होगी. यह देखने के लिए कोड फिर से चलाएं कि क्या आपने समस्या ठीक कर दी है। अपना कोड अपडेट करना और चलाना तब तक जारी रखें जब तक कि आपका कोड अपेक्षित परिणाम न दे।