Thursday, May 22, 2014

C প্রোগ্রামিং - 07 অধ্যায় - ARRAY অ্যারে কি ????? PART -2



আচ্ছা আমরা এখন একটা প্রোগ্রাম চিন্তা করি যেটা ইউজার থেকে ৬টা নাম্বার নিবে এবং পরে তা যোগ করে রেজাল্ট আমাদের দেখাবে। এটা সাধারন পদ্ধতিতে করতে গেলে আমাদের আগে ৬টা ভ্যারিয়েবল নিতে হত, তারপর সেগুলোকে যোগ করতে হত তারপর যোগফল দেখাতে হতো।

এখন আমরা কত সহজেই এ জিনিসটা করতে পারব মাত্র একটি ভ্যারিয়েবল নিয়েঃ

 

#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;
}


 

 






array সম্পর্কে আজ এই পর্যন্ত ।

Thursday, May 15, 2014

C প্রোগ্রামিং - 07 অধ্যায় - ARRAY অ্যারে কি ????? PART -1



একটা প্রোগ্রামের কথা   চিন্তা করি, যেটায় ইউজার থেকে দুইটা নাম্বার নিয়ে যোগ করে তা রিটার্ন / প্রিন্ট করবে বা কনসোলে দেখাবে।
সহজেই আপনি প্রোগ্রামটা লিখে ফেলতে পারবেন তাই না? দুটি ভ্যারিয়েবল নিলাম, তারপর তা যোগ করে প্রিন্ট করলাম। শেষ।
#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;
 }

এটির জন্য কী আউটপুট আসা উচিত?
Capture
আমি জানি না এবং এটি জানা সম্ভব নয়। যেকোনো ধরনের সংখ্যা আসতে পারে। এগুলোকে গারবেজ (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;
}

Capturgge
আর যদি শেষ উপাদান থেকে প্রথম উপাদান পর্যন্ত দেখাতে হতো? কোনো সমস্যা নেই, শুধু লুপে এ 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 তে দেখ ..........................................