Sunday, November 3, 2013

C প্রোগ্রামিং দ্বিতীয় অধ্যায় - ডাটাটাইপ-ভেরিয়েবল ঘোষনার নিয়মাবলী -ব্যাকস্লাশ ক্যারেক্টার-ফরম্যাট স্পেসিফায়ার - PART 1

ডাটা ইনপুট এবং আউটপুটঃ ডাটা ইনপুট বলতে কম্পিউটারকে ব্যবহারকারী তার ইচ্ছে অনুযায়ী নির্দেশনা দিবে মাউস কি-বোর্ডের মাধ্যমে সেটা ডাটা ইনপুট, আর কম্পিউটার ব্যবহারকারীর প্রদত্ত ডাটা ব্যবহার করে যে ফলাফল প্রদর্শন করবে সেটাই আউটপুট।

একটা উদ্ভট উদাহরন দিয়ে ব্যাপারটি তোমাদের কাছে পরিস্কার করিঃ

যদি তুমি কম্পিউটার কে দুটো নাম্বার ৫ আর ১০ দাও এবং সাথে যদি বলে দাও যে এই নাম্বারগুলো যোগ কর, তাহলে কম্পিউটার তোমাকে কি দিবে উত্তর? নিশ্চয়ই ১৫।
এই যে তুমি কম্পিউটার কে দুটো নাম্বার ৫ এবং ১০ দিয়েছো, এদেরকে বলা হবে ডাটা ইনপুট এবং কম্পিউটার তোমাকে এই নাম্বার গুলো যোগ করে যে উত্তর দিলো মানে ১৫, সেটা হচ্ছে আউটপুট। আশা করি এখানে আর কোন সমস্যা নেই।

ডাটাটাইপ(Data-Type) ও  মডিফায়ারঃ সি ভাষায় ভেরিয়েবল ব্যবহার করে ডেটা সংরক্ষণের জন্য ভেরিয়েবল ঘোষণার সময় ডেটার ধরন অনুযায়ী উপযুক্ত ডেটা টাইপও ঘোষণা করতে হয়। এরুপ ব্যবহৃত চারটি মৌলিক বা বিল্ট ইন ডেটা টাইপ হলঃ char, integer, float, double।
  • integer(পুর্নসংখা)
  • character(অক্ষর)
  • float(দশমিক বা ভগ্নাংশ)
  • double(দশমিক বা ভগ্নাংশ কিন্তু এর মেমোরি float টাইপের ডাটার চেয়ে বেশি)
Integer বা পুর্নসংখ্যা, দশমিক বা ভগ্নাংশ কি সেগুলো আশা করি বুঝাতে হবে না।
Identifiers and Keywords প্রোগ্রাম লেখার সময় ব্যাখ্যা করা হবে। 

 চারটি মৌলিক ডেটা এর জন্য ঘোষিত ভেরিয়েবলের জন্য সংরক্ষিত মেমরি পরিসর, ডেটার প্রকৃতি এবং ধারণ ক্ষমতার একটা সীমাবদ্ধতা রয়েছে। যেমনঃ একটি char টাইপ ভেরিয়েবলের জন্য ৮ বিট বা ১ বাইট জায়গা সংরক্ষণ করে যাতে ০ থেকে ১২৭ মানবিশিষ্ট মোট ১২৮টি ব্যারেক্টারের যে কোন একটি মান রাথা যায়।
