Monday, December 30, 2013

C প্রোগ্রামিং ছয় অধ্যায় - While loop - PART 1


লুপিং হচ্ছে প্রোগামিং এর প্রান। ছোট বড় প্রায় সব প্রোগ্রামেই লুপ এর ব্যবহার করতে হয়। লুপিং এর জন্য অনেক গুলো statement রয়েছে। যেমনঃ
1. While
2. Do-while
3. For ইত্যাদি।
আজ প্রথমে while লুপ নিয়ে আলোচনা করব। লুপ মানে কি তাতো মনে হয় সবাই যানেন। একই
জিনিস বার বার ব্যবহার করাই হচ্ছে লুপ। আর এ প্রক্রিয়াকে বলে লুপইং। প্রোগ্রামিং এ লুপিং এর কাজ কি তাই তো?? অনেক সময় প্রোগ্রামিং এ একই জিনিস বার বার ব্যবহার করা লাগে, যেমন একটি নাম ১৫ বার ব্যবহার করা লাগবে। যদি প্র্যত্যেক বারের জন্য একবার করে কোড লিখতে হয় তাহলে একটি সিম্পল প্রোগামের অবস্থা কত বিশাল হবে একটু চিন্তা করুন। আর এ থেকে মুক্তি দিতে আছে লুপ। এবার আসুন দেখে নি while লুপ কিভাবে লিখা হয়

while(expression)statement

while লুপে বা যেকোন লুপে একটি নির্দিষ্ট শর্ত পূরন না হওয়া পর্যন্ত এক বা একাদিক মান সম্পাদন হয়ে থাকে, যা ঐ লুপ এর সাথে সম্পর্ক যুক্ত। এখানে statement টি সম্পাদিত হবে যদি expression একটি true value দেয়। অর্থাৎ expression টি সত্য হয়। মিথ্যে হলে কিন্তু statement ব্যবহার হবে না। এখন মনে করি একটি প্রোগ্রামে আমরা প্রত্যেক লাইনে ০,১,২,৩,৪,৫,৬,৭,৮,৯,১০ইত্যাদি প্রিন্ট করব। এখন যদি নিচের মত করে একটি প্রোগ্রাম লিখি দেখুন কত বড় কোডিং করতে হয়।

#include<stdio.h>
int main()
{
printf("0\n");
printf("1\n");
printf("2\n");
printf("3\n");
printf("4\n");
printf("5\n");
printf("6\n");
printf("7\n");
printf("8\n");
printf("9\n");
printf("10\n");
}

আউট পুটঃ
0
1
2
3
4
5
6
7
8
9
10

কিন্তু আমারা while লুপ ব্যবহার করে কিভাবে এত বড় কোড টা কে ছোট করে ফেলি তা দেখুনঃ




#include<stdio.h>
int main()
{
int number=0;
while(number<=10){
printf("%d\n",number);
number++;
}
return 0;
}

কত ছোট হয়ে গেছে দেখছেন?? আউট পুটে কোন পরিবর্তন হবে না। আগের প্রোগ্রামে যে আউট-পুট দিয়েছে এ প্রোগ্রামে একই আউট-পুট দিবে। এবার একটু ব্যাখ্যা করি,। কি ভাবে কি হল,

এখানে int number=0; লাইন দিয়ে number নামে একটি ইন্টিজার variable নিয়েছি । আগের লাইন গুলোর কি কাজ তা মনে হয় জেনে গেছে ইতিমধ্যে। যাই হো এবার
while(number<=10)
{
printf("%d\n",number);
number++;
}

এই পুরোটাই হচ্ছে while লুপে অংশ। আমরা যদি while লুপের ব্যবহার ফরম এর সাথে তুলনা করি তাহলে  number<=10 এ অংশ টি হচ্ছে expression অংশ। এটি যদি সত্য হয়ে তাহলে পরের অংশ কাজ করবে মানে


{
printf("%d\n",number);
number++;
}


অংশ টি কাজ করবে। আর যদি মিত্যে হয় তাহলে
{
printf("%d\n",number);
number++;
}

অংশটি কাজ করবে না। এবার আসি while loop কিভাবে কাজ করে, আমরা শর্ত দিয়েছি যে  number<=10  অর্থাৎ number এর মান ১০ এর বেশি হতে পারবে না। তার আগে int number=0; এ statement এ আমরা number এর মান ০ দিয়ে দিয়েছি। তাই প্রথমে ০ প্রিন্ট করবে। তার পর number++; statement দিয়ে number এর মান ১ বাড়বে। তার পর আবার  number<=10 তে গিয়ে চেক করবে number এর মান ১০ থেকে ছোট কিনা। যদি ছোট হয় তাহলে প্রিন্ট করবে , না হলে লুপ থেকে বের হয়ে আসবে।
এখন আগের প্রোগ্রাম টি আরো ছোট করে নিছের মত করে লিখতে পারিঃ






#include<stdio.h>
int main()
{
int number=0;
while(number<=10)
printf("%d\n",number++);
return 0;
}

