Showing posts with label Programming. Show all posts
Showing posts with label Programming. Show all posts

[আসুন করে ফেলি] জীবনের প্রথম প্রোগ্রাম!

প্রথম প্রোগ্রাম

আজ আমি আপনাদের সামনে প্রোগ্রাম এর ১ম পর্ব নিয়ে হাজির হলাম, আজ আপনার আপনাদের জীবনের প্রথম প্রোগ্রাম করবে।

👉ত চলুন শুরু করা যাকঃ-👇

  
প্রথমে কোডব্লোকস রান করি। তারপর নিচের কোডটুকু লিখি।


#include <stdio.h>
int main()
{
   printf("Hello Programming"); 
   return 0;
}

প্রোগ্রামটিকে first_program.c নামে সেভ করি। তারপর কোডব্লোকসের Build মেনু থেকে Build and run কমান্ডটিতে কিল্ক করি অথবা কিবোর্ড থেকে F9 বাটন চাপি। তাহলে নতুন একটা টার্মিনাল উন্ডোতে নিচের মত অাউটপুট দেখতে পাবো।


Output


Hello Programming

নোট: প্রতিটা সি প্রোগ্রাম main() ফাংশন থেকে এক্সিকিউসন শুরু করে। printf() ফাংশনটি কোটেশনের ভিতরে থাকা কনটেন্ট প্রিন্ট করে। ফাংশন নিয়ে পরবর্তিতে  বিস্তারিত অালোচনা করব।

আশা করি আপনাদের ভাল লেগেছে...।
ধন্যবাদ সবাইকে...
সবাই ভালো থাকবেন ধন্যবাদ
আমার সাইট ভিজিট কারার অনুরুধ রইল।
আমার ফেসবুক : Sadikur Rahman Mejan

[চলুন জেনে নেই] গানিতিক অপারেটর কি

আজ আমি আপনাদের সামনে গানিতিক অপারেটর  কি এবং তার সম্পর্কে সম্পূর্ণ বিস্তারিত আলোচনা করব। 
ত চলুন শুরু ক রা যাকঃ-



পাটি গণিতে আমরা যে সকল Operators ব্যাবহার করছি তাই হল Arithmetic Operators। যেমন যোগ, গুন, ভাগ ইত্যাদি।
Operatorব্যাবহার
+যোগ
বিয়োগ
*গুণ
/ভাগ
%ভাগশেষ

যোগ, গুন, ভাগ ইত্যাদির তো উদাহরণ দেওয়ার কিছুই নেই, আমরা ইচ্ছে করলেই পারি তাই না? উপরের সকল Operator সম্পর্কে ই আমরা জানি শুধু %(একে Reminder অথবা Mode বলে) Operator ছাড়া। % এর কাজ একটি উদাহরণ দিয়ে ব্যাখ্যা করি।
মড মূলত ভাগশেষ ভ্যালু। এই Mode (%) নিয়ে কাজ করার একটা সুন্দর নাম রয়েছে, যাকে বলে Modulus Arithmetic। Mode এর অনেক কাজ রয়েছে।
বাস্তব একটা উদাহরন দেওয়া যাক।
আমরা সময় হিসেব করি, তা একটা মডুলাস এরিথম্যাটিক বা মডুলাস পাটীগণিত। আমরা যদি ১২ ঘন্টার ঘড়ির কথা চিন্তা করি, তাহলে দেখব ১২ এর পর ১৩ না হয়ে ১ টা ধরি আমরা। আর ঘড়ির এই হিসাবকে বলা যায় ১২ এর মডুলাস এরিথম্যাটিক। আমরা করি কি, প্র্যতকটা ঘন্টাকে ১২ দিয়ে ভাগ করে দি। ১ টা বাজলেও ১২ দিয়ে ভাগ করি। ২ টা বাজলেও। তেমনি ১৫টা বাজলেও। তো যখন ১৫টা বাজে, তখন আমরা মুলত দেখি (১৫%১২) = ৩ বা তিনটা। আস্তে আস্তে আমরা এরকম অনেক গুলো মডুলাস এরিথম্যাটিক নিয়ে কাজ করতে পারব।
মূলত মডের কাজ হচ্ছে একটা লিমিট সেট করে দেওয়া। ঐ লিমিট ক্রস করলে আবার প্রথম থেকে কাউন্ট শুরু হবে। ঘড়ির টাইমের ক্ষেত্রে যেমন, তেমনি।
২৪ ঘন্টার ঘড়ি গুলোতে ২৪ হচ্ছে সর্বোচ্চ ভ্যালু। তো ২৪ এর পর ২৫ না হয়ে হয় (২৫%২৪) = ১।
১৫%৪ = কত হবে?
১৫%৪ এটার উত্তর হবে ৩ কারন ১৫ কে ৪ দ্বারা ভাগ করলে ভাগশেষ থাকে ৩।
মড এর মান সব সময় পূর্ন সংখা হবে। অর্থাৎ ১৫.৫%৪ এর ভাগ শেষ হচ্ছে ৩.৫ কিন্তু এর মান হবে ৩।
মড সব সময় পজেটিভ হবে। ১৫%-৪ এর মান হবে ৩। -১৫%৪এর মান হবে -৩। -১৫%-৪এর মান হবে-৩। ইত্যাদি।
নিচের প্রোগ্রামটা দেখিঃ