এছাড়াও সি তে আরও ৪টি মডিফায়ার আছে।
সেগুলো হলঃ- singed, unsigned, short, long ।
সাধারনত char টাইপ ভেরিয়েবলের জন্য singed ও unsigned মডিফায়ার এবং int  টাইপ ভেরিয়েবলের জন্য singed, unsigned, short ও long মডিফায়ার, float ও double টাইপ ভেরিয়েবলের জন্য short এবং  long মডিফায়ার ব্যবহৃত হয়।
এসব ডেটার বিট ও মানের রেঞ্জ জানা খুব জরুরী।
ডেটা টাইপবিট সংখ্যাডেটা বা ভেরিয়েবলের মানের রেঞ্জ
Char
8
-128↔ 127 বা -27 ↔ 27-1
Signed char
8
-128↔ 127 বা -27 ↔ 27-1
Unsigned char
8
0 ↔ 255 বা 0 ↔ (28-1)
Integer
16
-32768 ↔32767 বা -215↔ 215-1
Short integer
16
-32768 ↔32767
Unsigned int
16
0 ↔ 65535 বা 0 ↔ ( 216-1)
Long integer
32
- 231 ↔ 231-1
Float
32
3.4xE-38 ↔ 3.4xE38
Long float
64
1.7xE-308 ↔1.7xE308
Double
64
1.7xE-308 ↔1.7xE308
Long double
80
3.4xE-4932 ↔ 1.1xE4932




ফরম্যাট স্পেসিফায়ারঃ- printf ( ) ফাংশন দ্বারা কোন ডেটা বা ভেরিয়েবলের মান প্রদর্শনের জন্য নিদির্ষ্ট ফরম্যাটের কতগুলো ক্যারেক্টার ব্যবহৃত হয় যেগুলোকে ফরম্যাট স্পেসিফায়ার বলা হয়। যেমনঃ int টাইপ ডেটা বা ভেরিয়েবলের মান প্রদর্শনের জন্য ফরম্যাট স্পেসিফায়ার হল %i বা %d, char টাইপ ডেটার জন্য %c ইত্যাদি।
ফরম্যাট স্পেসিফায়ারব্যবহার
%c
Charটাইপ মান ইনপুট/আউটপুট করার জন্য।
%d
Integer টাইপ মান ইনপুট/আউটপুট করার জন্য।
%f
Float টাইপ মান ইনপুট/আউটপুট করার জন্য।
%lf
Double  টাইপ মান ইনপুট/আউটপুট করার জন্য।
%o
Octal  টাইপ মান ইনপুট/আউটপুট করার জন্য।


ব্যাকস্লাশ ক্যারেক্টারঃ- বিশেষ কিছু ক্যারেক্টার আছে (যেমনঃ- \, \“,\n, \r, \t ইত্যাদি) যেগুলো printf ( ) ফাংশনের ডাবল কোটেশনের (“ ”) এর মধ্যে যেভাবে রাখা হয় , হুবহু সেভাবে ফলাফল প্রকাশ করে না। এখানে কিছু ব্যাকস্লাশ ক্যারেক্টারের বণর্না দেওয়া হলঃ-
ব্যাকস্লাশ ক্যারেক্টারব্যবহার
\n
আউটপুট পরবর্তী (নতুন) লাইনের শুরুতে প্রদর্শনের জন্য।
\r
আউটপুট পূরবর্তী লাইনের শুরুতে একই কলাম বরাবর প্রদর্শনের জন্য।
\t
আউটপুট ডান দিকে এক ট্যাব দূরুত্বে প্রদর্শনের জন্য।
\“
ডাবল কোটেশন ক্যারেক্টার প্রদর্শনের জন্য।
\a
audible alert   

               ‘\v’  
            vertical tab. 
               ‘\b’ 
            back space. 
                ‘\’’ 
             single quote.  
               ‘\f’ 
             Form feed. 
               ‘\’’’
               double quote        
              ‘\?’ 
   question mark.
               ‘\\’  
    backslash.
                   ‘\0’   
                 NULL.


ভেরিয়েবলের আউটপুট অপারেশনঃ-  প্রোগ্রাম ডেটা তথা ভেরিয়েবলের মান প্রদর্শন করাকে আউটপুট অপারেশন বলে। সি প্রোগ্রামে কোন ভেরিয়েবলের মান মনিটরের পর্দায় প্রদর্শনের জন্য printf ( ), putc ( ), puts ( ), putchar ( ) প্রভৃতি লাইব্রেরি ফাংশন ব্যবহার করা হয়।
printf ( ) ফাংশনঃ- printf ( ) একটি লাইব্রেরি ফাংশন, যার হেডার ফাইল হল stdio.h, এর জন্য প্রোগ্রামের শুরুতে #include স্টেটমেন্টের মাধ্যমে মাধ্যমে এই হেডার ফাইল সংযুক্ত করা হয়েছে। printf ( ) ফাংশনের প্রথম বন্ধনীর মধ্যে ডবল কোটেশনের (“ ”) মধ্যে যা লেখা হয় প্রোগ্রামে নিবার্হে তা মনিটর স্কীনে তথা আউটপুট উইন্ডোতে প্রদর্শিত হয়।  


