লুপিং স্ট্রাকচার: পুনরাবৃত্তি ও ধারার প্রোগ্রাম

সি প্রোগ্রামিং লুপ: for, while, do-while লুপের ব্যবহার। ধারার যোগফল (Series), ফ্যাক্টরিয়াল নির্ণয়, নেস্টেড লুপ এবং break/continue এর ব্যবহার।

শেখা শুরু করুন

অধ্যায় ৫: প্রোগ্রামিং ভাষা - লুপিং স্ট্রাকচার ও ধারার প্রোগ্রাম

  1. লুপিং স্ট্রাকচার: পুনরাবৃত্তি ও ধারার প্রোগ্রাম
  2. লুপের প্রয়োজনীয়তা: একটি চিন্তা
  3. লুপ (Loop) কী এবং এর উপাদান
  4. for লুপ: গঠন ও উদাহরণ
  5. while লুপ: শর্ত যখন প্রধান
  6. do-while লুপ: কাজ আগে, শর্ত পরে
  7. ধারার যোগফল নির্ণয় (Series Sum)
  8. বিভিন্ন ধারার কোডিং
  9. ফ্যাক্টরিয়াল (Factorial) নির্ণয়
  10. নেস্টেড লুপ (Nested Loop)
  11. লুপ কন্ট্রোল: break এবং continue
  12. সারসংক্ষেপ: যা শিখলাম

লুপিং স্ট্রাকচার: পুনরাবৃত্তি ও ধারার প্রোগ্রাম

এই লেকচার শেষে আমরা-

১। লুপ বা পুনরাবৃত্তিমূলক কাজের ধারণা ব্যাখ্যা করতে পারব।
২। for, while এবং do-while লুপ ব্যবহার করে সি প্রোগ্রাম লিখতে পারব।
৩। ব্রেক (break) ও কন্টিনিউ (continue) স্টেটমেন্টের ব্যবহার বিশ্লেষণ করতে পারব।
৪। বিভিন্ন সমান্তর ধারা ও ফ্যাক্টরিয়াল নির্ণয়ের প্রোগ্রাম তৈরি করতে পারব।

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

লুপের প্রয়োজনীয়তা: একটি চিন্তা

সমস্যা:
তোমাকে বলা হলো 'I Love ICT' কথাটি ১০০০ বার মনিটরে প্রিন্ট করতে।

তোমার সমাধান কী হবে?
১. ১০০০ বার printf() ফাংশন লিখবে?
২. নাকি মাত্র ৩ লাইনের একটি কোড লিখবে?

লুপের সুবিধা:
* একই কাজ বারবার করতে হয় না।
* সময় ও মেমোরি সাশ্রয় হয়।
* কোড ছোট ও সুন্দর হয়।

একটু চিন্তা করো তো, আমি যদি তোমাকে বলি 'I Love ICT' এই বাক্যটা ১০০০ বার লিখতে, তুমি কী করবে? তুমি কি ১০০০ বার কপি-পেস্ট করবে? নাকি ১০০০ বার `printf` লিখবে? এটা করতে গেলে তো তোমার হাত ব্যথা হয়ে যাবে, আর সময়ও নষ্ট হবে প্রচুর। কিন্তু একজন স্মার্ট প্রোগ্রামার হিসেবে তুমি এটা মাত্র ৩ লাইনের কোড দিয়ে করতে পারো। এটাই হলো লুপের যাদু। লুপ আমাদের একই কাজ বারবার করার কষ্ট থেকে মুক্তি দেয়। ছবিতে দেখো, ম্যানুয়ালি কাজ করা কত কষ্টের, আর লুপ ব্যবহার করে কাজটা কত সহজ!

লুপ (Loop) কী এবং এর উপাদান

লুপের সংজ্ঞা:
শর্ত সাপেক্ষে একই কাজ বারবার করাকে প্রোগ্রামিংয়ের ভাষায় লুপিং (Looping) বলে।

লুপের ৪টি প্রধান অংশ:
১. Initialization (শুরু): লুপ কোথা থেকে শুরু হবে। (যেমন: i = 1)
২. Condition (শর্ত): লুপ কতক্ষণ চলবে। (যেমন: i <= 10)
৩. Body (কাজ): লুপের ভেতরে কী কাজ হবে। (যেমন: printf)
৪. Update/Counter (ধাপ): প্রতিবার মান কত করে বাড়বে বা কমবে। (যেমন: i++)

তাহলে লুপ জিনিসটা আসলে কী? সোজা কথায়, একটা নির্দিষ্ট শর্ত পূরণ না হওয়া পর্যন্ত একই কাজ বারবার করাই হলো লুপ। একটা লুপের জীবনচক্রে প্রধানত ৪টি ধাপ থাকে। পাশের ডায়াগ্রামটা খেয়াল করো। প্রথমে 'Initialization' বা শুরু, যেখানে আমরা ঠিক করি লুপটা কোথা থেকে যাত্রা শুরু করবে। তারপর আসে 'Condition' বা শর্ত, যেটা চেক করে লুপটা আর চলবে কি না। যদি শর্ত সত্য হয়, তবে লুপের 'Body' বা ভেতরের কাজটা এক্সিকিউট হয়। সবশেষে 'Update', যেখানে আমরা ভেরিয়েবলের মান বাড়াই বা কমাই। এই চক্রটা চলতেই থাকে যতক্ষণ না শর্ত মিথ্যা হয়।

for লুপ: গঠন ও উদাহরণ

সবচেয়ে বেশি ব্যবহৃত লুপ হলো for loop

সিনট্যাক্স:

for (initialization; condition; update) {
    // body (statements)
}

উদাহরণ (১ থেকে ৫ প্রিন্ট করা):

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

আউটপুট: 1 2 3 4 5

প্রোগ্রামিংয়ে সবচেয়ে জনপ্রিয় লুপ হলো 'for loop'। কেন জানো? কারণ এর গঠনটা খুব গোছানো। এক লাইনের মধ্যেই তুমি শুরু, শর্ত এবং আপডেট—সব বলে দিতে পারো। কোডটা দেখো। `for(i = 1; i <= 5; i++)`। এর মানে হলো, i এর মান ১ থেকে শুরু হবে (এটা Initialization)। তারপর চেক করবে i কি ৫ এর সমান বা ছোট? (এটা Condition)। যদি হ্যাঁ হয়, তবে `printf` কাজ করবে। কাজ শেষে i এর মান ১ বাড়বে (এটা Update)। এভাবে ১, ২, ৩, ৪, ৫ প্রিন্ট হবে। যখন i এর মান ৬ হবে, তখন শর্ত মিথ্যা হয়ে যাবে এবং লুপ থেমে যাবে।

while লুপ: শর্ত যখন প্রধান

গঠন:

initialization;
while (condition) {
    // body
    update;  // আপডেট বডির ভেতরে থাকে
}

উদাহরণ:

int i = 1;          // Initialization
while (i <= 5) {    // Condition
    printf("%d ", i);
    i++;            // Update
}

⚠️ সতর্কতা: লুপের ভেতরে update (যেমন i++) না দিলে এটি Infinite Loop হয়ে যাবে এবং প্রোগ্রাম হ্যাং করবে।

