পাতা

সহজ গণিত শিক্ষা

ক্লাসের সবার সাথে তো পরিচিত হওয়া হল। এবার খানিকটা পড়াশোনা শুরু করা যাক।

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

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

কম্পিউটারের এই ভ্যারিয়েবল আবার কয়েক রকমের হয়। আমরা সচরাচর যেই ভ্যারিয়েবল ব্যবহার করে কাজ করি, সেটার নাম int। এটা হচ্ছে, integer বা পূর্ণসংখ্যার সংক্ষিপ্ত রূপ। নাম দেখেই বোঝা যাচ্ছে, এই ভ্যারিয়েবল পূর্ণসংখ্যা রাখার ক্ষেত্রে ব্যাবহার করা হয়। তবে, int ভ্যারিয়েবলে লেখার জায়গা বেশ ছোট। এখানে 32767 এর চেয়ে বড় বা -32768 এর চেয়ে ছোট সংখ্যা লিখে রাখা যায় না। তার চেয়ে বড় সংখ্যা রাখার জন্য আমরা চাইলে long int বা long long int নামের ভ্যারিয়েবল ব্যবহার করতে পারি। তাহলে আমরা একটা প্রোগ্রাম লিখে ফেলি, যার কাজ দু’টো সংখ্যা যোগ করা।
  1. #include <stdio.h>
  2. int main(){
  3.  int a, b, c;
  4.  a = 5;
  5.  b = 6;
  6.  c = a + b;
  7.  printf(“Summation of a & b is c.”);
  8. }
এই প্রোগ্রামটা লিখে ফেল। কিন্তু, রান একটু পরে করো। আগে আমরা একটু বুঝে নিই এখানে আসলে করাটা হয়েছে কী। প্রথমেই আমরা লিখেছি, int a, b, c; এটা দিয়ে বোঝানো হয়েছে আমার তিনটা int ধরণের ভ্যারিয়েবল লাগবে যাদের নাম আমি দিলাম a, b আর c। আমরা চাইলে অন্য কোন নামও দিতে পারতাম। এক অক্ষরের না দিয়ে abul, babul টাইপের কিছুও দিতে পারতাম। তাতে কোন সমস্যা হত না। এখানে a, b, c কেবলই তিনটা নাম। এদের আর কোন গুরুত্ব নেই। তার পরের লাইনে যখন আমরা লিখেছি a = 5; এটা তারা বুঝিয়েছে a ভ্যারিয়েবলের মান এখন 5 অর্থাৎ a নামের আমরা যে লেখার জায়গাটা তৈরি করেছি, সেখানে এখন লেখা আছে 5। একই ভাবে পরের লাইনে যখন আমরা লিখেছি b = 6, তখন b ভ্যারিয়েবলের মান হয়ে গেছে 6। আমরা যোগটা মূলত করেছি তার পরের লাইনেই। একটা জিনিস মাথায় রাখতে হবে, আমরা যখনই a = 5 এই লাইনটা লিখেছি, তারপরের কোন লাইনে a লেখা আর 5 লেখার মধ্যে আসলে কোন পার্থক্য নেই। একই ভাবে a এর মান যদি অন্য কিছু হত, তাহলে a লিখলে সেই মানটাকেই বোঝাতো। তাই, আমরা যখন লিখেছি c = a + b; সেটার মানে আসলে c = 5 + 6; তারপরের কাজটুকু আগের লাইনগুলোর মতই। c এর মান হয়ে গেছে 5 আর 6 এর যোগফল অর্থাৎ 11। আর তারপরের লাইনে আমরা সেটাই স্ক্রিনে প্রিন্ট করেছি। এবার প্রোগ্রামটা রান করিয়ে ফেল।

