ডেটা টাইপ এবং ভ্যারিয়েবল: লেকচার-৩

ডেটা টাইপ এবং ভ্যারিয়েবলঃ লেকচার-৩

ভ্যারিয়েবলঃ
এর আগের প্রোগ্রামে আমরা মাত্র এক লাইনের একটা আউটপুট দেখিয়েছি। যা শুধু মাত্র প্রোগ্রামিং শুরু করার জন্যই যথেষ্ট ছিল। বাস্তবে আমাদের জটিল কিছু প্রোগ্রাম লিখতে হবে। যার জন্য দরকার আমাদের ভ্যারিয়েবল এর ধারনা।


ভ্যারিয়েবল হচ্ছে একটি নাম, যা দিয়ে কম্পিউটারের মেমরিতে কোন ডেটা রাখা হয়। এ ডেটা হতে পারে নিউম্যারিক (যে কোন সংখ্যা) অথবা একটি character (a,b,c..Z)। এ ভ্যারিয়েবল এর মধ্যে কি ধরনের ডেটা রাখব আমরা তাই হচ্ছে ডেটা টাইপ।

ডেটা টাইপঃ

সি প্রোগ্রামিং এ অনেক প্রকারের ডাটা টাইপ আছে। তার মধ্য প্রধান চারটি হচ্ছেঃ

  • int data type
  • char data type
  • float data type
  • double data type

আরেকটা ডেটা টাইপ হচ্ছে void, যাকে ভ্যালুলেস ডেটা টাইপ বলে।

int data type:
int data type বলতে integer quantity (অবিভাজ্য সংখা যেমনঃ ১, ২, ৩ ইত্যাদি) বুঝায়। এর সাইজ ২ বাইট বা ১৬ বিট (১বাইট=৮বিট) এবং রেঞ্জঃ -৩২৭৬৮ থেকে +৩২৭৬৭ পর্যন্ত।  কিছু কিছু কম্পাইলারে int ডেটার জন্য ৪ বাইট মেমরি দেয়। অর্থাৎ একটা int ডেটা টাইপের জন্য সর্বোচ্চ ৪ বাইট ডেটা রাখা যাবে। যার রেঞ্জ হচ্ছে  -2,147,483,648 থেকে 2,147,483,647।  এ রেঞ্জ এর মানে হচ্ছে এর থেকে বড় মানের সংখ্যা যদি আমরা কোন ইন্টিজার ডেটা টাইপ ভ্যারিয়েবলে সেট করি তাহলে কম্পাইলার সঠিক মান দিবে না। সাইজ এবং রেঞ্জ কম্পাইলার অনুযায়ী ভিন্ন হতে পারে।
int data type এর উদাহরন হিসেবে আমরা একটা প্রোগ্রাম দেখতে পারি। একটি আয়াতাকার  জমির দৈর্ঘ্য এবং প্রস্থ জানলে আমরা তার ক্ষেত্রফল বের করতে পারি। তাই না? মনে করে নিচ্ছি দৈর্ঘ্য ৫ একক এবং প্রস্থ ৮ একক। আমরা এর ক্ষেত্রফল হবে ৫*৮ = ৪০ একক। প্রোগ্রামে আমরা কিভাবে তা বের করতে পারি? নিচের প্রোগ্রামটি দেখি।
#include <stdio.h>
int main()
{
 int volume;
 int length = 5;
 int width = 8;
 volume = length * width;
 printf("%d", volume);
 return 0;
}
প্রোগ্রামটি রান করলে আমরা আউটপুট দেখতে পাবো 40


