সি প্রোগ্রামিং এ ইউজার ডিফাইন্ড ফাংশনের প্রকারভেদ
সি ইউজার ডিফাইন্ড ফাংশন
ফাংশনের রিটার্ন ভ্যালু এবং আর্গুমেন্ট-সমূহ ভালভাবে বুঝার জন্য ইউজার ডিফাইন্ড ফাংশন কে নিম্নোক্ত ক্যাটাগরিতে ভাগ করা যেতে পারেঃ
- আর্গুমেন্ট এবং রিটার্ন ভ্যালুসহ ফাংশন
- আর্গুমেন্ট এবং রিটার্ন ভ্যালু ব্যতীত ফাংশন
- আর্গুমেন্ট ব্যতীত এবং রিটার্ন ভ্যালুসহ ফাংশন
- আর্গুমেন্টসহ এবং রিটার্ন ভ্যালু ব্যতীত ফাংশন
নিচের চারটি প্রোগ্রামেই ইউজার মৌলিক(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()
ফাংশনটি ইউজার থেকে কোনো ধরনের ইনপুট গ্রহণ করে না এবং কোনো ম্যাসেজও ডিসপ্লে করে না। ইহা শুধুমাত্র সংখ্যাটি মৌলিক সংখ্যা কিনা চেক করে যা প্রোগ্রামকে মডিউলারে পরিনত করে। ফলে প্রোগ্রাম বুঝতে ও ডিবাগিং করতে সহজ হয়।