এবার আসি 'while loop' এ। While লুপ দেখতে for লুপের চেয়ে একটু আলাদা। এখানে Initialization লুপের বাইরে থাকে। আর `while` এর ব্র্যাকেটের ভেতর শুধু শর্ত বা Condition থাকে। আপডেট অংশটা থাকে লুপের বডির ভেতরে। খেয়াল করো, `i++` বা আপডেট লাইনটা যদি ভুলে যাও, তাহলে কী হবে জানো? `i` এর মান সবসময় ১-ই থেকে যাবে, শর্ত সবসময় সত্য থাকবে, আর লুপ চলতেই থাকবে—কখনও থামবে না। এটাকে বলে 'ইনফিনিটি লুপ'। কম্পিউটার হ্যাং করার জন্য এটা যথেষ্ট! তাই while লুপ ব্যবহারের সময় খুব সাবধান থাকবে।

do-while লুপ: কাজ আগে, শর্ত পরে

গঠন:

do {
    // body
    update;
} while (condition);

বৈশিষ্ট্য:
* শর্ত মিথ্যা হলেও অন্তত ১ বার বডি এক্সিকিউট (Run) হয়।
* একে Exit Controlled Loop বলে।
* শেষে সেমিকোলন (;) দিতে হয়।

তুলনা: while লুপ গেটে চেকিং করে (Entry Control), আর do-while লুপ কাজ শেষে চেকিং করে (Exit Control)।

মাঝেমধ্যে এমন দরকার হয় যে, শর্ত যাই হোক না কেন, কাজটা অন্তত একবার করতেই হবে। তখন আমরা ব্যবহার করি 'do-while loop'। এর বিশেষত্ব হলো, এটি আগে কাজ করে, তারপর শর্ত চেক করে। অনেকটা রেস্টুরেন্টে খাওয়ার মতো—আগে খাও, পরে বিল দাও। পাশের চিত্রে দেখো, while লুপে শর্ত বা ডায়মন্ড বক্সটা শুরুতে, কিন্তু do-while এ সেটা শেষে। মনে রাখবে, do-while এর শেষে একটা সেমিকোলন দিতে হয়, যেটা অন্য লুপে লাগে না। পাসওয়ার্ড চেকিং বা গেম মেনুর ক্ষেত্রে এই লুপ খুব কাজে লাগে।

ধারার যোগফল নির্ণয় (Series Sum)

সমস্যা: $1 + 2 + 3 + ... + N$ ধারার যোগফল বের করা।

লজিক (অ্যাকুমুলেটর পদ্ধতি):
১. একটি ফাঁকা পাত্র বা ভেরিয়েবল নাও: sum = 0
২. লুপ চালাও ১ থেকে N পর্যন্ত।
৩. প্রতিবার লুপের মান পাত্রে যোগ করো: sum = sum + i

Trace Table:
লুপের প্রতি ধাপে sum এর মান কীভাবে বাড়ছে তা পাশের টেবিলে দেখানো হলো।

লুপের সবচেয়ে গুরুত্বপূর্ণ ব্যবহার হলো ধারার যোগফল বের করা। ধরো তোমাকে ১ থেকে ১০০ পর্যন্ত যোগ করতে বলা হলো। আমরা একটা ভেরিয়েবল নেব, ধরো `sum`, এবং শুরুতে এর মান রাখব ০। এটাকে একটা ফাঁকা ঝুড়ির সাথে তুলনা করতে পারো। এরপর লুপ ঘুরবে, আর প্রতিবার `i` এর মান ওই ঝুড়িতে যোগ করবে। সূত্রটা হলো `sum = sum + i`। পাশের ট্রেস টেবিলটা ভালো করে দেখো। শুরুতে i=1, তাই sum হলো 0+1=1। পরের বার i=2, তাই sum হলো আগের 1 এর সাথে 2 যোগ করে 3। এভাবে প্রতি ধাপে আগের যোগফলের সাথে নতুন সংখ্যা যোগ হতে থাকে।

বিভিন্ন ধারার কোডিং

১. বিজোড় সংখ্যার যোগফল ($1 + 3 + 5 + ... + N$):
পরিবর্তন শুধু আপডেট অংশে। ১ করে না বেড়ে ২ করে বাড়বে।

for(i = 1; i <= n; i = i + 2) {
    sum = sum + i;
}

২. বর্গের যোগফল ($1^2 + 2^2 + 3^2 + ... + N^2$):
পরিবর্তন যোগ করার সময়ে। সংখ্যাটি যোগ না করে, তার বর্গ যোগ করতে হবে।

for(i = 1; i <= n; i++) {
    sum = sum + (i * i);
}

সব ধারা কিন্তু ১, ২, ৩ করে বাড়ে না। যেমন বিজোড় সংখ্যার ধারা: ১, ৩, ৫... এখানে প্রতি পদের পার্থক্য ২। তাহলে আমাদের লুপে কী পরিবর্তন করতে হবে? ঠিক ধরেছ! আপডেট অংশে `i++` এর বদলে `i = i + 2` দিলেই হবে। আবার যদি বর্গের ধারা হয়, মানে ১ স্কয়ার, ২ স্কয়ার... তখন লুপের ইনক্রিমেন্ট ঠিকই থাকবে, কিন্তু যোগ করার সময় আমরা শুধু `i` যোগ না করে `i * i` যোগ করব। অর্থাৎ, লজিক বুঝলে তুমি যেকোনো ধারার প্রোগ্রাম করতে পারবে।

ফ্যাক্টরিয়াল (Factorial) নির্ণয়

গাণিতিক সূত্র: $5! = 1 \times 2 \times 3 \times 4 \times 5 = 120$

প্রোগ্রামিং লজিক:
১. যোগফলের মতো, কিন্তু গুণ করতে হবে।
২. Initialize: fact = 1 (সতর্কতা: ০ দিলে গুণফল ০ হয়ে যাবে!)
৩. সূত্র: fact = fact * i

কোড:

long long fact = 1;
for(i = 1; i <= n; i++) {
    fact = fact * i;
}

ফ্যাক্টরিয়াল বের করা অনেকটা যোগফলের মতোই, শুধু চিহ্নের তফাত—এখানে গুণ করতে হয়। কিন্তু একটা বিশাল সাবধানতা আছে! যোগফলের সময় আমরা `sum = 0` ধরেছিলাম। কিন্তু গুণের সময় যদি `fact = 0` ধরো, তাহলে কী হবে? শূন্য দিয়ে যাকেই গুণ করো, সব শূন্য হয়ে যাবে! তাই গুণের ধারায় বা ফ্যাক্টরিয়ালে সবসময় শুরুর মান বা Initial Value ধরতে হয় ১। আর যেহেতু ফ্যাক্টরিয়ালের মান খুব দ্রুত বড় হয়ে যায়, তাই বড় সংখ্যার জন্য `int` এর বদলে `long long` ব্যবহার করা নিরাপদ।

নেস্টেড লুপ (Nested Loop)