সি প্রোগ্রামিং-ভেরিয়েবল 

সাধারনভাবে,গনিতে variable বলতে আমরা বুঝি চলক অর্থাৎ variable এ বিভিন্ন সময় বিভিন্ন মান বা value রাখে।
এ ধারনাটাকেই আমরা programming এ ব্যবহার করব।
সহজভাবে বলতে গেলে,
ভেরিয়েবল হল কিছু রাখার পাত্র যেমন-আমরা একটি বাটিতে পানি রাখি,ঝুড়িতে ফল রাখি।
এক্ষেত্রে বাটি,ঝুড়ি হচ্ছে ভেরিয়েবল। আবার আমরা পকেটে টাকা রাখি এটাও একটা ভেরিয়েবল।

অর্থাৎ যার মধ্যে আমরা কিছু রাখি সেটাকে বলছি variable, আর যা রাখছি সেটাকে বলছি data.
যেমনঃ
int a=5; এখানে a হছে variable এবং 5 হচ্ছে data.

ভেরিয়েবল হল মেমরির লোকেশনের নাম বা ঠিকানা। প্রোগ্রামে যখন কোন ডেটা নিয়ে কাজ করা হয়, প্রাথমিক ভাবে সেগুলো কমপিউটারে অবস্থান করে। পরবর্তী সময়ে সেগুলো পুনরুদ্ধার বা পুনব্যবহারের জন্য ঐ নাম বা ঠিকানা জানা প্রয়োজন হয়। সুতরাং প্রোগ্রামে ডেটা নিয়ে কাজ করার সময় প্রতিটি ডেটার জন্য একটি ভেরিয়েবল ব্যবহার করাতে হয়।  ভেরিয়েবল ব্যবহার না করে ও প্রোগ্রামে বিভিন্ন ধরনের ডেটা যেমন ক্যারেক্টার, স্ট্রিং, পূর্নসংখ্যা, ভগ্নাংশ তথা দশমিক সংখ্যা সায়েন্টিফিকসংখ্যা তখা এক্সপোনেন্সিয়াল সংখ্যা নিয়ে কাজ করা যায়।


ভেরিয়েবল ঘোষনার নিয়মাবলীঃ
  • একই ফাংশনে একই নামে দুই বা ততোধিক ভেরিয়েবল ঘোষণা করা যায় না।
  • ভেরিয়েবল নামকরনে কেবল আলফাবেটিক ক্যারেক্টার (a .. z)  (A…Z) ডিজিট (০,... ৯) এবং আন্ডারস্কোর(_)ও ডলার চিহৃ ($) ব্যবহার করা যায়। আন্ডারস্কোর ও ডলার চিহৃ ব্যতীত অন্য কোন স্পেশাল ক্যারেক্টার (যেমনঃ !,+,-,% ইত্যাদি ব্যবহার করা যায় না।) যেমনঃ my_car, My$Roll বৈধ, কিন্তু  my@car , My&Roll অবৈধ।
  • ভেরিয়েবল নামের মধ্যে কোন ফাকা স্থান থাকতে পারে না। যেমনঃ Myname, Myhouse বৈধ,  My name, My house অবৈধ।
  • ভেরিয়েবলের নাম ডিজিট বা অংক দিয়ে শুরু হতে পারে না।
  • সি প্রোগ্রামে বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর আলাদ অর্থ বহন করে। সি প্রোগ্রামে ছোট হাতের অক্ষর ব্যবহার করতে হয় । তবে বিশেষ ক্ষেত্রে বড় হাতের অক্ষর ব্যবহার করা হয়।
  • কোন কীওয়ার্ডের নাম ভেরিয়েবল হিসেবে ব্যবহার করা যায় না।
  • ভেরিয়েবল নামকরনে যে কোন সংখ্যাক ক্যারেক্টার ব্যবহার করা যায়। তবে ভেরিয়েবলের নাম ৩১ ক্যারেক্টারের মধ্যে হওয়া ভাল।

