লুপ শব্দের আবিধানিক ( loop ) অর্থ চক্র।
প্রোগামিং এ লুপের ধারণাটি খুবই গুরুত্বপুর্ণ। কোন একটা কাজ নির্দিষ্ট শর্ত সাপেক্ষে বার বার করার জন্য আমরা লুপ ব্যবহার করি। আর কথা না বাড়িয়ে চলো একটা প্রোগ্রাম দেখে নেওয়া যাক।
মনেকরো তোমাকে "Hello World" এই লেখাটা ৫ বার স্ক্রিনে দেখাতে বলা হলো। তাহলে তুমি কি করবে?
নিশ্চয়ই
printf("Hello World\n");
printf("Hello World\n");
printf("Hello World\n");
printf("Hello World\n");
printf("Hello World\n");
এভাবে করতে পারবে। কিন্তু যদি বলা হয় ১০০ বার বা ১০০০ বার করতে ? না এভাবে ১০০০ বার এক লাইন লিখে আর যা হোক , প্রোগামিং এর মতো মজার একটা জিনিসকে বিরক্তিকর করার মানে হয় না। আর এ বিরক্তিটা থেকে মুক্তি পাওয়ার জন্যই লুপের অবতারণা।
এবার নিচের প্রোগ্রামটা দেখোঃ
#include<stdio.h >
int main()
{
int i=1;
for(i=1; i<=5; i=i+1)
{
printf("Hello world\n");
}
return 0;
}
কি চমৎকার তাই না। মাত্র কয়টা লাইন লিখেই আমরা ৫ বার Hello World প্রিন্ট করে দিলাম।
শুধু ৫ বার নয় আমরা চাইলে এই সমান প্রোগ্রামে সামান্য একটু পরিবর্তন করেই ১০০ বার Hello World প্রিন্ট করতে পারবো। শুধু নিচের মতো একটু পরিবর্তন করে কোড টা রান করে দেখো।
for( i=1; i<=100; i= i+1)
হ্যা, 5 এর জায়গায় 100 বসিয়ে দিলেই আমাদের কাজ শেষ।
উপরের প্রোগ্রামটা আমরা for লুপ দিয়ে করেছি। সি তে সাধারণত ৩ ধরণের লুপ আছে, for , while এবং do-while loop.
ধীরে ধীরে আমরা সব গুলা লুপের সাথে পরিচিত হবো।
প্রথমে আমরা একটা ইন্টিজার ভেরিয়েবল ডেক্লিয়ার করেছি, যার নাম দিয়েছি i. তুমি চাইলে a,b,c,d...... যেকোন নাম দিতে পারো। তবে সাধারণত প্রায় সব প্রোগ্রামে i, j, k এভাবে নাম করণ দেখবে। i কে এইখানে বলা হয় counter variable । কারণ লুপটি কতবার ঘুরছে তা নির্ণয়ের জন্য এখানে i ব্যবহার করা হয়েছে।
আমরা i এর মান দিয়েছি 1.
তারপর
for( i=1 ; i<=5; i = i+1)
এই লাইনে i=1 এর পর একটা সেমিকোলন আছে, প্রথম অবস্থায় সবার ই এই সেমিকোলন নিয়ে একটু আধটু সমস্যা হয়। তবে একটু মাথা ঠান্ডা রেখে প্রোগ্রামিং করলে এসব সমস্যা সহযেই এড়ানো যায়।
তারপর আমরা দিয়েছি i<=5.
একে বলা হয় ব্রেকিং কন্ডিশন। যতক্ষণ পর্যন্ত এই কন্ডিশন সত্য থাকবে ততোক্ষণ পর্যন্ত লুপ চলবে।
এই শর্ত মিথ্যা হয়ে গেলে লুপ বন্ধ হয়ে যাবে। ।
তারপর আরেকটি সেমিকোলন (;) । এই সেমিকোলনের পর i=i+1 লেখা হয়েছে।
অর্থাৎ , প্রতিবার Hello World প্রিন্ট করার পর i এর মান এক করে বাড়বে।
এবার চলো দেখে নেই উপরের প্রোগ্রামটি কিভাবে কাজ করছে।
প্রথমে কম্পাইলার for লুপে আসার পর দেখবে for(i=1; ........)
একে বলা হয় "ইনিশিয়ালাইজড" (initialized) করা। সহজ কথায় i এর মান (কাউন্টার ভেরিয়েবল এর শুরুর মান) ঠিক করে দেওয়া।
তারপর কম্পাইলার i<=5 এইখানে আসবে, এবার চেক করবে i এর মান 5 এর চেয়ে ছোট বা সমান কি না?
যেহেতু i এর মান 1 এবং 1<=5 শর্তটি সত্য তাই for loop এর বডিতে আসবে।
{
দুইটা দ্বিতীয় বন্ধনীর মধ্যবর্তী এই অংশকে বডি বলা হয়।
}
প্রথম অবস্থায় হয়তো মনে হতে পারে, i<=5 এর পর কম্পাইলার i=i+1 এই অংশে যাবে। কিন্তু না!
শর্ত সত্য হলে বডিতে আসবে এবং { } এর ভিতরের নির্দেশ অনু্যায়ী কাজ করবে।
বডির ভিতরে কমান্ড হলো printf("Hello World\n");
তাই একবার Hello World এই লেখাটা প্রিন্ট হবে।
তারপর i=i+1 এ যাবে, এবং i এর মান এক বেড়ে 1 থেকে 2 হবে।
এবার কম্পাইলার আর i=1 এই অংশে যাবে না। সরাসরি i<=5 এই অংশে চলে আসবে।
i=1 এই অংশটা শুধু মাত্র প্রোগ্রাম শুরুর পর প্রথম বার গ্রহণ হবে এবং i এর মান সেট হবে।
একবার লুপ ঘুরার পর যখন i=2 হবে তখন কম্পাইলার সরাসরি i<=5 এ আসবে , এবং পরীক্ষা করবে i এর মান 5 থেকে ছোট বা 5 এর সমান কি না ?
এখন i = 2 ; তাই i<=5 শর্তটি সত্য,
তাই কম্পাইলার আবার for লুপের বডিতে আসবে এবং আবার প্রিন্ট হবে Hello World. তারপর, i=i+1 হবে, এখন i এর মান 3. কম্পাইলার আবার কন্ডিশনে আসবে , এবং পরীক্ষা করবে i<=5 কি না? যেহেতু i = 3 , এবং তা 5 এর চেয়ে ছোট তাই আবার প্রিন্ট হবে Hello World.
আবার, i=i+1 হবে, এখন i এর মান 4. কম্পাইলার আবার কন্ডিশনে আসবে , এবং পরীক্ষা করবে i<=5 কি না? যেহেতু i = 4 , এবং তা 5 এর চেয়ে ছোট তাই আবার প্রিন্ট হবে Hello World.
এখন আবার, i=i+1 হবে, এখন i এর মান 5. কম্পাইলার আবার কন্ডিশনে আসবে , এবং পরীক্ষা করবে i<=5 কি না? যেহেতু i = 5 , এবং তা 5 এর চেয়ে ছোট নয়, কিন্তু পাঁচ তো পাঁচ এর সমান, তাই এবার ও শর্ত সত্য এবং কম্পাইলার বডিতে যাবে, এবন প্রিন্ট হবে Hello World.
এখন, আবার, i =i+1 হবে, এখন i এর মান 6. কম্পাইলার আবার কন্ডিশনে আসবে , এবং পরীক্ষা করবে i<=5 কি না?
যেহেতু, i = 6 , এবং i এর মান 5 থেকে বড়, তাই এবার i<=5 শর্তটি মিথ্যা। শর্তটি মিথ্যা হও্যার সাথে সাথে লুপ বন্ধ হয়ে যাবে।
কম্পাইলার return 0; তে চলে আসবে এবনহ প্রোগ্রাম শেষ হয়ে যাবে।
0 comments:
Post a Comment