Function
ফাংশন
ফাংশন (Function)
১. ভূমিকা — রেসিপি একবার লেখো, বারবার রাঁধো
তোমার মা প্রতিদিন রান্না করেন। ভাত রান্নার পদ্ধতি কি প্রতিদিন নতুন করে লেখেন?
না! একবার শিখলেই হয়ে যায় — "ভাত রান্না করো" বললেই তিনি জানেন কী করতে হবে।
প্রোগ্রামিং-এ Function (ফাংশন) ঠিক এমন — একবার কোড লেখো, বারবার নাম ধরে ডাকো।
২. সমস্যা — একই কোড বারবার লেখা কি বুদ্ধিমানের কাজ?
ধরো তোমাকে একটি প্রোগ্রামে ৫ জায়গায় বর্গক্ষেত্রের ক্ষেত্রফল বের করতে হবে। Function ছাড়া:
area1 = side1 * side1;
area2 = side2 * side2;
area3 = side3 * side3;
area4 = side4 * side4;
area5 = side5 * side5;
একই কোড ৫ বার! Function দিয়ে:
int squareArea(int side) {
return side * side;
}
// যেকোনো জায়গায় squareArea(5) লিখলেই হবে
সুবিধা: একবার লেখো, বারবার ব্যবহার করো।
৩. চিত্রের মাধ্যমে বোঝো
Function Call:
main() add(5, 3)
│ │
│── add(5, 3) ────────────►│ a=5, b=3 পায়
│ │ 5+3=8 হিসাব করে
│◄── return 8 ─────────────│ 8 ফেরত দেয়
│ │
│ result = 8
৪. বাস্তব জীবনের সাথে মিল
রেস্তোরাঁর অর্ডার সিস্টেম ভাবো:
- তুমি = main function
- ওয়েটার = function call
- রান্নাঘর = function body
- খাবার = return value
তুমি "বিরিয়ানি" অর্ডার দিলে → রান্নাঘর কাজ করে → বিরিয়ানি আসে।
তুমি function call করো → function কাজ করে → ফলাফল আসে।
Module 1: সংজ্ঞা ও ধারণা
Function Structure:
return_type function_name(parameter_list) {
// function body
return value; // (void হলে লাগে না)
}
Function-এর ৪টি অংশ:
| অংশ | বর্ণনা | উদাহরণ |
|---|---|---|
| Return Type | কী ধরনের মান ফেরত দেবে | int, float, void |
| Function Name | ফাংশনের নাম | add, square |
| Parameters | ইনপুট গ্রহণ | (int a, int b) |
| Return Statement | ফলাফল ফেরত | return a + b; |
void Function (কিছু ফেরত দেয় না):
void greet() {
printf("হ্যালো!\n");
}
Module 2: কীভাবে কাজ করে
int add(int a, int b) {
return a + b;
}
main() তে: result = add(5, 3);
Stack (স্তূপ) পরিবর্তন:
1. main() চলছে
Stack: [main: result=?]
2. add(5, 3) call
Stack: [main: result=?] [add: a=5, b=3]
3. add() এর ভেতরে হিসাব: a+b = 8
Stack: [main: result=?] [add: return 8]
4. add() শেষ, 8 ফেরত দেয়
Stack: [main: result=8]
5. add() বাদ যায়
Stack: [main: result=8]
Module 3: প্যাটার্ন ও উদাহরণ
প্যাটার্ন ১: void Function (কোনো ইনপুট নেই, কিছু ফেরত দেয় না)
উদাহরণ ১.১: সাধারণ বার্তা
#include <stdio.h>
void printWelcome() {
printf("================================\n");
printf(" HSC ICT প্রোগ্রামিং কোর্সে \n");
printf(" স্বাগতম! \n");
printf("================================\n");
}
int main() {
printWelcome();
printWelcome(); // দুইবার call করা যায়
return 0;
}
উদাহরণ ১.২: তারার লাইন
#include <stdio.h>
void printLine(int n) {
int i;
for (i = 0; i < n; i++) printf("*");
printf("\n");
}
int main() {
printLine(10);
printLine(5);
printLine(15);
return 0;
}
আউটপুট:
**********
*****
***************
উদাহরণ ১.৩: ফলাফল দেখানো
#include <stdio.h>
void showResult(int marks) {
printf("নম্বর: %d\n", marks);
if (marks >= 80)
printf("গ্রেড: A+\n");
else if (marks >= 60)
printf("গ্রেড: A\n");
else if (marks >= 33)
printf("গ্রেড: পাস\n");
else
printf("গ্রেড: ফেল\n");
printf("---\n");
}
int main() {
showResult(85);
showResult(55);
showResult(25);
return 0;
}
প্যাটার্ন ২: Return Value সহ Function
উদাহরণ ২.১: দুটি সংখ্যার যোগ
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int result;
result = add(5, 3);
printf("5 + 3 = %d\n", result);
printf("10 + 20 = %d\n", add(10, 20));
printf("100 + 200 = %d\n", add(100, 200));
return 0;
}
আউটপুট:
5 + 3 = 8
10 + 20 = 30
100 + 200 = 300
উদাহরণ ২.২: বর্গ ও ঘন
#include <stdio.h>
int square(int n) {
return n * n;
}
int cube(int n) {
return n * n * n;
}
int main() {
int i;
printf("n\t n²\t n³\n");
printf("----\t----\t----\n");
for (i = 1; i <= 5; i++) {
printf("%d\t%d\t%d\n", i, square(i), cube(i));
}
return 0;
}
আউটপুট:
n n² n³
---- ---- ----
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
উদাহরণ ২.৩: বড় সংখ্যা খোঁজা
#include <stdio.h>
int maximum(int a, int b) {
if (a > b)
return a;
else
return b;
}
int main() {
printf("max(10, 20) = %d\n", maximum(10, 20));
printf("max(55, 33) = %d\n", maximum(55, 33));
printf("max(7, 7) = %d\n", maximum(7, 7));
return 0;
}
আউটপুট:
max(10, 20) = 20
max(55, 33) = 55
max(7, 7) = 7
প্যাটার্ন ৩: Multiple Parameters
উদাহরণ ৩.১: আয়তক্ষেত্রের ক্ষেত্রফল
#include <stdio.h>
float rectangleArea(float length, float width) {
return length * width;
}
float rectanglePerimeter(float length, float width) {
return 2 * (length + width);
}
int main() {
float l = 8.5, w = 4.0;
printf("দৈর্ঘ্য: %.1f, প্রস্থ: %.1f\n", l, w);
printf("ক্ষেত্রফল: %.2f\n", rectangleArea(l, w));
printf("পরিসীমা: %.2f\n", rectanglePerimeter(l, w));
return 0;
}
আউটপুট:
দৈর্ঘ্য: 8.5, প্রস্থ: 4.0
ক্ষেত্রফল: 34.00
পরিসীমা: 25.00
উদাহরণ ৩.২: শক্তির গড়
#include <stdio.h>
float average(int a, int b, int c) {
return (a + b + c) / 3.0;
}
int main() {
printf("গড়(70, 80, 90) = %.1f\n", average(70, 80, 90));
printf("গড়(55, 65, 75) = %.1f\n", average(55, 65, 75));
return 0;
}
প্যাটার্ন ৪: Recursive Function (পুনরাবৃত্তিমূলক)
উদাহরণ ৪.১: Factorial
#include <stdio.h>
long long factorial(int n) {
if (n == 0 || n == 1)
return 1; // Base case
return n * factorial(n-1); // Recursive case
}
int main() {
printf("0! = %lld\n", factorial(0));
printf("1! = %lld\n", factorial(1));
printf("5! = %lld\n", factorial(5));
printf("10! = %lld\n", factorial(10));
return 0;
}
আউটপুট:
0! = 1
1! = 1
5! = 120
10! = 3628800
উদাহরণ ৪.২: Fibonacci
#include <stdio.h>
int fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
int main() {
int i;
printf("Fibonacci: ");
for (i = 0; i < 10; i++) {
printf("%d ", fibonacci(i));
}
printf("\n");
return 0;
}
আউটপুট:
Fibonacci: 0 1 1 2 3 5 8 13 21 34
Module 4: বাস্তব প্রয়োগ
| প্রয়োগ | Function |
|---|---|
| Bank → টাকা তোলা | withdraw(amount) |
| Google → অনুসন্ধান | search(query) |
| Math library | sqrt(), pow(), abs() |
| String library | strlen(), strcpy() |
| গ্রেড হিসাব | calculateGrade(marks) |
Module 5: সাধারণ ভুল ও সতর্কতা
ভুল ১: Function Prototype ছাড়া ব্যবহার
❌ ভুল:
int main() {
int r = add(5, 3); // add এখনো define হয়নি!
return 0;
}
int add(int a, int b) { return a + b; }
✅ সঠিক:
int add(int a, int b); // Prototype (Declaration)
int main() {
int r = add(5, 3); // এখন ঠিক আছে
return 0;
}
int add(int a, int b) { return a + b; }
ভুল ২: return মিলছে না
❌ ভুল:
int add(int a, int b) {
// return নেই! garbage value ফেরত দেবে
}
✅ সঠিক:
int add(int a, int b) {
return a + b;
}
ভুল ৩: void function-এ return value আশা করা
❌ ভুল:
void printHello() {
printf("Hello!\n");
}
int x = printHello(); // void function কিছু দেয় না!
✅ সঠিক:
printHello(); // শুধু call করো
ভুল ৪: Recursive function-এ Base Case না রাখা
❌ ভুল (Stack Overflow):
int factorial(int n) {
return n * factorial(n-1); // Base case নেই — অসীম!
}
✅ সঠিক:
int factorial(int n) {
if (n == 0 || n == 1) return 1; // Base case
return n * factorial(n-1);
}
Module 6: সুবিধা-অসুবিধা
| Function | সুবিধা | সীমাবদ্ধতা |
|---|---|---|
| void | সহজ, side effect | কিছু ফেরত দেয় না |
| return value | ফলাফল পাওয়া যায় | শুধু একটি মান ফেরত |
| Recursive | কোড ছোট | বেশি মেমরি (Stack) |
| Iterative | কম মেমরি | বেশি কোড |
🔁 নিজে পরীক্ষা করো
MCQ:
১. void function কী ফেরত দেয়?
- ক) 0
- খ) কিছুই না ✓
- গ) NULL
- ঘ) -1
২. Recursive function-এ Base Case-এর কাজ কী?
- ক) Loop শুরু করা
- খ) Recursion থামানো ✓
- গ) Parameter পাঠানো
- ঘ) Function ডাকা
৩. int add(int a, int b) — এখানে int a, int b কী?
- ক) Return type
- খ) Parameters ✓
- গ) Function body
- ঘ) Local variable
৪. Function Prototype কী?
- ক) Function-এর সম্পূর্ণ কোড
- খ) Function-এর ঘোষণা (শুধু Header) ✓
- গ) Return value
- ঘ) Function call
৫. 5! = ?
- ক) 25
- খ) 120 ✓
- গ) 60
- ঘ) 15
সংক্ষিপ্ত প্রশ্ন:
৬. Function ব্যবহারের ৩টি সুবিধা উদাহরণসহ বলো।
৭. একটি Function লেখো যা তিনটি সংখ্যার মধ্যে সর্বোচ্চটি ফেরত দেয়।
📝 HSC পরীক্ষার প্রস্তুতি
১. Function ছাড়াও প্রোগ্রাম লেখা সম্ভব — তাহলে Function কেন শিখবো? কোন পরিস্থিতিতে Function অপরিহার্য?
২. Recursive function এবং Iterative loop — উভয়ই একই কাজ করতে পারে। কোনটি কখন ভালো?
৩. printf() এবং scanf() কি আমরা ব্যবহার করি তারাও Function? এগুলো কোথায় define করা আছে?
🎯 অনুশীলন প্রশ্ন
সহজ:
একটি Function লেখো isEven(int n) যা n জোড় হলে 1 এবং বিজোড় হলে 0 ফেরত দেবে। main() থেকে ৫টি সংখ্যা পরীক্ষা করো।
মাঝারি:
দুটি Function লেখো: areaCircle(float r) এবং perimeterCircle(float r) — বৃত্তের ক্ষেত্রফল ও পরিধি বের করবে। main() থেকে তিনটি ভিন্ন ব্যাসার্ধের জন্য call করো।
কঠিন:
Recursive Function ব্যবহার করে GCD (গ.সা.গু) বের করার প্রোগ্রাম লেখো। সূত্র: gcd(a, b) = gcd(b, a%b), base case: gcd(a, 0) = a।
✅ সারাংশ
🎯 মনে রেখো:
- Function = পুনরায় ব্যবহারযোগ্য কোড ব্লক
- ৩ ধরন:
void— কিছু ফেরত দেয় না- Return value — একটি মান ফেরত দেয়
- Recursive — নিজেকে ডাকে
- ৪ অংশ: Return type, Name, Parameters, Body
- Prototype — main()-এর আগে declare করো
- Base Case — Recursive function-এ অবশ্যই দাও
printf(),scanf(),sqrt()— এগুলোও Function!
💡 পরীক্ষার টিপস: HSC-তে Factorial এবং Fibonacci Recursive Function প্রায়ই আসে। Base Case সঠিক রাখলে সব ঠিক হয়ে যাবে।