এটা আমাদের প্রথম প্রোগ্রাম থেকে দেখতে অনেক জটিল। এবং কিছুটা বড়। তবে অবশ্যই অনেক সহজ। কিছুক্ষণ আগে আমরা ভ্যারিয়বল সম্পর্কে জেনেছি। এটি কম্পিউটার মেমরিতে কোন কিছু স্টোর বা সেভ করে রাখতে ব্যবহৃত হয়।কিছুক্ষন আগে int নামে আমরা একটা ডেটা টাইপ সম্পর্কে জেনেছি। যা দিয়ে কম্পিউটারে Integer/ পূর্ণসংখ্যা কম্পিউটারে সংরক্ষন করা যায়। উপরের প্রোগ্রামে আমরা তিনটে ইন্টিজার ভ্যারিয়েবল ব্যবহার করেছি। প্রথম ভ্যারিয়েবল length বা দৈর্ঘ্য এর জন্য, দ্বিতীয়টা width বা প্রস্থের জন্য। তৃতীয়টা নিয়েছি দৈর্ঘ্য এবং প্রস্থ থেকে আয়তন বের করে রাখার জন্য volume নামে।আর এর সব টুকু লিখছি একটা লাইনের মধ্যে, যেমন int volume; যাকে বলা হয় ভ্যারিয়েবল ডিক্লারেশন। অর্থাৎ একটা ভ্যারিয়েবল ব্যবহার করার আগে একে ডিক্লেয়ার করতে হয়। ডিক্লেয়ারেশন শেষ আমরা একটা সেমিকোলন দিয়েছি। একটি ভেরিয়েবল ডিক্লেয়ারেশন শেষে তা শেষ করার জন্য একটা সেমিকোলন ব্যবহার করতে হয়। অর্থাৎ একটি ভ্যারিয়েবল ডিক্লেয়ার করতে হয় নিচের মত করেঃ
data_type variable_name;

কম্পিউটারকে তো আমাদের জানাতে হবে যে আমাদের জমির দৈর্ঘ্য এবং প্রস্থ কত, তাই না? এর জন্য আমরা আরো দুটি ভ্যারিয়েবল নিয়েছি length এবং width নামে। এ দুটি আবার int volume; থেকে একটু ভিন্ন। আমরা এ দুটি ভ্যারিয়েবল ডিক্লেয়ার করার সাথে সাথে একটি মান সেট করে দিয়েছি। যাকে বলে ভ্যালু এসাইন করা। মান সহ ভ্যারিয়েবল ডিক্লেয়ার করার নিয়ম হচ্ছেঃ

data_type variable_name = value;

এর পর বর্তীতে আমরা লিখছি volume = length * width; এর মানে হচ্ছে length ভ্যারিয়েবল এর মান এবং width ভ্যারিয়েবল এর মান গুন করে volume এ রাখা।এর পরবর্তী লাইন এর সাথে আমরা কিছুটা পরিচিত। printf(“%d”, volume); যা হচ্ছে printf() ফাংশন।


printf ফাংশন

printf() ফাংশন এর কাজ হচ্ছে কোন কিছু প্রিন্ট করা। একটা লেখা প্রিন্ট করার জন্য printf() এর ভেতর ডাবল কোটেশন এর মধ্যে কিছু লিখলেই তা প্রিন্ট করে দেয়, তা আমরা এর আগেই জেনে এসেছি।কিন্তু এবার আমরা একটা ইন্টিজার ভ্যালু প্রিন্ট করব এবং একট ভ্যারিয়েবল এর থেকে। এর জন্য কিছু নিয়ম আমাদের ফলো করতে হবে। একটি ইন্টিজার প্রিন্ট করার জন্য printf() এর ভেতর ডাবল কোটেশন দিয়ে লিখতে হয় %d, এটিকে বলে placeholder। প্রত্যেকটি ডেটা টাইপের জন্য আলাধা আলাধা placeholders রয়েছে। %d মানে হচ্ছে display integer। ডাবল কোটেশনের পর আমরা একটি কমা দিয়েছি। এর পর লিখছি আমাদের ইন্টিজার ভ্যারিয়েবলটি। যা আমাদের জমির ক্ষেত্রফল প্রিন্ট করে দিয়েছে।ভালো হতো যদি প্রোগ্রামটা রান হওয়ার পর দৈর্ঘ্য এবং প্রস্থ নেওয়া যেত। তাহলে আমরা যে কোন জমির ক্ষেত্রফল বের করতে পারতাম। আমরা এমন কিছুই শিখব পরবর্তী অধ্যায় গুলতে। এ অধ্যায় আমরা আরো কিছু মৌলিক ধারণা সম্পর্কে জানব।



প্লেসহোল্ডার / Placeholder

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

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

                                 ডেটা টাইপ                      প্লেসহোল্ডার
                               int                                 %d
                               char                              %c
                               float                              %f
                               double                          %lf