#include <stdio.h>
int main()
{
    int x =11%3;
    printf("%d", x);
    return 0;
}

11 কে ৩ দিয়ে ভাগ করলে ভাগশেষ ২ থাকার কথা, তাই না? তাই আমাদের পোগ্রামের আউটপুট হচ্ছে। 2
#include <stdio.h>
int main()
{
    int x =12%3;
    printf(“%d”, x);
    return 0;
}
                
12 কে 3 দিয়ে ভাগ করলে ভাগশেষ ০ থাকার কথা, তাই আমাদের আউটপুটও ০;

আশা করি আপনাদের ভাল লেগেছে...।
ধন্যবাদ সবাইকে...
সবাই ভালো থাকবেন ধন্যবাদ
আমার সাইট ভিজিট কারার অনুরুধ রইল।
আমার ফেসবুক : Sadikur Rahman Mejan

[জেনে নেই] Assignment অপারেটর কি?

আজ আমি আপনাদের সামনে Assignment অপারেটর নিয়ে সম্পূর্ণ আলোচনা করবো।
ত চলুন শুরু করা যাকঃ- 



Assignment operator: কোন মান বা Value কোন Identifier [ভ্যারিয়েবল] এর মধ্যে assign করা বা একটা মান রাখার জন্য জন্য assignment operator ব্যবহৃত হয়। C তে অনেক রকম Assignment operator রয়েছে। যেমনঃ
1) = (Equal to)
2) +=(Plas equal to)
3) -=(Mainus equal to)
4) *=(Product equal to)
5) /=(Division equal to)
6) %= (Mode equal to) etc
তবে সবচেয়ে ব্যবহৃত Assignment operator হচ্ছে = (Equal to)। এটি নিচের from এ লিখা হয়।
Identifier=expression
এখানে Identifier বলতে সাধারনত চলক(variable) কে বুঝানো হয়। আর expression বলতে যে কোন মান যেমন constant বা variable ইত্যাদি কে বুঝানো হয়।
নিচে কিছু Assignment operator এর উদাহরন দেওয়া হলোঃ
  1. X=5;
  2. Y=10;
  3. Pi=3.1416
  4. Z=x+y+pi
