चयन प्रकार के लिए यह कोड काम क्यों नहीं करता?


#include<iostream>
using namespace std;


void PrintArray(int arr[], int size)
{
    for (int i = 0; i < size ; i++)
    {
        cout << arr[i] << " ";
    }
}
void selectionSort(int arr[],int n){
    for (int i = 0; i < n-1;i++){
        for (int j = i+1; i < n;j++){
            if(arr[i]>arr[j]){
                swap(arr[i], arr[j]);
            }
        }
    }
}
int main(){
    int arr[7] = {1,8,3,6,7,6,4};
    selectionSort(arr, 7);
    PrintArray(arr, 7);
    return 0;
}

मैंने क्या प्रयास किया है:

मैंने चयन सॉर्ट के लिए एक कोड लिखा है, लेकिन यह आवश्यक आउटपुट प्रदान नहीं करता है।

समाधान 1

संकलन का मतलब यह नहीं है कि आपका कोड सही है! :हँसना:
विकास प्रक्रिया को एक ईमेल लिखने के रूप में सोचें: सफलतापूर्वक संकलित करने का मतलब है कि आपने ईमेल को सही भाषा में लिखा है – उदाहरण के लिए जर्मन के बजाय अंग्रेजी – न कि ईमेल में वह संदेश है जो आप भेजना चाहते थे।

तो अब आप विकास के दूसरे चरण में प्रवेश करते हैं (वास्तव में यह चौथा या पांचवां है, लेकिन आप बाद में पहले चरण में आएंगे): परीक्षण और डिबगिंग।

यह देखकर प्रारंभ करें कि यह क्या करता है, और यह जो आप चाहते थे उससे किस प्रकार भिन्न है। यह महत्वपूर्ण है, क्योंकि यह आपको जानकारी देता है कि वह ऐसा क्यों कर रहा है। उदाहरण के लिए, यदि किसी प्रोग्राम का उद्देश्य उपयोगकर्ता को एक संख्या दर्ज करने देना है और वह उसे दोगुना कर उत्तर प्रिंट करता है, तो यदि इनपुट/आउटपुट इस प्रकार था:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16

फिर यह बिल्कुल स्पष्ट है कि समस्या उस बिट के साथ है जो इसे दोगुना करता है – यह स्वयं को स्वयं में नहीं जोड़ रहा है, या इसे 2 से गुणा नहीं कर रहा है, यह इसे स्वयं से गुणा कर रहा है और इनपुट का वर्ग वापस कर रहा है।
तो इसके साथ, आप कोड को देख सकते हैं और यह स्पष्ट है कि यह यहीं कहीं है:

सी#
private int Double(int value)
   {
   return value * value;
   }

एक बार जब आपको अंदाजा हो जाए कि क्या गलत हो रहा है, तो इसका कारण जानने के लिए डिबगर का उपयोग करना शुरू करें। विधि की पहली पंक्ति पर एक ब्रेकप्वाइंट लगाएं, और अपना ऐप चलाएं। जब यह ब्रेकप्वाइंट पर पहुंच जाएगा, तो डिबगर रुक जाएगा, और नियंत्रण आपको सौंप देगा। अब आप अपना कोड लाइन-दर-लाइन चला सकते हैं (जिसे “सिंगल स्टेपिंग” कहा जाता है) और आवश्यकतानुसार वैरिएबल सामग्री को देख सकते हैं (या बदल भी सकते हैं) (हेक, आप कोड को बदल भी सकते हैं और यदि आवश्यक हो तो पुनः प्रयास कर सकते हैं)।
इस बारे में सोचें कि कोड को निष्पादित करने से पहले प्रत्येक पंक्ति को क्या करना चाहिए, और इसकी तुलना तब करें जब आप प्रत्येक पंक्ति को बारी-बारी से निष्पादित करने के लिए “स्टेप ओवर” बटन का उपयोग करते हैं। क्या इसने वही किया जो आप अपेक्षा करते थे? यदि हां, तो अगली पंक्ति पर आगे बढ़ें।
यदि नहीं, तो क्यों नहीं? यह किस प्रकार भिन्न है?
उम्मीद है, इससे आपको यह पता लगाने में मदद मिलेगी कि उस कोड के किस हिस्से में समस्या है और समस्या क्या है।

मैं आपको एक संकेत दूंगा: अपने सरणी सूचकांक मानों पर बारीकी से विचार रखें… याद रखें कि एन तत्वों की एक सरणी के लिए सूचकांक 0 से (एन – 1) तक चलते हैं। तो 3 तत्वों की एक सरणी में केवल वैध सूचकांक 0, 1 और 2 होंगे।

यह एक कौशल है, और यह विकसित करने लायक है क्योंकि यह आपको वास्तविक दुनिया के साथ-साथ विकास में भी मदद करता है। और सभी कौशलों की तरह, इसमें केवल उपयोग से ही सुधार होता है!

コメント

タイトルとURLをコピーしました