সি প্রোগ্রামিং ল্যাঙ্গুয়েজ|| part 03  








ডেটা টাইপ : ANSI ভাষা ৪ শ্রেনীর ডেটা টাইপ সমর্থন করে। যথা ::––


১| মৌলিক বা প্রাথমিক ডেটা টাইপ বা বিল্ট ইন ডেটা টাইপ( Primary, Fundamental or Built in)

2| ব্যবহারকারী কর্তৃক সংঞ্জায়িত বা ইউজার বিহাইন্ড ডেটা টাইপ ( User defined ) 

৩| ডিরাইভড ডেটা টাইপ(Derived) ও 

৪| ফাঁকা বাএম্পটি ডেটা সেট (Empty data set)         ‌ডেটাটাইপ → ↓মৌলিক বা প্রাথমিক বেটা টাইপ → ব্যবহারকারী কর্তৃক সংঞ্জায়িত → ডিরাইভড ডেটা টাইপ → ফাঁকা এম্পটি ডেটা সেট  

মৌলিক বা প্রাথমিক ডেটা টাইপ বা বিল্ট ইন ডেটা টাইপ ( Primary, Fundamental or Built in) 

সকল সি কম্পাইলার  মূলত:৩ ধরনের মৌলিক বা প্রাথমিক বা বিল্ট ইন ডেটা টাইপ সমর্থন করে। যথা : 

১| ক্যারেক্টার ( Character) 

২| পূর্ণ সংখ্যা বা ইন্টিজার (Integer) 

৩| ভগ্নাংশযুক্ত সংখ্যা বা রিয়াল ( Real )  


মৌলিক প্রাথমিক ডেটা টাইপ → ক্যারেক্টার (Character) → পূর্ণ সংখ্যা বা ইন্টিজার (Integer) → ভগ্নাংশযুক্ত সংখ্যা বা রিয়াল (Real) 



ক্যারেক্টার (Character):
অ্যাস্কি ( ASCII ) কোন ০ থেকে ২৫৫ পর্যন্তচিহ্নবিহীন বা অথবা -১২৮ থেকে ১২৭ পর্যন্ত চিহ্নযুক্ত বা সাইন্ড (   ) - এই পরিধি ভেতরের সব কোডের একটি করে সাংকেতিক চিহ্ন থাকে। এই সাংকেতিক চিহ্নগুলো ভেতরে অন্তর্ভুক্ত ইংরেজী
সকল বর্ণমালা ( ছোট ও বড়), মতি বা রিয়াল চিহ্ন,০ থেকে ৯ পর্যন্ত অংকসমূহ , বিভিন্ন ধরনের বিশেষ চিহ্ন ইত্যাদিকে ক্যারেক্টার ডেটা বলা হয়।
এদেরকে char নামে অভিহিত করা হয়। Char ডেটা সংরক্ষণের জন্য মেমোরিতে ১ বাইট বা ৮ বিট জায়গায় প্রয়োজন । 

পূর্ণ সংখ্যা বা ইন্টিজার(Integer) : 

সমস্ত ধনাত্মক ও ঋণাত্মক পূর্ণ সংখ্যাকেই  ইন্টিজার বলা । এদেরকে int নামে অভিহিত করা হয়। মেমরিত ইন্টিজার সংরক্ষণের জন্য ২ বাইট বা ১৬ বিট জায়গা প্রয়োজন । 

১৫ , ১৪, ১৩,১২,১১,১০,৯,৮,৭,৬,৫,৪,৩,২,১,০
------------------------------------------------------------
|     |     |      |    |     |     |     |  _______________________________________

 ↑সাইন বিট → বিট রেজিস্টর 