সংজ্ঞা: একটি লুপের ভেতরে আরেকটি লুপ থাকলে তাকে নেস্টেড লুপ বলে।

ব্যবহার:
* প্যাটার্ন প্রিন্টিং (যেমন: * এর পিরামিড)
* ম্যাট্রিক্স বা ২D অ্যারে প্রসেসিং

উদাহরণ:

for(row=1; row<=3; row++) {      // Outer Loop
    for(col=1; col<=3; col++) {  // Inner Loop
        printf("* ");
    }
    printf("\n");
}

ব্যাখ্যা: বাইরের লুপ ১ বার ঘুরলে, ভেতরের লুপ পুরো ৩ বার ঘোরে।

নেস্টেড লুপ কনসেপ্টটা একটু ট্রিকি কিন্তু মজার। সহজ কথায়, লুপের পেটের ভেতর আরেকটা লুপ। ঘড়ির কাঁটার কথা চিন্তা করো—মিনিটের কাঁটাটা (ভেতরের লুপ) পুরো ৬০ বার ঘুরলে তবেই ঘণ্টার কাঁটা (বাইরের লুপ) ১ ঘর নড়ে। এখানেও তাই। বাইরের লুপের প্রতি ১ বারের জন্য ভেতরের লুপ পুরোটা কমপ্লিট হয়। পাশের ছবিতে দেখো, সারি বা Row নিয়ন্ত্রণ করছে বাইরের লুপ, আর কলাম বা Column নিয়ন্ত্রণ করছে ভেতরের লুপ। স্টার প্রিন্ট বা প্যাটার্ন তৈরির জন্য এটা অপরিহার্য।

লুপ কন্ট্রোল: break এবং continue

Break (ব্রেক):
* লুপকে জোর করে থামিয়ে দেয়।
* উদাহরণ: ১-১০০ প্রিন্ট করার সময় ৫০ পেলে থেমে যাওয়া।

Continue (কন্টিনিউ):
* বর্তমান ধাপ (iteration) স্কিপ করে পরের ধাপে যায়।
* উদাহরণ: ১-১০ প্রিন্ট করার সময় ৫ স্কিপ করা (আউটপুট: ১ ২ ৩ ৪ ৬...)।

ব্যবহার: অসীম লুপ থামানো, নির্দিষ্ট শর্ত বাদ দেয়া।

লুপ তো বুঝলাম, কিন্তু মাঝপথে লুপ থামাবো কীভাবে? বা কোনো একটা নির্দিষ্ট ধাপ বাদ দেব কীভাবে? এর জন্য আছে `break` এবং `continue`। `break` হলো গাড়ির ইমার্জেন্সি ব্রেকের মতো—চাপ দিলেই লুপ ওখানেই শেষ, প্রোগ্রাম লুপ থেকে বেরিয়ে যাবে। আর `continue` হলো একটু স্মার্ট—এটা পুরো লুপ থামায় না, শুধু বর্তমান রাউন্ডটা স্কিপ করে পরের রাউন্ডে চলে যায়। ধরো তুমি ১ থেকে ১০ পর্যন্ত প্রিন্ট করছ, কিন্তু ৫ প্রিন্ট করতে চাও না। তখন `if(i==5) continue;` দিলেই ৫ স্কিপ হয়ে যাবে, কিন্তু ৬, ৭ ঠিকই প্রিন্ট হবে।

সারসংক্ষেপ: যা শিখলাম

১। লুপ একই কাজ বারবার করতে সাহায্য করে (Time & Space Efficient)।
২। for লুপ নির্দিষ্ট সংখ্যক বার ঘোরার জন্য সেরা।
৩। while এবং do-while লুপ শর্তের ওপর ভিত্তি করে চলে।
৪। ধারার যোগফলে sum=0 এবং ফ্যাক্টরিয়ালে fact=1 ইনিশialize করতে হয়।
৫। break লুপ থামায়, continue ধাপ স্কিপ করে।

আজকের ক্লাসে আমরা অনেক কিছু শিখলাম। আমরা দেখলাম লুপ কীভাবে আমাদের কাজ সহজ করে দেয়। আমরা জানলাম `for`, `while` এবং `do-while` লুপের পার্থক্য—কখন কোনটা ব্যবহার করতে হয়। ধারার যোগফল আর ফ্যাক্টরিয়ালের লজিকটা কিন্তু খুব ভালো করে মনে রাখবে—বিশেষ করে `sum=0` আর `fact=1` এর ব্যাপারটা। আর নেস্টেড লুপ ও ব্রেক-কন্টিনিউ এর ব্যবহার তো দেখলামই। এই কোডগুলো বাসায় অবশ্যই প্র্যাকটিস করবে। লুপের কনসেপ্ট ক্লিয়ার থাকলে প্রোগ্রামিং তোমার কাছে পানির মতো সহজ মনে হবে। ধন্যবাদ সবাইকে!

লুপিং স্ট্রাকচার: পুনরাবৃত্তি ও ধারার প্রোগ্রাম

পড়তে প্রায় 20 মিনিট

লুপিং স্ট্রাকচার: পুনরাবৃত্তি ও ধারার প্রোগ্রাম

কম্পিউটার প্রোগ্রামিংয়ের অন্যতম প্রধান শক্তি হলো কোনো কাজ বা নির্দেশ দ্রুত এবং নির্ভুলভাবে বারবার সম্পাদন করা। যদি তোমাকে বলা হয় "I Love ICT" লেখাটি ১০০০ বার খাতায় লিখতে, তবে এটি তোমার জন্য অত্যন্ত বিরক্তিকর এবং সময়সাপেক্ষ কাজ হবে। কিন্তু কম্পিউটারের জন্য এটি মাত্র কয়েক মিলিসেকেন্ডের ব্যাপার। এই পুনরাবৃত্তিমূলক কাজ করার প্রক্রিয়াকেই প্রোগ্রামিংয়ের ভাষায় লুপিং (Looping) বলা হয়।

লুপ ব্যবহার করে আমরা স্যালারি শিট তৈরি, ডিজিটাল ঘড়ি বা টাইমার, এবং গাণিতিক ধারার (Series) মতো জটিল সমস্যাগুলো খুব সহজে সমাধান করতে পারি। আজকের এই পাঠে আমরা সি ল্যাঙ্গুয়েজের লুপিং স্ট্রাকচার, এর প্রকারভেদ এবং ধারার প্রোগ্রামের লজিক সম্পর্কে বিস্তারিত জানব।

লুপ কন্ট্রোল স্টেটমেন্ট: গভীর আলোচনা

প্রোগ্রামিংয়ে লুপ সঠিকভাবে কাজ করার জন্য এর গঠন বা স্ট্রাকচার বোঝা খুব জরুরি। একটি আদর্শ লুপের মূলত ৪টি অংশ থাকে। যদি এর কোনো একটি অংশ ভুল হয়, তবে লুপটি ঠিকমতো কাজ করবে না অথবা অসীম লুপ (Infinite Loop)-এ পরিণত হবে।

