Monday, July 1, 2013

ভেরিয়েবল,কীওয়ার্ডস,ডাটা টাইপ এবং ফরমেট স্পেসিফায়ার

এই পোস্টে আমরা জানব, ভেরিয়েবল কী? কীওয়ার্ড কী? ডাটা টাইপ কী? এবং ফরমেট স্পেসিফায়ার কী এবং বিভিন্ন ডাটা টাইপের ফরমেট স্পেসিফায়ার গুলো কি কি ও সেগুলো কিভাবে ব্যবহার করতে হয়।

ভেরিয়েবল: ভেরিয়েবল বা চলক হল এমন কিছু একটা যেটা নির্দিষ্ট কিছু ডাটা ধারন করে যা পরিবর্তনযোগ্য। তবে একধরনের ভেরিয়েবল আছে যেটার মান পরিবর্তনযোগ্য নয়। সেধরনের ভেরিয়েবলকে স্টেটিক ভেরিয়েবল বলে। মজার ব্যাপার হল আমরা প্রাত্যহিক জীবনে প্রতিনিয়ত ভেরিয়েবল ব্যবহার করি। কীভাবে? ধরি একটা কেরোসিনের বোতল আছে যেটাতে আমরা কেরোসিন রাখি। ধরা যাক কেরোসিনের বোতলটিতে সর্বোচ্চ ৫লিটার তেল রাখা যায়। এখন আমরা চাইলে সেই বোতলে ০-৫ লিটার পর্যন্ত যে কোন মানের তেল রাখতে পারি।


কিন্তু ৫লিটারের বেশী তেল আমরা রাখতে পারবনা কারন তাহলে তেল উপচে পড়ে যাবে। প্রোগ্রামিং এর ভাষায় এই উপচে পড়ে যাওয়াকে আদর করে ওভারফ্লো বলা হয়। উক্ত উদাহরনটিতে তেলের বোতলটি হল ভেরিয়েবল এবং তেল হল ডাটা। এখন একটা ব্যাপার লক্ষ্য করা যাক, আমরা কি তেলের বোতলে পানি রাখতে পারব? উত্তর হল না। ঠিক এইরকম সি তেও আমরা পূর্ণসংখ্যা(ইন্টিজার) টাইপের ভেরিয়েবলে শুধুই পূর্ণসংখ্যা এবং দশমিক সংখ্যা(ফ্লট) টাইপের ভেরিয়েবলে শুধুমাত্র দশমিক টাইপের ডাটা বা ভ্যালুই রাখতে পারব। মোদ্দা কথা ভেরিয়েবল হল একটা নির্দিষ্ট ধরনের পাত্র যেখানে নির্দিষ্ট কিছু ভ্যালু বা ডাটা রাখা যায়।
উদাহরন: int a; float f; char c; এখানে a একটি integer টাইপের ভেরিয়েবল, f একটি float টাইপের ভেরিয়েবল ও c একটি ক্যারেক্টার টাইপের ভেরিয়েবল। অর্থাৎ a তে পূর্ণসংখ্যা, f এ দশমিক ভ্যালু ও c তে ক্যারেক্টার টাইপের ভ্যলু রাখা যাবে।
বি:দ্র: ভেরিয়েবল নাম ইচ্ছেমত দেয়া যাবে। তবে প্রোগ্রামের সাথে সঙ্গতিপূর্ণ নাম ব্যবহার করা উচিত। যোগের প্রোগামের ভেরিয়েবল নাম যদি mul বা multiplication দেয় তবে সেটা নিশ্চয় ভাল দেখায় না। কানা ছেলের নাম পদ্মলোচন টাইপের হয়ে যায় আরকি। আরেকটা ব্যাপার ভেরিয়েবল লেখার নির্দিষ্ট কিছু নিয়ম আছে। সেগুলো পাঠ্যবই থেকে ভাল করে দেখে নেয়ার ও আত্নস্হ করার অনুরোধ রইল।


কীওয়ার্ডস: সি তে কিছু নির্দিষ্ট শব্দ দেয়া আছে যে গুলো বিইল্ডইন অর্থাৎ এগুলো আগে থেকেই ডিফাইন করা আছে। এই কীওয়ার্ডস গুলোর প্রত্যেকের নির্দিষ্ট ও আলাদা আলাদা অর্থ আছে। যেমন উপরের int,float,char এগুলো সবগুলোই কীওয়ার্ডস তবে সাধারন কীওয়ার্ডের থেকে এগুলো আলাদা কারন এগুলো ডাটা টাইপ হিসেবে কাজ করে। সাধারন কিছু কীওয়ার্ড হল: return,define,exit,auto,if,else,switch,case,default,break,static,union,while,void,register,enum,for,goto, ইত্যাদি। এছাড়াও আরও অনেক কীওয়ার্ড আছে সেগুলোও আমরা ধীরে ধীরে জানব ও ব্যবহার করা শিখব।