আমি অনেকক্ষণ বকবক করলাম,এবার তোমাদের একটা প্রশ্ন করি। আচ্ছা, আমরা তো পকেটকে variable বললাম, কারন সেখানে টাকা রেখেছি। আর যেখানে কিছু রাখা যায়, তাকেই আমরা variable বলি,তাহলে এবার তোমরা বল,পকেটে কি পানি রাখা যাবে ?
-নিশ্চয়ই না। আমাদের দৈনন্দিন কাজে আমরা যেমন ভিন্ন ভিন্ন কাজে ভিন্ন পাত্র ব্যবহার করি। তেমনি programming এর বেলায়ও ঠিক তেমনি ভিন্ন ভিন্ন কাজে ভিন্ন ভিন্ন পাত্র বা variable ব্যবহার করব।
১।আস্ত বা পূর্ণ সংখ্যার জন্য আমরা ব্যবহার করব int. একটু আগেই আমি লিখেছিলাম
int a=5; এখানে 5 একটা পূর্ণ সংখ্যা।
২।ভাঙ্গা সংখ্যা অর্থাৎ দশমিক সংখ্যার জন্য আমরা ব্যবহার করব float.
যেমনঃ
float a=25.36;
float b=0.0562;
৩.একই ভাবে বর্ণ বা char এর জন্য ব্যবহার করব, char
যেমনঃ char a=’A’ ;
char b=’7’ ;
এখানে দেখ A এবং 7 কে কেমন করে চিপে ধরে রেখেছি দুটি single quotation এর মাঝে ।
এই চিপে ধরার অর্থ এটা একটা character, যেখানেই তোমরা এরকম দেখবে,চিপা চিপি দেখে ভুলে যেয়ো না যে এটা একটা character.

Interger(এটি একটি ডাটা টাইপঃ Short form - int) দ্বারা একটি ভেরিয়েবল এর মান শুধুমাত্র পুর্নসংখ্যা নির্দেশ করে। কোন একটি ভেরিয়েবল যদি x এবং এটি যদি পুর্ন সংখ্যা হয় তবে প্রোগ্রাম এর স্টেটমেন্ট(স্টেটমেন্ট কি সেটা আগের পর্বগুলো তে বর্নিত) হবে নিচের মতঃ
1
int x;
কোন ভেরিয়েবল যদি Letter বা অক্ষর হয় তবে স্টেটমেন্ট হবে নিচের মতঃ
1
char (variable);
মানে x যদি কোন Character Type Variable অর্থাৎ অক্ষর বুঝায় তবে স্টেটমেন্ট হবে নিচের মতঃ
1
char x;
আবার x যদি ভগ্নাংশ হয় তবে স্টেটমেন্ট হবে নিচের মতঃ
1
float x;
অথবা
1
double x;

তাহলে উপরের আলোচনা থেকে কি বুঝলে? Statement কেমন হবে?
দেখতো একটি statement এর সাধারন গঠন এই রকম হবে না?
1
Data Types (Variable);
তাহলে একটা প্রোগ্রাম এর গঠন কি রকম হবেঃ (নিচে দেখো)
1
2
3
4
5
6
7
8
9
#include
int main()
{
       data types variables;
       printf(" ");
       return 0;
}

