तीसरे चर का उपयोग किए बिना दो संख्याओं को बदलें: C, Python कार्यक्रम

प्रोग्रामिंग में, भाषा स्वैपिंग का मतलब दो चरों के मानों को स्वैप करना है। चर में कोई संख्या, स्ट्रिंग, सूची या सरणी, ऑब्जेक्ट आदि हो सकते हैं। स्वैपिंग का सामान्य तरीका मानों को रखने के लिए एक अस्थायी चर का उपयोग करना है। उदाहरण के लिए,

स्वैप दो Numbers

दो संख्याओं की अदला-बदली के सामान्य चरण इस प्रकार हैं:

  • एक अस्थायी चर C घोषित किया गया
  • A का मान C पर निर्धारित करें, अर्थात C = A. अब C = 20
  • B का मान A पर रखें, अतः A = 30
  • C का मान B पर निर्धारित करें, अतः B = 20, क्योंकि C का मान 20 है।

यह एक अस्थायी चर की मदद से स्वैपिंग करने का तरीका है। यह विधि पूर्णांक संख्याओं और फ़्लोट संख्याओं दोनों के लिए काम करेगी।

अंकगणितीय समीकरण का उपयोग करके स्वैप करें

जैसा कि हम जानते हैं, स्वैपिंग का मतलब है दो ऑब्जेक्ट या फ़ील्ड या वेरिएबल की सामग्री को आपस में बदलना। अंकगणितीय ऑपरेशन का उपयोग करके स्वैप करने का मतलब है गणितीय समीकरण, यानी जोड़ और घटाव का उपयोग करके स्वैप ऑपरेशन करना।

यदि हमें दो संख्याएं दी गई हों और बिना किसी अस्थायी चर का उपयोग किए उन्हें बदलने के लिए कहा जाए, तो तीन अंकगणितीय समीकरणों का उपयोग करके हम संख्याओं को बदल सकते हैं।

अंकगणितीय ऑपरेशन का उपयोग करके संख्याओं की अदला-बदली के लिए छद्म कोड:

A = A + B
B = A - B
A = A - B

मान लीजिए हमारे पास दो संख्याएँ हैं, A = 20 और B = 30.

शर्त 1:    ए = ए+बी

                  अतः A का वर्तमान मान 20+30 = 50 है

शर्त 2:    बी = एबी

                   अब, B = 50-30 = 20
                   हम देख सकते हैं कि हमें A का मान B में मिल गया है

शर्त 3:    ए = एबी

                   अंततः, A = 50-20 = 30
                   A का प्रारंभिक मान B है।

तो, हमने बस नंबरों की अदला-बदली कर दी।

यहाँ C/ में दो संख्याओं को बदलने का प्रोग्राम दिया गया हैC++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = a + b;
	b = a - b;
	a = a - b;
	printf("\nNow, A = %d, B = %d", a, b);
}

आउटपुट:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

कार्यक्रम में Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = a + b
b = a - b
a = a - b
print("Now, A = {} and B = {}".format(a, b))

आउटपुट:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

अभी इसमें Python, हमें अंकगणितीय ऑपरेशन करने की भी ज़रूरत नहीं है। हम इसका उपयोग कर सकते हैं:

ए,बी = बी,ए

यहाँ एक प्रदर्शन है जहाँ a=20, b=30;

अंकगणितीय समीकरण का उपयोग करके स्वैप करें

बिटवाइज़ XOR का उपयोग करके स्वैप करें Operaटो

इस विधि को XOR स्वैप के नाम से भी जाना जाता है। XOR का मतलब एक्सक्लूसिव OR है। इस बिटवाइज़ ऑपरेशन में हम XOR में इनपुट के तौर पर दो बिट लेते हैं। XOR से एक आउटपुट पाने के लिए, सिर्फ़ एक इनपुट 1 होना चाहिए। अन्यथा, आउटपुट 0 होगा। निम्न तालिका इनपुट A B के सभी संयोजनों के लिए आउटपुट दिखाती है।

हमें यह जानने की ज़रूरत है कि बिटवाइज़ ऑपरेशन का उपयोग करके दो नंबरों को स्वैप करने के लिए XOR ऑपरेशन कैसे काम करता है। यहाँ XOR के लिए एक तालिका दी गई है जहाँ A और B इनपुट मान हैं।

A B ए एक्सओआर बी
0 0 0
0 1 1
1 0 1
1 1 0

यदि दो इनपुट का मान समान है, तो XOR ऑपरेशन 0 देता है; अन्यथा, 1. इस उदाहरण के लिए, हम 3 XOR ऑपरेशन का उपयोग करेंगे। अधिकांश प्रोग्रामिंग भाषाओं में, XOR को “^” के रूप में दर्शाया जाता है।

मान लें A=4 (बाइनरी में = 0100) और B=7 (बाइनरी में, 0111)

शर्त 1:    ए = ए ^ बी

A 0 1 0 0
B 0 1 1 1
ए ^ बी 0 0 1 1

अब, A = 0011 (बाइनरी में).

शर्त 2:    बी = ए^बी

A 0 0 1 1
B 0 1 1 1
ए ^ बी 0 1 0 0

अतः B = 0100, जो A का प्रारंभिक बाइनरी मान था।

शर्त 3:    ए = ए^बी

A 0 0 1 1
B 0 1 0 0
ए ^ बी 0 1 1 1

अंततः, A = 0111, जो कि B का समतुल्य बाइनरी मान था।

सी/ में कार्यक्रमC++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("\nNow, A = %d, B = %d", a, b);
}

आउटपुट:

Enter value of A:4
Enter value of B:7
A=4, B=7
Now, A=7, B=4.

कार्यक्रम में Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = a ^ b
b = a ^ b
a = a ^ b
print("Now, A = {} and B = {}".format(a, b))

आउटपुट:

Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.

विनिमय Numbers बिटवाइज़-अरिथमेटिक का उपयोग करना

यह विधि अंकगणित विधि के समान ही है, लेकिन हम जोड़ और घटाव करने के लिए AND, OR और Compliment जैसे बिटवाइज़ ऑपरेशन का उपयोग करेंगे। चरणों पर जाने से पहले, आइए जल्दी से "Compliment" पर नज़र डालें।

1 के पूरक का अर्थ है सभी 0 को 1 में तथा 1 को 0 में बदलना। आइये एक उदाहरण लेते हैं।

  • मान लीजिए संख्या 23 एक दशमलव संख्या है।
  • बाइनरी में बदलने पर हमें 10111 मिलता है। इसमें केवल 5 बिट्स होते हैं, लेकिन कंप्यूटर 8,16,32,64.. बिट्स में नंबर स्टोर करता है। तो चलिए बाइनरी के आगे शून्य जोड़ देते हैं। इससे नंबर का मूल मान नहीं बदलेगा। तो यह बन जाएगा 00010111.
  • जैसा कि हम जानते हैं, 1 के पूरक का अर्थ है सभी 0 को 1 में तथा 1 को 0 में बदलना, इसलिए 1 के पूरक का प्रदर्शन करना 00010111 देता है 11101000

इस 1 के पूरक को अधिकांश प्रोग्रामिंग भाषाओं में “~” प्रतीक द्वारा दर्शाया जाता है। इस प्रतीक को किसी भी पूर्णांक मान या फ़्लोटिंग-पॉइंट मान से पहले रखने पर 1 का पूरक प्राप्त होगा।

और 2 के पूरक का मतलब है 1 के पूरक में बाइनरी “1” जोड़ना। अगर हम ऊपर दी गई संख्या में 2 का पूरक करते हैं:

  • बाइनरी = 00010111
  • 1 का पूरक = 11101000
  • 2 की प्रशंसा:

          11101000

          + 1

          11101001

तो, 2 का पूरक 11101001 है। यह -23 के लिए बाइनरी है।
संक्षेप में, किसी संख्या A का 2 का पूरक बनाने के लिए यह इस प्रकार दिखेगा:

A का 2 का पूरक = (~A) + 1

अब मान लें A=8 (बाइनरी 00001000), B=10(00001010)

शर्त 1:    ए = (ए और बी) + (ए | बी)

                   यह A = A + B के बराबर है।

                   ए और बी = 00001000 और 00001010 = 00001000

                   ए | बी = 00001000 | 00001010 = 00001010

अब, 00001000 + 00001010 = 00010010 (दशमलव 18)

अतः, A = 18

शर्त 2: बी = ए + (~बी) + १

                   इसका समतुल्य B = AB है

यहाँ, B = A – B

उपरोक्त चर्चा से, यदि हमें घटाव करना हो तो हम ऋणात्मक संख्या पर 2 का पूरक लगाते हैं और फिर उसे जोड़ते हैं।

अतः, -B = ~B + 1

अब, B = 00010010 + (11110101) + 1 = 00001000

B का मान दशमलव 8 के बराबर है, जो प्रारंभिक मान था।

शर्त 3: ए = ए + (~बी) + १

                   इसका समतुल्य A = AB है

अब, A = 00010010 + 11110111 + 1

          A = 00001010 (दशमलव 10 के बराबर)

अंततः A को B का मान प्राप्त हो गया। इस प्रकार, अदला-बदली पूरी हो गई।

सी/ में कार्यक्रमC++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = (a & b) + (a | b);
	b = a + ~b + 1;
	a = a + ~b + 1;
	printf("\nNow, A = %d, B = %d", a, b);
}

आउटपुट:

Enter the value of A: 8
Enter the value of B:10
A=8, B=10
Now, A=10, B=8

कार्यक्रम में Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = (a & b) + (a | b)
b = a + ~b + 1
a = a + ~b + 1
print("Now, A = {} and B = {}".format(a, b))

आउटपुट:

Enter the value of A: 25
Enter the value of B: 25
A = 25 and B = 25
Now, A = 25 and B = 25

अंकगणितीय अतिप्रवाह क्या है?

ओवरफ़्लो शब्द का अर्थ है सीमा से अधिक होना। अंकगणितीय ओवरफ़्लो का अर्थ है कि किसी भी अंकगणितीय ऑपरेशन का परिणाम कंप्यूटर आर्किटेक्चर के संख्या प्रतिनिधित्व की सीमा या सीमा से अधिक है। उदाहरण के लिए, यदि किसी संख्या को शून्य से विभाजित किया जाता है, तो वह अनंत हो जाती है, और कंप्यूटर संख्या प्रणाली इसे 32 या 64 बिट्स में नहीं रख सकती है।

पूर्णांक संख्या प्रतिनिधित्व
32-बिट सिस्टम में पूर्णांक संख्या का प्रतिनिधित्व

अंकगणितीय अतिप्रवाह का परिणाम हो सकता है:

  • दो धनात्मक संख्याओं का योग ऋणात्मक हो जाता है। क्योंकि साइन बिट 1 हो सकता है, जिसका अर्थ है ऋणात्मक संख्या।
  • दो ऋणात्मक संख्याओं का योग धनात्मक हो जाता है। क्योंकि साइन बिट 0 हो सकता है, जिसका अर्थ है एक धनात्मक संख्या।