Friday, November 2, 2012

একটুখানি প্রোগ্রামিং (দ্বিতীয় প্রচেষ্টা) -2

Computer programming is an art form, like the creation of poetry or music. -Donald Knuth
গসাগু বের করার একটা সিউডো কোড লেখা হলো আজকে। বার বার ইংরেজী থেকে বাংলায় শিফ্ট করা মুশকিল হয়ে যাচ্ছে। ভাবছি বাংলাতেই লিখে ফেলবো। পরে পুরো অধ্যায় শেষ হলে বাংলাগুলোকে ইংরেজীতে বদলে দিতে হবে। 

১) এখন ফ্লো চার্ট। কিভাবে করা যায় সেটা দেখাবো। 
২) প্রথমে সিম্পল ডিসিশন। এর পরে লুপ দেখবো। লুপের উদাহরণে জোড় সংখ্যার যোগফল বের করা দেখাতে হবে। এটা করতে গিয়ে এ=এ+১ ধরনের লাইনের সঙ্গে পাঠককে পরিচিত করে তুলবো। লুপ কি বোঝাতে হবে। 
৩) আধুনিক প্রোগ্রামিং ভাষায় গো টু বলার বদলে কেন লুপ ব্যবহার করা হয় সেটাও বলতে হবে। 
৪) গো টুর বদলে লুপ আকারে কিভাবে জোড় সংখ্যাদের যোগ করার প্রোগ্রামটি লেখা যেত সেটা লিখতে হবে। 
৫) আমাদের গসাগু বের করার প্রোগ্রামটির ফ্লো চার্টটি দেখতে হবে। এখানে লুপ কোথায় আছে সেটা খুঁজে বের করতে হবে। তারপরে গো-টু কে লুপ আকারে লেখার উপায়টা দেখতে হবে। 
৬) কোনো সংখ্যা প্রাইম কি না সেটা পরীক্ষা করার প্রোগ্রাম দেখতে হবে। 
৭) এটাকে ফাংশন হিসাবে ব্যবহার করে, প্রথম এন টি মৌলিক সংখ্যার যোগফল বের করার প্রোগ্রাম লিখতে শেখাতে হবে।
৮) ফ্লো চার্টকে গো-টু ফর্মালিজমে না লিখে লুপ ফর্মালিজমে লেখার উপায় বের করতে হবে। সেখান থেকে কেন, লুপই সেরা বুদ্ধি সেটা বুঝিয়ে দিতে হবে। 
৯) একটা অতিরিক্ত অধ্যায় করতে হবে যেখানে পাইথন ভাষায় আমাদের এইসব সুডোকোড গুলো লিখতে শেখাতে হবে। কোনো নির্দিষ্ট প্রোগ্রামিং ভাষা শেখার সময় কি কি জিনিশ খেয়াল করতে হয় সেটা এই আলোচনায় থাকবে। অর্থাত, ঐ ভাষায় ভেরিয়েবল কিভাবে লেখে, লুপ কিভাবে লেখে অ্যারে, ফাংশন ইত্যাদি কিভাবে লেখে এসব। তবে আপাতত এই টেকনিক্যালিটি নিয়ে ভাবব না। 

১০) প্রোগ্রামিং চ্যাপ্টারটা শেষ হলে, কম্পিউটার বিজ্ঞান কী, কম্পিউতার ইঞ্জিনিয়ারিং কী, এসবের নানান শাখা প্রশাখা আর কোনটাতে কী কূল জিনিশ করা জায় সেসব লিখতে হবে। এটা হবে শুরুর দিকের চ্যাপ্টার। 

১১) নানান রকম গবেষণায় কম্পিউটার নামক চ্যাপ্টারটা প্রোগ্রামিং চ্যাপ্টারের পরে লিখতে হবে। টুকিটাকি সিমুলেশন দেখানো যেতে পারে। 

১২) কমিউনিকেশন ইনরমেশন থিওরী। 

১৩) প্রোসেসরের গঠন। লজিক। 

 ১৪) বাবা-মাদের জন্য কম্পিউটার! 




এখন আসি আমাদের কাল্পনিক কম্পিউটারটির কাছে। 
[ নীচে নোট] 