সংজ্ঞা (Definition): লুপ (Loop) — প্রোগ্রামের কোনো নির্দিষ্ট অংশ বা স্টেটমেন্ট ব্লক একটি নির্দিষ্ট শর্ত পূরণ না হওয়া পর্যন্ত বারবার পুনরাবৃত্তি করাকে লুপিং বা ইটারেশন (Iteration) বলে।

লুপের ৪টি প্রধান অংশ
  1. ইনিশিয়ালাইজেশন (Initialization): লুপ কোথা থেকে শুরু হবে তা নির্ধারণ করা। এখানে একটি ভেরিয়েবলের (যাকে কাউন্টার বলা হয়) প্রাথমিক মান সেট করা হয়। যেমন: i = 1;
  2. কন্ডিশন (Condition): এটি একটি লজিক্যাল শর্ত যা যাচাই করে লুপটি চলবে কি না। শর্ত সত্য (True) হলে লুপের বডি কাজ করে, আর মিথ্যা (False) হলে লুপ বন্ধ হয়ে যায়। যেমন: i <= 10;
  3. বডি (Body): লুপের ভেতরে থাকা স্টেটমেন্টগুলো যা বারবার এক্সিকিউট বা রান হয়। যেমন: printf("ICT");
  4. ইনক্রিমেন্ট/ডিক্রিমেন্ট (Increment/Decrement): প্রতিবার লুপ চলার পর কাউন্টার ভেরিয়েবলের মান বাড়ানো বা কমানো। এটি না থাকলে কন্ডিশন কখনোই মিথ্যা হবে না এবং লুপ অনন্তকাল চলতে থাকবে। যেমন: i++ বা i = i + 1;

গুরুত্বপূর্ণ (Important):
- Loop Control Variable: যে ভেরিয়েবলটির মান পরিবর্তনের মাধ্যমে লুপ নিয়ন্ত্রণ করা হয় (যেমন: i), তাকে লুপ কন্ট্রোল ভেরিয়েবল বা কাউন্টার ভেরিয়েবল বলে।
- লুপের শর্ত সবসময় সত্য থাকলে তাকে Infinite Loop বলে। প্রোগ্রাম হ্যাং করার অন্যতম কারণ এটি।


লুপের প্রকারভেদ ও তুলনামূলক বিশ্লেষণ

সি ল্যাঙ্গুয়েজে প্রধানত ৩ ধরনের লুপ ব্যবহৃত হয়। প্রতিটি লুপের কাজ করার পদ্ধতি কিছুটা ভিন্ন হলেও মূল উদ্দেশ্য একই।

১. For Loop

যখন আমরা আগে থেকেই জানি যে লুপটি ঠিক কতবার ঘুরবে, তখন for লুপ ব্যবহার করা সবচেয়ে সুবিধাজনক। এর গঠন খুব গোছানো কারণ এক লাইনেই ইনিশিয়ালাইজেশন, কন্ডিশন এবং ইনক্রিমেন্ট থাকে।

Syntax:

for (initialization; condition; update) {
    // Body of the loop
}
২. While Loop

এটি একটি Entry Controlled Loop। লুপের বডিতে ঢোকার আগেই কন্ডিশন চেক করা হয়। যদি কন্ডিশন শুরুতেই মিথ্যা হয়, তবে লুপটি একবারও কাজ করবে না। যখন ইটারেশন সংখ্যা অজানা থাকে কিন্তু কন্ডিশন জানা থাকে, তখন এটি ব্যবহার করা হয়।

Syntax:

initialization;
while (condition) {
    // Body
    update;
}
৩. Do-While Loop

এটি একটি Exit Controlled Loop। এখানে আগে লুপের বডি একবার কাজ করে এবং পরে কন্ডিশন চেক করা হয়। তাই কন্ডিশন মিথ্যা হলেও এই লুপটি অন্তত একবার কাজ করবেই।

Syntax:

initialization;
do {
    // Body
    update;
} while (condition); // Note the semicolon!
পার্থক্য: While Loop বনাম Do-While Loop | বৈশিষ্ট্য | While Loop | Do-While Loop | | :--- | :--- | :--- | | **কন্ট্রোল** | Entry Controlled (প্রবেশ নিয়ন্ত্রিত)। | Exit Controlled (নির্গমন নিয়ন্ত্রিত)। | | **শর্ত যাচাই** | লুপের শুরুতে শর্ত যাচাই করে। | লুপের শেষে শর্ত যাচাই করে। | | **মিনিমাম এক্সিকিউশন** | শর্ত মিথ্যা হলে একবারও চলে না (0 বার)। | শর্ত মিথ্যা হলেও অন্তত একবার চলে (1 বার)। | | **সিনট্যাক্স** | শেষে সেমিকোলন (;) থাকে না। | শেষে অবশ্যই সেমিকোলন (;) দিতে হয়। |

পরীক্ষার টিপস (Exam Tip): পরীক্ষায় প্রায়ই প্রশ্ন আসে "while লুপকে do-while লুপে রূপান্তর করো" অথবা কোড লিখে আউটপুট বের করতে বলা হয়। মনে রাখবে, do-while লুপের শেষে সেমিকোলন না দিলে সিনট্যাক্স ইরর (Syntax Error) হবে।


ব্রেক ও কন্টিনিউ (Break & Continue)

লুপ চলার সময় মাঝপথে লুপ থামানো বা কোনো নির্দিষ্ট স্টেপ বাদ দেওয়ার জন্য break এবং continue স্টেটমেন্ট ব্যবহৃত হয়।

Break Statement

এটি লুপকে তাৎক্ষণিকভাবে বন্ধ (terminate) করে দেয় এবং কন্ট্রোল লুপের বাইরে নিয়ে আসে।

উদাহরণ (Example): Break
যদি আমরা ১ থেকে ১০ পর্যন্ত প্রিন্ট করতে চাই কিন্তু ৫ এ পৌঁছালে লুপ থামাতে চাই:

for(i=1; i<=10; i++) {
    if(i == 5) {
        break; // ৫ হলে লুপ ভেঙে যাবে
    }
    printf("%d ", i);
}

Output: 1 2 3 4

Continue Statement

এটি লুপের বর্তমান ইটারেশন বা ধাপটিকে স্কিপ (skip) করে এবং পরবর্তী ধাপে চলে যায়। এটি লুপ থেকে বের হয় না, শুধু ওই নির্দিষ্ট বারের কাজ বাদ দেয়।

উদাহরণ (Example): Continue
যদি আমরা ১ থেকে ৫ পর্যন্ত প্রিন্ট করতে চাই কিন্তু ৩ প্রিন্ট করতে না চাই:

for(i=1; i<=5; i++) {
    if(i == 3) {
        continue; // ৩ প্রিন্ট না করে পরের ধাপে যাবে
    }
    printf("%d ", i);
}

Output: 1 2 4 5


ধারার প্রোগ্রাম ও অ্যালগরিদম (Series Programs)

পরীক্ষায় সবচেয়ে বেশি প্রশ্ন আসে ধারার যোগফল নির্ণয় থেকে। ধারা বা সিরিজ সমাধানের জন্য আমাদের দুটি বিশেষ ভেরিয়েবল বুঝতে হবে:
১. Counter Variable (i): যা ধারার পদ বা সংখ্যাগুলো তৈরি করে (যেমন: ১, ২, ৩...)।
২. Accumulator Variable (sum): যা যোগফল জমা রাখে।

