know yourselves. information, computer, 7 wonders, various.

Tuesday, June 17, 2014

Learn C ++ Programing


Part-1

নিশ্চয়! আপনি প্রস্ত্তত, আপনার কম্পিউটারের (PC) BOSS হবার জন্য। মানে বলতে চাচ্ছি, আপনার কম্পিউটার আপনার ইচ্ছানুযায়ী কাজ করবে অর্থাৎ আপনি যেভাবে নির্দেশ দিবেন ঠিক ঠিক সেই নির্দেশ পালন করবে। এক্ষেত্রে একটা কথা বলা দরকার, আপনি যখন আপনার কী বোর্ড থেকে A লেখা বোতামটি চাপ দিচ্ছেন তখন মনিটরে ‘A’ লেখা ভেসে উঠছে। কী বোর্ড থেকে A লেখা বোতামটি চাপ দেওয়ার অর্থ হচ্ছে মনিটরে A লিখতে বলা। অথচ কম্পিউটারের ক্ষেত্রে সমস্যা হচ্ছে A,B,C,D-ইত্যাদির কিছুই সে চেনে না। আপনি যতবারই তাকে ‘A’ লিখতে বলবেন ততবারই সে তার ভিতরে রক্ষিত প্রোগ্রাম থেকে জেনে নিচ্ছে, আমার বস একটি নির্দেশ পাঠিয়েছে, এর মানে কি? আপনারই মতো কোন প্রোগ্রামার আগে থেকেই একগুচ্ছ নির্দেশ লিখে রেখেছে যে, কোন্ বোতাম চাপ দিলে মনিটরে কি লিখতে হবে। সুতরাং তাঁর কাছ থেকে সাহায্য নিয়ে কম্পিউটার নির্দেশ পালন করছে এবং নির্দেশ পালনের পরপর আবার ভুলে যাচ্ছে। আবার নির্দেশ পেলে প্রোগ্রামের কাছ থেকে আবার সাহায্য নিয়ে নির্দেশ পালন করছে এবং যথারীতি আবার ভুলে যাচ্ছে। ব্যাপারটা অন্যভাবে বলা যাক যেমন আপনি কম্পিউটার (PC) কে নির্দেশ নিলেন ২+২=?। সে দ্রুত নির্দেশটি পেল এবং ভিতরে যেখানে প্রোগ্রাম আছে তার কাছে গিয়ে শুনলো এর মান কি? উত্তর পেল ‘4’ এবং তৎক্ষনাত সে মনিটরে লিখে দিল 4 আর যথারীতি পুরো ব্যাপারটি ভুলে গেল। দ্বিতীয় বার আবার যখন আপনি জানতে চাইলেন ২+২?। আবারও সে একই কাজ করলো। এভাবেই চলতে থাকলো। আরও একটা গোপন কথা হলো কম্পিউটার A, B, C, D ইত্যাদি সহ 1, 2, 3 ইত্যাদি কোন অক্ষরই চেনে না। সে শুধুমাত্র 0 এবং 1 এই দুইটি অক্ষরই চেনে সুতরাং কিবোর্ড থেকে A অথবা 1 লিখলে সে সেটাকে 0 এবং 1 এ রূপান্তরিত করে নেয় এবং কাজ সমাধান করে সেই একই প্রক্রিয়ায় এবং শেষে ফলাফল দেখানোর সময় আবার সাধারন ইংরেজী যেমন A বা 1 এ রূপান্তরিত করে দেয়। ব্যাপার গুলো নিয়ে আমরা বিস্তর আলোচনা করবো। আপাতত আপনি আপনার কম্পিউটারের বস হবার জন্য একটি নির্দেশ বা প্রোগ্রাম তৈরী করুন। সুতরাং বইটির সাথে আপনার সময় শেয়ার করুন এবং একজন রিয়েল BOSS হউন।

আপনার কম্পিউটার থেকে C/C++ প্রোগ্রাম রান করুন এবং নিচের কোডগুলো হুবুহু লিখুন।

clip_image002

প্রোগ্রাম লেখা শেষ হলে কীবোর্ড থেকে Ctrl+F9 প্রেস করুন। রেজাল্ট নিজেই দেখুন।

clip_image004