এখানে প্রথম উদাহরনে 5 , x এর মধ্য assign হয়েছে। অর্থাৎ x এর মান এখন 5। দ্বিতীয় উদাহরনে 10 , y এর মধ্য assign হয়েছে। অর্থাৎ y এর মান এখন 10. তৃতীয় উদাহরনে 3.1416 , pi এর মধ্য assign হয়েছে। অর্থাৎ pi এর মান এখন 3.1416. চতুর্থ উদাহরনে (x+y+pi ) , z এর মধ্য assign হয়েছে। অর্থাৎ z এর মান এখন (x+y+pi ) ।
আমরা এর আগেই assignment operator ব্যবহার করে এসেছি।
আগের একটি প্রোগ্রামই দেখি, যেখানে আমরা আয়াতাকার জমির আয়তন বের করেছি।
#include <stdio.h>
int main() {
int length = 5;
int volume;
volume = length * width;
int width = 8;
printf("%d", volume);
return 0;
}
যেখানে length নামক একটি ভ্যারিয়েবল এ আমরা একটি মান [5] রেখেছি। এবং width ভ্যারিয়েবলে রেখেছি 8.
+= (Plas equal to) Assignment operator:
এটা নিচের মতো করে লেখা হয়
Expression1 += Expression2;
যা (Expression1 = Expression1 + Expression2 ) এর সমান।
ব্যাখ্যাঃ মনে করি x=3 , y=5.
যদি লেখা হয়: x+=y তাহলে x এর মান হবে x=x+y অর্থাৎ x=8.
#include <stdio.h>
int main() {
int y = 5;
int x =3; x +=y;
printf("%d", x);
return 0;
}
উপরের প্রোগ্রামটা রান করিয়ে দেখলে আমরা আউটপুট পাবোঃ 8
নিচের প্রোগ্রামটা দেখিঃ

#include <stdio.h>
int main() {
int y = 5;
int x =3; x = x+y;
printf("%d", x);
return 0;
}
এ প্রোগ্রামও রান করিয়ে দেখলে আমরা আউটপুট পাবোঃ 8
আউটপুটে কোন পার্থ্যক্য নেই। কম কোড লেখার জন্য প্রায় সময়ই += অপারেটর ব্যবহার করা হয়।

-= (Mainus equal to) Assignment operator
-= এর ক্ষেত্রে নিচের মতো করে লেখা হয়
Exprission1 -= Expression2;
যা (Expression1 = Expression1 – Expression2 ) এর সমান।
ব্যাখ্যাঃ মনে করি x=8 , y=5.
যদি লেখা হয়ঃ x-=y তাহলে x এর মান হবে x=x-y অর্থাৎ x=3.
#include <stdio.h>
int main() {
int y = 5;
int x =8; x -=y;
printf("%d", x);
return 0;
}
উপরের প্রোগ্রামটা রান করিয়ে দেখলে আমরা আউটপুট পাবোঃ 3
নিচের প্রোগ্রামটা দেখিঃ

#include <stdio.h>
int main() {
int y = 5;
int x =8; x = x-y;
printf("%d", x);
return 0;
}
এ প্রোগ্রামও রান করিয়ে দেখলে আমরা আউটপুট পাবোঃ 3
উপরের প্রোগ্রামের সাথে আউটপুটে কোন পার্থ্যক্য নেই। += অপারেটর এর মতই কম কোড লেখার জন্য প্রায় সময় -= ব্যবহার করা হয়।

একই ভাবে *= এর মানে হচ্ছেঃ
Exprission1 *= Expression2;
যা (Expression1 = Expression1 * Expression2 ) এর সমান।
/= এর মানে হচ্ছেঃ
Expression1 /= Expression2;
যা (Expression1 = Expression1 / Expression2 ) এর সমান।
%= এর মানে হচ্ছেঃ
Expression1 %= Expression2;
যা (Expression1 = Expression1 % Expression2 ) এর সমান।

আশা করি আপনাদের ভাল লেগেছে...।
ধন্যবাদ সবাইকে...
সবাই ভালো থাকবেন ধন্যবাদ
আমার সাইট ভিজিট কারার অনুরুধ রইল।
আমার ফেসবুক : Sadikur Rahman Mejan

[আসুন জেনে নেই] লাইব্রেরি ফাংশান কি?

লাইব্রেরি ফাংশান

