Thursday, 21 September 2017

প্যাটার্ন প্রিন্টিং (pattern with loop)

গতপর্বে আমরা নেস্টেড লুপ নিয়ে নিয়ে আলোচনা করেছিলাম, আশাকরি তা সবাই বোঝতে পেরেছো।
আজ আমরা Nested Loop নিয়ে একটু মজা করবো।





আমরা চাইলেই নিচের প্যাটার্ন টা লুপ দিয়ে আঁকতে পারি। বিষয়টা অনেক মজার তাই না।



1.Triangle :


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


তাহলে  চলো দেখে নেই কিভাবে আমরা এর জন্য প্রোগ্রাম লিখবো।
খেয়াল করলে দেখবে
প্রথম লাইনে মাত্র ১ টা * ।
দ্বিতীয় লাইনে ২ টা * ।
এভাবে প্রতি লাইনে একটা করছে * বাড়ছে।



#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;
}


তোমরা হয়তো লক্ষ্য করেছো এখানে i এবং j এর মান আমি 0 না দিয়ে 1 দিয়েছি।
কিন্তু সচরাচর আমরা i=0 এবং  j=0 দিয়েই ইনিশিয়ালাইজড করি।

আমার মনে হয়েছে, i=1 এবং j=1 ধরে করলে তোমরা সহজে বোঝতে পারবে।
তোমরা বোঝে গেলে i এবং j এর মান 0 ধরেও করতে পারবে।

যাই হোক, মূল কথায় আসি। 

উপরের প্রোগ্রামটাতে দেখো আমরা ২ টা ভেরিয়েবল i ,j  ডিক্লেয়ার করেছি।
তারপর প্রথম লুপে দিয়েছি i<=5 ,মানে i এর মান 5 এর ছোট বা সমান হলে লুপ ঘুরবে।
বলতে পারবে কেন আমরা i<=5 এই শর্ত টা দিয়েছি?
কারণ, আমরা নিচের দিকে ৫ লাইন প্রিন্ট করবো।
আর  দ্বিতীয় লুপে  j<=i শর্ত দিয়েছি, কারণ
 দ্বিতীয় লুপ   j  এর মান যতো পাশের দিকে ঠিক ততোটা * প্রিন্ট করবে।