ডাটা টাইপ: ডাটা টাইপ হলো নির্দিষ্ট কিছু কিওয়ার্ড যেগুলো আমরা কোন ধরনের ডাটা নিয়ে কাজ করব তা নির্দেশ করে। যেমন পূর্বের উদাহরনে আমরা int,float,char ডাটা টাইপগুলো চিনেছি। এগুলো নির্দেশ করে আমরা কোন টাইপের ভেরিয়েবলে কোন টাইপরে ডাটা রাখব অর্থাৎ কোন টাইপের ডাটা নিয়ে কাজ করব। এইসব ডাটা টাইপের নির্দিষ্ট রেঞ্জ বা সীমা আছে ঐ সেই তেলের বোতলের মত। অর্থাৎ এরা নির্দিষ্ট সাইজের থেকে বেশী ডাটা নিতে বা রাখতে পারে না। এই নির্দিষ্ট সীমা প্রত্যেক ডাটা টাইপের জন্য আলাদা এবং নির্দিষ্ট করে দেয়া আছে। নিচে সি এর ডাটা টাইপ গুলোর নাম ও সীমা দেয়া হল।
         ডাটা টাইপ নাম -----বিট-----  রেঞ্জ বা সীমা
  1. int                       16           -32768 to 32767
  2. unsigned int         16           0 to 65535
  3. short int              8             -128 to 127
  4. unsigned short int 8            0 to 255
  5. long                     32           -2147483648 to 2147483647
  6. float                    32           3.5E-4932 to 3.4E+38
  7. double                  64           1.7E-308 to 1.7E+308
  8. long double          80           3.4E-4932 to 1.1E+4932
  9. char                     8            -128 to 127
  10. unsigned char       8            0 to 25
মুটামুটি এগুলোই হল সি বিইল্ডইন ডাটা টাইপ ও এদের ধারন ক্ষমতা বা রেঞ্জ

ফরমেট স্পেসিফায়ার: সি তে এমন কিছু শব্দ ডিফাইন করা থাকে যেগুলো নির্দিষ্ট ডাটা টাইপের ভ্যালুর প্রতিনিধিত্ব করে। অর্থাৎ ইন্টিজার টাইপের ডাটার জন্য একটি স্পেসিফায়ার আবার ফ্লট টাইপের ডাটার জন্য আরেক ধরনের স্পেসিফায়ার। এই স্পেসিফায়ারগুলো ব্যবহার করা হয় ইউজারের কাছ থেকে ডাটা নেয়ার জন্য এবং আউটপুট দেখানোর জন্য। উদাহরনে বিষয়টি ভালভাবে পরিষ্কার হওয়া যাবে।
নিচে কিছু ডাটা টাইপের ফরমেট স্পেসিফায়ার দেয়া হল।
          ডাটা টাইপ   ------    ফরমেট স্পেসিফায়ার
  1. int                           %d
  2. long int                   %ld
  3. float                        %f
  4. double                     %lf
  5. char                        %c
আপাতত এগুলো জানলেই চলবে আরও কিছু স্পেসিফায়ার আছে প্রয়োজনে সেগুলোও আমরা জানব।

অনেকতো বকবক করলাম এবার চলো এক কাজ করি উপরের বকবক গুলোকে কাজে লাগিয়ে একটি যোগের প্রোগ্রাম কোড করি যেটা ইউজারের কাছ থেকে ২টা নাম্বার নিয়ে যোগ করে ফলাফল ইউজারকে দেখাবে। মজা না?
চলো তবে কোড করা যাক::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

#include<stdio.h>           //হেডার ফাইল যেটা printf(),scanf() ফাংশনগুলোকে ধারন করে।

int main()
{
             int a,b,c;    //তিনটি ইন্টিজার টাইপের ভেরিয়েবল।
             scanf("%d %d",&a,&b);   //scanf()ফাংশন যেটা  ইউজারের থেকে ২টা ইনপুট নিয়ে ভেরিয়েবলে রাখবে।
             c=a+b;                            //a,b কে যোগ করে c তে রাখলাম।
             printf("%d",c);              //c কে বা c এর মানকে প্রিন্ট করে দিলাম বা আউটপুট দেখালাম।
             return 0;                        //main() ফাংশন যেহেতু কোন ভ্যালু রিটার্ন করবেনা তাই return 0 দিলাম।
}

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

বিশেষ বিশেষ দ্রষ্টব্য:
  1. একটা বিষয় খেয়াল করেছ? কোডের প্রত্যেকটা লাইন সেমিকোলন(;) দিয়ে শেষ হয়েছে। অর্থাৎ সেমিকোলন কোডের নির্দিষ্ট কোন লাইনের সমাপ্তি নির্দেশ করে। তাই প্রত্যেক লাইনের শেষে সেমিকোলন দিতে হবে। খেয়ালকৈরা।
  2. লাইনগুলোতে কমা ও কোটেশনের ব্যবহার হুবহু একইভাবে করতে হবে। অন্যথায় এরর দেখাবে। এগুলো কোড করতে করতে অভ্যস্ত হয়ে যাবে। কোন ব্যাপার না।
  3. স্ল্যাশ(//) যুক্ত লাইনগুলো সি তে কমেন্ট হিসেবে গন্য করা হয়। অর্থাৎ এদের সাথে কোডের কোন সম্পর্ক নেই। তাই কোড করার সময় এগুলো বাদ দিলেও সমস্যা নেই। এগুলো আসল বাদ দেয়ায় উচিত আমি শুধুমাত্র বোঝানের জন্য এগুলো ব্যবহার করেছি।
  4. আর একটা কথা কোড প্রাকটিস করতে হবে। উপরোক্ত উদাহরনের আলোকে বিয়োগ,গুন,ভাগ এগুলোও করতে হবে। ২টার জায়গায় ৩/৪টা ভেরিয়েবল নিয়ে প্র্যাকটিস করতে হবে।

No comments:

Post a Comment