Skip to content

মডিউল ১৩ঃ নেস্টেড লুপ রিক্যাপ এবং প্যাটার্ন

মডিউল ১৩-০ঃ সূচনা

প্রিভিয়াস উইকগুলোতে তোমাদের মোটামুটি সি প্রোগ্রামিং এর বেসিক এবং ফান্ডামেন্টাল সব কন্সেপ্ট শেখানো হয়েছে। আজকেও সেখানের একটা টপিক রিক্যাপ করা হবে।

রিক্যাপ করা হবে নেস্টেড লুপ। রিক্যাপ হলেও মূলত একই কন্সেপ্টের নতুন এবং ইন্টারেস্টিং কিছু জিনিস দেখানো হবে। শুরুতেই দেখানো হবে প্যাটার্ন। এরপর একটা ছোট্ট প্রবলেম সলভ করে দেখানো হবে। এবং শেষে শেখানো হবে খুবই মজার একটা এলগরিদম সিলেকশন সর্ট।


মডিউল ১৩-১ + ১৩-২: প্যাটার্ন ১ + প্যাটার্ন ২

Code:

c
#include <stdio.h>

int main()
{
    int n, k=1;
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=k; j++)
        {
            printf("*");
        }
        // line sesh
        k++;
        printf("\n");
    }
    return 0;
}

Input:

5

Output:

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

এই প্রোগ্রামটি একটি নির্দিষ্ট প্যাটার্ন প্রিন্ট করে। আসুন প্রোগ্রামটির কাজ সম্পর্কে বিস্তারিত আলোচনা করা যাক:

  1. #include<stdio.h>: এই লাইনে stdio.h হেডার ফাইল ইমপোর্ট করা হয়েছে, যা স্ট্যান্ডার্ড ইনপুট ও আউটপুট ফাংশনগুলি (printf, scanf) প্রোগ্রামে ব্যবহার করতে সাহায্য করে।

  2. int main(): main() ফাংশন হল প্রোগ্রামের প্রধান ফাংশন, যা প্রোগ্রাম চালানোর সময় সবচেয়ে প্রথমে কল হয়।

  3. {: মেইন ফাংশনের বড় ব্লক এর শুরু।

  4. int n, k=1;: এই লাইনে n এবং k নামক দুটি ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে, যেখানে n প্যাটার্নের সর্বোচ্চ সারি সংরক্ষণ করে এবং k হল সারি প্রতি স্টার (*) প্রিন্ট করার সংখ্যা নিয়ন্ত্রণ করে। k এর মান ১ দেওয়া হয়েছে, যেন প্রথম সারিতে একটি স্টার প্রিন্ট হয়।

  5. scanf("%d",&n);: এই লাইনে একটি পূর্ণাংক ইনপুট দেওয়া হয়, এবং তা ভ্যারিয়েবল n এ সংরক্ষিত হয়।

  6. for(int i=1;i<=n;i++): এই লাইনে i নামের একটি ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে, যা প্রতিটি সারির সংখ্যা নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এই লুপ প্রতিটি সারি প্রিন্ট করতে ব্যবহৃত হয়।

  7. {: প্রথম লুপের শুরু।

  8. for(int j=1;j<=k;j++): এই লাইনে j নামের একটি ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে, যা প্রতিটি সারিতে প্রিন্ট করা স্টার (*) এর সংখ্যা নিয়ন্ত্রণ করতে ব্যবহৃত হয়।

  9. {: দ্বিতীয় লুপের লুপের শুরু।

  10. printf("*");: এই লাইনে একটি স্টার (*) প্রিন্ট করা হয়েছে।

  11. }: দ্বিতীয় লুপের শেষ।

  12. k++;: k এর মান ১ বাড়ানো হয়েছে, যাতে পরবর্তী সারিতে প্রিন্ট করা স্টার (*) এর সংখ্যা বেড়ে যায়।

  13. printf("\n");: এই লাইনে একটি নতুন লাইন প্রিন্ট করা হয়েছে, যাতে পরবর্তী সারি নতুন লাইনে শুরু হয়।

  14. }: প্রথম লুপের শেষ।

  15. return 0;: প্রোগ্রামের সমাপ্তি সূচনা করে।

  16. }: মেইন ফাংশনের ব্লক শেষ।