যদি এই প্রোগ্রাম বুঝতে এবং করতে অসুবিধা হয় তবে কোন সমস্যা নাই একটু পরেই আমরা এটা নিয়ে বিস্তারিত আলোচনা করবো তাঁর আগে চলুন নিম্নলিখিত বিষয়গুলো নিয়ে একটু সাধারন ধারনা নেওয়া যাক।

ধানমন্ডির একটি বড় ডিপার্টমেন্টাল ষ্টোরের নাম Stop Mall. আমার বন্ধু মুন্না ওখানে কাজ করে এবং প্রতিদিনের ট্রানজেকশনের বিস্তারিত বিবরন তাকে রাখতে হয়। প্রতিটি কাষ্টমারের লেনদেনের বিলও তাকেই তৈরী করতে হয়।

মনে করি বিলের নমুনা নিম্নরূপ:

Customer Name:-.................................................

Date:- ..................

Item

Rate

QTY

Price

Video CD

Tk 150/=

2 units

Tk 300/=

Jelly

Tk 250/=

2 Nos

Tk 500/=

Hanger

Tk 25/=

10Nos

Tk 250/=

   

Total

 

বিলটি তৈরী করার জন্য মুন্না যে কাজগুলি করে সেগুলি হচ্ছেঃ

কি কি আইটেম এবং কয়টি বিক্রি হলো

প্রতি আইটেমের রেট কত

প্রতিটি আইটেম এর সাথে ইউনিটের গুন করে দাম বের করা এবং

প্রতিটি রেট কে যোগ করে মোট (total) বের করা।

সংক্ষেপে যে কাজটি করতে হয় তা হলোঃ

§ প্রতিটি লেনদেন সম্বন্ধে বিস্তারিত বিবরন সংগ্রহ করতে হয় (Input)

§ প্রয়োজনীয় ক্যালকুলেশন করতে হয় (Process)

§ সবমিলিয়ে একটি ফলাফল দাঁড় করতে হয় (Output)

কম্পিউটার ঠিক একইভাবে কাজ করে থাকে। প্রথমত কোন ইনফরমেশন কম্পিউটারে Input দিতে হয়, সে Process করে এবং ফলাফল Output করে। এটিকে বলে I.P.O cycle.

Input clip_image005   Process        clip_image006 Output

আসুন নিচের ব্যাপারটি বিবেচনা করা যাক। মনে করি নিচের কাজগুলো করতে হবে।

a. দুইটি সংখ্যার যোগ ফল (Sum) বের করতে হবে।

b. তিনটি সংখ্যার গড় (Average) বের করতে হবে।

c. একটি সংখ্যা জোড় না বিজোড় বের করতে হবে।

নিম্নলিখিত প্রক্রিয়ায় কাজটি করা সম্ভব।

 

Input

Process

Output

a

২টি সংখ্যা

সংখ্যা ২টি যোগ করা

যোগফল

b

৩টি সংখ্যা

গড় বের করা

গড়

c

১টি সংখ্যা

জোড় না বিজোড় পরীক্ষা করা

জোড় অথবা বিজোড়

Input-Process-Output – এই প্রক্রিয়ায় কাজ করার জন্য কম্পিউটারের বিভিন্ন অংশ ব্যবহৃত হয়। যাকে বলা হয় হার্ডওয়ার এবং সফ্টওয়ার।

হার্ডওয়ার এবং সফ্টওয়্যারঃ

কম্পিউটারের বিভিন্ন যন্ত্রাংশকে হার্ডওয়ার বলে। যেমন - Mouse, Keyboard, Microprocessor, Monitor, RAM ইত্যাদি। আর কম্পিউটারে ব্যবহৃত প্রোগ্রামগুলি হচ্ছে সফ্টওয়ার।

প্রোগ্রামিং ল্যাংগুয়েজ