এখানে সব কিছুই আগের মত execute হবে। শুধু মাত্র number এর মান বাড়বে প্রিন্ট ফাংশান এর ভিতরেই। আসা করি আপনাদের while লুপ সম্পর্কে ধারনা দিতে পেরেছি।

C প্রোগ্রামিং পাঁচ অধ্যায় -If-else Statement - PART :1

আজ if-else statement সম্পর্কে আলোচনা করবো। দুটি মান থেকে একটি সম্বাব্য মান নেওয়ার জন্য নিচের if-else statement ব্যবহার করা হয়। লজিকেল পরীক্ষা করে মানটি নেওয়া হয়। if-else statement  সাধারনত নিচের মত হয়ে থাকে।

if(expression)
statement 1
      else
statement2;
এখানে এই statement দিয়ে বুঝানো হয়, যদি Expression টি সত্য হয় তাহলে  statement 1 কাজ করবে। আর যদ মিথ্যে হয় তাহলে statement2 টি  কাজ করবে।
এখানে কিন্তু else না থাকলে ও হয়। এটা একটি বাড়তি অংশ। নিচে কয়েকটি statement দেওয়া হলঃ

If (x=1)
{
       printf("%d",1);
}
এখানে যদি x=1 হয় তাহলে printf("%d",1); statement টি কাজ করবে এবং 1 Print করবে। আর যদি x=1 না হয় তাহলে
printf("%d",1);
statement টি কাজ করবে না।

If(a>b)
    printf(“a is greater  then b”);