আজ আমি আপনাদের সামনে লাইব্রেরি ফাংশান কি এবং তার সম্পর্কে সম্পূর্ন আলোচনা করবো।
 ত চলুন শুরু করা যাকঃ- 


ফাংশান হচ্ছে পুনরায় ব্যবহার যোগ্য কোড ব্লক। যা একটি নির্দিষ্ট কাজ করতে পারে। সি প্রোগ্রামিং এ এমন অনেক গুলো ফাংশন লেখা রয়েছে। যে গুলোকে বলা হয় লাইব্রেরী ফাংশন। যেমন printf একটি ফাংশন, যার কাজ কোন কিছুর আউটপুট দেখা। আমাদের প্রতিটা প্রোগ্রামের শুরুতেই #include<stdio.h> লেখাটি যুক্ত করি। যার মানে আমরা এর আগেই জেনে এসেছি। মানে হচ্ছে Standard Library Functions টি যুক্ত করা। যেমন আমরা printf ব্যবহার করি, এটি হচ্ছে Standard I/O Functions এর একটা ফাংশন। Standard I/O এ আরো কিছু ফাংশন রয়েছে, যেমনঃ scanf(), getchar(), putchar() ইত্যাদি। এ গুলো সম্পর্কে পরবর্তী চ্যাপ্টার গুলো থেকে জানা যাবে।
নিচে কিচু include file এবং তাদের ফাংশন গুলো দেওয়া হলো। প্রতিটি include file এর ব্যবহার সম্পর্কে বিস্তারিত লেখা লিঙ্কে যুক্ত করা হয়েছে। লিঙ্ক থেকে বিস্তারিত উদাহরণ সহ দেখে নেওয়া যাবে।
কোন ফাংশনে যে মান পাস করা হয়, সে গুলোকে বলা হয় আর্গুমেন্ট/Argument। কোন কোন লাইব্রেরী ফাংশন কোন Argument ছাড়াই কাজ করে। কোন কোন ফাংশন একটি Argument নেয়। আবার কোন কোন ফাংশন একের অধিক Argument নিয়ে কাজ করে।

stdio.h: I/O functions:

  1. getchar() returns the next character typed on the keyboard.
  2. putchar() outputs a single character to the screen.
  3. printf() as previously described
  4. scanf() as previously described
নিচের দুইটি লিঙ্ক থেকে getchar & putchar এবং scanf & printf সম্পর্কে বিস্তারিত জানা যাবে।

string.h: String functions

  1. strcat() concatenates a copy of str2 to str1
  2. strcmp() compares two strings
  3. strcpy() copys contents of str2 to str1
String কি, এর লাইব্রেরী ফাংশন গুলো নিয়ে বিস্তারি জানা যাবে এখান থেকেঃ C – Strings / স্ট্রিং

ctype.h: Character functions

  1. isdigit() returns non-0 if arg is digit 0 to 9
  2. isalpha() returns non-0 if arg is a letter of the alphabet
  3. isalnum() returns non-0 if arg is a letter or digit
  4. islower() returns non-0 if arg is lowercase letter
  5. isupper() returns non-0 if arg is uppercase letter

math.h: Mathematics functions

  1. acos() returns arc cosine of arg
  2. asin() returns arc sine of arg
  3. atan() returns arc tangent of arg
  4. cos() returns cosine of arg
  5. exp() returns natural logarithim e
  6. fabs() returns absolute value of num
  7. sqrt() returns square root of num

time.h: Time and Date functions

  1. time() returns current calender time of system
  2. difftime() returns difference in secs between two times
  3. clock() returns number of system clock cycles since program execution

stdlib.h:Miscellaneous functions

  1. malloc() provides dynamic memory allocation, covered in future sections
  2. rand() as already described previously
  3. srand() used to set the starting point for rand()
আশা করি আপনাদের ভাল লেগেছে...।
ধন্যবাদ সবাইকে...
সবাই ভালো থাকবেন ধন্যবাদ
আমার সাইট ভিজিট কারার অনুরুধ রইল।
আমার ফেসবুক : Sadikur Rahman Mejan

