সি প্রোগ্রামিং এইচটিএমএল সিএসএস জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল
ফোরাম
×

 সি টিউটোরিয়াল

সি প্রোগ্রামিং কি? সি এর ইতিহাস সি এর বৈশিষ্ট্যসমূহ কেন সি শিখবেন? সি ইন্সটলেশন প্রথম সি প্রোগ্রাম সি প্রোগ্রামের ফ্লো প্রোগ্রামিং শেখার সঠিক পদ্ধতি সি কীওয়ার্ড সি আইডেন্টিফায়ার সি ভ্যারিয়েবল সি কনস্ট্যান্ট সি ডাটা টাইপ সি মোডিফায়ার সি ইনপুট/আউটপুট সি অপারেটর সি কমেন্ট সি অপারেটর অগ্রাধিকার

সি কন্ট্রোল স্টেটমেন্ট

সি ইফ সি ইফ...ইলস সি ফর লুপ সি হোহাইল লুপ সি ডু...হোহাইল লুপ সি ব্রেক সি কন্টিনিউ সি সুইচ স্টেটমেন্ট সি goto স্টেটমেন্ট

 সি ফাংশন

সি ফাংশন পরিচিতি সি ইউজার কর্তৃক ফাংশন সি ফাংশন টাইপ সি রিকার্সন সি ভ্যারিয়েবল স্কোপ

 সি অ্যারে

সি অ্যারে পরিচিতি সি মালটি-ডাইমেনশনাল অ্যারে সি অ্যারে ফাংশন

 সি স্ট্রিং

সি স্ট্রিং সি স্ট্রিং ফাংশন

 সি পয়েন্টার

সি পয়েন্টার পরিচিত সি পয়েন্টার অ্যারে সি পয়েন্টার ফাংশন সি মেমোরি ম্যানেজমেন্ট

 সি ফাইল এবং স্ট্রাকচার

স্ট্রাকচার পরিচিত স্ট্রাকচার ও পয়েন্টার সি স্ট্রাকচার ও ফাংশন সি ইউনিয়ন ফাইল হ্যান্ডেলিং

 সি অতিরিক্ত টিউটোরিয়াল

সি লাইব্রেরী সি প্রিপ্রোসেসর এবং ম্যাক্রো সি ইনুমিরেশন সি এরর নিয়ন্ত্রণ সি টাইপ কাস্টিং সি বিট ফিল্ড সি ভ্যারিয়েবল আর্গুমেন্ট সি কমান্ড লাইন আর্গুমেন্ট

 

সি প্রোগ্রামিং এ ইউজার ডিফাইন্ড ফাংশনের প্রকারভেদ


এই অধ্যায়ে আপনি ফাংশন ব্যবহার করে একই সমস্যা বিভিন্ন পদ্ধতিতে সমাধান করা শিখবেন।

ফাংশনের রিটার্ন ভ্যালু এবং আর্গুমেন্ট-সমূহ ভালভাবে বুঝার জন্য ইউজার ডিফাইন্ড ফাংশন কে নিম্নোক্ত ক্যাটাগরিতে ভাগ করা যেতে পারেঃ

  1. আর্গুমেন্ট এবং রিটার্ন ভ্যালুসহ ফাংশন
  2. আর্গুমেন্ট এবং রিটার্ন ভ্যালু ব্যতীত ফাংশন
  3. আর্গুমেন্ট ব্যতীত এবং রিটার্ন ভ্যালুসহ ফাংশন
  4. আর্গুমেন্টসহ এবং রিটার্ন ভ্যালু ব্যতীত ফাংশন

নিচের চারটি প্রোগ্রামেই ইউজার মৌলিক(prime) সংখ্যা প্রবেশ করায় কিনা চেক করার প্রোগ্রাম। সবগুলো প্রোগ্রাম একই ফলাফল দেখায়।


উদাহরনঃ আর্গুমেন্ট এবং রিটার্ন ভ্যালুসহ ফাংশন

#include <stdio.h>
int checkPrimeNumber(int n);

int main()
{
    int n, flag;

    printf("Enter a positive integer: ");
    scanf("%d",&n);

    /* checkPrimeNumber() ফাংশনের মধ্য দিয়ে n কে অতিক্রম করানো হয়।
     ফাংশন থেকে রিটার্নকৃত ভ্যালু flag ভ্যারিয়েবলে জমা হয়*/
    flag = checkPrimeNumber(n);

    if(flag==1)
        printf("%d is not a prime number",n);
    else
        printf("%d is a prime number",n);

    return 0;
}

// এই ফাংশন থেকে integer রিটার্ন হয়। 
int checkPrimeNumber(int n)
{
    /*checkPrimeNumber() ফাংশন থেকে পূর্ণ সংখ্যা(Integer number) রিটার্ন হয় */
    int i;

    for(i=2; i <= n/2; ++i)
    {
        if(n%i == 0)
            return 1;
    }

    return 0;
}

ইউজার কর্তৃক ইনপুট checkPrimeNumber() ফাংশনের মধ্য দিয়ে অতিক্রম করানো হয়।

checkPrimeNumber() ফাংশন অতিক্রান্ত আর্গুমেন্ট মৌলিক সংখ্যা কিনা চেক করে। অতিক্রান্ত আর্গুমেন্ট মৌলিক সংখ্যা হলে ফাংশন 0 রিটার্ন করে। অতিক্রান্ত আর্গুমেন্ট মৌলিক সংখ্যা না হলে 1 রিটার্ন করে। রিটার্ন ভ্যালু flag ভ্যারিয়েবলে এসাইন হয়।