else
    printf("a is less then b”);

এখানে যদি (a>b হয়, মানে যদি a , b থেকে বড় হয় তাহলে printf("a is grater  then b"); statement টি কাজ করবে এবং a is grater then b লেখা টি প্রিন্ট করবে। আর যদি a না হয় তাহলে printf("a is greater  then b"); কাজ করবে না। else অংশে যাবে এবং printf("a is less then b"); statement টি কাজ করবে তারপর a is less then b লেখাটি প্রিন্ট করবে ।

শুধু মাত্র if statement ব্যবহার করে দুটি সংখ্যার মধ্যে ছোট বড় নির্নয়ের জন্য একটি প্রোগ্রাম লিখিঃ



#include<stdio.h>
int main()
{
    int x,y;
    printf("input the valu of x:");
    scanf ("%d",&x);
    printf("input the valu of y:");
    scanf ("%d",&y);
    if(x>y)
        printf("x is greater then y\n");
    if(x==y)
        printf("x is equal to y\n");
    return 0;
}
 
এ প্রোগ্রামে আপনার কাছ থেকে দুটি নাম্বার ইনপুট নিবে। তার পর তাদের মধ্যে কোনটা বড়, ছোট বা সমান তা দেখাবে। 

If-else statement ব্যবহার করে দুটি সংখ্যার মধ্যে ছোট বড় নির্নয়ের জন্য একটি প্রোগ্রাম লিখিঃ



#include<stdio.h>
int main()
{
    int x,y;
    printf("input the valu of x:");
    scanf ("%d",&x);
    printf("input the valu of y:");
    scanf ("%d",&y);
    if(x>y)
        printf("x is greater then y\n");
    else
        printf("x is less then y\n");
    return 0;
}

 
এখানের প্রোগ্রামটি আগের টির মতই। তবে এখানে equality দেখাবে না।
পাস এবং ফেল নির্নয়:


#include<stdio.h>
int main()
{
int x;
printf("input your number:");
scanf ("%d",&x);
if (x>40 && x<100)
printf("Congratulation!!! You have passed");
else
    printf("Ops!! You have failed.");
return 0;
}
এখানে যদি আপনার মার্ক্স ইনপুট দেন, তাহলে আপনি পাস করছেন নাকি ফেল করছেন তা দেখাবে।

যে কারণে প্রোগ্রামাররা রাতে কাজ করে

বহু প্রোগ্রামারকে তার কাজের সময় জিজ্ঞাসা করে জানা গেছে, তারা হয় ভোর চারটা পর্যন্ত কাজ করে ঘুমাতে যান, না হয় ভোর চারটায় উঠে কাজ শুরু করেন। কিন্তু রাতে কাজ করার বিশেষত্ত্ব কী? কেন তারা এত রাত জেগে কাজ করেন, সে বিষয়টিই উঠে এসেছে বিজনেস ইনসাইডারের লেখায়।

     
দীর্ঘক্ষণ মনোযোগ দেয়ার সুযোগ

কম্পিউটার প্রোগ্রামার পল গ্রাহাম এ বিষয়ে লিখেছেন, প্রোগ্রামারদের অনেকক্ষণ ধরে একমনে কাজ করতে হয়। এ সময় কেউ সামান্য সময় বিরক্ত করলেও তা অনেক বেশি সময়ের কাজ নষ্ট করে। এটা অনেকটা দামি কাঁচ দিয়ে কিছু একটা সাজানোর মতো। যখন কেউ বিরক্ত করে তখন তা হাজার খণ্ডে বিভক্ত হয়ে যায়। এ কারণে কাজের সময় বিরক্ত করলে প্রোগ্রামাররা অনেক বেশি বিরক্তিবোধ করে।

পল জানান, এমন ধরনের মানসিক বিনিয়োগের ক্ষেত্রে তারা কমপক্ষে দুই ঘণ্টার নিরবচ্ছিন্ন সময় না পেলে কাজ শুরু করতে পারেন না। একটা সম্পূর্ণ মডেল মাথায় ধারণ করার আধঘণ্টার মধ্যে তার পুরোটা ভণ্ডুল করে ফেলা নিঃসন্দেহে অপচয়।

কয়েকজন প্রোগ্রামার জানিয়েছেন, তারা দিনে কাজ শুরু করতেই পারেন না। কারণ ক্রমাগত কাজে বাধা, অন্যান্য গুরুত্বপূর্ণ কাজ ও গুরুত্বপূর্ণ ই-মেইলের উত্তর দিতে গিয়ে প্রোগ্রামারের কাজ করা সম্ভব হয় না। এ কারণেই সবাই যখন ঘুমিয়ে থাকে তখন প্রোগ্রামাররা কাজ শুরু করে।

ঘুমন্ত মস্তিষ্ক

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

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

যখন আপনার মস্তিষ্ক সম্পূর্ণ ক্ষমতা নিয়ে কাজ করে না তখন এটা কিছু একটা করার চেষ্টা করে। ফলে যে কোনো একটা গুরুত্বপূর্ণ কাজ থাকলে সেটা করা সম্ভব হয়।

উজ্জ্বল মনিটর

এ বিষয়টা অনেকটা সাধারণ। অন্ধকারাচ্ছন্ন পরিবেশে একটি উজ্জ্বল মনিটরের দিকে তাকিয়ে কাজ করায় শরীরের ঘুম চক্রে দেরি হয়।  এ কারণে সাধারণত ভোর তিনটা পর‌্যন্ত ক্লান্তিবোধ হয় না। এর পরদিন আবার একই রুটিন ধরে কাজ শুরু করলে স্বভাবতই তাতে অভ্যস্ত হয়ে যায় শরীর।


সময়ের বাধ্যবাধকতা না থাকা

এছাড়া আরেকটা বিষয় প্রোগ্রামাররা জানিয়েছেন, তা হচ্ছে কোনো সময়ের বাধ্যবাধকতা না থাকা। রাতে কাজ করায় অনেকেরই কাজ শেষ করার জন্য কোনো নির্দিষ্ট সময়সূচী থাকে না। ফলে এতে কিছুটা নিশ্চিন্তে কাজ করা যায়।

Wednesday, December 11, 2013

C প্রোগ্রামিং চার অধ্যায় -Library Function - PART :1

Library Function: Library function হল সি ল্যাঙ্গুয়েজ এ দেয়া default function’s. সকল ফাংশন এর corresponding header file আছে। যেমন আমরা যখন  printf(), scanf() function ব্যবহার করেছি, তখন আমাদের “stdio.h” header file declare করতে হয়েছে। যেকোন default function প্রোগ্রাম এ ব্যবহার করা হলে তার header file অবশ্যই প্রথমে declare করা লাগবে।



কিছু গুরুত্বপূর্ন লাইব্রেরী ফাংশন।

Function nameHeader fileWork
scanf(…)stdio.hInput নেয়া
printf(…)stdio.hOutput দেয়া
abs(i)stdlib.hReturn the absolute value of i
acos(d)math.hReturn cos-1(d) (মান radian এ return করে, not degree)
asin(d)math.hReturn sin-1(d)
atan(d)math.hReturn tan-1(d)
Sin(i)math.hReturn sin(d) (d এর মান radian এ, degree এর জন্য function টা use করলে degree কে radian এ convert করতে হবে)
cos(i)math.hReturn cos(d)
tan(i)math.hReturn tan(d)
floor(d)math.hReturn only the integer part of a fractional number.
ceil(d)math.hReturn the integer_part+1 of a fractional number
getchar()stdio.hTake a single character input
isalnum(c)ctype.hReturn true if character c is either A-Z,a-z,0-9
isalpha(c)ctype.hReturn true if character c is either A-Z,a-z
isdigit(c)ctype.hReturn true if character c is either 0-9
isupper(c)ctype.hReturn true if character c is either A-Z
islower(c)ctype.hReturn true if character c is either a-z
log(c)math.hReturn ln(c)
log10(c)math.hReturn log(c)
pow(base,p)math.hReturn basep
sqrt(d)math.hReturn d (square root of d)
toupper(c)ctype.h or
stdlib.h
Return capital letter of a letter.
tolower(c)ctype.h or
stdlib.h
Return small letter of a letter.
strlen(name)string.hReturn the length of a character array
strcpy(name1,name2)string.hCopy name2 to name1
strcmp(name1,name2)string.hReturn true if name1 and name2 are exactly same
gets(name)stdio.hTake charater array or string as input


C Programming এ আরও অনেক গুলো Library Function রয়েছে। এগুলো সাধারনত সবচেয়ে বেশি ব্যবহৃত Function. নিচে আরও কিছু সবচেয়ে বেশী ব্যবহৃত Library Function এর চার্ট দেওয়া হলো।







C প্রোগ্রামিং দ্বিতীয় অধ্যায় - Variable Scope( Local and Global Variable ) - PART - 8

একটি Variable এর data  প্রোগ্রাম এর কোথায় এবং কতটুকু জায়গার মধ্যে ব্যবহার করা হবে বা কোন অংশে তাদের ক্ষমতা থাকবে তাই হচ্ছে Scope। Scope এর বাংলা হচ্ছে সুযোগ। আমরা প্রোগ্রামে যে সকল Variable বা চলক গুলো ব্যবহার করি তা প্রোগ্রামের একটি নির্দিষ্ট অঞ্ছলেই ব্যবহার করা যায়।  অন্য জায়গায় তারা নিষ্কিয় থাকে।

যেমন একটি Variable বা চলক তারা  declare বা ঘোষনা করার আগে ব্যবহার করা যায় না। আবার প্রোগ্রামের একটি ফাংশান বা ব্লকে তা ডিক্লেয়ার করলে তা অন্য ব্লকে ব্যবহার করা যায় না। সুতরাং বলা যায় যে Scope শুরু হয় যখন কোন Variable যদি declare করা হয় তখন।

তবে Variable কে শুধু  main()  কিংবা অন্যান্য function  এর মধ্যেই নয় , function এর বাইরেও Variable ডিক্লেয়ার করা যায় ।
Declare এর উপর ভিত্তি করে Variable কে দুই ভাগে ভাগ করা যায় যেমন :
  1. Locical Variable
  2. Global Variable

Locical Variable    

যখন কোন Variable কোন  function এর মধ্যে বা কোন block statement  এর মধ্যে করা ডিক্লেয়ার হয় তখন সেই Variable কে  ঐ function বা ব্লক  এর local  Variable বলে। এই Variable এর মান বা অস্তিত্ব
তথা কার্যপরিধি শুধু সংশ্লিষট function  সীমাবদ্ধ থাকে । অন্য function এ  এদের ব্যবহার করা যায় না ।

#include
int main()
{
int x=12;
printf("Block x: %d \n",x);
return 0;
}



Global  Variable 
সি তে Variable কে শুধু localy ই নয়, globally  ও ডিক্লেয়ার করা যায়  । এই ধরনের Variable কোন  function কিংবা block statement এর মধ্যে নয় বরং শুরুতেও ডিক্লেয়ার করা যায় এবং প্রোগ্রামে ব্যবহৃত সব function  ব্যবহার করা যাবে।
তবে মনে রাখতে হবে ,আমরা যদি Global  Variable এর মান কোন কিছু না দিয়ে রাখি  ভাবে কোন Global  Variable এর data হিসেবে compiler প্রাথমিক ভাবে 0 নিধারন করে রাখে । 


#include
int x=4; //Gobal Variable.
int main()
{
{
int x=12; //Block variable
printf("Block x: %d \n",x);
}
printf("Global x: %d \n",x);
return 0 ;
}



এখানে প্রথমে Main function বা প্রধান ফাংশানের আগে x=4; ধরা হয়েছে। যা হচ্ছে গ্লোবাল বা সার্বোজনীন Variable। এটা যেকোন যায়গায় ব্যবহার করা যাবে।
তারপর Main function বা প্রধান ফাংশানের মধ্যে  ব্লকের মধ্যে আরেকটি x Variable ব্যবহার করা হয়েছে। যা শুধু মাত্র ঐ কোড ব্লকেই কাজ করবে। ঐ কোড ব্লকের পর আর কাজ করবে না।
বুঝার সুবিধার জন্য এখানে একটি মাত্র Variable (X) ব্যবহার করা হয়েছে। সব যায়গায়ই Variable হিসেবে x নেওয়া হয়েছে শুধু মাত্র এর মান ভিন্ন ধরা হয়েছে।
Global x এর মান ধরা হয়েছে 4, Block এর ভিতরের x এর মান ধরা হয়েছে 12। প্রোগাম  টি রান করালে দেখা যায় যে একটি মাত্র চলক ব্যবহার করা সত্যেও বিভিন্ন যাগায় বিভিন্ন মান প্রিন্ট করে।

C প্রোগ্রামিং তিন অধ্যায় - কিভাবে Getchar Function দ্বারা input নেওয়া হয় - PART 2

আজ আমি কিভাবে কম্পিউটারে একটি ডাটা Input করবেন ও কিভাবে Out Put বের করবেন তা নিয়ে বলব। আজকে দুটি Function নিয়ে আলোচনা করব। একটা হচ্ছে “getcha” আরেকটি হচ্ছে “putchar”  Function.

getchar Function getchar  Function দ্বারা single character কম্পিউটারে input নেওয়া হয়। এটি একটি C library Function. এটি সাধারনত নিচের মত করে লিখা হয়।
character variable =getchar( );

getchar Function হচ্ছে স্টান্ডার্ড C I/O library এর একটি অংশ। এটি ইনপুট ডিভাইস যেমন Keyboard থেকে একটি সিঙ্গেল Character দেয়।   প্রোগ্রামের মঝে এটি নিচের মত করে লিখা হয়ঃ
char x;
x= getchar();
এখানে char x; দ্বারা বুঝানো হয়েছে যে এটি একটি character type Variable. পরবর্তিতে x= getchar(); দ্বারা x এর মান ইনপুট ডিভাইস হতে নিবে। getchar Function দ্বারা multi character কম্পিউটারে input নেওয়া যায়।


putchar FunCtion : Putchar Function দ্বারা single character কম্পিউটারে দেখানোর জন্য ব্যবহার করা হয়।   এটি getchar Function অনুরুপ।putchar(character variable );এটি ও স্টান্ডার্ড C I/O library এর একটি অংশ।  প্রোগ্রামের মঝে এটি নিচের মত করে লিখা হয়ঃ
char x;
putchar(x);
getchar Function  এর মত এখানে char x; দ্বারা বুঝানো হয়েছে যে এটি একটি character type Variable. পরবর্তিতে putchar(x); দ্বারা x এর মান আউটপুট ডিভাইসে দেখাবে। putchar Function দ্বারা ও multi character কম্পিউটারে OutPut দেওয়া যায়।
উপরের প্রোগ্রামে একটি character variable  a নিয়েছি। এখন getchar Function দ্বারা যে সকল character কম্পিউটারে input নেওয়া হয় তাই putchar Function দ্বারা আপনাকে দেখাবে।

#include
int main()
{
char a;
a=getchar();
putchar(a);
return 0;
}





কেমন হল জানাবেন । সবাই কে ধন্যবাদ।

Monday, December 9, 2013

C প্রোগ্রামিং দ্বিতীয় অধ্যায় - Symbolic Constant: - PART 7

Symbolic Constant  হচ্ছে কত গুলো Character এর প্রতিনিধি।এ Character গুলো Numeric constant, Character constant অথবা String constant হতে পারে।
কোন প্রোগ্রামে একই কথা বার বার লেখার হাত থেকে মুক্তি পাওয়ার জন্য Symbolic Constant ব্যবহার করা হয়।
সাধারনত প্রোগ্রামের শুরুতে Symbolic Constant  লিখা হয়।


#define name constant
Name এর জাগায় Symbolic Constant টা কি নামে সংঞ্জায়িত করবেন তা লিখবেন এবং constant এর জাগায় Character টা লিখবেন।
মনে রাখতে হবে যে Symbolic Constant এর পরে কোন সেমিকোলন হবে না।
Symbolic name টা বড় হাতের লিখলে ভালো হয়। Identifier থেকে আলাদা করে চেনা যায়। একটা উদাহরন দিয়ে আবার সব  বলছিঃ



এই প্রোগ্রামে #define PI 3.1415926535897 দ্বারা একটি Symbolic Constant লিখা হয়েছে। PI দ্বারা Symbolic Constant টির নাম এবং 3.1415926535897 দ্বারা  Character টি নেওয়া হয়েছে।
প্রোগ্রামের ভিতর যখন 3.1415926535897 লিখা প্রয়োজন তখন PI লিখলেই হবে। কারন আমরা PI এর মান 3.1415926535897 প্রোগ্রামের প্রথমেই ধরে নিয়েছি। এটা তো ছোট প্রোগ্রাম। বড় প্রোগ্রাম হলে এবং 3.1415926535897 এর মত বড় সখ্যা বার বার লিখা লাগলে তখন  Symbolic Constant ব্যবহার করা হয়।

এখানে একটি বৃত্তের পরিধি পরিমাপের জন্য প্রোগ্রাম লিখা হয়েছে। বৃত্তের ব্যাসার্ধ r হলে আমরা জানি পরিধি=π*r*r    ।  r এর যেকোন মান আমরা input হিসেবে নিয়ে  বৃত্তের পরিধি পরিমাপ করতে পারি।



Sunday, December 8, 2013

C প্রোগ্রামিং দ্বিতীয় অধ্যায় - Data Type এর লিমিট: - PART 6

কোন ধরনের ডাটা টাইপের জন্য কম্পিউটার কত মেমোরি নিয়ে থাকে একটু চোখ বুলিয়ে নেই:
  • integer ভেরিয়েবল এর জন্য মেমোরি প্রয়োজন: ৪ বাইটস
  • character ভেরিয়েবল এর জন্য মেমোরি প্রয়োজন: ১ বাইট
  • float ভেরিয়েবল এর জন্য মেমোরি প্রয়োজন: ৪ বাইটস
  • double ভেরিয়েবল এর জন্য মেমোরি প্রয়োজন: ৮ বাইটস
ডাটা টাইপ এর মেমোরি এবং ইনপুট লিমিট: 
Integer Data Type এর লিমিট:
নিচের চিত্রে দেখো:
তারমানে আমাদের (Plus,Minus)2147483648 এর চেয়ে বড় কোন সংখ্যা প্রিন্ট করতে চাইলে অবশ্যই সেটি  double Type এর ভেরিয়েবল নিতে হবে। কারন double এর Memory, Integer এবং Character Type এর ভেরিয়েবল এর মেমোরির চেয়ে অনেক বেশী। আশা করি ব্যাপারটি মাথার ভেতর নিয়ে নিয়েছো।
নিচের প্রোগ্রামটি লিখে রান করিয়ে দেখতে পারো:(কোড ৬.১)


#include 
int main()
{
      int a;
      a = 2015454455454;
      printf("%d\n", a);
      return 0;
}




আউটপুট কি আসে?
1114793630
তাইনা? কিন্তু আমরা কি দিয়েছি ইনপুট?
2015454455454
এর কারন কি?
কারন:
2015454455454 > 2147483648
আশা করি ব্যাপারটা বুঝে গেছো।
তাহলে উপরের কোড টিকে Double ডাটা টাইপ এ নিয়ে রান করে দেখ।
যদি পারো তাহলে নিজেকে একটা বাহবা দিয়ে নিতে পারো। না পারলে নিচের কোড টা দেখতে পারো:
Double Data Type:(এই কোড টা double ডাটা টাইপ দিয়ে করা-(কোড ৬.১.১))
আশা করি উপরের ব্যাখ্যাটা বুঝে গেছো।
এবার নিচের প্রোগ্রামটি লেখ এবং রান করাও:(কোড ৬.২)


#include 
int main()
{
    double a,b;
    int c;
    a = 1021212255;
    b = 2015454455;
    c = a + b;
    printf("%d\n", c);
    return 0;
}




কি আসে আউটপুট?
-2147483648
কিন্তু আউটপুট তো আসার কথা:
3036666710.000000
তাইনা?
দেখো, এই পর্বের শুরুতে আমি একটা উদাহরন দিয়েছি। সেটা যদি মনে থাকে তাহলে দেখো উপরের কোড এ আমি কি করেছি।
প্রথমে a,b দুটো ভেরিয়েবল নিলাম double Type এর যার মেমোরি ৮ bytes । আবার আরেকটা ভেরিয়েবল c নিলাম Integer Type এর যার মেমোরি 4 Bytes। তারপর a, b এর জন্য দুটো আলাদা আলাদা মান নিলাম।


a = 1021212255;
b = 2015454455;




এখানে দেখো আমি a,b এর মান double Type(৮ Bytes এর মেমোরি, তাই এত বড় সংখ্যাও ফাকা মেমোরিতে রাখতে পারবে) এর ভেরিয়েবল নিলাম। এখন এই দুটো ভেরিয়েবল এর মান যোগ করলাম। কত হল?
3036666710.000000
এই মানটা আমি কোথায় রাখতে বলেছি?
c নামের একটা ভেরিয়েবল এ। কিন্তু c এর মেমোরি মাত্র 4 বাইটস। তাই না? আর double এর মেমোরি ৮ বাইটস। তাহলে ৮ বাইটস এর মেমোরির সংখ্যা কিভাবে  4 বাইটস এর মেমোরিতে সংরক্ষন করতে পারবে???
পারবে না যদি না সংখ্যা গুলো double হয়েও 2147483648 এর ছোট না হয়। তাই যখন ই a,b এর মান যোগ করার পর c ভেরিয়েবল এ রাখতে গেলো, তখন ই সমস্যা হয়ে গেলো। দেখা গেলো 3036666710.000000 সংখ্যা টি Integer এর মেমোরির চেয়ে অনেক বড়। আর তাই এই গারবেজ সংখ্যা প্রিন্ট করেছে।
তার মানে, এখন আমি যদি উপরের কোড টিকে ঠিক করে রান করাতে চাই তাহলে কি করতে হবে?
c ভেরিয়েবল টা integer না নিয়ে double এ নিতে হবে।
অর্থাৎ দুটি বা একাধিক বড় জিনিসকে আমরা ছোট কোন জায়গায় রাখতে পারব না, কিন্তু ছোট জিনিস গুলোকে কিন্তু বড় জায়গায় রাখতে পারি। তাই না??
তাহলে কোড ৬.২ ঠিক করে রান করা তো। যদি না পারো তাহলে নিচের কোড টা দেখো:
এখন নিচের কোড টা লিখে রান করে দেখো:(কোড ৬.৩)

#include 
int main()
{
       double a,b;
       int c;
       a = 50;
       b = 50;
       c = a * b;
       printf("%d\n", c);
       return 0;
}




আউটপুট কি আসে?
2500
তাইনা? কিন্তু আগের কোড(৬.২) আর এই কোড(৬.৩) এর মধ্যে পার্থক্য কোথায়। এই কোড এ গারবেজ মান আসল না কেন?
কারন:
দেখো, আগের কোড এ a,b এর যে মান নেয়া হয়েছে, তাদের যোগফল কিন্ত Integer Type ভেরিয়েবল এর মানের চেয়ে অনেক বড় কিন্তু কোড ৬.৩ এ a,b এর যে মান নেয়া হয়েছে, তাদের যোগফল কিন্ত Integer Type ভেরিয়েবল এর মানের চেয়ে অনেক ছোট, তাই a,b double Type এর ভেরিয়েবল হলেও এদের মান এবং এদের যোগফলের মান ছোট হওয়ায় ইন্টিজার টাইপ ভেরিয়েবল c এর মধ্যে রাখা সম্ভব হয়েছে। আশা করি বুঝেছো কি বলেছি। তুমি a,b এর বিভিন্ন মান নিয়ে পরীক্ষা করে দেখতে পারো। তাহলে ব্যাপার টা আরো পরিস্কার হবে।
নিচের কোড টি লিখে রান করাও:

#include 
int main()
{
      int a,b,c;
      a = 50;
      b = 100;
      c = a / b;
      printf("%d\n", c);
      return 0;
}




আউটপুট কি এসেছে?
0
কিন্ত আউটপুট কি আসার কথা?
0.5
এর কারন কি? নিচের ছবিতে দেখো:
Integer Type ভেরিয়েবল "." দশমিক এর পরে কি আছে সেটা আর মেমোরিতে নিবে না। তাই আউটপুট হিসেবে 0 এসেছে।
নিচের কোড টা লিখে রান করাও:

#include 
 
int main()
{
      int a,b,c;
      a = 10;
      b = 4;
      c = a / b;
      printf("%d\n", c);
      return 0;
}




আউটপুট: 2
কারন: 10/4 = 2.5
যেহেতু এই সংখ্যাটি একটি ভগ্নাংশ এবং আমরা ভেরিয়েবল নিয়েছি Integer Type তাই "." দশমিক এর পরের অংশ আর মেমোরিতে রাখবে না।
তাই 2.5 এর জায়গায় মেমোরিতে 2 রেখে পরে তা প্রিণ্ট করে দিয়েছে।

বাসায় প্র্যাকটিস করার জন্য কিছু কোড:
প্র্যাকটিস কোড: ১

#include 
 
int main()
{
      int a,b,c;
      a = 100;
      b = 4.5;
      c = a / b;
      printf("%d\n", c);
     return 0;
}




প্র্যাকটিস কোড: ২*

#include 
int main()
{
      double a,b;
      int c;
      a = 154555;
      b = 454544;
      c = a * b;
      printf("%d\n", c);
      return 0;
}




* ২নং কোড এর আউটপুট গারবেজ সংখ্যা আসে। ঠিক কিরে কমেন্ট এ তোমার করা কোড টি লিখো।
আগামী পর্বে Character Type Variable নিয়ে আলোচনা করা হবে।

C প্রোগ্রামিং তিন অধ্যায় - Scanf এর মাধ্যমে - Data Manually Input নেওয়ার নিয়ম- PART 1

Data Manually Input নেয়াঃ
আগের পর্বগুলোতে আমরা কোন ভেরিয়েবল এর মান নির্দিষ্ট করে দিতাম। তারপর স্টেটমেন্ট লিখে এই ডাটার জন্য আউটপুট করতাম।নিচের কোডটির মত কোড আমরা আগেও করেছিঃ


#include 
int main()
{
      int a,b,c;
      a = 100;
      b = 200;
      c = b/a;
      printf("%d %d %d", a,b,c);
      return 0;
}



উপরের কোডটিকে কোডব্লকস এ লিখে রান করাও।
আউটপুটঃ
100 200 2
এখন থেকে আমরা আর কোন ভেরিয়েবল এর মান নির্দিষ্ট করে দিব না। উপরের কোড এ দেখো, a = 100 এবং b = 200 দেয়া আছে। এখানে a এবং b এর মান নির্দিষ্ট। যদি এই মান পরিবর্তন করতে হয় তাহলে উপরের কোড টিকে আবার এডিট করে মান পরিবর্তন করতে হবে।
তাই এখন থেকে আমরা ভেরিয়েবল এর মান গুলো ম্যানুয়েলি নিবো। মানে কোড লিখে রান করাবো। রান করার পর আমরা ভেরিয়েবল এর মান ইনপুট দিব। তারপর কোড সেই মানগুলো যোগ বিয়োগ গুন ভাগ যা তুমি বলে দিবে সেটা করে তোমাকে আবার আরো একটা মান প্রিন্ট করে দেখাবে।
তাহলে চল শুরু করি ম্যানুয়েলি ভেরিয়েবল এর মান input নেয়া।
নিচের প্রোগ্রামটি লিখে রান করাওঃ


#include 
int main()
{
      int a,b,c;
      printf("Input Value of a : ");
      scanf("%d", &a);
      printf("Input Value of b : ");
      scanf("%d", &b);
      c = a+b;
      printf("\nTotal = %d+%d=%d\n",a,b,c);
      return 0;
}


এখন খেয়াল করো, প্রথমে একটা লাইন প্রিন্ট হয়েছে, যেটাতে বলা আছে a এর জন্য মান ইনপুট দিতেঃ
নিচের লাইনের মতঃ
Input Value of a :
এখন তুমি a এর মান 100 দাও। enter চাপো। এখন আরেকটা লাইন প্রিণ্ট হয়েছে, যেটাতে বলা আছে b এর জন্য মান ইনপুট দিতেঃ
নিচের লাইনের মতঃ
Input Value of b :
এখন তুমি b এর মান 200 দাও। enter চাপো।
এখন দেখো, কি প্রিন্ট হয়েছে?
Total = 100+200=300
তাইনা???????
হুম, তাই।
নিচের ছবিতে দেখতে পারোঃ
এখন একটা নতুন জিনিস শিখেছো। কিভাবে ডাটা ইনপুট নিতে হয়।
উপরের কোড এ দেখোঃ
  1. scanf("%d", &a);
  2. scanf("%d", &b);
এই রকম দুটি লাইন আছে।
scanf এর কাজ হল নির্দিষ্ট একটা ভেরিয়েবল এর জন্য Value Input নেয়া যেটাকে প্রোগ্রামিং এর ভাষায় value assign করা বলা হয়ে থাকে।
উপরের প্রথম লাইনে দেখো
  1. Scanf("%d", &a);
এখানে তুমি %d দিয়ে বলে দিচ্ছো Integer Input নিতেছো। আর &a দিয়ে বলে দিচ্ছো এই %d তে a এর মান Assign করতে। আশা করি বুঝতে পেরেছো।
এই scanf এর কাজ হল ইনপুট নেয়া আর printf এর কাজ হল প্রিন্ট করা।
তাহলে চল একটা ভুল কোড করি এবং দেখি scanf এর মাধ্যমে যে ভেরিয়েবল এর মান Assign করব সেটার আগে & চিন্‌হ না দিলে কি হয়ঃ
নিচের কোড টি লিখ এবং রান করাওঃ

#include 
int main()
{
      int a,b,c;
      printf("Input Value of a : ");
      scanf("%d", &a);
      printf("Input Value of b : ");
      scanf("%d", b);
      c = a+b;
      printf("\nTotal = %d+%d=%d\n",a,b,c);
      return 0;
}


উপরের কোড এ দেখো
  1. scanf("%d", b);

দিয়েছি কিন্তু b এর আগে & দেয়া হয়নি। এখন কোড টি রান করে দেখো...
রান করানোর পর তুমি তোমার ইচ্ছে মত a আর b এর মান ইনপুট দাও...
a আর b এর মান ইনপুট দিয়েছো। আর একটু পরে কি দেখলে?
কিছু বুঝেছো?? কারন কি?
এখানে দেখো, scanf এর মধ্যে ভেরিয়েবল ডিক্লেয়ার করেছি %d দিয়ে, তারপর বলে দিয়েছি a এর মান Assign করার জন্য। কিন্তু a এর পুর্বে & দেইনি। তাই কম্পিউটার কোড রান করাতে গিয়ে যখন দেখল scanf ফাংশনের মধ্যে ভেরিয়েবল এর জন্য &(এম্পাচেডার) নেই তখন কম্পিউটার b এর জন্য মান কোথাও রাখতে পারেনি তাই এই কোড কাজ করা বন্ধ করে দিয়েছে, তাহলে a এর মান নেবার সময় বন্ধ হল না কেনো?? কারন a এর সামনে & ছিলো তাই a এর মান ইনপুট নিয়েছে।
আশা করি উপরের এই scanf ফাংশনের কাজ বুঝতে পেরেছো।
তাহলে চল নিচের কোডটি কোডব্লকস এ লিখতে রান করাওঃ

#include 
int main()
{
      int a,b,c;
      scanf("%d %d %d", &a,&b,&c);
      printf("%d %d %d\n",a,b,c);
      return 0;
}


এখন ইচ্ছে হলে তুমি ইনপুট নিচে নিচে ও দিতে পারো আবার পাশা পাশি একটা স্পেস দিয়েও দিতে পারো।
মানেঃ
5
10
15
অথবা
5 10 15
দুইভাবে ই ইনপুট দিতে পারো।
আউটপুট কি আসবে??
5 10 15
এখন নিচের কোড টি লিখে রান করাওঃ

#include 
int main()
{
      int a,b,c;
      scanf("%d %d %d", &a,&b,&c);
      printf("%d %d %d\n",a+b,b-c,c*a);
      return 0;
}


ইনপুট দাওঃ
10 15 20
আউটপুটঃ
25 -5 200
এতক্ষন শুধুমাত্র Integer নিয়ে কোড লিখলাম, এখন Double, float, Character Type ভেরিয়েবল নিয়ে কিছু কোড প্র্যাকটিস করা যাক...
নিচের কোড টি লিখে রান করাওঃ

#include 
int main()
{
    float a,b,sum;
    scanf("%f %f", &a,&b);
    sum = a+b;
    printf("%f\n",sum);
    return 0;
}


আউপুটঃ(ইনপুট দাও নিজের মত আমি ১০০ আর ২০০ দিয়েছি)
Character ইনপুটঃ

#include 
int main()
{
      char a;
      scanf("%c", &a);
      printf("%c", a);
      return 0;
}


উপরের কোড গুলো প্র্যাকটিস করতে থাকো।