Showing posts with label C প্রোগ্রামিং - দ্বিতীয় অধ্যায় - ডাটা ইনপুট এবং আউটপুট. Show all posts
Showing posts with label C প্রোগ্রামিং - দ্বিতীয় অধ্যায় - ডাটা ইনপুট এবং আউটপুট. Show all posts

Wednesday, August 20, 2014

C প্রোগ্রামিং দ্বিতীয় অধ্যায় -size of data type


আজ আমরা দেখব কোন ডাটা টাইপ কত জায়গা নেয় । এই জন্য আমাদের একটা function use করতে হবে ।
sizeof(data type)..................
#include<stdio.h>
int main()
{
int a;
a=5;
printf("%d",sizeof(int));
return 0;
}


Capture
এখানে  a একটি variable , যেটা int টাইপ এবং এর সাইজ ৪ বাইট জায়গা নিয়ে আছে।  



#include<stdio.h>
int main()
{
double a;
a=5.555;
printf("%d",sizeof(double));
return 0;
}

ss


এখানে  a একটি variable , যেটা double টাইপ এবং এর সাইজ ৮ বাইট জায়গা নিয়ে আছে।  

Saturday, January 4, 2014

C প্রোগ্রামিং - দ্বিতীয় অধ্যায় - Type Casting - PART - 9

Type Casting: বিভিন্ন গানিতিক কাজ করার পূর্বে আমাদের type casting সম্পর্কে জানা দরকার। ধরুন একটি integer type (int) variable এর মধ্যে একটি float type variable এর value assign করতে চান।



তখন int variable এর মধ্যে float variable এর মানের শুধুমাত্র integer part টা জমা হয়।
Consider following statements in a program.
int a;
float b=5.3;
a =b; //এই statement এর পর a এর মান হবে 5
b=a; // এই statement এর পর a এর মান হবে 5.00

এগুলো হলো auto type casting. তবে কখনো কখনো manually typecast করা লাগতে পারে।
int a,c,d;
float b=5.3;
c=503;

//a=c%b; এই লাইন টা ভুল কারন b float type variable.
//to do that task

d=(int) b; //manual type casting.
a=c%d;

এখানে d variable এ মান রাখার সময় manual type casting করা হয়েছে। এই কাজটি আরও অনেকভাবে করা যায়।যেমনঃ
int a,c=505;
float b=5.3;
a=c%(int)b; //doing the same thing.

Wednesday, December 11, 2013

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। প্রোগাম  টি রান করালে দেখা যায় যে একটি মাত্র চলক ব্যবহার করা সত্যেও বিভিন্ন যাগায় বিভিন্ন মান প্রিন্ট করে।

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 নিয়ে আলোচনা করা হবে।

Monday, November 11, 2013

C প্রোগ্রামিং দ্বিতীয় অধ্যায় - Character Type Data- PART - 5

Character Type Data:
সাধারনত Character Type Data বলতে A-Z, a-z, 0-9 এবং অন্যান্য চিন্হগুলো (যেমনঃ সেমিকোলন, কোলন এবং এপ্রকার চিন্হ সমুহ ) কেই বুঝিয়ে থাকে।

নিচের দেখতে পারোঃ
☺ ☻ ♥ ♦ ♣ ♠ ♫ ☼ ► ◄ ↕ ‼ ¶ § ▬ ↨ ↑ ↓ → ← ∟ ↔ ▲ ▼ ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d
e f g h i j k l m n o p q r s t u v w x y z { | } ~ ⌂ Ç ü é â ä à å ç ê ë è ï î ì Ä Å É æ Æ ô ö ò û ù ÿ Ö
Ü ¢ £ ¥ ₧ ƒ á í ó ú ñ Ñ ª º ¿ ⌐ ¬ ½ ¼ ¡ « » ░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛ ┐ └ ┴ ┬ ├ ─ ┼ ╞
╟ ╚ ╔ ╩ ╦ ╠ ═ ╬ ╧ ╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪ ┘ ┌ █ ▄ ▌ ▐ ▀ α ß Γ π Σ σ µ τ Φ Θ Ω δ ∞ φ ε ∩ ≡ ± ≥
≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■

উপরের A-Z, a-z, 0-9 এবং অন্যান্য চিন্হগুলো একেকটা Character যখন Data Type Character হবে মানেঃ
আশা করি বুঝতে পেরেছো।
একটা Char Data Type একটা মাত্র Character একবারে প্রিন্ট করতে পারে।
Character Variable এর মান যেভাবে ইনপুট নিতে হয়ঃ
1
2
char a;
a = 'input/Data';
না বুঝতে পারলে নিচের ছবিটি দেখোঃ

ধর, আমরা Integer Data Type এর ক্ষেত্রে a=50 নিয়ে থাকি, কিন্তু Character এর ক্ষেত্রে 50 নিলে কি হবে??
এবার নিচের প্রোগ্রাম টা লিখে রান করাওঃ
1
2
3
4
5
6
7
8
9
#include
int main()
{
      char a;
      a = 'K';
      printf("%c\n", a);
      return 0;
}
আউটপুট কি আসে?
K
তাহলে নিচের প্রোগ্রামটি লিখে রান করাওঃ
1
2
3
4
5
6
7
8
9
#include
int main()
{
      char a;
      a = 'KF';
      printf("%c\n", a);
      return 0;
}
আউটপুট কি আসে?
F