মডিউল ১৩-৩ঃ পিরামিড প্যাটার্ন

Code:

c
#include <stdio.h>

int main()
{
    int n, s, k;
    scanf("%d", &n);
    s = n - 1;
    k = 1;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=s; j++)
        {
            printf(" ");
        }
        for(int j=1; j<=k; j++)
        {
            printf("*");
        }
        // line sesh
        s--;
        k = k + 2;
        printf("\n");
    }

    return 0;
}

Input:

5

Output:

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

এই প্রোগ্রামটি নির্দিষ্ট ধরনের প্যাটার্ন তৈরি করে, যা প্রতিটি সারিতে স্পেস এবং স্টার print করে। নিচে প্রোগ্রামের বিবরণ দেওয়া হয়েছে:

  1. #include<stdio.h>: এই লাইনে stdio.h হেডার ফাইল ইমপোর্ট করা হয়েছে, যা ইনপুট এবং আউটপুট সংক্রান্ত ফাংশনগুলি সম্পর্কে তথ্য সরবরাহ করে।

  2. int main(): main() ফাংশন হল প্রোগ্রামের প্রধান ফাংশন, যা প্রোগ্রাম চালানোর সময় সবচেয়ে প্রথমে কল হয়।

  3. {: মেইন ফাংশনের ব্লক শুরু।

  4. int n, s, k;: এই লাইনে n, s, এবং k নামক তিনটি পূর্ণাংক ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে, যেখানে n সারির সংখ্যা, s স্পেসের সংখ্যা, এবং k হল স্টার (*) এর সংখ্যা নিয়ন্ত্রণ করতে ব্যবহৃত।

  5. scanf("%d",&n);: scanf() ফাংশনের মাধ্যমে ব্যবহারকারীকে সারির সংখ্যা ইনপুট করতে বলা হয়, এবং এটি ভ্যারিয়েবল n এ সংরক্ষিত হয়।

  6. s = n - 1;: এই লাইনে s এর মান n-1 ধরা হয়েছে, কারণ প্রথম সারিতে n-1 টি স্পেস থাকে।

  7. k = 1;: এই লাইনে k এর মান 1 ধরা হয়েছে, কারণ প্রথম সারিতে একটি স্টার প্রিন্ট হয়।

  8. for(int i=1;i<=n;i++): এই লাইনে প্রধান লুপের ডিক্লেয়ারেশন করা হয়েছে, যা সারির সংখ্যা নিয়ন্ত্রণ করে। এই লুপ প্রতিটি সারিতে প্রিন্ট করতে ব্যবহৃত।

  9. {: প্রধান লুপের ব্লক শুরু।

  10. for(int j=1;j<=s;j++): এই লাইনে প্রথম ইন্টারনাল লুপের ডিক্লেয়ারেশন করা হয়েছে, যা স্পেসের সংখ্যা নিয়ন্ত্রণ করে। প্রতিটি সারিতে স্পেস প্রিন্ট করা হয়।

  11. {: ইন্টারনাল লুপের ব্লক শুরু।

  12. printf(" ");: এই লাইনে একটি স্পেস print করা হয়েছে।

  13. }: ইন্টারনাল লুপের ব্লক শেষ।

  14. for(int j=1;j<=k;j++): এই লাইনে দ্বিতীয় ইন্টারনাল লুপের ডিক্লেয়ারেশন করা হয়েছে, যা স্টার () এর সংখ্যা নিয়ন্ত্রণ করে। প্রতিটি সারিতে স্টার () প্রিন্ট করা হয়।

  15. {: দ্বিতীয় ইন্টারনাল লুপের ব্লক শুরু।

  16. printf("*");: এই লাইনে একটি স্টার (*) মুদ্রণ করা হয়েছে।

  17. }: দ্বিতীয় ইন্টারনাল লুপের ব্লক শেষ।

  18. s--;: s এর মান ১ কমিয়ে দেওয়া হয়েছে, যাতে প্রতিটি নতুন সারিতে স্পেসের সংখ্যা কমে যায়।

  19. k = k + 2;: k এর মান ২ যোগ করা হয়েছে, যাতে প্রতিটি নতুন সারিতে দ্বিগুণ স্টার (*) প্রিন্ট হয়।

  20. printf("\n");: এই লাইনে নতুন লাইন print করা হয়েছে, যাতে প্রতিটি সারি নতুন লাইনে শুরু হয়।

  21. }: প্রধান লুপের ব্লক শেষ।

  22. return 0;: প্রোগ্রামের সমাপ্তি ।

  23. }: মেইন ফাংশনের বড় ব্লক শেষ।