[চলুন জেনে নেই ] ডেটা টাইপ এবং ভ্যারিয়েবল কি?

ডেটা টাইপ এবং ভ্যারিয়েবল

আজ আমি আপনাদের সামনে ডেটা এবং তার রিলেটিভিটি ভ্যারিয়েবল নিয়ে আলোচনা করব?
ত চলুন শুরু করা যাকঃ- 


এর আগের প্রোগ্রামে আমরা মাত্র এক লাইন এর একটা আউটপুট দেখিয়েছি। যা শুধু মাত্র প্রোগ্রামিং শুরু করার জন্যই যথেষ্ট ছিল। বাস্তবে আমাদের জটিল কিছু প্রোগ্রাম লিখতে হবে। যার জন্য দরকার আমাদের ভ্যারিয়েবল এর ধারনা।
ভ্যারিয়েবল হচ্ছে একটি নাম, যা দিয়ে কম্পিউটারের মেমরিতে কোন ডেটা রাখা হয়। এ ডেটা হতে পারে নিউম্যারিক (যে কোন সংখ্যা) অথবা একটি character মান। এ ভ্যারিয়েবল এর মধ্যে কি ধরনের ডেটা রাখব আমরা তাই হচ্ছে ডেটা টাইপ। ভ্যারিয়েবল সম্পর্কে আমরা পরে আবার জানব। এবার একটু এ ডেটা টাইফ সম্পর্কে জানি।
সি প্রোগ্রামিং এ অনেক প্রকারের ডাটা টাইপ আছে। তার মধ্য প্রধান চারটি হচ্ছেঃ
  • int data type
  • char data type
  • float data type
  • double data type

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("%f", volume);
 return 0;
}

প্রোগ্রামটি রান করলে আমরা আউটপুট দেখতে পাবো 40
এটা অবশ্যই আমাদের প্রথম প্রোগ্রাম থেকে দেখতে অনেক জটিল। এবং কিছুটা বড়। তবে অবশ্যই অনেক সহজ। কিছুক্ষন আগে আমরা ভ্যারিয়বল নামে একটা বস্তুর নাম শুনছি যা কোন কিছু স্টোর বা সেভ করে রাখে কম্পিউটার মেমরিতে।
আমাদের হিসেব করা জমির ক্ষেত্রফল বের করে ও তো কম্পিউটার মেমরিতে রাখতে হবে। কম্পিউটার মেমরিতে রাখার জন্য আমাদের দরকার একটা ভ্যারিয়েবল। ক্ষেত্রফল রাখার জন্য আমাদের ভ্যারিয়েবল এর নাম দিয়েছি volume, কিন্তু volume এ আমরা কি ধরনের ডেটা রাখব তা কম্পিউটারকে জানতে হবে না? আমরা যেহেতু একটা ক্ষেত্রফল রাখব এবং তা হচ্ছে একটা সংখ্যা।
কিছুক্ষন আগে int নামে আমরা একটা ডেটা টাইপ সম্পর্কে জেনেছি। যা দিয়ে কম্পিউটারে Integer/ পূর্ণসংখ্যা কম্পিউটারে সংরক্ষন করা যায়। তাই আমরা int ব্যবহার করেছি। আর এর সব টুকু লিখছি একটা লাইনের মধ্যে 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() এর ভেতর ডাবল কোটেশন দিয়ে লিখতে হয় %d, এটিকে বলে placeholder। প্রত্যেকটি ডেটা টাইপের জন্য আলাধা আলাধা placeholders রয়েছে। %d মানে হচ্ছে display integer। ডাবল কোটেশনের পর আমরা একটি কমা দিয়েছি। এর পর লিখছি আমাদের ইন্টিজার ভ্যারিয়েবলটি। যা আমাদের জমির ক্ষেত্রফল প্রিন্ট করে দিয়েছে।
এ কাজটা তো আমরা মুখেই করতে পারতাম তাই না? ভালো হতো যদি প্রোগ্রামটা রান হওয়ার পর দৈর্ঘ্য এবং প্রস্থ নেওয়া যেত। তাহলে আমরা যে কোন জমির ক্ষেত্রফল বের করতে পারতাম। আমরা এমন কিছুই শিখব। তার আগে আরো কিছু ব্যাসিক ধারনা নিয়ে নি।


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

