22 September 2010 0 Comments

সমস্যা তৈরি করাই তাঁদের কাজ!

- নুরুন্নবী চৌধুরী (Collected from Prothom-alo.com)

বাংলাদেশে শিক্ষার্থীদের মধ্যে বিশেষ করে কম্পিউটার বিজ্ঞান নিয়ে যাঁরা পড়ছেন তাঁদের কাছে কম্পিউটার প্রোগ্রামিং ব্যাপারটি বেশ জনপ্রিয়। দেশের গণ্ডি ছাড়িয়ে আন্তর্জাতিক বা অনলাইন জগতের প্রোগ্রামিংয়ে বাংলাদেশের সাফল্যও কম নয়। কম্পিউটার বিজ্ঞান ও প্রকৌশলের শিক্ষার্থীদের অনেকেরই ধ্যানজ্ঞান এই প্রোগ্রামিং। অ্যাসোসিয়েশন ফর কম্পিউটিং মেশিনারির (এসিএম) আয়োজনে প্রতিবছর অনুষ্ঠিত হয় আন্তর্জাতিক কলেজিয়েট প্রোগ্রামিং প্রতিযোগিতা (আইসিপিসি)। এর চূড়ান্ত পর্বে প্রতিবারই অংশ নেয় বাংলাদেশ। আর ঢাকায় নিয়মিতভাবেই হয় এর বাছাই পর্ব। সময়ের বদলেএখন আমাদের দেশের প্রোগ্রামাররা শুধু প্রোগ্রামিং সমস্যার সমাধানই করেন এমন নয়।বরং সমস্যা বা প্রশ্নও তৈরি করছেন বিশ্বের বাঘা বাঘা প্রোগ্রামারদের সঙ্গে পাল্লা দিয়ে।