মডিউল ১৩-৪: আরও প্যাটার্ন

Code:

c
#include <stdio.h>

int main()
{
    int n, k=1;
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
    {
        // line print
        for(int j=1; j<=k; j++)
        {
            printf("%d ", j);
        }
        // line sesh
        k++;
        printf("\n");
    }
    return 0;
}

Input:

5

Output:

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

এই প্রোগ্রামটি নির্দিষ্ট প্যাটার্ন তৈরি করে, যা প্রতিটি সারিতে সংখ্যা গুলি প্রিন্ট করে, প্রতিটি সারিতে একটি সংখ্যা বেড়ে যায়। নিচে প্রোগ্রামের বিবরণ দেওয়া হয়েছে:

  1. #include<stdio.h>: এই লাইনে stdio.h হেডার ফাইল ইমপোর্ট করা হয়েছে, যা ইনপুট এবং আউটপুট সংক্রান্ত ফাংশনগুলি সম্পর্কে তথ্য সরবরাহ করে।

  2. int main(): main() ফাংশন হল প্রোগ্রামের প্রধান ফাংশন, যা প্রোগ্রাম চালানোর সময় সবচেয়ে প্রথমে কল হয়।

  3. {: মেইন ফাংশনের ব্লক শুরু।

  4. int n, k=1;: এই লাইনে n এবং k নামের দুটি পূর্ণাংক ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে, যেখানে n সারির সংখ্যা এবং k হল প্রতি সারিতে প্রিন্ট করা সংখ্যা নিয়ন্ত্রণ করে, এবং তার মান 1 ধরা হয়েছে।

  5. scanf("%d",&n);: scanf() ফাংশনের মাধ্যমে ব্যবহারকারীকে সারির সংখ্যা ইনপুট করতে বলা হয়, এবং এটি ভ্যারিয়েবল n এ সংরক্ষিত হয়।

  6. for(int i=1;i<=n;i++): এই লাইনে i নামের একটি ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে, যা সারির সংখ্যা নিয়ন্ত্রণ করে। এই লুপ প্রতিটি সারিতে প্রিন্ট করতে ব্যবহৃত।

  7. {: প্রধান লুপের ব্লক শুরু।

  8. for(int j=1;j<=k;j++): এই লাইনে প্রথম ইন্টারনাল লুপের ডিক্লেয়ারেশন করা হয়েছে, যা প্রতিটি সারিতে সংখ্যা প্রিন্ট করে। প্রতিটি সারিতে 1 থেকে k পর্যন্ত সংখ্যা প্রিন্ট হয়।

  9. {: ইন্টারনাল লুপের ব্লক শুরু।

  10. printf("%d ",j);: এই লাইনে প্রতিটি সংখ্যা মুদ্রণ করা হয়। প্রতিটি সংখ্যার পরে একটি স্পেস প্রিন্ট হয়।

  11. }: ইন্টারনাল লুপের ব্লক শেষ।

  12. k++;: k এর মান 1 বাড়ানো হয়েছে, যাতে প্রতিটি নতুন সারিতে সংখ্যা বেড়ে যায়।

  13. printf("\n");: এই লাইনে নতুন লাইন মুদ্রণ করা হয়েছে, যাতে প্রতিটি সারি নতুন লাইনে শুরু হয়।

  14. }: প্রধান লুপের ব্লক শেষ।

  15. return 0;: প্রোগ্রামের সমাপ্তি।

  16. }: মেইন ফাংশনের ব্লক শেষ।

