আচ্ছা, যদি তিনশ বা তিনহাজার সংখ্যা নিয়ে কাজ করতে হয় তখন কি করবেন? এত গুলো ভ্যারিয়বল কিভাবে লিখবেন? লিখতে কত সময় লাগবে? আর প্রোগ্রামের সাইজ কত বড় হয়ে যাবে না?
Array কন্টেইনার বাক্স মত । যেটার মধ্যে অনেক কিছু রাখা যায় (variable)। বাক্সটা কেমন হবে তা আমরা বলে দিতে পারি ( যেমন ঃ Character, Floating ,int, String ইত্যাদি )। বাক্সটায় কয়েকটা খোপ/প্রকোষ্ঠ থাকবে তা আমরা বলে দিতে পারি (কয়টি নিব variable ; 3,4,9.... etc ) এবং বলে দেওয়ার পর তার মধ্যে সুন্দর মত কিছু ডাটা/তথ্য রাখতে পারি ।
যেমন আমরা যখন ৩০০টি ভ্যারিয়বল নিয়ে কাজ করব, তখন ঐ কন্টেইনার বা বাক্সে ৩০০টি প্রকোষ্ঠ আমাদের জন্য তৈরি হবে। আর আমরা সুন্দর মত একটা একটা করে ভ্যারিয়বল রাখতে পারব দেখতে বাক্সের মত ।
এরেতে সব ধরনের ডাটা রাখা যায়, এমন 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 রেখে দিবে।
এভাবে বাকি ইনডেক্সে অন্যান্য সংখ্যা আমরা রাখতে পারব।
আমরা simple code করব তারপর লুপ ব্যবহার করে কাজ করব ,তাহলে বুঝতে সুবিধা হবে ।
#include <stdio.h>
int main()
{
int ara[5] = {10, 20, 30, 40, 50};
printf("First element: %d\n", ara[0]);
printf("Third element: %d\n", ara[2]);
return 0;
}
এখানে ara হল array এর নাম , ara[5] এখানে আমরা ৫( ০,১,২,৩,৪) টি variable নিয়ে কাজ করব ।
variable গুলো হল ara[০] , ara[১] , ara[২] , ara[৩] , ara[৪] ;
int a[5] = {10,20,30,40,50} ; মানে হল
ara[০] =১০,
ara[১] =২০,
ara[২] =,৩০
ara[৩] =৪০,
ara[৪] =৫০;
এখন কোনো অ্যারের সব উপাদান যদি একসঙ্গে দেখাতে চাই, তাহলে উপায় কী? উপায় হচ্ছে প্রথম উপাদান (ara[0]), দ্বিতীয় উপাদান (ara[1]), তৃতীয় উপাদান (ara[2]) … এভাবে একে একে সবগুলো প্রিন্ট করা। আর তার জন্য অবশ্যই আমরা লুপের সাহায্য নেব।
#include <stdio.h>
int main()
{
int ara[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int i;
for(i = 0; i < 10; i++) {
printf("%d th element is: %d\n", i+1, ara[i]);
}
return 0;
}
আর যদি শেষ উপাদান থেকে প্রথম উপাদান পর্যন্ত দেখাতে হতো? কোনো সমস্যা নেই, শুধু লুপে এ indexটি 9 থেকে 0 পর্যন্ত আনলেই চলবে। এখন তোমরা প্রোগ্রামটি লিখে ফেলো।
#include <stdio.h>
int main()
{
int ara[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int i;
for(i = 9; i >= 0; i--) {
printf("%d th element is: %d\n", i, ara[i]);
}
return 0;
}
এবারে একটি ছোট সমস্যা। কোনো একটি অ্যারেতে দশটি উপাদান আছে, সেগুলো বিপরীত ক্রমে রাখতে হবে। অর্থাৎ দশম উপাদানটি হবে প্রথম উপাদান, প্রথমটি হবে দশম, দ্বিতীয়টি হবে নবম, নবমটি হবে দ্বিতীয়.. এই রকম। তার জন্য আমরা যেটি করতে পারি, আরেকটি অ্যারের সাহায্য নিতে পারি। দ্বিতীয় অ্যারেটিতে প্রথম অ্যারের উপাদানগুলো বিপরীত ক্রমে রাখবো। তারপর দ্বিতীয় অ্যারেটি প্রথম অ্যারেতে কপি করে ফেলব।
#include <stdio.h>
int main()
{
int ara[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int ara2[10];
int i, j;
for(i = 0, j = 9; i < 10; i++, j--) {
ara2[j] = ara[i];
}
for(i = 0; i < 10; i++) {
ara[i] = ara2[i];
}
for(i = 0; i < 10; i++) {
printf("%d\n", ara[i]);
}
return 0;
}
আচ্ছা আমরা এখন একটা প্রোগ্রাম চিন্তা করি যেটা ইউজার থেকে ৬টা নাম্বার নিবে এবং পরে তা যোগ করে রেজাল্ট আমাদের দেখাবে। এটা সাধারন পদ্ধতিতে করতে গেলে আমাদের আগে ৬টা ভ্যারিয়েবল নিতে হত, তারপর সেগুলোকে যোগ করতে হত তারপর যোগফল দেখাতে হতো।
এখন আমরা কত সহজেই এ জিনিসটা করতে পারব মাত্র একটি ভ্যারিয়েবল নিয়েঃ
#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=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=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=result+Number[i];
}
printf("Result is %d and you entered: ", result);
for( j=0; j<6; j++)
{
printf("%d ", Number[j]);
}
return 0;
}