ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন (Part 3)

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন (Part 1)

ধাপে ধাপে সি ল্যাঙ্গুয়েজ শিখুন (Part 2)

Control Statement: Looping

আগের টিউনগুলোতে আমরা বিভিন্ন logical expression ও if-else এর ব্যবহার দেখেছিলাম।আজ আমরা দেখব Looping। তার আগে আপনার কাছে looping এর প্রয়োজনীয়তা তুলে ধরছি।

ধরুন আপনার দশটা সংখ্যা ইনপুট নিয়ে যোগফল দেখা দরকার। আপনি কি দশবার scanf() function দিয়ে ডাটা ইনপুট নিবেন। কখনোই না। কারন সংখ্যাটা দশ না হয়ে আরও বড় হতে পারে। এ ধরনের সমস্যার সমাধানই হচ্ছে লুপিং।

সি তে তিন ধরনের লুপিং রয়েছে।

  1. while Loop
  2. do-while Loop
  3. for loop

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’‘’
Index012345678

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 করলে অবশ্যই সাইজ দিতে হবে।

এতক্ষন যা শিখলেন তা দিয়ে নিচের প্রোগ্রামগুলো করে ফেলুন।যদি কোন সমস্যা হয় তবে জানান।

  1. প্রোগ্রাম এ ইউজার থেকে যেকোন ধনাত্বক পূর্নসংখ্যা নিয়ে ১ থেকে ঐ নাম্বার পর্যন্ত যোগফল আউটপুট এ দেখান।
  2. প্রোগ্রাম এ ইউজার থেকে ১০ টি নাম্বার ইনপুট নিয়ে প্রতিটি নাম্বার ১০০০ থেকে বিয়োগ করে বিয়োগফল প্রতিবার আউটপুট দেখান।
  3. ইনপুট এ আপনার নাম নিন। তারপর আপনার নাম এর প্রতিটি ক্যারেক্টার এর ASCII ভ্যালু প্রিন্ট করুন।

আগামী দিন অন্যান্য লুপ দেখব, সাথে কিছু C এর default function সম্পর্কে জানব।আর practice করতে থাকুন।

Level 0

আমি বাকের। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 14 বছর 8 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 12 টি টিউন ও 81 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

ধন্যবাদ সহজ ভাবে বুঝিয়ে দেয়ার জন্য।
আশাকরি চালিয়ে যাবেন। সাথে আছি।

    আমি Turbo C++ v4.5 ব্যবহার করছি। আপনি কোনটা ব্যবহার করছেন জানাবেন।
    আর প্রশ্ন করছিনা কেননা এ পর্যন্ত সমস্যা হয়নি। প্রাকটিস করছি।

    আমি CodeBlocks IDE ব্যবহার করি। Turbo C++ v4.5 এর পর আর কোন আপডেট আসেনি। CodeBlocks প্রায়ই আপডেট হয় যাতে নতুন নতুন library add হয়।
    http://www.codeblocks.org
    সাইট থেকে চাইলেই ইন্সটলার নামিয়ে নিতে পারেন।

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

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

    তবুও বুঝি মনের তৃপ্তির একটা ব্যপার আছে।
    আপনি এমন কোন ফোরামে লেখা দিবেন যেখানে প্রোগ্রামিং শেখার জন্য পাঠকেরা আগ্রহি। এরকম কোন ফোরাম পেলে আমি আপনাকে জানিয়ে দেব।
    এর আগেও একই ঘটনা ঘটেছে। লিঙ্কটা দেখুন এবং কমেন্টগুলো একটু পরুন।
    https://www.techtunes.io/tutorial/tune-id/19481/