আজকে আমাদের আলোচ্য বিষয় অ্যারে। এ পর্যন্তু আমরা ভেরিয়েবল নিয়ে জেনেছি, ভেরিয়েবল ডেক্লিয়ার করা, এবং ভেরিয়েবল নিয়ে আরো নানা রকম অপারেশন আমরা ইতিমধ্যে করেছি।
এবার তোমাদের কাছে আমি একটি প্রশ্ন রাখি!
মনেকরো, একটি শ্রেনীতে ৫ জন ছাত্র আছে। আমি তাদের একটি পরীক্ষা নিয়েছি ;) এবার আমি চাই তাদের প্রত্যেকের প্রাপ্ত নম্বর প্রকাশ করবো।
তোমরা হয়তো ভাবছো ব্যপারটা তো খুব সহজ! আমরা ৫ জন ছাত্রের জন্য ৫ টা integer ভেরিয়েবল ডেক্লিয়ার করবো। এবং রোল অনুযায়ী নম্বর গুলা বসিয়ে দেবো। তারপর প্রিন্ট করে দেবো।
তাহলে আমাদের প্রোগ্রামটা হতে পারে এরকমঃ
#include<stdio.h>
int main()
{
/* Roll no. declared*/
int r1,r2,r3,r4,r5;
/* Scanning marks */
printf("Enter marks of roll no.1:\n");
scanf("%d",&r1);
printf("Enter marks of roll no.2:\n");
scanf("%d",&r2);
printf("Enter marks of roll no.3:\n");
scanf("%d",&r3);
printf("Enter marks of roll no.4:\n");
scanf("%d",&r4);
printf("Enter marks of roll no.5:\n");
scanf("%d",&r5);
/* Printing marks */
printf("Marks of roll no.1: %d\n",r1);
printf("Marks of roll no.2: %d\n",r2);
printf("Marks of roll no.3: %d\n",r3);
printf("Marks of roll no.4: %d\n",r4);
printf("Marks of roll no.5: %d\n",r5);
return 0;
}
আশা করছি প্রোগ্রামটা বোঝতে পারছো। আমরা ৫ জন ছাত্রের রোল ডেক্লিয়ার করেছি, প্রাপ্ত নম্বর স্কেন নিয়েছি আর তারপর, সেটা প্রিন্ট করে দিয়েছি। খুবই সহজ তাই না? এই স্কেন আর প্রিন্ট এর কাজ কিন্তু লুপ দিয়ে ও করা যেতো। কিন্তু যদি এখানে ছাত্র ৫ জন না হয়ে ১০০ জন হতো ভেরিয়েবল কিন্তু ১০০ টা ই ডেক্লিয়ার করা লাগতো! এবার তোমাকে যদি বলা হয়, এই ৫ জন ছাত্রের মধ্যে কে সব থেকে বেশী নম্বর পেয়েছে তা বের করতে? হ্যা সেটা ও পারবে। ( ৩ টি সংখ্যার মধ্যে বড় সংখ্যা নির্ণয়ের প্রোগ্রামটি মনে আছে!) একইভাবে ৫ টি সংখ্যা থেকেও বড় সংখ্যা নির্ণয় করা যাবে। প্রোগ্রামের সাইজ একটু বেশি হয়ে যাবে। আর যদি ১০০ জন ছাত্রের মধ্যে কে বেশি নম্বর পেয়েছে তা বের করতে বলা হয়!!!! ভেবেই দেখো কয়টা শর্ত লিখতে হতো।
আর এ সমস্ত ঝামেলা থেকে মুক্তি পেতেই অ্যারের ব্যবহার।
অ্যারে:
Array শব্দের বাংলা অর্থ বিন্যাস, শ্রেণি বিন্যাস,সাজানো ইত্যাদি। আপাততো আমরা সেদিকে না যাই।
প্রোগ্রামিং এ অ্যারে হচ্ছে একটি নির্দিষ্ট ডেটা টাইপের অনেক গুলা উপাদান। অ্যারের শুরু এবং শেষ আছে । তাই একটি অ্যারে কতটি উপাদান ধারণ করবে তা আগেই নির্ধারণ করে দিতে হয়।
অ্যারে ডেক্লিয়ারঃ
অ্যারে ডেক্লিয়ার করা খুবই সহজ। সাধারণত আমরা যেভাবে ভেরিয়েবল ডেক্লিয়ার করি সেভাবে অ্যারে ডেক্লিয়ার করা হয়।
শুধু অ্যারে ডেক্লিয়ার করার পর পাশে অ্যারের সাইজ ডেক্লিয়ার করে দিতে হয়।
যেমনঃ
int a [5]
উপরে আমরা একটা ইন্টিজার টাইপ অ্যারে ডেক্লিয়ার করেছি যার নাম দিয়েছি a । [5] এর মানে অ্যারেটি ৫ টি ইন্টিজার জমা রাখতে পারবে।
অ্যারের ইন্ডেক্সঃ
একটি অ্যারেকে আমরা একটি সোজা লম্বা কাঠের বাক্সের সাথে তুলনা করতে পারি। যেখানে অনেকগুলা খোপ রয়েছে। (উপরের ছবিটি লক্ষ্য করো)।
প্রতিটি খোপ এ একটি করে সংখ্যা রয়েছে। বাক্সে ততটি খোপ থাকবে যতটি আমরা আগে থেকে নির্ধারণ করে দিবো।
আমরা চাইলে সবগুলা খোপ ব্যবহার করতে পারি বা চাইলে কম ব্যবহার করতে পারি। কিন্তু নির্ধারিত খোপের বেশি ব্যবহার করতে পারবো না।
যেমন আমরা উপরের চিত্রে a[0] a[1] a[2] a[3] ব্যবহার করতে পারতাম। a[4] চাইলে ব্যবহার নাও করতে পারতাম।
লক্ষ্য করো, অ্যারের ইন্ডেক্সিং শুরু হয় 0 থেকে। এর মানে আমি যদি array[10] ডেক্লিয়ার করি তাহলে ইন্ডেক্সিং হবে array[0] থেকে array[9] পর্যন্ত।
array[10] নয়।
অ্যারের মান নির্ধারণঃ
অ্যারের মান আমরা বিভিন্নভাবে আসাইন করতে পারিঃ
যেমনঃ
ara[10]={10,20,30,40,50,60,70,80,90,100}
অথবা,
ara[ ]={10,20,30,40,50,60,70,80,90,100}
দ্বিতীয় উদাহারণে আমরা [ ] ফাঁকা রেখেছি, কিন্তু কম্পাইলার উপাদান সংখ্যা দেখে অ্যারের সাইজ বোঝে যাবে।
আবার আমরা অ্যারের মান স্কেন ও নিতে পারি।
অ্যারে স্কেন ও প্রিন্টঃ
আমরা লুপ দিয়ে অ্যারে স্কেন নিতে পারি। যেমনঃ
#include<stdio.h>
int main()
{
int i,ara[10];
for(i=0;i<10;i++)
{
scanf("%d",&ara[i]);
}
return 0;
}
আমরা জানি অ্যারের ইন্ডেক্সিং শুরু হয় 0 থেকে। তাই ara[10] এর জন্য আমরা 0 থেকে 9 পর্যন্ত লুপ চালাবো। i এর মান যতো, ঠিক ততো নম্বর index এ মান অ্যাসাইন হবে।
প্রথমে i=0, যা 10 থেকে ছোট, তাই বডিতে আসবে এবং একটি ইন্টিজার স্কেন নেবে। যা ara[i] এ সেভ হবে। যেহেতু প্রথমে i=0, তাই আমরা যে মান স্কেন দিবো তা a[0] তে অ্যাসাইন হবে। তারপর i++ হবে।
এবার i=1, এবার যে মান স্কেন নিবো তা a[1] এ অ্যাসাইন হবে। তারপর i++ হবে।
এবার i=2, এবার যে মান স্কেন নিবো তা a[2] এ অ্যাসাইন হবে।
এভাবে i এর মান যতো হবে ততো নম্বর ইন্ডেক্স এ মান অ্যাসাইন হবে।
এবার মনেকরো আমরা দেখতে চাই ara[4] এর মধ্যে কোন মান আছে। তাহলে চলো নিচের প্রোগ্রামটি দেখা যাকঃ
#include<stdio.h>
int main()
{
int i,ara[10];
for(i=0;i<10;i++)
{
scanf("%d",&ara[i]);
}
printf("%d",ara[4]);
return 0;
}
হ্যা,আউটপুট ঠিক আছে তাই তো। এবার চল আমরা সবগুলা উপাদান প্রিন্ট করবো।
#include<stdio.h>
int main()
{
int i,ara[10];
for(i=0;i<10;i++)
{
scanf("%d",&ara[i]);
}
printf("Elements are:\n");
for(i=0;i<10;i++)
{
printf("%d ",ara[i]);
}
return 0;
}
হ্যা,আউটপুট এবং ইনপুট ঠিক একই রকম। শুধু scanf ফাংশন এর জায়গায় printf ফাংশন লিখলেই হবে। বাকিসব একইরকম।
এবার আরেকটি প্রোগ্রামঃ
#include<stdio.h>
int main()
{
int i,n,ara[100];
printf("Enter the size of array:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&ara[i]);
}
printf("Elements are:\n");
for(i=0;i<n;i++)
{
printf("%d\t",ara[i]);
}
return 0;
}
এই প্রোগ্রামে আমরা ara[100] ডেক্লিয়ার করলেও আমরা চাইলে 1-100 এর ভিতর যেকোন সংখ্যক উপাদান নিয়ে কাজ করতে পারি। তাই আমরা একটি ইন্টিজার n ডেক্লিয়ার করেছি। তোমরা প্রোগ্রামটি রান করো, এবং 5,10 ইত্যাদি মান দিয়ে অ্যারে স্কেন করো। দেখবে আমরা আমাদের ইচ্ছা মতো উপাদান নিয়ে কাজ করতে পারবো। তবে, 100 টির বেশী উপদান নিতে পারবো না। এর থেকে বেশী উপাদান নিয়ে কাজ করতে হলে আমাদের ara[100] এর 100 পরিবর্তন করে অ্যারের সাইজ বেশী দিতে হবে।
0 comments:
Post a Comment