দেশ সেরা প্রোগ্রামাররা
দেশে প্রোগ্রামিং প্রতিযোগিতার শুরু থেকে জড়িত আছেন শাহরিয়ার মঞ্জুর। ২০০০ সাল থেকে প্রোগ্রামিং সমস্যা সমাধানের কাজটি শুরু। তার পর থেকেই প্রোগ্রামিং নিয়ে আছেন তিনি। ২০০৩ সাল থেকে প্রতিবছর এসিএম আইসিপিসির চূড়ান্ত পর্যায়ে একজন বিচারক হিসেবে দায়িত্ব পালন করছেন তিনি। তবে শুধু এসিএম আইসিপিসি নয়, বিভিন্ন জাতীয় ও আন্তর্জাতিক প্রোগ্রামিং প্রতিযোগিতার জন্য তিনি প্রায় নিয়মিতভাবেই সমস্যা তৈরি করছেন। তাঁর উদ্যোগেই স্পেনের ভ্যালাদলিদ বিশ্ববিদ্যালয় পরিচালিত অনলাইন প্রোগ্রামিং প্রতিযোগিতার সাইটে (http://online-judge.uva.es) নিয়মিত প্রোগ্রামিং প্রতিযোগিতা আয়োজনের চর্চা শুরু হয়। দীর্ঘদিন ধরে অসংখ্য ভালো সমস্যা তৈরি করে কেবল বাংলাদেশেই নয়, সারা বিশ্বের প্রোগ্রামারদের কাছে দারুণ জনপ্রিয় এই তরুণ প্রোগ্রামিং শিল্পী। বর্তমানে তিনি সাউথইস্ট বিশ্ববিদ্যালয়ের কম্পিউটার বিজ্ঞান ও প্রকৌশল বিভাগে শিক্ষকতা করছেন।
শাহরিয়ার মঞ্জুরের পাশাপাশি বেশ কজন প্রোগ্রামার প্রতিযোগিতার জন্য প্রোগ্রামিং সমস্যা তৈরি করছেন। তাঁদের একজন হলেন আবদুুল্লাহ্ আল মাহমুদ। দেশের বিভিন্ন বিশ্ববিদ্যালয় ছাড়াও মালয়েশিয়ার আন্তর্জাতিক ইসলামি বিশ্ববিদ্যালয়ে প্রশিক্ষক হিসেবে কাজ করেছেন তিনি। ২০০৫ সালে এসিএম আইসিপিসির চূড়ান্ত পর্বে অংশ নেন। বিশ্বের অন্যতম প্রোগ্রামিং প্রতিযোগিতা টপকোডার (www.topcoder.com) সাইটের বাংলাদেশের প্রথম প্রোগ্রামার বিশেষ ‘রেড কোডার’ হয়েছেন তিনি। এ ছাড়া তিনি এসিএম আইসিপিসির একাধিক আঞ্চলিক পর্ব ও বিভিন্ন আন্তর্জাতিক প্রতিযোগিতায় সমস্যা তৈরি করেছেন। তাঁর তৈরি সমস্যাগুলো সাধারণত খুব জটিল ধরনের হয়। প্রোগ্রামিংকে সব সময় একটা খেলার মতো করেই দেখেন তিনি।
প্রোগ্রামার মোহাম্মদ মাহমুদুর রহমান ২০০৭ সালে এসিএম আইসিপিসির চূড়ান্ত পর্বে অংশ নেন। বর্তমানে বিভিন্ন জাতীয় ও আন্তর্জাতিক প্রোগ্রামিং প্রতিযোগিতার জন্য নিয়মিত সমস্যা তৈরি করেন। এসবের পাশাপাশি মাহমুদুর রহমান আন্তর্জাতিক ইনফরমেটিকস অলিম্পিয়াডে বাংলাদেশ দলের প্রশিক্ষকের দায়িত্বও পালন করেছেন। প্রোগ্রামিং সমস্যার সমাধান, প্রোগ্রামিং সমস্যা ও সফটওয়্যার তৈরি—এ তিনটি বিষয়ে তাঁর রয়েছে বিশেষ দক্ষতা। তিনি বলেন, এ তিনটা ভিন্ন ধরনের শিল্প। সমস্যা সমাধানের দক্ষতা নির্ভর করে একটি সমস্যাকে বিশ্লেষণ করে ছোট ছোট ভাগে ভাগ করার কৌশলের ওপর। আর সমস্যা তৈরির সবচেয়ে কঠিন দিক হচ্ছে, একটা সমস্যার সম্ভাব্য সব সঠিক এবং ভুল সমাধান চিন্তা করতে পারা। বর্তমানে মুক্ত সফটওয়্যার লিমিটেডের প্রধান কারিগরি কর্মকর্তা হিসেবে কাজ করছেন তিনি।
যাঁরা ভালো করছেন প্রোগ্রামিং, আবার তৈরি করছেন প্রোগ্রামিং সমস্যাও, তাঁদের মধ্যে আরেক প্রোগ্রামার হচ্ছেন সোহেল হাফিজ। তিনি বলেন, ভালো লাগা থেকেই প্রোগ্রাম করার শুরু। যাঁরা প্রোগ্রামিংয়ে আসতে চান, তাঁদের অবশ্যই জানতে হবে এবং প্রোগ্রামিং নিয়মিতভাবে করে যেতে হবে। সমস্যা সমাধানের পাশাপাশি সমস্যা তৈরিতে দক্ষ এ প্রোগ্রামার দেশে ও দেশের বাইরে বিভিন্ন প্রতিযোগিতার জন্য সমস্যা তৈরি করেন। এর পাশাপাশি গুরুত্বপূর্ণ কিছু অনলাইন প্রতিযোগিতার জন্যও সমস্যা তৈরি করেন।

[...]

18 September 2010 0 Comments

যন্ত্র গণকের যন্তর মন্তর (সর্টিং নিয়ে টিউটোরিয়াল)

সর্টিং ও অন্যান্য কিছু নিয়ে টিউটোরিয়াল লিখেছেন রাগিব হাসান-

“বাছাই করা, অর্থাৎ ক্রমানুসারে সাজানো তথ্য বিশ্লেষণের একটি মৌলিক সমস্যা। এক গাদা সংখ্যাকে ছোট থেকে বড়, কিংবা বড় থেকে ছোট, অথবা অনেকগুলো নামকে বর্ণানুক্রমিকভাবে সাজানো – এরকম সমস্যা আমাদের প্রতিনিয়তই সমাধান করতে হয়। কম্পিউটার বিজ্ঞানে এই সমস্যাটির সমাধানের কৌশলগুলোকে বলে সর্টিং অ্যালগরিদম। আজ আমরা দেখবো এই সর্টিং এর কিছু সহজ কৌশল।(…)

(…)সর্ট বা বাছাইয়ের হাজারো পদ্ধতি আছে, একেক ক্ষেত্রে একেকটি প্রযোজ্য। কম্পিউটার ব্যবহারের প্রতিটি ক্ষণেই যন্ত্রগণক ভেতরে ভেতরে এই সর্টিং করে চলেছে, তাই দ্রুতগতির সর্টিং বা বাছাই পদ্ধতি কম্পিউটার বিজ্ঞানের অত্যন্ত গুরুত্বপূর্ণ বিষয়। সর্টিং সম্পর্কে বিস্তারিত জানতে হলে দেখতে পারেন উইকিপিডিয়াতে।”

বিস্তারিত পড়তে ক্লিক করুন।

17 September 2010 3 Comments

কিছু কমন প্রোগ্রামিং রুটিন

লিখেছেন- শিশির

হ্যালো ওয়ার্ল্ড!

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

বি.দ্র.হ.: পুরোটাই এখানে লিখতে চেয়েছিলাম, কিন্তু সময় লাগে। তাই শুধু লিংক ।

কিছু কমন প্রোগ্রামিং রুটিন।
15 September 2010 0 Comments

মাহবুব সুমনের লেখা প্রোগ্রামিং কনটেস্টের টিউটোরিয়াল

  1. Overview of Programming Contest Practice in Bangladesh বাংলাদেশের প্রোগ্রামিং কনটেস্টের হালচাল
  2. Guide on How to Produce Good Problem Set টম ভেরহফের গাইড থেকে
  3. Tutorial on Valladolid Problem 10430
  4. Tutorial on Valladolid Problem 100
  5. Tutorial on Tree Related Problems

এছাড়া উদভ্রান্ত পথিক নামে তাঁর কিছু প্রবলেম ভ্যালাদোলিদ সাইটে (May Day Contest, Brightness of Brain Contest) রয়েছে। ভবিষ্যতের প্রবলেম সেটারদের এইগুলো খুব কাজে লাগবে। লেখাগুলো দেখতে চাইলে suttom ফন্ট লাগবে।

27 August 2010 0 Comments

প্রোগ্রামিং করো-টাকা কামাও! টপকোডারের ইন্ট্রো ও প্লাগইনস

লিখেছেন- ইকরাম মাহমুদ (smilitude)

লেখাটির ইংরেজী সংস্করণ (ভিবব পান্ডের লেখা) পাওয়া যাবে এখানে

বিশ্বের অন্যতম বড় কম্পিউটার প্রোগ্রামিং প্রতিযোগিতা টপকোডার। টপকোডারে রেজিস্ট্রেশন করার জন্য তোমাকে টপকোডারের ওয়েব পেইজে যেতে হবে। সেটার অ্যাডরেস হচ্ছে http://www.topcoder.com/tc

11 টপকোডারে ইনট্রো   প্রোগ্রামিং কন্টেস্টের জন্য | Techtunes

ডান কোনায় দেখো একটা রেজিস্টার করার লিংক আছে। ওখানে ক্লিক করলে রেজিস্টার করার পেইজ খুলবে।

2 টপকোডারে ইনট্রো   প্রোগ্রামিং কন্টেস্টের জন্য | Techtunes

বাকিগুলোতে টিক দেয়ার কোন দরকার নেই আপাতত। এরপর একটা বিশাল পৃষ্ঠা আসবে, সেখানে তোমার নাম ঠিকানা লিখতে হবে।

3 টপকোডারে ইনট্রো   প্রোগ্রামিং কন্টেস্টের জন্য | Techtunes

রেজিস্ট্রেশন শেষে টপকোডার তোমাকে তোমার মেইল অ্যাডরেসে একটা মেইল করবে, কনফার্ম করার জন্য যে ওটা আসলেই তোমার ইমেইল আইডি। ওখানে একটা লিংক থাকবে, সেটাতে ক্লিক করার সাথে সাথে তুমি একজন টপকোডার! :)

