একটা প্রোগ্রামের চিন্তা করি, যেটায় ইউজার থেকে দুইটা নাম্বার নিয়ে যোগ করে তা রিটার্ন / প্রিন্ট করবে বা কনসোলে দেখাবে।
সহজেই আপনি প্রোগ্রামটা লিখে পেলতে পারবেন তাই না? দুটি ভ্যারিয়েবল নিলাম, তারপর তা যোগ করে প্রিন্ট করলাম। শেষ।
যেমনঃ
#include <stdio.h> int main() { int x, y; printf("Enter First Number:\n"); scanf("%d", &x); printf("Enter Second Number:\n"); scanf("%d", &y); printf("Addition is %d", (x+y)); return 0; }
আচ্ছা, যদি তিনটি সংখ্যা যোগ করতে বলে তখন কি করবেন? তিনটি ভ্যারিয়বল নিয়ে তা যোগ করে প্রিন্ট করবেন তাই তো?
আচ্ছা, যদি তিনশ বা তিনহাজার সংখ্যা নিয়ে কাজ করতে হয় তখন কি করবেন? এত গুলো ভ্যারিয়বল কিভাবে লিখবেন? লিখতে কত সময় লাগবে? আর প্রোগ্রামের সাইজ কত বড় হয়ে যাবে না? আরো অনেক গুলো প্রশ্ন জন্ম নিবে এমন সমস্যায়। যাই হোক, প্রোগ্রামিং আসছে মানুষের সমস্যা কমাতে J বাড়াতে নয়। তাই এর জন্য অনেক সহজ একটা সমাধান আছে। যার নাম Array, অনেক মজার একটা জিনিস।
এখন আমাকে যদি আপনি জিজ্ঞেস করেন Array কি? তাহলে আমি বলব কন্টেইনার। বাক্স। যেটার মধ্যে অনেক কিছু রাখা যায়। বাক্সটা কেমন হবে তা আমরা বলে দিতে পারি। বাক্সটায় কয়েকটা খোপ/প্রকোষ্ঠ থাকবে তা আমরা বলে দিতে পারি এবং বলে দেওয়ার পর তার মধ্যে সুন্দর মত কিছু ডাটা/তথ্য রাখতে পারি।
যেমন আমরা ৩০০টি ভ্যারিয়বল নিয়ে কাজ করব, তখন ঐ কন্টেইনার বা বাক্সে ৩০০টি প্রকোষ্ঠ আমাদের জন্য তৈরি হবে। আর আমরা সুন্দর মত একটা একটা করে ভ্যারিয়বল রাখতে পারব বাক্সের মত দেখতে ঐ Array তে। নিছের ছবিটি দেখুনঃ
এটা একটা বাক্সের মত দেখায় না যার মধ্যে ৬টি প্রকোষ্ঠ রয়েছে?
Array কিছুটা এমন। আর এটা দেখতে একটা লাইনের মত তাই না? আর তাই এর নাম Linear Array বা One Dimensional Array.
Array এর ভিতরে যা থাকে তাকে Array Elements বলে। এরেতে সব ধরনের ডাটা রাখা যায়, এমন Integer, Character, Floating Point Number, String ইত্যাদি। Array তে আরেকটা জিনিস আছে, যার নাম হচ্ছে Index. যা দিয়ে আমরা কোন প্রকোষ্ঠে কিছু রাখতে পারব বা কি রাখছি তা বের করতে পারব। প্রতিটা প্রকোষ্ঠের একটা ইনডেক্স থাকে। Array এর প্রথম Element এর Index হচ্ছে ০, দ্বিতীয় Element এর Index বা উপাদানের হচ্ছে ১ , তৃতীয় উপাদানের হচ্ছে ২ ইত্যাদি। এভাবে বাড়তে থাকবে। উপাদানের নাম্বারের থেকে এক কমই হচ্ছে ইনডেক্স নাম্বার। যেমন ষষ্ঠ উপাদানের ইনডেক্স হচ্ছে ০৫।
ইনডেক্স কি তা এখনি পরিষ্কার হয়ে যাবে। মনে করি আমরা Number নামে একটা Array নিয়েছি যার সাইজ হচ্ছে ৬, সাইজ বলতে এরেতে কয়েটা উপাদান থাকবে তা বুঝানো হচ্ছে।
এরে হচ্ছে একটা ভ্যারিয়েবল, যাকিছু ধরে রাখতে পারে সাধারন গাণিতিক ভ্যারিয়েবলের মত। এখন আমরা যদি Number নামক Array তে কিছু রাখতে চাই, তাহলে বলে দিতে হবে কোন ঘরে/ইনডেক্সে রাখব।
যেমন
Number[0] = 77; লিখলে Number Array এর প্রথম ইন্ডেক্সে 77 রেখে দিবে।
Number[1] = 11; লিখলে Number Array এর দ্বিতীয় ইন্ডেক্সে 11 রেখে দিবে।
Number[2] = 54; লিখলে Number Array এর তৃতীয় ইন্ডেক্সে 54 রেখে দিবে।
এভাবে বাকি ইনডেক্সে অন্যান্য সংখ্যা আমরা রাখতে পারব।
আচ্ছা আমরা এখন একটা প্রোগ্রাম চিন্তা করি যেটা ইউজার থেকে ৬টা নাম্বার নিবে এবং পরে তা যোগ করে রেজাল্ট আমাদের দেখাবে। এটা সাধারন পদ্ধতিতে করতে গেলে আমাদের আগে ৬টা ভ্যারিয়েবল নিতে হত, তারপর সেগুলোকে যোগ করতে হত তারপর যোগফল দেখাতে হতো।
এখন আমরা কত সহজেই এ জিনিসটা করতে পারব মাত্র একটি ভ্যারিয়েবল নিয়েঃ
#include <stdio.h> int main() { int Number[6]; int i, result=0; for(i=0; i<6; i++){ printf("Enter %d no Number:\n", i+1); scanf("%d", &Number[i]); result +=Number[i]; } printf("Result is: %d", result); return 0; }
প্রোগ্রামটা আসলে একটা বাজে প্রোগ্রাম। শুধু মাত্র বুঝানোর জন্য এমন ভাবে লেখা হয়েছে। এখানে আমরা একটা Integer Array নিলাম যার Size হচ্ছে 6, অর্থাৎ আমরা এর মধ্যে শুধু মাত্র ৬টি ইলিমেন্ট রাখতে পারব।
scanf(“%d”, &Number[i]); এটা দিয়ে আমরা i এর বর্তমার মান যত তত তম ঘরে ইনপুট নেওয়া মানটি রাখব। প্রথমে i এর মা ধরে নিয়েছি 0, তা Number[0] অর্থাৎ প্রথম ঘরে রানটাইমে আমাদের ইনপুট দেওয়া সংখ্যাটি রাখবে। আমরা যেহেতু লুপ চালিয়েছি এবং প্রতিবার i এর মান এক করে বাড়িয়ে দিয়েছি তাই পরের বার i এর মান হবে 1 এবং Number[1] বা Number Array এর দ্বিতীয় ঘরে রানটাইমে দ্বিতীয়বার ইনপুট দেওয়া আমাদের সংখ্যাটি রাখবে। এভাবে লুপটি ৬ বার ঘুরবে। আমরা বুদ্ধি করে প্রতিবার সংখ্যাটি result +=Number[i] এ লাইনের সাহায্যে ইনপুট নেওয়ার সময় আগের যোগফলের সাথে যোগ করে দিচ্ছি। পরে রেজাল্টি প্রিন্ট করলে আমরা সব গুলো সংখ্যার যোগ ফল পেয়ে যাবো। এখন ইচ্ছে করলে আমরা প্রোগ্রামটি একটু মডিফাই করে কি কি সংখ্যা আমরা ইনপুট দিয়েছি তা বেরও করতে পারব। শুধু মাত্র আরেকটি লুপ চালিয়ে Number Array এর উপাদান গুলো প্রিন্ট করলেই হবে।
#include <stdio.h> int main() { int Number[6]; int i, j, result=0; for( i=0; i<6; i++){ printf("Enter %d no Number:\n", i+1); scanf("%d", &Number[i]); result +=Number[i]; } printf("Result is %d and you entered: ", result); for( j=0; j<6; j++){ printf("%d ", Number[j]); } return 0; }
Array অনেক শক্তিশালী জিনিস। অনেক বেশি ব্যবহার এটির।
Array কিন্তু Multi-Dimensional হতে পারে। উপরে আমরা যে উদাহরনটি দেখেছি তা ছিল One-Dimensional এর Dimension সংখ্যা দুই, তিন বা আরো বেশি হতে পারে।
এটি একটি Two Dimensional Character Array যার উপাদান সংখ্যা ১২। মনে করি Array টির নাম Character এবং এটিকে লিখতে হবে Character[3][4] এখানে প্রথমটা হচ্ছে row সংখ্যা, দ্বিতীয়টি হচ্ছে Column সংখ্যা। অর্থাৎ এখানে ৩টি রো রয়েছে এবং ৪টি কলাম রয়েছে, সর্বোমোট উপাদাম সংখ্যা হচ্ছে ১২।
প্রথম উপাধান অর্থাৎ উপরের Character নামক Two Dimensional Array থেকেঃ
প্রথম উপাদানটি পেতে হলে আমাদের লিখতে হবে Character[0][0] এবং তা হচ্ছে A
দ্বিতীয় উপাদানটি পেতে হলে আমাদের লিখতে হবে Character[0][1] এবং তা হচ্ছে B
তৃতীয় উপাদানটি পেতে হলে আমাদের লিখতে হবে Character[0][2] এবং তা হচ্ছে C
চতুর্থ উপাদানটি পেতে হলে আমাদের লিখতে হবে Character[0][3] এবং তা হচ্ছে D
পঞ্চম উপাদানটি পেতে হলে আমাদের লিখতে হবে Character[1][0] এবং তা হচ্ছে E
ষষ্ঠ উপাদানটি পেতে হলে আমাদের লিখতে হবে Character[1][1] এবং তা হচ্ছে F
সপ্তম উপাদানটি পেতে হলে আমাদের লিখতে হবে Character[1][2] এবং তা হচ্ছে G
এভাবে আমরা পরের উপাদান গুলোও পেতে পারি।
কোন কিছু রাখতে হলে এ ভাবে একই ধাপ অনুসরন করতে হবে।
প্রথম ইনডেক্সে একটা Character রাখব, তার জন্য লিখতে হবে Character[0][0]
আগেই বলেছি Array Index শূন্য থেকে শুরু হয়।
দ্বিতীয় ইনডেক্সে একটা Character রাখার জন্য লিখতে হবে Character[0][1]
এভাবে বাকি গুলো রাখতে হবে।
হয়তো প্রথম প্রথম একটু বিদঘুটে লাগতে পারে, দুই একবার ভালো করে পর্যবেক্ষন করলে অনেক সহজ মনে হবে। আর চিন্তা করার সময় যদি বাস্তব জীবনের সাথে মিলিয়ে চিন্তা করা যায় তাহলে আরো দ্রুত বুঝা যাবে।
উদাহরন হিসেবে উপরে আমি সি প্রোগ্রামিং ব্যবহার করেছি। এরের মূল ধারনা এবং ব্যবহার সকল প্রোগ্রামিং এ একই। শুধু মাত্র এরে ডিক্লেয়ার করার পদ্ধতি ভিন্ন।