Data Type
ডেটা টাইপ
ডেটা টাইপ (Data Type)
১. ভূমিকা — বাজারে কেনাকাটার মতো আলাদা পাত্র
তুমি বাজার থেকে কেনাকাটা করতে গেলে কী হয়?
- চাল কিনলে → কেজিতে মাপো
- তেল কিনলে → লিটারে মাপো
- আনারস কিনলে → পিস গুনো
প্রতিটি জিনিস আলাদা পাত্রে রাখতে হয়, আলাদাভাবে মাপতে হয়।
কম্পিউটারেও একই কথা। সব তথ্য এক জায়গায় একভাবে রাখা যায় না। তাই তৈরি হয়েছে Data Type (ডেটা টাইপ)।
২. সমস্যা — সব তথ্য কি একভাবে রাখা যায়?
কম্পিউটারকে যদি বলো "17 রাখো" — সে কীভাবে রাখবে?
- ১৭ কি পূর্ণসংখ্যা? (age = 17)
- ১৭ কি দশমিক হতে পারে? (temperature = 17.5)
- ১৭ কি কোনো কোড? ('1' = ৪৯, '7' = ৫৫)
Memory বরাদ্দ করতে হবে — কতটুকু Memory লাগবে সেটা জানতে Data Type দরকার।
৩. চিত্রের মাধ্যমে বোঝো
Memory (RAM) — প্রতিটি ঘর = 1 byte
int (4 bytes):
┌────┬────┬────┬────┐
│ │ │ │ │ → সর্বোচ্চ ±2 billion
└────┴────┴────┴────┘
float (4 bytes):
┌────┬────┬────┬────┐
│ │ │ │ │ → দশমিক সংখ্যা (6-7 digit)
└────┴────┴────┴────┘
double (8 bytes):
┌────┬────┬────┬────┬────┬────┬────┬────┐
│ │ │ │ │ │ │ │ │ → বড় দশমিক (15-16 digit)
└────┴────┴────┴────┴────┴────┴────┴────┘
char (1 byte):
┌────┐
│ │ → একটি অক্ষর
└────┘
৪. বাস্তব জীবনের সাথে মিল
বিভিন্ন পাত্রের মতো ভাবো:
int → ছোট কৌটো (শুধু পূর্ণসংখ্যা)
float → মাঝারি জগ (দশমিক, কম নির্ভুলতা)
double → বড় বোতল (দশমিক, বেশি নির্ভুলতা)
char → ছোট খাপ (একটি অক্ষর বা ছোট সংখ্যা)
ভুল পাত্রে রাখলে তথ্য নষ্ট হয়।
যেমন: int-এ 3.14 রাখলে শুধু 3 থাকবে!
Module 1: সংজ্ঞা ও ধারণা
Data Type (ডেটা টাইপ) হলো সেই বিশেষ শ্রেণি যা নির্ধারণ করে:
- কী ধরনের তথ্য সংরক্ষণ করা যাবে
- কতটুকু Memory লাগবে
- কী কী অপারেশন করা যাবে
C-এর মৌলিক Data Types:
| Data Type | বাংলা | আকার | পরিসর | উদাহরণ |
|---|---|---|---|---|
int | পূর্ণসংখ্যা | 4 bytes | -2,147,483,648 থেকে +2,147,483,647 | 17, -5, 1000 |
float | দশমিক (ছোট) | 4 bytes | ±3.4×10³⁸, 6-7 digit নির্ভুল | 3.14, -2.5 |
double | দশমিক (বড়) | 8 bytes | ±1.7×10³⁰⁸, 15-16 digit নির্ভুল | 3.141592653589 |
char | অক্ষর | 1 byte | -128 থেকে +127 | 'A', 'z', '5' |
Format Specifier (printf/scanf-এ ব্যবহার):
| Data Type | Format Specifier |
|---|---|
int | %d |
float | %f |
double | %lf |
char | %c |
Module 2: কীভাবে কাজ করে
int age = 17;
এই লাইনে Memory-তে কী হয়?
int → 4 bytes বরাদ্দ
17 decimal = 00000000 00000000 00000000 00010001 (binary)
Memory (Address 1000-1003):
┌─────────┬─────────┬─────────┬─────────┐
│00000000 │00000000 │00000000 │00010001 │
└─────────┴─────────┴─────────┴─────────┘
1000 1001 1002 1003
float pi = 3.14;
float → 4 bytes, IEEE 754 format
Sign(1) + Exponent(8) + Mantissa(23) = 32 bits
3.14 → 01000000 01001000 11101011 10000101
char 'A' কীভাবে সংরক্ষিত হয়?
'A' এর ASCII code = 65 = 01000001
Memory (1 byte): 01000001
Module 3: প্যাটার্ন ও উদাহরণ
প্যাটার্ন ১: int (পূর্ণসংখ্যা)
উদাহরণ ১.১: বয়স ও রোল নম্বর
#include <stdio.h>
int main() {
int age = 17;
int rollNumber = 25;
int totalStudents = 500;
printf("বয়স: %d বছর\n", age);
printf("রোল নম্বর: %d\n", rollNumber);
printf("মোট শিক্ষার্থী: %d জন\n", totalStudents);
return 0;
}
আউটপুট:
বয়স: 17 বছর
রোল নম্বর: 25
মোট শিক্ষার্থী: 500 জন
উদাহরণ ১.২: গণিত অপারেশন
#include <stdio.h>
int main() {
int a = 100, b = 7;
printf("ভাগফল: %d\n", a / b); // 14 (ভগ্নাংশ বাদ!)
printf("ভাগশেষ: %d\n", a % b); // 2
return 0;
}
আউটপুট:
ভাগফল: 14
ভাগশেষ: 2
উদাহরণ ১.৩: ইনপুট সহ
#include <stdio.h>
int main() {
int n;
printf("একটি সংখ্যা দাও: ");
scanf("%d", &n);
printf("তোমার সংখ্যা: %d\n", n);
printf("তার বর্গ: %d\n", n * n);
printf("তার দ্বিগুণ: %d\n", n * 2);
return 0;
}
প্যাটার্ন ২: float ও double (দশমিক সংখ্যা)
উদাহরণ ২.১: float — সাধারণ দশমিক
#include <stdio.h>
int main() {
float price = 45.50;
float weight = 2.75;
float total = price * weight;
printf("একক মূল্য: %.2f টাকা\n", price);
printf("ওজন: %.2f কেজি\n", weight);
printf("মোট মূল্য: %.2f টাকা\n", total);
return 0;
}
আউটপুট:
একক মূল্য: 45.50 টাকা
ওজন: 2.75 কেজি
মোট মূল্য: 125.13 টাকা
উদাহরণ ২.২: double — বেশি নির্ভুলতা
#include <stdio.h>
int main() {
double pi = 3.14159265358979;
double r = 5.0;
double area = pi * r * r;
printf("π = %.14f\n", pi);
printf("ক্ষেত্রফল = %.6f\n", area);
return 0;
}
আউটপুট:
π = 3.14159265358979
ক্ষেত্রফল = 78.539816
উদাহরণ ২.৩: float vs double পার্থক্য
#include <stdio.h>
int main() {
float f = 1.0 / 3.0;
double d = 1.0 / 3.0;
printf("float: %.10f\n", f);
printf("double: %.10lf\n", d);
return 0;
}
আউটপুট:
float: 0.3333333433
double: 0.3333333333
প্যাটার্ন ৩: char (অক্ষর)
উদাহরণ ৩.১: একটি অক্ষর
#include <stdio.h>
int main() {
char grade = 'A';
char section = 'B';
char initial = 'R';
printf("গ্রেড: %c\n", grade);
printf("সেকশন: %c\n", section);
printf("আদ্যক্ষর: %c\n", initial);
return 0;
}
আউটপুট:
গ্রেড: A
সেকশন: B
আদ্যক্ষর: R
উদাহরণ ৩.২: char এবং তার ASCII মান
#include <stdio.h>
int main() {
char ch = 'A';
printf("অক্ষর: %c\n", ch);
printf("ASCII মান: %d\n", ch); // 65
printf("পরের অক্ষর: %c\n", ch + 1); // B
return 0;
}
আউটপুট:
অক্ষর: A
ASCII মান: 65
পরের অক্ষর: B
উদাহরণ ৩.৩: বড় হাতে ছোট হাতে রূপান্তর
#include <stdio.h>
int main() {
char upper = 'A';
char lower = upper + 32; // 'A'(65) + 32 = 'a'(97)
printf("বড় হাত: %c (%d)\n", upper, upper);
printf("ছোট হাত: %c (%d)\n", lower, lower);
return 0;
}
আউটপুট:
বড় হাত: A (65)
ছোট হাত: a (97)
প্যাটার্ন ৪: Type Conversion (ধরন রূপান্তর)
উদাহরণ ৪.১: Implicit Conversion (স্বয়ংক্রিয়)
#include <stdio.h>
int main() {
int a = 5;
float b = 2.0;
float result = a + b; // int → float স্বয়ংক্রিয়ভাবে
printf("%.1f\n", result); // 7.0
return 0;
}
উদাহরণ ৪.২: Explicit Casting (জোর করে রূপান্তর)
#include <stdio.h>
int main() {
int a = 5, b = 2;
// সাধারণ ভাগ (int ÷ int = int)
printf("সাধারণ: %d\n", a / b); // 2 (ভগ্নাংশ হারিয়ে যায়)
// Casting করে ভাগ
printf("Casting: %.1f\n", (float)a / b); // 2.5
return 0;
}
আউটপুট:
সাধারণ: 2
Casting: 2.5
Module 4: বাস্তব প্রয়োগ
| পরিস্থিতি | সঠিক Data Type | কারণ |
|---|---|---|
| বয়স | int | দশমিক নেই |
| দাম (টাকা) | float | দশমিক থাকতে পারে |
| বৈজ্ঞানিক হিসাব | double | বেশি নির্ভুলতা দরকার |
| লিঙ্গ (M/F) | char | একটি অক্ষর |
| জনসংখ্যা | long int | বড় সংখ্যা |
| শেয়ার বাজার মূল্য | double | সর্বোচ্চ নির্ভুলতা দরকার |
Module 5: সাধারণ ভুল ও সতর্কতা
ভুল ১: int-এ দশমিক রাখা
❌ ভুল:
int price = 45.50; // 45 হয়ে যাবে! .50 হারাবে
✅ সঠিক:
float price = 45.50;
ভুল ২: char-এ ডবল কোটেশন ব্যবহার
❌ ভুল:
char grade = "A"; // "A" হলো String, char নয়
✅ সঠিক:
char grade = 'A'; // single quote ব্যবহার করো
ভুল ৩: ভুল Format Specifier
❌ ভুল:
float gpa = 4.50;
printf("%d\n", gpa); // float-এ %d — garbage আসবে!
✅ সঠিক:
printf("%f\n", gpa); // float-এর জন্য %f
ভুল ৪: int ÷ int = int (ভগ্নাংশ হারায়)
❌ প্রত্যাশিত নয়:
int a = 7, b = 2;
printf("%d\n", a / b); // 3 আসবে, 3.5 নয়!
✅ সঠিক:
printf("%.1f\n", (float)a / b); // 3.5
Module 6: সুবিধা-অসুবিধা
| Data Type | কম Memory | বেশি নির্ভুলতা | কখন ব্যবহার করবে |
|---|---|---|---|
int | ✅ | শুধু পূর্ণসংখ্যা | বয়স, গণনা |
float | ✅ | মাঝামাঝি (6-7) | সাধারণ দশমিক |
double | ❌ (বেশি) | ✅ সর্বোচ্চ (15-16) | বৈজ্ঞানিক, অর্থনীতি |
char | ✅ সবচেয়ে কম | শুধু অক্ষর | একটি অক্ষর |
🔁 নিজে পরীক্ষা করো
MCQ:
১. int ডেটা টাইপ কত bytes মেমরি নেয়?
- ক) 1
- খ) 2
- গ) 4 ✓
- ঘ) 8
২. char ডেটা টাইপে কোন ধরনের মান রাখা যায়?
- ক) একটি অক্ষর ✓
- খ) একটি শব্দ
- গ) দশমিক সংখ্যা
- ঘ) বড় পূর্ণসংখ্যা
৩. float ও double-এর মধ্যে মূল পার্থক্য কী?
- ক) ব্যবহারের পদ্ধতি
- খ) নির্ভুলতা ও মেমরি আকার ✓
- গ) সংখ্যার চিহ্ন
- ঘ) কোনো পার্থক্য নেই
৪. int a = 7 / 2; হলে a-এর মান কত?
- ক) 3.5
- খ) 3 ✓
- গ) 4
- ঘ) 0
৫. char-এর জন্য printf-এ কোন format specifier ব্যবহার হয়?
- ক)
%d - খ)
%f - গ)
%c✓ - ঘ)
%s
সংক্ষিপ্ত প্রশ্ন:
৬. C-এর ৪টি মৌলিক Data Type-এর নাম, আকার, এবং ব্যবহার লেখো।
৭. int a = 5, b = 2; হলে a/b এবং (float)a/b-এর মান কত হবে এবং কেন?
📝 HSC পরীক্ষার প্রস্তুতি
১. কেন সব কিছুর জন্য double ব্যবহার করা ভালো না? Memory-র সাথে এর সম্পর্ক কী?
২. char ডেটা টাইপে কীভাবে সংখ্যা রাখা যায়? 'A' এবং 65 কি একই জিনিস?
৩. তুমি যদি বাংলাদেশের জনসংখ্যা (১৭ কোটি) একটি Variable-এ রাখতে চাও — কোন Data Type ব্যবহার করবে এবং কেন?
🎯 অনুশীলন প্রশ্ন
সহজ: চারটি Variable তৈরি করো: name (char), age (int), gpa (float), পরীক্ষার নম্বর (double)। প্রতিটিতে মান রাখো এবং প্রিন্ট করো।
মাঝারি: দুটি int নম্বর ইনপুট নাও। তাদের যোগ, বিয়োগ, গুণ, ভাগ (int) এবং ভাগ (float) — পাঁচটি ফলাফল দেখাও।
কঠিন:
একটি প্রোগ্রাম লেখো যা: radius (double) ইনপুট নেবে এবং বৃত্তের ক্ষেত্রফল ও পরিধি double নির্ভুলতায় দেখাবে।
✅ সারাংশ
🎯 মনে রেখো:
- Data Type = Variable কী ধরনের তথ্য রাখবে তা নির্ধারণ করে
- ৪ মৌলিক Type:
int(4 bytes) → পূর্ণসংখ্যা,%dfloat(4 bytes) → দশমিক,%fdouble(8 bytes) → বেশি নির্ভুল দশমিক,%lfchar(1 byte) → একটি অক্ষর,%c
int ÷ int = int→ দশমিক হারিয়ে যায়!char→ single quote'A', double quote নয়!- Format specifier ভুল হলে garbage output আসে
💡 পরীক্ষার টিপস: Data Type-এর আকার (bytes) এবং পরিসর প্রায়ই MCQ-তে আসে। int=4, char=1, float=4, double=8 — মুখস্থ রাখো।