HSC ICT অধ্যায় ৫ সি প্রোগ্রামিংয়ে ডাটা টাইপ
সি প্রোগ্রামিংয়ে ডাটা টাইপ প্রধানত তিন প্রকার: **মৌলিক (Basic)**, **প্রাপ্ত (Derived)**, এবং **ব্যবহারকারী-নির্ধারিত (User-Defined)**। নিচে প্রতিটি প্রকারের বিস্তারিত বর্ণনা দেওয়া হলো:
### ১. **মৌলিক ডাটা টাইপ (Basic Data Types)**
মৌলিক ডাটা টাইপ চার ধরনের:
- **int (ইন্টিজার)**: পূর্ণসংখ্যা (যেমন: `5, -10, 0`) সংরক্ষণের জন্য ব্যবহৃত হয়। এটির সাইজ সাধারণত **৪ বাইট** (আধুনিক সিস্টেমে) বা **২ বাইট** (পুরাতন সিস্টেমে)। রেঞ্জ: `-২,১৪৭,৪৮৩,৬৪৮` থেকে `২,১৪৭,৪৮৩,৬৪৭` (৪ বাইটের ক্ষেত্রে)।
- **float (ফ্লোট)**: দশমিক সংখ্যা (যেমন: `3.14, -5.67`) সংরক্ষণ করে। সাইজ **৪ বাইট** এবং প্রিসিশন **৬-৭ ডিজিট** পর্যন্ত।
- **double (ডাবল)**: float-এর চেয়ে বেশি নির্ভুলতা দিয়ে দশমিক সংখ্যা (যেমন: `2.71828`) সংরক্ষণ করে। সাইজ **৮ বাইট** এবং প্রিসিশন **১৫ ডিজিট** পর্যন্ত।
- **char (ক্যারেক্টার)**: একটি মাত্র ASCII ক্যারেক্টার (যেমন: `'A', '7', '$'`) সংরক্ষণ করে। সাইজ **১ বাইট**। রেঞ্জ: `-১২৮` থেকে `১২৭` (signed) বা `০` থেকে `২৫৫` (unsigned)।
**উদাহরণ কোড**:
```c
int age = 20;
float pi = 3.1416;
char grade = 'A';
```
---
### ২. **প্রাপ্ত ডাটা টাইপ (Derived Data Types)**
এগুলো মৌলিক ডাটা টাইপের সমন্বয়ে গঠিত:
- **অ্যারে (Array)**: একই টাইপের একাধিক ডাটা সংরক্ষণ করে (যেমন: `int marks[5]`)।
- **পয়েন্টার (Pointer)**: মেমোরি অ্যাড্রেস সংরক্ষণ করে (যেমন: `int *ptr = &age`)।
- **স্ট্রাকচার (Structure)**: বিভিন্ন টাইপের ডাটার গ্রুপ তৈরি করে (যেমন: `struct Student { int id; char name[20]; }`)।
- **ফাংশন (Function)**: নির্দিষ্ট টাস্ক সম্পাদনের জন্য কোড ব্লক তৈরি করে।
---
### ৩. **ব্যবহারকারী-নির্ধারিত ডাটা টাইপ (User-Defined Data Types)**
প্রোগ্রামার নিজের প্রয়োজন অনুযায়ী তৈরি করে:
- **ইনিউম (Enum)**: নামযুক্ত ধ্রুবকের সেট তৈরি করে (যেমন: `enum Week {Sun, Mon, Tue}`)।
- **ইউনিয়ন (Union)**: একই মেমোরি লোকেশনে বিভিন্ন টাইপের ডাটা সংরক্ষণ করে।
- **টাইপডেফ (typedef)**: বিদ্যমান ডাটা টাইপের নতুন নাম নির্ধারণ করে (যেমন: `typedef int Age;`)।
---
### ডাটা টাইপের মডিফায়ার (Modifiers)
মৌলিক ডাটা টাইপের রেঞ্জ বা সাইজ পরিবর্তনের জন্য মডিফায়ার ব্যবহার করা হয়:
- **signed/unsigned**: সংখ্যার চিহ্ন নির্ধারণ করে (যেমন: `unsigned int` শুধু ধনাত্মক সংখ্যা নেয়)।
- **short/long**: ডাটার সাইজ পরিবর্তন করে (যেমন: `long double` ১০ বাইট পর্যন্ত সাইজ নিতে পারে)।
---
### ডাটা টাইপের গুরুত্বপূর্ণ বৈশিষ্ট্য
- প্রতিটি ভেরিয়েবল ডিক্লেয়ারের সময় ডাটা টাইপ উল্লেখ করতে হয়।
- ডাটা টাইপের উপর ভিত্তি করে মেমোরি বরাদ্দ হয় (যেমন: `char` = ১ বাইট, `int` = ৪ বাইট)।
- ভুল ফরম্যাট স্পেসিফায়ার ব্যবহার করলে প্রোগ্রাম ক্র্যাশ হতে পারে (যেমন: `float`-এর জন্য `%f`, `int`-এর জন্য `%d`)।
---
### সংক্ষিপ্ত টেবিল: মৌলিক ডাটা টাইপের সাইজ ও রেঞ্জ
| ডাটা টাইপ | সাইজ (বাইট) | রেঞ্জ |
|-----------|-------------|--------|
| `char` | ১ | -১২৮ থেকে ১২৭ |
| `int` | ৪ | -২১৪৭ মিলিয়ন থেকে +২১৪৭ মিলিয়ন |
| `float` | ৪ | ৩.৪e-৩৮ থেকে ৩.৪e+৩৮ |
| `double` | ৮ | ১.৭e-৩০৮ থেকে ১.৭e+৩০৮ |