লুপ (Loop) - for loop (প্রথম পর্ব)

ইউনিভার্সিটিতে যখন সি প্রোগ্রামিং শুরু হয় if, else, else if তথা কন্ডিশনাল লজিক পর্যন্ত শিক্ষার্থীদের আগ্রহের কমতি থাকে না। if - else if এর সহজ সমাধান গুলো করতে পেরে কেউ কেউ নিজেকে বিশাল বড় প্রোগ্রামার ভাবতে শুরু করে। আহা প্রোগ্রামিং কত সহজ !
তাদের মাঝে যারা একটু বেশী সপ্নবাজ তারা গুগল, মাইক্রোসফটের মতো কোম্পানিতে জব করার স্বপ্ন দেখতে শুরু করে। কিন্তু লুপে এসেই শুরু হয় আসল গণ্ডগোল। লুপ যেমন ঘুরে তাদের স্বপ্ন গুলোও তেমন ঘুরতে থাকে। লুপ না বুঝতে পেরে অনেকের প্রোগ্রামার হওয়ার দিবা স্বপ্ন সেখানেই নৈশ স্বপ্নে পরিণত হয়। ছেড়ে দেয় প্রোগ্রামিং। এক পর্যায়ে সিজিপিএ বাড়ানোর জন্য শুরু করে প্রোগ্রামিং মুখস্তের প্রতিযোগিতা !
আচ্ছা প্রোগ্রামিং কি মুখস্ত করার বিষয়? লুপ কি এতই কঠিন?
প্রোগ্রামিংয়ের মহা গুরুত্বপূর্ণ টপিক হল লুপ। লুপ ভালভাবে না বুঝে পরবর্তীতে যা কিছু শিখা হোক না কেন মূল জায়গায় গলদ থেকেই যাবে। ধারাবাহিকভাবে কয়েকটি পর্বে লুপ নিয়ে সহজভাবে লেখার চেষ্টা করব। এটা প্রথম পর্ব।

  
সি প্রোগ্রামিং এ সাধারণত তিন ধরণের লুপ আছে। for loop, while loop এবং do loop । প্রোগ্রামিং এ for লুপের ব্যবহার সবচেয়ে বেশী। তবে একজন ভালো প্রোগ্রামারের বৈশিষ্ট্য হল যেখানে যে লুপ ব্যবহার করা প্রয়োজন সেখানে সেই লুপ ব্যবহার করা। তাহলে এবার আমরা for লুপের সাথে পরিচিত হই-
for loop:
ফর লুপকে আমরা চারটি অংশে বিবেচনা করতে পারি। অংশগুলো হল,
১. initialize
2. condition
3. increment / decrement এবং
4. statement

  গঠন হল এইরকম,
for (initialize;   condition;   increment / decrement)
                  statement;

প্রোগ্রামে এই রকম,

#include <stdio.h>
int main()
{      
                                                                                     এখানে-
       int i;                                              /* initialize অংশে i = 1; সেমিকলন (;) হবে
       for(i = 1;  i <= 5;  i++)                    
condition অংশে i <= 5; সেমিকলন (;) হবে                  
       printf("%d\n");                           increment / decrement অংশে i ++ সেমিকলন (;) হবেনা
       return 0;                                     initialize অংশে printf("%d\n", i); 
সেমিকলন (;) হবে  */               }
                                                                        প্রোগ্রাম: ১


এই প্রোগ্রামের শুরুতে একটি ইন্টিজার টাইপের ভ্যারিয়েবল আই ( i ) ডিক্লিয়ার করে নিয়েছি।
                                                            int i;
এর পরের লাইন আছে এই রকম,

                                                   for(i = 1;  i <= 5;  i++)  
 মূলত এখান থেকেই ফর লুপের কাজ শুরু হবে। initialize অংশে আছে i = 1; অর্থাৎ i এর মান  প্রাথমিক অবস্থায় এক। condition অংশে আছে  i <= 5; (লেস দ্যান অর ইকুয়াল টু) । অর্থাৎ i এর মান পাঁচ থেকে ছোট অথবা সমান হবে।
increment / decrement অংশে i++ দিয়ে ব্যাকেট ক্লোজ করে দেয়া হয়েছে। এখানে i++ এর মানে হল i এর মান এক এক করে বাড়তে থাকবে। statement অংশে আছে,
                                                      printf("%d\n", i);
অর্থাৎ এখানে i এর মান নতুন লাইনে প্রিন্ট করতে বলা হচ্ছে। প্রোগ্রামটি কাজ করবে এইভাবে-
প্রথমবার, প্রথমেই লুপ initialize অংশে যাবে। initialize অংশে control variable আই (i) এর মান দেওয়া আছে এক । এরপর  condition অংশে গিয়ে শর্ত চেক করবে। যেহুতু i = 1;  কাজেই  i <= 5 কন্ডিশন সত্য। এরপর statement অংশে যাবে। statement অংশে i এর মান প্রিন্ট করতে বলা হচ্ছে। যথারীতি i এর মান 1 প্রিন্ট করবে।

