Fortran এর কথা – ২

 

আমি যখন মেইন প্রোগ্রাম লিখি তখন PROGRAM আর END PROGRAM লিখি না। এতে করে প্রোগ্রামের রেঞ্জ বেড়ে যায়। ঝামেলা কম হয়। আজকে দেখাবো Loop কাকে বলে। এবং কেন এটা প্রোগ্রামিং এর একটা অটুট অংশ। এটা না থাকলে প্রোগ্রামিংই হবে না। আমি সারাজীবন যত প্রোগ্রাম লিখেছি তার ৯৯% এর মধ্যে লুপ আছে। কিন্তু এটাকে কেন তোমরা ভয় পাও জানি না। অথচ এটা না বোঝার কিন্তু কিচ্ছু নেই। আমার নিজেকে দিয়ে বলি, আমি লুপের আগাগোড়া কিচ্ছু বুঝতাম না। পড়ার পরেও বুঝি নাই। যখন আস্তে আস্তে ২ বার পড়লাম, তখনি ব্যাপারটা কিলিয়ার হয়ে গেল। এখন আমি নিজেই বানিয়ে লেখার সামর্থ্য রাখি। এভাবেই আজকে শেখানোর চেষ্টা করব।

আগেই বলে দিচ্ছি, আমি যেভাবে শেখাই সেটা সবার পছন্দ না। আমি একটু মজা করতে গেলে মানুষ ভুল বুঝে, তাই যাদের রঙ্গ রস কম, তাঁরা দূরে থাকো। আর লুপ তো জিলাপির প্যাঁচ। এটাকে যতোই সোজা করতে চাই, একটু তো পেঁচাবেই।

কি দিয়ে শুরু করব? লুপ শেখার সবচেয়ে সহজ বিদ্যা হচ্ছে সিকুয়েন্স অ্যান্ড সিরিজ থেকে একটা দুটো সিরিজ নিয়ে তার উপরে কোড লেখা। অন্তত বোঝার জন্যে এরচেয়ে সোজা বুদ্ধি তো দেখি না। আমি গাউসের মৌলিক সুত্র টা দিয়ে শুরু করব।

যোগ কর তোঃ ১+২+৩+৪………+n পর্যন্ত। [এটা একটা ডাইভারজেন্ট সিরিজ]
এবার এটা করঃ ১+১/২+১/৩+১/৪+………+১/n [সবাই কি জানো এটার ইনফাইনাইট সাম হয় না? মানে এই সিরিজটা যে ডাইভারজেন্ট? পি-সিরিজ দেখে নিও, সোজা জিনিস] আমি ধরে নিচ্ছি সবাই নতুন করে শিখছে, তাই পুরো কোডটাই লিখে দিচ্ছি।

!THIS IS A COMMENT
!Anything that follows this exclamation mark is called a comment
!This does not affect your program
!because compiler does not compile these lines

INTEGER N  !number of iterations to do
INTEGER I  !loop index
INTEGER SUM !this is the variable that we will store the sum into

WRITE(*,*)”HOW MANY TERMS TO ADD?”
READ(*,*)N

!see that n is a finite number, we cannot sum infinite numbers
!First let us set the initial sum to be 0, that means we have
!not added anything as of yet

SUM=0
DO I=1,N,1
!look that the 3rd portion is unnecessary here, because it is always 1 !by default

SUM=SUM+I
!First Step: Sum = 0+1 = 1
!Second Step: Sum = 0+1+2 = 3
!and so on

END DO

WRITE(*,*)”THE SUM IS ”,SUM

END

প্রথম লাইনগুলোতে ডিক্লেয়ার করেছি কি জিনিস লাগবে (ভ্যারিয়েবল), কেমন ধরনের জিনিস লাগবে (ভ্যারিয়েবল টাইপ)। ! চিহ্নের পরে যা লিখেছি তাঁদের বলা হয় কমেন্ট। প্রোগ্রাম লেখার সময় কমেন্ট করলে নিজের সুবিধার পাশাপাশি অন্য যে কেউ পড়লে তার বুঝতে সুবিধা হয়। লক্ষ্য করোঃ যেহেতু এখানে আমরা PROGRAM কথাটা লিখে শুরু করি নি সেহেতু আমাদের প্রোগ্রামের স্কোপ এবং আউটরিচ বেড়ে গেছে। কিভাবে বাড়ল? ফোরট্রানে I,J,K,L,M,N এই অক্ষরগুলো বাই ডিফল্ট INTEGER হিসেবে সেট করা। যতক্ষণ না অন্য কোন ভ্যারিয়েবল হিসেবে এদের ডিক্লেয়ার করা হচ্ছে ততক্ষণ এরা INTEGER হিসেবেই থাকবে।

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

REAL SUM
SUM=0

WRITE(*,*)”HOW MANY TERMS TO ADD?”
READ(*,*)N

DO I=1,N
     SUM=SUM+1/REAL(I)
END DO

WRITE(*,*)”THE SUM IS ”,SUM

END

দেখ যে আমি এখানে I এবং N কে ইন্টেজার হিসাবে ডিক্লেয়ারই করি নি। কারণ এটা বাই ডিফল্ট ইন্টেজারেই আছে। এখানে ১/n এর মান যে ডেসিম্যালে আসবে সেটা নিশ্চয় আর বলতে হবে না। তাই ভ্যারিয়েবল টা এখানে রিয়েল হতে হবে। নাহলে কিন্তু এরর দেখাবে আর তোমরা মাথার চুল ছিড়ে ফেলবে, কেন আমার প্রোগ্রাম মিলছে না বলতে বলতে। এটাও লক্ষ্য কর যে আমি REAL(I) কথাটা ব্যবহার করেছি। এটার কাজ হলো যেকোনো ডেটা টাইপকে (বিশেষ করে ইন্টেজারকে) রিয়েল টাইপে পরিবর্তন করা। তাহলে 1/REAL(I) mixed mode arithmetic ব্যবহার করে রিয়েল হয়ে যায়, এবং সেটাই REAL টাইপের SUM ভ্যারিয়েবলের সাথে যোগ হয়। বেশি কঠিন লাগলে কমেন্ট করে দিয়ো আমি আরও ব্যাখ্যা করার চেষ্টা করব।

আজকে ডু লুপের কিছু বেসিক কাজ কর্ম দেখালাম। এখনও কিন্তু শেষ হয়নি। পরের পর্বে চলতে থাকবে।

Awnon Bhowmik
Author: Awnon Bhowmik

I know very little to be proud about it. Mathematics enthusiast, possess a lust for mathematical/computational knowledge

Permanent link to this article: https://www.borgomul.com/awnon/2399/


মন্তব্য করুন আপনার ফেসবুক প্রোফাইল ব্যবহার করে

1 comments

  1. সহজভাবে উপস্থাপনের জন্য ধন্যবাদ । আমাদের মত অনেকের ই উপকার হবে ।

মন্তব্য করুন