কম্পিউটার , প্রোগ্রামিং প্রোগ্রামিং (C) টিউটোরিয়াল (পর্ব –১)

শুরুর কথা যারা কম্পিউটার সাইন্স বা ইঞ্জিনিয়ারিংয়ে পড়েন, তাদের অনেকেই এইচএসসি থেকে ইউনিভার্সিটি লাইফে ওঠার সাথে সাথেই সম্পূর্ণ নতুন একটা বিষয়ের সাথে পরিচিত হন। আর তা হলো
প্রোগ্রামিং। যাদের ইন্টারে অপশনাল
সাবজেক্ট থাকে কম্পিউটার, তাদের
তেমন একটা ঝামেলা পোহাতে হয় না,
কিন্তু যাদের প্রোগ্রামিং সম্পর্কে
কোনো ধারণাই নাই, তাদের ক্ষেত্রে
সমস্যাটা অনেক প্রকট হয়ে যায়। অনেকে
এমনকি কম্পিউটার সম্পর্কেও বেশ
খানিকটাই অজ্ঞ থাকেন। এসব ক্ষেত্রে
মূলত যে দুটো কারণে সমস্যা হয়, তা হলো
প্রোগ্রামিং সম্পর্কে একেবারেই জ্ঞান
না থাকা এবং যেসব বই থেকে এ সম্পর্কে
ভালোভাবে জানা যাবে, সেগুলো
ইংরেজি ভাষায় হওয়া। আমি আমার এই
ধারাবাহিক টিউটোরিয়ালে কম্পিউটার
প্রোগ্রামিং সম্পর্কে সহজ ভাষায় কিছু
বলার ও পাঠককে এ সম্পর্কে কিছু
জানানোর চেষ্টা করবো। এখানে আমি C
প্রোগ্রামিং সম্পর্কেই প্রধানত আলোচনা
করবো। আশা করি পাঠকরা এটা পড়ে
উপকৃত হবেন।
মূল কথায় আসি। কম্পিউটার প্রোগ্রামিং
হচ্ছে আসলে কম্পিউটারের সাথে কথা
বলা, তাকে কিছু করতে বলা। কম্পিউটার
আপনার-আমার ভাষা জানে না, কাজেই
তাকে কিছু করতে বলতে হলে তার
ভাষায় বলতে হবে। তার ভাষা জানতে
হলে আমাদের জানতে হবে সে কীভাবে
চিন্তা করে। তারও আগে জানা উচিত যে
কম্পিউটার একটা মূর্খ বা স্টুপিড। এর
নিজের কোনো কিছুই করার ক্ষমতা নাই,
আপনি যা বলবেন, তাই করবে, যেভাবে
বলবেন, সেভাবে করবে। মজার ব্যাপার
হচ্ছে, যারা প্রোগ্রামিং ভালো পারেন
না, তাদের মোটেই মন খারাপ করার
কোনো কারণ নাই। কোনো স্টুপিড যদি
আপনার কথা না বুঝে, তাহলে সেটা তার
দোষ, আপনার না! কাজেই, কম্পিউটার যদি
আপনার কথা না বুঝে, সেটাও আপনার দোষ
না! ঘটনা হচ্ছে, আমরা যখন কম্পিউটারের
সাথে কথা বলবো, তখন প্রতিটা জিনিস
খুঁটিয়ে খুঁটিয়ে পুঙ্খানুপুঙ্খরূপে তাকে
বলে দিতে হবে। ধরেন, আপনি যদি
কারো কাছে এক গ্লাস পানি চান,
তাহলে খুব সহজভাবেই তাকে এক গ্লাস
পানি আনতে বলতে পারবেন। কিন্তু যদি
কোনো রোবটকে পানি আনতে বলেন,
তাহলে তাকে স্টেপ বাই স্টেপ বলতে
হবে, যেমন প্রথমে গ্লাস নিতে হবে,
তারপর পানির জগ নিত হবে, তারপর জগ
থেকে পানি গ্লাসে ঢালতে হবে
ইত্যাদি। রোবটের বুদ্ধিমত্তার উপরে
অবশ্য নির্ভর করবে কয়টা স্টেপ লাগবে,
তবে মানুষের চেয়ে তাকে অনেক
ডিটেইলস বলতেই হবে। কম্পিউটারের
ক্ষেত্রেও একই কথা প্রযোজ্য। মোদ্দা
কথা, কম্পিউটারকে যখন কিছু করতে
বলবেন বা কোনো প্রোগ্রামিং করবেন,
তখন আপনাকে অনেক ডিটেইলস বলে
দিতে হবে, খুঁটিয়ে খুঁটিয়ে।
কাজেই, কোনো প্রোগ্রামিং করার আগে
আমাদের শুরুতেই যেটা করতে হবে, তা
হলো, কম্পিউটারের মতো করে চিন্তা
করতে শিখতে হবে। ব্যাপারটা মানুষের
জন্য একটু কঠিন। ইন ফ্যাক্ট, বেশ
খানিকটাই কঠিন হতে পারে। যেমন
ধরেন, আপনি ১ থেকে ১০ যোগ করবেন।
কীভাবে করতে পারেন? ১ এর সাথে ২,
তারপর তার সাথে ৩, তারপর ৪, এভাবে ১০
পর্যন্ত যোগ করলেন। এখন, কম্পিউটারকে
যদি এই কাজটাই করতে বলেন, সে কী
করবে? সে-ও ১ এর সাথে ২ যোগ করবে,
তারপর তার সাথে ৩, তারপর ৪, এভাবে
যোগ করবে। কিন্তু ঘটনা হচ্ছে, আপনি
গুনতে পারেন, কাজেই আপনি জানেন যে
১ এর পরে ২ আসবে, তারপর ৩। কিন্তু
কম্পিউটার কি গুনতে পারে? সে কি
জানে ১ এর পরে ২ আসবে? না, জানে না।
কাজেই তাকে ১ এর সাথে ২ যোগ করার
পাশাপাশি এটাও বলে দিতে হবে যে
সে ২ কীভাবে পাবে। আর তা কীভাবে
তাকে বুঝাবেন? খুব সহজ, ১ এর সাথে ১
যোগ করলে ২ পাওয়া যাবে, তার সাথে ১
যোগ করলে ৩, তারপর ৪, এভাবে ১০ পর্যন্ত
যেতে হবে। তাহলে চলে আসে আরেক
প্রশ্ন। আপনি যখন যোগ করছেন, তখন আপনি
জানেন, কোথায় থামতে হবে (যখন ১০
আসবে), কিন্তু কম্পিউটার কি জানে?
এখানেও উত্তর “না”। কাজেই কী করতে
হবে? প্রতিবার ১ যোগ করে যখন সে নতুন
সংখ্যাটা বানাবে, তখন সে চেক করবে,
তা ১০ এর চেয়ে বড় কিনা। অর্থাৎ, ১ এর
সাথে ১ যোগ করে ২ বানানোর পর
দেখবে, তা ১০ এর চেয়ে বড় কিনা। বড়
হলে থেমে যাবে, নয়তো সামনে এগুবে,
অর্থাৎ ২ এর সাথে ১ যোগ করে ৩
বানাবে।
উদাহরণটা কি একটু পেঁচিয়ে গেলো?
তাহলে একবার সামারাইজ করি।
১। প্রথমে কম্পিউটার প্রথম সংখ্যা
হিসাবে ১ নিবে এবং মনে করবে যে
যোগফলের মান ১।
২। এরপর ঐ সংখ্যার সাথে ১ যোগ করে
নতুন সংখ্যা ২ বানাবে।
৩। চেক করবে যে, নতুন সংখ্যা ১০ এর
চেয়ে বড় কিনা।
৪। যদি তা ১০ এর চেয়ে বড় না হয়, তাহলে
তাকে আগের যোগফলের সাথে যোগ
করবে। তারপর ২ নং ধাপে ফেরত যাবে।
৫। যদি তা ১০ এর চেয়ে বড় হয়ে যায়,
তাহলে যোগফল প্রকাশ করে বেরিয়ে
যাবে।
এভাবে কম্পিউটারের মতো করে চিন্তা
করে কোনো প্রবলেম ধাপে ধাপে
সমাধান করার পদ্ধতির নাম
অ্যালগোরিদম। এখনো হয়তো অনেকের
কাছেই বিষয়গুলো ক্লিয়ার হয় নাই।
ব্যাপার না, যারা প্রথম প্রথম শিখছেন,
তাদের জন্য একটু কঠিন মনে হতেই পারে।
আস্তে আস্তে ঠিক হয়ে যাবে। এই ঠিক
হয়ে যাবার গতি ত্বরাণ্বিত করারও একটা
পদ্ধতি আছে। আর তা হলো, একটা
প্রোগ্রামের উদাহরণ নিয়ে
প্র্যাকটিকালি সেটার প্রয়োগ করে
দেখা। যেমন, উপরের উদাহরণটাই আমরা
এবার সংখ্যা দিয়ে হিসাব করে দেখবো।
এটার দুটো উপকারিতা আছে। প্রথমত, এটা
আপনাকে কোনো প্রোগ্রাম বুঝতে
সাহায্য করবে। দ্বিতীয়ত, কোনো
প্রোগ্রামের ভুল (যেটাকে আমরা
প্রোগ্রামিংয়ের ভাষায় bug বলি) বের
করতেও সাহায্য করবে। কথা না বাড়িয়ে
উদাহরণটার ব্যবচ্ছেদ শুরু করা যাক।
১। প্রথম সংখ্যা হিসাবে ১ নিলাম ও
ধরলাম, যোগফল = ১।
২। প্রথম সংখ্যার সাথে ১ যোগ করে নতুন
সংখ্যা ২ পেলাম।
৩। ২ ১০ এর চেয়ে ছোট।
৪। কাজেই আগের যোগফলের সাথে ২
যোগ করে নতুন যোগফল পেলাম ১+২ এবং ২
নং ধাপে ফেরত গেলাম।
২.১। আগের সংখ্যা ২ এর সাথে ১ যোগ
করে নতুন সংখ্যা ৩ পেলাম।
৩.১। ৩ ১০ এর চেয়ে ছোট।
৪.১। কাজেই আগের যোগফলের সাথে ৩
যোগ করে যোগফল পেলাম ১+২+৩ এবং ২
নং ধাপে ফেরত গেলাম।
২.২। আগের সংখ্যা ৩ এর সাথে ১ যোগ
করে নতুন সংখ্যা ৪ পেলাম।
৩.২। ৪ ১০ এর চেয়ে ছোট।
৪.২। কাজেই আগের যোগফলের সাথে ৪
যোগ করে নতুন যোগফল পেলাম ১+২+৩+৪
এবং ২ নং ধাপে ফেরত গেলাম।
এতক্ষণে নিশ্চয়ই বুঝে গেছেন যে, এভাবে
চলতে চলতে এক পর্যায়ে যখন সংখ্যাটার
মান হবে ১১, তখন তা ১০ এর চেয়ে বড় হয়ে
যাবে বিধায় প্রোগ্রাম শেষ হয়ে যাবে
এবং তখন যোগফলের মান হবে
১+২+৩+৪+৫+৬+৭+৮+৯+১০ = ৫৫।
পুরো ব্যাপারটাকে আমরা একটা ছবির
মাধ্যমে দেখাতে পারি। এই ছবিকে
বলা হয় ফ্লোচার্ট তথা প্রবাহ চিত্র।
নিচে আমাদের আলোচ্য প্রবলেমের
ফ্লোচার্ট দিয়ে দিলাম। প্রদত্ত ধাপগুলো
ও উদাহরণের সাথে ফ্লোচার্ট মিলানোর
চেষ্টা করেন। নিজেই বাকিটা বুঝতে
পারবেন আশা করি। তারপরও, প্রশ্ন
থাকলে (এবং অবশ্যই আগ্রহ থাকলে)
মন্তব্যের ঘরে করতে পারেন।
ছবিতে সংখ্যা = সংখ্যা + ১ বা যোগফল =
যোগফল + সংখ্যা দেখে ঘাবড়াবার কিছু
নাই। এটা প্রোগ্রামিংয়ের ভাষা। এর
মানে এই না যে, গাণিতিকভাবে সংখ্যা
= সংখ্যা + ১। বরং, এর দ্বারা
গাণিতিকভাবে বুঝানো হচ্ছে যে, নতুন
সংখ্যা = পুরনো সংখ্যা + ১ , সোজা কথায়
সংখ্যার মান ১ বাড়ানো। আর ফ্লোচার্টে
ব্যবহৃত চিহ্ন বা নোটেশনগুলো (ইলিপ্স,
আয়ত, রম্বস, সামান্তরিক ইত্যাদি) নিয়েও
আপাতত ভাবনার দরকার নাই। এই
চিহ্নগুলো নিয়ে ইনশাল্লাহ একটা পুরো
পর্বই সামনে পাবেন। আপাতত শুধু
প্রোগ্রামটার কার্যপ্রণালী নিয়ে চিন্তা
করেন। যদি এই প্রোগ্রামটা বুঝতে
পারেন, তাহলে অনেক কিছুই বুঝতে
পারবেন। কারণ এখানে আমরা নিজের
অজান্তেই প্রোগ্রামিংয়ের দুটো বড়
স্তম্ভ ‘যদি’ (if-else) ও ‘লুপ’ (for, while loop)
সম্পর্কে জেনে গেছি। কোথায় জানলাম?
ভেবে দেখেন তো, বের করতে পারেন
কিনা!
সবশেষে একটু কনফেশন করি। বেচারা
কম্পিউটারকে শুরুতে অনেক গালি
দিয়েছি, মূর্খ, স্টুপিড ইত্যাদি বলেছি।
কিন্তু আসলে সে মনে হয় অতটা স্টুপিড
না। যেমন, আপনি যদি একবার তাকে
উপরের পদ্ধতিটা বুঝিয়ে দিতে পারেন,
তাহলে কিন্তু সে আপনার দেখানো
পদ্ধতিতে শুধু ১০ কেনো, ১ থেকে ১ লাখ
পর্যন্ত যোগ করে ফেলবে নিমিষের
মধ্যেই! শুধু প্রোগ্রামে ব্যবহৃত মানগুলোয়
একটু পরিবর্তন করে দিলেই চলবে। পদ্ধতি
কিন্তু ঠিকই থাকবে। কীভাবে করবেন?
আপনারাই দেখেন তো চিন্তা করে,
পারেন কিনা?
অতএব, আপনাদের জন্য কুইজ:
প্রশ্ন ১: যদি ১ থেকে ১০০০ পর্যন্ত যোগ
করতে চাই, কোথায় কোথায় পরিবর্তন
করতে হবে?
প্রশ্ন ২: যদি ০ থেকে ১০০ পর্যন্ত যোগ
করতে চাই, কোথায় কোথায় পরিবর্তন
করতে হবে?
প্রশ্ন ৩: যদি ০ থেকে ১০০ পর্যন্ত শুধু
বেজোড় সংখ্যা যোগ করতে চাই, কোথায়
কোথায় পরিবর্তন করতে হবে?
শুরুর কথা হিসাবে কি বেশি হয়ে যাচ্ছে?
ওকে, এবার তাহলে অফ যাই। যাওয়ার
আগে ছোট্ট একটা শুরুর কথার শেষ কথা:
কম্পিউটারের মতো করে চিন্তা করার
চেষ্টা করেন। তাহলেই প্রোগ্রামিং
সহজ ও ফকফকা হয়ে যাবে! কীভাবে
লিখবেন, সেটা একবারেই কঠিন না, কিছু
সিনট্যাক্সের ব্যাপার মাত্র। একবার
পদ্ধতিটা ধরতে পারলে শুধু C কেনো, Java,
C++ কোনো কিছুতেই আটকাবেন না!

Comments

Popular Posts