মডিউল ৩ঃ লুপ
মডিউল ৩-০: সূচনা
প্রোগ্রামাররা কেমন মানুষ? এক কথায় স্মার্ট মানুষ! সো সেই স্মার্টনেস এর একটা ঝলক দেখবা আজকে। একটা কাজ ম্যানুয়ালি বারবার না করে কিভাবে সহজে প্রোগ্রামিং এর মাধ্যমে করা যায় সেটাই দেখানো হবে আজকে।
আজকে শেখানো হবে প্রোগ্রামিং এর অতি গুরুত্বপূর্ণ একটা কন্সেপ্ট লুপ। লুপ কি, এটা কেন আমরা ইউস করবো, কি কি ধরনের লুপ আছে সবকিছু নিয়ে আলোচনা করা হবে। অর্থাৎ এটা আজকে আমরা ভাজা ভাজা করে ডাল ভাত দিয়ে খেয়ে ফেলবো।
এই মডিউলে আমরা কি কি শিখবোঃ
- সি প্রোগ্রামিং এর লুপ সম্পর্কে জানবো
- কোন কোন ক্ষেত্রে লুপ ব্যাবহার হয় তা জানবো
- লুপের সাথে কন্ডিশন ব্যাবহার করা জানবো
- Break, Continue সম্পর্কে জানবো
- While, Do While লুপ সম্পর্কে জানবো
মডিউল ৩-১, ৩-২, ৩-৩: ফর লুপ টাইপ-১
দৈনন্দিন জিবনে এবং প্রোগ্রামিং করতে গেলে আমাদের অনেক সময়ই রিপিটেটিভ কাজ করতে হয়। হতে পারে আমাদের একটি ক্লাসে থাকা ১০০ জন স্টুডেন্টের মার্ক্স যোগ করতে হবে অথবা ১ থেকে ২০০ পর্যন্ত জোড় সংখ্যা প্রিন্ট করতে হবে। প্রোগ্রামিং করে এই প্রবলেম গুলো করতে গেলে আমাদের একই কাজ বারবার করতে হবে। ১০০ জন স্টুডেন্ট এর মার্ক্স যোগ করতে হলে আমাদের ১০০ বার যোগ করার স্টেটমেন্ট লিখতে হবে। ১০০ টি জোড় সংখ্যা প্রিন্ট করতে হলে আমাদের ১০০ বার প্রিন্ট স্টেটমেন্ট লিখতে হবে। এই রিপিটেটিভ কাজ যেন আমাদের না করতে হয় এজন্য আমরা লুপ ব্যাবহার করি। লুপ ব্যাবহার করলে আমাদের একই কাজ বারবার করতে হয় না। আমরা কাজটা শুধু একবার ই করি এবং সেটিকে একটি লুপের মধ্যে রেখে দেই। লুপটি বার বার ঘুরে আমাদের লিখা একটি কাজ সে বার বার করে, আমরা যতবার চাই ততবার।
সি প্রোগ্রামিং এ ৩ ধরনের লুপ আছেঃ
- for loop
- while loop
- do while loop
শুরুতে আমরা দেখব ফর লুপ। ফর লুপ লিখার নিয়ম হচ্ছেঃ
for ( start ; end condition ; step )
{
code
}লুপের ( ) ব্রাকেট এর মধ্যে ২টি সেমিকোলন দিয়ে বিভক্ত ৩টি পার্ট থাকে। প্রথম পার্টে আমরা লুপ কোথা থেকে শুরু হবে তা লিখি, তারপর মাঝে লিখি একটি কন্ডিশন যা সত্য থাকা পর্যন্ত লুপ চলবে, কন্ডিশনটি মিথ্যা হয়ে গেলে লুপ বন্ধ হয়ে যাবে। শেষের পার্টটুকুতে আমাদের লিখতে হয় স্টেপ। এখন আমরা একটি লুপের সাহায্যে ১০ বার হ্যালো প্রিন্ট করি
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=10;i=i+1)
{
printf("Hello\n");
}
return 0;
}এখানে for(i=1;i<=10;i++) লুপের আইটারেশন কন্ট্রল করার জন্য একটি ভেরিয়েবল i নিয়েছি। প্রথম পার্টে i=1 লিখে আমরা লুপ ১ থেকে স্টার্ট করব সেটি বুঝাচ্ছি। মাঝের অংশে আমরা কন্ডিশন লিখেছি i<=10, অর্থাৎ i যতক্ষন ১০ এর সমান অথবা ছোট ততক্ষন লুপ চলবে। i ১০ এর থেকে বড় হয়ে গেলে লুপ থেমে যাবে। শেষের অংশে আমরা i=i+1 লিখেছি। তারমানে i প্রতিবার ১ করে বাড়বে।
এই কোডটি রান করলে আমরা দেখতে পারব ১০ বার "Hello" প্রিন্ট হচ্ছে।
মডিউল ৩-৪, ৩-৫, ৩-৬: ফর লুপ টাইপ-২
আমাদের যদি কখনো ১ থেকে ১০০০ পর্যন্ত প্রিন্ট করতে হয়। তাহলে আমরা লুপ দিয়ে এভাবে লিখতে পারিঃ
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=1000;i=i+1)
{
printf("%d\n",i);
}
return 0;
}এখানে আমরা একবারই প্রিন্ট স্টেটমেন্ট লিখেছি। কিন্তু সেটি একটি লুপের মধ্যে রেখে দিয়েছি এবং লুপকে আমরা এমনভাবে কন্ট্রল করেছি যেন তা ১০০০ বার রান করে, তাই এই একটি প্রিন্ট স্টেটমেন্টই বারবার রান হয়ে ১ থেকে ১০০০ পর্যন্ত প্রিন্ট করবে। এখানে লুপ শুরু করছি ১ থেকে, কন্ডিশন দিয়েছি এমনভাবে যেন ভেরিয়েবল i এর মান ১০০০ হওয়া পর্যন্ত কন্ডিশনটি সত্য হয় অর্থাৎ লুপ চলতে থাকে। আর প্রতিবার লুপের মান ১ করে বাড়াচ্ছি। তারপর লুপের মধ্যে আমরা সিমপ্লি i কে প্রিন্ট করে দিয়েছি। কারণ লুপ কন্ট্রল করছি আমরা i দিয়ে। i এর মান শুরু হবে ১ থেকে, প্রতিবার ১ করে বেড়ে i থামবে ১০০০ এ যেয়ে। তাই আমরা যদি প্রতিবার i এর মান প্রিন্ট করে দেই তাহলেই ১ থেকে ১০০০ প্রিন্ট হয়ে যাবে।
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=100;i=i+2)
{
printf("%d\n",i);
}
return 0;
}এখানে আমরা লুপ ১ থেকে শুরু করে ১০০ পর্যন্ত যাচ্ছি। প্রতিবার i এর মান ২ করে বাড়িয়ে দিচ্ছি। কারণ বিজোড় সংখ্যা প্রতি ২ সংখ্যা পর পর হয়।
এভাবে আমরা চাইলে বিয়োগ, গুন, ভাগ করেও লুপ কন্ট্রল করতে পারি।
এবার আমরা ১০ থেকে ১ পর্যন্ত প্রিন্ট করিঃ
#include <stdio.h>
int main()
{
int i;
for(i=10;i>=1;i=i-1)
{
printf("%d\n",i);
}
return 0;
}এখানে লুপ আমরা ১০ থেকে শুরু করেছি। স্টেপ হিসেবে i=i-1 লিখেছি। তাহলে i এর মান প্রতিবার ১ করে কমবে। তাহলে ১০, ৯, ৮, ৭... এভাবে প্রিন্ট হবে। মাঝে কন্ডিশন দিয়েছি i>=1, তাহলে i যতক্ষন ১ এর সমান অথবা বড় ততক্ষন লুপ চলবে। i এর মান কমতে কমতে যদি ১ এর থেকে কমে যায় তাহলে লুপ থেমে যাবে।
i = i + 1সংক্ষেপেi++i = i - 1সংক্ষেপেi--i = i + 2সংক্ষেপেi += 2i = i - 2সংক্ষেপেi -= 2
মডিউল ৩-৭, ৩-৮: ১ থেকে N পর্যন্ত যোগফল
এখন আমরা লুপ এর সাহায্যে ১ থেকে N পর্যন্ত যোগফল বের করব। এক্ষেত্রে লুপ চালানোর শুরুতে একটি sum ভেরিয়েবল নিয়ে নিতে পারি, যাতে শুরুতে ০ রেখে দিতে পারি। তারপর ১ থেকে N পর্যন্ত লুপ চালিয়ে প্রতিবার ঐ ভ্যালুটি sum এর সাথে যোগ করে দিতে পারি। এরপর লুপ শেষে sum প্রিন্ট করে দিলেই আমাদের কাঙ্খিত যোগফল পেয়ে যাব।
#include <stdio.h>
int main()
{
int sum = 0;
int i;
for (i = 1; i <= 10; i = i + 1)
{
sum += i; // sum = sum + i
}
printf("%d", sum);
return 0;
}এক্ষেত্রে আমরা ইউজার কত পর্যন্ত যোগফল চায় তা ইউজার এর থেকে ইনপুট নিয়ে নিতে পারি।
#include <stdio.h>
int main()
{
int sum = 0;
int i;
int n;
scanf("%d", &n);
for (i = 1; i <= n; i = i + 1)
{
sum += i;
}
printf("%d", sum);
return 0;
}এক্ষেত্রে লক্ষনীয় হচ্ছে sum এর মান যদি 10^9 এর থেকে বড় হয়ে যায় তাহলে long long int ব্যাবহার করতে হবে।
মডিউল ৩-৯, ৩-১০: লুপের সাথে কন্ডিশন
আমাদের লুপের সাথে কন্ডিশন ব্যাবহার করার প্রয়োজন হতে পারে। আমরা যদি ১ থেকে ১০০ পর্যন্ত প্রতিটি সংখ্যা প্রিন্ট করার পাশাপাশি সেটি জোড় নাকি বিজোড় তাও প্রিন্ট করতে চাই তাহলে আমাদের লুপের মধ্যে কন্ডিশন ব্যাবহার করতে হবে।
#include <stdio.h>
int main()
{
int i;
for (i = 1; i <= 100; i += 1) // লুপ চালানো হচ্ছে ১ থেকে ১০০ পর্যন্ত
{
if (i % 2 == 0) // যদি ২ দিয়ে ভাগ করলে ভাগশেষ ০ থাকে তাহলে সেটি জোড়
{
printf("%d - Even\n", i); // প্রিন্ট করছি সংখ্যাটি এবং শেষে জোড় লিখে দিচ্ছি
}
else // জোড় হওয়ার কন্ডিশন সত্য না হলে
{
printf("%d - Odd\n", i); // প্রিন্ট করছি সংখ্যাটি এবং শেষে বিজোড় লিখে দিচ্ছি
}
}
return 0;
}এভাবে আমরা চাইলে লুপের মধ্যে কন্ডিশন, কন্ডিশনের মধ্যে লুপ, লুপের মধ্যে কন্ডিশন তার মধ্যে আবার কন্ডিশন—এভাবে আমাদের প্রয়োজন অনুসারে ব্যাবহার করতে পারি।
মডিউল ৩-১১, ৩-১২, ৩-১৩, ৩-১৪: ব্রেক, কন্টিনিউ স্টেটমেন্ট
সি প্রোগ্রামিং এ লুপ কন্ট্রল করার জন্য আরো ২টি কিওয়ার্ড আছে:
- break
- continue
break
লুপের কন্ডিশন মিথ্যা হওয়ার আগেই যদি আমরা লুপকে থামিয়ে দিতে চাই তখন break ব্যাবহার করা হয়।
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=10;i=i+1)
{
if(i==5)
{
break; // i এর মান ৫ হলে লুপ থেমে যাবে
}
printf("%d\n", i);
}
return 0;
}এখানে যদিও লুপ চালানোর সময় বলে দিয়েছি ১ থেকে ১০ পর্যন্ত চলতে, কিন্তু ভিতরে i যখনই ৫ হয় break এর কারণে লুপ সাথে সাথে থেমে যায়। আউটপুট: ১, ২, ৩, ৪।
continue
লুপের কোন অংশ স্কিপ করতে চাইলে continue ব্যাবহার করা হয়। continue ব্যাবহার করলে ঐ ইটারেশনে continue এর পরের স্টেটমেন্টগুলো স্কিপ হয় এবং পরের ইটারেশনে চলে যায়।
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=10;i=i+1)
{
if(i==5)
{
continue; // i==5 হলে নিচের প্রিন্ট স্কিপ হবে
}
printf("%d\n", i);
}
return 0;
}কোডটি রান করলে দেখা যাবে ১ থেকে ১০ পর্যন্ত প্রিন্ট হয়েছে শুধু ৫ বাদে। কারণ i এর মান ৫ হলে continue এর নিচে থাকা প্রিন্ট স্টেটমেন্ট স্কিপ হয়।
মডিউল ৩-১৫, ৩-১৬, ৩-১৭: While & Do While লুপ
সি প্রোগ্রামিং এ আরো ২ ধরনের লুপ আছে:
- while
- do while
while
while লুপ লিখার নিয়মঃ
start / initialization
while (condition)
{
code
step/increment/decrement
}while লুপে আমরা শুধু কন্ডিশন লিখি। start বা initialization করতে হলে তা আমরা লুপের আগেই করি এবং step বা increment থাকলে তা লুপের মধ্যে লিখি। ফর লুপের সাথে মেইন পার্থক্য এখানেই।
#include <stdio.h>
int main()
{
int i;
i = 1; // initialization
while (i <= 5) // condition
{
printf("%d\n", i); // code
i = i + 1; // increment or decrement
}
return 0;
}do while
do while লুপ লিখার নিয়মঃ
start / initialization
do
{
code
step/increment/decrement
} while (condition);do while লুপ while লুপের মতই। while লুপের সাথে মেইন পার্থক্য হচ্ছে do while লুপে কন্ডিশন চেক হয় শেষে। শুরুতে লুপ একবার রান হয়। তারপরে কন্ডিশন চেক হয়। do while লুপে কন্ডিশন যদি সত্য নাও হয় তারপরও লুপ মিনিমাম একবার রান করে।
#include <stdio.h>
int main()
{
int i;
i = 1; // initialization
do
{
printf("%d\n", i); // code
i = i + 1; // increment or decrement
}
while (i <= 5); // condition
return 0;
}যদি এরকম সিচুয়েশন থাকে যে কন্ডিশন সত্য হোক আর না হোক তারপরও আমরা চাই লুপ একবার চলুক এটলিস্ট, তাহলে আমরা do while লুপ ব্যাবহার করতে পারি। এছাড়া do while লুপ আমাদের ডেইলি লাইফে তেমন একটা ব্যাবহার করা হয় না।
মডিউল ৩-১৮: কিভাবে Infinite Loop থামাবেন
VS Code এর terminal-এ যদি কোনো প্রোগ্রামে infinite loop চলে, তখন সেটি থামানোর জন্য ২টা ধাপ অনুসরণ করতে হবে:
- ধাপ ১: VS Code এর Terminal এ ক্লিক করে টার্মিনাল উইন্ডোটি active করুন।
- ধাপ ২: কীবোর্ড শর্টকাট চাপুন — Windows/Linux:
Ctrl + C, Mac:⌘ Command + C।
এই কমান্ড দিলে আপনার চলমান প্রোগ্রামের infinite loop বন্ধ হয়ে যাবে এবং Terminal এ cursor ফিরে আসবে।
