क्या आपको एक अच्छा प्रोग्रामर बनने के लिए गणित जानने की आवश्यकता है?
यह निर्भर करता है!
यदि आप पूरे दिन सिर्फ CRUD ऐप्स लिखने जा रहे हैं तो आपको शायद ज्यादा गणित जानने की आवश्यकता नहीं है, यदि कोई हो।
लेकिन अगर आप अधिक दिलचस्प चीजें करना चाहते हैं, जैसे कोडिंग चैलेंज हल करना और कोडिंग इंटरव्यू के लिए तैयार रहना तो कुछ बुनियादी अवधारणाओं को सीखना मददगार है।
आज आप सीखने जा रहे हैं:
- मोड्यूलो ऑपरेटर (
%) - संख्या प्रणालियाँ
- बिटमास्किंग
आप सीखेंगे कि इन अवधारणाओं को रूबी में कैसे लागू करें, इसलिए यह एक व्यावहारिक गाइड होने जा रहा है।
चलिए करते हैं!
रूबी मोड्यूलो ऑपरेटर
रूबी मोड्यूलो ऑपरेटर इस तरह दिखता है:
%
हां, ठीक प्रतिशत सिंबल की तरह।
यह क्या करता है?
मोड्यूलो ऑपरेटर आपको एक डिवीजन का शेष देता है। इसका उपयोग चीजों के लिए किया जा सकता है जैसे जांचना कि कोई संख्या सम या विषम है।
हाँ।
रूबी में, हमारे पास even?/odd? मेथड्स हैं।
उदाहरण:
8.even? # true 5.even? # false
लेकिन अगर आप जांचना चाहते हैं कि कोई संख्या 3 से विभाज्य है या नहीं, तो आपको मोड्यूलो ऑपरेटर का उपयोग करना होगा।
उदाहरण:
9 % 3 == 0 # true
आइए अधिक उपयोग एक्सप्लोर करते हैं!
मोड्यूलो ऑपरेटर के व्यावहारिक उपयोग
आप मोड्यूलो का उपयोग यह जांचने के लिए कर सकते हैं कि कोई संख्या किसी अन्य से विभाज्य है या नहीं।
एक संख्या विभाज्य होती है यदि शेष 0 है।
उदाहरण:
क्लासिक "FizzBuzz" कोडिंग चैलेंज चाहता है कि आप पता लगाएं कि कोई संख्या 3 या 5 से विभाज्य है या नहीं।
if n % 3 == 0 puts "Fizz" end if n % 5 == 0 puts "Buzz" end
आप modulo ऑपरेटर का उपयोग हर Nवीं बार चीजें करने के लिए कर सकते हैं।
इस तरह:
(1..10).select { |n| n % 2 == 0 } # [2, 4, 6, 8, 10]
या आप step मेथड का उपयोग कर सकते हैं:
(2..10).step(2).to_a # [2, 4, 6, 8, 10]
Divmod मेथड का उपयोग करना
मोड्यूलो ऑपरेटर का एक और उपयोग मिनटों को घंटे + शेष मिनटों में बदलना है।
उदाहरण:
हमारे पास 90 मिनट हैं, जो 1 घंटे और 30 मिनट के समान है।
hours, minutes = 90.divmod(60) # [1, 30]
divmod मेथड पर ध्यान दें:
यह डिवीजन और मोड्यूलो (डिवीजन का शेष) एक ही समय में करता है।
बहुत मददगार!
संख्या प्रणालियों को समझना
संख्या प्रणाली संख्याओं को दर्शाने का एक तरीका है।
अपने दैनिक संख्याओं के उपयोग में आप दशमलव प्रणाली का उपयोग करते हैं।
0123456789
एक संख्या प्रणाली संख्याओं के एक सेट और कभी-कभी कैरेक्टर्स से भी बनी होती है।
उदाहरण के लिए:
हेक्साडेसिमल प्रणाली कुल 16 सिंबल्स का उपयोग करती है।
0123456789abcdef
यहाँ सामान्य संख्यात्मक प्रणालियों की एक टेबल है:
| नाम | सिंबल काउंट | सिंबल्स |
|---|---|---|
| हेक्साडेसिमल | 16 | 0123456789abcdef |
| दशमलव | 10 | 0123456789 |
| ऑक्टल | 8 | 01234567 |
| बाइनरी | 2 | 01 |
आप रूबी में to_s मेथड के साथ संख्या प्रणालियों के बीच कन्वर्ट कर सकते हैं।
यहाँ दशमलव (9) से बाइनरी (1001) में कन्वर्ट करने का तरीका है:
9.to_s(2) # "1001"
आप स्ट्रिंग पर to_i मेथड का उपयोग करके वापस इंटीजर में कन्वर्ट कर सकते हैं।
इसलिए यदि आप हेक्साडेसिमल (ff) से दशमलव (255) में जाना चाहते हैं तो आप यह कर सकते हैं:
"ff".to_i(16) # 255
जहां 16 संख्या के लिए "सिंबल काउंट" या बेस है।
बिटमास्किंग क्या है?
आप शायद हर दिन जागते हुए नहीं सोचते...
"अरे! मुझे बहुत सारे बूलियन मानों को जितना संभव हो उतनी कम जगह में पैक करने की आवश्यकता है।"
लेकिन अगर किसी दिन आपको ऐसा करने की आवश्यकता है...
एक बेहतरीन तकनीक जो आपकी मदद कर सकती है वह है "बिटमास्किंग"।
बिटमास्किंग के साथ, आप बहुत सारे बूलियन मानों को एक सिंगल इंटीजर मान में पैक कर सकते हैं।
यह कैसे संभव है?
उन व्यक्तिगत बिट्स का उपयोग करके जिनसे संख्या बनी होती है।
क्योंकि एक बूलियन मान को एक सिंगल बिट द्वारा दर्शाया जा सकता है, और एक इंटीजर मान में 64 बिट्स होते हैं, हम एक सिंगल संख्या में 64 बूलियन मानों तक पैक कर सकते हैं।
हम बिटवाइज ऑपरेटर्स का उपयोग करने जा रहे हैं।
यहाँ एक टेबल है:
| नाम | सिंबल | उपयोग |
|---|---|---|
| XOR (एक्सक्लूसिव OR) | ^ | टॉगल बिट |
| AND | & | चेक बिट |
| NOT | ~ | क्लियर बिट |
| OR | | | सेट बिट |
बिटवाइज ऑपरेटर्स बिट लेवल पर काम करते हैं और यही हम चाहते हैं।
यहाँ एक कोड उदाहरण है:
class Bitmask
def initialize
@value = 0
end
def set(bit)
@value |= bit
end
def clear(bit)
@value &= ~bit
end
def check(bit)
(@value & bit) == bit
end
def to_binary
@value.to_s(2)
end
end
bit = Bitmask.new
बिटमास्किंग का उपयोग कैसे करें
अब आप इस डेटा संरचना के साथ काम करने के लिए set, clear और check मेथड्स का उपयोग कर सकते हैं। आप यह वर्णन करने के लिए कॉन्स्टेंट्स भी परिभाषित करना चाह सकते हैं कि प्रत्येक मान का क्या अर्थ है।
उदाहरण:
class Bitmask ENGINES_ENABLED = 1 CAPTAIN_ABOARD = 2 SHIELDS_UP = 4 # ... rest of code here end bit = Bitmask.new bit.set(Bitmask::ENGINES_ENABLED) bit.check(Bitmask::ENGINES_ENABLED)
set के लिए वैध मानों में 1 और 2 की घातें (2,4,8,16,32...) शामिल हैं, यह अन्य बिट्स को ओवरराइट करने से बचाता है।