এখন নিচের প্রোগ্রামটি কোডব্লকস এ লিখে রান করাওঃ
1
2
3
4
5
6
7
8
9
10
11
12
13
#include
int main()
{
      int x;
      int y;
      int total;
      x = 5;
      y = 10;
      total = x+y;
      printf("%d\n",total);
      return 0;
}
কি আউটপুট আসছে? ১৫। তাইনা? (নিচের ছবিতে দেখো:)
উপরের প্রোগ্রাম টিতে কি করেছি দেখো। x,y,total নামে তিনটা ভেরিয়েবল নিলাম। সাথে সাথে বলে দিলাম ভেরিয়েবল গুলো কোন ধরনের মানে Interger, float, char না double ?? দেখো, আমি উপরের প্রোগ্রামে int এর মাধ্যমে কম্পিউটারকে বলে দিয়েছি যে x, y, total এই তিনটা ভেরিয়েবলই Integer বা পুর্নসংখ্যা। এর সাথে সাথে কম্পিউটার তার মেমোরিতে এই তিনটি ভেরিয়েবল এর জন্য আলাদা আলাদা তিনটি ফাকা জায়গা তৈরী করবে।

কম্পিউটার এর ভেরিয়েবল মেমোরির হিসাব কিভাবে হয় সেই সম্পর্কে কোন ধারনা আছে? না থাকলে এখন আসি একটা ভেরিয়েবল এর জন্য কম্পিউটারে কত মেমোরি Reserve করে থাকে।
  • integer ভেরিয়েবল এর জন্য মেমোরি প্রয়োজনঃ ২ বাইটস
  • character ভেরিয়েবল এর জন্য মেমোরি প্রয়োজনঃ ১ বাইট
  • float ভেরিয়েবল এর জন্য মেমোরি প্রয়োজনঃ ৪ বাইটস
  • double ভেরিয়েবল এর জন্য মেমোরি প্রয়োজনঃ ৮ বাইটস
যখন ই আমরা কোন ভেরিয়েবল কে Integer হিসেবে নিবো মানে স্টেটমেন্ট হবে int x; (x= ভেরিয়েবল) তখন এই x এর জন্য কম্পিউটারের মেমোরিতে ২ বাইটস এর মেমোরি ফাকা হবে (মানে Reseve বা সংরক্ষিত হবে)।
যখন এই ভেরিয়েবল এর জন্য কোন মান দেবো তখন কম্পিউটার এই ভেরিয়েবল এর জন্য যে মেমোরি ফাকা করেছিল সেখানে বাইনারি আকারে রাখবে।
x এর জন্য ২ বাইটস এর জন্য ফাকা মেমোরি রাখবে।
8 bits = 1 Bytes (For Character Type Variable)
Integer এর Memory 2 Bytes মানে 16 Bits
16 Bits = 2 Bytes (For int Type Variable)
একই ভাবে
32 bits = 4 bytes (For float Type Variable)
64 bits = 8 bytes (For double Type Variable)

যেমনঃ উপরের প্রোগ্রামে প্রথমে কম্পিউটার কে বলেছি যে x একটি Integer Type এর ভেরিয়েবল। এতে কম্পিউটার উপরের চিত্রের মত ১৬ বিট এর ফাকা মেমোরি নিয়েছে x ভেরিয়েবল এর জন্য। তারপর আবার x এর মান 5 নিলাম। কম্পিউটার 0 আর 1 ছাড়া তো কিছুই বুঝেনা, মানে বাইনারি সংখ্যা ছাড়া কিছুই বুঝেনা। 

তাই কম্পিউটার x এর মান 5 কে প্রথমে বাইনারী তে কনভার্ট করবেঃ
Decimal 5 = 101 (In Binary)
এখন এই বাইনারি সংখ্যা টিকে ১৬ বিট এর ফাকা মেমোরিতে রাখবে।
নিচের ছবিতে দেখো, তাহলে ভালো ভাবে বুঝতে পারবে...
আশা করি উপরের ছবিটি দেখে বুঝতে পারছো কম্পিউটার ডেসিমাল সংখ্যাকে বাইনারী তে কনভার্ট করে তার মেমোরিতে কিভাবে সংরক্ষন করে।
প্রথম Variable x এর মান বাইনারীতে কনভার্ট করে উপরের চিত্রের মত করে x এর জন্য ফাকা মেমোরিতে সংরক্ষন করে। যে কয়টা ডিজিটই ফাকা থাকবে x =5 নেবার পরে, কম্পিউটার বাকি ফাকা ঘর গুলো কে 0(শুন্য) ধরে নিবে নিজ থেকে।
তারপর একই নিয়মে Variable y এর জন্য ১৬ বিট এর একটি ফাকা মেমোরি এবং যখন y এর মান 10 দিলাম কম্পিউটার 10 কে ডেসিমাল থেকে বাইনারী তে কনভার্ট করে 16 Bit এর ফাকা মেমোরিতে রাখে।
নিচের ছবিতে দেখতে পারোঃ
তারপর একই নিয়মে Variable total এর জন্য ১৬ বিট এর একটি ফাকা মেমোরি নিবে। এবার দেখো total এর মান আমি কি লিখেছি?
1
total = x + y;
মানে total হবে x এবং y এর যোগফল এর সমান। তাই এখন কম্পিউটার x এবং y এর বাইনারী মান গুলো যোগ করবে। এটা ভেবো না কম্পিউটার 5+10 করবে। কম্পিউটার মান গুলো মেমোরিতে বাইনারী হিসেবে রেখেছে। তাই যোগটাও কিন্তু বাইনারী তে ই করবে। বাইনারী যোগ-বিয়োগ পারো?? না পারলে Google.com এ গিয়ে বাইনারী যোগ বিয়োগ লিখে সার্চ করলে শত শত টিউটোরিয়াল পেয়ে যাবে। পারলে আয়ত্ত করে নাও।
হ্যা, কাজের কথায় আসি।
1
total = x + y;
মানে x এবং y এর বাইনারী মান যোগ করে total ভেরিয়েবল এর জন্য ফাকা মেমোরিতে রাখবে।
এখন এই 1111 কে total এর মান হিসেবে মেমোরিতে রাখবে।
তারপর প্রিন্ট করার সময় এই 1111 কে কম্পিউটার আবার ডেসিমালে কনভার্ট করে 15 প্রিন্ট করবে।
উপরে প্রোগ্রামে নিশ্চয়ই খেয়াল করেছ Printf ফাংশন টা। কেমন?
1
printf("%d\n",total);
এখানে %d মানে Display Integer অর্থাৎ পুর্নসংখ্যা দেখাবে। এখন দেখো তুমি যদি ভেরিয়েবল গুলো ইন্টিজার না নিয়ে float, character বা double নিতে তাহলে কি হত?
Character হলে "%c"
Integer হলে "%d"
float হলে "%f"
double হলে "%lf"
দিয়ে প্রিন্ট করতে হয়। এখানে %lf মানে হল Display double, %f মানে হল Display float আর %c মানে হল Display character
এখন আবার দেখো,
1
printf("%d\n",total);
স্টেটমেন্ট এ %d দিয়ে Integer প্রিন্ট করতে বলেছি, কিন্তু কোন ইন্টিজার??? এর পরেই দেখো ","(কমা) দিয়ে total লেখা আছে। মানে এখানে %d দিয়ে total এর মান প্রিন্ট করতে বলেছি। আশা করি বুঝতে পেরেছো।
এখন তুমি total এর জায়গায় x অথবা y বসিয়ে প্রোগ্রামটিকে রান করে দেখো। রান করে দেখলে ই বুঝতে পারবে এই ফাংশন এর কাজ টা।
মানে কোড টিকে মডিফাই করে নিচের মত কোড করে লিখঃ
1
2
3
4
5
6
7
8
9
10
11
12
13
#include
int main()
{
      int x;
      int y;
      int total;
      x = 5;
      y = 10;
      total = a+b;
      printf("%d\n",x);
      return 0;
}
আবার
1
2
3
4
5
6
7
8
9
10
11
12
13
#include
int main()
{
      int x;
      int y;
      int total;
      x = 5;
      y = 10;
      total = a+b;
      printf("%d\n",y);
      return 0;
}
আশা করি %d এর ব্যবহার বুঝতে পেরেছো।
আবার বলিঃ
%d means Display Integer
1
2
3
4
5
6
7
8
9
#include
int main()
{
      int a;
      a = 10;
      printf("%d\n", a);
      return 0;
}
আউটপুট এ %d, a ভেরিয়েবল এর মান দিয়ে রিপ্লেস হয়ে যাবে......

No comments:

Post a Comment