গণিতের ফাংশনের কথা আমরা জানি। $f(x,y)=x^2+xy$ যেমন একটা গাণিতিক ফাংশন। f(2,3) এর মান হবে এখানে $2^2+2*3=10$ তাই $f(2,3)=10$ মনে করি আমাদের কাল্পনিক কম্পিউটারে এরকম একটা ফাংশন আছে তার নাম rem এই rem ফাংশন দুইটি সংখ্যা ভাগ করলে কত অবশিষ্ট থাকে সেটা বের করে। অর্থাৎ $rem(16,6)$ এর মান 4। কারণ ১৬ কে ৬ দিয়ে ভাগ করলে অবশিষ্ট থাকে 4। আগের f ফাংশনটির ক্ষেত্রে হিসাবটা কিভাবে করা হয় সেটা আমরা দেখেছি। এই রেম ফাংশন গণনারও তেমন কোনো হিসাব আছে যেটা আমাদের কম্পিউটার জানে। আমরা স্রেফ জানি  $rem(a,b)$ লিখলে কম্পিউটার a কে b দিয়ে ভাগ দেবে এবং ভাগশেষ টি আমাদের জানিয়ে দেবে। 
এখন এই লাইনটা দেখি,
$c \leftarrow rem(a,b)$ 
এর মানে হলো $rem(a,b)$ মান গণনা করে c এর মধ্যে রাখ। ব্যাপারটার সাথে আমাদের প্রথম বানরের গল্পের একটা মিল দেখতে পাই। প্রহম বানরকে লাল আর সবুজ কার্ডে কোনো সংখ্যা লিখে দিলে সে তাদের ভাগশেষ জানিয়ে দিতো। এই কাজে সবুজকে ভাগ দিতো লাল কার্ডের সংখ্যা দিয়ে। আমাদের রেম ফাংশনটাও তাই করছে। প্রথম সংখ্যাটিকে ভাগ দিচ্ছে দ্বিতীয় সংখ্যা দিয়ে। তাই এখানে প্রথমটি মানে এ হচ্ছে সবুজ কার্ড। বি হচ্ছে লাল কার্ড আর সি হচ্ছে হলুদ কার্ড যেখানে ফলাফল লিখিত হয়। রেম কে আমাদের বানর ভাবতে পারি। 

অর্থাৎ কম্পিউটারের ভাষায় লিখলে
হলুদকার্ড <- nbsp="nbsp" span="span">
এই হলো আমাদের প্রথম বানরের গাণিতিক বর্ণনা! কম্পিউটার অবশ্য লাল হলুদ দিয়ে মনে রাখে না। সে মনে রাখে ফাংশনে কোন অবস্থানে কি লেখা হচ্ছে। 

যেমন আমি যদি পি <- nbsp="nbsp" span="span">

এখন মনে করুণ আমরা জিসিডি নামক একটি ফাংশন বানাতে চাই। যার কাজ ইনপুটের দুইটি সংখ্যার গসাগু (গ্রেটএস্ট কমন ডিভিজর) বের করে আমাদের জানানো। 

অর্থাৎ, 
জিসিডি(১৬, ৬) এর মান হবে ২ 
সি <- nbsp="nbsp" span="span">
এর অর্থ কম্পিউটারকে বলা, ১৬ ও ৬ এর জিসিডি বের করে সি নামক ভেরিয়েবলে লেখ। কিন্তু কম্পিউটারের মত বোকা একটা প্রাণী সেই কাজ পারবে কিভাবে? সেটাও আগে থেকে তাকে লিখে দিতে হবে। 

নিচে সেই কাজের তালিকা কম্পিউটারের ভাষায় লেখার চেষ্টা করি। 

gcd(a,b)              //returns the gcd of a and b
  1. red <- a="a" nbsp="nbsp" span="span">
  2. green <- b="b" nbsp="nbsp" span="span">
  3. clear(yellow)   //হলুদ কার্ডটি মুছে পরিষ্কার করে রাখ। 
  4. yellow <- green="green" nbsp="nbsp" red="red" rem="rem" span="span">
  5. if yellow is equal to 0. output green and stop.  //ভাগশেষ শূন্য পাওয়ার অর্থ গসাগু পেয়ে গেছি। এখানেই থামতে হবে।
  6. (else) green<-red nbsp="nbsp" span="span">
  7. red<- nbsp="nbsp" span="span" yellow="yellow">
  8. goback to step 4      //এই নতুন সংখ্যাগুলো নিয়ে আবার চতুর্থ ধাপে রেম বানরের কাছে ফিরে যাও। 

এইতো আমরা আমাদের প্রথম কম্পিউটার প্রোগ্রাম লিখে ফেলেছি! ৫ নাম্বার লাইনে অবশ্য এখনো একটা ইংরেজী বাক্য আছে। বেশিরভাগ প্রচলিত কম্পিউটার ভাষায় ঐ লাইনটা লেখা হবে, 
if (yellow == 0) return green 

এভাবে। অর্থাৎ, ব্রাকেটের মাঝখানে যে কথাটি লেখা সেটা সত্যি হলে ব্রাকেটের পরের কাজটি করো। 

চিত্র-৪ এ জিসিডি(২৪,১৫) ফাংশনটা হিসাব করার ধাপগুলো দেখানো হলো। 

No comments:

Post a Comment