৮ বিট = ১ বাইট
১০২৪ বাইট = ১ কিলোবাইট
১০২৪ কিলোবাইট = ১ মেগাবাইট
১০২৪ মেগাবাইট = ১ গিগাবাইট
১০২৪ গিগাবাইট = ১ টেরাবাইট
আমরা যখন বলি, ১০০ গিগা হার্ডডিস্ক তখন এই কথার অর্থ হচ্ছে, 0 এবং 1, এদের সমন্বয়ে গঠিত ১০০ গিগা ডাটা রাখতে যে পরিমান জায়গা লাগবে ঠিক ঐ পরিমান জায়গা ঐ হার্ডডিস্কে আছে।
মেমোরী এড্রেসঃ
মেমোরী সম্পর্কে তো আমরা সবাই জানি। কম্পিউটারের র্যামকেই মেমোরী বলা হয়। এখন প্রশ্ন হল মেমোরী এড্রেস কি ?
প্রতিটি মেমোরীর সাইজই নির্দিষ্ট। ৫১২ মেগাবাইট বা ১ গিগা ইত্যাদি। এই মেমোরীর ক্ষুদ্রতম একক হচ্ছে বাইট। আর এই ক্ষুদ্রতম একককে আপনি মেমোরীর একটি ক্ষুদ্র প্রকোষ্ঠ বা সেল হিসেবে বিবেচনা করতে পারেন। সুতরাং বলা যায়, একটি মেমোরী অসংখ্য সেলের সমন্বয়ে গঠিত। এরকম প্রতিটি সেলের ডাটা ধারণ ক্ষমতাও নির্দিষ্ট, ৮ বিট করে (যেহেতু, ১ বাইট = ৮ বিট)। প্রতিটি সেলই তো তাহলে একই রকম। তাহলে একটার সাথে আরেকটার পার্থক্য কোথায়। হ্যাঁ বন্ধুরা, একরকম হলেও এদের মধ্যে একটি পার্থক্য আছে যা দিয়ে একেকটি সেল একটি আরেকটি থেকে আলাদা। আর তা হল এদের এড্রেস। এড্রেস কিছুই না, শুধুমাত্র একটি নাম্বার। একেকটি নাম্বারই একেকটি সেলের এড্রেস এবং কোনো সেলের এড্রেসই একটি আরেকটির সাথে মিলবে না। প্রতিটি সেলের এই এড্রেসকেই বলা হয় মেমোরী এড্রেস।
প্রোগ্রামিং করার সময় ইন্সট্রাকশনের মাধ্যমে কিছু ডাটা মেমোরীতে সেভ রাখার কমান্ড দেয়া হবে, যেন প্রোগ্রাম চলাকালে মেমোরীতে ঐ ডাটা লোড হয় এবং ব্যবহারকারীর প্রয়োজনমত প্রোগ্রাম ঐ ডাটা র্যাম বা মেমোরী থেকে রিড করে। নিচের চিত্র থেকে ব্যাপারটি বুঝতে সুবিধা হবে।
চিত্রে দেখতে পাচ্ছেন মেমোরী লোকেশন ২ এর পর থেকে মেমোরী লোকেশন ১৪ এর পূর্ব পর্যন্ত এড্রেসবিশিষ্ট সেলগুলোতে ডাটা ইনপুট বা রাইট হচ্ছে অথবা সেখান থেকে ডাটা রিড করার মাধ্যমে ডাটা আউটপুট হচ্ছে।অবশ্য প্রোগ্রাম থেকে এক্সিট করার পরে বা প্রোগ্রাম বন্ধ করার পরে প্রোগ্রামে ব্যবহৃত ডাটা মেমোরী থেকে মুছে যায়।
প্রোগ্রাম শুরু করার আগে আমাদের আরো কিছু টার্ম জানা দরকার।
ফাংশনঃ
আমরা যেমন কোনো নির্দিষ্ট কোনো কাজ করি কোনো নির্দিষ্ট অংগ প্রত্যঙ্গের মাধ্যমে ঠিক তেমনি প্রোগ্রামে একেকটি ফাংশনের মাধ্যমে একেকটি কাজ করা হয়। সহজ কথায় ফাংশন হল একেকটি কমান্ড। যেমন, printf(), scanf(), clrscr() ইত্যাদি হল সি তে ব্যবহৃত কিছু কমান্ড বা ফাংশন। printf() এর কাজ কোনো লেখা স্ক্রীনে প্রদর্শন করা, scanf() এর কাজ ইউজারের কাছ থেকে কোনো ইনপুট নেয়া এবং clrscr() এর কাজ প্রোগ্রামে আগে থেকে কোনো ডাটা আউটপুট হিসেবে প্রদর্শিত হলে তা মুছা।
লাইব্রেরী ফাংশনঃ
যে সকল ফাংশন কম্পাইলারে আগে থেকে বিল্ট ইন অবস্থায় থাকে তাদের লাইব্রেরী ফাংশন বলে। উপরের ফাংশন গুলো আগে থেকে টার্বো সি কম্পাইলারে তৈরি করা আছে, তাই এগুলো লাইব্রেরী ফাংশন।
হেডার ফাইলঃ
ফাংশন সাধারণত আলাদা কোনো জিনিস নয়, এগুলোও কোড লিখেই তৈরি করা হয় এবং ডিফাইন করা হয়। লাইব্রেরী ফাংশন গুলো ডিফাইন করে দেয়া হয় সাধারণত একেকটি ফাইলে। এসকল ফাইলকে হেডার ফাইল বলে। যেমন,printf() ফাংশনটির প্রোটোটাইপ stadio.h নামের হেডার ফাইলে ডিফাইন করা আছে। তাই printf() ফাংশনের হেডার ফাইল stdio.h। সি তে কোনো প্রোগ্রামে যখন কোনো ফাংশন ব্যবহার করা হয় তখন তার হেডার ফাইলের নামেও শুরুতেই উল্লেখ করে দিতে হয়।
আসুন তাহলে একটি প্রোগ্রাম দেখি।
TC.exe ওপেন করে file->new কমান্ড দিয়ে নতুন স্পেস পাবেন, তাতে নিচের কোডটি লিখুন।
#include<stdio.h>
#include<conio.h>
main()
{
printf(“hello everybody.”);
getch();
}
নিচের মত পাবেন।

গতপর্বের শেষে একটি কোড দিয়েছিলাম, মনে আছে কি ? মনে না থাকলেও সমস্যা নেই। চলুন কোডটা আবার দেখি।
১) #include<stdio.h>
২) #include<conio.h>
৩) main()
৪) {
৫) printf(“hello everybody.”);
৬) getch();
৭) }
আমি আগেই বলেছি ফাংশন এর কথা। প্রতিটা ফাংশন একেকটা কাজ করে। তেমনি একটি ফাংশন main() ফাংশন। এই ফাংশনের কাজ হল, এই ফাংশনের মধ্যে যা কিছু লেখা হবে সি প্রোগ্রাম তা নিয়েই কাজ করবে। অর্থাৎ প্রোগ্রামের যাবতীয় প্রসেসিং হবে main() ফাংশনের ভেতর। এই ফাংশনের পরে “{“ দিয়ে ফাংশনের ভেতরের অংশ শুরু করা হয়েছে। এবং এর ভেতরে প্রথমেই লেখা হয়েছে printf(“hello everybody.”);। উল্লেখ্য, printf() হল আরেকটি ফাংশন যার কাজ হল এর ভেতরে লেখা কোনো শব্দ বা শব্দগুচ্ছকে মনিটরের স্ক্রীনে প্রদর্শন করা। এই ফাংশনের “()” অংশের ভেতরে “” চিহ্ন দিয়ে লেখা হয়েছে “hello everybody.” তাই এই লেখাটি স্ক্রীনে দেখানো হবে। printf() ফাংশনের মাধ্যমে এই যে একটি লেখাকে প্রোগ্রামে দেখানোর কমান্ড দেয়া হল, একে বলা হয় ইন্সট্রাকশান দেয়া। আর এই পুরো লাইনটা হল একটি স্টেটমেন্ট। প্রতিটি স্ট্যাটমেন্টের পরে “;” সেমিকোলন দিতে হয়।
এরপরের লাইনেই লেখা হয়েছে, getch();। উল্লেখ্য, এটিও একটি ফাংশন যার কাজ হল দর্শকের কাছ থেকে কোনো ক্যারেক্টার নেয়া। অর্থাৎ, কেউ যখন কীবোর্ড থেকে কোনো ক্যারেক্টার প্রেস করবে তখন এই ফাংশনের মাধ্যমে ঐ ক্যারেক্টারটি ইনপুট হিসেবে প্রোগ্রাম নিয়ে নেবে। আর যতক্ষন পর্যন্ত কীবোর্ডের কোনো কী প্রেস না করে ক্যারেক্টার না দেয়া হবে তখন এই ফাংশন কোনো ক্যারেক্টারকে ইনপুট হিসেবে পাওয়ার জন্য অপেক্ষা করতে থাকবে।
এরপরেই আছে “}” যার মাধ্যমে প্রোগ্রামের শেষ বুঝানো হয়। আপনি যখন কোনো ক্যারেক্টারে প্রেস করবেন তখন getch() ফাংশন ঐ ক্যারেক্টার ইনপুট হিসেবে নেবে এবং ঐ লাইনের কাজ শেষ হয়ে যাবে। এরপরের লাইনে শুধুমাত্র “}” আছে যার ফলে প্রোগ্রামটি শেষ হয়ে যাবে।
এখানে দুটি ফাংশন ব্যবহার করা হয়েছে। printf() এবং getch() ফাংশন। এদের প্রোটোটাইপ যথাক্রমে stdio.h এবং conio.h ফাইলে ডিক্লেয়ার করা আছে। তাই এই সকল ফাংশনের হেডার ফাইল যথাক্রমে stdio.h এবং conio.h। যেহেতু উক্ত ফাংশনগুলো প্রোগ্রামে ব্যবহার করা হয়েছে, তাই এদের হেডার ফাইলের নাম main() ফাংশনের আগে ডিক্লেয়ার করতে হবে নিচের মত।
#include<stdio.h>
#include<conio.h>
এভাবে লেখার মধ্যে কোনো স্পেস থাকতে পারবে না।
রান করার পরে নিচের মত পাবেন।

