সি প্রোগ্রামিং এইচটিএমএল সিএসএস জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল
ফোরাম
×

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

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

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

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

 সি ফাংশন

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

 সি অ্যারে

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

 সি স্ট্রিং

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

 সি পয়েন্টার

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

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

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

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

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

 

সি প্রোগ্রামিং ইনুমিরেশন


এই অধ্যায়ে আপনি সি ইনুমিরেশন(enumeration) নিয়ে কাজ করা শিখবেন। এছাড়া সি প্রোগ্রামিং এ enum সচরাচর কোথায় ব্যবহৃত হয় তাও জানবেন।


সি প্রোগ্রামিং এ enumeration হলো ইউজার ডিফাইন্ড ডেটা টাইপ(user-defined data type) যা অখণ্ড পূর্ণসংখ্যা(integral constants) নিয়ে গঠিত হয়। ইনুমেরেশন(enumeration) ডিফাইন্ড করার জন্য enum কীওয়ার্ড ব্যবহৃত হয়।

enum flag { constant1, constant2, ..., constantN };

 এখানে flag হলো ইউজার ডিফাইন্ড ডেটা টাইপ

এবং  constant1, constant2,...., constantN হলো flag টাইপের ভ্যালু।

ডিফল্টভাবে constant1  এর ভ্যালু 0, constant2  এর ভালু 1 এবং এভাবে চলতে থাকবে। আপনার প্রয়োজনে আপনি enum এলিমেন্টের ডিফল্ট ভ্যালু পরিবর্তন করতে পারেন।

অর্থাৎ আপনি চাইলে enum এলিমেন্টের ইন্ডেক্স পরিবর্তন করতে পারেন।


//  enum এর ডিফল্ট ভ্যালু পরিবর্তন
enum color {
    red = 0,
    green = 3,
    black = 5,
    white = 3,
};

Enum টাইপ ডিক্লেয়ারেশন

আপনি যখন enum টাইপের ভ্যারিয়েবল তৈরি করেন তখন শুধুমাত্র ভ্যারিয়েবলের ব্লুপ্রিন্ট(blueprint) তৈরি হয়। নিচে enum টাইপের ভ্যারিয়েবল তৈরির পদ্ধতি দেখানো হলো


enum boolean { false, true };
enum boolean security;

এখানে enum boolean টাইপের একটি security ভ্যারিয়েবল তৈরি হয়েছে।

এখানে ভিন্ন সিনট্যাক্স ব্যবহার করে একই security ভ্যারিয়েবল তৈরি করা হয়ছে।

enum boolean 
{ 
   false, true
   
} security;


উদাহরনঃ enum টাইপের ব্যবহার

#include <stdio.h>

enum week { sunday, monday, tuesday, wednesday, thursday, friday, saturday };

int main()
{
    enum week today;
    today = tuesday;
    printf("Today %d",today);
    return 0;
}

আউটপুট

Today 2

উপরের প্রোগ্রামে “week” কে ভ্যারিয়েবল হিসাবে ডিক্লেয়ার করা হয়েছে এবং tuesday কে “week” এর জন্য বরাদ্দ করা হয়েছে। তাই আমরা 2 আউটপুট পেয়েছি।


উদাহরনঃ enum টাইপ ব্যবহারের আরোও একটি উদাহরণ

#include<stdio.h>
 
enum year{Jan, Feb, Mar, Apr, May, Jun, Jul, 
          Aug, Sep, Oct, Nov, Dec};
 
int main()
{
   int i;
   for (i=Jan; i<=Dec; i++)      
      printf("%d ", i);
       
   return 0;
} 

আউটপুট

0 1 2 3 4 5 6 7 8 9 10 11

উপরের প্রোগ্রামে Jan এর ইনিশিয়াল(initial) ভ্যালু 0 এবং Dec এর 11 হওয়ায় i = 0 থেকে i = 11 পর্যন্ত for লুপ রান(run) করবে।


সি প্রোগ্রামিং এ enum কেন ব্যবহৃত হয়?

সম্ভাব্য অনেক ভ্যালুর বিপরীতে Enum ভ্যারিয়েবল কেবল মাত্র একটি ভ্যালু গ্রহণ করে। নিচে উদাহরণের সাহায্যে ব্যাখ্যা করা হলোঃ

#include <stdio.h>

enum suit {
    club = 0,
    diamonds = 10,
    hearts = 20,
    spades = 3
} card;

int main() 
{
        card = club;
	printf("Size of enum variable = %d bytes", sizeof(card));	
	return 0;
}

আউটপুট

Size of enum variable = 4 bytes

ইহার কারণ integer এর সাইজ হলো 4 বাইট।

একই কাজ আপনি স্ট্রাকচার ব্যবহার করেও করতে পারেন। যাইহোক enum এর ব্যবহার আপনার কাজকে সহজ করে দিবে এবং যোগ্য প্রোগ্রামারের পরিচয় মিলবে।


কিভাবে আপনি flags এর জন্য enum ব্যবহার করবেন?

flags(পতাকা) নিয়ে কাজ করার জন্য enum হতে পারে উত্তম পন্থা।

নিচে উদাহরণের সাহায্যে ব্যাখ্যা করা হলো

enum designFlags {
	italics = 1,
	border = 2,
	color = 4
} button;

ধরুন আপনি উইন্ডোজ এপ্লিকেশনের জন্য একটি বাটন ডিজাইন করতে চাচ্ছেন। আপনি টেক্সট নিয়ে কাজ করার জন্য border, italics এবং color ফ্ল্যাগ(flag) সেট করতে পারেন।