character data type
char data type বলতে single character ( একটি বর্ন যেমন a, b, z, A, N ইত্যাদি) বুঝায়। এর সাইজ ১ বাইট বা ৮ বিট। বিট (১বাইট=৮বিট) এবং রেঞ্জঃ -১২৮ থেকে +১২৭ পর্যন্ত। আমাদের কীবোর্ডের প্রত্যেকটি চিহ্নই এক একটা  character। ক্যারেকটার ভ্যারিয়েবল ডিক্লেয়ার করার নিয়ম হচ্ছেঃ

char variable_name;

character ভ্যারিয়েবলে মাত্র একটি কারেকটার / লেটার / বর্ণ সংরক্ষন করা যায়। নিচের প্রোগ্রাম দেখিঃ

#include <stdio.h>
int main()
{
char ch = 'A';
printf("%c", ch);
return 0;
}
এখানে ch নামে একটা কারেকটার ভ্যারিয়েবল নিয়েছি। এরপর তা প্রিন্ট করেছি। ভ্যারিয়েবলের মধ্যে কোন কারেকটার এসাইন করার জন্য তা সিঙ্গেল কোটেশনের মধ্যে রাখতে হয়। এভাবে ‘A’।

ক্যারেক্টার ডেটা প্রিন্ট করার জন্য আমাদে %c প্লেসহোল্ডার ব্যবহার করতে হয়।


float data type
integer ডেটা টাইপ শুধু মাত্র পূর্ণ সংখ্যা গুলো সংরক্ষন করা যায়। একটা integer ভ্যারিয়েবলে একটি দশমিক মান যেমনঃ ৮.৯ বা ইচ্ছে মত কিছু এসাইন করুন। এর পর ঐ ভ্যারিয়েবলটি প্রিন্ট করে দেখুন। কি দেখলেন? দশমিকের পরের অংশ নেই তাই না? নিচের প্রোগ্রামটা  আপনি  রান করিয়ে দেখতে পারেনঃ
#include <stdio.h>
int main()
{
 int n = 8.9;
 printf("%f", n);
 return 0;
}
এটা শুধু আমাদের 8 দেখাবে। যদিও আমরা ভ্যারিয়েবলটির মধ্যে রেখেছি 8.9 । এর কারণ হচ্ছে int শুধু মাত্র পূর্ণ সংখ্যা গুলোকে কম্পিউটার মেমরিতে সংরক্ষিত করতে পারে। দশমিক মান কম্পিউটারে রাখার জন্য আমাদের দরকার আরেকটি ডেটা টাইপ, যার নাম float ।

float data type বলতে floating point number (দশমিক সংখা যেমনঃ ১০.৫, ১.৮, ৫.৬ ইত্যাদি) বুঝায়। floating point ডেটা টাইপ দশমিকের পর ৬ ঘর পর্যন্ত নির্ভুল ভাবে কোন নাম্বার সংরক্ষণ করতে পারে। উপরের প্রোগ্রামটার ভ্যারিয়েবল n এর Data Type পরিবর্তন করে float দিয়ে রান করিয়ে দেখোঃ

#include <stdio.h>
int main()
{
 float n = 8.9;
 printf("%f", n);
 return 0;
}

এটি এবার সঠিক মান দিবে। প্রিন্ট করার সময় আমাদের ফ্লোটিং পয়েন্ট ডেটা টাইপের প্লেসহোল্ডার %f ব্যবহার করতে হবে।

এবার আরেকটা উদাহরণ দেখি। আমরা জানি বৃত্তের ক্ষেত্রফলের জন্য দরকার এর ব্যাসার্ধের মান। কোন বৃত্তের ব্যাসার্ধ r হলে এর ক্ষেত্রফল  ধরে নিচ্ছি  বৃত্তের ব্যাসার্ধ 7.6 একক। আমরা এর ক্ষেত্রফল বের করার একটা প্রোগ্রাম লিখে ফেলিঃ

#include <stdio.h>
int main()
{
 float radius = 7.6;
 float area = (radius*radius * 3.1416);
 printf("%f", area);
 return 0;
}
আমরা radius নামে একটা floating point ভ্যারিয়েবল নিয়েছি। এর মধ্যে বৃত্তের ব্যাসার্ধ রেখেছি। area নামে আরেকটি ভ্যারিয়েবল নিয়েছি যার মধ্যে ক্ষেত্রফল বের করে রেখেছি।

