মান অদলবদল করা

কম্পিউটার প্রোগ্রামিং এ সোয়াপ (swap) বলতে দুইটা ভ্যারিয়েবল নিজেদের মান অদলবদল করাকে বুঝায়। কিছু কিছু প্রোগ্রাম আছে যেগুলোতে ভ্যারিয়েবলের মান অদলবদল করার প্রয়োজন হয়। এই পোষ্টে আমরা ভ্যারিয়েবলের মান অদলবদল করার কয়েকটা পদ্ধতি শিখবঃ

কখন মান পরিবর্তন করার প্রয়োজন হয়?
ধরুন আমরা নিচের কোডটা লিখলামঃ

int a, b, sum = 0;
cin>>a>>b;
for(int i = a; i <= b; i++)
{
	sum += i;
}
cout<<sum<<endl;

আমাদের কোডের for লুপ কাজ করার জন্য অবশ্যই a এর মান b থেকে ছোট হতে হবে। a এর মান যদি b থেকে বড় হয় তাহলে আমাদের for লুপটা কাজ করবে না। যেহেতু a এবং b এর মান ইনপুটের উপর নির্ভর করে সেহেতু আমাদেরকে এমনভাবে কোড লিখতে হবে যেন আমাদের কোডটা সবসময় কাজ করে। এই কাজটা আমরা a এবং b এর মান অদলবদল করার মাধ্যমে করতে পারি।
আজকে আমরা ভ্যারিয়েবলের মান অদলবদল করার কয়েকটা পদ্ধতি শিখবঃ
১ম পদ্ধতি – ৩টা ভ্যারিয়েবল ব্যবহার করেঃ
এটি হল ভ্যারিয়েবলের মান অদলবদল করার সবচাইতে সহজ বহুল ব্যবহৃত পদ্ধতি। সেক্ষেত্রে আমাদের ৩টা ভ্যারিয়েবল ব্যবহার করতে হবে। ধরুন a,b,c ভ্যারিয়েবল ব্যবহার করছি।a এবং b ভ্যারিয়েবল দিয়ে আমরা ইনপুট নিব। এরপর সোয়াপের ১ম ধাপে আমরা a এর মান c তে রাখব। ২য় ধাপে b এর মান a তে রাখব এবং ৩য় ধাপে c এর মান b তে রাখব।
উদাহরনঃ
ধরুনঃ a = 20 এবং b = 10
তাহলে a এর মান c তে রাখলে c = 20 হবে। এরপর b এর মান a তে রাখলে a = 10 হবে এবং c এর মান b তে রাখলে b = 20 হবে।
কোডঃ

int a, b, c;
cin>>a>>b;
cout<<"Before Swap: ";
cout<<a<<"\t"<<b<<endl;
c = a;
a = b;
b = c;
cout<<"After Swap: ";
cout<<a<<"\t"<<b<<endl;

২য় পদ্ধতি – ২টা ভ্যারিয়েবল ব্যবহার করেঃ
২টা ভ্যারিয়েবল ব্যবহার করে ভ্যারিয়েবলের মান অদলবদল করার দুইটা উপায় আছেঃ
১ সাধারন যোগ-বিয়োগ করেঃ
২ বিটওয়াইজ অপারেশন করেঃ

সাধারন যোগ-বিয়োগ করেঃ
ধরুন a, b আমাদের দুইটা ভ্যারিয়েবল। সোয়াপের ১ম ধাপে আমরা a থেকে b বিয়োগ করব এবং রেজাল্টটা a তে রাখব। ২য় ধাপে b এর সাথে a যোগ করব এবং রেজাল্ট b তে রাখব। ৩য় ধাপে a থেকে b বিয়োগ করব এবং রেজাল্ট a তে রাখব।
উদাহরনঃ
ধরুনঃ a = 20 এবং b = 10
১ম ধাপঃ a = a – b = 20 – 10 = 10
২য় ধাপঃ b = a + b = 10 + 10 = 20
৩য় ধাপঃ a = b – a = 20 – 10 = 10
কোডঃ

int a, b;
cin>>a>>b;
cout<<"Before Swap: ";
cout<<a<<"\t"<<b<<endl;
a = a – b;
b = b + a;
a = b – a;
cout<<"After Swap: ";
cout<<a<<"\t"<<b<<endl;

বিটওয়াইজ অপারেশন করেঃ
ধরুন a, b আমাদের দুইটা ভ্যারিয়েবল। সোয়াপের ১ম ধাপে আমরা a থেকে b XOR করব এবং রেজাল্টটা a তে রাখব। ২য় ধাপে b থেকে a XOR করব এবং রেজাল্ট b তে রাখব। ৩য় ধাপে a থেকে আবার b বিয়োগ করব এবং রেজাল্ট a তে রাখব।
উদাহরনঃ
ধরুনঃ a = 20 এবং b = 10
সেক্ষেত্রে বাইনারী তে a = 10100 এবং b = 1010
১ম ধাপঃ a XOR b = 10100 ^ 1010 = 11110 [11110 = 30]
২য় ধাপঃ b XOR a = 1010 ^ 11110 = 10100 [10100 = 20]
৩য় ধাপঃ a XOR b = 11110 ^ 10100 = 1010 [1010 = 10]
^ দিয়ে XOR operation বুঝায়।

কোডঃ

int a, b;
cin>>a>>b;
cout<<"Before Swap: ";
cout<<a<<"\t"<<b<<endl;
a ^= b;
b ^= a;
a ^= b;
cout<<"After Swap: ";
cout<<a<<"\t"<<b<<endl;

৩য় পদ্ধতি –swap() ফাংশন ব্যবহার করেঃ
আপনারা যারা C++ কোডার তারা চাইলে উপরের পদ্ধতিগুলো ব্যবহার না করে STL Algorithm ব্যবহার করেও ভ্যারিয়েবলের মান অদলবদল করতে পারবেন। সেক্ষেত্রে আপনাদের কোডটা এইরকম লিখতে হবেঃ


#include <algorithm>
int a, b;
cin>>a>>b;
cout<<"Before Swap: ";
cout<<a<<"\t"<<b<<endl;
swap(a,b);
cout<<"After Swap: ";
cout<<a<<"\t"<<b<<endl;

তাহলে আমরা প্রথম প্রোগ্রামটা একটু পরিবর্তন করে এইভাবে লিখতে পারিঃ

int a, b, sum = 0;
cin>>a>>b;
if(a > b)
{
	//Your code for swap
}
for(int i = a; i <= b; i++)
{
	sum += i;
}
cout<<sum<<endl;

আশাকরি আপনারা ভ্যারিয়েবলেন মান অদল-বদল করার পদ্ধতিগুলো বুঝতে পেরেছেন।