চিহ্নিত বা signed সংখ্যার ক্ষেত্রে  ১৬ বিট জায়গায় মধ্যে গান দিকে থেকে প্রথম ১৫ টি বিট 
( বিট -০ বিট -১৪ ) ডেটা রাখার জন্য এবং বামেরা বিটটি ( বিট -১৫ ) সাইন বিট হিসেবে ব্যবহৃত হয়।  ধনাত্মক ডেটার জন্য সাইন শূন্য      ( ০ )  হয় এবং ঋণাত্মক ডেটার জন্য সাইন বিটটি এক (১) হয়। ডেটার মান অনুযায়ী ১৫ টি ডেটা বিট ০ বা ১ হতে পারে। সর্বনিম্ন ঋণাত্মক ডেটার জন্য সাইন বিট সহ ১৫টি ডেটা বিটা সবগুলো ০ হলো তার মান হয় -২১৫ বা -৩২৭৬৮ ।   আবার সবোর্চ্চ ধনাত্মক ডেটার সাইন বিট- সহ  ১৫টি ডেটা বিটের সবগুলো ১ হলো তার মান হয় ২১৫-১ বা ৩২৭৬৭। তাই পূর্ণ সংখ্যা বা ইন্টিজার ( Integer )  হিসেবে - ৩২৭৬৮ থেকে +৩২৭৬৭ পর্যন্ত হয় ।  
 
 
 কিন্তু চিহ্নবিহীন বা unsigned int টাইপ ডেটা রাখার জন্য দুই বাইটের সবগুলো ডেটা বিট হিসেবে ব্যবহৃত হয়।  সুতরাং unsigned int টাইপ 
 ভেরিয়েবল এ ডেটার জন্য ১৬ টি বিটের সবগুলো ০ হলে তার মান হয় ০ । আবার ১৬ টি ডেটা বিটের সবগুলো ১ হলো তার মান হয় ২১৬ - ১=৬৫৫৩৬-১ সুতরাং unsigned int টাইপ ভেরিয়েবলের মান হিসেবে ০ থেকে ৬৫৫৩৫ এর মধ্যবতী যে কোন পূর্ণ সংখ্যা ব্যবহার করা যায়। 
__________________________________________
সাইন্ড ইন্টিজার ও আন সাইন্ড ইন্টিজারের মধ্যে পার্থক্য নিম্নরূপ ::-

১।------------সাইন্ড ইন্টিজার ::→↓
_______________________________________
 সাইন্ড ইন্টিজারের ক্ষেত্রে ধণাত্বক সংখ্যার জন্য চিহ্ন ১ এবং ধনাত্নক সংখ্যার জন্য চিহ্ন বিট ০ ব্যবহার করা হয় । ১৬ বিট জায়গার মধ্যে বামের
 বিটটি ( বিট -১৫) সাইন বিট হিসেবে ব্যবহৃত হয় ।
 _______________________________________
সাইন্ড ইন্টিজারের ক্ষেত্রে ১৬ বিট জায়গার মধ্যে ডান দিকে থেকে প্রথমে ১৫ টি বিট ( বিট -০ থেকে বিট -১৪ ) ডেটা রাখার জন্য ব্যবহার হয় ।
_________________________________________
সাইন্ড ইন্টিজারের ক্ষেত্রে -৩২৭৬৮ থেকে+  ৩২৭৬৭ এর মধ্যবর্তি যে কোন পূর্ণসংখ্যা ব্যবহার করা যায় । ________________________________________


২।------------- আনসাইন্ড ইন্টিজার :→↓
________________________________________
আনসাইন্ড ইন্টিজারের ক্ষেত্রে  কোন চিহ্ন বা sing বিট ব্যবহার করা হয় না । 
________________________________________
কিন্তু চিহ্নবিহীন বা unsigned int টাইপ ডেটা রাখার জন্য দুই বাইটের সবগুলো ডেটা বিট হিসেবে ব্যবহৃত হয় ।
_______________________________________
আনসাইন্ড ইন্টিজার হিসেবে ০ থেকে ৬৫৫৩৫ এর 
মধ্যবর্তী যে কোন পূর্ণ সংখ্যা ব্যবহার করা যায় ।
________________________________________