यदि हमारे पास 64 + 32 + 1 है, तो स्टोर्ड वैल्यू इस तरह दिखेगी:
1100001
रूबी मैथ मेथड्स
रूबी में कुछ बिल्ट-इन मैथ मेथड्स शामिल हैं जो मददगार हो सकते हैं।
हमने पहले ही divmod, even? और odd? को कवर किया है।
अन्य मेथड्स में शामिल हैं:
**/pow(एक्सपोनेंशिएशन)gcd(ग्रेटेस्ट कॉमन डिवाइजर)abs(एब्सोल्यूट वैल्यू, नेगेटिव साइन हटाता है)round(निकटतम इंटीजर तक राउंड)floorऔरceil(राउंड डाउन / राउंड अप)Math.sqrt(n)(n का वर्गमूल)Math.log2(n)(n का log2)digits(इंटीजर को रिवर्स डिजिट्स की ऐरे में कन्वर्ट करता है)
उदाहरण:
5 ** 2 # 25 -10.abs # 10 300.digits # [0, 0, 3]
रूबी में मैथ वीडियो
सारांश
आपने कुछ दिलचस्प मैथ ट्रिक्स सीखे, जैसे डिवीजन का शेष खोजने के लिए मोड्यूलो % का उपयोग करना। आप शेष का उपयोग यह जांचने के लिए कर सकते हैं कि कोई संख्या किसी अन्य से विभाज्य है या नहीं।
आपने संख्या प्रणालियों, बिटमास्किंग और बिटवाइज ऑपरेटर्स के बारे में भी सीखा।
इस पोस्ट को शेयर करना न भूलें...
और यदि आपने अभी तक नहीं किया है तो RubyGuides न्यूज़लेटर को सब्सक्राइब करें!