আমরা যানি বৃত্তের ক্ষেত্রফল হচ্ছে ব্যাসার্ধ*ব্যাসার্ধ্য * পাই এর মান। তাই লিখছি এবং মানটি প্রিন্ট করেছি।

এর আগে integer এর উদাহরণে printf  ফাংশনে placeholder হিসেবে ব্যবহার করেছি %d, floating point এর জন্য placeholder হচ্ছে %f । বাকিটা তো সহজ তাই না?

আমরা জেনেছি যে floating point দশমিকের পর  ৬ ঘর পর্যন্ত নির্ভুল মান দিতে পারে। এর থেকে বেশি ঘর পর্যন্ত নির্ভুল মান পেতে হলে আমাদের আরেকটি ডেটা টাইপ ব্যবহার করতে হবে যার নাম হচ্ছে double ।
double data type
double data type বলতে Double precision floating point number বুঝায়।এটা float data type এর মতোই তবে সাইজ বিশাল। এর সাইজ ৮ বাইট বা ৬৪ বিট। এবং এটি দশমিকের পর ১৫ ঘর পর্যন্ত নির্ভুল মান সংরক্ষণ করতে পারে।
আমরা জানি বৃত্তের পরিধি ও ব্যাসের অনুপাতকে পাই/ Pi [Π]  দিয়ে প্রকাশ করা হয়। এটি একটি অমূলদ সংখ্যা। এটিকে দশমিক আকারে সম্পূর্ণ প্রকাশ করা সম্ভব নয়। দশমিকের পর অসীম সংখ্যা রয়েছে, এ জন্য। আমরা যদি float দিয়ে এর মান বের করার চেষ্টা করি, আমরা পাব দশমিকের পর ৬ ঘর পর্যন্ত। কিন্তু double দিয়ে যদি এর মান বের করি, তাহলে পাব দশমিকের পর ১৫ ঘর পর্যন্ত নির্ভুল মান। double এর মান প্রিন্ট বা আউটপুট পাবার জন্য প্লেসহোল্ডার হিসেবে আমাদের lf ব্যবহার করতে হয়।  নিচের প্রোগ্রামটি দেখিঃ

#include <stdio.h>
int main()
{
double pi = 3.14159265358979323846;
printf("%lf", pi);
return 0;
}
এখন যদিও কম্পাইল করে রান করার পর দশমিকের পর ৬ ঘরই দেখাবে। কিন্তু আমরা বলছি ১৫ ঘর পর্যন্ত নির্ভুল মান দিবে। ঠিকই বলেছি। এখন কম্পাইলারকে বলে দিতে হবে কত দশমিকের পর কত ঘর প্রিন্ট করবে। নিচের প্রোগ্রামটি দেখিঃ
#include <stdio.h>
int main()
{
double pi = 3.14159265358979323846;
printf("%.9lf", pi);
return 0;
}
এখানে আমরা প্লেসহোল্ডারে লিখেছি .9lf । প্লেসহোল্ডারে দশমিক দিয়ে কত ঘর পর্যন্ত প্রিন্ট করবে, তা বলে দিলে তত ঘর পর্যন্তই প্রিন্ট করবে। উপরের প্রোগ্রামটি এখন পাই এর মান দশমিকের পর ৯ ঘর পর্যন্ত প্রিন্ট করবে।

মাথায় দুষ্টু বুদ্ধি খেলা করে তাই না?  .9lf এর জায়গায় .50lf দিলে দশমিকের পর ৫০ ঘর প্রিন্ট করবে, তাই তো? হ্যা, ঠিকই  .50lf লিখলে ঠিকই দশমিকের পর ৫০ ঘর পর্যন্ত প্রিন্ট করবে। তবে তা আমরা যে রেজাল্ট চাচ্ছি তা পাবো না। ভুল কিছু পাবো। নিচের প্রোগ্রামটি দেখিঃ

#include <stdio.h>
int main()
{
double pi = 3.14159265358979323846;
printf("%.20f", pi);
return 0;
}



1 comment:

Theme images by luoman. Powered by Blogger.