A visual representation showing loop accumulation logic

১. স্বাভাবিক সংখ্যার যোগফল (1 + 2 + 3 + ... + N)

এখানে প্রতি পদের পার্থক্য ১। তাই i এর মান ১ করে বাড়বে (i++) এবং sum এর সাথে যোগ হবে।

Logic:

sum = 0; // যোগফলের প্রাথমিক মান ০ হতে হয়
for (i = 1; i <= n; i++) {
    sum = sum + i;
}
printf("Sum = %d", sum);
২. বর্গের ধারা (1² + 2² + 3² + ... + N²)

এখানে পদগুলো বর্গের আকারে আছে। তাই যোগ করার সময় i*i যোগ করতে হবে।

Logic:

sum = sum + (i * i);
৩. চিহ্ন পরিবর্তনশীল ধারা (1 - 2 + 3 - 4 + ... + N)

এই ধারায় বিজোড় পদগুলো পজিটিভ (+) এবং জোড় পদগুলো নেগেটিভ (-)। এটি সমাধানের জন্য if-else অথবা গাণিতিক লজিক ব্যবহার করা যায়।

লজিক (Logic):

for (i = 1; i <= n; i++) {
    if (i % 2 == 0) {
        sum = sum - i; // জোড় হলে বিয়োগ
    } else {
        sum = sum + i; // বিজোড় হলে যোগ
    }
}

নেস্টেড লুপ (Nested Loop)

একটি লুপের ভেতরে যখন অন্য একটি লুপ ব্যবহার করা হয়, তাকে নেস্টেড লুপ বলে। ম্যাট্রিক্স বা প্যাটার্ন (Pattern) প্রিন্টিংয়ের জন্য এটি ব্যবহৃত হয়।

গঠন:

for (outer_counter; condition; update) {      // সারি (Row) নিয়ন্ত্রণ করে
    for (inner_counter; condition; update) {  // কলাম (Column) নিয়ন্ত্রণ করে
        // Statement
    }
}

গুরুত্বপূর্ণ (Important): নেস্টেড লুপে বাইরের লুপের (Outer Loop) প্রতি ১ বার ঘোরার জন্য ভেতরের লুপটি (Inner Loop) সম্পূর্ণ একবার ঘুরে আসে। অর্থাৎ, বাইরের লুপ যদি ৩ বার এবং ভেতরের লুপ যদি ৫ বার চলে, তবে ভেতরের স্টেটমেন্ট মোট $3 \times 5 = 15$ বার কাজ করবে।


সংক্ষিপ্ত সারাংশ (Quick Revision)

মনে রাখার মূল বিষয়:
- ইনিশিয়ালাইজেশন: লুপ শুরুর মান। while লুপে এটি লুপের বাইরে থাকে।
- সেমিকোলন: for এবং while এর শেষে সেমিকোলন হয় না, কিন্তু do-while এর শেষে অবশ্যই সেমিকোলন (;) দিতে হয়।
- ইনফিনিটি লুপ: লুপের কন্ডিশন মিথ্যা না হলে লুপ থামে না, একে অসীম লুপ বলে। Ctrl + C চেপে এটি থামানো যায়।
- ধারা বা সিরিজ: যোগফলের জন্য sum = 0 এবং গুণফলের (যেমন ফ্যাক্টরিয়াল) জন্য fact = 1 দিয়ে শুরু করতে হয়।
- ব্রেক vs কন্টিনিউ: break লুপ থেকে বের করে দেয়, continue শুধু বর্তমান ধাপ স্কিপ করে।

পরিভাষা (Glossary)

পরিভাষা (Term) সংজ্ঞা (Definition)
Iteration লুপের একবার সম্পূর্ণ ঘূর্ণন বা পুনরাবৃত্তি।
Infinite Loop যে লুপের শর্ত কখনোই মিথ্যা হয় না এবং চলতেই থাকে।
Counter যে চলক লুপ কতবার ঘুরবে তা গণনা করে বা নিয়ন্ত্রণ করে।
Accumulator যে চলকে ধারার যোগফল বা গুণফল জমা রাখা হয় (যেমন: sum, fact)।
Nested Loop একটি লুপের ভেতরে অবস্থিত অন্য একটি লুপ।

অনুশীলনের প্রশ্ন

সৃজনশীল প্রশ্ন

সৃজনশীল প্রশ্ন ১

আইসিটি ক্লাসে শিক্ষক বোর্ডে ১ + ২ + ৩ + ... + ১০০ এবং ১^২ + ২^২ + ... + N^২ দুটি ধারা লিখলেন। তিনি শিক্ষার্থীদের বললেন, "প্রোগ্রামিংয়ে একই কাজ বারবার করার জন্য লুপ ব্যবহার করতে হয়।" এরপর তিনি ধারা দুটির সমাধান করার কৌশল নিয়ে আলোচনা করলেন।

ক) লুপ (Loop) কী?
খ) for লুপ এবং while লুপের মধ্যে দুটি মূল পার্থক্য লিখ।
গ) উদ্দীপকের প্রথম ধারাটির যোগফল নির্ণয়ের জন্য for লুপ ব্যবহার করে একটি সি প্রোগ্রাম লিখ।
ঘ) উদ্দীপকের দ্বিতীয় ধারাটির (বর্গের সমষ্টি) জন্য একটি ফ্লোচার্ট অঙ্কন কর এবং while লুপ ব্যবহার করে প্রোগ্রামটি লিখ।

উত্তর

(ক) লুপ (Loop) হলো প্রোগ্রামিংয়ের এমন একটি কন্ট্রোল স্ট্রাকচার যা নির্দিষ্ট শর্ত সত্য থাকা পর্যন্ত একই বা একাধিক স্টেটমেন্ট বারবার সম্পাদন বা পুনরাবৃত্তি করে।

(খ) for লুপ এবং while লুপের মধ্যে পার্থক্য:
১. গঠন: for লুপে ইনিশিয়ালাইজেশন, কন্ডিশন এবং ইনক্রিমেন্ট/ডিক্রিমেন্ট সাধারণত এক লাইনেই থাকে। কিন্তু while লুপে কন্ডিশন শুরুতে থাকে এবং ইনিশিয়ালাইজেশন লুপের আগে ও ইনক্রিমেন্ট/ডিক্রিমেন্ট লুপের বডির ভেতরে থাকে।
২. ব্যবহার: যখন পুনরাবৃত্তির সংখ্যা নির্দিষ্ট থাকে তখন for লুপ বেশি উপযোগী। আর যখন পুনরাবৃত্তির সংখ্যা অজানা থাকে বা কোনো নির্দিষ্ট শর্তের ওপর নির্ভর করে তখন while লুপ ব্যবহার করা সুবিধাজনক।

(গ) উদ্দীপকের প্রথম ধারাটি হলো ১ + ২ + ৩ + ... + ১০০। এটি ১ থেকে ১০০ পর্যন্ত স্বাভাবিক সংখ্যার যোগফল। নিচে for লুপ ব্যবহার করে সি প্রোগ্রামটি দেওয়া হলো:

#include <stdio.h>

int main() {
    int i, sum = 0;

    // ১ থেকে ১০০ পর্যন্ত লুপ চলবে
    for (i = 1; i <= 100; i++) {
        sum = sum + i; // যোগফল নির্ণয়
    }

    printf("ধারাটির যোগফল: %d\n", sum);

    return 0;
}

(ঘ) উদ্দীপকের দ্বিতীয় ধারাটি হলো ১^২ + ২^২ + ... + N^২। এটি ১ থেকে N পর্যন্ত সংখ্যার বর্গের সমষ্টি।

ফ্লোচার্ট:
১. শুরু (Start)
২. ইনপুট N গ্রহণ
৩. sum = 0, i = 1 সেট করা
৪. i <= N ?
- হ্যাঁ হলে: sum = sum + (i * i) এবং i = i + 1, তারপর আবার ধাপ ৪-এ ফিরে যাওয়া।
- না হলে: ফলাফল sum ছাপানো।
৫. শেষ (End)

while লুপ ব্যবহার করে সি প্রোগ্রাম:

#include <stdio.h>

int main() {
    int i, N, sum = 0;

    printf("N এর মান দিন: ");
    scanf("%d", &N);

    i = 1; // ইনিশিয়ালাইজেশন

    while (i <= N) { // শর্ত
        sum = sum + (i * i); // বর্গের যোগফল
        i++; // ইনক্রিমেন্ট
    }

    printf("বর্গের সমষ্টি: %d\n", sum);

    return 0;
}

সৃজনশীল প্রশ্ন ২

রনি সি ভাষায় একটি প্রোগ্রাম লিখল যা একটি পূর্ণসংখ্যা ইনপুট নেয় এবং সেটি মৌলিক (Prime) কি না তা যাচাই করে। লুপের পুনরাবৃত্তি কমানোর জন্য সে একটি বিশেষ স্টেটমেন্ট ব্যবহার করল, যার ফলে শর্ত পূরণ হওয়ার সাথে সাথেই লুপটি বন্ধ হয়ে যায়। তার বন্ধু জনি একই প্রোগ্রাম লিখল কিন্তু সেই বিশেষ স্টেটমেন্টটি ব্যবহার করল না।

ক) নেস্টেড লুপ (Nested Loop) কী?
খ) break এবং continue স্টেটমেন্টের কাজ ব্যাখ্যা কর।
গ) রনির মৌলিক সংখ্যা নির্ণয়ের লজিকটি ব্যাখ্যা কর এবং প্রোগ্রামটি লিখ।
ঘ) যদি রনি break ব্যবহার না করত তবে প্রোগ্রামের দক্ষতায় (Efficiency) কী প্রভাব পড়ত? বিশ্লেষণ কর।

উত্তর

(ক) একটি লুপের ভেতরে যদি অন্য এক বা একাধিক লুপ অবস্থান করে, তবে তাকে নেস্টেড লুপ (Nested Loop) বলে।

(খ) break এবং continue স্টেটমেন্টের কাজ:
- break: এটি লুপ বা সুইচ স্টেটমেন্টের ভেতর ব্যবহৃত হয়। লুপের শর্ত সত্য থাকা সত্ত্বেও লুপ থেকে তাৎক্ষণিকভাবে বের হয়ে আসার জন্য break ব্যবহৃত হয়।
- continue: এটি লুপের বর্তমান ইটারেশনের (iteration) নিচের অংশটুকু স্কিপ করে লুপের পরবর্তী ইটারেশন শুরু করার জন্য ব্যবহৃত হয়। এটি লুপ থেকে বের হয় না, বরং আবার শুরুতে ফিরে যায়।

(গ) রনির লজিকটি হলো কোনো সংখ্যা num মৌলিক কি না তা যাচাই করার জন্য ২ থেকে num/2 (অথবা sqrt(num)) পর্যন্ত সংখ্যা দিয়ে ভাগ করে দেখা। যদি কোনো সংখ্যা দিয়ে num বিভাজ্য হয়, তবে সংখ্যাটি মৌলিক নয়।

রনি লুপের ভেতরে if (num % i == 0) শর্ত সত্য হলে break ব্যবহার করেছে। এর ফলে যখনই প্রথম কোনো ভাজক পাওয়া যায়, লুপটি তখনই বন্ধ হয়ে যায় এবং ফলাফল জানিয়ে দেয়। নিচে প্রোগ্রামটি দেওয়া হলো:

#include <stdio.h>

int main() {
    int num, i, isPrime = 1; // ১ মানে মৌলিক ধরে নিলাম

    printf("একটি সংখ্যা দিন: ");
    scanf("%d", &num);

    if (num < 2) isPrime = 0;

    for (i = 2; i <= num / 2; i++) {
        if (num % i == 0) {
            isPrime = 0; // ভাজক পাওয়া গেছে, তাই মৌলিক নয়
            break; // লুপ থেকে বের হয়ে আসা
        }
    }

    if (isPrime == 1) printf("%d একটি মৌলিক সংখ্যা।", num);
    else printf("%d মৌলিক সংখ্যা নয়।", num);

    return 0;
}

(ঘ) রনি break স্টেটমেন্ট ব্যবহার করায় তার প্রোগ্রামটি অনেক বেশি দক্ষ (Efficient) হয়েছে।

বিশ্লেষণ:
ধরি, ইনপুট সংখ্যাটি ১০০। এটি ২ দিয়ে বিভাজ্য।
- রনির প্রোগ্রাম (break সহ): লুপটি প্রথমবার ঘুরেই (যখন i=2) দেখবে ১০০, ২ দিয়ে বিভাজ্য। সাথে সাথে break কাজ করবে এবং লুপ বন্ধ হবে। লুপটি মাত্র ১ বার চলল।
- জনির প্রোগ্রাম (break ছাড়া): লুপটি ২ থেকে শুরু করে ৫০ (১০০/২) পর্যন্ত চলবে। যদিও প্রথমেই জানা গেছে সংখ্যাটি মৌলিক নয়, তবুও লুপটি থামবে না। এটি মোট ৪৯ বার চলবে।

সিদ্ধান্ত: break ব্যবহার না করলে বড় সংখ্যার ক্ষেত্রে (যেমন ১,০০০,০০০, যা ২ দিয়ে বিভাজ্য) লুপটি অযথা ৫ লক্ষ বার চলতে পারত। কিন্তু break থাকায় এটি মাত্র একবার চলেই ফলাফল দিচ্ছে। অর্থাৎ, break ব্যবহার করায় প্রোগ্রামের এক্সিকিউশন টাইম কমেছে এবং দক্ষতা বৃদ্ধি পেয়েছে।

এমসিকিউ

১। প্রোগ্রামিংয়ে একই কাজ বারবার করার প্রক্রিয়াকে কী বলে?

ক) ব্রাঞ্চিং (Branching)
খ) লুপিং (Looping)
গ) সর্টিং (Sorting)
ঘ) মার্জিং (Merging)