দ্বিতীয় বার, এখন লুপ ঘুরে increment / decrement অংশে যাবে। লক্ষ্য করুন, সেখানে i++ আছে অর্থাৎ i কে এক বৃদ্ধি পেতে বলা হচ্ছে। কাজেই এখানে i এর increment হবে। যদি i-- থাকতো তাহলে i এর মান এক এক করে কমতে থাকতো অর্থাৎ decrement হত। সুতরাং increment অংশে i এর মান এক বেড়ে দুই হবে। এবার condition অংশে গিয়ে শর্ত চেক করে দেখবে i এর মান 5 এর চেয়ে ছোট অথবা সমান কিনা। যেহেতু i এর মান এক বেড়ে দুই হয়েছে, এর দুই পাঁচের চেয়ে ছোট। সুতরাং কন্ডিশন সত্য। এবার statement অংশের কাজ করবে অর্থাৎ 2 প্রিন্ট করবে।


এভাবে তৃতীয়, চতুর্থ ও পঞ্চমবার লুপ ঘুরে increment অংশে গিয়ে i এর মান এক এক করে বৃদ্ধি পেয়ে condition অংশে শর্ত চেক করে statement অংশে যথাক্রমে 3, 4, এবং 5 প্রিন্ট করবে।

ষষ্টবার, i এর মান 5 থেকে আরও এক বৃদ্ধি পেয়ে 6 হবে। codition অংশে গিয়ে দেখবে i এর মান 5 থেকে ছোট অথবা সমান কিনা। যেহুতু i এর মান এখন 6 হয়েছে, কাজেই কন্ডিশন মিথ্যা। অর্থাৎ লুপ ভেঙে যাবে। সুতরাং এই প্রোগ্রামটিকে কম্পাইলারে রান করলে আউটপুট হিসেবে 1 থেকে 5 পর্যন্ত সংখ্যা প্রিন্ট করবে।

এখানে লুপ মোট পাঁচবার ঘুরবে। ষষ্টবারে condition মিথ্যা তাই আর ঘুরবে না। লুপের এই ঘুরাকে iteration বলা হয়। বাংলায় যার মানে পুনরাবৃত্তি। তাই এই লুপকে আমার ৫ টি iteration এর লুপ বলতে পারি।  
এখানে নিম্নের বিষয়গুলো খেয়াল রাখতে হবে -

initialize: initialize অংশে control variable এর প্রাথমিক মান নির্ধারণ করা হয় (প্রোগ্রাম: ১ এর ক্ষেত্রে যেমন i = 1)। এই অংশের কাজ কেবল একবারই হবে এবং সেটা লুপে ঢোকার শুরুতে।
condition: condition চেক করে দেখবে শর্ত সত্য কিনা। শর্ত সত্য হলে loop এক্সিকিউট করে চলতে থাকবে। শর্ত মিথ্যা হলে লুপ ভেঙে যাবে অর্থাৎ লুপ বন্ধ হয়ে যাবে।
increment / decrement: প্রথমবার increment / decrement অংশের কোন কাজ হবে না। দ্বিতীয় বার থেকে increment / decrement অনুযায়ী বৃদ্ধি বা হ্রাস পেতে থাকবে। condition এর শর্ত মিথ্যা না হওয়া পর্যন্ত এই অংশের কাজ চলতে থাকবে।
statement: condition এর শর্ত মিথ্যা না হওয়া পর্যন্ত এই অংশের কাজ চলতে থাকবে।

এবার আমরা নিচের প্রোগ্রামটি দেখি-

#include <stdio.h>
int main()
{
       int i;
       for(i = 10; i >= 5; i--)
       printf("%d ", i);
       return 0;
}

                                                                        প্রোগ্রাম: ২

এই প্রোগ্রামটিতে initialize অংশে control variable এর মান i = 10 । condition অংশে আছে i >= 5 (গ্রেটার দ্যান অর ইকুয়াল টু); অর্থাৎ i এর মান 5 এর সমান অথবা বড়। এর পরের অংশ decrement এ i-- অর্থাৎ i এর মান এক এক করে কমতে থাকবে। statement অংশে i এর মান প্রথমে 10 প্রিন্ট করবে। এরপর decrement অংশে গিয়ে i এর মান এক কমে নয় হবে। শর্ত চেক করে দেখবে i এর মান পাঁচের বড় কিংবা সমান কিনা। যেহুতু নয় পাঁচের বড় কাজেই 9 প্রিন্ট হবে। এভাবে যথাক্রমে 8, 7, 6 এবং 5 প্রিন্ট করবে। এরপর i এর মান পাঁচ থেকে এক কমে চার হবে। condition অংশে শর্ত চেক করে দেখবে i এর মান পাঁচের সমান অথবা বড় কিনা। যেহুতু i এর মান চার। কাজেই আমাদের শর্ত মিথ্যা। অর্থাৎ লুপ ভেঙে যাবে। সুতরাং এই প্রোগ্রামটির আউটপুট হবে এই রকম: 10 9 8 7 6 5 ।
                                                                                                                             ( চলবে )

No comments

Unity গেম ডেভেলপমেন্ট: কী, কেন এবং কিভাবে শুরু করবেন

আপনি যদি গেম খেলতে ভালোবাসেন এবং কখনো ভেবেছেন—"এইরকম একটা গেম আমি নিজেই বানাতে পারতাম!"—তাহলে আপনার জন্য দারুণ একটা খবর আছে। আজ আম...

Powered by Blogger.