ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন (Part 1)
ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন (Part 2)
Control Statement: Looping
আগের টিউনগুলোতে আমরা বিভিন্ন logical expression ও if-else এর ব্যবহার দেখেছিলাম।আজ আমরা দেখব Looping। তার আগে আপনার কাছে looping এর প্রয়োজনীয়তা তুলে ধরছি।
ধরুন আপনার দশটা সংখ্যা ইনপুট নিয়ে যোগফল দেখা দরকার। আপনি কি দশবার scanf() function দিয়ে ডাটা ইনপুট নিবেন। কখনোই না। কারন সংখ্যাটা দশ না হয়ে আরও বড় হতে পারে। এ ধরনের সমস্যার সমাধানই হচ্ছে লুপিং।
সি তে তিন ধরনের লুপিং রয়েছে।
while loop: General Form:
while(condition) //condition means Logical Expression.
{
statement;
statement;
….
}
এখানে condition এর ভ্যালু যতক্ষন True ততক্ষন ও তার নিচের সবগুলো statement execute করে আবার while loop এর condition statement এ চলে যাবে। যখন condition এর ভ্যালু false হবে তখন তা while loop এর সম্পূর্ণ অংশ বাদ দিয়ে নিচে চলে যাবে। নিচের ছবিটা দেখুন।
.
.
.
.
.
.
.
.
এবার প্রথমে উল্লেখ করা প্রবলেমটা দেখি।
আমার দশবার loop চালানো প্রয়োজন। এবার নিচের উদাহরনটা দেখুন।
.
.
.
.
.
.
.
.
.
.
.
এখানে দেখুন, condition এর স্থানে i<10 রয়েছে। i এর ভ্যালু প্রতিবার loop ঘুরার পর এক করে বাড়ছে। অর্থাৎ, 0,1,2,3,4,5,6,7,8,9 এর জন্য মোট দশবার লুপ ঘুরবে। আর প্রতিবারই একটি ভ্যালু ইনপুট নিয়ে তা স এর সাথে যোগ করবে। লুপ শেষে সেই যোগফল আউটপুট এ দেখাবে।
OUTPUT:
.
.
.
উল্লেখ্য, প্রতিটি নাম্বার এর আলাদাকারী হিসেবে স্পেস কাজ করেছে। শেষে 10 লিখার পর এন্টার চাপুন আর আউটপুট দেখুন।
লুপিং এর ক্ষেত্রে condition টা অতি গুরুত্তপূর্ণ। কেননা condition যদি সঠিকভাবে কাজ না করে, মানে condition যদি কখনো false না হয় তবে তা infinity loop এ পড়বে।
যেমনঃ
int i=1;
while(i==1)
{
printf(“a”);
}
printf(“program ended successfully\n”);
উপরের উদাহরনটি করে দেখুন। এই প্রোগ্রামটি কখনই শেষ হবে না। যা প্রোগ্রামটিকে ক্রাশ করাবে।
While loop নিয়ে আরও গভীরে যাওয়ার আগে আসুন array সম্পর্কে কিছুটা ধারনা নিয়ে নেই।
Array: আমাদের আজকের প্রথম প্রবলেমটা দেখুন। সেখানে আমরা দশবার ইনপুট নিয়ে তা sum এর সাথে যোগ করেছি। কিন্তু সেখানে যে নাম্বারগুলো ইনপুট নিয়েছিলাম তা যদি পরবর্তীতে প্রয়োজন হয় তা কোথাও জমা নেই। আর যদি জমা করতেও চাই তা দশটি আলাদা variable declare করে জমা রাখাও সঠিক সমাধান নয়।
একই data type এর অনেকগুলো value একই নাম দিয়ে জমা করার জন্যই array. আমরা যখন কোন variable declare করি তখন মেমরীতে ঐ variable এর জন্য জায়গা তৈরী হয়। আর array তে আমি যে সাইজ দিয়ে declare করব ঠিক ততটি জায়গা তৈরী হবে।
Array declare করার নিয়মঃ
Data-Type array-name[ size ]
ex: int arr[5];
নিচের ছবিটা দেখুন।
.
.
.
.
.
.
.
.
যখন একটি ভেরিএবল declare করা হয় তখন মেমরীতে একটি জায়গা তৈরী হয়েছে। আর যখন ৫ সাইজ এর array declare করা হয়েছে তখন ৫টা একই ধরনের জায়গা তৈরী হলো। Array এর ক্ষেত্রে index টা অতি গুরুত্তপূর্ণ। index নির্দেশ করে আপনি array এর কোন element টা access করবেন।
সি ল্যাঙ্গুয়েজ এর ক্ষেত্রে index শুরু হয় শুন্য(zero) থেকে। তাই index number শুন্য থেকে size-1 পর্যন্ত। size-1 এর বড় বা zero এর ছোট কোন index ব্যবহার করা যাবে না। করা হলে তাকে invalid indexing বলা হয় যা একটি runtime error তৈরী করবে।
Accessing array element: কোন element access করার জন্য লিখতে হয়,
Array_name[index_number]
Example:
int nums[10];
nums[0]=5; // 0th ইনডেক্স এ ৫ রাখা।
nums[9]=25; // 9th এ ২৫ রাখা।
num[10]=125; //error-> invalid indexing
এবার প্রথম্ প্রবলেমটা আবার করি array ব্যবহার করে।
উদাহরনটা দেখুন।
.
.
.
.
.
.
.
.
.
.
সর্বশেষ printf() এ array এর একটি element access করেছি। ind তে অন্য ভ্যালু দিয়ে অন্যান্য element ও access করতে পারি।
Character array: character array এর আরেক নাম string।string এর মধ্যে একাধিক character একসাথে থাকে। “hello world”, ”what is your name?” এ ধরনের sentence রাখতে string type ব্যবহৃত হয়। আর int,float etc. type array এর সাথে তেমন পার্থক্য নেই। character array এর প্রত্যেক element ও সাধারন array’র মত access করা যায়। সাধারন array তে একটি করে element ইনপুট দেয়া লাগে। কিন্তু charater array তে gets() or scanf() function ব্যবহার করে একসাথে ইনপুট নেয়া যায়।
নিচের উদাহরনগুলো দেখুন।
.
.
.
.
.
.
OUTPUT:
.
.
.
ইনপুটটি array তে কিভাবে জমা হচ্ছে তা নিচের টেবিলে দেখুন।
Name | ‘B’ | ‘a’ | ‘k’ | ‘e’ | ‘r’ | ‘’ | |||
Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Character array এর বিশেষ উল্লেখযোগ্য ব্যাপার হল সবগুলো ক্যারেক্টার এর শেষে সে ‘’ বা Null automatically বসিয়ে নেয়।int বা float type array তে যতটি element, Size ঠিক তত হলেই হয়।কিন্তু character array তে সাইজ element এর চেয়ে এক বেশী হওয়া লাগে।
Character array এর ক্ষেত্রে ইনপুট নেয়া নিয়ে কিছু কথাঃ
ধরুন আগের example টায় ইনপুট এ baker টাইপ না করে টাইপ করলেন baker md. anas. Output হিসেবে কিন্তু নাম এর অংশে baker ই দেখাবে। কারন, scanf() function er separator হিসেবে স্পেস ব্যবহৃত হয়।তাই নাম এর প্রথম অংশটি শুধু name array তে উঠবে। এন্টার কী এর আগ পর্যন্ত যদি ইনপুট হিসেবে array তে নিতে চান তবে scanf() function টা এভাবে লিখুন।
scanf(“%[^\n]”,name);
তৃতীয় ব্র্যাকেট এর শুরুর পর ‘^’( shift+6) sign এর পর যেসকল character উল্লেখ করবেন তাই separator হিসেবে কাজ করবে।ex:
scanf( “ %[^\n-A]”,name); // এখানে sepeartor হল enter, A, -.
Character array ইনপুট নেয়ার জন্য আরেকটি function রয়েছে। তা হল gets.
General form: gets(char_array_name);
gets() function এর separator হল এন্টার।
replace the code: scanf(“%[^\n]”,name); by gets(name);
তারপর রান করে আউটপুট দেখুন।
array initialization:
উপরে আমি array তে ইনপুট নিয়েছি।array element access ও করেছি। আমরা চাইলে array declare করার সময়ও মান দিয়ে দিতে পারি।
.
.
.
.
প্রথম লাইন এর ক্ষেত্রে সাইজ ৫ এবং আমরা ৫টি element দিয়েছি।ডাটার ইনডেক্স ক্রমানুসারে থাকবে।
num[0]=1,num[1]=2,etc.
Float type এর declaration এর সময় সাইজ দিয়েছি ১০০, কিন্তু initialize করেছি মাত্র ২টা।এক্ষেত্রে প্রথম ২টা element ছাড়া বাকীগুলো undefined থাকবে।
f_num[0]=5.2, f_num[1]=3.5.
Char array তে আমরা সাইজ দেই নাই। কোন array declaration এ সাইজ declare না করলে তার সাইজ initialization এর জন্য যতটুকু দরকার ঠিক তত হয়। আর array declaration এর সময় initialize করলে অবশ্যই সাইজ দিতে হবে।
এতক্ষন যা শিখলেন তা দিয়ে নিচের প্রোগ্রামগুলো করে ফেলুন।যদি কোন সমস্যা হয় তবে জানান।
আগামী দিন অন্যান্য লুপ দেখব, সাথে কিছু C এর default function সম্পর্কে জানব।আর practice করতে থাকুন।
আমি বাকের। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 14 বছর 10 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 12 টি টিউন ও 81 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
ধন্যবাদ সহজ ভাবে বুঝিয়ে দেয়ার জন্য।
আশাকরি চালিয়ে যাবেন। সাথে আছি।