আউটপুট যা আসার কথা ছিল, তা কী এসেছে? না স্ক্রিনে দেখা যাচ্ছে - Summation of a & b is c. অর্থাৎ a, b, c এর জায়গায় তাদের মান আসেনি। কেন আসেনি? আমরা তো একটু আগেই বললাম, a = 5 লাইনটা লেখার পর যেকোন জায়গায় a লেখা আর 5 লেখা একই জিনিস। একই কথা b আর c এর ক্ষেত্রেও প্রযোজ্য। তাহলে স্ক্রিনে সেটা হচ্ছে না কেন? আসলে আমরা শুরু থেকেই বারবার বলে আসছি কম্পিউটার জিনিসটা একটা বোকার হদ্দ। তাকে ধরে ধরে সব বুঝিয়ে না দিলে সে কিচ্ছু বুঝতে পারে না। সে যখন printf এর ভেতরে a, b বা c পেয়েছে, তখন বুঝতে পেরেছে তাকে এটা স্ক্রিনে প্রিন্ট করতে হবে। কিন্তু, এই a মানে ভ্যারিয়েবল a না’কি ইংরেজি অ্যালফাবেটের a সেটা সে বুঝতে পারেনি। তাই, সরাসরি স্ক্রিনে প্রিন্ট করে দিয়েছে। সুতরাং, কম্পিউটারকে এটা বুঝিয়ে দিতে হবে যে, আমরা আসলে চাইছি ওখানে a ভ্যারিয়েবলের মানটা প্রিন্ট করতে। সেটা আমরা একটা বিশেষ সিগনেচার দিয়ে করতে পারি। সিগনেচারটা হচ্ছে %d। printf ফাংশনটা প্রিন্ট করতে করতে যখনই %d পাবে তখনই বুঝে যাবে এখানে এই লেখাটা প্রিন্ট করা যাবে না বরং তার বদলে একটা ইন্টিজার ভ্যারিয়েবলের মান প্রিন্ট করতে হবে। printf ফাংশনের মধ্যে আমরা যতবার %d দেব, ততবারই সে সেখানে একটা ইন্টিজারের মান প্রিন্ট করবে। তবে, কোথায় কোন ইন্টিজার প্রিন্ট করবে, সেটার লিস্ট আমাদের printf() ফাংশনের মধ্যেই সিরিয়ালি দিয়ে দিতে হবে। আমাদের ওপরের ফাংশনটার শুধু একটা লাইন বদলে দিই –


  1.  printf(“Summation of %& %d is %d., a, b, c);


এবার যদি প্রোগ্রামটা রান করি, তাহলে আউটপুট দেখা যাবে - Summation of 5 & 6 is 11.

কংগ্রাচুলেশন! তুমি সিস্কুলে সফলভাবে যোগ করা শিখে গেছ। আরেকটু ঘুরিয়ে বলা যায়, তুমি সফলভাবে যোগ করানো শিখে গেছ। তাহলে বিয়োগ করার প্রোগ্রামটাও লিখে ফেল। কিছুই না, শুধু + চিহ্ন এর জায়গায় যদি – চিহ্ন বসিয়ে দাও তাহলেই কম্পিউটার প্রথম সংখ্যা থেকে দ্বিতীয় সংখ্যা বিয়োগ করে ফেলবে। আমি যদি তোমাকে বলে দেই কম্পিউটার * চিহ্ন দিয়ে গুণ করা বোঝে, তাহলে তুমি ধুপধাপ দু’চারটা গুণ করার প্রোগ্রামও লিখে ফেলতে পারার কথা। আর কম্পিউটার ভাগ বোঝে / চিহ্ন দিয়ে। তাহলে ভাগের প্রোগ্রামটাও কি লিখে ফেলবে? বিরক্ত হয়ে যাচ্ছ? কী একটা মাত্র প্রোগ্রাম লিখে তোমাকে এতগুলো করতে বলায়! আচ্ছা, ভাগের প্রোগ্রামটা তাহলে আমরা মিলেই করে ফেলি। একটা ভাগের প্রোগ্রাম লিখে ফেলা যাক –

  1. #include <stdio.h>
  2. int main(){
  3.  int number1 = 128;
  4.  int number2 = 16;
  5.  int result = number1/number2;
  6.  printf(%d divided by %d is equal to %d.”, number1, number2, result);
  7. }

