Wednesday, September 17, 2014

এ্যারে নিয়ে কিছু কথা

এ্যারে নিয়ে কথা বললে প্রথমে বলতে হয় এ্যারে কি। E. Balagurusamy স্যার তাঁর Programming in ANSI C বইতে লিথেছেন "An Array is a fixed-size sequenced collection of element of the same data type." BYRON S. GOTTFRIED স্যার তাঁর PROGRAMMING WITH C বইতে লিখেছেন ”Many applications require the processing of multiple data items that have common characteristics. In such situations it is often convenient to place the data items  into  an array, where  they  will  all  share the same name.” কিন্তু সমস্যা হলো আমি এতটা মেধাবী না যে এত বড় জ্ঞানীদের দাঁতভাঙ্গা ডেফিনেশন বুঝব। তাই আমি নিজের মত একটা সংজ্ঞা বানিয়ে নিয়েছি। আমার মতে এ্যারে হল একটা নামের মধ্যে একধরনের অনেকগুলো ডাটা রাথার পদ্ধতি। বুঝা গেলোনা? আচ্ছা ধরে নিন এ্যারে হল ”মুদি দোকানদারের বাকীর খাতা”। হ্যাঁ ঠিক তাই। যারা মুদি দোকানদারের বাকীর খাতা সর্ম্পকে কিছুই জানেন না তাদের বলছি, এই খাতার পাতার উপর দিকে একজনের নাম থাকে, তার নিচে একপাশে তারিখ অন্যপাশে সিরিয়ালে বিভিন্ন অংক লেখা থাকে। একটা তারিখের পাশে একটা অংক। এই অংকগুলো প্রতিনিধিত্ব করে ঐদিন ঐ ব্যা্ক্তির পণ্যধ্বংশের পরিমাণ। জিনিসটা অনেকটা এরকম-

মফিজ
01/10
100/-
02/10
50/-
03/10
200/-
এখন মফিজের নামের জায়গায় একটা ভেরিয়েবল বিবেচনা করুন, তারিখের ঘরকে বিবেচনা করুন এ্যারে এড্রেস আর টাকার ঘরকে বিবেচনা করুন এ্যারে এলিমেন্ট হিসেবে। এবার দেখুন কেমন হলো জিনিসটা-

int marks[3]
2
80
1
75
0
40
এখন দেখুন marks ভেরিয়েবলটিতে তিনটি মান রাখলাম যার সবগুলোই ইন্টিজার। আর [3] নির্দেশ করেে এই ভেরিয়েবলে কতগুলো মান থাকবে। এবার বুঝা গেল বালাগুরুস্বামী স্যারের ফিক্সড সাইজ কথাটার মর্ম? এবার মুদি দোকান থেকে আমাদের কম্পাইলারে ফিরে আসি। এ্যারে ডিক্লেয়ার করার পদ্ধতি হল-
type variable_name[size]
এক্ষেত্রে আমাদের মনে রাখতে হবে এ্যারে এ্যড্রেস শুরু হবে শুন্য থেকে এবং চলবে size-1 পর্যন্ত। কেন? তা আমার জানা নেই, Dennis MacAlistair Ritchie সাহেব হয়তো বলতে পারতেন। জানেন তো উনি সি ল্যাংগুয়েজের আবিস্কারক। এতক্ষন যে ধরনের এ্যারে নিয়ে কথা বললাম তাকে বলে ওয়ান ডাইমেনশনাল এ্যারে। এছাড়াও আছে টু ডাইমেনশনাল এ্যারে এবং মাল্টিডাইমেনশনাল এ্যারে। দেখা যাক এই বিদখুটে নামগুলোর চেহারা কেমন-

int marks[3][2]
2
25
80
1
39
75
0
95
40

0
1
Two dimensional array
ডিক্লারেশন এরকম-
type variable_name[row_size][column_size]

Multidimensional array কিরকম তা আমি নিজে আগে শিখে নিই তারপর বলব। অর্থাৎ ওয়ান ডাইমেনশনাল এ্যারে তে আমরা একটি কলাম পাচ্ছি ডাটা রাখার জন্য, টু ডাইমেনশনালে দুটি।এ্যারে সম্পর্কে আর একটা কথা, এ্যারে হচ্ছে একটি Derived Data Type. কারন এ্যারে গঠিত হয়েছে Primary Data Type কেই কিছুটা মডিফাই করে। এরকম আরো দুটি ডাটা টাইপ হলো Functions & Pointers.