সাধারনত আমরা বাংলা, ইংরেজী, হিন্দি, ফ্রেঞ্চ ইত্যাদি ভাষা বুঝে থাকি। কিন্তু কম্পিউটার শুধুমাত্র ইলেকট্রনিক্স সিগন্যাল বুঝে থাকে। এই ইলেকট্রনিক্স সিগন্যাল কে বলা হয় মেশিন ল্যাংগুয়েজ। একথা বলাই বাহুল্য যে কম্পিউটার এক ধরনের ইলেকট্রনিক্স যন্ত্র এবং এতে অসংখ্য লজিক গেট (Logic gate) রয়েছে। আর এ কেবলমাত্র ২টি লজিক বোঝে একটি হলো 0 (শুন্য) অর্থাৎ বিদ্যুত প্রবাহের অনুপস্থিতি এবং অপরটি হলো ১ (এক) অর্থাৎ বিদ্যুৎ প্রবাহের উপস্থিতি। এই শুন্য (0) এবং এক (১) এর এই পদ্ধতিকে বলে বাইনারী (Binary) পদ্ধতি। আমরা যেমন গানিতিক কার্যাবলী সম্পাদানের ক্ষেত্রে ০-৯ এই দশটি সংখ্যা নিয়ে কাজ করে থাকি। বাইনারী পদ্ধতিতে তেমনি শুন্য (০) এবং এক (১) এই দু’টি সংখ্যা ব্যবহার করা হয়। যেমন A কে কম্পিউটার 1000001 এবং B কে 1000010 হিসেবে রূপান্তরিত করে নেয়।

সুতরাং মেশিন ল্যাংগুয়েজ ব্যবহার করেও কম্পিউটারে প্রোগ্রাম লেখা যায় সেক্ষেত্রে ব্যাপারটি সময়সাপেক্ষ এবং কষ্টকরও বটে। এছাড়া মেশিন ল্যাংগুয়েজ ব্যবহার করে তৈরীকৃত প্রোগ্রাম বিভিন্ন মেশিনে চালানোর ক্ষেত্রে সীমাবদ্ধতা আছে। কাজেই পরবর্তীতে অর্থসূচক কিছু ইংরেজী সংকেত যেমন: SUM, ADD, LOAD, NULL ইত্যাদি ব্যবহার করে এক ধরনের ল্যাংগুয়েজ প্রবর্তন করা হয় যাকে বলা হয় অ্যাসেম্বলী ল্যাংগুয়েজ। এক্ষেত্রে 0 এবং 1 ব্যবহার না করে ইংরেজী সংকেত ব্যবহার করা হয়। তবে সাধারন ইংরেজীতে লেখা হলেও সেটি আবারও বাইনারী পদ্ধতিতে রূপান্তরিত হয় এবং বাইনারীতে প্রসেস হবার পর রেজাল্ট দেবার আগে আবারও ইংরেজীতে রূপান্তরিত হয়। এই রূপান্তরের কাজ করে যে প্রোগ্রাম বা সফ্টওয়ার তাকে বলা হয় অ্যাসেম্বলার। অ্যাসেম্বলী ল্যাংগুয়েজ তৈরীর সময়ই এর সাথে বিল্ট-ইন ভাবে অ্যাসেম্বলার তৈরী করা হয়েছে। সুতরাং আমরা অ্যাসেম্বলী ল্যাংগুয়েজে ইংরেজী সংকেত ব্যবহার করে প্রোগ্রাম লিখলে, অ্যাসেম্বলর তা মেশিন ল্যাংগুয়েজে রূপান্তর করে প্রয়োজনীয় কাজের সমাধান দিবে। তবে অ্যাসেম্বলী ল্যাংগুয়েজে প্রোগ্রাম লিখতে হলে একজন প্রোগ্রামারের কম্পিউটারের গঠন সম্বন্ধে প্রচন্ড ভাল জ্ঞান থাকা দরকার এবং তাকে একজন মেশিন বিশেষজ্ঞ হওয়ার দরকার হয়। তাই পরবর্তীতে কম্পিউটার ল্যাংগুয়েজকে সাধারনের ব্যবহার উপযোগী করে আরও প্রচুর প্রোগ্রামিং ল্যাংগুয়েজ তৈরী করা হয়। যারই উত্তরসূরী আজকের সি/সি ++ অথবা জাভা। এই জাতীয় ল্যাংগুয়েজে কাজ করার জন্য একজন প্রোগ্রামারের মেশিন বিশেষজ্ঞ হওয়ার দরকার হয় না। সাধারন ইংরেজী ভাষার মত করে এবং কিছু লজিক মেনে চলে এই প্রোগ্রামগুলে দিয়ে প্রোগ্রাম রচনা করা হয়ে থাকে।

কম্পাইলার ও ইন্টারপ্রেটর

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