Code:

c
#include <stdio.h>

int main()
{
    int n, s, k;
    scanf("%d", &n);
    s = n - 1;
    k = 1;
    for(int i=1; i<=(2*n)-1; i++)
    {
        // ekta line
        for(int j=1; j<=s; j++)
        {
            printf(" ");
        }
        for(int j=1; j<=k; j++)
        {
            printf("*");
        }
        // line seshe
        if(i <= n-1)
        {
            s--;
            k = k + 2;
        }
        else
        {
            s++;
            k = k - 2;
        }
        printf("\n");
    }
    return 0;
}

Input:

5

Output:

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

এই প্রোগ্রামটি নির্দিষ্ট প্যাটার্ন তৈরি করে, যা একটি ত্রিভুজের আকার বানায়। ত্রিভুজের প্রতিটি সারিতে স্পেস (space) এবং স্টার (*) সংখ্যা print করে, যা প্রতি সারিতে বাড়ছে এবং পরবর্তী সারিতে কমছে। নিচে প্রোগ্রামের বিবরণ দেওয়া হয়েছে:

  1. #include<stdio.h>: এই লাইনে stdio.h হেডার ফাইল ইমপোর্ট করা হয়েছে, যা ইনপুট এবং আউটপুট সংক্রান্ত ফাংশনগুলি সম্পর্কে তথ্য সরবরাহ করে।

  2. int main(): main() ফাংশন হল প্রোগ্রামের প্রধান ফাংশন, যা প্রোগ্রাম চালানোর সময় সবচেয়ে প্রথমে কল হয়।

  3. {: মেইন ফাংশনের ব্লক শুরু।

  4. int n, s, k;: এই লাইনে n, s, এবং k নামক তিনটি পূর্ণাংক ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে, যেখানে n হল ত্রিভুজের উচ্চতা, s হল স্পেসের সংখ্যা, এবং k হল স্টার (*) এর সংখ্যা নিয়ন্ত্রণ করতে ব্যবহৃত।

  5. scanf("%d",&n);: scanf() ফাংশনের মাধ্যমে ব্যবহারকারীকে ত্রিভুজের উচ্চতা ইনপুট নিই, এবং এটি ভ্যারিয়েবল n এ সংরক্ষিত হয়।

  6. s = n - 1;: এই লাইনে s এর মান n-1 ধরা হয়েছে, কারণ প্রথম সারিতে n-1 টি স্পেস থাকে।

  7. k = 1;: এই লাইনে k এর মান 1 ধরা হয়েছে, কারণ প্রথম সারিতে একটি স্টার প্রিন্ট হয়।

  8. for(int i=1;i<=(2*n)-1;i++): এই লাইনে প্রধান লুপের ডিক্লেয়ারেশন করা হয়েছে, যা ত্রিভুজের সারি নিয়ন্ত্রণ করে। ত্রিভুজে মোট (2*n)-1 সারি থাকবে।

  9. {: প্রধান লুপের ব্লক শুরু।

  10. for(int j=1;j<=s;j++): এই লাইনে প্রথম ইন্টারনাল লুপের ডিক্লেয়ারেশন করা হয়েছে, যা স্পেসের সংখ্যা নিয়ন্ত্রণ করে। প্রতিটি সারিতে স্পেস প্রিন্ট করা হয়।

  11. {: ইন্টারনাল লুপের ব্লক শুরু।

  12. printf(" ");: এই লাইনে একটি স্পেস প্রিন্ট করা হয়েছে।

  13. }: ইন্টারনাল লুপের ব্লক শেষ।

  14. for(int j=1;j<=k;j++): এই লাইনে দ্বিতীয় ইন্টারনাল লুপের ডিক্লেয়ারেশন করা হয়েছে, যা স্টার () এর সংখ্যা নিয়ন্ত্রণ করে। প্রতিটি সারিতে স্টার () প্রিন্ট করা হয়।

  15. {: দ্বিতীয় ইন্টারনাল লুপের ব্লক শুরু।

  16. printf("*");: এই লাইনে একটি স্টার (*) মুদ্রণ করা হয়েছে।

  17. }: দ্বিতীয় ইন্টারনাল লুপের ব্লকের শেষ।

  18. if(i<=n-1): এই লাইনে i যদি n-1 এর চেয়ে ছোট অথবা সমান হয়, তাহলে এই শর্ত সত্য হবে।

  19. {: ইফ স্টেটমেন্টের ব্লক শুরু।

  20. s--;: যদি শর্তটি সত্য হয়, তবে s এর মান 1 কমিয়ে দেওয়া হবে।

  21. k = k + 2;: যদি শর্তটি সত্য হয়, তবে k এর মান 2 যোগ করা হবে, যাতে পরবর্তী সারিতে স্টার (*) সংখ্যা বাড়ে।

  22. }: ইফ স্টেটমেন্টের ব্লক শেষ।

  23. else: এই লাইনে if কন্ডিশনের বাইরে অন্য কোন শর্ত সত্য হলে এই ব্লক সম্পাদিত হবে।

  24. {: এই ব্লকের শুরু।

  25. s++;: যদি উপরের শর্ত মিথ্যা হয়, তবে s এর মান 1 বাড়ানো হবে, যাতে পরবর্তী সারিতে স্পেস সংখ্যা বেড়ে যায়।

  26. k = k - 2;: যদি উপরের শর্ত মিথ্যা হয়, তবে k এর মান 2 কমিয়ে দেওয়া হবে, যাতে পরবর্তী সারিতে স্টার (*) সংখ্যা কমে যায়।

  27. }: ইফ স্টেটমেন্টের ব্লক শেষ।

  28. printf("\n");: এই লাইনে নতুন লাইন প্রিন্ট করা হয়েছে, যাতে প্রতিটি সারি নতুন লাইনে শুরু হয়।

  29. }: প্রধান লুপের ব্লক শেষ।

  30. return 0;: প্রোগ্রামের সমাপ্তি।

  31. }: মেইন ফাংশনের ব্লক শেষ।


