Loop
লুপ
লুপ (Loop)
১. ভূমিকা — ১০০ বার লেখাটা বোকামি!
ধরো তোমার শিক্ষক বললেন: "১ থেকে ১০০ পর্যন্ত সংখ্যাগুলো কাগজে লেখো।"
তুমি কি ১০০ বার লিখবে?
printf("1\n");
printf("2\n");
printf("3\n");
// ... ১০০ লাইন পর্যন্ত???
এটা বোকামি! এখানেই আসে Loop (লুপ) — একটি কাজ বারবার স্বয়ংক্রিয়ভাবে করার পদ্ধতি।
২. সমস্যা — একই কাজ হাজার বার লেখা কি সম্ভব?
কম্পিউটারের সবচেয়ে বড় শক্তি হলো — সে একই কাজ হাজার হাজার বার ক্লান্তিহীনভাবে করতে পারে।
কিন্তু সেই একই কোড হাজার বার লেখা অসম্ভব। Loop সেই সমস্যার সমাধান।
মাত্র ৩-৪ লাইনে ১ থেকে ১০০০০০ পর্যন্ত প্রিন্ট করা সম্ভব!
৩. চিত্রের মাধ্যমে বোঝো
Loop-এর মূল কাঠামো:
শুরু
↓
[Initialization] → i = 1
↓
[Condition Check] → i <= 10?
↓ হ্যাঁ
[Body] → কাজ করো
↓
[Update] → i = i + 1
↓
আবার [Condition Check] ←──────┘
↓ না
শেষ
৪. বাস্তব জীবনের সাথে মিল
ক্রিকেট খেলার ওভার ভাবো:
একটি ওভারে ৬টি বল থাকে। বোলার ৬ বার একই কাজ করে:
- বল নেয়
- দৌড়িয়ে আসে
- বল ছোড়ে
- ৬ বার হলে → থামে
int ball = 1; // শুরু
while (ball <= 6) { // শর্ত
bowlBall(); // কাজ
ball++; // পরের বলে যাও
}
// ওভার শেষ
Module 1: সংজ্ঞা ও ধারণা
C-তে ৩ ধরনের Loop:
1. for loop:
for (initialization; condition; update) {
// body
}
2. while loop:
while (condition) {
// body
// update
}
3. do-while loop:
do {
// body (অন্তত একবার চলবে)
// update
} while (condition);
Module 2: কীভাবে কাজ করে
for loop-এর ধাপ:
for (int i = 1; i <= 5; i++) {
printf("%d\n", i);
}
ধাপ ১: i = 1 (initialization — একবার)
ধাপ ২: i <= 5? হ্যাঁ (1<=5)
ধাপ ৩: printf("1") — body চলে
ধাপ ৪: i++ → i = 2 (update)
ধাপ ৫: i <= 5? হ্যাঁ (2<=5)
ধাপ ৬: printf("2")
ধাপ ৭: i++ → i = 3
... একইভাবে ...
ধাপ ১৩: i <= 5? না (6<=5 মিথ্যা)
ধাপ ১৪: Loop শেষ
Module 3: প্যাটার্ন ও উদাহরণ
প্যাটার্ন ১: for loop — Counter Pattern
উদাহরণ ১.১: ১ থেকে ১০ প্রিন্ট
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
printf("%d ", i);
}
printf("\n");
return 0;
}
আউটপুট:
1 2 3 4 5 6 7 8 9 10
উদাহরণ ১.২: উল্টো গণনা (১০ থেকে ১)
#include <stdio.h>
int main() {
int i;
for (i = 10; i >= 1; i--) {
printf("%d ", i);
}
printf("\n");
return 0;
}
আউটপুট:
10 9 8 7 6 5 4 3 2 1
উদাহরণ ১.৩: গুণের তালিকা (Multiplication Table)
#include <stdio.h>
int main() {
int n, i;
printf("কোন সংখ্যার ছক দেখবে? ");
scanf("%d", &n);
for (i = 1; i <= 10; i++) {
printf("%d × %d = %d\n", n, i, n * i);
}
return 0;
}
আউটপুট (n=5):
5 × 1 = 5
5 × 2 = 10
...
5 × 10 = 50
প্যাটার্ন ২: for loop — Accumulator Pattern (যোগফল)
উদাহরণ ২.১: ১ থেকে n পর্যন্ত যোগফল
#include <stdio.h>
int main() {
int n, i, sum = 0;
printf("n = ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
sum += i; // sum = sum + i
}
printf("১ থেকে %d পর্যন্ত যোগফল = %d\n", n, sum);
return 0;
}
উদাহরণ ২.২: জোড় সংখ্যার যোগফল
#include <stdio.h>
int main() {
int i, sum = 0;
for (i = 2; i <= 100; i += 2) {
sum += i;
}
printf("১ থেকে ১০০ পর্যন্ত জোড় সংখ্যার যোগফল = %d\n", sum);
return 0;
}
আউটপুট:
১ থেকে ১০০ পর্যন্ত জোড় সংখ্যার যোগফল = 2550
উদাহরণ ২.৩: Factorial
#include <stdio.h>
int main() {
int n, i;
long long fact = 1;
printf("n = ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
fact *= i;
}
printf("%d! = %lld\n", n, fact);
return 0;
}
আউটপুট (n=6):
6! = 720
প্যাটার্ন ৩: while loop
উদাহরণ ৩.১: সংখ্যা অনুমান করার খেলা
#include <stdio.h>
int main() {
int secret = 42;
int guess;
printf("১ থেকে ১০০-এর মধ্যে সংখ্যা অনুমান করো: ");
scanf("%d", &guess);
while (guess != secret) {
if (guess < secret)
printf("বড় বলো! ");
else
printf("ছোট বলো! ");
scanf("%d", &guess);
}
printf("সঠিক!\n");
return 0;
}
উদাহরণ ৩.২: Digit যোগফল
#include <stdio.h>
int main() {
int n, sum = 0;
printf("সংখ্যা দাও: ");
scanf("%d", &n);
while (n > 0) {
sum += n % 10; // শেষ digit যোগ করো
n /= 10; // শেষ digit বাদ দাও
}
printf("Digit যোগফল = %d\n", sum);
return 0;
}
আউটপুট (n=1234):
Digit যোগফল = 10
উদাহরণ ৩.৩: মৌলিক সংখ্যা পরীক্ষা
#include <stdio.h>
int main() {
int n, i = 2, isPrime = 1;
printf("সংখ্যা দাও: ");
scanf("%d", &n);
while (i <= n/2) {
if (n % i == 0) {
isPrime = 0;
break;
}
i++;
}
if (n > 1 && isPrime)
printf("%d মৌলিক সংখ্যা।\n", n);
else
printf("%d মৌলিক সংখ্যা নয়।\n", n);
return 0;
}
প্যাটার্ন ৪: do-while loop
উদাহরণ ৪.১: মেনু প্রোগ্রাম
#include <stdio.h>
int main() {
int choice;
do {
printf("\n--- মেনু ---\n");
printf("1. হ্যালো বলো\n");
printf("2. আমার নাম\n");
printf("3. বের হও\n");
printf("পছন্দ: ");
scanf("%d", &choice);
switch (choice) {
case 1: printf("হ্যালো!\n"); break;
case 2: printf("আমার নাম C প্রোগ্রাম।\n"); break;
case 3: printf("বিদায়!\n"); break;
default: printf("ভুল পছন্দ!\n");
}
} while (choice != 3);
return 0;
}
উদাহরণ ৪.২: সংখ্যা ইনপুট যাচাই
#include <stdio.h>
int main() {
int n;
do {
printf("১ থেকে ১০-এর মধ্যে সংখ্যা দাও: ");
scanf("%d", &n);
if (n < 1 || n > 10)
printf("ভুল! আবার চেষ্টা করো।\n");
} while (n < 1 || n > 10);
printf("ধন্যবাদ! তুমি %d দিয়েছো।\n", n);
return 0;
}
প্যাটার্ন ৫: Nested Loop (লুপের মধ্যে লুপ)
উদাহরণ ৫.১: তারার পিরামিড
#include <stdio.h>
int main() {
int i, j;
for (i = 1; i <= 5; i++) {
for (j = 1; j <= i; j++) {
printf("* ");
}
printf("\n");
}
return 0;
}
আউটপুট:
*
* *
* * *
* * * *
* * * * *
উদাহরণ ৫.২: গুণের ছক (Multiplication Table)
#include <stdio.h>
int main() {
int i, j;
printf(" ");
for (j = 1; j <= 5; j++) printf("%4d", j);
printf("\n ");
for (j = 1; j <= 5; j++) printf("----");
printf("\n");
for (i = 1; i <= 5; i++) {
printf("%2d|", i);
for (j = 1; j <= 5; j++) {
printf("%4d", i * j);
}
printf("\n");
}
return 0;
}
আউটপুট:
1 2 3 4 5
--------------------
1| 1 2 3 4 5
2| 2 4 6 8 10
3| 3 6 9 12 15
4| 4 8 12 16 20
5| 5 10 15 20 25
Module 4: বাস্তব প্রয়োগ
| প্রয়োগ | Loop |
|---|---|
| সকল ছাত্রের নম্বর গণনা | for loop |
| যতক্ষণ না সঠিক পাসওয়ার্ড | while loop |
| মেনু কমপক্ষে একবার দেখানো | do-while |
| Excel-এ সব সেল প্রসেস | nested loop |
| ফাইল শেষ পর্যন্ত পড়া | while loop |
Module 5: সাধারণ ভুল ও সতর্কতা
ভুল ১: Infinite Loop (অসীম লুপ)
❌ ভুল:
int i = 1;
while (i <= 10) {
printf("%d\n", i);
// i++ ভুলে গেছে! চলতেই থাকবে
}
✅ সঠিক:
while (i <= 10) {
printf("%d\n", i);
i++; // অবশ্যই update করো
}
ভুল ২: for loop-এ Semicolon
❌ ভুল:
for (i = 1; i <= 10; i++); // Semicolon! body নেই
{
printf("%d\n", i); // শুধু একবার চলবে, 11 প্রিন্ট হবে
}
✅ সঠিক:
for (i = 1; i <= 10; i++) {
printf("%d\n", i);
}
ভুল ৩: Off-by-one Error
❌ ভুল (১ থেকে ১০ চাইলে):
for (i = 0; i < 10; i++) // 0 থেকে 9 চলবে
✅ সঠিক:
for (i = 1; i <= 10; i++) // 1 থেকে 10
ভুল ৪: do-while-এর শেষে semicolon না দেওয়া
❌ ভুল:
do {
// ...
} while (condition) // Semicolon নেই!
✅ সঠিক:
do {
// ...
} while (condition); // Semicolon বাধ্যতামূলক
Module 6: সুবিধা-অসুবিধা
| Loop | কখন ব্যবহার করবে |
|---|---|
for | কতবার চলবে আগে থেকে জানা থাকলে |
while | কতবার চলবে জানা নেই, শর্তের উপর নির্ভর |
do-while | অন্তত একবার চলতেই হবে |
🔁 নিজে পরীক্ষা করো
MCQ:
১. for (i=1; i<=10; i++) — কতবার চলবে?
- ক) ৯
- খ) ১০ ✓
- গ) ১১
- ঘ) ০
২. do-while loop কমপক্ষে কতবার চলে?
- ক) ০
- খ) ১ ✓
- গ) ২
- ঘ) condition অনুযায়ী
৩. Loop-এর Update অংশ না থাকলে কী হয়?
- ক) Error
- খ) Infinite Loop হতে পারে ✓
- গ) ০ বার চলে
- ঘ) একবার চলে
৪. while (1) — এটা কী ধরনের loop?
- ক) Error
- খ) Infinite Loop ✓
- গ) একবার চলে
- ঘ) শূন্যবার চলে
৫. Nested loop-এ বাইরের loop ৩ বার এবং ভেতরের loop ৪ বার চললে মোট কতবার ভেতরের body চলবে?
- ক) ৭
- খ) ১২ ✓
- গ) ৩
- ঘ) ৪
সংক্ষিপ্ত প্রশ্ন:
৬. for, while, এবং do-while loop-এর পার্থক্য উদাহরণসহ লেখো।
৭. ১ থেকে ৫০ পর্যন্ত সংখ্যাগুলোর মধ্যে ৩ দিয়ে বিভাজ্য সংখ্যাগুলো প্রিন্ট করার প্রোগ্রাম লেখো।
📝 HSC পরীক্ষার প্রস্তুতি
১. for loop এবং while loop কি সবসময় একে অপরের বিকল্প হতে পারে? উদাহরণ দাও।
২. Infinite Loop কি কখনো উপকারী? বাস্তব জীবনে কোথায় ব্যবহার হয়?
৩. Nested Loop-এর সময় জটিলতা (time complexity) কী? ৩টি nested loop থাকলে কী হবে?
🎯 অনুশীলন প্রশ্ন
সহজ: ১ থেকে ১০০ পর্যন্ত সংখ্যা প্রিন্ট করো, কিন্তু ৫ দিয়ে বিভাজ্য সংখ্যাগুলোর পরিবর্তে "Buzz" লেখো।
মাঝারি: Fibonacci sequence-এর প্রথম ১০টি সংখ্যা বের করো: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34...
কঠিন: একটি প্রোগ্রাম লেখো যা প্রথম ১০টি মৌলিক সংখ্যা বের করে। (২, ৩, ৫, ৭, ১১, ১৩, ১৭, ১৯, ২৩, ২৯)
✅ সারাংশ
🎯 মনে রেখো:
- Loop = একই কাজ বারবার করার পদ্ধতি
- ৩ ধরনের Loop:
for→ কতবার জানা থাকলে (counter-based)while→ শর্তের উপর নির্ভর (condition-based)do-while→ অন্তত একবার চলতে হলে
- Loop-এর ৪ অংশ: Initialization, Condition, Body, Update
- Update না দিলে → Infinite Loop (বিপদ!)
forloop-এর পর Semicolon দিলে → body শূন্যdo-while-এর শেষে Semicolon বাধ্যতামূলক
💡 পরীক্ষার টিপস: যোগফল, গুণফল (Factorial), গুণের তালিকা, তারার প্যাটার্ন — এগুলো HSC-তে প্রায়ই আসে। for loop দিয়ে সমাধান করাই সহজ।