উপরের প্রোগ্রাম(pseudocode) এ সকল অখণ্ড পূর্ণসংখ্যা(integral constant) কেন দুই এর সূচক তার একটি নির্দিষ্ট কারণ রয়েছে।

// বাইনারি মান

italics = 0000 0001
border  = 0000 0010
color   = 0000 0100 

উপরের উদাহরনে অখণ্ড পূর্ণসংখ্যা যেহেতু ২ এর সূচক সুতরাং আপনি কোনো ধরণের দুশ্চিন্তা ছাড়াই বিটওয়াইজ OR(|) অপারেটর নিয়ে একই সঙ্গে দুই বা তার অধিক ফ্ল্যাগের সমন্বয় ঘটাতে পারেন।

নিচে উদাহরণের সাহায্যে ব্যাখ্যা করা হলোঃ

#include <stdio.h>

enum designFlags {
	border = 1,
	italics = 2,
	color = 4
};

int main() {
	int myDesign = border | color; 

        //    00000001
        //  | 00000100
        //  __________
        //    00000101

	printf("%d", myDesign);

	return 0;
}

আউটপুট

5

যখন আউটপুট 5 হবে তখন আপনি অবশ্যই জানবেন যে, এখানে border এবং color ব্যবহৃত হয়েছে। কারণ border=1 এবং color=4 অর্থাৎ 4+1=5

এছাড়া আপনার প্রয়োজনেও আপনি flag যোগ করতে পারেন।

if (myDesign & italics) {
    // italics এর জন্য ব্যবহৃত কোড
}

এখানে আমরা আমাদের ডিজাইনে italics যোগ করেছি। লক্ষ্য করলে দেখবেন শুধুমাত্র italics এর কোড if স্টেটমেন্টের মধ্যে লেখা হয়েছে।

সি প্রোগ্রামিং এ আপনি সবকিছু ইনুমিরেশন(enumeration) ছাড়াই করতে পারেন। কিন্তু কিছু কিছু পরিস্থিতিতে ইহা প্রোগ্রামকে সহজ করে দেয়। আর ইহাই দক্ষ প্রোগ্রামারদের মধ্যে পার্থক্য সৃষ্টি করে।


enum ইনিশিয়ালাইজেশনে কিছু গুরত্বপূর্ণ তথ্য

  • দুটি enum এর নামে একই ভ্যালু থাকতে পারে।

    উদাহরনঃ নিচের প্রোগ্রামে ‘Failed’ এবং ‘Freezed’ উভয়ের ভ্যালুই 0(শূন্য)।

    
    #include <stdio.h>
    enum State {Working = 1, Failed = 0, Freezed = 0};
     
    int main()
    {
       printf("%d, %d, %d", Working, Failed, Freezed);
       return 0;
    }
    

    আউটপুট

    1, 0, 0
    

  • আমরা যদি বাহ্যকিভাবে enum কনস্ট্যান্টে কোনো ভ্যালু এসাইন না করি তাহলে কম্পাইলার ডিফল্টভাবে ইনডেক্স 0(শূন্য) দিয়ে শুরু করে ভ্যালু এসাইন(assaign) করে।

    উদাহরনঃ নিচের সি প্রোগ্রামে enum কনস্ট্যান্ট sunday এর ভ্যালু 0, monday এর ভ্যালু 1 এসাইন হবে এবং এভাবে চলতে থাকবে।

    #include <stdio.h>
    enum day {sunday, monday, tuesday, wednesday, thursday, friday, saturday};
     
    int main()
    {
        enum day d = friday;
        printf("The day number stored in d is %d", d);
        return 0;
    }
    
    
    

    আউটপুট

    The day number stored in d is 5
    

  • কিছু কনস্ট্যান্টে আমরা যেকোনো অর্ডারের ভ্যালু এসাইন(assign) করতে পারি। যেসকল কনস্ট্যান্টে ভ্যালু এসাইন করা হয়না তারা পূর্ববর্তী ভ্যালুর সাথে এক যোগ করে ভ্যালু নিয়ে নেয়।

    উদাহরনঃ নিচের প্রোগ্রামে

    #include <stdio.h>
    enum day {sunday = 1, monday, tuesday = 5,
              wednesday, thursday = 10, friday, saturday};
     
    int main()
    {
        printf("%d %d %d %d %d %d %d", sunday, monday, tuesday,
                wednesday, thursday, friday, saturday);
        return 0;
    }
    
    

    আউটপুট

    1 2 5 6 10 11 12
    
  • enum কনস্ট্যান্টে এসাইনকৃত ভ্যালু অবশ্যই অখণ্ড পূর্ণসংখ্যর(integeral constant) হতে হবে। অর্থাৎ এসাইনকৃত ভ্যালু অবশ্যই একটি সম্ভাব্য সর্বনিম্ন পূর্ণসংখ্যা থেকে সর্বোচ্চ পূর্ণসংখ্যার পরিসর(range) এর মধ্যে থাকতে হবে।

  • স্ব-স্ব স্কোপে(scope) সকল enum কনস্ট্যান্ট(constant)-কে অবশ্যই অনন্য(unique) হতে হবে।

    উদাহরনঃ নিচের প্রোগ্রামটি কম্পাইলে ব্যর্থ হয়।

    enum state  {working, failed};
    enum result {failed, passed};
     
    int main()  { return 0; }
    
    

    আউটপুট

    Compile Error: 'failed' has a previous declaration as 'state failed'