অ্যারেনা

অনেক অনেক বছর আগে যখন রোমান সাম্রাজ্য ছিল, তখন গ্ল্যাডিয়েটররা যে জায়গাটায় মারামারি করতো, সেটাকে বলা হতো অ্যারেনা। টপকোডারের সব কন্টেস্টগুলো অ্যারেন্জ করা হয় একটা জাভা অ্যাপ্লেটে, আর সেটাকে ডাকা হয় অ্যারেনা বলে, কারণ সেখানে সব কোডাররা প্রতিযোগীতা করতে আসে, রোমের গ্ল্যাডিয়েটরদের মতই।

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

জাভা ইন্সটল করার পর, অ্যারেনা খোলার জন্য তোমাকে টপকোডারের পেইজে যেতে হবে।

11 টপকোডারে ইনট্রো   প্রোগ্রামিং কন্টেস্টের জন্য | Techtunes

বামপাশে দেখো, একটা জায়গায় O(n) লেখা আছে। ওখানে ক্লিক করলে অ্যারেনা ডাওনলোড শুরু হবে। প্রথমবার রান করার সময় অনেক সময় লাগে জাভার। একটু অপেক্ষা করতে হবে সেজন্য। যদি কোন ডায়ালগ বক্স আসে, এই অ্যাপলেটটাকে অ্যালাও করতে ভুলো না।