মডিউল ১৩-৫+১৩-৬+১৩-৭: Sum of Two Values Equal X

Code:

c
#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    int a[n];
    for(int i=0; i<n; i++)
    {
        scanf("%d", &a[i]);
    }
    int x;
    scanf("%d", &x);
    int flag=0;
    for(int i=0; i<n-1; i++)
    {
        for(int j=i+1; j<n; j++)
        {
            if(a[i] + a[j] == x)
            {
                flag=1;
            }
        }
    }
    if(flag == 0)
    {
        printf("NO\n");
    }
    else
    {
        printf("YES\n");
    }
    return 0;
}

এক্সপ্লেনাশনঃ

এই প্রোগ্রামটির লজিক হলো একটি অ্যারের এর মধ্যে দুটি উপাদান নির্বাচন করে, যাদের যোগফল যদি একটি নির্দিষ্ট মান X এর সমান হয় তবে "YES" প্রিন্ট করা হবে, অন্যথায় "NO" প্রিন্ট করা হবে। প্রোগ্রামের বিবরণ নিচে দেওয়া হয়েছে:

  1. #include<stdio.h>: এই লাইনে stdio.h হেডার ফাইল ইমপোর্ট করা হয়েছে, যা ইনপুট এবং আউটপুট সংক্রান্ত ফাংশনগুলি সম্পর্কে তথ্য সরবরাহ করে।

  2. int main(): main() ফাংশন হল প্রোগ্রামের প্রধান ফাংশন, যা প্রোগ্রাম চালানোর সময় সবচেয়ে প্রথমে কল হয়।

  3. {: মেইন ফাংশনের ব্লক শুরু।

  4. int n;: এই লাইনে একটি পূর্ণসংখ্যা ভ্যারিয়েবল n ডিক্লেয়ার করা হয়েছে, যেটি অ্যারের উপাদানের সংখ্যা স্টোর করে।

  5. scanf("%d",&n);: এই লাইনে ব্যবহারকারীকে অ্যারের উপাদানের সংখ্যা ইনপুট করতে বলা হয়, এবং সেই সংখ্যাটি n ভ্যারিয়েবলে সংরক্ষিত হয়।

  6. int a[n];: এই লাইনে একটি অ্যারে a ডিক্লেয়ার করা হয়েছে, যার আকার নির্দিষ্ট করতে ব্যবহৃত হয়েছে এই সংখ্যার মান দ্বারা।

  7. for(int i=0;i<n;i++): এই লাইনে লুপ চালানো হয়, যেটি প্রতিটি উপাদানের মান ইনপুট নেয়।

  8. {: লুপের ব্লক শুরু।

  9. scanf("%d",&a[i]);: এই লাইনে অ্যারের প্রতিটি উপাদানের মান ইনপুট নেয়।

  10. }: লুপের ব্লক শেষ।

  11. int x;: এই লাইনে একটি পূর্ণসংখ্যা ভ্যারিয়েবল x ডিক্লেয়ার করা হয়েছে, যেটি ব্যবহারকারীর দ্বারা ইনপুট হওয়া মান X প্রদান করে।

  12. scanf("%d",&x);: এই লাইনে ব্যবহারকারীকে X এর মান ইনপুট করতে বলা হয়, এবং সেই মানটি x ভ্যারিয়েবলে সংরক্ষিত হয়।

  13. int flag = 0;: এই লাইনে ফ্ল্যাগ নামক একটি ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে, যার মান শুরুতে শূন্য হিসেবে নেওয়া হয়েছে।

  14. for(int i=0;i<n-1;i++): এই লাইনে একটি লুপ চালানো হয়, যা অ্যারের প্রতিটি উপাদানের জোড় বা সংখ্যার যোগফল খুঁজে।

  15. {: লুপের ব্লক শুরু।

  16. for(int j=i+1;j<n;j++): এই লাইনে একটি ইন্টারনাল লুপ চালানো হয়, যা প্রথম লুপের ইন্ডেক্স পরবর্তী ইন্ডেক্সের পরের থেকে শুরু হয়।

  17. {: ইন্টারনাল লুপের ব্লক শুরু।

  18. if(a[i] + a[j] == x): এই লাইনে চেক করা হয় যে প্রথম উপাদান এবং দ্বিতীয় উপাদানের যোগফল প্রদত্ত মান X এর সমান কিনা।

  19. {: কন্ডিশনাল ব্লকের শুরু।

  20. flag = 1;: যদি উপরের শর্ত সত্য হয়, তবে ফ্ল্যাগ ভ্যারিয়েবলটির মান পরিবর্তিত হবে এবং প্রোগ্রামের অনুমান করা হবে যে সংখ্যাটি পাওয়া যায়।

  21. }: কন্ডিশনাল ব্লক শেষ।

  22. }: ইন্টারনাল লুপের ব্লক শেষ।

  23. }: প্রধান লুপের ব্লক শেষ।

  24. if(flag == 0): এই লাইনে পরীক্ষা করা হয় যে ফ্ল্যাগ ভ্যারিয়েবলের মান শূন্য কিনা।

  25. {: কন্ডিশনাল ব্লক শুরু।

  26. printf("NO\n");: যদি উপরের শর্ত সত্য হয়, তবে "NO" প্রিন্ট করা হবে এবং প্রোগ্রাম পূর্বাবস্থায় ফিরে যাবে।

  27. }: কন্ডিশনাল ব্লক শেষ।

  28. else: এই লাইনে কোন কন্ডিশন সত্য না হলে অথবা উপরের শর্তগুলির যে কোন একটি সত্য হলে এই ব্লক সম্পাদিত হবে।

  29. {: ব্লকের শুরু।

  30. printf("YES\n");: যদি উপরের শর্ত মিথ্যা হয়, তবে "YES" প্রিন্ট করা হবে এবং প্রোগ্রাম পূর্বাবস্থায় ফিরে যাবে।

  31. }: ব্লকের শেষ।

  32. return 0;: প্রোগ্রামের সমাপ্তি।

  33. }: মেইন ফাংশনের বড় ব্লক শেষ।