সঠিক উত্তর: খ) লুপিং (Looping)

ব্যাখ্যা: কোনো নির্দিষ্ট কাজ শর্তসাপেক্ষে বারবার করাকে লুপিং বলে। যেমন—১ থেকে ১০০ পর্যন্ত সংখ্যা প্রিন্ট করা।


২। নিচের কোনটি এন্ট্রি কন্ট্রোল্ড (Entry Controlled) লুপ?

ক) do-while
খ) while
গ) if-else
ঘ) switch

সঠিক উত্তর: খ) while

ব্যাখ্যা: while এবং for লুপে লুপ বডিতে প্রবেশের আগেই শর্ত যাচাই করা হয়, তাই এদের এন্ট্রি কন্ট্রোল্ড লুপ বলা হয়। do-while হলো এক্সিট কন্ট্রোল্ড।


৩। শর্ত মিথ্যা হলেও অন্তত একবার কার্যকর হয় কোন লুপ?

ক) for
খ) while
গ) do-while
ঘ) nested loop

সঠিক উত্তর: গ) do-while

ব্যাখ্যা: do-while লুপে লুপের বডি আগে এক্সিকিউট হয় এবং পরে শর্ত যাচাই হয়। তাই শর্ত শুরুতেই মিথ্যা হলেও লুপটি একবার চলে।


৪। for(;;) স্টেটমেন্টটি কী নির্দেশ করে?

ক) সিনট্যাক্স এরর (Syntax Error)
খ) সসীম লুপ (Finite Loop)
গ) অসীম লুপ (Infinite Loop)
ঘ) নাল লুপ (Null Loop)

সঠিক উত্তর: গ) অসীম লুপ (Infinite Loop)

ব্যাখ্যা: for লুপের তিনটি অংশই (ইনিশিয়ালাইজেশন, কন্ডিশন, ইনক্রিমেন্ট) অনুপস্থিত থাকলে বা কন্ডিশন অংশ ফাঁকা থাকলে এটি সবসময় সত্য বলে গণ্য হয় এবং অসীম লুপ তৈরি করে।


৫। লুপের বডি থেকে জোরপূর্বক বের হওয়ার জন্য কোন স্টেটমেন্ট ব্যবহৃত হয়?

ক) continue
খ) break
গ) exit
ঘ) return

সঠিক উত্তর: খ) break

ব্যাখ্যা: break স্টেটমেন্ট লুপের শর্ত সত্য থাকা সত্ত্বেও লুপ টার্মিনেট করে বা লুপ থেকে বের করে দেয়।


৬। continue স্টেটমেন্টের কাজ কী?

ক) লুপ সম্পূর্ণ বন্ধ করা
খ) লুপের বাইরে যাওয়া
গ) বর্তমান ইটারেশন বাদ দিয়ে পরের ইটারেশন শুরু করা
ঘ) প্রোগ্রাম শেষ করা

সঠিক উত্তর: গ) বর্তমান ইটারেশন বাদ দিয়ে পরের ইটারেশন শুরু করা

ব্যাখ্যা: continue স্টেটমেন্ট লুপের বর্তমান ইটারেশনের নিচের অংশটুকু স্কিপ করে এবং লুপের কন্ট্রোলকে পরবর্তী ইটারেশনের শুরুতে পাঠিয়ে দেয়।


৭। সি ভাষায় লুপ কত প্রকার?

ক) ২
খ) ৩
গ) ৪
ঘ) ৫

সঠিক উত্তর: খ) ৩

ব্যাখ্যা: সি ভাষায় প্রধানত ৩ ধরনের লুপ ব্যবহৃত হয়: for লুপ, while লুপ এবং do-while লুপ।


৮। i++ স্টেটমেন্টটির সমতুল্য কোনটি?

ক) i = i + 1
খ) i = i + 2
গ) i = 1
ঘ) i + i

সঠিক উত্তর: ক) i = i + 1

ব্যাখ্যা: i++ হলো পোস্ট-ইনক্রিমেন্ট অপারেটর, যার অর্থ হলো i এর বর্তমান মানের সাথে ১ যোগ করা।


৯। নিচের লুপটি কতবার চলবে?
for (int i = 0; i < 5; i++)

ক) ৪ বার
খ) ৫ বার
গ) ৬ বার
ঘ) ১ বারও না

সঠিক উত্তর: খ) ৫ বার

ব্যাখ্যা: লুপটি i এর মান ০, ১, ২, ৩ এবং ৪ এর জন্য মোট ৫ বার চলবে। ৫ হলে শর্ত মিথ্যা হবে।


১০। নেস্টেড লুপ (Nested Loop) কী?

ক) লুপের ভেতরে লুপ
খ) লুপের বাইরে লুপ
গ) দুটি আলাদা লুপ
ঘ) লুপ ছাড়া প্রোগ্রাম

সঠিক উত্তর: ক) লুপের ভেতরে লুপ

ব্যাখ্যা: একটি লুপের কাঠামোর ভেতরে অন্য একটি বা একাধিক লুপ থাকলে তাকে নেস্টেড লুপ বলা হয়।


১১। লুপ কন্ট্রোল স্টেটমেন্টের অত্যাবশ্যকীয় অংশ হলো—
i. ইনিশিয়ালাইজেশন (Initialization)
ii. কন্ডিশন (Condition)
iii. ইনক্রিমেন্ট/ডিক্রিমেন্ট (Update)

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: একটি আদর্শ লুপ গঠনে তিনটি প্রধান অংশ থাকে: শুরু (Initialization), শর্ত (Condition) এবং পরিবর্তন (Update)।


১২। do-while লুপের বৈশিষ্ট্য হলো—
i. শর্ত শেষে যাচাই করা হয়
ii. অন্তত একবার লুপ বডি কাজ করে
iii. শেষে সেমিকোলন (;) ব্যবহার করতে হয়

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: do-while লুপের সিনট্যাক্স হলো do { ... } while(condition);। এটি এক্সিট কন্ট্রোল্ড লুপ, তাই সব কটি তথ্যই সঠিক।


১৩। অসীম লুপ (Infinite Loop) তৈরি হতে পারে যদি—
i. কন্ডিশন সবসময় সত্য (True) হয়
ii. লুপ ভেরিয়েবলের মান আপডেট না করা হয়
iii. লুপের ভেতরে break স্টেটমেন্ট না থাকে

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: কন্ডিশন সবসময় সত্য থাকলে লুপ অনন্তকাল চলবে। আবার ইনক্রিমেন্ট না থাকলে কন্ডিশন কখনোই মিথ্যা হবে না। break থাকা বাধ্যতামূলক নয়।


১৪। break স্টেটমেন্ট ব্যবহার করা হয়—
i. switch কেস থেকে বের হতে
ii. লুপ টার্মিনেট (Terminate) করতে
iii. ফাংশন কল করতে

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: break মূলত switch স্টেটমেন্ট এবং লুপ (for, while, do-while) থেকে তাৎক্ষণিকভাবে বের হওয়ার জন্য ব্যবহৃত হয়।