5 টপকোডারে ইনট্রো   প্রোগ্রামিং কন্টেস্টের জন্য | Techtunes

যদি ডিরেক্ট কানেকশন কাজ না করে (প্রক্সি সেটিংস এর জন্য), সেক্ষেত্রে কানেকশনে গিয়ে Html Tunnel ব্যবহার করতে পারো। অ্যারেনা খুললে, তোমাকে সেখানে ইউজার নেইম আর পাসওয়ার্ড দিতে হবে অ্যারেনায় ঢোকার জন্য। তারপর go তে ক্লিক করলে তুমি অ্যারেনার ভিতরে ঢুকে যাবে।

[...]

23 August 2010 1 Comment

সি++ স্ট্যান্ডার্ড টেম্প্লেট লাইব্রেরী

সি++ স্ট্যান্ডার্ড টেম্প্লেট লাইব্রেরী

লিখেছেন- ইকরাম মাহমুদ (smilitude)

STL হল একটা বেশ বড়সড় একটা লাইব্রেরী। মোটামুটি বেশিরভাগ ডাটা স্ট্রাকচার আর হাবিজাবি এটার মধ্যে লিখে রাখা আছে, তোমাকে শুধু জানতে হবে সেটা তুমি কিভাবে ব্যবহার করবে।

ভেক্টর

মাঝে মাঝে এমন হয় – আমাদের একটা 2D অ্যারে দরকার, যেটায় মোটামুটি প্রতিটায় সর্বোচ্চ ১০০০০ টা ডাটা রাখতে হবে, আর প্রতিটা ডাটায় সর্বোচ্চ ১০০০০টা করে ডাটা রাখা লাগবে। কিন্তু আমাকে এটাও বলা আছে যে সর্বোচ্চ ১০০০০০ টা ডাটা থাকতে পারে।

খুব সাধারণভাবে যেটা মাথায় আসে, সেটা হচ্ছে এরকম কিছু একটা

int array[10000][10000];

তাই না? এটা কিন্তু বেশ বড়সড় একটা অ্যারে। আমার কম্পিউটার মাথা ঘুরে পড়ে যাবে তাকে এই পরিমান মেমরি অ্যালোকেট করতে বললে, কিন্তু আমার আসলে এত বেশি জায়গা লাগছে না, কারণ আমাকে বলেই দেয়া হয়েয়ে ডাটা সবমিলে সর্বোচ্চ ১০০০০০ টা থাকে পারে।