কিন্তু আমি তো ইনপুট হিসেবে KF দিলাম, তাহলে আউটপুট F আসে কেনো??
ব্যাখ্যাঃ
Character Type এর ভেরিয়বল এর মেমোরি কত মনে আছে?? মনে থাকলে খুব ভালো তবে না থাকলেও চলবে কারন আস্তে আস্তে যত বেশী কোড প্র্যাকটিস করবে তত বেশী অভিজ্ঞতা হবে এবং সাথে সাথে কোন ধরনের ডাটার মেমোরি কত সেটা মাথার মধ্যে এমনিতে ই একতা জায়গা করে নিবে। যাদের Character Type এর ভেরিয়েবল এর মেমোরি মনে নেই তাদেরকে আরো একবার মনে করানোর জন্যে বলতে চাই Character Type এর ভেরিয়েবল এর মেমোরি মাত্র 1 Byte ।

একটি বিশেষ কথাঃ
কম্পিউটার এর গননা শুরু হয় ০ থেকে। মানে আমরা ১ থেকে প্রথম উপাদান গুনে থাকি কিন্তু কম্পিউটার ০ থেকে প্রথম উপাদান গুনে থাকে।
Character Type Data ভেরিয়াবল এর মধ্যে একসাথে একটি মাত্র Character Store(সংরক্ষন) করে রাখতে পারে। উপরের কোড এ কম্পিউটার প্রথম উপাদান হিসেবে KF এর মধ্যে F কে নিবে কিন্তু যেহেতু কম্পিউটার একটি মাত্র Character একবারে একটি ভেরিয়েবল এর মাঝে রাখতে পারে তাই F নেবার পর আর K কে সংরক্ষন করতে পারবে না। তাই KF দিলেও শুধুমাত্র F ই প্রিন্ট করবে।

ASCII Value of Character Type Data:

প্রতিটা Character Type Data র জন্য একটি করে Decimal Code অ্যাসাইন করেয়া আছে। মানে একটা Character এর জন্য একটা নির্দিষ্ট মান কম্পিউটারের জন্য আগে থেকেই নির্ধারন করে গেছেন কম্পিউটার সি প্রোগ্রাম এর জনকগন । এই মানগুলোকে ASCII (The American standard code for information interchange) Value বলা হয়ে থাকে। মুলত Character '0'(Zero বা শুন্য) এর ASCII Value ডেসিমাল নাম্বার ৪৮ বা 48 । এভাবে '1' এর ASCII Value 49 বা ৪৯, '২' এর ASCII Value ৫০ বা 50 , 'A' এর ASCII Value ৬৫ বা 65 ।
নিচের ছবিতে ASCII Value গুলোর মান দেখতে পারোঃ (ছবিগুলো নেট থেকে সংগৃহীত)
Letter সমুহের ASCII Value:





Extended ASCII Character's value:







এখন চল তাহলে ASCII Value থেকে Character বা Letter প্রিন্ট করি। দুটো Letter বা Character যোগ ও বিয়োগ করে নতুন Character প্রিন্ট করি।
নিচের প্রোগ্রামটি লিখে রান করাওঃ
1
2
3
4
5
6
7
8
9
#include
int main()
{
     char a;
     a = 97;
     printf("%c\n", a);
     return 0;
}
আউটপুট কি আসে?
নিচের ছবিতে দেখোঃ
আউটপুট আসে ইংরেজী বর্নমালার ছোট হাতের অক্ষর 'a'

এর কারন কি?
প্রথমত আমরা ইনপুট নিয়েছি
1
2
char a;
a = 97;
এবং প্রিন্ট করেছি
1
printf("%c", a);
এখানে a = 97 এবং প্রিন্ট করতে বলেছি Data Type Character। কিন্তু উপরের ASCII Value এর Chart টা ভালো করে দেখলে ই দেখতে পাবে যে a এর ASCII Value 97 । তাই এখানে যখন a = 97 সেক্ষেত্রে 97 কে %c দিয়ে Character Type প্রিন্ট করতে বলায় সে
a
প্রিন্ট করেছে।
তাহলে নিচের কোড টা লিখে রান করাওঃ
1
2
3
4
5
6
7
8
9
10
11
#include
int main()
{
      char x;
      char y;
      x = 'A';
      y = 'z';
      printf("%c\n", y-x);
      return 0;
}
আউটপুট কত আসে?
9
তাইনা?
কিভাবে? নিচে দেখোঃ
প্রথমে আমরা নিয়েছি x = 'A' এবং y = 'z' এবং printf এর ভেতরে বলেছি y-x
এখানে যেহেতু y এবং x character Type variable, তাহলে y-x মানে x এর মান 'z' এর ASCII value থেকে y এর মান 'A' এর ASCII Value বিয়োগ করা।
A এর ASCII Value = 65
z এর ASCII Value = 122
y - x = 122-65 = 57
আর 57 কার ASCII Value??
নিশ্চয়ই 9 এর এবং তাই আউটপুট 9 এসেছে। আশা করি ব্যপারগুলো বুঝতে পেরেছো।