ভগ্নাংশযুক্ত সংখ্যা বা রিয়াল (Real ) 
দশমিক ভগ্নাংশযুক্ত সংখ্যাসমূহকে রিয়াল ডেটা টাইপ বলা হয়।  ব্যাপ্তি অনুসারে দশমিক ভগ্নাংশযুক্ত সংখ্যা দুই ভাগে ভাগ করা যায়: 
১| Float টাইপ ও

২| double টাইপ ।


 ১| Float টাইপ ভগ্নাংশযুক্ত সংখ্যা :
 সি প্রোগ্রামিং রিয়াল বা ভগ্নাংশসুহ কোন সংখ্যা ( যেমন : ২৩.৪৫,-৪৫৬.৫০,২৩৪৫.২৩ ইত্যাদি ) নিয়ে কাজ করার জন্য float ডেটা টাইপ ‌ব্যবহার করা হয়। float ডেটা টাইপ ষোষণার জন্য float কীওয়ার্ড ব্যবহার হয় । 

 "float টাইপ ডেটা মেমরিতে সংরক্ষণের জন্য ৪ বাইট বা ৩২ বিট জায়গা সংরক্ষণ করে।"

এই ৩২ বিট পরিসরের ডান দিকে থেকে প্রথম ৩২টি ম্যানটিসা বিট ( বিট -০-বিট -২২) ডেটা রাখার জন্য, পরবর্তী ৮টি এক্সপোনেনশিয়াল বিট 
( বিট -২৩- বিট-৩০ ) দশমিক বিন্দুর পরের অংশের ডেটা রাখার জন্য, এবং সবচেয়ে বামের বিটটি ( বিট-৩১) সাইন বিট হিসেবে ব্যবহার হয় । ধনাত্মক ডেটার জন্য সাইন বিটটি শূন্য (০) হয়, ঋণাত্মক বা ধনাত্মক যে কোনো মানের ডেটা রাখা যায়। আর ৮ টি ডেটা বিটে ০.০০০০০০থেকে ০.৯৯৯৮৮৮ অর্থাৎ ৬ দশমিক স্থান পর্যন্ত মান রাখা যায়। অনেক সময় float টাইপ সংখ্যা এক্সপোনেনশিয়াল আকারে লেখা হয়। যেমন , এক্সপোনেনশিয়াল আকারে ৩৪৫৬, ৩.৪×১০-৩৮ 
এবং ৩.৪×১০-৩৮ কে যথাক্রমে 3.456E3, 3.4E-38 এবং 3.4E+38 ______________________________________


Double টাইপ ভগ্নাংশযুক্ত সংখ্যা 
সি প্রোগ্রামিং float টাইপ ভেরিয়েবলের মত রিয়েল বা ভগ্নাংশ বিশিষ্ট সংখ্যা ( যেমন‌ : ২৩.৪৫,-৪৫৬.৫০, ২৩৪৫.২৩ ইত্যাদি) নিয়ে কাজ করার জন্য double টাইপ ভেরিয়েবল ঘোষণা করা হয়, তবে float টাইপ অপেক্ষা double টাইপ ভেরিয়েবলের ব্যাক্তি বা রেঞ্জ বেশি। double টাইপ ভেরিয়েবল ঘোষণার জন্য double কীওয়ার্ড ব্যবহার করা হয়। প্রতিটি double টাইপ ডেটা মেমরিতে সংরক্ষণ‌ করার জন্য ৮ বাইট বা ৬৪ বিট 
জায়গা সংরক্ষণ করে । এই ৬৪ বিট জায়গার মধ্যে ডান দিকে থেকে প্রথম ৫২টি ম্যানটিসা বিট ( বিট - ০- বিট -৫১) ডেটা রাখার জন্য পরবর্তী ১১ টি এক্সপোনেনশিয়াল বিট ( বিট -৫২- বিট -৬২ ) দশমিক বিন্দুর পরের অংশের ডেটা রাখার জন্য এবং সবচেয়ে বামের বিটটি (বিট-৬৩) সাইন বিট হিসেবে ব্যবহার হয় । ঋণাত্মক ডেটার জন্য সাইন বিটটি শূন্য (০) হয় আর ঋণাত্মক ডেটার জন্য সাইন বিটটি এক ( ১) হয়। ৫২ টি ডেটা বিটে ১.৭×১০-৩০৮ থেকে ১.৭×১০-৩০৮  পর্যন্ত ঋণাত্মক বা ধনাত্মক মানের ডেটা রাখা যায়। 
আর ১১ টি এক্সপোনেনশিয়াল বিটে ১৫ দশমিক স্থান পর্যন্ত মান রাখা যায়। float টাইপের মত  double টাইপের সংখ্যাও এক্সপোনেনশিয়াল আকারে লেখা যায় ।
________________________________________