মডিউল ১৩-৮+১৩-৯: সিলেকশন সর্ট

সিলেকশন সর্ট:

ডেটা স্ট্রাকচারে ডেটা সাজানোর গুরুত্ব অনেক বেশি। বিভিন্ন ধরণের ডেটা স্ট্রাকচার ও তাদের ব্যবহার বিভিন্ন ধরনের অ্যালগরিদমে সহায়তা করে। ডেটা সাজানো বা সর্ট করা হল এমন একটি গুরুত্বপূর্ণ কাজ, যা একটি প্রোগ্রামিং ভাষায় ডেটা প্রক্রিয়াকে সহজ করে তুলে দেয়। সিলেকশন সর্ট হল এমন একটি সর্টিং এলগরিদম, যা সহজ এবং সরল। এই অ্যালগরিদম প্রায় সকল প্রোগ্রামিং ভাষায় ব্যবহার করা হয়, এবং তা সহজেই বুঝা যায়।

সিলেকশন সর্টের কাজকর্ম

সিলেকশন সর্ট এর মূল কাজ হল সব থেকে ছোট (বা বড়) মান নির্বাচন করা এবং তা সবচেয়ে প্রথম (বা শেষ) স্থানে রাখা। এরপর পরের অংশের মধ্যে আবার ছোট (বা বড়) মান নির্বাচন করা এবং তা প্রথম (বা শেষ) স্থানে রাখা। এই পদ্ধতিটি প্রতিটি অংশের জন্য পুনরাবৃত্তি করা হয় যাতে অ্যারেটি সম্পূর্ণ সর্টেড হয়।