আহ্ হা। আমার জ্ঞানের ঝুলি আবার ফুরিয়ে গেলো। আমি আমার ঝুলিতে মাল্টিডাইমেনশনাল এ্যারে বা অন্য কিছু নিয়ে ফিরে আসব। ততক্ষন পর্যন্ত ধন্যবাদ সবাইকে।

Monday, September 15, 2014

অনলাইন জাজ এ প্রবলেম সলভিং ও সাবমিটিং

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

  1. আউটপুটের ব্যাপারে আমাদের একটা বিষয় মাথায় রাখতে হবে যে জাজিং প্রোগ্রাম আউটপুটকে এক বা একাধিক ষ্ট্রিং হিসেবে বিবেচনা  করে। তাই একটি স্পেস, ট্যাব কিংবা লাইন গ্যাপ অমিল হলেও প্রোগ্রাম এরর দেখাবে। এক্ষেত্রে প্রেজেন্টেশন ইরর শো করবে।
  2. সাবমিট বাটন টিপে দেওয়ার পূর্বে ভালো করে খেয়াল রাখা দরকার কোন ল্যাংগুয়েজ সিলেক্ট করা আছে। কোড করলাম সি ল্যাংগুয়েজে আর সাবমিট করলাম জাভা দিয়ে তাহলে মিস্টি নিয়ে নিজের শশুর বাড়ীর বদলে ভাইয়ের শশুর বাড়ী যাবার মত অবস্থা হবে। এক্ষেত্রে সাবমিশন ইরর শো করবে।
  3. জাজিং ইরর শো করলে মাথা গরম করে কম্পিউটারের চোদ্দগুষ্টি উদ্ধারের কোন দরকার নাই। অপেক্ষা করুন। অপেক্ষার সময়ে পরের প্রবলেমটার অ্যালগরিদম সাজিয়ে ফেলুন।
  4. একই  প্রবলেম বার বার সাবমিট করার পরেও রং আনসার আসলে “আমার দ্বারা কিছু হবেনা” নিজেকে এই মহান সার্টিফিকেট দিয়ে ঘুমাতে যাবার কোন মানে হয়না। ”একবার না পারিলে দেখ শতবার” এই নীতিতে আপত্তি থাকলে পরের প্রবলেম নিয়ে মাথা ঘামান। পরের টা করতে গিয়ে আগেরটার সলুশন পেয়েও যেতে পারেন।
  5. টাইম লিমিট ইরর পেলে টাইম নিয়ে ভাবুন। ভাবার ক্ষেত্রে কোন টাইম লিমিট আসবে না। কোড থেকে লুপ কমাতে চেষ্টা করুন। কমপ্লেক্সিটি কমানোর চেষ্টা করুন। যেখানে ম্যাথমেটিকাল ফরমূলা দিয়ে কাজ হবে সেখান থেকে লুপ বাদ দিন। মনে রাখবেন লুপ একবার লেখা হলেও এটা কিন্তু বারবার কাজ করে।
  6. উসাইন বোল্টের দৌড়ের পথে একটা ইট রাখলে সে যেমন হোঁচট খেয়ে চিতপটাং হয় রানটাইম ইরর অনেকটা সেরকম। কোড এর কোন একটা স্টেটমেন্টে এসে হোঁচট খেয়ে পড়ে কম্পাইলার। এমন হলে খুজে দেখুন কোথায় ইট আছে। হতে পারে কোন ম্যাথমেটিকাল ইরর, লাইব্রেরী ফাংশন গন্ডগোল, ইত্যাদি।
আমার অর্জিত জ্ঞানের ঝুলি এই পর্যন্তই সীমাবদ্ধ। এই সীমাবদ্ধ জ্ঞানে যতটুকু বুঝি কম্পিটিটিভ প্রোগ্রামিং প্রোগ্রামিং শেখার এক অনন্য উপায়। সুতরাং কম্পিটিটিভ প্রবলেম সলভিং এ অংশগ্রহণ করুন। সাবমিশন লিস্টে কার কোন স্ট্যাটাস ভালো লাগে আমি জানিনা। তবে আমার এ্যাকসেপটেড এর চাইতে যে কোন ধরনের ইরর দেখলে ভালো লাগে। কারন প্রত্যেকটা ইরর থেকে কিছু শিখতে পারা যায়। আজ এ পর্যন্তই। আবার অন্য কোন বিষয় নিয়ে লিখব। তার আগে আমি শিখে নিই। কোন ভূল থাকলে কমেন্ট করুন। ধন্যবাদ।