ডেটা টাইপ →স্টোরেজ সাইন → ব্যাপ্তি বা পরিসর    ;

Char →→→8 (-128→12'7 অথবা -2'7→2'7-1)
Signed char→8 (-128→12'7 বা 2'7→2'7-1) 

Unsignedchar →8 (-128→12'7 ,-2'7→2'7-1)

Int → →→→8 (-128→12'7 বা-2'7→2'7-1)

Signed int →→8 (-128→12'বা 2'7→2'7-1)

Unsigned int 8 (-128→12'7 বা -2'7→2'7-1)

Short int→→8 (-128→12'7 বা -2'7→2'7-1)

Long int →→8 (-128→12'7 বা-2'7→2'7-1)

Signed long→8 (-128→12'7 বা -2'7→2'7-1)

Unsigned long→8 (-128 12'7 বা -2'7→2'7-1) Float→→→8 (-128→12'7  -2'7→2'7-1)।   Double→→8 (-128→12'7  -2'7→2'7-1)।    Long double →8 (-128→12'7  -2'7→2'7-1)

________________________________________



ডেটা টাইপ মডিফায়ার (modifier) ফ্লোট:   
ডেটা টাইপ মডিফায়ার ( Modifier ) 
ফ্লোট ( float ) ছাড়া অন্যান্য মৌলিক বা প্রাথমিক ডেটা টাইপের সাথে আবার signed, unsigned, short, long ইত্যাদি যোগ করে ডেটার ব্যাপ্তি বা পরিসর ( Range ) এবং সংরক্ষণের জন্য মেমরি পরিমাণ  বাড়ান বা কমান যায় বলে এদেরকে ডেটা টাইপ মডিফায়ার ( Modifier ) বলা হয় ।

নিচে কয়েকটি ডেটা টাইপ মডিফায়ারের নাম উল্লেখ করা হলো । যথা -
• Short
• long,
• unsigned 
• signed,  

সাধারণত signed and unsigned মডিফায়ার char ও int টাইপ ডেটার জন্য এবং long ও short  মডিফায়ার int ও double টাইপ ডেটার  জন্য ব্যবহৃত হয় , যেমন signed char , unsigned char , signed int , short int , long int ইত্যাদি । long int কে সংক্ষেপে long লিখেও চলে । সুবিধামত দুটি মডিফায়ার একত্রেও ব্যবহার করা যায় , যেমন unsigned long int, signed short int, signed long int  ইত্যাদি । 
__________________________________________________________________

সি প্রোগ্ৰামে ডেটার পরিচায়ক ( identifier ) 
কম্পিউটার প্রোগ্ৰাম করার সময় প্রসেসিংয়ের কাজগুলো করতে হয়ে কোন না কোন ডেটার উপর ভিত্তি করে । এই সকল ডেটা সাধারণত ইনপুট ডিভাইসের মাধ্যমে মেমরিতে সংরক্ষিত হয় মেমরিতে এই সকল ডেটা একের পর এক সাজানো থাকে তা কিন্তু নয় ।
 _________________________________________________________________


কাজেই কোন প্রোগ্ৰামের জন্য বিভিন্ন ডেটাকে নিদের্শ করতে হলে নিদের্শক প্রয়োজন। এই নির্দেশক ( pointer ) হলো মেমরিতে কোন ডেটার অ্যাড্রেস বা মেমরি সেল নম্বর  প্রোগ্ৰামিংয়ের সুবিধার্থে সরাসরি সাংখ্যিক অ্যাড্রেস ব্যবহার না করে প্রতিটি অ্যাড্রেসকে একটি নাম দেওয়া হয় ।
এই নামকে পরিচায়ক বা আইডেন্টিফায়ার বলা হয় । 

আইডেনটিফায়ার প্রধানত : দুটো শ্রেণিতে বিভক্ত । যথা : 

১| ধ্রুবক ( Constant ) 

২| চলক বা ভেরিয়েবল ( Variable ) 

আইডেন্টিফায়ারের নাম প্রোগ্ৰাম লেখার সময় দেয়া হয় । এদের নামকরণ এবং ব্যবহারের জন্য সুনির্দিষ্ট নিয়ম আছে । এ অধ্যায়ের পরবতী অংশে ভেরিয়েবল নামকরণের নিয়মাবলী উল্লেখ করা হয়েছে । ভেরিয়েবল ও  এক প্রকার আইডেন্টফার । সুতরাং ভেরিয়েবল এবং আইডেন্টিফায়ার নামকরণের একই নিয়ম ।

_____________________________________

ধ্রুবক  বা কনস্ট্যান্ট ( Constant ) : 

যারা কোন পরিবর্তন হয় না তকে ধ্রুবক বলা হয় না । যেমন : π এর মান হলো 22 কখনো এই                                                                                                 ------
                                                                                                                   7
মানের কোন পরিবর্তন হবে না ।‍প্রোগ্ৰামে কোন রাশির মান পরিবর্তিত না হলে তাকে ঐ প্রোগ্রামের ধ্রুবক বলা হয় । ধ্রুবক  সংখ্যা  বা ক্যারেক্টার যে কোন ধরনের রাশি হতে পারে। অনেক সময় প্রোগ্রামে কোন ভেরিয়েবলের একটি নির্দিষ্ট মান ব্যবহৃত হয়। সে ক্ষেত্রে সি প্রোগ্রামিং ঐ মানকে ধ্রুবক বা কনস্ট্যান্ট হিসেবে ঘোষণা করা হয়। ভেরিয়েবলের মত কনস্ট্যান্টের ও প্রোগ্রামে ধ্রুবক ব্যবহারের সুবিধা : 

• ধ্রুবক ব্যবহার করলে অনেক ক্ষেত্রেই ভুল হওয়ার সম্ভাবনা কমে যায়।  
• প্রোগ্রামের কোড টাইপ করতে সময় কম লাগে।
• প্রোগ্রাম সহজবোধ্য হয়। 


সি প্রোগ্রামে ব্যবহৃত কোন ডেটাকে ধ্রুবক হিসেবে ঘোষণা জন্য তার ডেটা টাইপের পূর্বে const কীওয়ার্ড ব্যবহার করা। এরূপ ঘোষণার জন্য কনস্ট্যান্ট - এর প্রারম্ভিক মান এবং শেষে সেমিকোলন দেয় আবশ্যক । তবে ডেটা টাইপ উল্লেখ না থাকলে কম্পাইলার তাকে int টাইপ হিসেবে ধরে নেয়া। যেমন :----
                   Const  int Max = 50; 


আবার # define - পি- প্রোসেসর ব্যবহার করেও কোন মানকে কনস্ট্যান্ট হিসেবে ঘোষণা করা যায়। এরূপ ঘোষণার জন্য ডেটা টাইপ এবং শেষে সেমিকোল দিতে হয় না। প্রারম্ভিক মান দিতে হয়।

উদাহরন : 


# define          Max       50 

# define           TRUE      1

# define           FALSE     0

# define           PI              3.141592 

# define           Dept        " Computer Science"