এধরণের সময়, আমরা ডাইনামিক মেমরি অ্যালোকেট করি – ঠিক যতটুকু মেমরি দরকার ঠিক ততটুকুই নেই। যেটা ম্যানুয়ালি করা বেশ ঝক্কি, আর সেটায় মেমরি পরিষ্কারও করে দিতে হয় কাজ শেষে, নইলে সব ডাটা জমতে জমতে কম্পিউটারের গলা চিপে ধরে।

ভেক্টর হলো একটা অ্যারে, যেটায় ডাইনামিকালি জিনিসপাতি ঢুকিয়ে রাখা যায়। মানে, এটাও একটা অ্যারে, কিন্তু সেটা ঠিক ততটুকু মেমরি খায়, যতটুকু খাওয়া লাগে।

ভেক্টর ডিক্লেয়ার করে এভাবে

vector< int > array;

তুমি যদি অন্য কোন টাইপের ডাটা নিতে চাও তাইলে int এর জায়গায় সেই ডাটার নাম লিখতে হবে। যেমন এটা আরো কিছু অ্যারে।

vector< double > water;
vector< long long > balance;
vector< char > characters;
vector< day > diary;

ভেক্টরে কোন ডাটা রাখতে হলে, সেই ভেক্টরের শেষে ডাটাটাকে পুশ করতে হয়।
array.push_back( 100 );

আর ভেক্টরে কটা ডাটা আছে সেটা আমরা জানতে পারি .size() ফাংশনকে কল করে। যেমন ধরো, আমি একটা ভেক্টরে কিছু ইন্টেজার ঢুকাবো, তারপর সবাইকে প্রিন্ট করবো, সেটার কোড হবে এরকম।

int main() {
vector< int > v;
v.push_back( 1 );
v.push_back( 2 );
v.push_back( 3 );
v.push_back( 4 );

for(int i=0; i<v.size(); i++)

cout << v[i] << endl;

return 0;
}

বাকি সব কিছুতে ভেক্টরকে সাধারণ অ্যারের মত ব্যবহার করা যায়। যেমন আমি 0th এলিমেন্টটা পাল্টে দিতে পারি v[0] = 10000 লিখে। আরেকটা মজা হচ্ছে আমরা অ্যারেতে ধাম করে সরাসরি কপি করতে পারি না । কিন্তু ভেক্টরে সেটা করা যায়।

int main() {
vector< int > v, t;
v.push_back( 1 );
v.push_back( 2 );
v.push_back( 3 );
v.push_back( 4 );

t = v; // copying
for(int i=0; i<t.size(); i++)

cout << t[i] << endl;

return 0;
}

ভেক্টরে যদি আমি 2D ডাটা রাখতে চাই তাহলে সেটা দুভাবে করা যায়। আমি প্রথমটা প্রেফার করি, পরেরটা দেখতে আমার ভয় ভয় লাগে। কিন্তু মাঝে মাঝে কোন পথ থাকে না সেটা লেখা ছাড়া।

vector< int > v[100];

vector< vector< int > > v;

vector< vector< vector< int > > > v; // 3D

একটা জিনিসে একটা সাবধান থেকো, vector<vector<int>> v; এভাবে লিখলে >> এর জন্য কিছু কম্পাইলর কিন্তু এরর মারে।

[...]

21 August 2010 1 Comment

সি++ এর প্রাথমিক ধারণা (টিউটোরিয়াল)

সি++ এর প্রাথমিক ধারণা  (টিউটোরিয়াল)

লিখেছেন- ইকরাম মাহমুদ (smilitude)

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

আমরা কন্টেস্টে করি অনেক বেশি চাপের মধ্যে, আমাদের প্রবলেম পড়ে বুঝতে হয় কি চাওয়া হচ্ছে, আমাদের অ্যালগরিদম ডিজাইন করতে হয়, আমাদের একটা কোড ডিজাইন করতে হয়, এবং আমরা সেটা করি মোটামুটি কোন ধরণের ফ্লোচার্ট হাবিজাবি না এঁকেই। এবং তারপর আমাদের কোডগুলো বসে বসে আমাদের ডিবাগও করতে হয়, টেস্টিং ও করতে হয়। তো ব্যাপারটা দাড়াচ্ছে, আমরা প্রবলেম সলভার, আমরা কম্পিউটার সায়েন্টিস্ট, আমরা কোডার, আমরা সফটওয়্যার আর্কিটেক্ট, আমরা ডিবাগার – কিন্তু আমরা পুরোপুরি এগুলোর কিছুই নই। কিন্তু একই সাথে আমরা এগুলোর সবকিছু।

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