কিছুক্ষণ আগে আমরা placeholder নামে একটা শব্দ শুনেছি। প্রত্যেকটা ডেটা টাইপের জন্য আলাদা আলাদা প্লেসহোল্ডার রয়েছে। নিচে ভিন্ন ভিন্ন ডেটা টাইপ ও তাদের প্লেসহোল্ডার গুলো দেওয়া হলোঃ
ডেটা টাইপপ্লেসহোল্ডার
int%d
char%c
float%f
double%lf

character data type

এবার আমরা 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’ ।

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("%d", n);
 return 0;
}

এটি এবার সঠিক মান দিবে।
বৃত্তের ক্ষেত্রফলের জন্য দরকার এর ব্যাসার্ধের মান। ধরে নিচ্ছি একটি বৃত্তের ব্যাসার্ধ 7.6 একক। আমরা এর ক্ষেত্রফল বের করার একটা প্রোগ্রাম লিখে ফেলিঃ
#include <stdio.h>

int main()
{
 float radius = 7.6;
 float area = (radius*radius * 3.1416);
 printf("%f", area);
 return 0;
}

আমরা radius নামে একটা floting 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;
}

এখানে আমরা পাই এর মান দশমিকের পর ২০ঘর পর্যন্ত দিয়েছি। এরপর আমরা চাচ্ছি ২০ ঘর পর্যন্তই মান পেতে। তাই প্লেসহোল্ডারে .20f দিয়ে বলে দিয়েছি যেন দশমিকের পর ২০ ঘর পর্যন্ত প্রিন্ট করে। কিন্তু দশমিকের পর ১৫ ঘর পর্যন্ত ঠিক মানই প্রিন্ট করেছে। এরপর কত গুলো শূন্য দিয়ে পূরণ করে দিয়েছে। কারণ dobule ডেটা টাইপ দশমিকের পর ১৫ ঘর পর্যন্ত মান ঠিক মত মনে রাখতে পারে।

ডেটা টাইপ এবং তাদের রেঞ্জঃ

শুরুতেআমরা রেঞ্জ নিয়ে কিছু পড়েছি, হয়তো ঠিক মত বুঝতে পারি নি। কিন্তু এবার বুঝেই ছাড়ব। আমরা বলেছি int data type এর সাইজ হচ্ছে ২ বাইট। আমরা জানি এক বাইট সমান ৮ বিট। তাহলে দুই বাইট সমান ১৬ বিট। আর এই ১৬ বিটের মানে হচ্ছে কম্পিউটার (216 -1) = (65536 -1) = 65535 পর্যন্ত নির্ভুল ভাবে সেভ করতে পারবে। মানে আমরা সুন্দর ভাবেই0-65535 পর্যন্ত যে কোন মান একটি ইন্টিজারে সেভ করতে পারব। এখন যদি আমরা এর থেকে বড় কোন মান যেমন। 65538 ইন্টিজার ডেটা টাইপে সেভ করি, কম্পাইলার ঠিক মত মান আমাদের আউটপুট দিতে পারবে না।

আমরা বলেছি যে কিছু কিছু কম্পাইলার ইন্টিজারের জন্য ৪ বাইট মেমরি বরাদ্ধ করে। ৪ বাইট মানে হচ্ছে ৪*৮ বিট। = ৩২ বিট। আর ৩২ বিট মানে আমরা (232-1) = (4294967296 -১) = 4294967295 পর্যন্ত নির্ভুল মান সেভ করতে পারব ইন্টিজার ডেটা টাইপ হিসেবে। এর থেকে বড় কোন মান যদি ইন্টিজার হিসেবে সেভ করতে চাই, তাহলে ঠিক মত আউটপুট পাবো না। যেটা পাবো সেটা দারুণ। দারুণ কেন বলছি। আগে 4294967295 এর থেকে বড় যে কোন একটা সংখ্যা ইন্টিজার ভ্যারিয়েবল হিসেবে প্রিন্ট করে দেখি। যেমন 6294967295
#include <stdio.h>

