সি পাইথন প্রোগ্রামিং জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল জেকুয়েরি এইচটিএমএল সিএসএস বুটস্ট্রাপ এঙ্গুলার জেএস
লগইন
×

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

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

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

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

 সি ফাংশন

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

 সি অ্যারে

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

 সি স্ট্রিং

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

 সি পয়েন্টার

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

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

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

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

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

 

সি প্রোগ্রামিং এ ফাংশনের মধ্য দিয়ে কিভাবে স্ট্রাকচারকে অতিক্রম করাবেন?


এই অধ্যায়ে আপনি স্ট্রাকচার(structure)-কে আর্গুমেন্ট হিসাবে ফাংশনের মধ্য দিয়ে অতিক্রম করানো সম্পর্কিত কিছু উদাহরণ দেখবেন এবং আপনার প্রোগ্রামে ব্যবহার করা শিখবেন।

সি প্রোগ্রামিং এ ফাংশনের মধ্য দিয়ে কিভাবে স্ট্রাকচারকে অতিক্রম করাবেন?

সি প্রোগ্রামে structure কে function এর মধ্য দিয়ে দুইভাবে অতিক্রম(pass) করানো যায়ঃ

  1. ভ্যালু হিসাবে অতিক্রম করানো(Passing by value)
  2. রেফারেন্স হিসাবে অতিক্রম করানো(Passing by reference)

স্ট্রাকচারকে ভ্যালু হিসাবে অতিক্রম করানো

সাধারণ ভ্যারিয়েবলের মত স্ট্রাকচারকেও(structure) ফাংশনের মধ্য দিয়ে আর্গুমেন্ট(argument) হিসাবে অতিক্রম করানো যেতে পারে।

যদি স্ট্রাকচারকে ফাংশনের মধ্য দিয়ে ভ্যালু হিসাবে অতিক্রম(pass) করানো হয় তাহলে ফাংশন ডেফিনিশন(definition) এর মধ্যে স্ট্রাকচার ভ্যারিয়েবলের পরিবর্তন ঘটলেও অরিজিনাল স্ট্রাকচার ভ্যারিয়েবলে কোনো ধরনের প্রভাব ফেলবে না।

উদাহরনঃ student নামের একটি স্ট্রাকচার তৈরির জন্য সি প্রোগ্রাম, যাতে স্ট্রাকচার এর মেম্বার হিসাবে স্টুডেন্টের নাম ও রোল নাম্বার রয়েছে এবং তথ্য প্রদর্শনীর জন্য display() ফাংশন ব্যবহার করা হয়েছে।

#include <stdio.h>
struct student
{
    char name[50];
    int roll;
};

void display(struct student stu);
// ফাংশনের প্রোটোটাইপ(prototype) স্ট্রাকচার ডিক্লেয়ারেশনের নিচে থাকা উচিৎ অন্যথায় কম্পাইলার এরর(error) দেখাতে পারে।

int main()
{
    struct student stud;
    printf("Enter student's name: ");
    scanf("%s", &stud.name);
    printf("Enter roll number:");
    scanf("%d", &stud.roll);
    display(stud);   //স্ট্রাকচার ভ্যারিয়েবল  p stud কে আর্গুমেন্ট হিসাবে অতিক্রম করানো।
    return 0;
}
void display(struct student stu){
  printf("Output\nName: %s",stu.name);
  printf("\nRoll: %d",stu.roll);
}

আউটপুট

Enter student's name: Tamim
Enter roll number: 5
Output
Name: Tamim
Roll: 5

স্ট্রাকচারকে রেফারেন্স হিসাবে অতিক্রম করানো

স্ট্রাকচারকে রেফারেন্স হিসাবে ফাংশনের মধ্য দিয়ে অতিক্রম করানো হলে স্ট্রাকচার ভ্যারিয়েবলের মেমোরি এড্রেস ফাংশনের মধ্য দিয়ে অতিক্রম করে।

যদি স্ট্রাকচারকে ফাংশনের মধ্য দিয়ে রেফারেন্স(reference) হিসাবে অতিক্রম(pass) করানো হয় তাহলে ফাংশন ডেফিনিশন(definition) এর মধ্যে স্ট্রাকচার ভ্যারিয়েবলের পরিবর্তন ঘটলে অরিজিনাল স্ট্রাকচার ভ্যারিয়েবলেও প্রভাব পড়বে।

ফুট-ইঞ্চিতে দুটি দূরত্বের যোগ এবং রিটার্ন স্টেটমেন্ট ব্যবহার না করে ফলাফল প্রদর্শনীর জন্য সি প্রোগ্রাম।

#include <stdio.h>
struct distance
{
    int feet;
    float inch;
};
void add(struct distance d1,struct distance d2, struct distance *d3); 

int main()
{
    struct distance dist1, dist2, dist3;

    printf("First distance\n");
    printf("Enter feet: ");
    scanf("%d", &dist1.feet);
    printf("Enter inch: ");
    scanf("%f", &dist1.inch);

    printf("Second distance\n");
    printf("Enter feet: ");
    scanf("%d", &dist2.feet);
    printf("Enter inch: ");
    scanf("%f", &dist2.inch);

    add(dist1, dist2, &dist3); 

    /* dist1 এবং dist2 স্ট্রাকচার ভ্যারিয়েবলকে ভ্যালু হিসাবে এবং dist3 স্ট্রাকচার ভ্যারিয়েবলকে রেফারেন্স হিসাবে ফাংশনের মধ্য দিয়ে অতিক্রম(pass) করানো */
    printf("\nSum of distances = %d\'-%.1f\"", dist3.feet, dist3.inch);

    return 0;
}
void add(struct distance d1,struct distance d2, struct distance *d3) 
{
     // d1 এবং  d2 দূরত্বকে যোগ করে d3 এর মধ্যে জমা রাখা
     d3->feet = d1.feet + d2.feet; 
     d3->inch = d1.inch + d2.inch;

     if (d3->inch >= 12) {     /* ইঞ্চির ভ্যালু যদি ১২ থেকে বড় হয় তাহলে ফুটে রূপান্তরিত হবে। */
         d3->inch -= 12;
         ++d3->feet;
    }
}

আউটপুট

First distance
Enter feet: 24
Enter inch: 7.8
Second distance
Enter feet: 7
Enter inch: 5.6

Sum of distances = 32'-1.4"