প্রায় সকল প্রোগ্রামিং ল্যাঙ্গুয়েজেই  forwhile ও do while লুপ বিদ্যমান। আমার জানা মতে পাইথনে do while লুপ নাই। যাইহোক লুপিংএর এত অপশন কেন? এদের মধ্যে পার্থক্য কোথায়? এসব প্রশ্ন কাউকে জিজ্ঞেস করলে বা ইন্টারনেটে খোঁজ করলে লুপগুলির সিনট্যাক্সে বা আচরণে কী কী ভিন্নতা আছে সেসব উত্তর পাওয়া যায় যেমন -

  • while লুপ execute হওয়ার আগে condition সত্য হতে হয়
  • do while লুপ প্রথম বার execute হওয়ার হওয়ার জন্য condition সত্য হতে হয় না
  • for লুপ প্রথম বার execute হওয়ার জন্য একটা কাউন্টার ভেরিয়াবল initialize করতে হয় 
  • ইত্যাদি 

সিনট্যাক্সে বা আচরণ যতই ভিন্ন হোক না কেন সব লুপের উদ্দেশ্য কিন্তু একই যেমন একই কাজ বার বার করা। তাহলে আসল পার্থক্যটা কোথায়? আসল পার্থক্য হল তাদের ব্যবহারে। যদিও আমরা চাইলে for কে while লুপে অথবা while কে for লুপে কনভার্ট করতে পারি কিন্তু সব লুপ সব জায়গায় ব্যবহার করা ঠিক না।

for-while

চিত্র-১: ১ থেকে ১০০ পর্যন্ত সকল সংখ্যার যোগফল বের করার প্রোগ্রাম।

১ থেকে ১০০ পর্যন্ত সকল সংখ্যার যোগফল আমরা চাইলে for অথবা while যেকোনো একটি লুপ ব্যবহার করে বের করতে পারি (চিত্র-১)। কিন্তু এই ক্ষেত্রে while লুপ ব্যবহার করা অনুচিত। এর কারন হল -

একটা লুপ ঠিক কতবার চলবে তা যদি আগে থেকে জানা থাকে তাহলে for লুপ ব্যবহার করতে হয়। আর জানা না থাকলে while লুপ ব্যবহার করতে হয়।

১ থেকে ১০০ পর্যন্ত সকল সংখ্যার যোগফল বের করার ক্ষেত্রে আমরা আগে থেকেই জানি যে লুপটি ঠিক ১০০ বারই ঘুরবে।  তাই for লুপই এক্ষেত্রে উপযুক্ত। এখন while লুপের ব্যবহার বোঝার জন্য ধরা যাক আমরা একটা সংখ্যার অঙ্কগুলির যোগফল বের করতে চাই। যেমন -

  • ইনপুট = ৫২৬ হলে আউটপুট হবে ১৩ কারন ৫+২+৬ = ১৩
  • ইনপুট = ৩২১৫ দিলে আউটপুট হবে ১১ যেহেতু ৩+২+১+৫ = ১১
  • ইনপুট = ৫২ এর জন্য আউটপুট হবে ৭ কারন ৫ + ২ = ৭

এখন এই প্রোগ্রামটি যদি আমরা for লুপ ব্যবহার করে সমাধান করতে চাই তাহলে আমরা কিন্তু আগে থেকে জানি যে না লুপটি ঠিক কতবার চালাতে হবে। কারন লুপটি কতবার চলবে সেটা পুরোপুরি নির্ভর করছে ইনপুটের উপর যেমন ৫২৬ এর জন্য ৩ বার, ৩২১৫ এর জন্য চলবে ৪ বার ও ৫২ এর জন্য চলবে ২ বার। তাই এসব ক্ষেত্রে ব্যবহার করতে হয় while লুপ কারণ আমরা সঠিকভাবে জানিনা যে লুপটি কতবার চালাতে হবে। এখন একটা সংখ্যার অঙ্কগুলির যোগফল বের করার প্রোগ্রামটি একটু দেখি তাহলে বিষয়টি আরো পরিষ্কার হবে।

int number, sum = 0;
printf("Enter a number: ");
scanf("%d", &number);
while(number !=0){
    sum = sum + number%10;
    number = number/10;
}
printf("Digit sum of is: %d", sum);

এ সমস্যাটি সমাধান যেভাবে করা হয়েছে তা হল - ইনপুট (number) থেকে প্রত্যেকবার একক স্থানীয় অঙ্কটি আলাদা করে (number % 10) অন্য একটি ভেরিয়াবলের সাথে যোগ করে রাখা (sum = sum + number % 10) এবং ইনপুট (number) থেকে একক স্থানীয় অঙ্কটি বাদ দেওয়া (number = number / 10)। এভাবে আলাদা করে বাদ দিতে থাকলে ইনপুট হিসাবে যে সংখ্যাটি (number) দেওয়া হয়েছে তার মান এক সময় শূন্য হয়ে যাবে। তাই ইনপুট হিসাবে দেওয়া সংখ্যাটি যতক্ষণ শূন্য না হয় (number != 0) ততক্ষণ উপরের লুপ while চালানো হয়েছে। এভাবে সমাধান করার সুবিধা হলো যেকোনো দৈর্ঘ্যের ইনপুট এর জন্য লুপটি কাজ করবে এবং কতবার লুপ চালাবো সেই চিন্তা করা লাগে না। 

আরো একটি সহজ উপায় আছে যেটা ব্যবহার করে একটা while লুপকে যাচাই করা যায়। যদি দেখা যায় while লুপের condition কে শুরুতে initialize করা হয়েছে এবং ভিতরে প্রত্যেকবার পরিবর্তন করা হচ্ছে (increment (++) বা decrement (--) operator ব্যবহার করে) তাহলে বুঝতে হবে এখানে while লুপ উপযুক্ত না (চিত্র-১ এর ডান পাশে দেখুন)। for লুপ ব্যবহার করা উচিত। এটা আমার একান্ত নিজস্ব পদ্ধতি, সকল ক্ষেত্রে যে কাজ করবে তার নিশ্চয়তা দিতে পারছি না। তাই মূল উপায়ে বের করতে হবে while না for লুপ ব্যবহার করবো অর্থাৎ ঠিক কতবার চলবে (ইনপুট এর উপর নির্ভরশীল নয়) তা জানা থাকলে for; অন্যথায় while লুপ। অবশেষে চিন্তা করুন এতদিন কোথায় কোথায় for এর জায়গায় while লুপ অথবা while এর জায়গায় for লুপ ব্যবহার করেছেন! 

Post a comment


Comments are closed