এই লেখাটাতে আমি সি++ নিয়ে লিখবো। আর লিখবো কন্টেস্ট প্রোগ্রামারদের ঠিক কতটুকু সি++ জানা দরকার সেটা নিয়ে, আর ঠিক সেইটুকুই। কন্টেস্ট প্রোগ্রামাররা আর সবার মতো না, যে তাদেরকে একটা মোটাসোটা স্বাস্থ্যবান সি++ এর বই ধরিয়ে দিয়ে “নাচো” টাইপের কিছু একটা বলে আমি উধাও হয়ে যাবো।

আর STL নিয়ে যা কিছু লিখবো তার বেশিরভাগ জুড়ে থাকবে ডাটা স্ট্রাকচার। আসলে কি, কম্পিউটারে আমরা প্রচুর ডাটা জমা করি। এখন ডাটাগুলোকে কম্পিউটারে কিভাবে রাখলে আমাদের কাজ করতে সুবিধা হবে, আমরা যদি সেটা ভেবে সেভাবে ডাটাগুলোকে সাজিয়ে রাখি, সেই বুদ্ধিমানের মত করে ডাটা সাজানোটাকেই আসলে ডাটা স্ট্রাকচার বলে।  একজন নতুন কন্টেস্ট্যান্টের কাছে ডাটা স্ট্রাকচার নিয়ে লাফালাফি করাটা খুব অদ্ভূত দেখাবে। এবং আমি যদি পুরোপুরি সবকিছুই ব্যাক্ষা করতে যাই, যে কোনটা কেন দরকার, কিভাবে দরকার, তাহলে এই লেখাটা বিশাল হয়ে যাবে আর আমার আঙ্গুল ব্যাথা করবে এটা লিখতে। তো আমি সব লিখে যাচ্ছি, যাতে তুমি শুধু জিনিসগুলো জেনে রাখতে পারো, কোন না কোন দিন হঠাৎ দেখবে একটা প্রবলেম সলভ করতে তোমার কিছু জানা ডাটা স্ট্রাকচার ব্যবহার করতে হচ্ছে! :)

প্রথম অংশ – সি++ নিয়ে বকরবকর

স্ট্রাকচার

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

আমরা এই জিনিসটাকে বলি স্ট্রাকচার। এটা লিখি অনেকটা এভাবে।

struct data {
char name[20];
int number, email_num;
};

অবশ্যই ইমেইল আইডি ইনটেজার হয় না – আমি শুধু বোঝানোর লিখছি।

[...]

19 August 2010 0 Comments

সি# প্রোগ্রামিং শিক্ষা (লিংক)

[html] [code] Lesson 01: Getting Started
[html] [code] Lesson 02: Expressions, Types, and Variables
[html] [code] Lesson 03: Control Statements – Selection
[html] [code] Lesson 04: Control Statements – Loops
[html] [code] Lesson 05: Methods
[html] [code] Lesson 06: Namespaces
[html] [code] Lesson 07: Introduction to Classes
[html] [code] Lesson 08: Class Inheritance
[html] [code] Lesson 09: Polymorphism
[html] [code] Lesson 10: Properties
[html] [code] Lesson 11: Indexers
[html] [code] Lesson 12: Structs
[html] [code] Lesson 13: Interfaces
[html] [code] Lesson 14: Introduction to Delegates and Events
[html] [code] Lesson 15: Introduction to Exception Handling
[html] [code] Lesson 16: Using Attributes
[html] [code] Lesson 17: Enums
[html] [code] Lesson 18: Overloading Operators
[html] [code] Lesson 19: Encapsulation
[html] [code] Lesson 20: Introduction to Generic Collections
[html] [code] Lesson 21: Anonymous Methods
[html] [code] Lesson 22: Topics on C# Type
[html] [code] Lesson 23: Working with Nullable Types