১৫। নিচের কোডটি লক্ষ্য কর:
int x = 5; while(x > 0) { x--; }
এখানে লুপটি কতবার ঘুরবে?

ক) ৪ বার
খ) ৫ বার
গ) ৬ বার
ঘ) অসীম

সঠিক উত্তর: খ) ৫ বার

ব্যাখ্যা: x এর মান যখন 5, 4, 3, 2, 1 তখন শর্ত সত্য থাকবে। x=0 হলে লুপ থামবে। মোট ৫ বার।


নিচের উদ্দীপকটি পড় এবং ১৬ ও ১৭ নং প্রশ্নের উত্তর দাও:

int k = 1;
do {
    printf("%d ", k);
    k += 2;
} while (k <= 5);

১৬। উদ্দীপকের প্রোগ্রামটির আউটপুট কী হবে?

ক) 1 2 3 4 5
খ) 1 3 5
গ) 2 4 6
ঘ) 1 3 5 7

সঠিক উত্তর: খ) 1 3 5

ব্যাখ্যা:
১ম বার: k=1, প্রিন্ট 1, k হবে 3 (শর্ত সত্য)।
২য় বার: k=3, প্রিন্ট 3, k হবে 5 (শর্ত সত্য)।
৩য় বার: k=5, প্রিন্ট 5, k হবে 7 (শর্ত মিথ্যা)।
লুপ শেষ। আউটপুট: 1 3 5।


১৭। যদি k += 2 এর পরিবর্তে k++ ব্যবহার করা হতো, তবে লুপটি কতবার চলত?

ক) ৩ বার
খ) ৪ বার
গ) ৫ বার
ঘ) ৬ বার

সঠিক উত্তর: গ) ৫ বার

ব্যাখ্যা: তখন k এর মান ১ থেকে ৫ পর্যন্ত এক এক করে বাড়ত (1, 2, 3, 4, 5)। তাই লুপটি ৫ বার চলত।


নিচের উদ্দীপকটি পড় এবং ১৮ ও ১৯ নং প্রশ্নের উত্তর দাও:

for (i = 1; i <= 10; i++) {
    if (i == 4) break;
    printf("%d ", i);
}

১৮। প্রোগ্রামটির আউটপুট কী?

ক) 1 2 3 4
খ) 1 2 3
গ) 1 2 3 4 5 ... 10
ঘ) 4

সঠিক উত্তর: খ) 1 2 3

ব্যাখ্যা: লুপটি ১, ২, ৩ প্রিন্ট করবে। যখন i এর মান ৪ হবে, তখন if (i == 4) সত্য হওয়ায় break স্টেটমেন্ট কাজ করবে এবং লুপটি বন্ধ হয়ে যাবে। তাই ৪ প্রিন্ট হবে না।


১৯। break এর পরিবর্তে continue ব্যবহার করলে ৪ এর ক্ষেত্রে আউটপুট কী হতো?

ক) 4 প্রিন্ট হতো
খ) 4 প্রিন্ট হতো না, কিন্তু লুপ চলত
গ) লুপ থামত
ঘ) এরর দেখাত

সঠিক উত্তর: খ) 4 প্রিন্ট হতো না, কিন্তু লুপ চলত

ব্যাখ্যা: continue দিলে শুধু i=4 এর জন্য নিচের printf অংশটি স্কিপ হতো, কিন্তু লুপটি বন্ধ না হয়ে ৫ থেকে আবার চলা শুরু করত। আউটপুট হতো: 1 2 3 5 6 ... 10।


২০। ১ থেকে ১০০ পর্যন্ত বিজোড় সংখ্যার যোগফল নির্ণয়ে লুপের ইনক্রিমেন্ট কত হবে?

ক) ১
খ) ২
গ) ৩
ঘ) ০.৫

সঠিক উত্তর: খ) ২

ব্যাখ্যা: বিজোড় সংখ্যাগুলো হলো ১, ৩, ৫, ৭...। প্রতি পদের পার্থক্য ২। তাই ইনক্রিমেন্ট i = i + 2 বা ২ হবে।


২১। 1 + 4 + 7 + ... ধারাটির সাধারণ পদ (General Term) কোনটি?

ক) 3n - 2
খ) 3n + 1
গ) 2n + 1
ঘ) n + 3

সঠিক উত্তর: ক) 3n - 2

ব্যাখ্যা:
n=1 হলে: 3(1)-2 = 1 (১ম পদ)
n=2 হলে: 3(2)-2 = 4 (২য় পদ)
n=3 হলে: 3(3)-2 = 7 (৩য় পদ)
এটি ধারার সাথে মিলে যায়।


২২। নিচের কোনটি সঠিক for লুপ সিনট্যাক্স?

ক) for(i=0, i<10, i++)
খ) for(i=0; i<10; i++)
গ) loop(i=0; i<10)
ঘ) while(i<10; i++)

সঠিক উত্তর: খ) for(i=0; i<10; i++)

ব্যাখ্যা: সি ভাষায় for লুপের তিনটি অংশ সেমিকোলন (;) দ্বারা পৃথক করা হয়। কমা (,) ব্যবহার করা হয় না।


২৩। প্রোগ্রাম ফ্লোচার্টে হিরক বা ডায়মন্ড (Diamond) চিহ্ন কী নির্দেশ করে?

ক) ইনপুট/আউটপুট
খ) প্রসেসিং
গ) সিদ্ধান্ত বা কন্ডিশন (Decision)
ঘ) লুপ শুরু

সঠিক উত্তর: গ) সিদ্ধান্ত বা কন্ডিশন (Decision)

ব্যাখ্যা: ফ্লোচার্টে সিদ্ধান্ত গ্রহণ বা কন্ডিশন যাচাইয়ের জন্য (যেমন if, while কন্ডিশন) ডায়মন্ড বা হিরক চিহ্ন ব্যবহৃত হয়।


২৪। while লুপের কন্ডিশন শুরুতেই মিথ্যা হলে লুপ বডি কতবার চলে?

ক) ১ বার
খ) একবারও না
গ) অসীম বার
ঘ) ২ বার

সঠিক উত্তর: খ) একবারও না

ব্যাখ্যা: while লুপ একটি এন্ট্রি কন্ট্রোল্ড লুপ। এতে লুপে ঢোকার আগেই শর্ত যাচাই করা হয়। শর্ত মিথ্যা হলে লুপের বডি একবারও এক্সিকিউট হয় না।


২৫। for(i=10; i>=1; i--) লুপটি কী করবে?

ক) ১ থেকে ১০ প্রিন্ট করবে
খ) ১০ থেকে ১ প্রিন্ট করবে
গ) অসীম লুপ হবে
ঘ) কিছুই করবে না

সঠিক উত্তর: খ) ১০ থেকে ১ প্রিন্ট করবে

ব্যাখ্যা: এখানে ইনিশিয়ালাইজেশন ১০, কন্ডিশন ১ এর সমান বা বড় এবং ইনক্রিমেন্ট নেগেটিভ (ডিক্রিমেন্ট)। তাই এটি ১০, ৯, ৮... এভাবে ১ পর্যন্ত উল্টো ক্রমে চলবে।