beginner#functionUpdated: 2026-05-13

ফাংশন (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 librarysqrt(), pow(), abs()
String librarystrlen(), 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 সঠিক রাখলে সব ঠিক হয়ে যাবে।