এবার প্রোগ্রামের ব্যাখ্যা দেখে নেইঃ

  • for(i=1; i<=5;i++)      এই লাইনে i=1; এবং i এর মান 5 থেকে ছোট। তাই কম্পাইলার বাইরের লুপের বডিতে আসবে।
  • কম্পাইলার for(j=1;  j<=i; j++)  এ আসার পর চেক করবে j এর মান i এর মান থেকে ছোট অথবা সমান কি না? যেহেতু i=1 এবং j=1, তাই i এর মান j এর মানের সমান এই শর্ত সত্য। তাই কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলারা j++ এ যাবে।
  • j++ এ যাওয়ার পর j এর মান 1 থেকে এক বেড়ে 2 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j<=i শর্ত সত্য কি না? যেহেতু এখন  i=1 এবং j=2 তাই শর্ত মিথ্যা। কারণ j এর মান i এর মান থেকে বেশি। সুতরাং কম্পাইলার ভিতরের লুপ থেকে বের হয়ে দেখবে  printf("\n);  তারপর একটি নতুন লাইন প্রিন্ট করে বাইরের লুপের i++ এ যাবে।
  • i++ এ যাওয়ার পর i এর মান 1 থেকে এক বেড়ে 2  হবে। এবার i<=5 এই শর্ত চেক করবে। যেহেতু শর্ত সত্য তাই কম্পাইলার আবার বাইরের  লুপের বডিতে আসবে ।
  • কম্পাইলার for(j=1;  j<=i; j++)  এ আসার পর চেক করবে j এর মান i এর মান থেকে ছোট অথবা সমান কি না? যেহেতু এখন i=2 এবং j=1, তাই i এর মান j এর থেকে ছোট সুতরাং  শর্ত সত্য। তাই কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলারা j++ এ যাবে।
  • j++ এ যাওয়ার পর j এর মান 1 থেকে এক বেড়ে 2 হবে। 
  • এখন আবার j<=i এই শর্ত চেক করবে। যেহেতু এখন i এর মান 2 এবং j এর মান 2 তাই শর্ত সত্য। সুতরাং কম্পাইলার লুপের বডিতে আসবে এবং আরেকটি * প্রিন্ট করবে।তার পর কম্পাইলার  j++ এ যাবে। j++ এ যাওয়ার পর j এর মান 2 থেকে এক বেড়ে 3 হবে।
  • কম্পাইলার আবার শর্ত চেক করবে j<=i শর্ত সত্য কি না? যেহেতু এখন  i=2 এবং j=3 তাই শর্ত মিথ্যা। কারণ j এর মান i এর মান থেকে বেশি। সুতরাং কম্পাইলার ভিতরের লুপ থেকে বের হয়ে দেখবে  printf("\n);  তারপর একটি নতুন লাইন প্রিন্ট করে বাইরের লুপের i++ এ যাবে।
  • এভাবে i = 5 হওয়া পর্যন্ত চলতে থাকবে। i=6 হলে কম্পাইলার লুপ থেকে বেড়িয়ে আসবে এবং return 0; তে চলে যাবে।
  •  প্রোগ্রাম শেষ। 
কেউ না বোঝলে নেস্টেড লুপ নিয়ে করা আমার আগের পোস্টটা পড়ুন। আশা করি বোঝতে পারবেন।







2.Square :


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

এই প্যাটার্নে আমাদের প্রতিটি লাইনে চারটি * আছে।
এবং এভাবে মোট চার লাইন আছে।

তার মানে উপর থেকে নিচের দিকে আমাদের লুপ চারবার ঘুরবে । পাশের দিকে ও চারবার ঘুরবে।

তাহলে চলো প্রোগ্রামটা দেখে নেইঃ



#include<stdio.h>
int main()
{
    int i,j;

    for(i=1; i<=4;i++)
    {
        for(j=1;j<=4;j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

লক্ষ্য করে দেখো এ প্রোগ্রামে আমাদের দুইটা লুপের ই ব্রেকিং কন্ডিশন সমান। অর্থাৎ i<=4 এবং j<=4 .

তুমি একটু ভেবে দেখো তো কোড টা কিভাবে কাজ করছে? তারপর আমার ব্যখ্যার সাথে মিলিয়ে নিয়ো।


ব্যখ্যাঃ

  • for(i=1; i<=4;i++)      এই লাইনে i=1; এবং i এর মান 4 থেকে ছোট। তাই কম্পাইলার বাইরের লুপের বডিতে আসবে।
  • কম্পাইলার for(j=1;  j<=i; j++)  এ আসার পর চেক করবে j এর মান 4 এর মান থেকে ছোট অথবা সমান কি না? যেহেতু  j=1, যা 4 থেকে ছোট, তাই শর্ত সত্য। সুতরাং কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলারা j++ এ যাবে।
  • j++ এ যাওয়ার পর j এর মান 1 থেকে এক বেড়ে 2 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j<=4 শর্ত সত্য কি না? যেহেতু  j=2 তাই শর্ত  সত্য। সুতরাং কম্পাইলার আবার লুপের বডিতে আসবে। এবং আরেকটি * প্রিন্ট করবে। তার পর কম্পাইলার j++ এ যাবে।
  • j++ এ যাওয়ার পর j এর মান 2 থেকে এক বেড়ে 3 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j<=4 শর্ত সত্য কি না? যেহেতু  j=3 তাই শর্ত  সত্য। সুতরাং কম্পাইলার আবার লুপের বডিতে আসবে। এবং আরেকটি * প্রিন্ট করবে। তার পর কম্পাইলার j++ এ যাবে।
  • j++ এ যাওয়ার পর j এর মান 3 থেকে এক বেড়ে 4 হবে।
  • কম্পাইলার আবার শর্ত চেক করবে j<=4 শর্ত সত্য কি না? যেহেতু  j=4 তাই শর্ত  সত্য। সুতরাং কম্পাইলার আবার লুপের বডিতে আসবে। এবং আরেকটি * প্রিন্ট করবে। তার পর কম্পাইলার j++ এ যাবে।
  • j++ এ যাওয়ার পর j এর মান 4 থেকে এক বেড়ে 5 হবে।
  •  যেহেতু  j<=5 এই শর্ত মিথ্যা তাই কম্পাইলার ভিতরের লুপ থেকে বের হয়ে যাবে, এবং  দেখবে  printf("\n);  তারপর একটি নতুন লাইন প্রিন্ট করে বাইরের লুপের i++ এ যাবে।
  •  এভাবে চলতে চলতে যখন i এর মান 6  হয়ে যাবে তখন কম্পাইলার বাইরের লুপ থেকে বের হয়ে আসবে এবং retrun 0; তে চলে যাবে। 


3.Reverse Triangle :


*****
****
***
**
*
 
তুমি যদি Triangle অর্থাৎ 1 নং প্যাটার্ন    বোঝে থাকো তাহলে উপরের প্যাটার্ন টাও সহজে বোঝে ফেলবে ।

প্রোগ্রামটা দেখে নেইঃ



#include<stdio.h>
int main()
{
    int i,j;

    for(i=1; i<=5;i++)
    {
        for(j=5;j>=i;j--)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}


আমরা বাইরের লুপ দিয়ে উপর থেকে নিচের দিকটা প্রিন্ট করছি। যেহেতু আমাদের প্যাটার্ন পাঁচ লাইন  হবে তাই বাইরের লুপটা আমরা হুবহু প্রথম প্যাটার্নের বাইরের লুপের মতো রেখে দিলাম।

আর পাশের দিকে আমরা ঠিক j এর মানের সমান সংখ্যক * প্রিন্ট করছি।  

ব্যখ্যাঃ


  • for(i=1; i<=5;i++)      এই লাইনে i=1; এবং i এর মান 5 থেকে ছোট। তাই কম্পাইলার বাইরের লুপের বডিতে আসবে।
  • কম্পাইলার for(j=5;  j>=i; j--)  এ আসার পর চেক করবে j এর মান i এর মান থেকে বড় অথবা সমান কি না? যেহেতু i=1 এবং j=5, তাই  j এর মান i এর মানের থেকে বড়। সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  5 থেকে 4 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j>=i শর্ত সত্য কি না? যেহেতু এখন  j=4 এবং i=1 তাই শর্ত সত্য,
  • সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  4 থেকে 3 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j>=i শর্ত সত্য কি না? যেহেতু এখন  j=3 এবং i=1 তাই শর্ত সত্য, 
  • সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  3 থেকে 2 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j>=i শর্ত সত্য কি না? যেহেতু এখন  j=2 এবং i=1 তাই শর্ত সত্য, 
  • সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  2 থেকে 1 হবে।
  • কম্পাইলার আবার শর্ত চেক করবে j>=i শর্ত সত্য কি না? যেহেতু এখন  j=1 এবং i=1 তাই শর্ত সত্য, 
  • সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  1 থেকে 0 হবে।
  • এবার শর্ত মিথ্যা তাই কম্পাইলার ভিতরের লুপ থেকে বের হয়ে যাবে ,এবং একটি নতুন লাইন প্রিন্ট করবে।  
  • তারপর বাইরের লুপের i++ এ যাবে।
  • i++ এ যাওয়ার পর i এর মান 1 থেকে এক বেড়ে 2 হবে। তারপর কম্পাইলার চেক করবে i<=5 শর্তটি সত্য কি না? যেহেতু শর্ত সত্য তাই কম্পাইলার বাইরের লুপের বডিতে আসবে।
  • কম্পাইলার for(j=5;  j>=i; j--)  এ আসার পর চেক করবে j এর মান i এর মান থেকে বড় অথবা সমান কি না? যেহেতু i=2 এবং j=5, তাই  j এর মান i এর মানের থেকে বড়। সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  5 থেকে 4 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j>=i শর্ত সত্য কি না? যেহেতু এখন  j=4 এবং i=2 তাই শর্ত সত্য,
  • সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  4 থেকে 3 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j>=i শর্ত সত্য কি না? যেহেতু এখন  j=3 এবং i=2 তাই শর্ত সত্য, 
  • সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  3 থেকে 2 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j>=i শর্ত সত্য কি না? যেহেতু এখন  j=2 এবং i=2 তাই শর্ত সত্য, 
  • সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  •   j-- এ যাওয়ার পর j এর মান 2 থেকে 1 হবে।  এবার j>=i শর্তটি মিথ্যা তাই কম্পাইলার ভিতরের লুপ থেকে বেড়িয়ে আসবে। এবং একটি নতুন লাইন প্রিন্ট করে বাইরের লুপের i++ এ চলে যাবে।
  • i++ এ যাওয়ার পর i এর মান 3 থেকে এক বেড়ে 4 হবে। তারপর কম্পাইলার চেক করবে i<=5 শর্তটি সত্য কি না? যেহেতু শর্ত সত্য তাই কম্পাইলার বাইরের লুপের বডিতে আসবে।
  • কম্পাইলার for(j=5;  j>=i; j--)  এ আসার পর চেক করবে j এর মান i এর মান থেকে বড় অথবা সমান কি না? যেহেতু i=4 এবং j=5, তাই  j এর মান i এর মানের থেকে বড়। সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  5 থেকে 4 হবে। 
  • কম্পাইলার আবার শর্ত চেক করবে j>=i শর্ত সত্য কি না? যেহেতু এখন  j=4 এবং i=4 তাই শর্ত সত্য,
  • সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  4 থেকে 3 হবে। 
  • এবার j>=i শর্তটি মিথ্যা কারণ j = 3 কিন্তু i = 4 । তাই কম্পাইলার ভিতরের লুপ থেকে বেড়িয়ে আসবে। এবং একটি নতুন লাইন প্রিন্ট করে বাইরের লুপের i++ এ চলে যাবে।
  • i++ এ যাওয়ার পর i এর মান 4 থেকে এক বেড়ে 5 হবে। তারপর কম্পাইলার চেক করবে i<=5 শর্তটি সত্য কি না? যেহেতু শর্ত সত্য তাই কম্পাইলার বাইরের লুপের বডিতে আসবে।
  • কম্পাইলার for(j=5;  j>=i; j--)  এ আসার পর চেক করবে j এর মান i এর মান থেকে বড় অথবা সমান কি না? যেহেতু i=5 এবং j=5, তাই  j এর মান i এর মানের সমান। সুতরাং, কম্পাইলার ভিতরের  লুপের বডিতে আসবে। 
  • এবার দেখবে printf("*");    তাই একটা * প্রিন্ট হবে। তার পর কম্পাইলার j-- এ যাবে।
  • j-- এ যাওয়ার পর j এর মান এক কমে  5 থেকে 4 হবে।
  • এবার j>=i শর্তটি মিথ্যা কারণ j = 4 কিন্তু i = 5 । তাই কম্পাইলার ভিতরের লুপ থেকে বেড়িয়ে আসবে। এবং একটি নতুন লাইন প্রিন্ট করে বাইরের লুপের i++ এ চলে যাবে।
  • i++ এ যাওয়ার পর i এর মান 5 থেকে এক বেড়ে 6 হবে। তারপর কম্পাইলার চেক করবে i<=5 শর্তটি সত্য কি না? এবার শর্তটি মিথ্যা হওয়ার কম্পাইলার বাইরের লুপ থেকে বেড়িয়ে আসবে এবং return 0 তে চলে যাবে।
  • প্রোগ্রাম শেষ।





4.Hollow square :


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


আমরা দ্বিতীয় প্যাটার্ন এ square প্রিন্ট করেছিলাম, যদি সেটা বোঝে থাকো তাহলে hollow square তোমরা সহজে বোঝবে।

চলো প্রোগ্রামটা দেখে নেইঃ

 

#include<stdio.h>
int main()
{
    int i,j;


    for(i=1;i<=4;i++)
    {
        for(j=1;j<=4;j++)
        {
            if(i==1 || i==4 || j==1||j==4)
            {
                printf("*");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}


  আমি প্রোগ্রামটা সম্পুর্ণ ব্যাখ্যা করছি না, কারণ ( যদি দ্বিতীয় প্যাটার্ন টা বোঝে থাকো)
for(j=0; j<=4; j++)  এই লাইন পর্যন্ত তোমরা বোঝতে পারছো।

এবার আসো  for(j=0; j<=4; j++) এর বডিতে কিভাবে কাজ হচ্ছে জেনে নেইঃ

 for(j=0; j<=4; j++)  এর বডিতে কম্পাইলার আসার পর দেখতে পাবে

 if(i==1 || i==4 || j==1||j==4)  এই শর্ত টা।

এর মানে হলো যখন i এর মান 1 তখন * প্রিন্ট হবে। অথবা যদি i এর মান  4 হয় তখন * প্রিন্ট হবে।
অথবা যখন j এর মান 1 তখন * প্রিন্ট হবে। অথবা যদি j এর মান  4 হয় তখন * প্রিন্ট হবে।

তার মানে দাড়ালো যদি এই চারটি শর্তের যেকোন একটিও মিলে যায় তাহলে * প্রিন্ট হবে। আর যদি একটা ও শর্ত না মিলে তাহলে একটা স্পেস প্রিন্ট হবে।

প্রথমদিকে মনে হতে পারে স্পেস প্রিন্ট করার কোন প্রয়োজন নেই। কোন কিছু প্রিন্ট না করলেই তো হয় জায়গাটা ফাঁকা থাকবে।
কিন্তু আসলে ধারণাটা ভূল,  জায়গাটা ফাঁকা কারণ এখানে স্পেস আছে, স্পেস প্রিন্ট না করলে এখানে কোন কাজই হবে না।
তোমরা বিষয়টা ভালোভাবে বোঝার জন্য নিচের কোড দুটি রান করাও।

#include<stdio.h>
int main()
{
    int i,j;


    for(i=1;i<=4;i++)
    {
        for(j=1;j<=4;j++)
        {
            if(i==1 || i==4 || j==1||j==4)
            {
                printf("*");
            }
            else
            {
                printf("");
            }
        }
        printf("\n");
    }
    return 0;
}

 আসলে আমরা যা প্রিন্ট করতে চাচ্ছি তা হছে না শুধু মাত্র else এর ভিতরের printf থেকে স্পেস টা কেটে দেওয়ার জন্য।



#include<stdio.h>
int main()
{
    int i,j;


    for(i=1;i<=4;i++)
    {
        for(j=1;j<=4;j++)
        {
            if(i==1 || i==4 || j==1||j==4)
            {
                printf("*");
            }
        }
        printf("\n");
    }
    return 0;
}
এবারও আউটপুট আমাদের মনের মতো না হয়ে উপরের কোডের মতো হয়েছে। কারণটা নিশ্চয়ই বোঝতে পারছো।

এখন চলো লাইন বাই লাইন ব্যাখ্যায় :)

  • যখন i=1 এবং j=1 তখন if(i==1 || i==4 || j==1||j==4)  চেক করবে। এখানে (i==1||j==1) এই দুইটা শর্তই সত্য। তাই কম্পাইলার i==1 এই শর্ত সত্য হওয়ায় আর কোন শর্ত চেক করবে না। মানে যখনই একটা শর্ত চেক মিলে যাবে অর অপারেটর থাকলে আর পরবর্তী শর্ত চেক না করেই বডিতে চলে আসবে। বডিতে আসার পর একটা * প্রিন্ট করবে। তারপর j++ এ যাবে। 
  • কম্পাইলার j++ এ যাওয়ার পর j=2. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তার পর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবারও, i==1 শর্তটা মিলে যাওয়ার কম্পাইলার আরেকটা * প্রিন্ট করবে। আবার j++ হবে।
  • কম্পাইলার j++ এ যাওয়ার পর j=3. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তার পর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবারও, i==1 শর্তটা মিলে যাওয়ার কম্পাইলার আরেকটা * প্রিন্ট করবে। আবার j++ হবে।
  • কম্পাইলার j++ এ যাওয়ার পর j=4. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তার পর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবারও, i==1 শর্তটা মিলে যাওয়ার কম্পাইলার আরেকটা * প্রিন্ট করবে। আবার j++ হবে। এতক্ষণে আমাদের উপরের লাইনের চারটা * প্রিন্ট হয়ে গেছে।
  • কম্পাইলার j++ এ যাওয়ার পর j=5. এখন j<=4 শর্ত মিথ্যা। তাই কম্পাইলার ভিতরের লুপ থেকে বের হয়ে  i++ এ যাবে।
  • i++ এ যাওয়ার পর i=2. i<=4 শর্ত সত্য হওয়ার কম্পাইলার বডিতে আসবে। এবং ভিতরের লুপে যাবে। 
  • এখন j=1 এবং j<=4 সত্য। তাই বডিতে আসবে ।
  • if(i==1 || i==4 || j==1||j==4)  চেক করবে। এখন i==1 শর্ত মিথ্যা। কম্পাইলার i==4 এই শর্ত চেক করবে। এই শর্ত ও মিথ্যা। কম্পাইলার j==1 শর্ত চেক করবে। এই শর্ত টি সত্য। তাই কম্পাইলার if এর বডিতে আসবে এবং একটি * প্রিন্ট করবে। তারপর j++ হবে। 
  • কম্পাইলার j++ এ যাওয়ার পর j=2. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তারপর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবার কোন শর্তই সত্য নয়, তাই কম্পাইলার else এ চলে যাবে। এবং একটি স্পেস প্রিন্ট করবে। তারপর j++ হবে। 
  • কম্পাইলার j++ এ যাওয়ার পর j=3. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তারপর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবার কোন শর্তই সত্য নয়, তাই কম্পাইলার else এ চলে যাবে। এবং আবারো একটি স্পেস প্রিন্ট করবে। তারপর j++ হবে।
  • কম্পাইলার j++ এ যাওয়ার পর j=4. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তারপর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবার j==4 শর্তটি সত্য হওয়ায় আরেকটি * প্রিন্ট করবে। তারপর j++ হবে।
  • কম্পাইলার j++ এ যাওয়ার পর j=5. এখন j<=4 শর্ত মিথ্যা। তাই কম্পাইলার ভিতরের লুপ থেকে বের হয়ে  i++ এ যাবে।
  • i++ এ যাওয়ার পর i=3. i<=4 শর্ত সত্য হওয়ার কম্পাইলার বডিতে আসবে। এবং ভিতরের লুপে যাবে। 
  • এখন j=1 এবং j<=4 সত্য। তাই বডিতে আসবে ।
  • if(i==1 || i==4 || j==1||j==4)  চেক করবে। এখন i==1 শর্ত মিথ্যা। কম্পাইলার i==4 এই শর্ত চেক করবে। এই শর্ত ও মিথ্যা। কম্পাইলার j==1 শর্ত চেক করবে। এই শর্ত টি সত্য। তাই কম্পাইলার if এর বডিতে আসবে এবং একটি * প্রিন্ট করবে। তারপর j++ হবে। 
  • কম্পাইলার j++ এ যাওয়ার পর j=2. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তারপর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবার কোন শর্তই সত্য নয়, তাই কম্পাইলার else এ চলে যাবে। এবং একটি স্পেস প্রিন্ট করবে। তারপর j++ হবে। 
  • কম্পাইলার j++ এ যাওয়ার পর j=3. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তারপর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবার কোন শর্তই সত্য নয়, তাই কম্পাইলার else এ চলে যাবে। এবং আবারো একটি স্পেস প্রিন্ট করবে। তারপর j++ হবে।
  • কম্পাইলার j++ এ যাওয়ার পর j=4. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তারপর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবার কোন শর্তই সত্য নয়, তাই কম্পাইলার else এ চলে যাবে। এবং আবারো একটি স্পেস প্রিন্ট করবে। তারপর j++ হবে।
  • কম্পাইলার j++ এ যাওয়ার পর j=5. এখন j<=4 শর্ত মিথ্যা। তাই কম্পাইলার ভিতরের লুপ থেকে বের হয়ে  i++ এ যাবে।
  • i++ এ যাওয়ার পর i=4. i<=4 শর্ত সত্য হওয়ার কম্পাইলার বডিতে আসবে। এবং ভিতরের লুপে যাবে। 
  • এখন j=1 এবং j<=4 সত্য। তাই বডিতে আসবে ।
  • if(i==1 || i==4 || j==1||j==4)  চেক করবে। এখানে i==4 এই  শর্ত সত্য। তাই কম্পাইলার  চলে আসবে। বডিতে আসার পর একটা * প্রিন্ট করবে। তারপর j++ এ যাবে।
  •  
  • কম্পাইলার j++ এ যাওয়ার পর j=2. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তার পর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবারও, i==4 শর্তটা মিলে যাওয়ার কম্পাইলার আরেকটা * প্রিন্ট করবে। আবার j++ হবে।
  • কম্পাইলার j++ এ যাওয়ার পর j=3. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তার পর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবারও, i==4 শর্তটা মিলে যাওয়ার কম্পাইলার আরেকটা * প্রিন্ট করবে। আবার j++ হবে।
  • কম্পাইলার j++ এ যাওয়ার পর j=4. এখন j<=4 শর্ত সত্য হওয়ার বডিতে আসবে। তার পর আবার  if(i==1 || i==4 || j==1||j==4)  চেক করবে। এবারও, i==4 শর্তটা মিলে যাওয়ার কম্পাইলার আরেকটা * প্রিন্ট করবে। আবার j++ হবে। এতক্ষণে প্যাটার্ন প্রিন্ট হয়ে গেছে। :)
আশাকরি তোমরা বোঝতেপেরেছো। এবার তোমাদের জন্য একটি কাজ আছে , তা হলো;

উপরের সবগুলা প্রোগ্রাম কত লাইন প্রিন্ট হবে তা ইউজারের কাছ থেকে ইনুট নিয়ে করবে।

উদাহারন হিসেবে দেখে নাওঃ

int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;i++)

এরকম করে সম্পুর্ণ কোড টা লিখে ফেলো।
 

0 comments:

Post a Comment