প্রক্রিয়া

  1. সিলেকশন সর্ট কাজ করার প্রক্রিয়া সহজ। একটি অ্যারে ব্যবহার করা হয় যাতে তার মধ্যে অংশ সর্ট করা যায়।

  2. প্রথমে অ্যারের সব উপাদান নিয়ে নেওয়া হয়।

  3. তারপর প্রথম উপাদানকে ধরা হয় ছোট মান বলে।

  4. পরের উপাদান ধরা হয় এবং এর সাথে প্রাথমিক উপাদান তুলনা করা হয়। যদি পরের উপাদান প্রাথমিক উপাদানের চেয়ে ছোট হয়, তবে তাকে প্রাথমিক উপাদানের সাথে পরিবর্তন করা হয়।

  5. এই প্রক্রিয়াটি পুনরাবৃত্তি করা হয় প্রতিটি উপাদানের জন্য অ্যারের শেষ অংশে পৌঁছানো পর্যন্ত। প্রতিবার প্রথম উপাদান অংশে সর্টেড থাকবে এবং পরের উপাদান প্রাথমিক উপাদানের সাথে তুলনা করে সর্ট করা হবে।

Code:

c
#include <stdio.h>

int main()
{
     int n;
     scanf("%d", &n);
     int a[n];
     for(int i=0; i<n; i++)
     {
         scanf("%d", &a[i]);
     }

     for(int i=0; i<n-1; i++)
     {
         for(int j=i+1; j<n; j++)
         {
             if(a[i] > a[j])
             {
                 int tmp=a[i];
                 a[i]=a[j];
                 a[j]=tmp;
             }
         }
     }

     for(int i=0; i<n; i++)
     {
         printf("%d ",a[i]);
     }
     return 0;
}

