मैं इस फ़ंक्शन को समझने की कोशिश कर रहा हूं कि मैं डिबगिंग कर रहा हूं:

static int a = 1;

static int[] functionModulus(int n)
{
    for (; n % ++a > 0; ) ;
    return new[] {n = n/a + a >> 1, n - a};
}

मूल रूप से यह फ़ंक्शन एक इनपुट प्राप्त करने की गणना है, और दो तत्वों के साथ एक सरणी लौटाएगा जैसे कि एक ^ 2 - बी ^ 2 = एन (इनपुट एन)। तो n = 15 का एक इनपुट, 4^2 - 1^2 = 15 के बाद से 4 और 1 लौटाएगा।

गणनाओं पर ध्यान न दें, मुझे आश्चर्य है कि यह सटीक रेखा कैसे काम करती है:

for (; n % ++a > 0; ) ;

डिबगिंग करते समय, शुरुआत में a का मान 1 है, और मेरा इनपुट n = 15 है।

फंक्शन के बाहर कौन सा a इनिशियलाइज़ 1 था, और 15 n का मेरा इनपुट है। लूप के लिए बाहर निकलने के बाद मैं हैरान हूं, a का मान 3 हो जाता है? यह 3 कैसे बनता है? 3 का 15 मॉड शून्य से बड़ा नहीं है? मैंने n को 21 में बदलने की कोशिश की, और लूप के लिए बाहर निकलने के बाद भी 3 हो गया? मैं वास्तव में यह नहीं समझ सकता कि यह 3 तक कैसे बढ़ता है और यह कैसे काम करता है।

0
Willy David Jr 12 जुलाई 2017, 05:28

3 जवाब

रेखा

for (; n % ++a > 0; ) ;

के बराबर है

for (; n % (a + 1) > 0; a++) ;

a++;

// n % a == 0
1
Mateen Ulhaq 12 जुलाई 2017, 05:39

मापांक ऑपरेटर एक पूर्णांक विभाजन के बाद शेष देता है।

आप ऑपरेटर को x % y के रूप में लिख सकते हैं

result = x;
while (result >= y)
{
    result -= y;
}
return result;

इस मामले में 15 % 3 शून्य है।

1
Kirk Broadhurst 12 जुलाई 2017, 05:50

15%3 0 के बराबर होता है और 0 से अधिक होने की स्थिति में विफल रहता है, इससे लूप समाप्त हो जाता है और a का मान 3 पर अटक जाता है।

लूप कंडीशन को दो बार एक बार 2 के लिए (एक्सप्रेशन के बाएं हाथ के साथ 1 के बराबर) और एक बार 3 के लिए (एक्सप्रेशन के बाएं हाथ के साथ 0 के बराबर) निष्पादित किया जाता है।

1
George Abraham 12 जुलाई 2017, 05:53