অবশেষে main() ফাংশন থেকে উপযুক্ত ম্যাসেজ প্রদর্শিত হয়।


উদাহরনঃ আর্গুমেন্ট এবং রিটার্ন ভ্যালু ব্যতীত ফাংশন

#include <stdio.h>

void checkPrimeNumber();

int main()
{
    checkPrimeNumber();    // checkPrimeNumber() ফাংশনের মধ্য দিয় কোনো আর্গুমেন্ট অতিক্রম করানো হয় নি। 
    return 0;
}

// ফাংশন থেকে কোনো ভ্যালু রিটার্ন না হওয়ায় রিটার্ন টাইপ  void  রাখা হয়েছে।
void checkPrimeNumber()
{
    int n, i, flag=0;

    printf("Enter a positive integer: ");
    scanf("%d",&n);

    for(i=2; i <= n/2; ++i)
    {
        if(n%i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d is not a prime number.", n);
    else
        printf("%d is a prime number.", n);
}

checkPrimeNumber() ফাংশন ইউজার থেকে ইনপুট গ্রহণ করে, ইনপুট ভ্যালু প্রাইম নাম্বার কিনা চেক করে এবং স্ক্রিনে উপযুক্ত ম্যাসেজ দেখায়।

main() ফাংশনের মধ্যে checkPrimeNumber(); ফাংশনের ফাঁকা বন্ধনী এই নির্দেশ করে যে, ফাংশনের মধ্য দিয়ে কোনো ভ্যালু অতিক্রম করতে পারবে না।

checkPrimeNumber(); ফাংশনের রিটার্ন টাইপ void হওয়ায় ইহা কোনো ভ্যালু রিটার্ন করে না।


উদাহরনঃ আর্গুমেন্ট ব্যতীত এবং রিটার্ন ভ্যালুসহ ফাংশন

#include <stdio.h>
int getInteger();

int main()
{
    int n, i, flag = 0;

    //ফাংশনের মধ্য দিয় কোনো আর্গুমেন্ট অতিক্রম করানো হয় নি। 
    // ফাংশন থেকে রিটার্নকৃত ভ্যালু n ভ্যারিয়েবলে জমা হয়। 
    n = getInteger();

    for(i=2; i<=n/2; ++i)
    {
        if(n%i==0){
            flag = 1;
            break;
        }
    }

    if (flag == 1)
        printf("%d is not a prime number.", n);
    else
        printf("%d is a prime number.", n);

    return 0;
}

// getInteger() ফাংশন থেকে পূর্ণ সংখ্যা(Integer number) রিটার্ন করে। 
int getInteger()
{
    int n;

    printf("Enter a positive integer: ");
    scanf("%d",&n);

    return n;
}

n = getInteger(); ফাংশনের ফাঁকা বন্ধনী নির্দেশ করে যে, ফাংশনের মধ্য দিয়ে কোন ভ্যালু অতিক্রম করবে এবং ফাংশন থেকে রিটার্ন ভ্যালু n ভ্যারিয়েবলে এসাইন হবে।

এখানে getInteger() ফাংশন ইউজার থেকে ইনপুট গ্রহণ করে এবং ইহা রিটার্ন করে। সংখ্যাটি মৌলিক কিনা চেক করার জন্য কোড main() ফাংশনে রয়েছে।


উদাহরনঃ আর্গুমেন্টসহ এবং রিটার্ন ভ্যালু ব্যতীত ফাংশন

#include <stdio.h>
void checkPrimeAndDisplay(int n);

int main()
{
    int n;

    printf("Enter a positive integer: ");
    scanf("%d",&n);

    // n is passed to the function
    checkPrimeAndDisplay(n);

    return 0;
}

// void indicates that no value is returned from the function
void checkPrimeAndDisplay(int n)
{
    int i, flag = 0;

    for(i=2; i <= n/2; ++i)
    {
        if(n%i == 0){
            flag = 1;
            break;
        }
    }
    if(flag == 1)
        printf("%d is not a prime number.",n);
    else
        printf("%d is a prime number.", n);
}

ইউজার কর্তৃক প্রবেশ করানো ইন্টেজার নাম্বার checkPrimeAndDisplay() ফাংশনের মধ্য দিয়ে অতিক্রম করানো হয়।

checkPrimeAndDisplay() ফাংশন অতিক্রান্ত আর্গুমেন্ট মৌলিক সংখ্যা কিনা চেক করে এবং উপযুক্ত ম্যাসেজ ডিসপ্লে করে।


কোন পদ্ধতিটি সবচেয়ে ভাল?

আপনি কি ধরণের সমস্যা সমাধান করতে চাচ্ছেন ইহা তার উপর নির্ভর করে। আমাদের সমস্যার ক্ষেত্রে প্রথমটি সবচেয়ে ভাল।

নির্দিষ্ট কার্য হাসিল করার জন্য ফাংশন ব্যবহার করা উচিৎ। আমাদের প্রথম প্রোগ্রামে checkPrimeNumber() ফাংশনটি ইউজার থেকে কোনো ধরনের ইনপুট গ্রহণ করে না এবং কোনো ম্যাসেজও ডিসপ্লে করে না। ইহা শুধুমাত্র সংখ্যাটি মৌলিক সংখ্যা কিনা চেক করে যা প্রোগ্রামকে মডিউলারে পরিনত করে। ফলে প্রোগ্রাম বুঝতে ও ডিবাগিং করতে সহজ হয়।