ওপরের প্রোগ্রামটা রান করলে আউটপুট দেখা যাবে,128 divided by 16 is equal to 8. তারমানে আমাদের কম্পিউটার ঠিকমত ভাগ করতে পারে। এবার number1 এর মানটা একটু বদলে 136 করে দাও তো। প্রোগ্রামটা রান না করেই বলো দেখি আউটপুট কত হবে? চাইলে খাতাকলমে ভাগটা করে দেখতে পারো। উত্তর কত? 8.5? এবার প্রোগ্রামটা রান করো। অবাক কাণ্ড! স্ক্রিনে লেখা দেখাচ্ছে - 136 divided by 16 is equal to 8. তার মানে কম্পিউটার ভাগ করতে পারে না? উঁহু! ব্যাপারটা তেমন নয়। আমরা শুরুতেই বলেছিলাম int হচ্ছে এমন এক ধরণের ভ্যারিয়েবল, যার মধ্যে আমরা পূর্ণসংখ্যা লিখতে পারব। যদি ভ্যারিয়েবলের মান কোন কারণে দশমিকে চলে যায়, ইন্টিজার ভ্যারিয়েবল সুন্দরমত ল্যাজটুকু কেটে ফেলে দিয়ে শুধু পূর্ণসংখ্যাটুকু লিখে রাখে। তাই আমাদের রেজাল্ট যদি 8.999999 ও হয়, তবুও সেটা দেখাবে 8। কোন ল্যাজ রাখবে না।

তাহলে কী করা যায়? আমরা কী কম্পিউটারে দশমিকের অংক করতে পারব না? উঁহু! ব্যাপারটা তেমন নয়। সেক্ষেত্রে আমাদের যেটা করতে হবে তা হচ্ছে, শুধু এমন ধরণের ভ্যারিয়েবল নিতে হবে যার মধ্যে দশমিক সংখ্যাও লেখা যায়। এমন ধরণের ভ্যারিয়েবলের নাম হচ্ছে double. আমরা যদি শুধু আগের প্রোগ্রামটায় int এর জায়গায় double লিখে দিই, তাহলেই সেই ভ্যারিয়েবলে আমরা দশমিক সংখ্যা রাখতে পারব। আর printf() ফাংশনে %d এর জায়গায় %lf লিখলেই সেখানে দশমিক সংখ্যা দেখাবে।

  1. #include <stdio.h>
  2. int main(){
  3.  double number1 = 136;
  4.  double number2 = 16;
  5.  double result = number1/number2;
  6.  printf(%lf divided by %lf is equal to %lf.”, number1, number2, result);
  7. }

এবার আমাদের আউটপুট আসবে 128.000000 divided by 16.000000 is equal to 8.500000. যেটা আমরা চাইছিলাম।

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

  1. #include <stdio.h>
  2. int main(){
  3.  double result = 136.0/16.0;
  4.  printf(%lf divided by %lf is equal to %lf.”, 136.0, 16.0, result);
  5. }

খেয়াল করার মত বিষয় হচ্ছে, এবার কিন্তু আমরা 136 আর 16 না লিখে, লিখেছি 136.0 আর 16.0। কারণ, ওই যে শুরুতেই বললাম, কম্পিউটার একটা গাধা। আমরা যদি পূর্ণসংখ্যা লিখে রাখি তাহলে কম্পিউটার বুঝবে না যে আমার দশমিকের পরের অংশও দরকার। সে সুন্দরমত পূর্ণ সংখ্যার ভাগ করে দশমিকের পর ল্যাজটুকু ফেলে দেবে। তাই পরের দশমিক শূণ্য দিয়ে বুঝিয়ে দিলাম, আমাদের আসলে দশমিক সংখ্যায় উত্তরটা দরকার। অবশ্য, আমাদের এই প্রোগ্রামটা করতে এই একট ভ্যারিয়েবলও না হলেও চলতো। আমরা কোন ভ্যারিয়েবল ছাড়াই চাইলে এই প্রোগ্রামটা লিখে ফেলতে পারি নিচের মত করে।

  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  printf(%lf divided by %lf is equal to %lf.”, 136.0, 16.0, 136.0/16.0);
  5. }

আজকের ক্লাস এখানেই শেষ। ওহ! তোমার হোমওয়ার্ক লাগবে? আচ্ছা, 596 এর নামতা প্রিন্ট করে ফেলো তো ঝটপট।

No comments:

Post a Comment