১) #include<stdio.h>
২) #include<conio.h>
৩) main()
৪) {
৫) printf(“hello everybody.”);
৬) getch();
৭) }
এখান থেকে আমরা সি প্রোগ্রামিং এর একটি সাধারণ কাঠামো দেখতে পাই,
Header file ডিক্লেয়ারেশন(১ ও ২ নং লাইনে এটি করা হয়েছে)
কন্সট্যান্ট ডিক্লেয়ারেশন(এটি উপরের কোডে দেখানো হয়নি। পরের উদাহরনে দেখানো হবে)
গ্লোবাল ভেরিয়েবল ডিক্লেয়ারেশন( এটিও পরে দেখান হবে)
মেইন ফাংশন( ৩নং লাইন)
{
মেইন ফাংশনের আভ্যন্তরীণ কোড যা প্রোগ্রামের মূল
}
এটিই মূলত সি প্রোগ্রামের কাঠামো। এখানে কন্সট্যান্ট সমপর্কে কিছু বলে নেয়া ভালো। কন্সট্যান্ট হল ধ্রুবক অর্থাৎ যার মান অপরিবর্তনীয়। আপনি মেইন ফাংশনের ভিতরেও এর মান চেঞ্জ করতে পারবেন না।
কন্সট্যান্ট নিচের মত প্রোগ্রামে ডিক্লেয়ার এবং ব্যবহার করা হয়।
১) #include<stdio.h>
২) #include<conio.h>
৩) #define pi 3.1416
৪) void main()
৫) {clrscr();
৬) printf(“%f”,pi);
৭) getch();
}
১ ও ২ নং লাইনে হেডার ফাইল ডিক্লেয়ার করা হয়েছে।
৩ নং লাইনে pi নামে একটি কন্সট্যান্ট ডিক্লেয়ার করা হয়েছে #define pi 3.1416 লাইনের মাধ্যমে।
৫ নং লাইনে এই মান ব্যবহার করা হয়েছে।
এবার আসুন ভেরিয়েবল সম্পর্কে জানি।
ভেরিয়েবল
একে আপনি কোনো পাত্রের সাথে তুলনা করতে পারেন। পাত্রে যেমন কোনো কিছু জমা রাখা যায় এবং এক জায়গা থেকে অন্য জায়গায় নেয়া যায় তেমনি ভেরিয়েবলেও যেকোনো ডাটা স্টোর করে রাখা যায় এবং প্রয়োজন অনুযায়ী তা ব্যবহার করা যায়।
ভেরিয়েবল ব্যবহার করার আগে তা ডিক্লেয়ার করে নিতে হয়।
ভেরিয়েবল দুই প্রকার। গ্লোবাল ভেরিয়েবল এবং লোকাল ভেরিয়েবল।
যে সকল ভেরিয়েবল ফাংশনের মধ্যে ডিক্লেয়ার করা হয় তারা লোকাল ভেরিয়েবল। যে ফাংশনে এই ভেরিয়েবলের মান ডিক্লেয়ার করা সেই ফাংশনের কাজ শেষে ফাংশন থেকে বের হয়ে গেলে এ সকল ভেরিয়েবলের মান আর থাকে না, মুছে যায়।
অন্যদিকে গ্লোবাল ভেরিয়েবলের মান ফাংশনের বাইরে ডিক্লেয়ার করা হয়। এবং যে কোনো ফাংশনে এর মান ব্যবহার করা যায়।
#include<stdio.h>
#include<conio.h>
#define pi 3.1416
int c=1;
void main()
{clrscr();
int a=7;
printf(“%d\n”,c);
printf(“%f”,pi);
print(“%d”,a)
getch();
}
উপরের ফাংশনে int c=1; লাইনের মাধ্যমে c নামে একটি গ্লোবাল ভেরিয়েবল ডিক্লেয়ার করা হয়েছে যা রয়েছে main() ফাংশনের বাইরে।
int a=7; এর মাধ্যমে main() ফাংশনের ভিতরে a নামে লোকাল ভেরিয়েবল ডিক্লেয়ার করা হয়েছে।
| 


