मैं इस फ़ंक्शन को समझने की कोशिश कर रहा हूं कि मैं डिबगिंग कर रहा हूं:
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 तक कैसे बढ़ता है और यह कैसे काम करता है।
3 जवाब
रेखा
for (; n % ++a > 0; ) ;
के बराबर है
for (; n % (a + 1) > 0; a++) ;
a++;
// n % a == 0
मापांक ऑपरेटर एक पूर्णांक विभाजन के बाद शेष देता है।
आप ऑपरेटर को x % y
के रूप में लिख सकते हैं
result = x;
while (result >= y)
{
result -= y;
}
return result;
इस मामले में 15 % 3
शून्य है।
15%3 0 के बराबर होता है और 0 से अधिक होने की स्थिति में विफल रहता है, इससे लूप समाप्त हो जाता है और a का मान 3 पर अटक जाता है।
लूप कंडीशन को दो बार एक बार 2 के लिए (एक्सप्रेशन के बाएं हाथ के साथ 1 के बराबर) और एक बार 3 के लिए (एक्सप्रेशन के बाएं हाथ के साथ 0 के बराबर) निष्पादित किया जाता है।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।