একটা প্রোগ্রামের কথা চিন্তা করি, যেটায় ইউজার থেকে দুইটা নাম্বার নিয়ে যোগ করে তা রিটার্ন / প্রিন্ট করবে বা কনসোলে দেখাবে।
সহজেই আপনি প্রোগ্রামটা লিখে ফেলতে পারবেন তাই না? দুটি ভ্যারিয়েবল নিলাম, তারপর তা যোগ করে প্রিন্ট করলাম। শেষ।
#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;
}
আচ্ছা, যদি তিনটি সংখ্যা যোগ করতে বলে তখন কি করবেন? তিনটি ভ্যারিয়বল নিয়ে তা যোগ করে প্রিন্ট করবেন তাই তো?
আচ্ছা, যদি তিনশ বা তিনহাজার সংখ্যা নিয়ে কাজ করতে হয় তখন কি করবেন? এত গুলো ভ্যারিয়বল কিভাবে লিখবেন? লিখতে কত সময় লাগবে? আর প্রোগ্রামের সাইজ কত বড় হয়ে যাবে না? আরো অনেক গুলো প্রশ্ন জন্ম নিবে এমন সমস্যায়।
যাই হোক, প্রোগ্রামিং আসেছে মানুষের সমস্যা কমাতে , বাড়াতে নয়। তাই এর জন্য অনেক সহজ একটা সমাধান আছে। যার নাম Array, অনেক মজার একটা জিনিস। এতে একই ধরনের (Character, Floating ,int, String )অনেকগুলো ভেরিয়েবল একসঙ্গে রাখা যায়। ভেরিয়েবলের যেমন নাম রাখি, অ্যারের বেলাতেও তেমন একটি নাম দিতে হয়।
এখন আমাকে যদি আপনি জিজ্ঞেস করেন Array কি? তাহলে আমি বলব কন্টেইনার বাক্স (variable এর মত )। যেটার মধ্যে অনেক কিছু রাখা যায় (variable)। বাক্সটা কেমন হবে তা আমরা বলে দিতে পারি ( যেমন ঃ Character, Floating ,int, String ইত্যাদি )। বাক্সটায় কয়েকটা খোপ/প্রকোষ্ঠ থাকবে তা আমরা বলে দিতে পারি (কয়টি নিব variable ; 3,4,9.... etc ) এবং বলে দেওয়ার পর তার মধ্যে সুন্দর মত কিছু ডাটা/তথ্য রাখতে পারি ।
যেমন আমরা যখন ৩০০টি ভ্যারিয়বল নিয়ে কাজ করব, তখন ঐ কন্টেইনার বা বাক্সে ৩০০টি প্রকোষ্ঠ আমাদের জন্য তৈরি হবে। আর আমরা সুন্দর মত একটা একটা করে ভ্যারিয়বল রাখতে পারব দেখতে বাক্সের মত । নিচের ছবিটি দেখুনঃ
এটা একটা বাক্সের মত দেখায় , যার মধ্যে ৬টি প্রকোষ্ঠ বা ঘর (index) রয়েছে?
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 রেখে দিবে।
এভাবে বাকি ইনডেক্সে অন্যান্য সংখ্যা আমরা রাখতে পারব।
এটা কিছুটা এমন ,মনে কর আমাদের ক্লাস এ ৩ টা রবিন নামে ছেলে আছে । তাদের আমরা রবিন-১,রবিন-২,রবিন-৩ বলে ডাকি এবং তাদের তুমি কিছু আম দিবে । তো
রবিন-১ কে তুমি দিলে ৫ টি আম ,
রবিন-২ কে দিলে তুমি ১০ টি ,এবং
রবিন-৩ কে দিলে ২ টি ,
এখানে রবিন হল array এর নাম ।
রবিন-১,২,৩, এই গুল হল index.
আর রবিন-১ ,রবিন- ২ , রবিন -৩ প্রত্যেকে হল এক একটি variable .
এবং ৫,১০,২ এগুল হল variable এর মান ।
লুপ ব্যবহার করে আমরা অনেক গুলি variable , array এর মাধ্যমে এক সাথে নিতে পারি এবং তা নিয়ে কাজ করতে পারি ।
তবে আগে আমরা simple code করব তারপর লুপ ব্যবহার করে কাজ করব ,তাহলে বুঝতে সুবিধা হবে ।
example :1
#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[৪] =৫০;
তবে আমরা কিন্তু printf এ ara[০] , ara[২] output দিয়েছি ।
example :2
#include <stdio.h>int main()
{int ara[5] = {6, 7, 4, 6, 9};
printf("%d\n", ara[-1]);printf("%d\n", ara[5]);printf("%d\n", ara[100]);return 0;
}
এটির জন্য কী আউটপুট আসা উচিত?
আমি জানি না এবং এটি জানা সম্ভব নয়। যেকোনো ধরনের সংখ্যা আসতে পারে। এগুলোকে গারবেজ (garbage) বলে। কারণ আসলে তো ওই অ্যারেতে -1, 5, 100 এই ইনডেক্স বলতে কিছু নেই। অ্যারেটির দৈর্ঘ্যই হচ্ছে 5 সুতরাং ইনডেক্স হবে 0 থেকে 4 .
example 3 :
এখন কোনো অ্যারের সব উপাদান যদি একসঙ্গে দেখাতে চাই, তাহলে উপায় কী? উপায় হচ্ছে প্রথম উপাদান (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;
}
বাকি টুকু part 2 তে দেখ ..........................................।
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDelete