বাইনারি থেকে দশমিকে রূপান্তর করতে প্রথমে সহজ নিয়মটি দেখে নিতে হবে এখানে
বাইনারি থেকে দশমিকে রূপান্তর
(১০০১১১০১০০১১.১০১১১)২ = (?)১০
S.S.C & H.S.C ICT | নবম ও দশম এবং একাদশ ও দ্বাদশ শ্রেণীর তথ্য ও যোগাযোগ প্রযুক্তি সমাধান ।
বাইনারি থেকে দশমিকে রূপান্তর করতে প্রথমে সহজ নিয়মটি দেখে নিতে হবে এখানে
(১০০১১১০১০০১১.১০১১১)২ = (?)১০
যে কোন সংখ্যা পদ্ধতি থেকে দশমিক সংখ্যা পদ্ধতিতে রুপান্তরের সময় একটা বিষয় অবশই জানতে হবে আর তা হল, উভয় সংখ্যা পদ্ধতির ভিত্তি বা বেজ।
তবে দশমিকে রুপান্তরের জন্য দশমিক পদ্ধতির বেজ প্রয়োজন নেই। যে সংখ্যা পদ্ধতি থেকে দশমিকে পরিবর্তন হবে সেই পদ্ধতির বেজ জানতেই হবে। না হলে রুপান্তর সম্ভব নয়। যেমন – বাইনারি থেকে দশমিকে পরিবর্তন করতে হলে বাইনারির বেজ জানতে হবে।
এর পর জানতে হবে কীভাবে স্থানীয় মান নির্ণয় করতে হয়।
আর স্থানীয় মান নির্ণয় করতে হলে কিন্তু অবশ্যই বেজ জানতে হবে। অর্থাৎ যে সংখ্যা পদ্ধতির স্থানীয় মান বের করতে হবে তার বেজ জানতে হবে।
স্থানীয় মান বের করার নিয়ম নিম্নরুপঃ
ধরি একটা সংখ্যা ১২০ এবং এটা একটি দশমিক পূর্ণ সংখ্যা। এই সংখ্যার প্রতিটি অংকের স্থানীয় মান বের করতে হলে। দুইটি বিষয় জানতে হবে।
সংখ্যাটির বেজ কত? উপররের সংখ্যার বেজ ১০ আমরা জানি।
সংখ্যাটিতে কয়টি অংক বা ডিজিট আছে। উপররের সংখ্যায় ৩ টি অংক বা ডিজিট আছে আমরা জানি।
উপরের সংখ্যার তিনটি অংকের প্রত্যেকের স্থানীয় মান কিন্তু এক নয়। যদি সংখ্যাটি পূর্ণ সংখ্যা হয় তবে সবচেয়ে ডানের অংকের স্থানীয় মান সবচেয়ে কম এবং বামের দিকে এর মান বাড়তে থাকে। একে যদি ঘাতের মাধ্যমে প্রকাশ করা হয় তবে এর ঘাত হবে ০ এবং যত বামে আসবে ঘাতের মান এক করে বারতে থাকবে। অর্থাৎ ঘাত n-১ পর্যন্ত বাড়বে।
এখানে n হল অংক বা ডিজিট সংখ্যা। যে কোন সংখ্যা পদ্ধতির কোন সংখ্যার কোন অংকের স্থানীয় মান হল (বেজ) n-1 ।
এখানে, (১২০)১০ হল পূর্ণসংখ্যা তাহলে স্থানীয় মান অনুসারে লিখলে নিম্নরূপ হবে -
১x১০২ + ২x১০১ + ০x১০০
প্রমাণ করে দেখি-
১x১০২ + ২x১০১ + ০x১০০
= ১x১০০ + ২x১০ +০x১ [ যে কোন অংক বা সংখ্যার ঘাত যদি ০ হয় তাহলে তার মান ১ ]
= ১০০ + ২০ + ০
= ১২০
বাইনারি থেকে দশমিক (১০১)২ = (?)১০ [ নিয়মটি অক্টাল ও হেক্সডেসিমেল এর জন্যও প্রযোজ্য ]
১x২২ + ০x২১ + ১x২০
=৪ + ০ + ১
= ৫
(১০১)২ = (৫)১০
এই নিয়মে যে কোন সংখ্যা পদ্ধতি থেকে দশমিকে রুপান্তর করা যায়।
যদি সংখ্যাটি ভগ্নাংশ হয় সেক্ষেত্রে ঘাতের মান ঋণাত্মক হবে। সর্ব বামের অংকের বেজের ঘাত হবে -১ এবং ডানদিকে প্রতি ডিজিটের জন্য ঋণাত্মক মান -১ করে বাড়বে। অর্থাৎ ঘাত -n পর্যন্ত বাড়বে।
এখানে n হল অংক বা ডিজিট সংখ্যা। যে কোন সংখ্যা পদ্ধতির কোন ভগ্নাংশ সংখ্যার কোন অংকের স্থানীয় মান হল (বেজ) -n ।
এবার (.৭৫)১০ কে স্থানীয় মান অনুসারে লিখি।
এখানে (.৭৫)১০ হল ভগ্নাংশ তাহলে স্থানীয় মান অনুশারে লিখলে নিম্নরূপ হবে -
৭x১০-১ + ৫x১০-২
প্রমাণ করে দেখি-
৭x১০-১ + ৫x১০-২
= ৭x১/১০ + ৫x১/১০০
= ৭/১০ + ৫/১০০
= (৭০ + ৫)/১০০
=৭৫/১০০
=.৭৫
বাইনারি থেকে দশমিক (.১০১) ২ = (?)১০ [ নিয়মটি অক্টাল ও হেক্সডেসিমেল এর জন্যও প্রযোজ্য ]
=১x২-১ + ০x২-২ + ১x২-৩
= ১x(১/২) + ০+ ১x(১/৮)
= .৫ + ০ + .১২৫
=.৬২৫
(.১০১)২ = (.৬২৫ )১০
নিয়ম শেখা হয়ে গেলো এবার বাইনারি, অক্টাল এবং হেক্সাডেসিমেল থেকে দশমিকে পরিবর্তন করব।
প্রি-প্রসেসর কমান্ড | Preprocessor Commands
ফাংশন | Functions
ভেরিয়েবল | Variables
স্টেটমেনট এবং এক্সপ্রেসন | Statements & Expression
কমেন্টস | Comments
উপরে বর্ণিত ৫ টি অংশ নিয়েই মূলত সি প্রোগ্রামের মৌলিক কাঠামো গঠিত।
এই কাঠামোর সর্ব উপরে থাকে প্রি-প্রসেসর কমান্ড বা Preprocessor Commands।
প্রি-প্রসেসর কমান্ডে অন্তর্ভুক্ত থাকে
ডকুমেন্টেসন(একে ডকুমেন্টেসন সেকশন বলে)এবং প্রি-প্রসেসর স্টেটমেনট(এটা লিংক সেকশন)।
এর ঠিক নিচে থাকে গ্লোবাল ডিক্লিয়ারেশন সেকশন, এই সেকশনে গ্লোবাল ভেরিয়েবল, ফাংশন প্রোটোটাইপ ডিফাইন করতে হয়।
এর নিচেই থাকে মেইন ফাংশন main(){} মেইন ফাংশন ছাড়া সি প্রোগ্রাম চালু করা যায় না। কারণ সি প্রোগ্রাম সম্পাদন শুরুই করে মেইন ফাংশন থেকে।
তাই main() ফাংশন ছাড়া প্রোগ্রামের কোন .exe ফাইল তৈরি হয় না।
আর একটি কথা সব সময় মনে রাখতে হবে যে প্রোগ্রাম কিন্তু লাইন বাই লাইন সম্পাদন। এজন্য প্রোগ্রামের কন্ট্রোল main() ফাংশনের ভিতর থেকেই হয়। অর্থাৎ ফাংশন কল ছাড়া main()থেকে বের হবার কোন উপায় নেই।
main() ফাংশনের মধ্যে সি প্রোগ্রামের মৌলিক ৫টি অংশের মধ্যে তিনটি বিদ্যমান থাকে। তা হল-
অবশ্য ফাংশনের মধ্যে যে ভেরিয়েবল থাকে সে গুলো হল লোকাল ভেরিয়েবল, তা শুধু ঐ ফাংশনের মধ্যেই সীমাবদ্ধ। নিচে ভেরিয়েবল সম্পর্কে আলোচনা করব। স্টেটমেনট এবং এক্সপ্রেসন শুধু যে main() ফাংশনের মধ্যেই ব্যবহৃত হয় তা নয়, অন্য যে কোন ফাংশন যা ইউজার ডিফাইন করে সেখানেও স্টেটমেনট এবং এক্সপ্রেসন ব্যবহৃত হয়। কিন্তু ফাংশনের বাইরে স্টেটমেনট এবং এক্সপ্রেসন কখনই ব্যবহৃত হয় না।
আর কমেন্টস প্রোগ্রামের যে কোন জায়গাতে লেখা যায়। কারণ কম্পাইলার কমেন্টস কে সব সময় সম্পাদন থেকে বাদ দেয়। সি প্রোগ্রামে কমেন্ট লেখার কারণ হল,যে এই প্রোগ্রাম কি সম্পর্কে লেখা হচ্ছে? প্রোগ্রামে কি সমস্যার সমাধান করা হচ্ছে? কোন লাইনে কি করা হচ্ছে ? কমেন্টস দেখেই অন্যের অনেক বড় প্রোগ্রাম কে সহজে বুঝা যায়।
এবং শেষে থাকে ইউজার ডিফাইন ফাংশন। অর্থাৎ প্রোগ্রামার নিজে যে ফাংশন তৈরি করে সেটাই ইউজার ডিফাইন ফাংশন। এই ফাংশনকে অবশ্যই main() থেকে কল করতে হবে। তা না হলে এই ফাংশনের কোন সম্পাদিত মান গ্রহণ হবে না।মৌলিক কাঠামো আলোচনা করতে গিয়ে অনেক নতুন বিষয় চলে আসছে যা পরবর্তীতে বিস্তারিত আলোকপাত করব।
এখন মৌলিক কাঠামো কে এক সাথে লিখলে আর একটু বুঝতে সহজ হবে।
নিচের সি প্রোগ্রামটা দেখলে আরো সহজ হয়ে যাবে।
/* documentation section
author: mahmudul islam
code: calculate are of a circle
*/
/* start preprocessor statement */
#include
/* end preprocessor statement */
/* start global declaration */
#define pi 3.1416
float pai = 3.1416;
float circle(int r);// user define function prototype
/* end global declaration */
#define pi 3.1416
int main() // main function
{
int redius1=5, redius2=5; // local variable redius1, redius2
float result1, result2; // local variable result1, result2
result1=pi*redius1*redius1; // expression
printf("result1= %f\n",result1);//statement
result2 = circle(redius2);//statement
printf("result2= %f\n",result2);//statement
return 0;
}
float circle(int r){ // user define function
return pai*r*r; // return expression value
}
একটা ভেরিয়েবল কি ধরনের ডাটা রাখতে পারবে, তা ডেটা টাইপ নির্দিষ্ট করে দেয়। প্রোগ্রামিং এ আমরা মূলত ডাটা নিয়েই কাজ করে থাকি, এজন্য ডেটা সম্পর্কে স্পষ্ট ধারণা না থাকলে দক্ষ প্রোগ্রামার হওয়া সম্ভব নয়। একাটা প্রোগ্রাম করার সময় প্রথমেই চিন্তা করতে হবে কি কি টাইপ এর ডেটা প্রোগ্রামে ব্যবহার হতে যাচ্ছে।
ইচ্ছে মত যে কোন টাইপের ডেটা ব্যবহার করা যায় না। প্রতিটি প্রোগ্রামিং ভাষা এই ডেটা টাইপ নির্দিষ্ট করে দিয়েছে। তাই অনুরুপ ভাবে সি প্রোগ্রামিং ভাষারও নির্দিষ্ট কিছু ডেটা টাইপ আছে যেমনঃ-
| Types | Data Types |
|---|---|
| Basic Data Type | int, char, float, double |
| Derived Data Type | array, pointer, structure, union |
| Enumeration Data Type | enum |
| Void Data Type | void |
এখানে মূলত মৌলিক ডেটা টাইপ (Basic Data Type) ও ভইড ডেটা টাইপ (Void Data Type) নিয়ে আলোচনা করব।
Integer বা পূর্ণ সংখ্যাঃ এর সংক্ষিপ্ত রূপ হল int যা সি প্রোগ্রামিং এ key word হিসেবে ব্যবহৃত হয়। প্রোগ্রাম লেখার সময় অবশ্যই int ব্যবহার করতে হবে, বড় হাতের অক্ষর লেখা চলবে না। এই ডেটা টাইপ এর মানের রেঞ্জ হল −32,768 to 32,767 এবং memory size হল ২ বাইট।
Character বা অক্ষর: এর সংক্ষিপ্ত রূপ হল char যা সি প্রোগ্রামিং এ key word হিসেবে ব্যবহৃত হয়। প্রোগ্রাম লেখার সময় অবশ্যই char ব্যবহার করতে হবে, বড় হাতের অক্ষর লেখা চলবে না। এই ডেটা টাইপ এর মানের রেঞ্জ হল −128 to 127 এবং memory size হল ১ বাইট।
Float : এর সংক্ষিপ্ত রূপ হল float যা সি প্রোগ্রামিং এ key word হিসেবে ব্যবহৃত হয়। প্রোগ্রাম লেখার সময় অবশ্যই float ব্যবহার করতে হবে, বড় হাতের অক্ষর লেখা চলবে না। এই ডেটা টাইপ এর memory size হল ৪ বাইট। একে Real floating-point type বা সাধারণত single-precision floating-point type বলা হয়।
Double: এর সংক্ষিপ্ত রূপ হল double যা সি প্রোগ্রামিং এ key word হিসেবে ব্যবহৃত হয়। প্রোগ্রাম লেখার সময় অবশ্যই double ব্যবহার করতে হবে, বড় হাতের অক্ষর লেখা চলবে না। এই ডেটা টাইপ এর memory size হল ৮ বাইট। একে Real floating-point type বা সাধারণত double-precision floating-point type বলা হয়।
এর সংক্ষিপ্ত রূপ হল void যা সি প্রোগ্রামিং এ key word হিসেবে ব্যবহৃত হয়। প্রোগ্রাম লেখার সময় অবশ্যই void ব্যবহার করতে হবে, বড় হাতের অক্ষর লেখা চলবে না। void টাইপ শুধু মাত্র ফাংশনের আগে এবং ফাংশনের আর্গুমেন্ট হিসেবে ব্যবহৃত হয়, অর্থাৎ যে ফাংশন কোন মান রিটার্ন করে না তার টাইপ হিসেবে এবং যে ফাংশন এর কোন আর্গুমেন্ট নাই তার মাঝে ব্যবহৃত হয়।
এখানে শুধু মৌলিক কিছু আলোচনা কর হল এই বিষয় গুলো জানার পরে শিক্ষার্থীদের চাহিদা অনুযায়ী বিস্তারিত জানতে পারবে। এর জন্য অনেক ক্ষেত্র আছে। আমি শুধু এখানে খুব সহজে কি ভাবে সি প্রোগ্রামিং শুরু করা যায় ততটুকু আলোচনা করছি।
মেমোরি লোকেশনের নামই হল ভেরিয়েবল। এতে ডেটা বা মান store বা জমা করে রাখা যায়। প্রোগ্রামিং এ সরাসরি কোন মান নিয়ে কাজ করা যায় না। এ ছাড়াও অনেক সময় মান গুলোকে জমা রাখতে হয়। এখন প্রশ্ন হল মান জমা রাখতে হবে কিন্তু কীভাবে? কোথায় জমা রাখবে?
প্রত্যাহিক জিবনে আমরা যেমন বই এর সেলফে বই রাখি, প্রতিটি বই এর কিন্তু আলাদা একটা লোকেশন থাকে তার জন্য চাইলেই যে কোন বই খুঁজে বের করা কঠিন কিছু নয়। ঠিক তেমনি আমরা মেমরিতে যে সকল ডেটা বা মান জমা রাখি তারও একটা লোকেশন থাকে। কিন্তু এই লোকেশন সরাসরি পাওয়া যায় না। একটা ভেরিয়েবল ডিক্লেয়ার করলে ঐ ভেরিয়াবলের জন্য মেমরিতে একটা লোকেশন তৈরি হয়। এরপর ঐ ভেরিয়েবলের সাহায্যে মেমরির ঐ লোকেশনে ডেটা রাখা যায়। আবার প্রয়োজনে ডেটা উত্তোলন করা যায়।
ভেরিয়েবল অনেকটা কুলির মত কাজ করে। কুলির কাজ যেমন বোঝা গুলোকে এক স্থান থেকে অন্য স্থানে নিয়ে যাওয়া বা নিয়ে আসা, তেমন ভেরিয়েবল এর কাজও ডেটা নিয়ে রাখা এবং নিয়ে আসা।
এখন মূল বিষয়ে আসি, সি প্রোগ্রামে ভেরিয়েবল কিভাবে ডিক্লেয়ার করা হয়? নিয়ম কি? কি প্রকারের ভেরিয়েবল আছে সে সম্পর্কে এখন একটু আলোচনা করা যাক।
প্রথমে ভেরিয়েবল কিভাবে ডিক্লেয়ার করা হয় তা আলোচনা করি। সি প্রোগ্রামিং-এ ভেরিয়েবল ডিক্লেয়ার করা সব চেয়ে সহজ একটা কাজ। তবে প্রথমে জানতে হবে প্রোগ্রামে কোন টাইপ এর ডেটা প্রয়োজন।
ভেরিয়েবল ডিক্লেয়ার এর সিনট্যাক্স হল-
ডেটা টাইপ ভেরিয়েবলর নাম;
data_type variable_name;
int a;
float b;
char c;
double d;
উপরের int, float, char, double হলো ডেটা টাইপ এবং a, b, c, d হল ভেরিয়েবলের নাম।
তবে ভেরিয়েবল যে কোন নামে ডিক্লেয়ার করা যায় না। এর কিছু নিয়ম আছে। নিম্নে তা উল্লেখ করা হল –
ভেরিয়েবলের নাম alphabets, digits, and underscore হতে পারবে। যেমন- int a; int a_; int num1; ইত্যাদি।
ভেরিয়েবলের নাম শুধু মাত্র alphabet and underscore দ্বারা শুরু হতে পারবে কিন্তু ডিজিট দ্বারা শুরু হতে পারবে না। যেমন – int a,_b; কিন্তু int 9a; ব্যবহার করা যায় না। কারণ ৯ দ্বারা শুরু হয়েছে।
ভেরিয়েবলের নামে কোন whitespace গ্রহণ যোগ্য নয়। যেমন- first name এখানে whitespac ব্যবহার করা হয়েছে । যা ভুল। ঠিক টা হল firat_name বা firstname ;
ভেরিয়েবলের নাম হিসেবে কোন reserved word or keyword ব্যবহার করা যাবে না। যেমন- int, float ইত্যাদি। সি প্রোগ্রামিং ল্যাঙ্গুয়েজে এরকম ৩২ টি keyword আছে।
ইনডেক্সিং ডাটাবেস ম্যানেজমেন্ট সিস্টেমটি সম্পাদন করতে টেবিলে একটি অনন্য মান সহ একটি প্রাথমিক কী প্রয়োজন হয়।
ইনডেক্স বা সূচকযুক্ত ডেটাতে অন্য কোনও ইনডেক্স বা সূচি সম্পাদন করা যায়না।
সূচী-সংগঠিত টেবিল বিভাজন করার অনুমতি নেই।
এসকিউএল সূচীকরণ INSERT, DELETE, এবং UPDATE ক্যোয়ারিতে কর্মক্ষমতা হ্রাস করে।
অধিক মেমরির প্রয়োজন হয়।
ডেটা এন্ট্রিতে বেশি সময় প্রয়োজন হয়।
সহজে ডেটা খোঁজাঃ ইনডেক্স করার ফলে সহজে ডেটা খুঁজে বের করা যায়।
স্বয়ংক্রিয়ভাবে আপডেট হওয়াঃ ইনডেক্স করার পর টেবিলে নতুন রেকর্ড প্রবেশ করালেও ইনডেক্স ফাইলগুলো স্বয়ংক্রিয়ভাবে আপডেট হয়ে যায়।
কর্মক্ষমতা উন্নত করেঃ সকল ফাইল খোঁজার প্রয়োজন হয় না।
দ্রুত অনুসন্ধান করাঃ ব্যবহারকারীদের কাছে ডেটা দ্রুত অনুসন্ধান এবং পুনরুদ্ধারের চেষ্টা করে ।
মূল ফাইল অপরিবর্তিত রাখাঃ ইনডেক্স ফাইল মূল ডেটাবেজ ফাইলের কোন পরিবর্তন না করে বিভিন্নভাবে সাজাতে পারে।
বিভিন্ন অপারেশনের দক্ষতা বৃদ্ধিঃ ডেটা টেবিলের রেকর্ডসমূহের উপর বিভিন্ন অপারেশন যেমন- searching, sorting এবং queries ইত্যাদি কাজ দ্রুত সম্পন্ন করার জন্য ইনডেক্স করা হয়।
ইন্ডেক্সিং বা সূচীকরণ টেবিলস্পেস হ্রাস করতে সহায়তা করে।
ইনডেক্সিং হল এমন একটি ডাটা স্ট্রাকচার প্রযুক্তি যা কিছু বৈশিষ্ট্যের উপর ভিত্তি করে ডাটাবেস ফাইলগুলি থেকে দক্ষতার সাথে ইনডেক্স সম্পন্ন রেকর্ডগুলি পুনরুদ্ধার করতে পারে । ইনডেক্স হল একটি ছোট টেবিল যা কেবল দুটি কলাম থাকে । ইনডেক্স টেবিলের প্রথম কলাম প্রাইমারি কি অথবা ক্যান্ডিডেট কি দ্বারা গঠিত হয়। আর দ্বিতীয় কলাম হল পয়েন্টার গুলোর একটি সেট যা ডিস্ক ব্লক অ্যাড্রেস ধারণ করে যেখানে নির্দিষ্ট কি মান জমা থাকে।
সহজ ভাবে বলতে গেলে ইন্ডেক্সিং হল ডেটা টেবিলের রেকর্ডগুলোকে কোন নির্ধারিত এক বা একাধিক ফিল্ড অনুসারে সাজানোর উদ্দেশ্যে মূল টেবিল অপরিবর্তিত রেখে রেকর্ডগুলোর অ্যাড্রেসকে সাজানো।
সামরিক ক্ষেত্রে তথ্য সংরক্ষণের জন্য।
কৃষি ক্ষেত্রে গবেষণার তথ্য সংরক্ষণের জন্য।
হাসপাতালে রোগীদের রেকর্ড সংরক্ষণের জন্য।
রেলওয়েতে টিকিটিং ও রেলগাড়ির সিডিউলিং এর ক্ষেত্রে।
বড় বড় প্রতিষ্ঠানের কর্মীদের রেকর্ড সংরক্ষণের জন্যে।
ইলেক্ট্রনিক কমার্স ও ইলেক্ট্রনিক পেমেন্ট সিস্টেমে।
শিক্ষা প্রতিষ্ঠানে স্টুডেন্টদের ইনফর্মেশন সিস্টেম তৈরিতে।
জনসংখ্যা তথ্য সংরক্ষণ করে।
কোন প্রতিষ্ঠানের ইনভেনটোরি ম্যানেজমেন্ট সিস্টেম তৈরি।
ডাইনামিক ওয়েবসাইট তৈরি করাসহ অন্যান্য ক্ষেত্র যেখানে অসংখ্য ডেটা নিয়ে কাজ করতে হয়।
ব্যাংক ও বীমায় গ্রাহকদের হিসাব-নিকাশ সংরক্ষণের ক্ষেত্রে।
এয়ার লাইন্সে টিকিটিং ও ফ্লাইটের সিডিউলিং এর ক্ষেত্রে।
প্রোগ্রামিং ল্যাঙ্গুয়েজ: প্রোগ্রামিং ল্যাঙ্গুয়েজ একটি নির্দেশাবলীর সেট কে সংজ্ঞায়িত করে, যা একটি নির্দিষ্ট কাজ সম্পাদন করতে একসাথে সংক...