ল্যাংগুয়েজের যতই উন্নতি হোক না কেন কম্পিউটারের ক্ষেত্রে একথা সবসময় সত্য যে সে বাইনারী পদ্ধতি (0 এবং 1) বা মেশিন ল্যাংগুয়েজ ছাড়া অন্য কোন ল্যাংগুয়েজ বোঝে না। কাজেই যতই আমরা সাবলিল ইংরেজীতে কম্পিউটারের প্রোগ্রাম রচনা করি না কেন; আমাদের ব্যবহৃত ল্যাংগুয়েজ এবং কম্পিউটারের মধ্যে একজন দোভাষীর দরকার হয়। যে কিনা ইংরেজীকে মেশিন ল্যাংগুয়েজে রূপান্তর করতে পারে। এরূপ রূপান্তরের কাজ যে প্রোগ্রাম বা সফ্টওয়ারটি করে থাকে থাকে আমরা বলি কম্পাইলার বা ইন্টারপ্রেটর। সুতরাং কম্পাইলার বা ইন্টারপ্রেটর হচ্ছে এক ধরনের ট্রান্সসিলেটর প্রোগ্রাম যা প্রোগ্রাম ল্যাংগুয়েজকে মেশিন ল্যাংগুয়েজে রূপান্তর করে। প্রতিটি প্রোগ্রামিং ল্যাংগুয়েজের নিজস্ব কম্পাইলার বা ইন্টারপ্রেটর রয়েছে। অ্যাসেম্বলী ল্যাংগুয়েজের ক্ষেত্রে এই কাজটি করার জন্য রয়েছে অ্যাসেম্বলার।

কম্পাইলার এবং ইন্টারপ্রেটর এর পাথর্ক্য

কম্পাইলার এবং ইন্টারপ্রেটর - এর মধ্যে কাজের দিক থেকে বেশ কিছু পার্থক্য রয়েছে।

কম্পাইলার

কম্পাইলার হাইলেভেল ল্যাংগুয়েজে লিখিত প্রোগ্রামকে সর্ম্পূন রূপে মেশিন ল্যাংগুয়েজে রূপান্তরিত করে। কম্পাইলার কোন একটি প্রোগ্রামের সম্পূর্ন Source Code-কে পড়ে, কোন ভুল না থাকলে Machine Code–এ রূপান্তরিত করে এবং প্রয়োজনীয় সাহায্যকারী ফাইল যুক্ত করে এক্সিকিউটেবল (বা.exe) ফাইলে রূপান্তরিত করে। পরবর্তীতে কম্পাইলার ছাড়াই অপারেটিং সিস্টেম থেকে প্রোগ্রামটি সরাসরি রান করানো যায়। যেমন আমরা যদি MS-Word এর Icon-এ ক্লিক করি তবে সরাসরি MS-Word চালু হয়। কারন WINWORD.exe নামে একটি exe ফাইল আগেই তৈরী করে রাখা হয়। কাজেই MS-Word কোন্ প্রোগ্রামিং ল্যাংগুয়েজ দ্বারা তৈরী এবং তাঁর কম্পাইলারের কোন প্রয়োজন হয় না। মনে করুন সি/সি ++ দিয়ে আপনি একটি গেম তৈরী করে ফাইলটির একটি নাম দিয়ে কম্পাইল করে .exe (এক্সিকিউটেবল) ফাইল তৈরী করলেন এবং ডেক্সটপে একটি Icon তৈরী করে রাখলেন। পরবর্তীতে বিভিন্ন সময়ে ওই Icon-এ ক্লিক করলেই গেমটি চালু হবে। এক্ষেত্রে আপনার মেশিনে সি/সি++ বা তাঁর কম্পাইলার না থাকলেও চলবে।

ইন্টারপ্রেটর

ইন্টারপ্রেটর সম্পূর্ন প্রোগ্রামকে একসাথে মেশিন ল্যাংগুয়েজে রূপান্তরিত করে না। ইন্টারপ্রেটর কোন একটি প্রোগ্রামের Source Code কে এক লাইন করে বা একটি স্টেটমেন্ট কে মেশিন ভাষায় রূপান্তর করে এবং ফলাফল প্রদান করে। এই কারনে ইন্টারপ্রেটর দ্বারা প্রোগ্রাম চালালে গতি কিছুটা কম হয় এবং ইন্টারপ্রেটর কোন এক্সিকিউটেবল (.exe) ফাইল তৈরী করে না, কাজেই পরবর্তীকালে ইন্টারপ্রেটরের সাহায্য ছাড়া সরাসরি অপারেটিং সিস্টেম এর সাহায্যে রান করানো যায় না ।

Contunue…..