int main()
{
 int n = 6294967295;
 printf("%d", n);
 return 0;
}

কি আউটপুট পাচ্ছি? আমি পাচ্ছি 1999999999… যেটা পাওয়ার কথা সেটা পাই নি। কারণ ইন্টিজার ডেটাটাইপে যতটুকু ক্ষমতা তার থেকে বড় মান আমরা সেভ করার চেষ্টা করেছি, তাই।
4294967295 এর পরবর্তি সংখ্যা 4294967296 , এটা প্রিন্ট করে দেখিঃ
#include <stdio.h>

int main()
{
 int n = 4294967296;
 printf("%d", n);
 return 0;
}

আউটপুট পাচ্ছি শূন্য। ০ ।
4294967297 প্রিন্ট করে দেখলে পাবো ১।
#include <stdio.h>

int main()
{
int n = 4294967297;
printf("%d", n);
return 0;
}


এভাবে যদি 4294967298 প্রিন্ট করি, তাহলে পাবো ২। মানে কি দাড়ালো? মানে 4294967295 এর পরের সংখ্যা গুলো প্রিন্ট করার চেষ্টা করলে আবার ০ থেকে প্রিন্ট করা শুরু করে। সুন্দর একটা কারণ আছে। কারণটা কি? চিন্তা করে বের করতে পারেন।

এতক্ষণ আমরা Unsigned ইন্টিজার সম্পর্কে আলোচনা করেছি। Unsigned মানে হচ্ছে সংখ্যাটা কি ধণাত্ত্বক নাকি ঋণাত্ত্বক, তা বলে দি নি। কিন্তু মাঝে মাঝে আমাদের Singed Integer নিয়ে কাজ করতে হবে। মানে আমরা ভ্যারিয়েবল ডিক্লারেশনের সময় বলে দিব সংখ্যাটা কি ধনাত্ত্বক নাকি ঋণাত্ত্বক, তখন আবার রেঞ্জ ছোট হয়ে যাবে। তখন একটি ইন্টিজারের রেঞ্জ হয়ে যাবে -2,147,483,648 থেকে +2,147,483,647। মানে আমরা -2,147,483,648 পর্যন্ত এবং 2,147,483,647 পর্যন্ত ইন্টিজার মান একটা ইন্টিজার ভ্যারিয়েবলে সেভ করতে পারব।
ধণাত্ত্বক হলে কম্পাইলার আউটপুটে + চিহ্ন প্রিন্ট করবে না। কিন্তু ঋণাত্ত্বক হলে তা দেখাবেঃ
#include <stdio.h>

int main()
{
int n = -899;
printf("%d", n);
return 0;
}

উপরে একটি ধণাত্ত্বক সংখ্যা আমরা বলতে পারি Singed Integer ভ্যারিয়েবল তৈরি করা হয়েছে। এবং পরে তা প্রিন্ট করা হয়েছে।

নিচে ভিন্ন ভিন্ন ডেটা টাইপ এবং তাদের সাইজ দেওয়া হলোঃ
ডেটা টাইপসাইজ
int2 bytes
char1 byte
float4 bytes
double8 bytes
বিদ্রঃ এটি কম্পাইলার ভেদে ভিন্ন হতে পারে।
প্রশ্নঃ একটা double ডেটা টাইপ সর্বোচ্চ কত পর্যন্ত সঠিক মান দিতে পারে?

Total Pageviews

সর্বাধিক আলোচিত ভয়েস

Designed by Sadikur Rahman

Powered by Blogger