সি প্রোগ্রামিং এর হাতে খড়ি পর্ব ১৩ (Function)

1

আসসালামু আলাইকুম। কেমন আছেন সবাই?

ফাংশন ব্যবহার করা হয় কোন একটা নির্দিষ্ট কাজ করার জন্য। যেমন printf ফাংশন দিয়ে আমরা আউটপুট দিই। আবার scanf, getchar
এসব ফাংশন দিয়ে আমরা কীবোর্ড থেকে ইনপুট নিই।

এবার  দেখি আমরা  নিজেরা  কীভাবে  ফাংশন  তৈরী  করে  পারি।  ফাংশন  যখন আমরা তৈরী করব তখন তার গঠন  হেব  মোটামোটি এই  রকম:

return_type function_name (parameters) {
function_body
return value
}

return_type: এখানে বলে দিতে হবে ফাংশনের কাজ শেষ করে কী ধরেনর ডাটা  রিটার্ন করবে। রিটার্ন টাইপ int, double এসব হেত পারে।
আবার কিছু রটার্ন করেত না চাইেল void হেত পারে। অথাৎ সে কিছুই রিটার্ন করবে না। এর মানে দাড়ায়  ফাংশনকে দিয়ে কোন ধরনের ডাটা টাইপ রিটার্ন করতে চান তা বলে দিতে হবে।

function_name: এখানে আমাদের ফাংশেনর নাম লিখতে হবে। ফাংশেনর নাম হতে হবে অর্থপূর্ণ যাতে নাম দেখেই ধারনা করা যায় যে ফাংশন কী কাজ করে। যেমন কোন সংখ্যার বর্গমূল নির্ণ্যের জন্য যদি আমরা একই ফাংশন লিখি তবে তার নাম আমরা দিতে পারি square_root বা sqrt।

parameters: এখানে ফাংশনের কাজ করার জন্য প্রয়োজনীয় ডাটা আমরা  দিব।  যেমন  স্ট্রীং এর দৈর্ঘ  নির্ণয়ের জন্য আমরা যখন strlen() ব্যবহার করি  সেখানে  কোন স্ট্রীংএর দৈর্ঘ  নির্ণয় করেত হবে তা বলে দিতে হয়।

যেমন, getchar() বা main() ফাংশন। একাধিক প্যারামিটার পাঠানোর সময় () এর ভেতর প্যারামিটার  কমা  (,)  দিয়ে  আলাদা  করেত  হেব।

function_body:  ফাংশন  কীভাবে  কী  কাজ  করবে তা ফাংশন বডিতে  বলে  দিতে  হবে।  মানে  কোড  লিখতে  হবে ।

return value: ফাংশনের কাজ শেষ কের, তাকে যে জায়গা থেকে কল করা হইয়েছে সে জায়গায় ফিরে যায়। ফিরার সময় আমরা কোন মান পাঠাতে পারি। যেমন sqrt() ফাংশনে আমরা চাই সে বর্গমূল বের করবে। এবং তা ফেরত পাঠাবার ব্যাবস্থা রাখতে হবে এর মান যদি  x  হয়,  তেব  আমরা  return x; লিখব।

int root = sqrt(25);

এখানে  sqrt  ফাংশন  25-এর বর্গমূল নির্ণয়  করার  পর  বর্গমূল  ফেরত  পাঠাবে  এবং  তা root  নামের  এক ভেরিয়েবলে  জমা  হবে।
এখন উদাহরণ দিই।  trigonometry তে দেখেছেন নিশ্চয়ই sin, cos, tan এদের। sin 300-এর মান  0.5। এখানে sin  আসলে একটা ফাংশন, যার প্যারামিটার হিসেবে আমরা কোণের মান পাঠাই। আর ফাংশন ওই কোণের sine (সংক্ষেপে sin)-এর মান রিটার্ণ করছে।

নিচের উদাহারণ দেখিঃ

#include <stdio.h>
int main()
{
double a, b, c;
a = 2.5;
b = 2.5;
c = a + b;
printf(“%lf\n” c);
return 0;
}

। আউটপুট কী? 5.000000।

এবার আমরা দুটো সংখ্যা যোগ করার জন্য একটি ফাংশন লিখি ।  যোগের কাজ আর main ফাংশেনর ভেতরে করব না।

#include <stdio.h>
int add(int num1, int num2)
{
double sum = num1 + num2;
return sum;
}
int main()
{
double a, b, c;
a = b = 2.5;
c = add(a, b);
printf(“%lf\n”, c);
return 0;
}

আউটপট কী? 4.000000! ওহ  আমরা সামান্য ভুল করেছি। num1 ও num2 আসলে int টাইেপর না,
double টাইেপর। ওই ভেরিয়েবল ইন্টিজার হিসেবে ডিক্লার করার কারেণ 2.5 হয়েছে 2 (টাইপ কাষ্টীং এর কথা তো জানি।

int add(double num1, double num2)
{
double sum = num1 + num2;
return sum;
}

এখন
#include <stdio.h>
double add(double n1, double n2)
{
double sum = n1 + n2;
return sum;
}
int main()
{
double a, b, c;
a = 2.8;
b = 2.7;
c = add(a, b);
printf(“%lf\n”, c);
return 0;
}
আমরা এখন আরেকটু ভিন্নভাবে করব। add ফাংশন main ফাংশেনর পরে লিখব:

#include <stdio.h>
int main()
{
double a = 2.8, b = 2.7, c;
c = add(a, b);
printf(“%lf\n”, c);
return 0;
}
double add(double n1, double n2)
{
double sum = n1 + n2;
return sum;
}

কিন্তু প্রোগ্রাম রান করতে অসম্মত জানাবে কারণ এই নিয়মে লিখত হলে (prototype) লিখতে হবে।

double add(double n1, double n2);

এরপর রিটার্ণ টাইপ লিখতে হবে।

return_type function_name (parameters) ;

পুরো প্রোগ্রামটা দাঁডায়ঃ

#include <stdio.h>
double add(double x, double y);
int main()
{
double a = 2.8, b = 2.7, c;
c = add(a, b);
printf(“%lf\n”, c);
return 0;
}
double add(double n1, double n2)
{
double sum = n1 + n2;
return sum;
}

নিচের প্রোগ্রামটি দেখুন এবং বোঝার চেষ্টা করুন, না বুঝলে তো আমি আছিই…

#include <stdio.h>
int test_function(int x)
{
int y = x;
x = 2 * y;
return (x * y);
}
int main()
{
int x = 10, y = 20, z = 30;
z = test_function(x);
printf(“%d %d %d\n”, x, y, z);
return 0;
}

কমেন্টে জানবেন কোন সমস্যা থাকলে বা কেউ না বুঝলে। পরবর্তি পোষ্ট না দেয়া পর্যন্ত ভালো থাকুন।

Share.

About Author

Rajumeazi

I am a free learner like to fly in the whole cyber world to gather knowledge. And I know I have only a little to share but I will try my best to give you what I have. :) Thank you :)

1 Comment

Leave A Reply

Powered by themekiller.com