Explanaitons:

এই কোডে দুটি সিলেকশন সর্ট সম্পাদন করা হয়েছে:

  1. #include<stdio.h>: এই লাইনে &lt;stdio.h&gt; হেডার ফাইল ইমপোর্ট করা হয়েছে।

  2. int main(): মেইন ফাংশন শুরু ।

  3. {: মেইন ফাংশনের ব্লক শুরু।

  4. int n;: ইনটিজার টাইপের নির্দিষ্ট একটি ভ্যারিয়েবল n ডিক্লেয়ার করা হয়েছে।

  5. scanf("%d",&n);: ব্যবহারকারী থেকে ইনটিজার টাইপের মান ইনপুট নেয়া হয়।

  6. int a[n];: অ্যারে ডিক্লেয়ার করা হয়েছে যার উপাদান সংখ্যা n যেটি ব্যবহারকারী ইনপুট দিয়ে নির্দেশ করে।

  7. for(int i=0;i<n;i++): প্রথম ফর লুপ চালানো হয়, যা প্রতিটি উপাদানের মান ইনপুট নেয়।

  8. {: লুপের ব্লক শুরু।

  9. scanf("%d",&a[i]);: ব্যবহারকারী থেকে প্রতিটি উপাদানের মান ইনপুট নেয়া হয়।

  10. }: লুপের ব্লক শেষ।

  11. for(int i=0;i<n-1;i++): এই লুপের মাধ্যমে সর্টিং করা হয়।

  12. {: প্রধান লুপের ব্লক শুরু।

  13. for(int j=i+1;j<n;j++): এই লুপের মাধ্যমে অ্যারের পরের উপাদানগুলির সাথে তুলনা করা হয়।

  14. {: ইন্টারনাল লুপের ব্লক শুরু।

  15. if(a[i]>a[j]): যদি একটি উপাদান পরের উপাদানের থেকে বড় হয়, তবে তাদের স্থান পরিবর্তন করা হয়।

  16. {: কন্ডিশনাল ব্লকের শুরু।

  17. int tmp=a[i];: একটি অস্থায়ী ভ্যারিয়েবল tmp নিয়ে a[i] এর মান সংরক্ষণ করা হয়।

  18. a[i]=a[j];: a[j] এর মান a[i] তে রাখা হয়।

  19. a[j]=tmp;: tmp এর মান a[j] তে রাখা হয়, যার মাধ্যমে দুটি উপাদানের মান swap করা হয়।

  20. }: কন্ডিশনাল ব্লক শেষ।

  21. }: ইন্টারনাল লুপের ব্লক শেষ।

  22. }: প্রধান লুপের ব্লক শেষ।

  23. for(int i=0;i<n;i++): এই লাইনে লুপ চালানো হয়, যেটি সর্ট করা অ্যারের উপাদানগুলি প্রিন্ট করে।

  24. {: লুপের ব্লক শুরু।

  25. printf("%d ",a[i]);: প্রতিটি উপাদান প্রিন্ট করা হয়।

  26. }: লুপের ব্লক শেষ।

  27. return 0;: প্রোগ্রামের সমাপ্তি।

  28. }: মেইন ফাংশনের ব্লক শেষ।

Released under the MIT License.