শুক্রবার, ৯ মে, ২০১৪

লুপ-১

 
আজ আমরা সি প্রোগ্রামিং এর খুব গুরুত্বপূর্ণ একটা বিষয় লুপ নিয়ে আলোচনা করব। সাধারনত প্রোগ্রামে কোন এক বা একাধিক স্টেটমেন্ট কে বারবার কাজ করাতে লুপ ব্যাবহার করা হয়। লুপ প্রধানত তিন প্রকার। যথাঃ 

১। for লুপ
২। while লুপ
৩। do-while লুপ

এখন আমরা উপরোক্ত তিন প্রকার লুপ নিয়ে ভালোভাবে জানার চেষ্টা করব।

for লুপঃ 

একটা for লুপ এর চেহারা মোটামুটি এরকম...............

for(i=1;i<=n;i++)
statement;

আমরা প্রথমে সাধারনভাবে চিন্তা করি। আমরা চাচ্ছি কোন একটা স্টেটমেন্টকে তিন বার কাজ করাতে। আমাদের আইডিয়াটা কি?  তাহলে অবশ্যই একটা ভেরিয়েবল লাগবে যেখানে আমরা তিন ষ্টোর করে রাখব। আমরা তিন বার বা ভেরিয়েবল সংখ্যক বার কাজটা করব সে জন্যসেই ভেরিয়েবল টা এখানে লিখেছি n .এরপর আমরা কি করবো? আমরা অন্য একটা ভেরিয়েবল নেব যেটার মান শুরুতে শূন্য, এরপর যখন একবার স্টেটমেন্টটা কাজ করবে তখন ওই ভেরিয়েবলের মান এক বাড়ায়া দেবআবার যখন একবার স্টেটমেন্টটা কাজ করবে তখন আবারো ওই ভেরিয়েবলের মান এক বাড়ায়া দেব। যখন দেখব যে ভেরিয়েবলটার মান n এর সমান হয়েছে তখন থেমে যাব। কিন্তু আমরা ওপরের for লুপ এ কি করেছি!!!
0 থেকে n-1 আর 1 থেকে n একই কথা নয় কি?
একটা for লুপের মোটামুটি তিনটা অংশ থাকে।

১। initialization
২। condition
৩। increment/decrement

for লুপের প্রথম অংশটা initialization, পরেরটা condition, তার পরেরটা increment/decrement. forলুপ যেভাবে কাজ করে :

~ initializationঅংশ প্রথমে (শুধু একবার)কাজ করে।
~ initializationঅংশ কাজ করার পর condition চেক করে।
~ conditionট্রু হলে স্টেটমেন্ট execute হয়।
~ এরপর increment/decrement অংশটা কাজ করে।
~ আবারো condition চেক করে।
~ conditionট্রু হলে স্টেটমেন্ট আবারো execute হয়।
~ এরপর আবারো increment/decrement অংশটা কাজ করে। 

এভাবে চলতে থাকে যতক্ষণ পর্যন্ত না condition টা ফলস হয়। 

for(i=1;i<=10;i++);
    printf(“%d”,i);

বলত আউটপুট কত?
এখন ওপরের for লুপটা ভাল করে দেখ। কিছু বুঝতে পাচ্ছ? হুমম ঠিক ধরেছ, এতক্ষণ যা যা বললাম ঠিক তাই তাই করেছি।
এখন আমি চোখের পলকে 1 থেকে 1000 পর্যন্ত সংখ্যার যোগফল বের করতে পারি এভাবে......... 

for(i=1; i<=1000; i++)
  sum+=i;

আমরা যদি condition অংশটা মুছে দেই তবে ............
for লুপ এ কমা ব্যাবহার করে আমরা একাধিক initialization,একাধিক condition,একাধিক increment/decrement করতে পারি। যেমনঃ

for(i=1,j=10; i<=10,j>0; i++,j--)
  sum+=i+j;

আমরা আবার লুপের মধ্যে লুপ চালাতে পারি। কি সাংঘাতিক কথা! 

for(i=1; i<=10; i++)
  {
    for(j=1; j<=5; j++)
      printf("I LOVE LOOP ");
    printf("\n");

   }
লুপের মধ্যে লুপকে বলা হয় nested লুপ।
ওপরের প্রোগ্রামটি ভাল করে খেয়াল করো............ 

Outer লুপ এ যখন i এর মান 1, তখন inner লুপটা পুরো পাঁচ বার চলে অর্থাৎ পাঁচবার I LOVE LOOP  প্রিন্ট হয় ; আর একবার নিউলাইন প্রিন্ট হয় । i এর মান যখন 2,তখনও inner লুপটা পুরো পাঁচ বার চলে আর একবার নিউলাইন প্রিন্ট হয় । অর্থাৎ outer লুপের একটা iteration inner লুপের পুরো iteration ই কমপ্লিট হয়।
এখন এমন একটা প্রোগ্রাম লেখ যা নিচের মত করে আউটপুট দেখাবে।

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

Nested লুপ বুঝে থাকলে তোমরা ঝটপট এর সমাধান লিখতে পারবে। না বুঝে থাকলে আবার পড়ো।  
আগে নিজে ট্রাই করো তারপর কোড দেখ। ভুলেও কপি পেস্ট করতে যেও না। 

#include<stdio.h>
int main()
{
  int i,j,n=1000,sum=0;
  for(i=1; i<=5; i++)
   {
     for(j=1; j<=i; j++)
       printf("%d ",j);
     printf("\n");

    }
}

সহজ না!!!হুমম???
এখন তোমাদের যেটা করতে হবে সেটা হল- এমন একটা প্রোগ্রাম লেখ যেটা * দিয়ে Z প্রিন্ট করে নিচের মত করে।

        ******
               *
             *
           *
         *
       ****** 

এখানে যেটা করতে হবে, প্রথম আর শেষ সারিতে সব * প্রিন্ট করবা আর মাঝের গুলোতে একটা করে * প্রিন্ট হবে একটা স্পেসিফিক জায়গায়। এর জন্য একটা কন্ডিশন দরকার। সেটা বের করার দায়িত্ব তোমার। 
আগামি পর্বে বাকি দুটা লুপ নিয়ে আলোচনা করবো ইনশাল্লাহ।
আজ তাহলে উঠি। অনেক বকবক করলাম।
হ্যাপি কোডিং !!! :)






কোন মন্তব্য নেই: