You are on page 1of 148

বাংলা দেখ কউ কিরসেন ভয় ব নীেত ইংেরজী আেছ

িসিপিপ পিরগণনা

c++ programming

িনউটন মু. আ. হািকম


সূচীপ

১ িসিপিপ মেলখ িবকাশ (Developing c++ Programs) ১


১.১ হয়মান স াদনা সংকলন (Online Editing Compilation) . . . . . . ১
১.২ নয়মান স াদনা সংকলন (Offline Editing Compilation) . . . . . . ৪

২ মেলখেয়র কাঠােমা (Program Structure) ৭


২.১ েভ া বাতার মেলখ (Wishing Program) . . . . . . . . . . . . . ৭
২.২ নাম-ধাম-বৃ াে র মেলখ (Detailing Program) . . . . . . . . . . . ৯
২.৩ মেলখেত টীকা িলখন (Writing Program Comments) . . . . . . ১০
২.৪ মেলখেত ফাঁকা দওয়া (Spacing and Indentation) . . . . . . . . ১২
২.৫ অ শীলনী সম া (Exercise Problems) . . . . . . . . . . . . . . . ১৪
২.৬ গণনা পিরভাষা (Computing Terminologies) . . . . . . . . . . . . ১৭

৩ চলক ও বক (Variables and Constants) ১৯


৩.১ চলেকর ব বহার (Using Variables) . . . . . . . . . . . . . . . . . . ১৯
৩.২ বেকর ব বহার (Using Constants) . . . . . . . . . . . . . . . . . ২২
৩.৩ চলক ঘাষনা (Variable Declarations) . . . . . . . . . . . . . . . ২৪
৩.৪ আিদমান আেরাপণ (Initial Assignment) . . . . . . . . . . . . . . . ২৫
৩.৫ অ শীলনী সম া (Exercise Problems) . . . . . . . . . . . . . . . ২৭
৩.৬ গণনা পিরভাষা (Computing Terminologies) . . . . . . . . . . . . ৩০

৪ শনা েকর নামকরণ (Naming Identifiers) ৩১


৪.১ গিঠত নাম (Well-formed Names) . . . . . . . . . . . . . . . . . ৩১
৪.২ অথেবাধক নাম (Meaningful Names) . . . . . . . . . . . . . . . . ৩২
৪.৩ িলিপ সংেবদনশীলতা (Case Sensitivity) . . . . . . . . . . . . . . . ৩৩
৪.৪ সংরি ত ও চািব শ (Reserved & Key Words) . . . . . . . . . . . ৩৪
৪.৫ অ শীলনী সম া (Exercise Problems) . . . . . . . . . . . . . . . ৩৬
৪.৬ গণনা পিরভাষা (Computing Terminologies) . . . . . . . . . . . . ৩৮

৫ যাগান ও আেরাপণ (Input and Assignment) ৩৯


৫.১ উপা যাগান (Data Input) . . . . . . . . . . . . . . . . . . . . . ৩৯
৫.২ যাগান যাচনা (Input Prompt) . . . . . . . . . . . . . . . . . . . . ৪২
৫.৩ মান আেরাপণ (Value Assignment) . . . . . . . . . . . . . . . . . ৪৪
৫.৪ মান অদল-বদল (Value Swapping) . . . . . . . . . . . . . . . . . ৪৫


৫.৫ আেরাপেণর বাম ও ডান (Assignment Left and Right) . . . . . . . ৪৭
৫.৬ আ -শরন আেরাপণ (Self-Referential Assignment) . . . . . . . . ৪৮
৫.৭ অ শীলনী সম া (Exercise Problems) . . . . . . . . . . . . . . . ৪৯
৫.৮ গণনা পিরভাষা (Computing Terminologies) . . . . . . . . . . . . ৫২

৬ গািণিতক ি য়াকরণ (Mathematical Processing) ৫৩


৬.১ এিকক অণুি য়া (Unary Operators) . . . . . . . . . . . . . . . . . ৫৩
৬.২ িয়ক অণুি য়া (Binary Operators) . . . . . . . . . . . . . . . . . ৫৪
৬.৩ ভাগফল ও ভাগেশষ (Division and Remainder) . . . . . . . . . . . ৫৫
৬.৪ আেরাপণ অণুি য়া (Assignment Operator) . . . . . . . . . . . . ৫৮
৬.৫ যৗিগক আেরাপণ (Compound Assignment) . . . . . . . . . . . . ৫৯
৬.৬ াস ও বৃি অণুি য়া (Increment and Decrement) . . . . . . . . . ৬০
৬.৭ িবিত অণুি য়া (Comma Operator) . . . . . . . . . . . . . . . . . ৬২
৬.৮ অ গণ তার ম (Precedence Order) . . . . . . . . . . . . . . . ৬৩
৬.৯ গািণিতক সম া (Mathematical Problems) . . . . . . . . . . . . ৬৫
৬.১০ িশর নিথ cmath (Header File cmath) . . . . . . . . . . . . . . . ৬৬
৬.১১ অ শীলনী সম া (Exercise Problems) . . . . . . . . . . . . . . . ৬৮
৬.১২ গণনা পিরভাষা (Computing Terminologies) . . . . . . . . . . . . ৭৫

৭ শতািল পিরগণনা (Conditional Programming) ৭৭


৭.১ যিদ তাহেল নাহেল (If Then Else) . . . . . . . . . . . . . . . . . . . ৭৭
৭.২ অ য়ী অণুি য়া (Relational Operators) . . . . . . . . . . . . . . ৭৯
৭.৩ যিদ-নাহেল মই (If-Else Ladder) . . . . . . . . . . . . . . . . . . . ৮১
৭.৪ অ াি যিদ-নাহেল (Nested If-Else) . . . . . . . . . . . . . . . . . ৮২
৭.৫ ঝুল নাহেল (Dangling Else) . . . . . . . . . . . . . . . . . . . . ৮৪
৭.৬ যৗিগক িববৃিত (Compound Statement) . . . . . . . . . . . . . . ৮৬
৭.৭ িট শনা করণ (Error Detection) . . . . . . . . . . . . . . . . . ৮৮
৭.৮ বুলক সংেযাজক (Boolean Connectives) . . . . . . . . . . . . . . ৯২
৭.৯ বুলক, পূণক, ভ ক (Boolean, Integer, Float) . . . . . . . . . . . . ৯৪
৭.১০ বুলক বীজগিণত (Boolean Algebra) . . . . . . . . . . . . . . . . . ৯৬
৭.১১ বুলক সমতুল (Boolean Equivalence) . . . . . . . . . . . . . . . . ৯৮
৭.১২ সত ক সারণী (Truth Table) . . . . . . . . . . . . . . . . . . . . . ৯৯
৭.১৩ বুলক সরলীকরণ (Boolean Simplification) . . . . . . . . . . . . . ১০০
৭.১৪ মই, অ াি , সংেযাজক (Ladder, Nesting, Connectives) . . . . . . ১০২
৭.১৫ যিদ-নাহেল অ লায়ন (If-Else Optimisation) . . . . . . . . . . . . ১০৫
৭.১৬ িতিনক অণুি য়া (Ternary Operator) . . . . . . . . . . . . . . . . ১০৭
৭.১৭ পি ব াপার (Switch Cases) . . . . . . . . . . . . . . . . . . . . ১০৯
৭.১৮ অ াি পি ব াপার (Nested Switch Cases) . . . . . . . . . . . . ১১১
৭.১৯ পি ব াপার াি (Switch Cases Breaks) . . . . . . . . . . . . . ১১৪
৭.২০ পি ব াপার যিদ-নাহেল (Swtich Cases If Else) . . . . . . . . . . . ১১৬
৭.২১ ব াপীয় ও ানীয় চলক (Global & Local Variables) . . . . . . . . . ১১৭
৭.২২ অ শীলনী সম া (Exercise Problems) . . . . . . . . . . . . . . . ১২০
৭.২৩ গণনা পিরভাষা (Computing Terminologies) . . . . . . . . . . . . ১৪২


িফিরি তািলকা

২.১ েভ া জানােনার মেলখ (Wishing Program) . . . . . . . . . . . ৮


২.২ নাম-ধাম-বৃ াে র মেলখ (Detailing Program) . . . . . . . . . . . ৯
২.৩ মেলখেত টীকা লখন (Commenting in Programs) . . . . . . . . ১১
২.৪ মেলখেত ফাঁকা দওয়া (Spacing in Programs) . . . . . . . . . . ১২
২.৫ অণুে রণার মেলখ (Inspiring Programming) . . . . . . . . . . . ১৬
২.৬ নকশা আঁকার মেলখ (Program Drawing Designs) . . . . . . . . ১৭
৩.১ মেলখেত চলেকর ব বহার (Variables in Programs) . . . . . . . . ২০
৩.২ মেলখেত বেকর ব বহার (Constants in Programs) . . . . . . . ২২
৩.৩ চলক ঘাষনার মেলখ (Program Declaring Variables) . . . . . . ২৮
৩.৪ পািটগিণেতর অণুি য়ার মেলখ (Arithmetic Program) . . . . . . . ২৯
৩.৫ সলিসয়াস থেক ফােরনহাইেট পা র (Celcius to Fahrenheit) . . . ২৯
৩.৬ ফােরনহাইট থেক সলিসয়ােস পা র (Fahrenheit to Celcius) . . . ৩০
৩.৭ সময়েক সেকে ড পা র (Convert Time to Seconds) . . . . . . . ৩০
৫.১ উপা যাগােনর মেলখ (Programs with Data Input) . . . . . . . ৪০
৫.২ যাগান যাচনার মেলখ (Program with Input Prompt) . . . . . . ৪২
৫.৩ যাগান ও ফলেনর মেলখ (Input Output Program) . . . . . . . . ৫০
৫.৪ যাগান িকয়ন ফলন (Input Process Output) . . . . . . . . . . . ৫১
৫.৫ যাগােনর িসধা ম উ া ম (Input Order Reverse Order) . . . . ৫১
৫.৬ ফলাফল ি য়ার মেলখ (Result Processing Program) . . . . . . ৫২
৬.১ পািটগিণেতর ধনা ক ও ঋণা ক (Arithmetic Positive Negative) . . ৫৩
৬.২ পািটগিণেতর যাগ িবেয়াগ ণ (Arithmetic Plus Minus Times) . . . ৫৪
৬.৩ পািটগিণেতর ভাগফল অণুি য়া (Arithmetic Division Operation) . . ৫৫
৬.৪ পািটগিণেতর ভাগেশষ অণুি য়া (Arithmetic Remainder Operation) ৫৬
৬.৫ িট িব র মেধ র দূর (Distance Between Two Points) . . . . . ৬৫
৬.৬ সমা র ধারার সম া (Arithmetic Series Problem) . . . . . . . . ৭০
৬.৭ িয়ক অণুি য়ার ফলাফল (Binary Operation Results) . . . . . . . ৭১
৬.৮ ি ভুেজর বা হেত ফল (Triangle's Area From Sides) . . . . . ৭২
৬.৯ সময়েক সেকে ড কাশ (Time in Seconds) . . . . . . . . . . . . . ৭২
৬.১০ ি ভুেজর বা হেত কাণ (Triangle's Angles From Sides) . . . . . . ৭৩
৬.১১ িট সমেয়র যাগ (Adding Two Times) . . . . . . . . . . . . . . . ৭৩
৬.১২ সহ সমীকরণ সমাধান (Simultaneous Equations) . . . . . . . . . . ৭৪
৬.১৩ গিতর সমীকরণ সমাধান (Solving Motion Equations) . . . . . . . . ৭৪
৬.১৪ ছ সংেকত থেক মেলখ তরী (Program from Pseudocode) . . . ৭৫
৭.১ পাশ- ফল-তারকা ন র িনণয় (Pass Fail Star Marks) . . . . . . . . . ৭৭


৭.২ অিধবষ িনণয় (Leap Year Determination) . . . . . . . . . . . . . ৮১
৭.৩ ি ঘাত সমীকরণ সমাধান (Solving Quadratic Equations) . . . . . . ৯০
৭.৪ সৗভাগ ও ভােগ র সংখ া (Lucky & Unlucky Numbers) . . . . . . ৯৩
৭.৫ াপণ সহ ি েকাণিমিত (Trigonometry with Menu) . . . . . . . . ১০৯
৭.৬ অ াি পি িদেয় াপণ (Menu with Nested Switch) . . . . . . . ১১১
৭.৭ ানীয় ও ব াপীয় চলকের ব বহার (Using Local & Global Variables) . ১১৭
৭.৮ িতনিট সংখ ার বড়- ছাট (Small and Big of Three Numbers) . . . . ১৩০
৭.৯ িতনিট সংখ ার মধ ক (Median of Three Numbers) . . . . . . . . . ১৩১
৭.১০ িতনিট সংখ ার উধ ম (Three Numbers in Ascending Order) . . . ১৩১
৭.১১ ন র হেত বণমান (Letter Grades from Numbers) . . . . . . . . . ১৩২
৭.১২ িব র চতুভাগ িনণয় (Quadrant of a Point) . . . . . . . . . . . . . ১৩২
৭.১৩ বাংলা মােসর নাম (Bengali Month Names) . . . . . . . . . . . . . ১৩৬
৭.১৪ পাঁচিট সংখ ার বৃহ ম (Largest of Five Numbers) . . . . . . . . . ১৩৯
৭.১৫ স ােহর মজুির িহসাব (Weekly Wage Calculation) . . . . . . . . . ১৪০


অধ ায় ১

মেলখ িবকাশ
(Developing Programs)

একজন পিরগণেকর (programmer) কােছ মেলখ (program) একিট স ান তুল । িতল


িতল কের একজন পিরগণক সময় িনেয় একিট মেলখ গেড় তােল। কান সম ার জ মেলখ
তরী করেত হেব, সটা জানার পের পিরগণক থেম িচ া ভাবনা কের কী িলখেব, তারপর সটা
মেলখ রচনার যথাযথ িনয়ম মেন িলেখ ফেল, তারপর সটা চািলেয় দেখ িঠক ঠাক কাজ কের
িক না। যিদ ভুল িকছু থােক, ভুলটা বর কের, সটা িঠক কের, তারপর আবার মেলখ চািলেয়
দেখ। এই চলেত থােক যত ণ না মন মেতা সম ািটর সমাধান পাওয়া যাে । আমরা সারা
বইেত পড়েবা কী িলখেবা আমরা মেলখেত, যথাযথ ভােব মেলখ রচনার িনয়ম কী। তেব
এইখােন আেলাচনা করেবা, মেলখ িলখেবা কাথায় আর সটা চালােবা কী কের।
গণিনেত (computer) িনবাহ (execution) করা জ আমরা যখন কান একিট মেলখ
(program) িলখেত চাই, থেম আমরা সটা রচনা ও স াদনা (edit) কির সাধারণত কান
একটা পিরগণনা ভাষায় (programming language)। এই পিরগণনা ভাষা িঠক গণিনেত িন-
বাহেযাগ (executable) ভাষা নয়, আবার পুেরাপুির মা েষর াভািবক ভাষাও নয়, বরং এ -
টার মাঝামািঝ িকছু একটা। পিরগণনা ভাষায় িলিখত আমােদর মেলখেক আমরা তাই এরপের
সংকলন (compile) কের য ভাষায় (machine language) পা র কির যােত গণিন সটা
বুঝেত পাের। তারপর ওই পা িরত মেলখিটেক িনবাহ (execute) করা হয়।

১.১ হয়মান স াদনা সংকলন (Online Editing Compilation)


হয়মান (online) স াদনা ও সংকলেনর (editing and compilation) জ আমরা cpp.sh
নামক জালপাতা (webpage) ব বহার করেবা। তুিম খুঁজেল আেরা এরকম আেরা অেনক জাল-
পাতা পেত পােরা। যাই হাক তামার আ জাল াজেক (internet browser) িঠকানা িলখ-
বার জায়গায় cpp.sh িলেখ তুিম উপের উে িখত ওই জালপাতায় যেত পােরা। তারপর াজেক
(browser) ওই জালপাতা কমন দখা যােব সটা আমরা নীেচর ছিবেত দখেত পােবা। খয়াল
কেরা ওই ছিবেত িবিভ অংশ তীর িচ িদেয় িচি ত করা হেয়েছ। য বড় সাদা অংেশ স াদন
খানা (Editor Area) লখা হেয়েছ, সইখােনই মুলত আমরা মেলখ রচনা ও স াদনা করেবা।
উদাহরণ িহসােব স াদন খানায় আেগ থেক িকছু থাকেত পাের, তুিম স েলা মুেছ িদেত পােরা
বা তামার মেলখেয়র জ দরকার মেতা বদেল িনেত পােরা।


১.১. হয়মান স াদনা সংকলন (Online Editing Compilation)

উপেরর ছিবর নীেচ ডানিদেক দেখা চালাও বাতাম (run button) রেয়েছ। মেলখ স া-
দনা শষ হেল অথবা মাঝামািঝ অব ােতও পরী া কের দখার জ আমরা চালাও বাতােম
িটপ (click) িদেবা। তােত এক িটেপই থেম মেলখ সংকলন (compile) হেব তারপর িনবাহ
(execution) হেব। যখন মেলখ সংকলন হেত থাকেব তখন স াদন খানার মাঝ বরাবর দখ-
ব "অেপ া কেরা সংকলন হে " Please Wait Compiling লখা আসেব। আর একই সােথ
চালাও বাতামিটও বদেল িগেয় হেয় যােব বািতল বাতাম (cancel button)। অেনক সময় সং-
কলন হেত সময় লােগ তুিম যিদ কান কারেণ সংকলন বািতল করেত চাও তাহেল বািতল বাতােম
চাপ িদেলই হেব। যখন সংকলন হেত থােক তখন বাম িদেকর পাট েলা (tabs) খয়াল করেব,
ভদক পােটর (options tab) বদেল সংকলন পাট (compilation tab) সামেন চেল আসেব।
সংকলেনর সময় কান িট (error) পাওয়া গেল সংকলন পােট দখা যােব। আর কান সংক-
লন িট না থাকেল সংকলন সফল Compilation successful বাতা দখা যােব সংকলন পােট
আর তারপর িনবাহ পাট (execution tab) সামেন আসেব। িনবাহ চলাকালীন সমেয় যাগান
ও ফলন (input and output) িনবাহ পােট চলেব আর বািতল বাতামিট (cancel button)
বদেল হেয় যােব থামন বাতাম (stop button), যােত য কান সময় িনবাহ থািমেয় দয়া যায়।
থামন বাতাম চাপেল অথবা িনবাহ শষ হেয় গেল আবার ভদক পাট (option tab) সামেন
আসেব আর চালাও বাতাম (run button) িফের আসেব।
আমরা আপাতত ভদক পােট (options tab) কান পিরবতন না কের একিট মেলখ স া-
দনা (editing) ও িনবাহ (execution) করেবা। আেগই বেলিছ cpp.sh জালপাতায় গেলই


১.১. হয়মান স াদনা সংকলন (Online Editing Compilation)

একটা উদাহরণ মেলখ (program) সখােন আেগ থেকই থােক। সাধারণত নীেচ দখােনা -
মেলখিটই সখােন থােক। এই মেলখিট আমােদর আপাতত িব ািরত বুঝার দরকার নাই, আমরা
পের স েলা িব ািরত িশখেবা। তেব এই মেলখিট না থাকেল তুিম িনেজ সটা ব ওইখােন
িলেখ িনেত পােরা। সংে েপ বিল এই মেলখিট থেম িনবাহ পােট (execution tab) দখা-
ব What is your name? তখন তুিম যিদ তামার নাম িলেখ দাও gonimia আর তারপর
ভুি (enter) চাপ দাও, তাহেল পেরর সািরেত দখেব লখা আসেব Hello, gonimia!। না-
মটু নওয়ার আেগ What is your name? দখােনােক আমরা বিল যাগান যাচনা (input
prompt) আর নাম gonimia দওয়াটােক আমরা বিল যাগান (input) দওয়া আর পেরর
সািরেত Hello, gonimia! দখােনােক আমরা বিল ফলন (output) দওয়া।
/ / Example program
#i n c l u d e <iostream>
#i n c l u d e <s t r i n g>

i n t main ( )
{
std : : s t r i n g name ;
std : : cout << "What i s your name? " ;
g e t l i n e ( std : : c i n , name ) ;
std : : cout << " Hello , " << name << " ! \n" ;
}

তা তুিম চালাও বাতােম (run button) িটপ িদেয় দেখা কী হয়। থেম সংকলন পাট হেয়
িনবাহ পােট (execution tab) িগেয় উপের য ভােব বলা হেলা স রকম হয় কী না দেখা।
তামার বাঝার িবধােথ নীেচ িনবাহ পােট শষ পয কী থাকেব তা নীেচ দখােনা হেলা।
What i s your name? gonimia
Hello , gonimia !

এবার আমরা একটু দিখ সংকলেন িট হেল কী ঘেট, আর আমােদর কী করেত হয়! এটার
জ আমরা ইে কের একটা িট (error) তরী কের দই। যমন ধেরা std: : string name;
লখা রেয়েছ য সািরেত সখােন একদম শষ হেত িদিত (semicolon) ; তুিম মুেছ দাও। আর
তারপর চালাও বাতােম (run button) িটপ দাও। দখেব নীেচর মেতা কের িট বাতা দখােব
সংকলন পােট (compilatin tab), আর সংকলন পাটই সামেন থাকেব িনবাহ পাট (execution
tab) সামেন আসেব না। ি তীয় সািরেত দেখা 9 : 3 মােন বুঝাে ৯ম সািরেত িট আেছ আর
৩য় অ ের, আর িটটা হেলা ; থাকেত হেব। আসেল ; দরকার আমােদর ৮ম সািরর শেষ।
সাধারণত য সািরেত িট আেছ বলা হয়, িট সই সাির বা আেগর সািরেত থােক। এখােন ;
থাকায় সংকলক (compiler) আসেল িঠক ৮ম আর ৯ম সাির িনেয় িকি ত িব াি েত রেয়েছ।
মেলখ রচনার সময় আমরা নানান রকম ভুল িট কির, তুিম মেলখ লখার চচা করেত থাকেল
এই িট েলার সােথ পিরিচত হেয় যােব। তখন দখা মা ই বুঝেত পারেব ভুলটু কী আর কী কের
সটা িঠক করেত হেব। যাইেহাক িটটু বুঝেত পারেল আমরা সিট িঠক কের আবার বাতােম
চালাও চাপ িদেবা, আর তখন সফল ভােবই িনবািহত হেব।
I n f u n c t i o n ' i n t main ( ) ' :
9 : 3 : e r r o r : expected ' ; ' before ' g e t l i n e '


১.২. নয়মান স াদনা সংকলন (Offline Editing Compilation)

সবেশেষ আমরা ভদক পাট (options tab) সংে েপ আেলাচনা করেবা। সখােন থাকা
নানা ভদন (option) েলার কী কাজ মুলত সটাই জানা উে । তেব এ েলা িনেয় আমরা
আপাতত পরী া িনরী া করেবা না, বরং যা আেছ স রকম অব ােতই মেলখ (program)
স াদনা (editing), সংকলন (compile) ও িনবাহ (execute) করেবা।

১. সবেচেয় বােমর ে (column) দেখা িমত (standard) ভদন েলা রেয়েছ। িসিপিপ
ভাষার নানান সং রণ রেয়েছ, তুিম চাইেল আেগর সং রণ ব বহার করেত পােরা, সাধার-
ণত এখােন c++14 সং রণ িনবাচন করা থােক।

২. বাম থেক ি তীয় ে আেছ সতকবাতার ভদন েলা, অথাৎ সংকলন (compile) করার
সময় কতটা খুঁিট নািট িট ধরেব সংকলক (compiler) সটা এখােন বেল দয়া হয়।
সাধারণত এখােন সব Many (-Wall) ভদন িনবািচত থােক।

৩. বামেথেক তৃতীয় ে আেছ অ লায়েনর (optimisation) ভদন েলা। একই ম-


লখ (program) সংকলক (compiler) চাইেল এমন ভােব সংকলন (compile) করেত
পাের য মেলখিট অেনক ত িনবাহ (execute) হেব, আবার এমন ভােব সংকলন কর-
ত পাের য মেলখিট অেনক আে িনবাহ হেব। ত িনবাহ হেব এমন সংকলন করেত
াভািবক ভােবই বশী সময় লােগ, আর আে িনবাহ হেব সরকম সংকলন করেত সময়
কম লােগ। এখােন সাধারণত পূণ Full (-O2) ভদন িনবািচত থােক।

৪. সবেচেয় ডােনর ে আেছ িমত যাগান (standard input) ভদন সমুহ। সাধারণত
এখােন িমথি য়ক (interactive) ভদন িনবািচত থােক যার অথ চাপিন (keyboard)
ব বহার কের যাগান (input) দওয়া যােব। তামার মেলখেত কান যাগান না থাকেল
তুিম িকছুনা (none) ভদন িনবাচন করেত পােরা। অথবা তুিম যিদ আেগই যাগান িদ-
য় রাখেত চাও তাহেল পাঠিনক (text) ভদন িনবাচন কের ওইখােন থাকা নীেচর বাে
আেগ থেক তামার যাগান েলা িদেয় রাখেত পােরা। তােত মেলখ (program) চাপিন
(keyboard) থেক যাগান না িনেয় ওইখান থেক িনেয় িনেব।

১.২ নয়মান স াদনা সংকলন (Offline Editing Compilation)


আমরা codeblocks িনেয় পেরর সং রেণ িব ািরত আেলাচনা করেবা। আপাতত নীেচর -
লা থেক তুিম িকছু সাহায িনেত পােরা।

• তুিম http://www.codeblocks.org/ থেক codeblocks পােব।

• দরকারী ম (software) পােব নীেচর থেক।

http://www.codeblocks.org/downloads

• ব বহার পুি কা (user manual) পােব নীেচর থেক।

http://www.codeblocks.org/user-manual

• উে ডােজ সং াপেনর (install) জ ছিবও (video) পােব নীেচর থেক।

https://www.youtube.com/watch?v=zOGU8fC3bvU


১.২. নয়মান স াদনা সংকলন (Offline Editing Compilation)

• িলনাে সং াপেনর ছিবও পােব নীেচর থেক।

https://www.youtube.com/watch?v=3B4hPHZNtNw


অধ ায় ২

মেলখেয়র কাঠােমা
(Program Structure)

গণিনেত (computer) িনবাহেযাগ (executable) এক িনেদেশর (instruction) ম-


ক মেলখ (program) বলা হয়। আমরা িসিপিপ (c++) ভাষায় মেলখ তরী করেবা। -
মেলখ সাধারণত একিট স াদনা (editor) ম (software) ব বহার কের তরী করা হয়।
আমরা একােজ আপাতত cpp.sh নােমর একিট জালপাতা (webpage) ব বহার করেবা। িস-
িপিপ ভাষায় তরী মেলখেক থেম একিট সংকলক (compiler) িদেয় সংকলন (compile)
কের গণিনেত িনবাহেযাগ সংেকত (code) তরী করা হয়। তারপর সই সংেকত চালােল (run)
বা িনবাহ (execution) করেল আমরা সাধারণত য ালেয়র (console) নজিরেত (monitor)
ফলন (output) দখেত পাই । মেলখ অেনক সময় আমােদর কাছ থেক য ালেয়র চাপিনর
(keyboard) বা িটপিনর (mouse) মাধ েম যাগান (input) িনেত পাের। জেন রেখা য া-
লয় (console) বলেত যাগােনর (input) জ চাপিন ও িটপিন (keyboard and mouse)
আর ফলেনর (output) জ নজির (monitor) বুঝােনা হয়। মেলখ িলখেত গেল য ালয়
(console) থেক যাগান (input) নয়ার ও য ালেয় (console) ফলন (output) দখােনার
কথা তুিম ায়শই নেত পােব। কােজই এ েলা কী বুঝায় সটা ভােলা কের মেন রেখা।

২.১ েভ া বাতার মেলখ (Wishing Program)


িসিপিপ (c++) ভাষায় এমন একিট মেলখ (program) রচনা কেরা যিট চালােল (run) তামার
মেলখ ব বহারকারীেক েভ া জানােব। আসেল এিটই হেব িসিপিপ ভাষায় তামার লখা থম
মেলখ। েত ক পিরগণনা ভাষায়ই এমন একটা কের মেলখ রচনা করা হয়।
নীেচ েভ া বাতা দখােনার জ একিট মেলখ রচনা করা হেয়েছ। আর মেলখিট সং-
কলন (compile) কের িনবাহ (execution) করেল বা চালােল (run) য ফলন (output)
পাওয়া যােব তাও দখােনা হেয়েছ। ওই মেলখেত মুল য িববৃিতিট (statement) আমােদর
shuvessa nin দখােব সিট হল cout << "shuvessa nin" << endl; এখােন cout হল
console out মােন য ালেয়র ফলন য (output device)। আর endl হল end line অথাৎ
যখােন endl বলা আেছ সখােন ফলেন ওই সাির শষ হেব। খয়াল কেরা আমরা নজিরেত যা
দখােত চাই তা ব উ ৃিত "" িচে র িভতের লখা হেয়েছ। আর << িদেয় আমরা "shuvessa
nin" ও endl কথা েলােক cout এর কােছ পাঠাই দখােনার জ ।


২.১. েভ া বাতার মেলখ (Wishing Program)

রণ রেখা cout এর িববৃিতিট (statement) ছাড়া আমােদর মেলখেত আেরা অ া-


িববৃিত য িল আেছ স িল আমােদর লখা ায় সকল মেলখেতই থাকেব। আমরা তাই
আপাতত ও েলা একরকম জার কের মেন রাখার চ া করেবা। তারপেরও অব আমরা নীেচর
আেলাচনা থেক সংে েপ জেন নব বাঁকী িববৃিত েলার কানটার কাজ মাটামুিট কী।

িফিরি ২.১: েভ া জানােনার মেলখ (Wishing Program)


#i n c l u d e <iostream>
using namespace std ;
i n t main ( )
{
cout << " shuvessa nin " << endl ;

ret ur n 0 ;
}

ফলন (output)
shuvessa nin

একদম েত আমরা #include <iostream> ব বহার কেরিছ কারণ iostream নােম


একটা িশর নিথ (header file) আেছ যটা আমরা আমােদর মেলখেত অ ভু করেত চাই।
ওই িশর নিথেত নানান িবপাতক (function) আেছ য েলা আমরা পের জানব ও ব বহার কর-
বা। আপাতত জেন নই, ওই নিথেত cout আর endl আেছ। মুলত আমােদর মেলখেত cout
আর endl ব বহার করার জ ই আমরা iostream অ ভু কেরিছ। এরকম আেরা িশর নিথর
(header file) কথা আমরা পের িব ািরত জানেবা ও অব ই ব বহার করেবা।
using namespace std; আমরা ব বহার কেরিছ কারণ cout আর endl আসেল েটা
নাম, আর ওই নাম েটা িসিপিপেত আেগ থেক িবদ মান std (standard বা িমত) নামাধােরর
(namespace) অ গত। িসিপিপেত একই নাম িভ িভ নামাধাের অ গত হেত পাের। তা
কােনা নাম বলেল সিট কান নামাধার থেক আসেব সিট আমরা আেগই বেল িদি , যমন
আমােদর সকল নাম আসেল std নামাধার থেক আসেব। নামাধার কী তা আর একটু পির ার কের
বুঝেত হেল নীেচর পিরে েদর (para) ঢাকার বনাম ব ড়ার গাবতিল িনেয় আেলাচনা পেড়া।
গাবতিল নােম ঢাকায় একিট জায়গা আেছ আবার গাবতিল নােম ব ড়ায় আেরকিট জায়গা
আেছ। তা গাবতিল বলেত গেল আমােদর বলেত হেব 'ব ড়ার গাবতিল' অথবা 'ঢাকার গাবতিল',
কবল গাবতিল বলেল তা বুঝা যােব না কাথাকার গাবতিল। িবক িহসােব আমরা আেগই বেল
িনেত পাির য আমরা এখন ঢাকার কথা আেলাচনা করিছ। তখন কবল গাবতিল বলেলই আমরা
বুঝব এিট ঢাকার গাবতিল। আবার যিদ আেগই বেল নই য এখন থেক আমরা ব ড়ার কথা
আেলাচনা করেবা তাহেল গাবতিল বলেলই আমরা ব ড়ার গাবতিল বুঝব, ঢাকারটা নয়।
উপেরর মেলখেত using namespace std; বেল আমরা আেগই বেল িনেয়িছ য এরপর
থেক আমরা std নামাধার (namespace) িনেয় কাজ করেবা। কােজই পের যখন cout আর
endl ব বহার কেরিছ, তখন আর std এর কথা বলেত হয় িন। িক কউ যিদ তার মেলখেত
using namespace std; না লেখ, তাহেল তােক cout << "shuvessa nin" << endl
; এর বদেল িলখেত হেব std: : cout << "shuvessa nin" << std::endl; অথাৎ cout
আর endl েটার পূেবই std: : লািগেয় িনেত হেব, িঠক যমন গাবতিল বলার আেগ ঢাকা লািগেয়


২.২. নাম-ধাম-বৃ াে র মেলখ (Detailing Program)

বলেত হেব ঢাকার গাবতিল। cout আর endl এর আেগ std: : না িলখেল মেলখ সফল ভােব
সংকলন (compile) করা যােব না, নানান িট (error) বাতা (message) দখােব। সংকলন
সমেয় দখােনা িটবাতা েলােক সংকলন কালীন (compile-time) িট বলা হয়।
য কান িসিপিপ মেলখেত একিট মুল িবপাতক (function) থােক main যার নাম। এই
main িবপাতেকর কান পরািমিত (parameter) থাকেব না, কােজই main( ) এর পের গাল
ব নী েটার মেধ িকছু বলা হয় িন। আর িতিট িবপাতক চাইেল একিট মান ফরত দয়, main
িবপাতক সাধারণত একিট পূণক (integer) ফরত দয়, যা main লখার আেগ int িহসােব
উে খ করা হেয়েছ। িবপাতক িনেয় িব ািরত আেলাচনা আমরা পের করেবা। আপাতত সংে েপ
এইটু ই জেন রািখ। তা আমােদর মেলখেত return 0; িববৃিতিট আসেল বলেছ য আমােদর
main িবপাতকিট ফরত পাঠােব। কার কােছ ফরত পাঠােব? য আমােদর মেলখ চালাে
তার কােছ। main িবপাতক 0 পাঠােনা মােন হেলা, এিট সফল ভােব শষ হেয়েছ, কান িট
িবচু িত ঘেট িন। 0 ছাড়া অ িকছু ফরত পাঠােনা িনেয়ও আমরা পের আেলাচনা করেবা।
িসিপিপেত েটা বাঁকা ব িনর {} িভতের যা থােক তােক বলা হয় একিট মহ া (block)।
িতিট িবপাতেকর একিট শরীর (body) থােক যিট মহ ার িভতের থােক। ল কের দেখা
আমােদর main িবপাতেকর cout আর return িদেয় হওয়া িববৃিত িট একিট মহ ার
িভতের রেয়েছ। আর একিট িবষয় খয়াল কেরা, আমােদর িববৃিত েলার শেষ িক একিট কের
িদিত (semicolon) ; রেয়েছ। িসিপিপেত বশীরভাগ িববৃিতর পেরই আমরা এইরকম িদিত ;
িদেয় িববৃিত শষ কির। িঠক বাংলা ভাষায় িতিট বােক র পের দাঁিড় । দয়ার মেতা ব াপার।
সব িমিলেয় এই হল আমােদর থম মেলখ, যটা ব বহারকারীেক েভ া জানােব।

২.২ নাম-ধাম-বৃ াে র মেলখ (Detailing Program)

িসিপিপেত এমন একিট মেলখ (program) রচনা কেরা যিট চালােল ব বহারকারীেক তা-
মার নাম-ধাম-বৃ া কেয়ক সািরেত মালা (string) আকাের বেল দয়। সােথ সংখ া (number)
িহসােব তামার বয়স ও তামার ফলাফেলর িজিপএও বেল দয়।

িফিরি ২.২: নাম-ধাম-বৃ াে র মেলখ (Detailing Program)


#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

i n t main ( )
{
cout << " amar nam goni mia " << endl ;
cout << " amar b a r i bogra " << endl ;
cout << " ami t h a k i dhakai " << endl ;
cout << " amar boyos " << 20 << " bosor " << endl ;
cout << " amar r e s u l t gpa " << 3 . 99 << endl ;

ret ur n EXIT SUCCESS ;


}


২.৩. মেলখেত টীকা িলখন (Writing Program Comments)

ফলন (output)
amar nam goni mia
amar b a r i bogra
ami t h a k i dhakai
amar boyos 20 bosor
amar r e s u l t gpa 3 . 99

উপেরর মেলখেত আমরা নাম-ধাম-বৃ া কেয়ক সািরেত দিখেয়িছ। এই মেলখেয়র -


িতিট cout িদেয় িববৃিতর সােথ পের দখােনা ফলন িমিলেয় নাও। ল কেরা cout িদেয়
" " উ ৃিত অংশ েলার িভতের আমরা য মালা েলা (string) দখােত বেলিছ স েলাই ফলেন
ব সভােবই দখােনা হেয়েছ। আর িতবার endl অথাৎ end line পেল ফলন পেরর সািরেত
চেল গেছ। শেষর েটা cout িববৃিত েলা খয়াল কেরা। এই েটােত বয়স ও িজিপএ আমরা
সংখ া িহসােব দিখেয়িছ। তুিম চাইেল িক সংখ া িহসােব না দিখেয় মালার িভতেরই দখােত
পারেত যমন নীেচর মেতা, সে ে ফলন িক দখেত একই রকম হেতা।
cout << " amar boyos 20 bosor " << endl ;
cout << " amar r e s u l t gpa 3 . 99 " << endl ;

সবেশেষ একটা িবষয় খয়াল কেরা। আমরা এই মেলখেত return 0; এর বদেল িলেখিছ
return EXIT SUCCESS; আর এই EXIT SUCCESS আেছ cstdlib িশর নিথেত (header
file)। আমরা তাই #include <cstdlib> িলেখ cstdlib িশর নিথিটও আমােদর মেলখেত
অ ভু কেরিছ। মেন রাখেব EXIT SUCCESS এর মান আসেল 0 িক 0 তা একটা সংখ া
যটা দেখ সরাসির িঠক অ ধাবন করা যায় না আমরা কী বুঝােত চাইিছ, মােন মেলখ সফল
না িবফল হেয়েছ। আমরা তাই কের EXIT SUCCESS িলখেবা যােত চােখ দেখই আমরা
বুঝেত পাির ব াপারটা কী। বেল রািখ গণিনর (computer) জ িক 0 আর EXIT SUCCESS
একই ব াপার কারণ EXIT SUCCESS এর মান য 0 ওইটা তা cstdlib নিথেত বলা আেছ,
সংকলন করার পের EXIT SUCCESS আসেল 0 হেয় যােব, গণিন ওইটা ই দখেত পােব।
আমরা 0 এর বদেল EXIT SUCCESS আসেল িলখিছ কবল মা েষর বুঝার িবধার জ , -
মেলখ পেড় চােখ দেখই যােত সহেজ বুঝা যায় মেলখিট সফল না িবফল ভােব শষ হে ,
সটাই আমােদর উে । তাহেল এখন থেক মেলখেয়র main িবপাতেক return 0; না িল-
খ return EXIT SUCCESS; িলখেব আর cstdlib িশর নিথও অ ভু কের নেব!
তা তামরা এখন থেক কেয়ক সািরেত িকছু দখােনার মেলখ রচনা করেত চাইেল এই
মেলখেয়র মেতা কের রচনা করেব। দরকার মেতা সংখ া (number) ও মালা (string) িম ণ
কেরও িক যা দখােত চাও তা দখােত পারেব। চ া কের দেখা কমন?

২.৩ মেলখেত টীকা িলখন (Writing Program Comments)


এমন একটা মেলখ (program) রচনা কেরা যিট বতমান সাল ২০১৫ থেক তামার বয়স
২০বছর িবেয়াগ কের তামার জ বছর দখায়। এই মেলখেত দরকার অ যায়ী পযা টীকা
(comment) িলেখা, যােত অেনক িদন পের তুিম যখন মেলখিট ায় ভুেল যাওয়ার মেতা অব-
ায় যােব তখন মেলখিট আবার দখেত িগেয় ত চাখ বুিলেয়ই সহেজ বুঝেত পােরা য এিট
তামার কীেসর মেলখ িছল। মেলখেত টীকা থাকেল তুিম ছাড়া অ কউও তামার লখা -
মেলখ পেড় সহেজ বুঝেত পারেব। টীকা লখা হয় মা ষ য ভাষায় কথা বেল সই ভাষায় যমন

১০
২.৩. মেলখেত টীকা িলখন (Writing Program Comments)

বাংলায় বা ইংেরজীেত, িসিপিপ ভাষায়ও নয়, যে র ভাষায়ও নয়, কােজই টীকা িলখেল অেনক িদন
পেরও আমােদর মেলখ বুঝেত িবধা হয়।

িফিরি ২.৩: মেলখেত টীকা লখন (Commenting in Programs)


/ / l i s t of header f i l e s needed f o r t h i s program .

#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ; / / use the std namespace

i n t main ( )
{
/ / Su bt r ac t 20 years from 2015 to get b i r t h y e a r

cout << " amar jonmoshal " << 2015 − 20 << endl ;

ret ur n EXIT SUCCESS ; / ∗ return with success ∗ /


}

ফলন (output)
amar jonmoshal 1995

উপেরর মেলখ খয়াল কেরা। কিঠন িকছু নয়। আেগর মেতাই iostream আর cstdlib
অ ভু (include) করা আেছ। তারপর বলা হেয়েছ using namespace std; তারপর মুল
িবপাতক (function) িহসােব int main() যিটর কান পরািমিত (parameter) নাই কারণ
( ) গাল ব নীর িভতের িকছু নাই আর যিট একিট পূণক (integer) ফরত দয় কারণ int বলা
আেছ েত। তারপর মুল িবপাতেকর শরীের েটা {} বাঁকাব নীর িভতেরর মহ ায় (block)
বলা আেছ cout << "amar jonomoshal " << 2015 − 20 << endl; অথাৎ ফলেন
amar jonomoshal দিখেয় তারপর 2015 থেক 20 িবেয়াগ করেল য 1995 পাওয়া যায় তা
দখােব। তারপর মহ ার িভতের শষ িববৃিত (statement) আেছ return EXIT SUCCESS;
যা আেগর মেতাই বলেছ য আমােদর মেলখ ওইখােন সফল ভােব শেষ হেয় বর হেয় যােব।
EXIT SUCCESS িনেয় আমরা আেগর পােঠ িব ািরত আেলাচনা কেরিছ, ওই পাঠ থেকই দেখ
িনেত পােরা, কােজই সটা আবার এখােন আেলাচনা করিছ না।
যাইেহাক, খয়াল কের দেখা ওপের বিণত িবষয় েলা ছাড়াও উপেরর মেলখেত আেরা
িকছু বাক ও সাির দখা যাে যমন থম সািরিটই হল // list of header files needed
for this ।program এই বাক িট আসেল আমােদর মেলখেয়র অংশ নয়, অথ াৎ মেলখ
যখন চালােনা (run) হেব তখন এই বােক র কান ভাব থাকেব না। মেলখ এমন ভােব চলেত
থাকেব যােত মেন হেব ওই বাক িট যন ওখােন নাই। এরকেমর বাক েলােক বলা হয় টীকা
(comment)। খয়াল কেরা টীকার বাক িটর একদম সামেন রেয়েছ // অথাৎ সামেনর িদেক
হলােনা েটা দাগ। ওই েটা দাগ হেত কের ওই সািরেত তারপের যাই থাকেব সব িমিলেয়
হেব একিট টীকা। এইরকম টীকা যেহতু কবল এক সািরেত সীমাব তাই এেক বলা হয় সাির
টীকা (line comment)। িসিপিপ ভাষায় অিধকাংশ সময়ই সাির টীকা ব বহার করা হয়।

১১
২.৪. মেলখেত ফাঁকা দওয়া (Spacing and Indentation)

সাির টীকা যিদ সািরর একদম েত লখা হয় তাহেল সাধারণত এিট টীকার িঠক নীেচ য
সংেকত (code) থােক তার জ লখা হয়। যমন // list of header files needed for
this program এই টীকািট একদম সািরর থেক লখা হেয়েছ, এিট তাই পেরর ই সা-
িরেত #include <iostream> আর #include <cstdlib> কন লখা হেয়েছ সিট ব াখ া
করেছ। সাির টীকা অেনক সময় সািরর শষ িদেকও লখা হয়। যমন // we will use the
std namespace টীকািট লখা হেয়েছ using namespace std; িদেয় হওয়া সািরর
শেষ। সািরর শষ িদেক লখা এইরকম সাির টীকা সাধারণত সািরর থেম য সংেকত (code)
লখা হেয়েছ তা ব াখ া করেত ব বহার করা হয়। অেনক সময় টীকা িলখা হয় েত /∗ আর শ-
ষ ∗/ িচ িদেয়, যমন return EXIT SUCCESS; এর সািরেত শেষ লখা হেয়েছ। এইরকম
টীকা একািধক সাির িমিলেয় হেত পাের, তাই এেদরেক সাির টীকা না বেল মহ া টীকা (block
comment) বলা হয়। িসিপিপেত আমরা অিধকাংশ সময় আসেল সাির টীকাই ব বহার কির।
তুিম যখন তামার মেলখেত টীকা িলখেব তখন হয়েতা ইংেরজীেতই টীকা িলখেব। অথবা
ইংেরজী অ ের বাংলায়ও টীকা িলখেত পােরা। আজকাল অেনক সংকলক (comiler) ও স াদক
(editor) ইউিনেকাড (unicode) সংেকত বুঝেত পাের। কােজই টীকা বাংলায়ও লখা স ব।
আমরা এরপর থেক িসিপিপেত লখা সকল মেলখেত টীকা বাংলায় িলখেবা, যােত আমরা আমা-
দর িনেজর ভাষায় সহেজ বুঝেত পাির। এ েলা যেহতু িনবাহ execution) হেব না, কােজই
খােমাকা কন ক কের ইংেরজীেত িলখেত যােবা! আর িবেদশী কউ তা আমােদর মেলখেয়র
সংেকত দখেব না, কােজই আমরা আমােদর বাংলা ভাষােতই টীকা িলখেবা। তেব মেন রাখেব িব-
দশী কােরা পড়ার স াবনা থাকেল আমােদর টীকা সহ সবিকছু ইংেরজী ভাষােতই িলখেত হেব।
তাহেল সাির টীকা আর মহ া টীকা শখা হেলা। এখন থেক মেলখ লখার সময় যেথ পিরমােন
টীকা িদেব কমন? আিমও মেলখ েলােত টীকা দেবা, যােত তামােদর বুঝেত িবধা হয়।

২.৪ মেলখেত ফাঁকা দওয়া (Spacing and Indentation)


িসিপিপ মেলখ (program) িলখেত কখন নতুন সাির করেব? কখন ফাঁকা ফাঁকা কের
িলখেব? কখন সািরেত একটু ছাড়ন িদেয় িলখেব। একিট মেলখ িলেখ এই িবষয় েলা আেলাচনা
কেরা। চেলা আমরা আমােদর েভ া জানােনার ছাট মেলখিট িদেয়ই আেলাচনা কির।

িফিরি ২.৪: মেলখেত ফাঁকা দওয়া (Spacing in Programs)


#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

i n t main ( )
{
cout << " shuvessa nin " << endl ;
ret ur n EXIT SUCCESS ;
}

উপেরর মেলখেত আমরা আপাতত টীকা (comment) িলিখ নাই। এই মেলখেত # বা


কাটাকািট (octothorpe) িচ িদেয় হওয়া সাির েলা তামােক আলাদা আলাদা সািরেত
িলখেত হেব। আর এিট সািরর থেক হেলই ভােলা। তুিম অব সািরর শেষর িদেক চাইেল

১২
২.৪. মেলখেত ফাঁকা দওয়া (Spacing and Indentation)

সাির টীকা (line comment) িলখেত পােরা যােত বুঝা যায় ওই সািরর র িদেক তুিম আসেল
কী করেত চেয়েছা। তামার মেলখেত লখা কাটাকািট িচ # িদেয় হওয়া সাির েলা সা-
ধারণত সংকলক (compiler) িদেয় ি য়া করা হয় না। আলাদা একিট ম (software) যার
নাম পুব- ি য়ক (preprocessor) সটা িদেয় সংকলন করারও আেগ এই েলা ি য়া করা
হয়, কাজটা বশীর ভাগ সমেয় অব সংকলকই কিরেয় নয়। পূব- ি য়ক (preprocessor)
িবষেয় িব ািরত আেলাচনা আমরা পের করেবা।
#i n c l u d e <iostream> / / যাগান ফলন াত িশর নিথ অ ভু হল

কান িববৃিত পুব ি য়ক (preprocessor) না সংকলক (compiler) িদেয় ি য়াকরণ


হেব এটা বুঝার আেরকটা সহজ উপায় আেছ। এইরকম িদিত ; (semicolon) আর মহ ার
(block) জ য বাঁকা ব নী } ব ব ত হয় তা িদেয় শষ হওয়া িববৃিত েলা সাধারণত সংক-
লক িদেয় ি য়াকরন করা হেব, পূব- ি য়ক িদেয় নয়। যাইেহাক, সংকলক িদেয় য সংেক-
ত েলা (code) ি য়া করা হয় স েলা য িভ িভ সািরেতই িলখেত হেব, বা অেনক ফাঁকা
ফাঁকা (space) কেরই িলখেত হেব এ রকম কান কথা নই। তুিম চাইেল তামার পুেরা মেল-
খেত থাকা সকল সংকলনেযাগ সংেকত এক সািরেত িলখেত পােরা। যমন উপেরর মেলখেয়র
সংকলনেযাগ অংশটু আমরা চাইেল নীেচর মেতা কের টানা এক সািরেত িলখেত পাির।
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
using namespace std ; i n t main ( ) { cout << " shuvessa
nin " << endl ; ret ur n EXIT SUCCESS ; }

উপের যিদও ই সািরেত দখা যাে আমরা আসেল using থেক কের } পয টানা
একসােথ িলেখিছ, িক এখােন পােশর িদেক ােনর তার কারেণ টানা সািরিট ভেঙ ই সাির
হেয় গেছ। তামার স াদেক (editor) এ যিদ পােশর িদেক অেনক জায়গা থােক তুিম এক
সািরেতই িলখেত পারেব। আসেল তম একিট ফাঁকা (space) দয়া বাধ তামুলক হেয় যায়
যখন পরপর েটা শ লখা হয়। যমন using, namespace, std, int, main এইরকম শ
পরপর েটা থাকেল তামােক কমপে একিট ফাঁকা (space) িদেত হেব। েটা িচ যমন ব নী
( ) বা িদিত ; বা আেরা অেনক তীক আেছ, এই েলা পরপর েটা থাকেলও কান সম া নাই।
অথ াৎ একািধক তীক কান ফাঁকা না িদেয়ও তুিম একসােথ িলখেত পারেব।
এখন করেত পােরা ফাঁকা দয়া যিদ ব াপার না হয়, তাহেল মেলখ িলখেত কন ফাঁকা
দেবা। বশী বশী ফাঁকা আসেল গণিনর (computer) জ দরকার নই িক দরকার মা েষর
জ । আেগর পােঠর কথা মেন কেরা। আমরা কন টীকা (comment) িলেখিছলাম? টীকা তা
আর িনবািহত হয় না। আমরা যােত অেনকিদন পের মেলখেয়র সংেকত (code) দেখ সহেজ
বুঝেত পাির, আমরা তাই টীকা িলেখিছলাম। তা মেলখ যিদ পুেরাটা একটা ল া সাির হয়,
আমােদর মা েষর পে সটা দেখ বুেঝ ওঠা খুবই ক কর হেব। মুলত আমােদর মা েষর বুঝার
িবধােথ আমরা মেলখ সািরেত সািরেত ভে ভে িলিখ বা দরকার মেতা একসােথ িলিখ।
মেলখেত ফাঁকা দয়ার ব াপারিট বাংলায় বা ইংেরজীেত রচনা লখার মেতাই, কখন তুিম
আলাদা বাক করেব, কখন তুিম আলাদা পিরে দ (para) করেব, কখন তুিম আলাদা অ ে দ
(section) করেব, এই রকম। কান িবষেয়র সােথ বশী স িকত িববৃিত েলা আমরা সাধারণত
পরপর সািরেত কান ফাঁকা (blank line) না িদেয় িলখেবা। আর েটা িবষেয়র সাির েলার মােঝ
হয়েতা এক সাির ফাঁকা িদেয় িলখেবা, আর িবষয় েলার মেধ খুব বশী যাগােযাগ না থাকেল
হয়েতা আমরা ই বা আেরা বশী সাির ফাঁকা িদেয় িলখেবা। তাহেল এখন থেক মেলখ লখার
সময় দরকার মেতা ফাঁকা িদেয় িদেয় িলখেব যােত তামার মেলখ পড়া সহজ হয়।

১৩
২.৫. অ শীলনী সম া (Exercise Problems)

সবেচেয় উপের যভােব আমরা মেলখ িলেখিছ সখােন আেরা একটা ব াপার খয়াল কেরা,
আমরা cout বা return এর িববৃিত েলা লখার আেগ তােদর িনজ িনজ সািরেত বশ িকছুটা
ফাঁকা িদেয় িলেখিছ, একদম সািরর থেক িলিখ নাই। এিট কন করলাম? এিট করলাম এ
কারেণ য ওই েটা সাির আসেল আমােদর মহ ার িভতের আেছ। ল কেরা মহ ার বাঁকা ব নী
েটা কমন দেখই বুঝা যায় য এরা জেন জনার। আর মহ ার িভতেরর িববৃিত েটা কমন
একটু িভতেরর িদেক থাকায় পির ার বুঝা যায় য ওরা আসেলই ওই মহ ার িভতের। তা দরকার
মেতা কান িববৃিত এরকম সািরর একটু িভতেরর িদেক থেক লখার ব াপারিটেক বলা হয় ছাড়ন
দয়া (indentation)। মেলখ লখার সময় এখন থেক তামরা অব ই দরকার মেতা ছাড়ন
িদেয় িলখেব, তাহেল দখেব মেলখ পড়া ও বাঝা কত সহজ হেয় যায়।
এই পযােয় িজে স করেত পােরা, েত ক সািরেত এভােব অত লা কের ফাঁকা চাপেবা কম-
ন এইটা তা িবরি কর। আসেল তামার চাপিনমাঁচায় (keyboard) একটা ল (tab) চাপিন
আেছ, দেখা ওইটা চাপেল একসােথ ৪টা বা ৮টা ফাঁকা (space) এর সমপিরমান ফাঁকা একবাের
আেস। তা দরকার মেতা একবার বা বার ল চাপেলই হেয় গেলা। কােজই মেলখ লখার
সময় কখেনাই এই আলেসিম টু করেব না। ছাড়ন দয়া মেলখ লখার জ পূণ ব াপার,
র দখা যাওয়া আর তাড়াতািড় পড়ার জ দরকারী, মেলখেত কান ভুল থাকেল আমরা
যখন ভুল বর করেত চাই তখনও খুব খুব দরকারী, বড় বড় মেলখ যখন িলখেব তখন ব াপারটা
খািনকটা ঠেক ঠেক িশেখ অিভ তা িদেয় ভােলা কের বুঝেত পারেব।

২.৫ অ শীলনী সম া (Exercise Problems)


ধারণাগত : নীেচ িকছু ধারণাগত রেয়েছ। েলার উ র িনেজ িনেজ বর করেব।

১. মেলখ (program) বলেত কী বুেঝা? মেলখ িক কবল গণিনেতই িনবাহেযাগ ?

২. িসিপিপ ভাষায় মেলখ তরী হেত সটার ফলাফল দখা পয কী কী ঘটনা ঘেট?

৩. য ালয় (console) কী? এর যাগান (input) ও ফলন (output) য েলা কী কী?

৪. িসিপিপেত িশরনিথ (header file) বলেত কী বুেঝা? আমােদর মেলখ েলােত িশর
নিথ iostream ও cstdlib আমরা কন ব বহার কেরিছ?

৫. নামাধার (namespace) কী? বা ব জীবেন ও পিরগণনায় উদাহরণ সহ ব াখ া কেরা।

৬. িসিপিপেত main িবপাতক হেত ফরেতর সময় return 0; না িলেখ তার বদেল return
EXIT SUCCESS; িলখা কন উ ম? ব াখ া কেরা।

৭. মেলখেত ছাড়ন দয়া (indentation) মােন কী? ছাড়ন দয়ার পে -িবপে যুি
িলখ। মেলখ কন বশ ফাঁকা ফাঁকা কের িলখা উিচৎ?

৮. মেলখেত টীকা (comment) লখা কী? মেলখেত টীকা (comment) িলখার কেয়-
কিট কারণ ব াখ া কেরা? সাির (line) টীকা ও মহ া (block) টীকা কী?

৯. একিট িসিপিপ মেলখেত (program) নীেচর কান িবপাতকিট অব ই থাকেত হেব?

১৪
২.৫. অ শীলনী সম া (Exercise Problems)

ক) start( ) খ) system() গ) main() ঘ) program()

১০. মেলখ সফল ভােব শষ হেল main িবপাতক হেত সাধারণত কত ফরত পাঠােনা হয়?

ক) −1 খ) 0 গ) 1 ঘ) িকছুই না

১১. িসিপিপেত মহ া (block) বুঝােনার জ নীেচর কান েলা ব বহার করা হয়?

ক) { } খ) < > গ) ( ) ঘ) begin end

১২. িসিপিপেত একিট িববৃিতর (statement) শেষ সাধারণত কান িচ ব বহার করা হয়?

ক) . খ) ; গ) : ঘ) ,

১৩. িসিপিপেত নীেচর কানিট সিঠক টীকা (comment)?

ক) ∗/ টীকা ∗/ খ) ∗∗ টীকা ∗∗ গ) /∗ টীকা ∗/ ঘ) { টীকা }

পিরগণনার সম া: নীেচ আমরা িকছু পিরগণনার সম া দখেবা। এই সম া েলা আেগ ধয


ধের িনেজ িনেজ সমাধান করেত চ া করেব। যখন এেকবােরই পারেছা না বেল মেন হয় তখনই
কবল সমাধান দেখ িনেত পােরা। সমাধান েলা পিরগণনার েলার শেষ আেছ।

১. নীেচর কথা েলা ফলেন (output) দখােনার জ িসিপিপেত একিট মেলখ িলেখা।
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
tomar boyosh noy bosor .
porigonona s h i k h t e chao ?
porigonona k i sohoj na !

২. িসিপিপেত একিট মেলখ রচনা কেরা যিট নীেচর নকশািটর মেতা নকশা তরী কের।
খয়াল কের দেখা নকশািট বাংলা অ 8 এর মেতা। তুিম চাইেল আেরা নানান নকশা,
নানান বণ বা অ িনেজর মেতা কের ভেব িনেয় সইমেতা নকশা তরী করেত পােরা।
যাইেহাক দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব
আর সহেজ বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
∗∗ ∗∗ ∗
∗ ∗
∗ ∗ ∗
∗ ∗
∗∗ ∗∗ ∗

১৫
২.৫. অ শীলনী সম া (Exercise Problems)

পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন যােত
একটু সাহায কবল পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।

১. নীেচর কথা েলা ফলেন (output) দখােনার জ িসিপিপেত একিট মেলখ িলেখা।
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
tomar boyosh noy bosor .
porigonona s h i k h t e chao ?
porigonona k i sohoj na !

িফিরি ২.৫: অণুে রণার মেলখ (Inspiring Programming)


#i n c l u d e <iostream> / / cout ব বহার করার জ
#i n c l u d e <c s t d l i b> / / EXIT SUCCESS এর জ

using namespace std ; / / িমত নামাধার ব বহােরর জ

i n t main ( )
{
/ / দরকারী কথা েলা ফলেন দখাও
cout << " tomar boyosh noy bosor . " << endl ;
cout << " porigonona s h i k h t e chao ? " << endl ;
cout << " porigonona k i sohoj na ! " << endl ;

ret u rn EXIT SUCCESS ; // সফল সমাি


}

২. িসিপিপেত একিট মেলখ রচনা কেরা যিট নীেচর নকশার মেতা নকশা তরী কের। খ-
য়াল কের দেখা নকশািট বাংলা অ 8 এর মেতা। তুিম চাইেল আেরা নানান নকশা, নানান
বণ বা অ িনেজর মেতা কের ভেব িনেয় সইমেতা নকশা তরী করেত পােরা। যাইেহাক
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
∗∗ ∗∗ ∗
∗ ∗
∗ ∗ ∗
∗ ∗
∗∗ ∗∗ ∗

এই মেলখিট িক অেনক মজার তাই না। তুিম িক বণমালার িতটা বণ আর ০-৯ দশটা
অে র জে ই এরকম নকশা তরী করেত পারেব? রা াঘােট বা িবেয় বািড়েত অেনক সময়
ছাট ছাট বািত িদেয় নানান িকছু লখা হয়, আসেল এই নকশা েলার মেতা কের নকশা
বািনেয়ই স েলা করা হয়। গণিনেত (computer) এর নজিরর (monitor) পদায়ও

১৬
২.৬. গণনা পিরভাষা (Computing Terminologies)

অেনক িকছু এভােব দখােনা হয়। আসেল য কান ছিবই এরকম অসংখ িব র সম েয়
তরী, িকছু িব ালােনা, িকছু িব নভােনা। য িব েলা ালােনা স েলা হেলা ∗
আর য েলা নভােনা স েলা ফাঁকা। তা চেলা আমরা মেলখিট দিখ।

িফিরি ২.৬: নকশা আঁকার মেলখ (Program Drawing Designs)


#i n c l u d e <iostream> / / cout ব বহার করার জ
#i n c l u d e <c s t d l i b> / / EXIT SUCCESS এর জ

using namespace std ; / / িমত নামাধার ব বহােরর জ

i n t main ( )
{
/ / দরকার মেতা ∗ ও ফাঁকা িদেয় নকশা
cout << " ∗∗ ∗∗ ∗ " << endl ;
cout << " ∗ ∗ " << endl ;
cout << " ∗ ∗ ∗ " << endl ;
cout << " ∗ ∗ " << endl ;
cout << " ∗∗ ∗∗ ∗ " << endl ;

ret urn EXIT SUCCESS ; // সফল সমাি


}

২.৬ গণনা পিরভাষা (Computing Terminologies)


• কাটাকািট (octothorpe) # • নজির (monitor)

• মেলখ (program) • নামাধার (namespace)

• গণিন (computer) • িনেদশ (instruction)

• চাপিন (keyboard) • িনবাহ (execution)

• চালােনা (run) • িনবাহেযাগ (executable)

• ছাড়ন দয়া (indentation) • পরািমিত (parameter)

• জালপাতা (webpage) • পিরে দ (para)

• িটপিন (mouse) • পুব- ি য়ক (preprocessor)

• টীকা (comment) • পূণক (integer)

• িট (error) • িমত (standard)

• িদিত (semicolon) ; • ফলন (output)

১৭
২.৬. গণনা পিরভাষা (Computing Terminologies)

• ফলন য (output device) • শরীর (body)


• বাতা (message) • িশর নিথ (header file)
• িবপাতক (function) • সংকলক (compiler)
• িববৃিত (statement)
• সংকলন (compile)
• ম (software)
• সংকলন কালীন (compile-time)
• মহ া (block)
• সংেকত (code)
• মহ া টীকা (block comment)
• মালা (string) • সংখ া (number)

• য ালয় (console) • স াদনা (editor)

• যাগান (input) • সাির টীকা (line comment)

১৮
অধ ায় ৩

চলক ও বক
(Variables and Constants)

চলেকর (variable) মান (value) বদলােনা যায় িক বেকর (constant) মান বদলােনা যায়
না। মেলখেত উপা (data) সরাসির (directly) না িলেখ চলক বা বেকর মাধ েম ব বহার
করেল একরকেমর পেরা তা (indirection) তরী হয়। ফেল উপা িঠক কেতা সটা না ভেব
উপা িট কীেসর আর তার ি য়াকরণ কমন সটা ভেব মেলখ তরী সহজ হেয় যায়।

৩.১ চলেকর ব বহার (Using Variables)


একিট আয়েতর দঘ ৫ িমটার, ৩ িমটার। িসিপিপ ভাষায় এই প আয়েতর ফল ও পির-
সীমা বর করার মেলখ (program) রচনা কেরা। এই মেলখেত তামােক চলক (variable)
ব বহার করেত হেব, সরাসির থেক ফলন (output) দয়া যােব না।
আমরা আেগ এই সম ার জ সংি মেলখটা দিখ যটােত চলক ব বহার না কের
একদম সরাসির ব বহার কের ফল ফলেন (output) দখােনা হেব। আমরা জািন দঘ
আর ে র ণফল হল ফল আর দঘ ও ে র যাগফেলর ি ণ হেলা পিরসীমা।
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

i n t main ( )
{
cout << " k h e t r o f o l holo " << 5 ∗ 3
<< " borgometer " << endl ;
cout << " porishima holo " << 2∗ ( 5+ 3 )
<< " meter " << endl ;

ret ur n EXIT SUCCESS ;


}

১৯
৩.১. চলেকর ব বহার (Using Variables)

উপের আমরা য মেলখ িলখলাম আমরা িক ওইটা চাই না। ওইখােন সংখ া েলা সরাসির
ে বিসেয় িহসাব কের ফলন (output) দখােনা হেয়েছ। আমরা চাই ফল আর পিরসীমার
েলা চলেকর নাম িদেয় িলখেত আর িলখার আেগ চলক েলার মান িদেয় িদেত। চলক
ব বহােরর নানান িবধা আেছ। যমন একিট িবধা হেলা ে চলেকর নাম থাকায় দেখই
সহেজ বুঝা যায় কীেসর , যমন নীেচর মেলখ দেখা। আর একিট িবধা হেলা কউ যিদ
বেল ৫ না দঘ হেব ৬, উপেরর মেলখেত িক ইখােন 5 বদলাইয়া 6 করেত হেব। ছাট
একটা মেলখেতই যিদ ইখােন বদলােত হয়, তাহেল বড় একিট মেলখেয়র কথা িচ া কেরা,
সটােত আেরা কত জায়গায় য বদলােত হেব ইয় া নাই। আমরা এ কারেণ চলক ব বহার করেবা।
িফিরি ৩.১: মেলখেত চলেকর ব বহার (Variables in Programs)
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

i n t main ( )
{
i n t doirgho ; / / এই চলেক থাকেব বেগর দঘ ।
i n t prostho ; / / এই চলেক থাকেব বেগর ।
i n t k h e t r o f o l ; / / এই চলেক থাকেব বেগর ফল।
i n t porishima ; / / এই চলেক থাকেব বেগর পিরসীমা।

doirgho = 5 ; // দেঘ র এই মান বেল দয়া আেছ


prostho = 3 ; // ে র এই মান বেল দয়া আেছ।

// ফল বর করার হল দঘ আর ে র ণফল।
k h e t r o f o l = doirgho ∗ prostho ;

/ / পিরসীমা বর করার হল দঘ ও ে র যাগফেলর ি ন


porishima = 2∗ ( doirgho + prostho ) ;

/ / এবার ফল আর পিরসীমা ফলন দয়া হেব


cout<< " k h e t r o f o l holo " << k h e t r o f o l
<< " borgometer " << endl ;
cout << " porishima holo " << porishima
<< " meter " << endl ;

ret ur n EXIT SUCCESS ;


}

ফলন (output)
k h e t r o f o l holo 15 borgometer
porishima holo 16 meter

২০
৩.১. চলেকর ব বহার (Using Variables)

উপেরর মেলখেত খয়াল কেরা আমরা দঘ , , ফল, আর পিরসীমার জ চারটা চলক


িনেয়িছ যােদর নাম হেলা doirgho, prostho, khetrofol, porishima। তুিম িক চাইেল
এই নাম েলা ইংেরজী শে ও িদেত পারেত যমন length, width, area, perimeter। তু-
িম চাইেল আবার শ েলার থম অ র িনেয় এক অ েরর নামও িদেত পারেত যমন l , w, a
, p। তেব আমরা সবসময় চাই এমন নাম িদেত যােত নাম েলা দখেলই বুঝা যায় ওই চলকটা
কী কােজ ব বহার হেব। এক অ েরর নাম িদেল অেনক সময় বুঝা যায় িক একই অ র িদেয়
যিদ একািধক চলেকর নাম হয়, তাহেল মুশিকল হেয় যায়। অেনেক আবার খািল x, y, z,
অথবা a, b, c এই রকম নাম দয়। ওই রকম নাম িদেল পের মেলখ বুঝেত তামার িনেজর
বা অ কউ য পড়েব তার খুবই সম া হেব। সময় ন কের বর করেত হেব কান চলক আস-
ল কী কােজ ব বহার করা হেয়েছ। কােজই সবসময় অথেবাধক আর যেথ বড় নাম িদেত চ া
করেব, যােত নাম দেখই তার উে বুঝা যায়। িসিপিপেত চলেকর অথেবাধক (semantic) ও
গঠনিস (syntax) নাম দয়ার িবষেয় আমরা পেরর কান পােঠ িব ািরত আেলাচনা করব।
এখন একটা িবষয় খয়াল কেরা আমরা এখােন চলক েলার নােমর আেগ িলেখিছ int য-
টা আসেল integer এর সংি । integer হল পূণক বা পূণ সংখ া। আমরা চলেকর নােমর
আেগ এই রকম int িলেখ বুিঝেয়িছ য আমােদর এই চলক েলার মান হেব পূণক, আমরা কান
ভ াংশ ব বহার করেবা না। তুিম যিদ ভ াংশ ব বহার করেত চাও তাহেল তামােক int এর বদেল
float িলখেত হেব। float হল একরকেমর ভ াংশ। আমরা সই আেলাচনা পের আেরা িব ািরত
করেবা। তেব int এর বদেল float িলখেল আমােদর মেলখেত িক আর কাথাও কান িকছু
বদলােত হেব না, িঠক কাজ করেব। আমরা আপাতত int রেখই এই পােঠর আেলাচনা চালাই।
তা উপেরর মেলখেত আমরা যখন িলখলাম int doirgho; এর মােন হেলা doirgho
নােমর আমােদর একটা চলক আেছ আর তার মান হেব পূণক। এইেয int doirgho; িলেখ এই
িবষয় েলা বুঝাইলাম এটােক বলা হয় চলক ঘাষনা (variable declaration)। চলক ঘাষ-
না করেল তারপর থেকই চলকিট পরবতী যেকান িববৃিতেত (statement) ব বহার করা যায়,
িক ঘাষনা করার সােথ সােথ ওইখােন চলেকর মান কত সইটা িক আমরা জািননা, সাধারনত
চলেক তখন একটা উ াপা া মান থােক। এইটা িনেয় আমরা পের আেরা আেলাচনা করেবা।
এই মেলখেত আমরা দখিছ এর পের doirgho = 5; িলেখ অথাৎ = িচ ব বহার কের আমরা
doirgho চলেকর মান আেরাপ (value assign) কেরিছ 5। তরাং এরপর থেক doirgho
চলেকর মান হেব 5। একই ভােব prostho চলেকর মানও আমরা 3 আেরাপ কেরিছ।
এবার খয়াল কেরা, চলেকর মান আেরাপণ শষ হেল আমরা ফল আর পিরসীমার -
েলা িলেখিছ, সখােন িক এবার মান েলা সরাসির িলিখ নাই, তার বদেল চলক েলা ব বহার
কেরিছ। এইখােন িহসাব করার সময় চলেকর য মান থাকেব সইটাই আসেল ব বহার হেব। উপ-
র যিদ doirgho চলেকর মান থােক 5 তাহেল 5 ধের িহসাব হেব, আর যিদ পের doirgho এর
মান 5 এর বদেল 6 কের দয়া হয়, তাহেল 6 ব বহার হেব। এই পিরবতন কবল মান আেরাপেণর
ওইখােন করেলই কাজ হেয় যােব, সারা মেলখেত করেত হেব না। তেব একটা পূণ িবষয়
বিল এখােন doirgho আর prostho চলক িটেত মান আেরাপণ িক ফল আর পিরসীমার
ে র ব বহােরর আেগই করেত হেব। না করেল সংকলন করার সময় সতক বাতা (warning
message) আসেত পাের, আর মেলখ চালােনার সময় উে াপা া ফলও আসেত পাের।
সবেশেষ খয়াল কেরা ফলন (output) দওয়া হেয়েছ যখােন সখােন উ ৃিত িচ "" এর
িভতের যা আেছ তা িক মালা (string)। কােজই ওইটা িক ওইভােবই ফলেন এেসেছ এমনিক
khetrofol কথাটাও ব এেসেছ যটা িকনা চলেকর নােমর ব একই রকম। িক "" উ ৃিতর
বাইের যখন khetrofol লখা হেয়েছ একই সািরেত পেরর িদেক সখােন িক আর khetrofol
ফলেন আেস িন, এেসেছ সটােক চলক ধরেল য মান হওয়ার কথা সই 15। কােজই এটা মেন
রাখেব য চলেকর নাম "" উ ৃিতর িভতের মালা আকাের থাকেল ওইটা আসেল চলকটােক বুঝায়

২১
৩.২. বেকর ব বহার (Using Constants)

না। নামটা যখন উ ৃিতর বাইের থােক তখন ওইটা একটা নাম হয়, এইে ে একটা চলেকর নাম
হয় আর ওইটার মান িনেয় কাজ হয়। একই অব া porishima এর ে ও। উ ৃিত িচে র
িভতের থাকা porishima কথািট ব ফলেন এেসেছ িক উ ৃিতর বাইের থাকা porishima
কথািটর বদেল ওিটেক চলক ধরেল য মান পাওয়া যােব তা ফলেন এেসেছ।

৩.২ বেকর ব বহার (Using Constants)


একিট বৃে র ব াসাধ দয়া আেছ ৫ সিম, বৃ িটর ফল িনণেয়র জ িসিপিপেত একিট ম-
লখ (program) রচনা কেরা। তামার মেলখেত তুিম ব াসােধর জ একিট পূণক (integer)
ব বহার করেব। আর ফেলর জ থেম পূণক ব বহার কের দখেব কী হয়, তারপর ভ ক
(fraction) অথাৎ সচলিব সংখ া (floating-point number) বা float ব বহার করেব।
তুিম তা জােনা বৃে র ফল িহসাব করার জ আমােদর পাইেয়র মান লাগেব। আমরা ওইটা
সরাসির সংখ ায় না িদেয় একটা বক (constant) িহসােব ব বহার করেবা, কারণ পাইেয়র মান
তা কখেনা বদলােব না, সব সময় বক থাকেব। পাইেয়র মান যেহতু ভ ক আমােদর বকিট
তাই হেব float বক। চেলা আমরা এবার তাহেল মেলখিট দিখ।

িফিরি ৩.২: মেলখেত বেকর ব বহার (Constants in Programs)


#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

i n t main ( )
{
i n t bashardho = 5 ; / / এিট বৃে র ব াসােধর জ চলক

f l o a t const p a i = 3 . 1415 ; / / পাইেয়র মােনর জ বক

/ / নীেচ আমরা বৃে র ফেলর সূ িলখিছ


i n t k h e t r o f o l = p a i ∗ bashardho ∗ bashardho ;

/ / এবার আমরা পদায় ফলন দখােবা।


cout << " b r i t t e r k h e t r o f o l " << k h e t r o f o l
<< " borgo cm" << endl ;

ret ur n EXIT SUCCESS ;


}

ফলন (output)
b r i t t e r k h e t r o f o l 78 borgo cm

২২
৩.২. বেকর ব বহার (Using Constants)

তা হেয় গল আমােদর বৃে র ফল িনণেয়র মেলখ। এই রকম চলক (variable) আর


বক (constant) ব বহার না কেরই তুিম িক মেলখ িলখেত পারেত, তাই না! আমরা িক
সটা আেগর পােঠ এটা আেলাচনা কেরিছ। সে ে main() িবপাতেকর {} ব নী েটার মেধ
return EXIT SUCCESS; এর আেগ মা এক সািরেত cout << "britter khetrofol "
<< 3.1415 ∗ 5 ∗ 5 << " borgo cm" << endl; িলখেলই আমােদর কাজ হেয় যেতা।
িক আমরা সটা না কের কন চলক ব বহার করিছ সটাও ওই একই পােঠ আেলাচনা কেরিছ।
এবার আিস আমরা য মেলখিট িলখলাম সটার িব ািরত আেলাচনায়। আমরা #include
, using namespace, int main(), return ইত ািদ স েক ইত মেধ জেনিছ আেগর পাঠ-
েলা থেক, কােজই আমােদর আেলাচনা সীমাব থাকেব main() িবপাতেক আর যা যা িলেখিছ
সই িবষয় েলােত। তা চেলা আমরা এবার সািরর পের সাির ধের আেলাচনা কির।
উপের যমন বলা হেয়েছ, সই অ যায়ী আমরা থেম ব াসােধর জ একটা চলক িনেয়িছ
bashardho নােম যিট হেব int ধরেনর অথাৎ পূণক বা পূণ সংখ া। বৃে র ব াসাধ যিদ তামার
ভ ক হয়, তুিম চাইেল int ব বহার না কের float ব বহার করেত পােরা। আেগর পােঠর সােথ
এই পােঠ একটা িবষয় খয়াল কেরা, আমরা িক ব াসাধ bashardho চলেকর মান আলাদা
সািরেত না িদেয় যখােন চলক ঘাষনা (variable declare) কেরিছ সখােনই = িচ িদেয় মান
আেরাপ কেরিছ অথাৎ bashardho এর মান সরাসির 5 হেয় গেছ। এটােক বলা হয় চলেকর
আিদ মান আেরাপণ (initial value assignment)। এটা করার েটা িবধা: একটা হেলা
আমােদর ইটা আলাদা সািরেত ইবার িলখেত হেলা না, আেরকটা হেলা চলেক উ াপা া মান
থাকার কারেণ মেলখেয় ভুল িহসাব করার স াবনা কেম গল। জেন রােখা চলক ঘাষনার সােথ
সােথ কান মান না িদেয় না িদেলও ওখােন উ া পা া একটা মান থােক, কী মান থাকেব আমরা
িক কান ভােবই আেগ থেক সটা জািননা, পুরাই উ াপা া একটা মান হেত পাের সটা। আর
ভুল েম ওই চলেক যিদ পের আর মান আেরাপ (assign) করা না হয়, অথবা যিদ আেরাপ করার
আেগই অ কান িহসােব চলকিট ব বহার করা হয়, তাহেল স ত কারেণই উ াপা া মানিট
কােজ লািগেয় একটা উ াপা া ফলাফল আসেব, যটা আমরা কখেনাই চাই না।
ব াসােধর জ চলক নয়ার পের আমরা পাইেয়র মান রাখার জ একিট float const
ধরেনর বক নেবা যার নাম pai। পাইেয়র মান যেহতু ভ সংখ া আমােদর তাই float িনেত
হেব, আর পাইেয়র মান যেহতু সব সময় বক তাই আমরা float এর পের const িলেখ িদেত
চাই। তুিম যিদ const না িলেখা তাহেল িক এটা একটা চলেকর মেতা কাজ করেব।
i n t cholok = 15 ; / / একটা চলক ঘাষনা কের যার মান িদলাম 15
i n t const dhrubok = 20 ; / / একটা বক ঘাষনা করলাম মান 20

/ / এখন পয চলক cholok এর মান 15 , নীেচ নতুন মান দেবা 23


/ / আবার মান আেরাপ না করা পয cholok এর মান থাকেব 23

cholok = 23 ; / / এটা করা যােব

// এখন পয বক dhrubok এর মান 20 , নীেচ নতুন মান দেবা 25


// িক মেলখ সংকলন ( compile ) করার সময় আমরা িটবাতা পােবা।
// cpp . sh িদেয় সংকলন করেল িটবাতািট িন প হেত পাের
// e r r o r : assignment of read−only v a r i a b l e ' dhrubok '

dhrubok = 25 ; / / এটা করা যােব না , িট বাতা আসেব

২৩
৩.৩. চলক ঘাষনা (Variable Declarations)

উপেরর মেলখ ল কেরা। চলক আর বেকর মেধ তফাৎ হেলা চলেকর (variable)
মান ঘাষনার সময় একবার আেরাপ করা যায়, আর তারপেরও যতবার ই া ততবার নতুন নতুন
মান আেরাপ (assign) করা যায়। িক বেক (constant) একটা মান কবল ঘাষনা করার
সময় বেল দওয়া যায়, মেলখেত পের আর কাথাও ওই বেকর মান বদেল নতুন মান আেরাপ
(assign) করা যায় না। যিদ কেরা তাহেল সংকলক (compiler) িট বাতা (error message)
দখােব। তা আমরা যেহতু জািন য পাইেয়র মান সবসময় বক, এটার মান আমােদর কখেনা
বদল হেব না, আমরা তাই এটােক চলক িহসােব ঘাষনা না কের বক িহসােব ঘাষনা করেবা।
আশা করা যায় চলক আর বেকর পাথক পির ার হেয়েছ। এবার দেখা আমােদর বৃে র
ফেলর মেলখেত আমরা ফেলর জ khetrofol নােম একটা চলক িনেয়িছ, যার -
করণ হল int বা পূণক. যিদও আমরা জািন পাইেয়র মান ভ ক হওয়ার কারেণ আমােদর ফলাফল
আসেল একিট ভ ক হেব। এইটা আমরা মুলত পরী ামুলক করিছ। তা int নয়ার কারেণ আমরা
আমােদর মেলখেয়র ফলন দখেত পােবা 78 আসেল হওয়ার কথা 78.5375। এইটা কন হেলা
কারণ হেলা থেম 78.5375 িঠক মেতা িভতের িভতের িহসাব হেয় যােব, িক যখন khetrofol
চলেকর মেধ মানটা আেরাপ (assign) হেব তখন যেহতু পূণ সংখ া বেল ভ াংশটু ঢুকােনা যা-
ব না, তাই ওইটা বাদ পের যােব (truncation)। আর মান যটা আেরাপ হেব সটা হেলা বাঁকী
পূণাংশটু বা 78। তা ভ াংশ সহ সিঠক ফল পাওয়ার জ khetrofol এর সামেন int না
িলেখ float িলেখ দাও তাহেল দখেব িঠক িঠক 78.5375 ই ফলন িহসােব চেল আসেব।
উপেরর আেলাচনায় আমরা িতনটা ব াপার িশখলাম: ১) আমরা চলক (variable) না বক
(constant) ব বহার করেবা সটা; তারপর ২) ঘাষনা করার সােথ সােথ একটা আিদ মান িদেয়
দয়া যােক বলা হয় আিদ মান আেরাপণ (initial assignment), আর ৩) কান চলক বা বেকর
করণ কমন হেব, int না float হেব, পূণক না ভ ক হেব সটা আেগ থেক ধারনা করেত
পারেত হেব, আর সই অ যায়ী চলক বা বেকর কার বেল িদেত হেব, না হেল সিঠক ফলাফল
নাও পাওয়া যেত পাের, যমন 78.5375 এর বদেল 78 পাওয়া যেত পাের।

৩.৩ চলক ঘাষনা (Variable Declarations)


এই পােঠ িসিপিপেত একািধক চলক (variable) আমরা কী ভােব সহেজ ঘাষনা (declaration)
করেত পাির তা আেলাচনা করেবা। আমরা আেগ দেখিছ িতিট চলক আলাদা আলাদা কের, এম-
নিক আলাদা আলাদা সািরেত ঘাষনা করেত। তা িবধার জ আমরা চাইেল একািধক চলক
এক সািরেতই একটা িববৃিতেতই ঘাষনা করেত পাির, যিদ তােদর সকেলর উপা করণ (data
type) একই হয়, যমন ওই চলক েলার সবই যিদ int ধরেনর হয় অথবা float ধরেনর হয়।
উদাহরণ িদেয় ব াপার েলা পির ার করা যাক। ধেরা doirgho, prostho, porishima নােম
আমরা িতনিট চলক িনলাম, িতনটা চলেকর করণই int অথাৎ পূণক বা পূণসংখ া।
i n t doirgho ; / / দেঘ র জ চলক যা i n t ধরেনর অথাৎ পূণক
i n t prostho ; / / ে র জ চলক যা i n t ধরেনর অথাৎ পূণক
i n t porishima ; / / পিরসীমার জ চলক যা i n t ধরেনর অথাৎ পূণক

উপেরর িতনিট চলকই যেহতু int ধরেনর, কােজই আমরা ওই িতনিট চলকেক চাইেল একিট
িববৃিতেতই (statement) ঘাষনা করেত পাির। সে ে আমােদর int একবার িলখেত হেব,
আর চলক েলার নাম একটার পর একটা িবিত , (comma) িদেয় িলখেত হেব।
i n t doirgho , prostho , porishima ; / / সব েলাই i n t ধরেনর

২৪
৩.৪. আিদমান আেরাপণ (Initial Assignment)

এবার আর একিট উদাহরণ দিখ, যখােন বৃে র ব াসাধ আর ফল বর করেত হেব। তা


ব াসাধ যিদ int ধরেনর বা পূণক হয় আর ফল তা float ধরেনর বা ভ ক হেবই। কােজই
আমরা এ েটােক একটা িববৃিত (statement) িদেয় ঘাষনা করেত পারেবা না।
i n t bashardho ; / / ব াসােধর জ চলক i n t ধরেনর।
float khetrofol ; // ফেলর জ চলক f l o a t ধরেনর

িক যিদ porishima এর মেতা bashardho টাও float বা ভ ক ধরেনর হেতা তাহেল


আমরা এক িববৃিত িদেয়ই েটােক এক সােথ ঘাষনা করেত পারতাম।
f l o a t bashardho , k h e t r o f o l ; / / ব াসাধ ও ফেলর চলক

তাহেল একটা মেলখেতই (program) যিদ আমরা আয়েতর পিরসীমা আর বৃে র ফল


বর করেত চাই, আমরা দরকারী সব েলা চলক নীেচর মেতা কের ঘাষনা করেত পাির, যখােন
int চলক েলা একটা িববৃিতেত (statement) থাকেব আর float চলক েলা আলাদা আের-
কটা িববৃিতেত থাকেব। মেন রেখা আমরা িক এই পাঁচিট চলেকর েত কেক আলাদা আলাদা
িববৃিতেত িলখেতই পারতাম। এখােন আমরা সটা না করা িনেয়ই আেলাচনা করিছ।
i n t doirgho , prostho , porishima ; / / দঘ , , পিরসীমা
f l o a t bashardho , k h e t r o f o l ; / / ব াসাধ ও ফল

৩.৪ আিদমান আেরাপণ (Initial Assignment)


আেগর পােঠ আমরা একািধক চলক (variable) ঘাষনা (declaration) িনেয় আেলাচনা কের-
িছ। এখন আমরা এেদর আিদ মান (initial value) আেরাপ (assign) করার িদেক নজর দই।
আিদমান হল থমবােরর মেতা য মান িদেয় দওয়া হয় সই মানিট। ঘাষনা দয়ার পের চলেক
আলাদা কের আিদ মান আেরাপ করেত চাইেল আমরা নীেচর মেতা কের করেবা।
doirgho = 6 ;
prostho = 3 ;
bashardho = 5 ;

অথবা চাইেল এক িববৃিতেত এক সােথও করা স ব, িবিত , (comma) িদেয়।


doirgho = 6 , prostho = 3 , bashardho = 5 ;

আমরা িক চাইেল আিদমান েলা নীেচর মেতা ঘাষনার সােথ সােথই িদেত পারতাম।
i n t doirgho = 6 , prostho = 3 , porishima ;
f l o a t bashardho = 5 , k h e t r o f o l ;

ঘাষনার সােথ সােথ চলেকর আিদমান িদেল মেলখেয়র (program) দ তা অ একটু


বাড়েত পাের। কারণ ঘাষনার সােথ সােথ আিদমান না িদেলও একটা উ াপা া মান তা িভতের
িভতের দয়াই হয়, পের যখন আমরা আবার মান দই, তখন আেরকবার দওয়া হেলা, থমবােরই
দওয়া হেলা না। আর ঘাষনার সােথ সােথ আিদমান িদেল, একদম থমবােরই মানিট চলেক
দওয়া হেয় গেলা। বেকর ে িক আিদ ও একমা মান ঘাষনার সােথ সােথই িদেত হেব,
পের দয়ার কান েযাগ নাই, সংকলক (compiler) িট বাতা দখােব।

২৫
৩.৪. আিদমান আেরাপণ (Initial Assignment)

কান চলক ঘাষনার সােথ সােথ তােত কান আিদমান না িদেলও য উ াপা া মান থােক
সটা কত তা যিদ জানেতা চাও তেব পরী া কের দখেত পােরা। ধেরা তামার চলক doirgho।
এখন ঘাষনার পেরই cout << "doirgho holo " << doirgho << endl; িলেখ ম-
লখ সংকলন (compile) কের চািলেয় (run) দখেত পােরা। িক মেন রাখেব িতবার চালােল
য একই মান আসেব তার কান িন য়তা নাই, যিদ আেস সটা নহােয়ত কাকতাল।
আমরা আেগই জািন বৃে র ফল িনণেয়র জ আমােদর পাইেয়র মান দরকার হেব, যিট
একিট বক (constant) আর পাইেয়র মান আসেলই ভ ক বা float। িক float হওয়া সে ও
আমরা িক পাইেয়র জ pai নামক চলকিটেক bashardho আর khetrofol এর সােথ একই
িববৃিতেত ঘাষনা করেত পারেবা না। কারণ bashardho ও khetrofol হল চলক (variable)
যােদর মান পের যতবার ই া বদলােনা যােব আর pai হল বক (constant) যার মান একবার
দওয়ার পের আর বদলােনা যােব না। পাইেয়র মান তাই আলাদা কের ঘাষনা করেত হেব।
i n t doirgho = 6 , prostho = 3 , porishima ;
f l o a t bashardho = 5 , k h e t r o f o l ;
f l o a t const p a i = 3 . 1415 ; / / পাইেয়র মােনর জ বক

আমােদর যিদ একািধক float constant থােক স েলােক আবার এক িববৃিতেতই ঘা-
ষনা করেত পারেবা, যমন পাই আর িজ এর মান ঘাষনা করিছ নীেচ। তামরা জােনা িজ হল
মাধ াকষেনর রেণর মান, যা িনিদ ােন মাটামুিট একটা বক।
f l o a t const p a i = 3 . 1415 , g = 9 . 81 ;

পিরসীমা আর ফেলর জ আমােদর িলখেত হেব, স েলােক িবিত , (comma)


িদেয়ই এক িববৃিতেত লখা স ব, যমন নীেচ িলখলাম।
i n t doirgho = 6 , prostho = 3
i n t porishima = doirgho ∗ prostho ;
f l o a t bashardho = 5 ;
f l o a t k h e t r o f o l = p a i ∗ bashardho ∗ bashardho ;
f l o a t const p a i = 3 . 1415 ;

উপের যা িলখলাম তােত িক একটা িট আেছ, সংকলন (compile) করেত গেলই িট


ধরা পড়েব। িটিট হল আমরা pai ঘাষনা কেরিছ প ম িববৃিতেত, িক pai ব বহার কেরিছ চতুথ
িববৃিতেত khetrofol এর িলখেত িগেয়ই। কান চলক ঘাষনা করার আেগ সটা ব বহার করা
যােব না, সংকলক যখন চেল (run) তখন স এেক এেক িববৃিত েলা উপর থেক নীেচ আর বােম
থেক ডােন পড়েত থােক। তা কান চলক বা বক ঘাষনার আেগই যিদ তােদর ব বহারটা পেড়
ফেল যমন pai, তাহেল স বুঝেত পারেব না pai টা কী িজিনস, এইটা িক চলক নািক বক, এটা
িক int ধরেনর নািক float ধরেনর। আমােদর তাই ঘাষনা অব ই আেগ করেত হেব, ব বহার
করেত হেব পের। তা চেলা নীেচ আমরা িঠক কের পাইেয়র ঘাষণা আেগ িলিখ।
i n t doirgho = 6 , prostho = 3 ;
i n t porishima = doirgho ∗ prostho ;
f l o a t const p a i = 3 . 1415 ; / / ঘাষনা আেগ করা হেলা
f l o a t bashardho = 5 ;
f l o a t k h e t r o f o l = p a i ∗ bashardho ∗ bashardho ;

২৬
৩.৫. অ শীলনী সম া (Exercise Problems)

ল কেরা doirgho, prostho, bashardho এর জ িক উপেরর ওই িট ঘেট িন,


কারন ে ব বহােরর আেগই তা ও েলা ঘাষনা হেয়েছ, যিদও একই সািরেত িক বােমর িব-
ষয় েলা যেহতু ডােনর েলার থেক আেগ, তাই ঘাষনা আেগই হেয়েছ। আমরা অব উপেরর
মেতা কের ও একই িববৃিতেত না িদেত বলেবা। তােত পড়ারও িবধা হয়, আবার আেগ িলখেবা
না পের িলখেবা সই সম াও র হয়। তাহেল পুেরা ব াপারিট দাঁড়াে নীেচর মেতা:
i n t doirgho = 6 , prostho = 3 , porishima ;
f l o a t const p a i = 3 . 1415 ;
f l o a t bashardho = 5 , k h e t r o f o l ;

porishima = doirgho ∗ prostho ;


k h e t r o f o l = p a i ∗ bashardho ∗ bashardho ;

৩.৫ অ শীলনী সম া (Exercise Problems)


ধারণাগত : নীেচ িকছু ধারণাগত রেয়েছ। েলার উ র িনেজ িনেজ বর করেব।

১. মেলখেত (program) চলক ও বক কন ব বহার করা হয়? কারণ েলা উে খ কেরা।

২. মেলখেত (program) চলক ঘাষনা বলেত কী বুঝ, যথাযথ উদাহরণ িদেয় দখাও।

৩. চলেক (variable) মান আেরাপণ (value assign) বলেত কী বুঝ? ব াখ া কেরা।

৪. কখন তুিম চলক (variable) ব বহার না কের বক (constant) ব বহার করেব?

৫. িসিপিপেত কী ভােব চলক ও বক ঘাষনা করেত হয়। যথাযথ উদাহরণ িদেয় দখাও।

৬. িসিপিপেত কী ভােব পূণক ও ভ ক ধরেনর চলক ঘাষনা করেত হয় উদাহরণ িদেয় দখাও।

৭. িসিপিপেত এক সািরেত কখন একািধক চলক ঘাষনা করা যায়? উদাহরণ িদেয় দখাও।

৮. চলেক (variable) আিদমান আেরাপণ (initial value assignment) কী?

৯. চলেক (variable) আিদমান আেরাপণ না করেল স াব কী ফলাফল ঘটেত পাের?

১০. বেক (constant) কন আিদমান আেরাপ করেত হয়, িক পের আেরাপ করা যায় না?

১১. ফলাফল ভ ক (float) িক int ধরেনর পূণক চলেক আেরাপ করেল কী ঘেট?

পিরগণনার সম া: নীেচ আমরা িকছু পিরগণনার সম া দখেবা। এই সম া েলা আেগ ধয


ধের িনেজ িনেজ সমাধান করেত চ া করেব। যখন এেকবােরই পারেছা না বেল মেন হয় তখনই
কবল সমাধান দেখ িনেত পােরা। সমাধান েলা পিরগণনার েলার শেষ আেছ।

১. এমন একিট মেলখ রচনা কেরা যিট িট পূণক int ধরেনর, আর একিট ভ ক float
ধরেনর চলক ঘাষনা কের। মেলখিট তারপর চলক িতনিটর মান যথা েম 10, 15, 12.6
আেরাপণ কের। পিরেশেষ মেলখিট চলক েলার মান পদায় দখায়।

২৭
৩.৫. অ শীলনী সম া (Exercise Problems)

২. ধেরা েটা পূণ সংখ া 89 আর 56। এই িটেক তুিম েটা চলেক িনেব, আর তারপর ইিট
চলেক তােদর যাগফল, িবেয়াগফল িনণয় করেব। সবেশেষ সব েলা চলেকর মান ফলেন
দখােব। সব িমিলেয় একিট মেলখ রচনা কেরা।
৩. যিদ তাপমা া সলিসয়ােস c িড ী হয় আর ফােরনহাইেট হয় f িড ী, তাহেল আমরা
িলখেত পাির f = 9c/5+32। ধেরা তাপমা া 30 িড ী সলিসয়াস, তাহেল ফােরনহাইেট
এিট কত হেব? তামার মেলখেত তুিম ভ ক float ধরেনর চলক ব বহার করেব।
৪. যিদ তাপমা া ফােরনহাইেট হয় f িড ী আর সলিসয়ােস হয় c িড ী, তাহেল আমরা
িলখেত পাির c = 5(f − 32)/9। ধেরা তাপমা া 76 িড ী ফােরনহাইট, তাহেল
সলিসয়ােস এিট কত হেব? তামার মেলখেত তুিম ভ ক float ধরেনর চলক ব বহার
করেব।
৫. ধেরা একটা কাজ করেত তামার 7 ঘ টা 15 িমিনট 39 সেক ড লেগেছ। এই সময়েক
সেকে ড পা র কেরা। তামার মেলখেত তুিম 60 সেকে ড এক িমিনট আর 60 িমিনেট
এক ঘ টা এই িট িবষয় বুঝােনার জ েটা বক ব বহার করেব।

পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।

১. এমন একিট মেলখ রচনা কেরা যিট িট পূণক int ধরেনর, আর একিট ভ ক float
ধরেনর চলক ঘাষনা কের। মেলখিট তারপর চলক িতনিটর মান যথা েম 10, 15, 12.6
আেরাপণ কের। পিরেশেষ মেলখিট চলক েলার মান পদায় দখায়।
িফিরি ৩.৩: চলক ঘাষনার মেলখ (Program Declaring Variables)
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

i n t main ( )
{
i n t purnok1 , purnok2 ; / / পূণক িট এক সােথ ঘাষনা
f l o a t vognok ; / / ভ কিট আলাদা ঘাষনা

purnok1 = 10 , purnok2 = 15 ; / / পূণেক মান আেরাপণ


vognok = 12 . 6 ; / / ভ েক মান আেরাপণ

cout << " purnok d u t i " ; / / এখােন endl দই নাই


cout << purnok1 << " " << purnok2 << endl ;
cout << " vognok holo " << vognok << endl ;

ret u rn EXIT SUCCESS ; // সফল সমাি


}

২৮
৩.৫. অ শীলনী সম া (Exercise Problems)

ফলন (output)
purnok d u t i 10 15
vognok holo 12 . 6

২. ধেরা েটা পূণ সংখ া 89 আর 56। এই িটেক তুিম েটা চলেক িনেব, আর তারপর ইিট
চলেক তােদর যাগফল, িবেয়াগফল িনণয় করেব। সবেশেষ সব েলা চলেকর মান ফলেন
দখােব। সব িমিলেয় একিট মেলখ রচনা কেরা।
আমরা এই মেলখেত কবল দরকারী অংশটু দখাি । ধের িনি য তুিম দরকারী
িশর নিথ (header) অ ভু করা, নামাধার std ব বহার, main িবপাতক লখা ও মান
ফরত দয়া ইত মেধ ভােলা কের িশেখ ফেলেছা। তা তুিম যিদ সিত নীেচর লখা -
মেলখাংশ সংকলন কের চালােত চাও, তামােক িক আেগ include, namespace,
main, return ওই েলা িলেখ িনেত হেব, তারপর main িবপাতেকর িভতের return
এর আেগ তুিম আমােদর নীেচর অংশ েলা িলেখ িনেব। তারপর সংকলন কের মেলখ
চালােব।
িফিরি ৩.৪: পািটগিণেতর অণুি য়ার মেলখ (Arithmetic Program)
i n t prothom = 89 , d i t i y o = 56 ;

i n t j o g f o l = prothom + d i t i y o ;
i n t b i y o g f o l = prothom − d i t i y o ;

cout << " prothom holo " << prothom ;


cout << " d i t i y o holo " << d i t i y o ;
cout << endl ;

cout << " j o g f o l holo " << j o g f o l ;


cout << " b i y o g f o l holo " << b i y o g f o l ;
cout << endl ;

৩. যিদ তাপমা া সলিসয়ােস c িড ী হয় আর ফােরনহাইেট হয় f িড ী, তাহেল আমরা


িলখেত পাির f = 9c/5+32। ধেরা তাপমা া 30 িড ী সলিসয়াস, তাহেল ফােরনহাইেট
এিট কত হেব? তামার মেলখেত তুিম ভ ক float ধরেনর চলক ব বহার করেব।
ধের িনি থম সম ার সমাধান দেখ তুিম মেলখেয়র কাঠােমা দাঁড় করেত পারেব।
িফিরি ৩.৫: সলিসয়াস থেক ফােরনহাইেট পা র (Celcius to Fahrenheit)
f l o a t c = 30 , f = 9 ∗ c / 5 + 32 ;

৪. যিদ তাপমা া ফােরনহাইেট হয় f িড ী আর সলিসয়ােস হয় c িড ী, তাহেল আমরা


িলখেত পাির c = 5(f − 32)/9। ধেরা তাপমা া 76 িড ী ফােরনহাইট, তাহেল
সলিসয়ােস এিট কত হেব? তামার মেলখেত তুিম ভ ক f loat ধরেনর চলক ব বহার
করেব।
ধের িনি থম সম ার সমাধান দেখ তুিম মেলখেয়র কাঠােমা দাঁড় করেত পারেব।

২৯
৩.৬. গণনা পিরভাষা (Computing Terminologies)

িফিরি ৩.৬: ফােরনহাইট থেক সলিসয়ােস পা র (Fahrenheit to Celcius)


f l o a t f = 76 , c = 5∗ ( f − 32) / 9 ;

৫. ধেরা একটা কাজ করেত তামার 7 ঘ টা 15 িমিনট 39 সেক ড লেগেছ। এই সময়েক


সেকে ড পা র কেরা। তামার মেলখেত তুিম 60 সেকে ড এক িমিনট আর 60 িমিনেট
এক ঘ টা এই িট িবষয় বুঝােনার জ েটা বক ব বহার করেব।
ধের িনি থম সম ার সমাধান দেখ তুিম মেলখেয়র কাঠােমা দাঁড় করেত পারেব।

িফিরি ৩.৭: সময়েক সেকে ড পা র (Convert Time to Seconds)


i n t ghonta = 7 , m i n i t = 15 , sekend = 39 ;
i n t const g h o n t a i M i ni t = 60 , miniteSekend = 60 ;

i n t motMin = ghonta ∗ g h o n ta i M i n i t + m i n i t ;
i n t motSek = motMin ∗ miniteSekend + sekend ;

৩.৬ গণনা পিরভাষা (Computing Terminologies)


• আিদ মান (initial value) • ভ ক (fraction)

• আেরাপণ (assign) • মান (value)

• ঘাষনা (declaration) • মান আেরাপণ (value assign)

• চলক (variable) • সচলিব (floating-point)

• বক (constant) • চলক ঘাষণা (var declaration)

৩০
অধ ায় ৪

শনা েকর নামকরণ


(Naming Identifiers)

নােম কী আেস যায় কেম পিরচয়। আপনার কাজই িনধারণ কের দেব আপনার পিরচয়। আপনার
নাম পিরচয় হেব আপনার কােজর কারেণই। মেলখ (program) িলখেত িগেয় আমরা তাই
চলক (variable), বক (constant), িবপাতক (function) সহ য কান িকছুর নাম দই
তােদর কী কােজ লাগােনা হেব সটা মাথায় রেখ।

৪.১ গিঠত নাম (Well-formed Names)

িসিপিপেত চলক ও বেকর ব বহার তুিম ইত মেধ িশেখ ফেলেছা। আর চলেকর নাম কী রকম
িদেত হেব সটাও আেগ একটু জেনেছা। এখন আমরা িব ািরত ভােব িশখব িসিপিপেত কী ভা-
ব চলক বা বেকর নাম িদেত হয়, িবেশষ কের নােমর গঠনরীিত (syntax) কমন অথাৎ না-
ম কী রকম অ র থাকেত পারেব অথবা পারেব না। আমরা আপাতত কবল main িবপাতক
(function) িনেয় কাজ করিছ। িক ভিব েত আমরা যখন িনেজেদর জ নানান িবপাতক তরী
করেবা, তখন িবপাতেকর নামকরেণর জে ও চলক বা বেকর নাম তরীর িনয়ম েলাই কােজ
লাগেব। চলক বা বক বা িবপাতক যাইেহাক নাম ক বলা হয় শনা ক (identifier)।
িসিপিপেত কান শনা েকর (identifier) নােম কবল ১) ইংেরজী বণমালার বড় হােতর
অ র A-Z, ২) ইংেরজী বণমালার ছাট হােতর অ র a-z, ৩) ইংেরজী অংক 0-9 আর ৪) িন দাগ
(underscore) থাকেত পারেব। তেব শনা েকর নােমর থম অ র আবার অংক 0-9 হেত
পারেব না, থম অ র ছাড়া অ য কান অ র িহসােব অংক েলা ব বহার করা যােব। তরাং
বাঝাই যাে থম অ র য কান বণ A-Z বা a-z অথবা িন দাগ (underscore) হেত পা-
রেব। আর তারপেরর য কান অ র বণ বা অংক বা িন দাগ হেত পারেব। িসিপিপেত শনা েকর
নােমর দঘ িনেয় কান িবিধিনেষধ নই তেব মেলখ (program) সংকলেন (compile) কী
সংকলক ব বহার করা হে তার ওপর এটা িনভর করেত পাের। cpp.sh িদেয় সংকলন করেল
কান িবিধ িনেষধ নই, মাইে াসফট c++ িদেয় সংকলন করেল ২০৪৮ অ র পয হেত পাের।
যাইেহাক আমরা এখােন গঠনরীিত অ যায়ী বধ ও অৈবধ িকছু নাম দখেবা।

৩১
৪.২. অথেবাধক নাম (Meaningful Names)

অৈবধনাম কারণ
12 নােমর সব েলার অ র অংক হেত পারেব না
12cholok নােমর থম অ র অংক হেত পারেব না
amar cholok নােমর মাঝখােন কান ফাঁকা (space) থাকেত পারেব না
ama;cho+k বণ, অংক, িন দাগ ছাড়া অ কান তীক থাকেত পারেব না
মেলখেত (program) অৈবধনাম ব বহার করেল কী হয়? কের দেখা কী হয়! সংকলক
(compiler) িটবাতা (error message) িদেব, আর তামােক নামিট িঠক করেত হেব। তাহ-
ল এখন থেক তামার মেলখেত নাম দওয়ার সময় নােমর এই গঠনরীিত েলা মেন চলেব।
বধনাম কারণ
p একটাই অ র সিট ছাট হােতর বণ
P একটাই অ র সট বড় হােতর বণ
abc িতনটা অ র সব ছাট হােতর বণ
ABC িতনটা অ র সব বড় হােতর বণ
Abc িতনটা অ র ছাটহােতর বড়হােতর িমশােনা
bAc িতনটা অ র ছাটহােতর বড়হােতর িমশােনা
a1bc িতনটা ছাটহােতর অ র ও একটা অংক, অংকিট েত নয়
a1Bc িতনটা ছাটবড় হােতর অ র ও একটা অংক যিট েত নয়
a bc িতনটা ছাটহােতর অ র ও একিট িন দাগ
abc িতনটা ছাট হােতর অ র ও িতনিট িন দাগ
Abc িতনটা ছাটবড় হােতর অ র ও িতনিট িন দাগ
amar cholok ছাটহােতর অ র ও িন দাগ, নামিট অিধক বাধগম
amar Cholok ছাটবড় হােতর অ র ও িন দাগ, অিধক বাধগম
amarCholok123 ছাটবড় হােতর অ র, িন দাগ, ও অংক যিট েত নয়
amar125cholok ছাটহােতর অ র ও অংক, অংকিট েত নয়।

৪.২ অথেবাধক নাম (Meaningful Names)


িসিপিপেত শনা েকর (identifier) নাম কমন হেত পাের আর কমন হেত পাের না, আমরা তা
আেগর পােঠ দেখিছ। এই পােঠ আমরা দখেবা নােমর অথেবাধকতা (semantic)। আমরা যখন
কান নাম দেবা, তখন নামিট অব ই অথবহ হওয়া চাই। আমরা আেগর একিট পােঠ অ একটু
আেলাচনা কেরিছ নােমর অথেবাধকতা িনেয়। এখন আেরা িব ািরত আেলাচনা করিছ নাম েলা
কমন হেল ভােলা হয় স স েক। চলক (variable) বা বক (constant) বা িবপাতেকর
(function) নাম সবসময় তার কাজ ও ব বহােরর িদেক খয়াল রেখ অথেবাধক হওয়া উিচৎ।
অথেবাধক না হেল মেলখ (program) বাঝা আমােদর জ কিঠন হেয় যায়।
অেনেক অিতির আ েহ য ত িনেজর নােম বা ি য় কােরা নােম শনা েকর নামকরণ কের
থােক যমন gonimia1, gonimia2, ইত ািদ। তা এই চলক েটার একটা যিদ ব াসােধর জ
আেরকটা যিদ ফেলর জ ব বহার করা হয়, তাহেল চলেকর নাম থেক মােটও বুঝা যােব
না কান নামিট কী কােজ ব ব ত হে । ব াসােধর জ বরং radius বা bashardho অথবা
িনেদনপে r বা b ব বহার করা যেত পাের। এক অ েরর নাম দয়া অেনেক পছ কের, কারণ
তাড়াতািড় লখা যায়, িক একই আদ া র যু একািধক চলক থাকেল তখন মুশিকল হেয় যায়।
সে ে ওই অ েরর সােথ আেরা অ র লািগেয় অথবা সংখ া লািগেয় িতিট নামেক আলাদা
করেত হেব, যােত অ ত বুঝা যায় কান চলকিট কী উে ে ব বহার করা হেয়েছ।

৩২
৪.৩. িলিপ সংেবদনশীলতা (Case Sensitivity)

আমরা যিদ েটা বৃ িনেয় কাজ কির তাহেল তােদর ব াসােধর জ িট চলক হেতই পাের
bashardho1 আর bashardho2 তােত কান সম া নাই। ব াপারটা দীপু ন র ২ চলি ে র
মেতা, একজেনর নাম দীপু ন র ১ আর একজন দীপু ন র ২। অথবা কউ চাইেল নাম িদেত
পাের bashardhoA আর bashardhoB। এভােব একই ধরেনর কােজ ব বহার হেব এরকম
অেনক েলা চলক লাগেল আমরা সংখ া লািগেয় বা বণ লািগেয় আলাদা আলাদা নাম তরী কের
িনেবা। এর জ অব সাজন (array) নােম আলাদা একটা ধারণা আেছ, যটা আমরা পের
জানেবা। সাজন ব বহার কের আমরা সংখ া লািগেয় যত ই া তত েলা একই ধরেনর নাম পাই।
অেনেক অিতির অলস হেয় অথবা য কান কারেণ শনা েকর নাম করণ করেত থােক a, b, c
, p, q, r , i , j , k, x, y, z ইত ািদ এেকর পর এক অ র িদেয়। এটা একটা খুবই বােজ
অভ াস। এইরকম শনা ক মােটও অথেবাধক নয়। এ েলা থেক বুঝার কান উপায় নই কান
চলকিট িঠক কী কােজ ব বহার করা হে । সবসময় এরকম নামকরণ থেক ের থাকেব।
এখােন করেত পােরা: নামকরেণ িক সবসময় একটা মা শ ই ব বহার করেবা? এেকর
অিধক শ ব বহার করেবা না? উ র হে অথেবাধক করার জ তুিম দরকার মেতা একািধক
শ অব ই ব বহার করেব, এইটা খুবই ভােলা অভ াস। আর সে ে যােত িতিট শ খুব
সহেজ বাঝা যায় স জ তামার িকছু কৗশল অবল ন করেত হেব। একটা কৗশল হেলা িট
শে র মােঝ একিট িন দাগ দওয়া যমন amar cholok। আেরকিট কৗশল হল িতিট শে র
থম অ রিট বড়হােতর দওয়া আর অ েলা ছাট হােতর, যমন AmarCholok তেব চাইেল
একদম থম শে র থম অ রিট ছাটহােতরও রাখেত পােরা যমন amarCholok। নীেচর
সারণীেত আমরা িকছু অথেবাধক নােমর উদাহরণ দখেবা।
নাম যেথাপযু তার কারণ
sum যাগফেলর জ sum চলেকর ইংেরজী নাম
jogfol যাগফেলর জ jogfol চলেকর বাংলা নাম
bijor songkhar jogfol িন দাগ িদেয় অথেবাধক শ আলাদা হেয়েছ
odd number sum িন দাগ িদেয় অথেবাধক শ আলাদা হেয়েছ
Bijor Shongkhar Jogfol িন দাগ িদেয় আলাদা, বড়হােতর আদ া র
BijorShongkharJogfol বড়হােতর থম অ র িদেয় আলাদা আলাদা
bijorShongkharJogfol এিট অেনক চিলত ও অেনেকরই পছে র

৪.৩ িলিপ সংেবদনশীলতা (Case Sensitivity)


িসিপিপ ভাষা একিট িলিপ সংেবদনশীল (case sensitive) ভাষা। এই কথার অথ কী? িসিপিপেত
বড়হােতর ছাটহােতর অ র িক িভ িভ ধরা হয়, নািক ইংেরজীর মেতা একই ধরা হয়?
barek i s going home
BAREK I S GOING HOME
Barek I s Going Home

আেগর কেয়কিট পােঠ চলক (variable) বা বক (constant) বা িবপাতেকর (function)


নাম, এককথায় শনা েকর (identifier) নামকরণ িনেয় আমরা আেলাচনা কেরিছ। নামকরেণর
িনয়ম েলা আেলাচনা করার সময় দেখিছ য কান শনা েকর নামকরেণ আমরা চাইেল বড়হা-
তর বণ A-Z, ছাটহােতর বণ a-z, অংক 0-9, আর িন দাগ ব বহার করেত পারেবা। একই না-
ম বড়হােতর ছাটহােতর অ র িমিশেয়ও নামকরণ করেত পারেবা। এমতাব ায় হে কান
নাম ই ামেতা একবার বড়হােতর অ ের অথবা ছাট হােতর অ ের অথবা আেরকবার িকছু অ র

৩৩
৪.৪. সংরি ত ও চািব শ (Reserved & Key Words)

ছাটহােতর িকছু অ র বড় হােতর এইভােব িলখেত পারেবা িকনা। িবেশষ কের আমরা জািন ইং-
রজীেত আিম ছাট হােতরই িলিখ আর বড় হােতরই িলিখ শ টা আসেল একই থােক, িসিপিপেতও
িক তাই? আমরা বরং উদাহরণ িদেয় ব াপারটা দিখ। ইংেরজীেত ছাট হােতর বড় হােতর অ র
আলাদা হেলও ও েলা কবলই সৗ যবধন মুলক। উপেরর িতনেট ইংেরজী বাক তাই একই।
এবার আমরা িসিপিপ ভাষায় ছাট হােতর বড় হােতর অ েরর ব বহার দিখ। নীেচর নাম -
লার ত েকিট িসিপিপ ভাষায় আলাদা আলাদা নাম িহসােব ধরা হেব।
amarcholok , amarCholok , AmarCholok , amar cholok ,
Amar Cholok , amarChoLok , AmarChOlOk

িসিপিপেত উপেরর একটা নাম িদেয় য চলক বা বক বা িবপাতকেক বুঝােনা হেব অ নাম
িদেয় ওইটােক বুঝােনা যােব না, বরং অ একটা বুঝােনা হেয় যােব। মাট কথা েটা নােমর একটা
অ েরও যিদ এিদক সিদক থােক তাহেল নাম েটা আসেল আলাদা। েটােক একই িজিনেসর নাম
িহসােব ধের নয়া যােব না। তরাং মেলখ (program) লখার সময় খয়াল রাখেব যােত একটা
চলকেক বুঝােত িগেয় কবল বড়হােতর ছাটহােতর বেণর িভ তার কারেণ আেরকটােক বুিঝেয় না
ফেলা, তােত সব ভজঘট লেগ যােব। তামার মেলখও উ াপা া ফলাফল িদেব। আবার ধেরা
তামার একটাই চলক যার নাম amarcholok, িক পের তুিম িলেখেছা amarCholok। এই
অব ায় সংকলন (compile) করেল তামােক "amarCholok is not declared" এইরকম
িটবাতা (error message) িদেব। তামােক তখন amarCholok এর বদেল amarcholok
িলেখ িঠক করেত হেব। মেলখ তরীর সময় আমরা ায়শই এইরকম ভুল কের থািক।
উপেরর এই িনয়ম জানার পের তুিম হয়েতা মেন করেব এইটা তা ভােলাই। আমার যিদ
ইটা বৃে র ব াসােধর জ চলক লােগ একটার নাম িদেবা bashardho আর একটার নাম িদেবা
Bashardho। াঁ, তুিম সটা িদেতই পােরা। িসিপিপ যেহতু ইটােক আলাদা আলাদা চলক
িহসােব ধের িনেব, তাই এই েটা হেলা েটা বধ আলাদা নাম। তেব অথেবাধকতার িদক ভেব
তুিম হয়েতা এরকম নাম করণ থেক দূের থাকার চ া করেব। একটা অ র বড় বা ছাটহােতর
কবল এই অ একটুখািন িভ তা িদেয় আসেল তমন বশী অথেবাধক পাথক তরী করা যায় না,
ফেল মেলখ (program) পড়া কিঠন হয়। আর একটা ব াপার: চলেকর নামকরেণ বড়হােতর
ছাটহােতর অ র িমশােত তা পােরাই যমন AmarCholok, িক এমন ভােব িমিশও না য
পড়াটা খুব কিঠন হেয় যায়, যমন AmArChOlOk, এই রকম নাম চট কের পড়া আসেল স ব
না, বরং এইরকম নাম য নাদায়ক। কােজই সবিমিলেয় সহজ ও র নাম িদেব, কমন!

৪.৪ সংরি ত ও চািব শ (Reserved & Key Words)


সংরি ত শ (reserved word) বা চািব শ (key word) কী? আিম িক চলক (variable),
বক (constant) বা িবপাতেকর (function) এর শনা ক (identifier) িহসােব সংরি ত
শ বা চািব শ ব বহার করেত পারেবা? িসিপিপেত সংরি ত শ বা চািব শ কান েলা?
সংরি ত শ িবষেয় আেলাচনার আেগ আমরা একটা গ বেল নই। এক বািড়েত থােক
জামাই-বউ আর তােদর সােথ থােক বড় টুম অথাৎ বউেয়র ভাই বা জামাইেয়র ালক। তা
সই ালেকর নাম হল লাল। একিদন জামাই বচারা তার বউেয়র ক লাঘব করার জ একজন
কােজর ছেল িনেয় আেস। বউ িজে স কের "এই ছেল তামার নাম কী?" কােজর ছেল বেল তার
নাম লাল। বউ তখন জামাইেক বেল ছেলিটর নাম বদলােত হেব। জামাই অবাক, অবাক কােজর
ছেলিটও। তার নাম লাল, ভােলাই তা নামিট, সটা বদলােত হেব কন। বউ জামাইেক বকেত
থােক "তুিম জােনা না আমার ভাই অথাৎ তামার ালেকর নাম লাল"। য বাসায় ালেকর

৩৪
৪.৪. সংরি ত ও চািব শ (Reserved & Key Words)

নাম লাল, সই বাসার কােজর ছেলর নাম লাল হয় কমেন, ালক হেলা বড় টুম, তার
কী এত বড় অস ান করা যায়! আর জামাইেয়র নাম হেলা কােদর। তা বউ আেরা এক কািঠ
বািড়েয় বলেত থােক িঠক আেছ কােজর ছেলর নাম বদেল কােদর রাখা হউক, দিখ জামাইেয়র
কমন লােগ। তারপর জামাইেয়র সামেনই কােজর ছেলেক বেল "এই এখন থেক তার নাম
িদলাম কােদর।" তারপর হঁেড় গলায় ডাকেত থােক "কােদর, এই কােদর, এই িদেক আয়।"
কমন একটা বড়ােছড়া অব া। শষ পয িঠক হয় এক বাসায় ইটা লাল তা হেত পােরনা,
একজেনর নাম বদলােত হেব। আর বাসার বড় টুেমর নাম তা আর বদলােনা যােব না কান
ভােবই, ওটা সংরি ত নাম, কােজই বদলােত হেব কােজর ছেলর নাম। তরাং কােজর ছেলর
নাম দয়া হয় লাল া। তাহেল ালেকর নাম লাল, আর কােজর ছেলর নাম লাল া।
িসিপিপ ভাষায় গঠন কাঠােমা িঠক রাখার জ িকছু িনিদ শ আেছ। আমরা ইত মেধ
এরকম িকছু শ ব বহার কেরিছ। যমন return, int , float। এই শ েলার অথ িসিপিপ
ভাষােত আেগ থেক িনিদ , যমন return মােন যখন িবপাতক (function) শষ হয়, int আর
float হল চলেকর মান কমন পূণক বা পূণ সংখ া না ভ ক বা ভ সংখ া এইরকম। এই িতনিট
ছাড়াও আেরা অেনক েলা এই রকম শ আেছ। এই শ েলা চাইেল আমরা িনেজরা আমােদর
চলক বা বক বা িবপাতেকর নাম িহসােব ব বহার করেত পারেবা না। এই েলা হে সংরি ত
শ (reserved word)। এই শ েলােক অ কথায় চািব শ ও (key word) বলা হয়।
তাহেল তামার মেলখেত তুিম এই প সংরি ত শ বা চািব শ শনা েকর (identifier) নাম
িহসােব ব বহার করেব না। কারণ ও েলা বড় টুম লােলর নােমর মেতা। যিদ একা ই দরকার
হয় তাহেল লাল ক লাল া বানােনার মেতা িকছু যাগ-িবেয়াগ কের িভ শ বািনেয় ব বহার
করেব। যমন return না ব বহার কের returnValue ব বহার করেল, এইরকম। নীেচ আমরা
িসিপিপর সংরি ত শ েলার তািলকা িদি ।

• সংগিঠত পিরগণনায় (structured programming) ব ব ত শ :


break, case, char, const, continue, default, do, double, else,
enum, extern, float, for, goto, if , int , long, register, short,
signed, sizeof, static , struct, switch, typedef, union, unsigned,
return, void, volatile , while

• ব মুখী (object-oriented) পিরগণনায় ব ব ত শ :


class , explicit , delete, friend, inline , mutable, namespace,
new, opeator, private, protected, public, this , using, virtual

• িট সামলােনার (error handling) জ শ :


catch, noexcept, throw, try

• যুি ও িবট িত অণুি য়ার (logical and bit-wise operators) শ :


bool, and, and eq, bitand, bitor , compl, false, not, not eq,
or, or eq, true, xor, xor eq

• উপা করণ (data type) সং া শ :


auto, const cast, decltype, nullptr , dynamic cast,
reinterpret cast, static cast , typeid

• ছাঁচ (template) সং া শ :
export, template, typename

৩৫
৪.৫. অ শীলনী সম া (Exercise Problems)

• সংকলন সমেয় (compile-time) ব ব ত হওয়া শ :


static assert , constexpr

• পূব ি য়েকর (preprocessor) জ শ :


if , elif , else, endif, defined, ifdef , ifndef, define, undef,
include, line , error, pragma

• িবিভ আকােরর অ েরর জ শ : char16 t, char32 t, wchar t

• িবিবধ শ : alignas, alignof, asm, concept, requires, thread local

৪.৫ অ শীলনী সম া (Exercise Problems)


ধারণাগত : নীেচ িকছু ধারণাগত রেয়েছ। েলার উ র িনেজ িনেজ বর করেব।

১. শনা ক (identifier) কী? মেলখেত শনা েকর ভুিমকা কী?

২. িসিপিপেত শনা েকর (identifier) নাম করেণর িনয়মাবলী বণনা কেরা।

৩. মেলখেত (program) গঠনগত ভােব অৈবধ নাম ব বহার করেল কী ঘেট?

৪. অথেবাধক নাম কী? মেলখেত অথেবাধক নাম ব বহার করা উিচৎ কন?

৫. িসিপিপ একিট িলিপ সংেবদনশীল (case sensitive) ভাষা, এর মােন কী ?

৬. সংরি ত ও চািব শ কী? এ েলা কন শনা ক িহসােব ব বহার করা যায় না?

চচামুলক : নীেচর শ েলা গঠনগত (syntactically) ভােব শনা েকর (identifier)


নাম িহসােব বধ নািক অৈবধ? যিদ বধ হয় তাহেল অথেবাধক (meaningful) নািক অথেবাধক
নয়? অথবা কান শ িক সংরি ত বা চািব শ (reserved or key word)? থেম িনেজ
িনেজ উ র বর করার চ া করেব, একা না পারেল নীেচর সমাধান দখেব।

১. void ৯. xyz123 ১৭. mutable

২. MAX−ENTRIES ১০. part#2 ১৮. max?out

৩. double ১১. "char" ১৯. Name

৪. time ১২. #include ২০. name

৫. G ১৩. a long−one ২১. name 1

৬. Sue's ১৪. xyz ২২. Int

৭. return ১৫. 9xyz ২৩. INT

৮. cout ১৬. main ২৪. SUM

৩৬
৪.৫. অ শীলনী সম া (Exercise Problems)

২৫. sum of numbers ২৮. printf ৩১. $sum

২৬. firstName ২৯. int ৩২. numˆ2

২৭. Identifier ৩০. pow ৩৩. num 1

চচামুলক উ র: উপেরর েলার উ র এখােন দয়া হে । থেম িনেজ িনেজ উ র বর


করার চ া করেব, একা না পারেল এই সমাধান দখেব।

১. void : সংরি ত শ , কান কােররই না এমন বুঝােনা হয়

২. MAX−ENTRIES : বধ শনা ক, অথেবাধক

৩. double : সংরি ত শ , বড় আকােরর ভ েকর জ

৪. time : বধ শনা ক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ

৫. G : বধ শনা ক, িক অথ বুঝা যাে না, যিদ না পািরপাি কতা পির ার থােক

৬. Sue's : অৈবধ শনা ক কারণ নােম ' ব বহার করা যায় না

৭. return : সংরি ত শ , িবপাতক থেক ফরত গমন

৮. cout : বধ শনা ক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ

৯. xyz123 : বধ শনা ক, িক অথেবাধক িকনা পির ার না

১০. part#2 : অৈবধ শনা ক কারণ নােম # ব বহার করা যায় না

১১. "char" : অৈবধ শনা ক কারণ নােম " ব বহার করা যায় না

১২. #include : পূব- ি য়েকর (preprocessor) জ সংরি ত শ

১৩. a long−one : বধ শনা ক, িক অথ সই ভােব পির ার নয়।

১৪. xyz : বধ শনা ক, িক অথ সই ভােব পির ার নয়

১৫. 9xyz : অৈবধ শনা ক, নােমর েত অ থাকেত পাের না, পের থাকেত পাের

১৬. main : সংরি ত শ নয়, িক পিরত াজ কারণ এিট েত ক মেলখেতই থােক

১৭. mutable : সংরি ত শ , কান বক ও িবেশষ অব ায় পিরবতন যাগ হেল

১৮. max?out : অৈবধ শনা ক, নােম ? িচ থাকেত পারেব না

১৯. Name : বধ শনা ক, অথেবাধক, কীেসর নাম সটা পির ার নয়

২০. name : বধ শনা ক, অথেবাধক, কীেসর নাম সটা পির ার নয়

২১. name 1 : বধ শনা ক, অথেবাধক, কীেসর নাম সটা পির ার নয়

২২. Int : বধ শনা ক, তেব সংরি ত শ int এর সােথ িব াি দখা িদেত পাের

৩৭
৪.৬. গণনা পিরভাষা (Computing Terminologies)

২৩. INT : বধ শনা ক, তেব সংরি ত শ int এর সােথ িব াি দখা িদেত পাের

২৪. SUM : বধ শনা ক, অথেবাধক, যাগফেলর জ

২৫. sum of numbers : বধ শনা ক, অথেবাধক

২৬. firstName : বধ শনা ক, অথেবাধক, অেনেকর পছে র

২৭. Identifier : বধ শনা ক, অথেবাধক, কীেসর শনা ক পির ার নয়

২৮. printf : বধ শনা ক, অথেবাধক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ

২৯. int : সংরি ত শ , পূণক উপা ধারেনর জ উপা করণ

৩০. pow : বধ শনা ক, অথেবাধক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ

৩১. $sum : অৈবধ শনা ক, নােম $ িচ ব বহার করা যায় না

৩২. numˆ2 : অৈবধ শনা ক, নােম ˆ িচ ব বহার করা যায় না

৩৩. num 1 : অৈবধ শনা ক, নােম ফাঁকা ব বহার করা যায় না

৪.৬ গণনা পিরভাষা (Computing Terminologies)


• শনা ক (identifier) • ব মুখী পিরগণনা (object oriented
programming)
• িন দাগ (underscore)
• িট সামলােনা (error handling)
• সাজন (array)
• যুি অণুি য়া (logical operators)
• সংগিঠত (structured)
• িবট িত অণুি য়া (bit-wise
• পিরগণনা (programming) operators)

• উপা করণ (data type)


• সংগিঠত পিরগণনায় (structured
programming) • ছাঁচ (template)

• ব মুখী (object-oriented) • সংকলন সমেয় (compile-time)

৩৮
অধ ায় ৫

যাগান ও আেরাপণ
(Input and Assignment)

মেলখেত (program) উপা (data) কাথা থেক আেস? হয় আমরা মেলখেয়র িভতের
সরাসির িলেখ দই, যমনিট আেগর পাঠ েলােত কেরিছ, আর না হয় আমরা উপা ব বহারকারী-
দর কােছ থেক যাগান (input) নই। উপা যাগান িনেয় সিটেক ধারন করার উে ে আমরা
চলেক (variable) আেরাপণ (assign) কির যােত ওই উপা পের কােজ লাগােনা যায়।

৫.১ উপা যাগান (Data Input)


িসিপিপেত এমন একিট মেলখ (program) িলেখা যিট য কান আয়েতর ফল ও পিরসী-
মা িনণয় করেত পাের। তামার মেলখ তুিম মা একবারই সংকলন (compile) করেত পারেব,
আর েত ক আলাদা আয়েতর জ তুিম মেলখিট বারবার কবল চালােত পারেব, িক ম-
লখেয়র িভতের দঘ ও বদেল িদেয় বারবার সংকলন করেত পারেব না। তারমােন তামােক
দঘ ও যাগান (input) িহসােব তামার মেলখ ব বহারকারীর কােছ থেক িনেত হেব।
উ মেলখ লখার আেগ চেলা আমরা িকছু দরকারী আেলাচনা সাির। আমরা যখন কান
গণনা সম ার (computing problem) সমাধান করেত চাই, যমন আেলাচ ে আমরা
আয়েতর দঘ ও জেন তার ফল ও পিরসীমা িনণয় করেত চাই, তখন আমরা মুলত
একিট মেলখ (program) ব বহার করেবা, মােন আমরা মেলখিট চালােবা (run)। এখন
এই মেলখ হয়েতা আমরা িনেজরা তরী করেবা অথবা অ কউ আমােদর তরী কের িদেব।
বশীর ভাগ ে মেলখিট অে র তরী করা দয়া, আমরা কবল ব বহারকারী।
ভেব দেখা মেলখ তরী করা (write) আর চালােনা (run) আসেল েটা িভ ঘটনা। এই
েটা ঘটনা পরপর একসােথ ঘটেব এরকম সবসময় হয় না। বরং বশীর ভাগ সমেয় এই ঘটনা
েটা আসেল িভ িট ােন িভ িট সমেয় িভ ই ব ি র ারা সংঘিটত হয়। তাছাড়া মেলখ
য চালােব স হয়েতা কবল একটা আয়েতর ফল ও পিরসীমা িনণয় করেত চায় না বরং তার
হােত হয়েতা অেনক অেনক আয়ত আেছ আর স সব েলা আয়েতর জ ই ফল ও পিরসীমা
িনণয় করেত চায়। তরাং িতটা আয়েতর জ তার একটা কের আলাদা মেলখ লাগেব যিদ
মেলখেয়র িভতের আয়েতর দঘ ও িদেয় দয়া হয়। অথবা তার এমন একটা মেলখ
লাগেব যটা কান না কান ভােব সব েলা আয়েতর জ ই কাজ করেব, আর সিঠক ভােবই করেব
অথাৎ মেলখিট মুলত ে র (formula) ওপর নজর দেব, উপাে র (data) ওপর নয়।

৩৯
৫.১. উপা যাগান (Data Input)

আমরা উপের যসব অব া আেলাচনা করলাম সই সব অব ায় মেলখক (programmer)


মেলখ তরী করার সময় জানেবন না আয়েতর দঘ ও কী হেব, সিট জানা স ব হেব পের
ব বহারকারী যখন মেলখিট চালােবন কবল তখন। হে এমতাব ায় মেলখক উপা
(data) ছাড়া কী ভােব মেলখ তরী করেবন। সিত বলেত উ র তা গিণেতই আেছ চলক
(variable) ব বহার কের। আর আমরা তা ইত মেধ মেলখেত চলক ব বহার কেরিছই। আমা-
দর কবল যটা করা দরকার তা হেলা মেলখেয়র িভতের দঘ বা সরাসির িলেখ না িদেয়
ওইটা যােত ব বহারকারী মেলখ চালােনার সময় িদেয় িদেত পাের সই ব ব া করা। নীেচর ম-
লখেত আমরা তাই কেরিছ। আমরা ব বহারকারীর কােছ থেক চলেকর মান উপা িহসােব যাগান
(input) িনেয়িছ। এবার আমরা ওই মেলখিটর সংি অংশটু িবে ষণ কির।

িফিরি ৫.১: উপা যাগােনর মেলখ (Programs with Data Input)


#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

i n t main ( )
{
i n t doirgho ; / / আয়েতর দেঘ র জ চলক
c i n >> doirgho ; / / দঘ যাগান িহসােব নওয়া হেব

i n t prostho ; / / আয়েতর ে র জ চলক


c i n >> prostho ; / / যাগান িহসােব নওয়া হেব

// ফল ও পিরসীমার
i n t k h e t r o f o l = doirgho ∗ prostho ;
i n t porishima = 2∗ ( doirgho + prostho ) ;

// ফল ও পিরসীমা ফলন
cout <<" k h e t r o f o l holo "<< k h e t r o f o l << endl ;
cout <<" porishima holo "<< porishima << endl ;

ret ur n EXIT SUCCESS ; / / সফল ভােব ফরত


}

যাগান-ফলন (input-output)
13
12
k h e t r o f o l holo 156
porishima holo 50

৪০
৫.১. উপা যাগান (Data Input)

উপেরর মেলখেত খয়াল কেরা আমরা দেঘ র জ একিট চলক doirgho ঘাষনা কের-
িছ, িক সােথ সােথ তার কান আিদমান আেরাপ (initial value assign) কির নাই। কারণ
আেগই যমন আেলাচনা করলাম, আমরা যখন মেলখ িলখিছ তখন আমরা আসেল জািননা য
doirgho এর মান কেতা। আমরা বরং ওইটা ব বহারকারীর কােছ থেক নেবা। আর স কার-
ণ আমরা cin >> doirgho; িলেখিছ। এখােন cin হল console in। সাধারণত যাগান য
(input device) চাপিন (keyboard) ও িটপিন (mouse) আর ফলন য (output device)
নজির (monitor) িমিলেয় হল আমােদর console বা য ালয়। তা console in বলেত আম-
রা এখােন যাগান য িবেশষ কের চাপিন (keyboard) থেক যাগান (input) নয়া বুঝাি ।
তাহেল cin ব বহারকারীর কােছ থেক চাপিনর মাধ েম সংখ াটা িনেয় সটা doirgho চলেকর
িভতের িদেয় িদেব। এেত ওই চলেক একরকেমর মান আেরাপণ (value assign) হেয় যােব।
ব বহারকারীর কােছ থেক দঘ নবার পের আমােদর ও িনেত হেব। উপেরর মেলখেত
খয়াল কেরা আমরা দেঘ র মেতা কেরই ে র জ ও prostho নােম একটা int ধরেনর চলক
ঘাষনা কেরিছ আর তার পেরর সািরেত cin ব বহার কের prostho এর মান ব বহারকারীর কােছ
থেক নয়ার কথা িলেখিছ। উপেরর মেলখেয়র বাঁকী অংশটু তা আেগর পােঠর মেলখ -
লােত যমন দঘ ও ব বহার কের ফল ও পিরসীমার িলখা হেয়েছ আর তারপের
ফলন (output) দখােনা হেয়েছ িঠক তমনই। আমরা স েলা আর আেলাচনা করিছ না।
এবার আমরা আর একটু আেলাচনা কির উপেরর মেলখিট সংকলন (compile) কের চা-
লােল কী ঘটেব তা িনেয়। উপেরর মেলখিট চালােল আমরা দখব পদায় (screen) িকছু আসেছ
না, চটুলটা (cursor) কবল লাফালািফ করেছ। আমরা এই অব ায় দেঘ র মান, ধরা যাক 13
চেপ ভুি (enter) চাপেবা। িভতের িভতের cin ওই মান িনেয় doirgho চলেকর মেধ রেখ
িদেব। চটুলটা (cursor) তারপরও লাফালািফ করেব। আমরা তখন 12 িদেয় ভুি (enter) চা-
পেবা, cin ওইটা prostho চলেক রেখ িদেব। তারপর পদায় আমরা ফলন দখেত পােবা। থম
সািরেত থাকেব khetrofol holo 156 আর পেরর সািরেত porishima holo 50।
উপের মেলখেত আমরা চাইেল িকছু সংি করণ করেত পাির। যমন দঘ ও ঘাষনা
(declaration) ও যাগান (input) নয়া চার সািরেত না কের আমরা ও েলােক মা ই সািরেত
সারেত পাির। থম সািরেত আমরা চলক েটা ঘাষনা করেবা। আর পেরর সািরেত আমরা চলক
েটার যাগান িনেবা। নীেচর মেলখাংেশ (program segment) এই েলা দখােনা হেলা।
i n t doirgho , prostho ; / / আয়েতর দেঘ ও ে র জ চলক
c i n >> doirgho >> prostho ; / / দঘ ও যাগান নওয়া হেব

আর সে ে মেলখিট চালােনার সময় যাগান নয়ার অংশ িন প হেব। ল করেব চটুল


(cursor) যখন যাগান নবার জ লাফােত থাকেব, আমরা তখন 13 ও 12 সংখ া িট ফাঁকা
িদেয় এক সােথ িদেয়ই ভুি (enter) চাপেত পারেবা, অথবা চাইেল 13 িলেখ ভুি চেপ তারপর
12 িলেখ আবার ভুি চাপেত পারেবা। আর ফলেনর অংশ আেগর মেতাই হেব।
13 12

কউ যিদ চায় তাহেল িক ফলন অংেশও এরকম সংি করণ করেত পাের। যমন ফল
ও পিরসীমা চাইেল এক সািরেতই ফলন িদেত পাের।
cout << " k h e t r o f o l ar porishima holo " << k h e t r o f o l
<< " " << porishima << endl ; / / cout হেত এই পয
পুেরাটা আসেল এক সািরেত

তেব সবিকছু একবার cout িদেয় দওয়ার চেয় আমরা হয়েতা ইবাের িদেত চাইেবা।

৪১
৫.২. যাগান যাচনা (Input Prompt)

cout << " k h e t r o f o l ar porishima holo " ;


cout << k h e t r o f o l << " " << porishima << endl ;

উপেরর উভয় ে পদায় ফলন িক একসািরেতই আসেব।


k h e t r o f o l ar porishima holo 156 50

৫.২ যাগান যাচনা (Input Prompt)


িসিপিপেত এমন একিট মেলখ (program) রচনা কেরা যিট য কান আয়েতর ফল ও
পিরসীমা িনণয় করেত পাের। তামার মেলখ আয়েতর দঘ ও ব বহারকারীর কােছ থেক
যাগান (input) িনেব। আর দঘ ও যাগান নবার আেগ তামার মেলখ অব ই ব বহা-
রকারীেক দঘ ও ে র মান িজে স করেব অথাৎ যাচনা (prompt) করেব।

িফিরি ৫.২: যাগান যাচনার মেলখ (Program with Input Prompt)


#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

i n t main ( )
{
i n t doirgho ; / / আয়েতর দেঘ র জ চলক
cout << " doirgho koto ? " ; / / মান যাচনা করা হে
c i n >> doirgho ; / / দঘ যাগান িহসােব নওয়া হেব

i n t prostho ; / / আয়েতর ে র জ চলক


cout << " prostho koto ? " ; / / মান যাচনা করা হে
c i n >> prostho ; // যাগান িহসােব নওয়া হেব

// ফল ও পিরসীমার
i n t k h e t r o f o l = doirgho ∗ prostho ;
i n t porishima = 2∗ ( doirgho + prostho ) ;

// ফল ও পিরসীমা ফলন দয়া হেব


cout <<" k h e t r o f o l holo "<< porishima << endl ;
cout <<" porishima holo "<< porishima << endl ;

ret ur n EXIT SUCCESS ; / / সফল ভােব ফরত


}

৪২
৫.২. যাগান যাচনা (Input Prompt)

যাগান-ফলন (input-output)
doirgho koto ? 13
prostho koto ? 12
k h e t r o f o l holo 156
porishima holo 50

আেগর পােঠর মেলখেত আমরা চলেকর মান ব বহারকারীর কােছ থেক নয়ার জ cin
ব বহার কেরিছ। ওই মেলখিট যখন আমরা চালাই তখন দিখ পদায় (screen) িকছু নাই
আর চটুলটা (cursor) কেনা যেনা লাফালািফ করেছ। সই অব ায় আমরা থেম দেঘ র মান
13 িদেয় ভুি (enter) চেপিছ। চটুলটা তারপরও লাফালািফ করিছল। আমরা তখন 12 িদেয়
ভুি চেপিছ। তারপর পদায় ফলন এেসিছল থম সািরেত khetrofol holo 156 আর পেরর
সািরেত porishima holo 50। তা এই য চটুলটা (cursor) লাফালািফ করিছল দঘ ও ে র
মান নয়ার জ এইটা আমরা বুঝেত পাির কারণ আমরা িনেজরাই এে ে মেলখিট তরী
write) কেরিছ আর িনেজরাই সটা সংকলন (compile) কের চালাি (run)। আমরা এে ে
জািন য আমােদর মেলখিট থেম দঘ চাে আর সটা দবার পর চাে । এবার ভেব
দেখা আমােদর লখা মেলখ যিদ আমরা ছাড়া অ কউ চালায় (run) তাহেল স কী ভােব
জানেব চটুলিট (cursor) ওই অব ায় কন লাফাে । স িক আসেলই দঘ বা নয়ার জ
অেপ া করেছ নািক িভতের িভতের ঘটনা অ িকছু, স হয়েতা অ িকছু করেছ।
তা ওপেরর সম া সমাধােনর জ আমরা যিট করেবা সিট হেলা আমােদর মেলখেত
cin >> doirgho; লখার আেগ আমরা একটা বাতা দখােবা য আমরা দেঘ র মান চাই।
উপেরর মেলখ খয়াল কেরা cin >> doirgho; লখার আেগ আমরা cout << "doirgho
koto? "; িলেখ আসেল সটাই করেত চাইিছ। এই মেলখ যখন চালােনা হেব তখন থেম পদায়
doirgho koto? দখা যােব। আর cout এর শেষ আমরা যেহতু endl অথাৎ end line দই
নাই, চটুলটা (cursor) সেহতু ওই একই সািরেত লাফাইেত থাকেব, লাফাইেত থাকেব মুলত
cin >> doirgho; এর কারেণ doirgho এর মান নয়ার জ । আমরা তখন doirgho এর
মান িদেয় ভুি (enter) চাপেবা। তাহেল "চটুল কন লাফায়?" আমরা এই সম ার সমাধান
কের ফললাম কমন! এই য যাগান (input) নবার আেগ একটা বাতা িদেয় ব বহারকারীেক
জানােনা য আমরা কী যাগান চাই, এই ব াপারিটেক বলা হয় যাগান যাচনা (input prompt)।
উপেরর মেলখেত খয়াল কেরা আমরা ে র জে ও একই ভােব যাগান (input) নবার আেগ
"prostho koto? " বাতা িদেয় যাগান যাচনা (input prompt) কেরিছ। তাহেল এখন থেক
তামার মেলখেত যাগান নবার আেগ অব ই যাগান যাচনা করেব, কমন?
উপের মেলখেত আমরা চাইেল িকছু সংি করণ করেত পাির। যমন দঘ ও ঘাষনা
(declaration), যাগান যাচনা (input prompt) করা, ও যাগান (input) নয়া ছয় সািরেত
না কের আমরা ও েলাক মা িতন সািরেত সারেত পাির। থম সািরেত আমরা চলক েটা ঘাষনা
করেবা। আর পেরর সািরেত আমরা যাগান যাচনা করেবা তারপের সািরেত চলক েটার মান
যাগান িনেবা। নীেচ মেলখাংেশ (program segment) এই েলা দখােনা হেলা।
i n t doirgho , prostho ; / / দেঘ ও ে র জ চলক
cout << " doirgho o prostho koto ? " ; / / একসােথ যাচনা
c i n >> doirgho >> prostho ; / / দঘ ও যাগান

আর সে ে মেলখিট চালােনার সময় যাগান নয়ার অংশ িন প হেব। অথাৎ মেলখ


চালােল doirgho o prostho koto? দখােনার পের চটুলটা (cursor) যাগান নবার জ
লাফােত থাকেব। আমরা 13 ও 12 সংখ া িট ফাঁকা িদেয় এক সােথ িদেয়ই ভুি (enter) চাপেত

৪৩
৫.৩. মান আেরাপণ (Value Assignment)

পারেবা, অথবা চাইেল 13 িলেখ ভুি চেপ তারপর 12 িলেখ আবার ভুি চাপেত পারেবা। আর
ফলেনর অংশ আেগর মেতাই হেব, কােজই আমরা সটা আর দখাি না।
doirgho o prostho koto ? 13 12

৫.৩ মান আেরাপণ (Value Assignment)


মেলখেত (program) চলক িনেয় তােত মান আেরাপণ (value assign) করেল আসেল কী
ঘেট? চলেক একটা মান আেগ থেক আেছই, এমতাব ায় আেরকটা মান আেরাপ করেল কী ঘেট?
একটা চলক থেক আেরকটা চলেক মান আেরাপ করেলই বা কী ঘেট?
i n t amar ;
i n t tomar = 5 ;

উপের আমরা েটা চলক ঘাষনা (variable declare) করলাম: একটার নাম amar আর
আেরকটার নাম tomar, েটাই int ধরেনর অথাৎ পূণক, একটােত আিদমান (initial value)
িদেয় িদলাম আর একটােত িদলাম না। আমরা যখন চলক ঘাষনা কির তখন আসেল আমরা গণিনর
(computer) রিনেত (memory) িকছু জায়গা দখল কির। ধের িনেত পােরা রিন হল একটা
রা ার পােশ অেনক েলা একই রকম বাড়ী। কান চলক ঘাষনা করার সময় আমরা আসেল ওই
বাড়ী েলার একটা দখল কের সই বাড়ীটার নাম িদেয় দই আমােদর চলেকর নােম। তামরা
িন য় দেখেছা অেনেকরই বাড়ীর নাম থােক যমন "শাি নীড়"। আমােদর চলক বাড়ী েলার
নাম amar ও tomar। তা আমরা যখন উপেরর েটা চলক ঘাষনা করলাম তখন রিনেত ওই
রকম েটা জায়গা িনেয় তােদর নাম িদেয় িদলাম amar আর tomar। এখন কথা হে রিণেত
(memory) ওই জায়গায় আমরা আসেল রাখেবা কী? উ রটােতা সহজ আমরা রাখেবা চলকিটর
মান। যখন আমরা আিদমান িদেয় িদলাম তখন ওই জায়গােত আমােদর দয়া মানটা থাকেব, আর
যখন আিদমান িদেবা না, তখনও ওই জায়গািটেত আেগ থেক যাই িছল তাই থাকেব।
amar = tomar ;

এবার আমরা যিদ উপেরর মেতা কের tomar এর মান amar এ আেরাপ কির তাহেল কী
ঘটেব? আসেল উপেরর এই িববৃিত (statement) চালােনার পের amar এর আেগর মান মুেছ
িগেয় সটার নতুন মান হেয় যােব tomar এর মােনর সমান অথাৎ amar এর মানও হেব 5। এখা-
ন একটা পূণ িবষয় বেল রাখেত হেব য এই য tomar থেক amar এ মান আেরাপ করা
হেলা এেত িক tomar এর মােন কান পিরবতন হেব না। অথাৎ tomar এর মান আেগর মেতা
5-ই থাকেব। আেরাপেণ (assignment) সমান িচে র বােম যা থােক সটােক ল (target)
আর ডােন যটা থােক সটােক (source) বলা হয়, কারণ উৎস থেক মান িনেয় লে আেরাপ
করা হয়। উপেরর আেরাপেণ amar = িচে র বােম তাই এিট ল আর tomar ডানপােশ তাই
এিট উৎস। আেরাপেণর ফেল লে র মান বদেল িক উৎেসর মান বদেল না, একই থােক।
উপেরর মেলখাংশ (program segment) আর ফলনাংশ (output segment) ল
কেরা। আমরা থেম চলক x ঘাষনা কের তার আিদ মান (initial value) িদেয়িছ 3, তারপর
চলক y ঘাষনা কের তার আিদমান িদেয়িছ x+5 অথাৎ 3 + 5 = 8। এই পযােয় ফলন দখােনা
হেয়েছ x আর y েটার মােনরই। ফলনাংেশ আমরা দখেত পাি x 3 y 8। তারপর মেলখাং-
শ আমরা িলেখিছ x = y ∗ 3; ফেল x এর মান হেব এখন 8 ∗ 3 = 24, আর y এর মান িক
একই থাকেব, কারণ y এর মান আমরা কবল ব বহার কেরিছ, y এ তা কান মান আেরাপ কির

৪৪
৫.৪. মান অদল-বদল (Value Swapping)

নাই। মেলখাংেশ পেরর িববৃিতেত (statement) আমরা x ও y এর তখনকার মান দিখেয়িছ,


ফলনাংেশ সটা িঠকই x 24 y 8 দখাে । মেলখাংেশ এরপেরর বােক আমরা আবার x এ
মান আেরাপ কেরিছ x = y + 3 ∗ 4; তা এর ফেল আেগর মেতাই y এর মান বদল হেব না,
িক x এর নতুন মান হেয় যােব 8 + 3 ∗ 4 = 20, যা পেরর cout এর মাধ েম ফলনাংেশ িঠ-
কই দখােনা হেয়েছ x 20 y 8। মেলখাংেশ এরপর আমরা দিখ y = x ∗ 2; এর ফেল y এর
নতুন মান হেব y = 20 ∗ 2 = 40, আর x এর মান এবার আেগ যা িছেলা তাই থাকেব, কারণ x
এর মান কবল ব বহার করা হেয়েছ, x এ কান মান আেরাপ করা হয় িন।
মেলখাংশ (program segment)
int x = 3 ; / / আিদ মান আেরাপ
int y = x + 5 ; / / আিদ মান আেরাপ
cout << " x " << x << " y " << y << endl ; / / মান দখাও

x = y ∗ 3; / / পুনরায় মান আেরাপ


cout << " x " << x << " y " << y << endl ; / / মান দখাও

x = y + 3 ∗ 4; / / পুনরায় মান আেরাপ


cout << " x " << x << " y " << y << endl ; / / মান দখাও

y = x ∗ 2; / / পুনরায় মান আেরাপ


cout << " x " << x << " y " << y << endl ; / / মান দখাও

ফলনাংশ (output segment)


x 3 y 8
x 24 y 8
x 20 y 8
x 20 y 40

সবিমিলেয় একটা িবষয় দখা যাে আেরাপেণ = িচে র বােম থাকা ল চলেকর (target
variable) মান কবল পিরবতন হয়, আর = িচে র ডােন থাকা চলক (variable) বা রািশর
(expression) এর মান কান পিরবতন হয় না। আেরকিট ব াপার হেলা কান চলেক পের কান
নতুন মান আেরাপ না হওয়া পয আেগরবার য মান আেরাপ করা হেয়িছল সটাই থােক।

৫.৪ মান অদল-বদল (Value Swapping)


ধেরা তামার েটা চলক (variable) আেছ x আর y আর তােদর মান যথা েম 12 ও 13। তা
তামােক এমন িকছু িববৃিত (statement) িলখেত হেব যােত ওই িববৃিত েলা চালােনার (run)
পের আমরা x আর y এর মান যথা েম 13 আর 12 পাই অথাৎ মান েটা অদল-বদল হেয় যায়।
i n t x = 12 ; / / x এর মান আেরাপ করা হেলা
i n t y = 13 ; / / y এর মান আেরাপ করা হেলা

উপের আমরা কবল চলক x আর y ঘাষনা কের তােদর আিদমান িহসােব 12 ও 13 িদেয়
িদলাম। এখন আমরা এমন িকছু করেবা যােত x আর y মান অদল-বদল হেয় যায়। থেমই আমরা

৪৫
৫.৪. মান অদল-বদল (Value Swapping)

একটা চটুল সমাধান কির। তামােদর মেধ যারা ু ধরেনর আর চটপেট তারা সাধারণত এই
সমাধানিট করেত চাইেব। নীেচর িববৃিত েটা ল কেরা: আমরা ফ x এর মেধ সরাসির 13
আেরাপ কেরিছ আর y এর মেধ 12 আেরাপ কেরিছ। ব স হেয় গল x আর y এর মান অদল-বদল!
আসেল আমরা কী এইেট চেয়িছলাম? এখােন তা চলক েটার মেধ একটা থেক আেরকটােত
মান নয়ার মেতা কান ঘটনা ঘেট িন, কােজই কান অদল বদেলর িকছু ঘেট িন!
x = 13 ; / / x এর মান আেরাপ করা হেলা
y = 12 ; / / y এর মান আেরাপ করা হেলা

অদল-বদল বুঝার জ িচ া কেরা তামার িট পয়ালা আেছ: কাঁেচর পয়ালা আর কাঁসার


পয়ালা। কাঁেচর পয়ালায় আেছ আঙুেরর রস আর কাঁসার পয়ালায় কমলার রস। এখন তুিম এই
পয়ালা েটােত থাকা ফেলর রস অদল-বদল করেত চাও যােত কাঁেচর পয়ালায় থােক কমলার রস
আর কাঁসার পয়ালায় থােক আঙুেরর রস। তা এখন তুিম কী করেব। তুিম তা আর সরাসির এক-
টার ফেলর রস আেরকটােত ঢেল িদেত পােরা না। তামােক যটা করেত হেব তা হেলা আেরকটা
পয়ালা নয়া। ধেরা সটা কােঠর পয়ালা। এই কােঠর পয়ালািট তুিম একটা থেক আেরকটােত
ঢালাঢািলর কােজ ব বহার করেব। তাহেল এই অিতির কােঠর পয়ালা কােজ লািগেয় কীভােব
তামার কাঁচ আর কাঁসার পয়ালার ফেলর রস অদল-বদল করা যায়, আমরা নীেচ তা দিখ।

১. একদম েত কাঁেচর পয়ালায় রেয়েছ আমােদর আঙুেরর রস আর কােঠর পয়ালা খািল।


তরাং কাঁেচর পয়ালা থেক আঙুেরর রস কােঠর পয়ালায় ঢােলা। ফেল কােঠর পয়ালায়
থাকেলা আঙুেরর রস আর কাঁেচর পয়ালা খািল হেয় গেলা।

২. কাঁেচর পয়ালা যেহতু এখন খািল আর কাঁসার পয়ালায় আেছ কমলার রস, আমরা তাই
কাঁসার পয়ালার কমলার রস কাঁেচর পয়ালায় ঢালেবা। ফেল কাঁেচর পয়ালায় থাকেলা
কমলার রস আর কাঁসার পয়ালা খািল হেয় গেলা।

৩. কাঁসার পয়ালা যেহতু এখন খািল আর কােঠর পয়লায় আেছ আঙুেরর রস, আমরা তাই
কােঠর পয়ালার আঙুেরর রস কাঁসার পয়ালায় ঢালেবা। ফেল কাঁসার পয়ালায় থাকেলা
আঙুেরর রস আর কােঠর পয়ালা খািল হেয় গেলা।

উপেরর ধাপ িতনিট স করেলই আমােদর এক পয়ালার ফেলর রস আেরক পয়ালায়


অদল-বদল হেয় যােব। তা পয়ালা েটার রস অদল-বদেলর মেতাই আসেল আমােদর চলক -
টার মান অদল-বদল করেত হেব। একটা অিতির পয়ালার মেতা আমােদর এখােনও লাগেব
একটা অিতির চলক। ধের নই আমােদর সই অিতির চলক হেলা z। আমরা তাহেল এই
অিতির চলক কােজ লািগেয় আমােদর x আর y চলেকর মান অদল-বদল কের ফিল।
z = x; / / z হেলা 12 আর x আেছ 12 , y আেছ 13
x = y; / / x হেলা 13 আর y আেছ 13 , z আেছ 12
y = z; / / y হেলা 12 আর z আেছ 12 , x আেছ 13

তা উপেরর িতনিট িববৃিত চালােলই আমােদর x আর y চলক েটার মান অদল-বদল হেয়
গেলা। খয়াল কেরেছা চলেকর নাম যখন আমরা আেরাপ িচে র ডােন িলেখিছ তখন আসেল
আমরা চলকিটর ডান-মান বুিঝেয়িছ, আর যখন বােম িলেখিছ তখন বাম-মান বুিঝেয়িছ। তেব প-
য়ালা আর ফেলর রেসর অদল বদেলর সােথ চলক আর মােনর অদল-বদেলর িক িকছুটা তফাৎ
আেছ। তফাৎটা হেলা ফেলর রস এক পয়ালা থেক আেরক পয়ালয় ঢালেল যটা থেক ঢালা
হেলা সই পয়ালা খািল হেয় যায়। িক চলেকর ে z = x; করেল চলক x এর মান চলক z

৪৬
৫.৫. আেরাপেণর বাম ও ডান (Assignment Left and Right)

এ আেরাপ হয় িঠকই, িক চলক x িকছুেতই খািল হয় না, বরং তার য মান িছেলা সটাই থােক।
চলেকর মান বদেল যায় কবল যখন এেত নতুন মান আেরাপ করা হয়।

৫.৫ আেরাপেণর বাম ও ডান (Assignment Left and Right)


কান চলেকর (variable) বাম-মান (lvalue) ও ডান-মান (rvalue) বলেত কী বুেঝা? কান
চলেক মান আেরাপণ করেত গেল আমরা আেরাপ (assign) = িচ িদেয় বােম ও ডােন িকছু
িলিখ যমন y = x;। এখােন বােমরিটেক বলা হয় ল (target) আর ডােনরিটেক বলা হয়
উৎস (source)। আেরাপেণর ফেল ডান পােশর উৎস থেক মান বাম পােশর লে আেরািপত
হয়। কথা হে আেরাপ = িচে র বােম আমরা কী কী িদেত পারেবা বা পারেবা না, আর ডােনই
বা কী কী িদেত পারেবা বা পারেবা না? তাছাড়া একটা চলেকর নাম আেরাপ = িচে র বাম বা
ডানপােশ িলখেল এই ই ে চলেকর ভুিমকায় আসেল কান তফাৎ হয় িকনা?
এই আেলাচনায় যাওয়ার আেগ আমরা একটু পেরর উ ৃতাংশটু িবেবচনা কির। "ঢাকার মামা
হািলম িবখ াত। চল আমরা মামা হািলম খাই। তুিম খােব এক বািট, আিম খাব এক বািট। আমার
বািটটা পির ার নয়, তামার বািটটা পির ার।" তা এইখােন বািট মােন কখন আসেল হািলম আর
কখন আসেল সটা পা ? আমরা বুঝেত পাির "তুিম খােব এক বািট, আিম খাব এক বািট" এই
কথা েলােত বািট বলেত আসেল সিত সিত পা টােক কামেড় কামেড় খাওয়ার কথা বলা হে না,
বরং তুিম এক বািট পিরমান হািলম খােব আর আিম এক বািট পিরমান হািলম খােবা তাই বুঝােনা
হে । এক বািট হািলম মােন একটা বািটেত থাকা হািলম। িবষয় েলােক চলক আর তার মােনর
সােথ িমলাও। বািট িঠক যন চলেকর মেতা আর হািলম হল তার মােনর মেতা। আবার "আমার
বািটটা পির ার নয়, তামার বািটটা পির ার।" এই অংেশ বািট মােন আসেল বািট নােমর পা টা,
সই পাে ঢালা হািলম নয় কান ভােবই। তাহেল দখা যাে বািট বলেত কখেনা কখেনা আসেল
পা টােক বুঝােনা হয় আর কখেনা কখেনা পা টােত থাকা হািলমেক বুঝােনা হয়। একই ভােব
চলেকর নাম উে খ করেল কখেনা কখেনা চলকিটর মানেক বুঝােনা হয়, কখেনা কখেনা আসেল
চলকিটর জ রিণেত (memory) বরা জায়গাটু বুঝােনা হয়।

x = 3; এখােন চলক x বলেত আমরা আসেল চলক x এর জ রিনেত (memory) নয়া জা-
য়গাটু বুিঝ যখােন মান 3 ক রাখা হেব। এখােন কান ভােবই চলক x এ আেগ থেক
িবদ মান মানেক বুঝােনা হে না। খয়াল কেরা এখােন চলক x আেরাপ = িচে র বাম পা-
শ আেছ। যখন চলক x আসেল রিনেত বরা কৃত জায়গােক বুঝায় তখন এটােক আমরা
ফ চলক না বেল আেরা কের বলেবা চলেকর বাম-মান (l-value)। তাহেল মেন
রেখা চলেকর বাম মান িদেয় আমরা বুঝােবা চলেকর জ রিনেত নয়া জায়গাটু ।

y = x; এখােন চলক y বলেত আমরা চলক y এর জ রিনেত বরা পাওয়া জায়গাটু েক বুিঝ।
আর চলক y আেরাপ = িচে র বােম আেছ তাই এখােন চলক y এর বাম-মান ব ব ত
হেয়েছ। তেব চলক x বলেত এখােন আমরা কবল তার মানটােক বুিঝ। খয়াল কেরা চলক
x এর মানটাইেতা চলক y এর রিনর জায়গাটােত জমা হেব, চলক x এর জ বরা
জায়গােতা আর িগেয় চলক y এর জায়গায় লখা হেব না। আমরা দখিছ এখােন চলক x
আেরাপ = িচে র ডােন রেয়েছ। যখন চলক x আসেল তার মানটােক বুঝায় তখন আমরা
এটােক বলব চলেকর ডান-মান (r-value)। চলেকর ডান মান িদেয় আমরা তাহেল বুঝােবা
চলেকর য মান সিটেক, রিণেত থাকা জায়গািটেক নয়।

উপেরর আেলাচনা থেক আমরা একটা িবষয়ই পির ার করেত চেয়িছ সটা হেলা, আেরাপ
= িচে র বােম আমরা কবল এমন িকছু িদেত পারেবা যার জ রিনেত জায়গা দখল করা আেছ,

৪৭
৫.৬. আ -শরন আেরাপণ (Self-Referential Assignment)

অথাৎ যার বাম-মান (l-value) আেছ। আর আেরাপ িচে র ডান পােশ আমরা এমন িকছু িদেত
পারেবা যার মান আেছ অথাৎ ডান-মান (r-value) আেছ। একটা িবষয় খয়াল কেরা যার বাম-
মান আেছ অথাৎ রিনেত যার জায়গা আেছ তার একটা মানও থাকেবই অথাৎ তার ডান-মান
থাকেবই, যমন য কান চলেকর। কথা হে এমন িকছু িক আেছ যার ডান মান আেছ িক বাম
মান নাই। উ র ধের িনেত পােরা আেছ। যমন x = 3; এইখােন 3 এর ডান মান আেছ িক বাম
মান নাই। কােজই কউ চাইেল 3 = x; িলখেত পারেব না, সংকলন (compile) করার সময়
িট দখােব বলেব "error: lvalue required as left operand of assignment"।
একই ভােব কউ চাইেল আেরাপণ িহসােব y+3 = x;ও িলখেত পারেব না, একই িট (error)
দখােব, কারণ চলক y এর বাম মান স ব হেলও y + 3 করেল ওইটা আর চলক y থােক না হেয়
যায় একটা রািশ যার মান হেব y এর মান যাগ 3, কােজই সটার কবল মান থােক, তার জ
রিনেত কান জায়গা থােক না। বুঝাই যাে অ িদেক আেরাপণ িহসােব x = y + 3; িলখা
যােব কারণ y + 3 এর ডান-মান আেছ অপর িদেক চলক x এর বাম-মান আেছ।

৫.৬ আ -শরন আেরাপণ (Self-Referential Assignment)


মেলখ (program) দখেল আমােদর সাধারণত x = x + 1; বা এই জাতীয় অ ুত িকছু িবষয়
নজের আেস। মুল কথা হেলা এই সব ে একই চলক (variable) আেরাপ (assignment)
= িচে র বােমও রেয়েছ আবার ডােনও রেয়েছ। আমরা সকেল গিণত জািন কম বা বশী। সখােন
সমীকরণ িনেয় আমােদর য ধারনা আেছ সই অ যায়ী তা x কখেনা x + 1 এর সমান হেত পাের
না। তাহেল মেলখেত x = x + 1; এর মেতা অথহীন িবষয় কন থােক?
x = x + 1; / / িচ = গিণেতর সমান িচ নয় , এিট গণনার আেরাপণ।

আসেল = িচ িট গিণেত আমরা ব বহার কির েটা সংখ া তুলনা কের যিদ দিখ তারা এেক
অপেরর সমান তাহেল। আমরা তাই ওটােক গিণেত সমান (equal) িচ বেল থািক। িক গণনার
জগেত = িচ িটেক সমান িচ িহসােব ব বহার না কের বরং আেরাপণ (assignment) িচ
িহসােব ব বহার করা হয়। কােজই কান মেলখেত আমরা যখন x = x + 1; দিখ তখন আসেল
ওটা কান ভােবই গিণেতর সমীকরণ নয়, বরং ওইটা গণনার জগেতর আেরাপণ। তরাং গিণেতর
জগেত ওইটা কান অথ তরী না করেলও গণনার জগেত ওটার িনিদ অথ আেছ।
আমরা আেরাপণ (assignment) িনেয় আেগই আেলাচনা কেরিছ। ওই আেরাপণ েলার সব-
েলােত বাম আর ডান উভয় পােশ চলক থাকেলও আলাদা আলাদা চলক িছল। আর x = x + 1ও
আেরাপণ তেব এখােন একই চলক আেরাপ িচে র বােমও আেছ ডােনও আেছ। এইরকম আেরা-
পণ যখােন একই চলক বােমও আেছ ডােনও আেছ সটােক আমরা বলেবা আ শরন আেরাপণ
(self-referential assignment) অথাৎ যখােন একটা চলক িনেজর মােনর জ িনেজরই
শরনাপ হয়। আ শরণ আেরাপেণ ডানপােশ চলকিটর ডান-মান (r-value) ব ব ত হয়, আর
বামপােশ চলকিটর বাম-মান (l-value) ব ব ত হয়। এই রকম আেরাপেণ আসেল কী ঘেট?
int x = 3 ; / / চলক x এ আিদ মান আেরাপ করা হেলা
x = x + 1; / / এখােন আ −শরণ আেরাপণ করা হে
cout << x << endl ; / / চলক x এর মান ফলন দওয়া হে

এই রকম আেরাপণ বুঝেত গেল আমরা x = x + 1; িববৃিতিটেক ইিট ঘটনায় িবভ কের
িনেত পাির। একটা ঘটনা হল ডান পােশ x + 1 িহসাব করা অথাৎ x+1 এর মান বা আেরা পির-
ার কের বলেল ডান-মান িহসাব করা। আর অ ঘটনাটা হল বাম পােশ x এর বাম-মােন অথাৎ

৪৮
৫.৭. অ শীলনী সম া (Exercise Problems)

রিনেত (memory) x এর জ বরা করা জায়গায় ডান পাশ থেক পাওয়া মানিট িলেখ দ-
ওয়া। তা এই েটা ঘটনার থমিট আেগ ঘটেব আর ি তীয়িট পের ঘটেব। উপের আমরা x এর
আিদ মান িনেয়িছ 3। এরপর যখন x= x+1; িনবািহত (execute) হেব তখন থম ঘটনািট ঘটেব
আেগ অথাৎ x + 1 মান িহসাব হেব। x এর মান যেহতু এই অব ায় 3 তাই x + 1 হেব 4। মেন
কের দেখা এই 4 এর িক কবল ডান-মান আেছ এর জ রিনেত কান জায়গা দখল করা নই
বা এর কান বাম-মান নই। অথাৎ এই 4 কান ভােবই x চলেকর জায়গায় নই, অ কাথাও
আেছ। যাইেহাক এমতাব ায় এরপর ঘটেব ি তীয় ঘটনািট অথাৎ এই 4 মানিট িগেয় লখা হেয়
যােব x এর জ বরা জায়গােত। আমরা তাই x এর পুরেনা মান 3 বদেল সখােন পােবা এর
নতুন মান 4। তাহেল x = x + 1; আ -শরন আেরাপেণর ফেল চলেকর মান এক বেড় গেলা।
আ শরন আেরাপেণর আেরা নানারকম জিটল অব া আেছ যমন x = x ∗ 3; বা x = x∗
x + x + 1;। এ েলার িতিট ে আেগ ডানপােশর মান িহসাব করা হেব আর তারপর সই
মান বাম পােশ িলেখ দয়া হেব, ফেল চলকিটেত নতুন একট মান থাকেব।

৫.৭ অ শীলনী সম া (Exercise Problems)


ধারণাগত : নীেচ িকছু ধারণাগত রেয়েছ। েলার উ র িনেজ িনেজ বর করেব।

১. সরাসির মেলখেয়র (program) িভতের িদেল উপা িদেয় িদেল সম া কী?


২. উপা (data) কেনা যাগান (input) িনেত হেব? িবধা-অ িবধা কী কী?
৩. যাগান যাচনা (input prompt) কী? যাগান নয়ার আেগ কন যাচনা করা উিচৎ?
৪. চলেক (variable) মান আেরাপেণ (assignment) ল ও উৎেস কী ঘেট বণনা কেরা।
৫. চলেকর বাম-মান আর ডান-মান বলেত কী বুেঝা? উদাহরণ িদেয় ব াখ া কেরা।
৬. আেরাপেণ = িচে র বােম কন এমন িকছু দয়া যায় না যার কবল ডান মান আেছ?
৭. আ -শরণ (self-referential) আেরাপণ কী উদাহরণ সহ ব াখ া কেরা।
৮. িট চলেক (variable) থাকা মান বদলাবদিল করেব কমেন ব াখ া কেরা।

পিরগণনার সম া: নীেচ আমরা িকছু পিরগণনার সম া দখেবা। এই সম া েলা আেগ ধয


ধের িনেজ িনেজ সমাধান করেত চ া করেব। যখন এেকবােরই পারেছা না বেল মেন হয় তখনই
কবল সমাধান দেখ িনেত পােরা। সমাধান েলা পিরগণনার েলার শেষ আেছ।

১. এমন একিট মেলখ (program) রচনা কেরা যিট একিট পূণক (int) ও একিট ভ ক
(float) যাগান (input) িনেয় স েলা আবার ফলেন (output) দখায়।
২. এমন একিট মেলখ (program) রচনা কেরা যিট িট ভ ক (float) সংখ া যাগান
(input) িনেয় সংখ া িট ও তােদর যাগফল ফলেন (output) দখায়।
৩. এমন একিট মেলখ (program) রচনা কেরা যিট িতনিট পূণক (int) যাগান (input)
িনেয় তােদরেক য েম যাগান নয়া হেয়েছ সই েম আবার উে া েম দখােব। যমন
ভু সংখ া িতনিট যিদ হয় পর পর 2 3 1 তাহল িসধা েম দখােব 2 3 1 আবার তােদর
উ া েম দখােব 1 3 2। খয়াল কেরা আমরা িক মােনর ম বলিছ না।

৪৯
৫.৭. অ শীলনী সম া (Exercise Problems)

৪. এমন একিট মেলখ (program) রচনা কেরা যিট একদম িঠক িঠক নীেচর মেতা যাগান
(input) ও ফলন (output) উৎপ কের। তুিম িক পরী ার ন র েলা যাগান িনেব,
আর আমরা এেককবার চালােনার সময় এক এক রকম সংখ া যাগান িদেবা।
f o l a f o l n i r n o y e r kromolekho
− − − − − − − − − − − − − −
prothom p o r i k k h a i koto ? 90
d i t i y o p o r i k k h a i koto ? 75
t r i t i y o p o r i k k h a i koto ? 91
− − − − − − − − − − − − − −
shorbo mot number holo 256

পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।

আমরা ধের িনি য তুিম দরকারী িশর নিথ (header) অ ভু করা, নামাধার
(namespace) std ব বহার করা, main িবপাতেকর কংকাল লখা আর সটার
শেষ return EXIT SUCCESS; িলেখ মান ফরত দয়া ইত মেধ ভােলা কের
িশেখ ফেলেছা। তা তুিম যিদ নীেচ লখা মেলখাংশ েলা সংকলন (compile)
কের চালােত (run) চাও, তামােক িক আেগ include, namespace, main,
return এ েলা িলেখ িনেত হেব, তারপর main িবপাতেকর িভতের return এর
আেগ তুিম আমােদর নীেচর অংশ েলা িলেখ িনেব। তারপর সংকলন কের মেলখ
চালােব। আমরা এখন থেক মাটামুিট এইভােব মেলখাংশ দখােবা।

১. এমন একিট মেলখ (program) রচনা কেরা যিট একিট পূণক (int) ও একিট ভ ক
(float) যাগান (input) িনেয় স েলা আবার ফলেন (output) দখায়।

িফিরি ৫.৩: যাগান ও ফলেনর মেলখ (Input Output Program)


i n t purnok ;
f l o a t vognok ;

cout << " purnok koto ? " ;


c i n >> purnok ;

cout << " vognok koto ? " ;


c i n >> vognok ;

cout << " puronok holo " << purnok << endl ;
cout << " vognok holo " << vognok << endl ;

২. এমন একিট মেলখ (program) রচনা কেরা যিট িট ভ ক (float) সংখ া যাগান
(input) িনেয় সংখ া িট ও তােদর যাগফল ফলেন (output) দখায়।

৫০
৫.৭. অ শীলনী সম া (Exercise Problems)

িফিরি ৫.৪: যাগান িকয়ন ফলন (Input Process Output)


f l o a t prothom , d i t i y o ;

cout << " songkhya d u t i koto ? " ;


c i n >> prothom >> d i t i y o ;

f l o a t j o g f o l = prothom + d i t i y o ;

cout << " songkhya d u t i " ; / / কান endl নাই


cout << prothom << " " << d i t i y o << endl ;

cout << " tader j o g f o l " << j o g f o l << endl ;

৩. এমন একিট মেলখ (program) রচনা কেরা যিট িতনিট পূণক (int) যাগান (input)
িনেয় তােদরেক য েম যাগান নয়া হেয়েছ সই েম আবার উে া েম দখােব। যমন
ভু সংখ া িতনিট যিদ হয় পর পর 2 3 1 তাহল িসধা েম দখােব 2 3 1 আবার তােদর
উ া েম দখােব 1 3 2। খয়াল কেরা আমরা িক মােনর ম বলিছ না।

িফিরি ৫.৫: যাগােনর িসধা মউ া ম (Input Order Reverse Order)


i n t prothom , d i t i y o , t r i t i y o ;

cout << " songkhya t i n t i koto ? " ;


c i n >> prothom >> d i t i y o >> t r i t i y o ;

cout << " s i d h a krome " << prothom << " " ;
cout << d i t i y o << " " << t r i t i y o << endl ;

cout << " u l t a krome " << t r i t i y o << " " ;


cout << d i t i y o << " " << prothom << endl ;

৪. এমন একিট মেলখ (program) রচনা কেরা যিট একদম িঠক িঠক নীেচর মেতা যাগান
(input) ও ফলন (output) উৎপ কের। তুিম িক পরী ার ন র েলা যাগান িনেব,
আর আমরা এেককবার চালােনার সময় এক এক রকম সংখ া যাগান িদেবা।
f o l a f o l n i r n o y e r kromolekho
− − − − − − − − − − − − − −
prothom p o r i k k h a i koto ? 90
d i t i y o p o r i k k h a i koto ? 75
t r i t i y o p o r i k k h a i koto ? 91
− − − − − − − − − − − − − −
shorbo mot number holo 256

ফলাফল ি য়াকরেণর মেলখিট আমরা নীেচ দখাি ।

৫১
৫.৮. গণনা পিরভাষা (Computing Terminologies)

িফিরি ৫.৬: ফলাফল ি য়ার মেলখ (Result Processing Program)


i n t prothom , d i t i y o , t r i t i y o ;

cout << " f o l a f o l n i r n o y e r kromolekho " << endl ;

cout << "− − − − − − − − − − − − − −" << endl ;

cout << " prothom p o r i k k h a i koto ? " ;


c i n >> prothom ;

cout << " d i t i y o p o r i k k h a i koto ? " ;


c i n >> d i t i y o ;

cout << " t r i t i y o p o r i k k h a i koto ? " ;


c i n >> t r i t i y o ;

cout << "− − − − − − − − − − − − − −" << endl ;

i n t f o l a f o l = prothom + d i t i y o + t r i t i y o ;

cout << " shorbo mot number holo " ;


cout << f o l a f o l << endl ;

৫.৮ গণনা পিরভাষা (Computing Terminologies)


• (formula) • বাম-মান (l-value)

• যাচনা (prompt) • ডান-মান (r-value)

• অদল-বদল (swap) • আ -শরণ (self-reference)

৫২
অধ ায় ৬

গািণিতক ি য়াকরণ
(Mathematical Processing)

গািণিতক ি য়াকরেণ রািশেত (expression) গািণিতক অণুি য়া (operator) ও িবপাতক


(function) সমুহ কী ভােব িহসাব করা হয় আমােদর তা জানেত হেব।

৬.১ এিকক অণুি য়া (Unary Operators)


িসিপিপেত এিকক (unary) অণুি য়ক ধনা ক (positive) + আর ঋণা ক (negative) − কী
ভােব কাজ কের? যথাযথ মেলখ িলেখ উদাহরণ সহ বুিঝেয় দাও। এিকক (unary) অণুি য়ক
(operator) একটা উপাদােনর (operand) ওপর যু হেয় ফলাফল উৎপ কের।
িফিরি ৬.১: পািটগিণেতর ধনা ক ও ঋণা ক (Arithmetic Positive Negative)
int a = 5; i n t const b = −9 ; / / a চলক b বক
cout << " +7 = " << +7 << " −7 = " << −7 << endl ;
cout << " +a = " << +a << " −a = " << −a << endl ;
cout << " +b = " << +b << " −b = " << −b << endl ;
cout << endl ;
cout << " + ( a∗b ) = " << + ( a∗b ) ; / / a∗b হল রািশ
cout << " −( a∗b ) = " << ( a∗b ) << endl ;
cout << " +abs ( b ) = " << +abs ( b ) ; / / abs ( ) িবপাতক
cout << " −abs ( b ) = " << −abs ( b ) << endl ;

ফলনাংশ (output segment)


+7 = 7 −7 = −7
+a = 5 −a = −5
+b = −9 −b = 9

+ ( a∗b ) = −45 −( a∗b ) = −45


+abs ( b ) = 9 −abs ( b ) = −9

৫৩
৬.২. িয়ক অণুি য়া (Binary Operators)

কান সংখ া, চলক (variable), বক (constant), িবপাতক (function), বা রািশর


(expression) সামেন ধনা ক িচ থাকেল তার য মান সিটই থােক, িক ঋণা ক িচ থাক-
ল তার িচ বদেল যায় অথাৎ আেগ ধনা ক থাকেল পের ঋণা ক হেয় যায় আর আেগ ঋণা ক
থাকেল পের ধনা ক হেয় যায়। চলক ও বক আেগই জােনা। িবপাতক (function) হেলা এমন
একটা িজিনস য িকছু যাগান (input) িনেয় িকছু ফলন (output) দয়। যমন cstdlib না-
মক িশর নিথেত (header file) abs(x) নােম একটা িবপাতক আেছ যিট একিট সংখ া যাগান
িনেয় তার িচ টু বাদ িদেয় কবল মানটু ফলন িহসােব ফরত দয়। অথাৎ abs(3) হেলা
3 আবার abs(−3)ও 3। একই ভােব abs(3.5) হেলা 3.5 আবার abs(−3.5)ও 3.5। রািশ
(expression) হল সংখ া, বক, চলক, অণুি য়ক, িবপাতক িমেল যখন একটা িজিনস তরী
হয় যার মান িহসাব করা যায় যমন 3 + x ∗ abs(y) একিট রািশ যখােন x আর y হল চলক।

৬.২ িয়ক অণুি য়া (Binary Operators)

িসিপিপেত িয়ক (binary) অণুি য়ক েলা যাগ +, িবেয়াগ −, ণ ∗, কী ভােব কাজ কের?
যথাযথ মেলখ িলেখ উদাহরণ সহ বুিঝেয় দাও। িয়ক অণুি য়ক (operator) েটা উপাদােনর
(operand) ওপর যু হেয় ফলাফল উৎপ কের।

িফিরি ৬.২: পািটগিণেতর যাগ িবেয়াগ ণ (Arithmetic Plus Minus Times)


cout << " 5 + 3 = " << 5 + 3 << endl ;
cout << " 5 . 1 + 3 = " << 5 . 1 + 3 << endl ;
cout << " 5 . 1 + 3 . 2 = " << 5 . 1 + 3 . 2 << endl ;
cout << endl ;

cout << " 5 − 3 = " << 5 − 3 << endl ;


cout << " 5 . 1 − 3 = " << 5 . 1 − 3 << endl ;
cout << " 5 . 1 − 3 . 2 = " << 5 . 1 − 3 . 2 << endl ;
cout << endl ;

cout << " 5 ∗ 3 = " << 5 ∗ 3 << endl ;


cout << " 5 . 1 ∗ 3 = " << 5 . 1 ∗ 3 << endl ;
cout << " 5 . 1 ∗ 3 . 2 = " << 5 . 1 ∗ 3 . 2 << endl ;
cout << endl ;

উপেরর মেলখাংশ (program segment) খয়াল কেরা। আর তার সােথ নীেচর ফল-
নাংশ (output segment) িমিলেয় নাও। ল কেরা আমরা িতনিট কের যাগ, িবেয়াগ, আর
ণ কেরিছ। যাগ, িবেয়াগ, বা ণ আমরা ভােলাই জািন, নতুন কের শখার িকছু নাই। তেব এক-
িট িবষয় খয়াল করেত হেব। সিট হেলা উপাে র ধরণ কমন? আর এ কারেণই আমরা িতিট
অণুি য়ার (operator) জে িতনিট কের উদাহরণ িনেয়িছ। িতিট অণুি য়ার উদাহরণ েলার
থম সািরেত খয়াল কেরা। সখােন উপাদান (operand) িহসােব আমরা েটা পূণেকর যাগ,
িবেয়াগ বা ণ কেরিছ, যমন 5 + 3, 5 − 3 আর 5 ∗ 3। ফলাফল িহসােব যা পেয়িছ তাও
একিট পূণক, যমন 8, 2, আর 15। এবার িতিট অণুি য়ার জ তৃতীয় সািরেত খয়াল কেরা।
সখােন উপাদান (operand) িহসােব আমরা েটা ভ ক যাগ, িবেয়াগ বা ণ কেরিছ, যমন 5.
1 + 3.2, 5.1 − 3.2 আর 5.1 ∗ 3.2। ফলাফল িহসােবও আমরা পেয়িছ একিট ভ ক যমন

৫৪
৬.৩. ভাগফল ও ভাগেশষ (Division and Remainder)

8.3, 1.9, আর 16.32। তারপর িতিট অণুি য়ার জ ি তীয় সািরেত খয়াল কেরা। উপাদান
িহসােব একিট ভ ক ও একিট পূণক যাগ, িবেয়াগ বা ণ করা হেয়েছ যমন 5.1 + 3, 5.1 −
3, আর 5.1 ∗ 3। আর ফলাফল এেসেছ একিট ভ ক যমন 8.1, 2.1, আর 15.3, য েলার
কানিটই পূণক নয়। উপাদান েটা একটা ভ ক হওয়ায় ফলাফলও ভ ক হেয় গেছ।
ফলনাংশ (output segment)
5 + 3 = 8
5.1 + 3 = 8.1
5.1 + 3.2 = 8.3

5 − 3 = 2
5.1 − 3 = 2.1
5.1 − 3.2 = 1.9

5 ∗ 3 = 15
5 . 1 ∗ 3 = 15 . 3
5 . 1 ∗ 3 . 2 = 16 . 32

তাহেল উপেরর আেলাচনা থেক আমরা দখলাম কান অণুি য়ার (operator) যিদ িট
উপাদানই (operand) একরকম হয় তাহেল ফলাফলও সই রকমই হয়। যমন উপাদান েটাই
int হেল ফলাফলও int; উপাদান েটাই float হেল ফলাফলও float। আর যিদ েটা উপাদান
রকম হয় যমন একিট পূণক বা int আর একিট ভ ক বা float তাহেল ফলাফল হেব ভ ক বা
float। গিণেত আমরা জািন পূণক সংখ া েলা একই সােথ ভ কও যমন 3 আসেল 3.0, িক
একিট ভ ক িক পূণক নাও হেত পাের যমন 5.1 ভ ক িক এেক পূণক িহসােব লখা স ব নয়।
আর এ কারেণ কান অণুি য়া (operator) েয়ােগর পূেব উপাদান (operand) েটা রকম
হেল থেম পূণকিটেক িভতের িভতের ভ েক পা র কের নয়া হয়, আর তারপর যাগ, িবেয়াগ
বা ণ করা হয় েটােক ভ ক িহসােব িনেয়ই। এই য িভতের িভতের পূণকিট ভ েক পা র করা
হয় এটা এক রকেমর উপা কারা র (type casting)। উপা কারা র িনেয় আমরা পের
আেরা িব ািরত জানেবা, আপাতত পূণক থেক ভ েক কারা র মেন রােখা।

৬.৩ ভাগফল ও ভাগেশষ (Division and Remainder)


িসিপিপেত িয়ক (binary) অণুি য়ক ভাগফল (division) ও ভাগেশষ (remainder) কী ভােব
কাজ কের? যথাযথ মেলখ িলেখ উদাহরণ সহ বুিঝেয় দাও। তুিম ইত মেধ জেনেছা িয়ক
অণুি য়ক (operator) েটা উপাদােনর (operand) ওপর যু হেয় ফলাফল উৎপ কের।
িফিরি ৬.৩: পািটগিণেতর ভাগফল অণুি য়া (Arithmetic Division Operation)
cout << " 13 / 5 = " << 13 / 5 << endl ;
cout << " 13 . 0 / 5 = " << 13 . 0 / 5 << endl ;
cout << " 13 / 5.0 = " << 13 / 5 . 0 << endl ;
cout << " 13 . 0 / 5.0 = " << 13 . 0 / 5 . 0 << endl ;

ভাগফেলর উপা করণ (data type) কমন হেব সই িনয়ম আসেল যাগ, িবেয়াগ, বা
েণর মেতা একই। যিদ েটা উপাদানই (operand) এক রকেমর হয় তাহেল ফলাফলও হেব

৫৫
৬.৩. ভাগফল ও ভাগেশষ (Division and Remainder)

সই রকেমরই। িক উপাদান েটার একিট যিদ হয় পূণক বা int আেরকিট ভ ক বা float


তাহেল ফলাফল হেব একিট ভ ক বা float। এখােনও িভতের িভতের int থেম float এ
কারা র (type casting) হেয় যােব, ভােগর কাজিট হেব উপা কারা র হবার পের। উপা
কারা র ছাড়াও ভােগর ে ভাগেশষ থাকেব িক থাকেব না সটার একটা ব াপার আেছ।
ফলনাংশ (output segment)
13 / 5 = 2
13 . 0 / 5 = 2.6
13 / 5.0 = 2.6
13 . 0 / 5.0 = 2.6

উপেরর ফলনাংশ ল কেরা, যিদ ভােগর উপাদান েটার যেকান একিটও ভ ক হয়, যমন
শেষর িতন সাির, তাহেল িক ভাগেশেষর কান ব াপার থােক না, ফেল আমরা সে ে ভাগফল
পাই 2.6। িক ভােগর ে যিদ েটা উপাদানই পূণক হয়, যমন থম সাির তাহেল ভাগিট
িক একটু আলাদা। যমন 13 / 5 করেল আমরা ফলাফল পাই 2 কারণ আমরা জািন এে ে
3 অবিশ থােক। ভােগর ে আেরা একিট পূণ িবষয় আেছ তা হেলা উপাদােনর পূণক -
লা ধনা ক না ঋণা ক। কারণ ঋণা ক সংখ ার ভাগ একটু িবটেকেল হেত পাের। সব িমিলেয়
পূণ সংখ ার ভাগ আেরা িব ািরত কের আমরা ভাগেশেষর সােথ িমিলেয় নীেচ আেলাচনা করেবা।
তেব একটা কথা মেন রাখেব ভােগর ে যিদ ভাজক হয় যমন 13 / 0 তাহেল তামার
মেলখ চালােনার (run) সময় divide by zero বা িদেয় ভাগ নােম িটবাতা (error
message) দিখেয় ব হেয় যােব। এই রকম িট সংকলেনর (compile) সময় ধরা পেড় না,
কবল চালােনার (run) সময় বা িনবাহ (execute) করার সময় ধরা পেড়, তাই এেদরেক বলা
হয় চলা-কালীন (run-time) বা িনবাহ-কালীন (execution-time) িট।
িফিরি ৬.৪: পািটগিণেতর ভাগেশষ অণুি য়া (Arithmetic Remainder Operation)
cout << " 13 / 5 = " << 13 / 5 << " ";
cout << " 13 % 5 = " << 13 % 5 << endl ;

cout << " 13 / −5 = " << 13 / −5 << " ";


cout << " 13 % −5 = " << 13 % −5 << endl ;

cout << "−13 / 5 = " << −13 / 5 << " ";


cout << "−13 % 5 = " << −13 % 5 << endl ;

cout << "−13 / −5 = " << −13 / −5 << " ";


cout << "−13 % −5 = " << −13 % −5 << endl ;

// নীেচর সাির েলা সংকলন ( compile ) হেব না , ভ েক ভাগেশষ হয় না


// cout << " 13 . 0 % 5 = " << 13 . 0 % 5 << endl ;
// cout << " 13 . 0 % 5 . 0 = " << 13 . 0 % 5 . 0 << endl ;
// cout << " 13 . 0 / 5 . 0 = " << 13 . 0 / 5 . 0 << endl ;

যাইেহাক সবেশেষ আমরা ভাগেশষ দিখ। ভােগর ে আমরা আেলাচনা কেরিছ ভ ক বা


float এর জ ভাগেশেষর কান ব াপার নই। কােজই ভাগেশষ অণুি য়ার (operator) উপা-
দান (operand) েটার য কান একিটও যিদ ভ ক হয়, তাহেল ভাগেশষ মাটামুিট অথহীন

৫৬
৬.৩. ভাগফল ও ভাগেশষ (Division and Remainder)

হেয় যায়। কােজই এমন িকছু আমােদর মেলখেত (program) িলখেল সংকলন (compile)
করার সময় িট (error) আসেব। নীেচর মেলখাংেশর শেষর িতনিট সাির দখেত পােরা য-
েলা টীকা িহসােব রাখা আেছ। ওই েলা টীকা না কের সামেনর // হলােনা দাগ েটা তুেল িদেল
মেলখেয়র অংশ হেয় যােব, আর তখন সংকলন করেল িট আসেব, কের দখেত পােরা।
একটা িবষয় খয়াল কেরেছা, এখােন আমরা িক টীকার (comment) হলােনা // িচ
েটার একরকেমর অপব বহার কেরিছ। উপেরর মেলখাংেশর শষ িতনিট সাির আসেল কান
ভােবই কৃত টীকা নয়। ও েলােতা বাংলায় বা ইংেরজীেত লখা নয়, ও েলা িসিপিপেত লখা
আর টীকা িচ তুেল িনেলই ও েলা মেলখেয়র অংশ হেয় যােব সহেজই। তবু কন এখােন আম-
রা ও েলােক টীকার িভতের রাখলাম? এটা আসেল একটা খুবই উপকারী কৗশল। টীকার িভতের
রাখেল যেহতু সটা মেলখেয়র িঠক অংশ থােক না, সংকলন হয় না, কান িট আসার ব াপার
নাই, আমরা তাই মােঝ মােঝ িকছু িকছু িসিপিপেত লখা অংশও টীকার িভতের রািখ। মেলখ
(program) লখার সময় আমরা নানান িকছু পরী া িনরী া কির, এভােব কির, ওভােব কির।
তখন য অংশ েলা ওই সময় দরকার নাই, চাইেল স েলা তা মুেছ ফলা যায়, িক মুেছ ফল-
লই তা তামােক পের আবার ক কের িলখেত হেত পাের। এমতাব ায় তুিম যিদ ওই অদরকারী
অংশটু েত টীকা িদেয় (commenting) দাও, ব স হেয় গেলা। কান ঝােমলা নাই, পের ওই
অংশটু আবার দরকার হেলই টীকা তুেল (uncomment) িনেব। কী চমৎকার কৗশল তাই না!
আমরা সবাই এিট হরদম ব বহার কির। এখন থেক এই কৗশল কােজ লাগােব, কমন!

ফলনাংশ (output segment)


13 / 5 = 2 13 % 5 = 3
13 / −5 = −2 13 % −5 = 3
−13 / 5 = −2 −13 % 5 = −3
−13 / −5 = 2 −13 % −5 = −3

এবাের ভাগেশেষর ফলাফেলর িদেক নজর দই। ভাগফল সহ আেলাচনার িবধার জ উপ-
রর মেলখাংশ (program segment) আর ফলনাংেশ (output segment) আমরা ভা-
গেশেষর সােথ সােথ ভাগফলও দিখেয়িছ। আমরা আেগই আেলাচনা কেরিছ ভাগেশষ করা যায়
কবল পূণেকর জ । ভাগ করেল যা অবেশষ থােক তাই ভাগেশষ। িক পূণক তা ধনা কও
(positive) হেত পাের, ঋণা কও (negative) হেত পাের। আসেল ঋণা ক সংখ ার ভাগেশষ
িনেয়ই যেতা জিটলতা সৃি হয়। ঋণা ক সংখ ার ভাগেশষ িনেয় নানান রকম িনয়ম আেছ, আম-
রা এখােন আেলাচনা করিছ cpp.sh এ য িনয়েম ভাগেশষ হয়, সটা িনেয়। তুিম য সংকলক
(compiler) িদেয় মেলখ সংকলন (compile) করেব, জেন িনও সখােন কমন হয়। কােরা
কােছ থেক জেন িনেত পােরা। অথবা িনেজই উপেরর মেলখাংশ (program segment) এর
মেতা কের মেলখ তরী কের চািলেয় দেখ িনেত পােরা। তমন কিঠন িকছু নয়।
যাইেহাক উপেরর ফলনাংশ খয়াল কেরা। সখােন িক কান ভ ক নই, সব েলাই পূণক,
তেব ধনা ক ও ঋণা ক আেছ। খয়াল কেরা ভাগফল ও ভাগেশষ উভয় ে কবল মানটা
পাওয়া যায় িচ িবেবচনা না করেল। যমন চারটা ব াপােরর সব েলােতই িচ বাদ িদেল ভাজক
(divisor) আর ভাজ (dividend) হয় কবল 5 আর 13। 13 ক 5 িদেয় ভাগ করেল ভাগফল হয়
2 আর ভাগেশষ হয় 3। এই পয সব েলা ব াপােরই িঠক আেছ, িক গালমাল বাঁেধ কবল িচ
িনেয়, ভাগফল বা ভাগেশষ কখন ধনা ক + হেব আর কখন ঋণা ক − হেব। ভাগফেলর ে
খয়াল কেরা যখনই সংখ া েটার িচ একই রকম তখন ভাগফল ধনা ক যমন থম ও চতুথ
সাির, আর যখনই তারা িবপরীত িচে র তখনই ভাগফল ঋণা ক যমন ি তীয় ও তৃতীয় সাির।
ভাগেশেষর ে িচ িনভর কের ভাজ (dividend) এর ওপর, ভাজেকর ওপর নয়। ভাজ
যখনই ধনা ক যমন 13, ভাগেশষ তখন ধনা ক + হেয়েছ। আর ভাজ যখন ঋণা ক যমন

৫৭
৬.৪. আেরাপণ অণুি য়া (Assignment Operator)

−13 তখন ভাগেশষ ঋণা ক − হেয়েছ। ভাগেশেষর িচ 5 বা −5 এর িচে র ওপর িনভর কের
নাই। একটা িবষয় আেগই বেলিছ, ভাগফল ও ভাগেশেষর ে ভাজক যিদ হয় তাহেল
তামার মেলখক চালােনার সময় divide by zero বা িদেয় ভাগ নােম িটবাতা দিখেয়
ব হেয় যােব। এই রকম িট সংকলেনর (compile) সময় ধরা পেড় না, কবল চালােনার (run)
সময় ধরা পেড়, তাই এেদরেক বলা হয় চলা-কালীন িট (run-time error)।
উপেরর উদাহরণ েলােত আমরা যিদও কবল সংখ াই সরাসির ব বহার কেরিছ, তুিম িক
চাইেল কান চলক (variable) বা বক (constant) ব বহার করেত পারেত। তুিম চাইেল কান
রািশ (expression) বা িবপাতক (function) ও ব বহার করেত পারেত। আসেল ডান-মান
(rvalue) আেছ এরকম য কান িকছুই এখােন ব বহার করা যেত পাের। এই আেলাচনা েলা
এিকক অণুি য়ার সময়ই আেলাচনা করা হেয়েছ, তবুও আবার বিল। িবপাতক (function) এমন
একটা িজিনস য িকছু যাগান (input) িনেয় িকছু ফলন (output) দয়। যমন cstdlib নামক
িশর নিথেত (header file) abs(x) নােম একটা িবপাতক আেছ যিট একিট সংখ া যাগান
িনেয় তার িচ টু বাদ িদেয় কবল মানটু ফলন িহসােব ফরত দয়। অথাৎ abs(3) হেলা
3 আবার abs(−3)ও 3। একই ভােব abs(3.5) হেলা 3.5 আবার abs(−3.5)ও 3.5। রািশ
(expression) হল সংখ া, বক, চলক, অণুি য়ক, িবপাতক িমেল যখন একটা িকছু তরী করা
হয় যার মান আেছ সিট, যমন 3 + x ∗ abs(y) একিট রািশ যখােন x আর y হল চলক।
i n t a = 4 , b = −3 ;
i n t const c = 5 ;

a + 3, c / b, b ∗ c; / / চলক , বক , সংখ া
a = c % abs ( b ) ; / / abs ( b ) হল িবপাতক
a = a − ( b ∗ c) ; / / b ∗ c হল রািশ

৬.৪ আেরাপণ অণুি য়া (Assignment Operator)


আেরাপেণ (assignment) চলেকর জ রিণেত (memory) বরা কৃত ােন মান ভের দয়ার
ব াপারটা আমরা আেগ দেখিছ। িক আেরাপণ আসেল একটা অণুি য়াও (operator) বেট।
আেরাপণ একটা অণুি য়া এই কথার মােন কী? আমরা আেরাপণ িনয়া কী কী করেত পারেবা?
আেরাপণ (assignment) একটা অণুি য়া (operator) এই কথার মােন হেলা আেরাপণ
িকছু উপাদােনর (operand) ওপর যু হেয় একিট ফলাফল উৎপ কের। সিত বলেত গেল
যাগ, িবেয়াগ, ণ বা ভােগর মেতা আেরাপণও আসেল একটা িয়ক (binary) অণুি য়া। কােজই
এিট িট উপাদােনর (operand) ওপর যু হয়। আেরাপেণর বাম পােশ একটা উপাদান থােক
যার বাম-মান থাকেত হেব অথাৎ যার জ রিণেত (memory) জায়গা বরা থাকেত হেব,
যমন চলক। আর আেরাপেণর ডােন থাকেত হেব এমন িকছু যার ডান-মান বা মান আেছ, যমন
চলক (variable), বক (constant), িবপাতক (function) বা রািশ (expression)। কথা
হে আেরাপেণর ফেল উৎপ হওয়া ফলাফলটা কী? আসেল য মানিট আেরাপেণর বামপােশর
চলেক আেরািপত হয় সই মানিটই আেরাপণ অণুি য়ার ফলাফল িহসােবও িবেবচনা করা হয়।
int v = 3 , w = −5 , x , y , z ; / / ভ কও নয়া যেত পাের
x = v + 5; / / চলক x এর মান 8 , আেরাপেণর ফলাফলও 8
y = abs (w) ; / / চলক y এর মান 5 , আেরাপেণর ফলাফলও 5
z = x + y; / / চলক z এর মান 13 , আেরাপেণর ফলাফলও 13

৫৮
৬.৫. যৗিগক আেরাপণ (Compound Assignment)

উপের মেলখাংেশ v + 5 বা 3 + 5 অথাৎ 8 আেরািপত হেয়েছ x এ। তারপর, abs(w)


িবপাতক w বা −5 এর মান হেত িচ ছাড়া 5 ফরত িদেয়েছ যা আেরািপত হেয়েছ y চলেক। আর
শেষ x + y বা 8 + 5 অথাৎ 13 আেরািপত হেয়েছ z চলেক।
তাহেল অ া অণুি য়ার মেতা আেরাপণ অণুি য়ারও যেহতু একিট ফলাফল আেছ কােজই
সই ফলাফলিট অ কান চলক যার বাম-মান আেছ তােত আবারও আেরাপন করা স ব!
int v = 3, w = −5 , x , y , z ; / / ভ কও নয়া যেত পাের
x = ( v + w) ; / / যাগ অণুি য়ার ফলাফল একিট চলেক আেরাপণ
z = (y = x) ; // ডােনর আেরাপেণর ফলাফল বােমরিটেত আেরাপণ
z = v ∗ w; / / ণ আেগ হেব , ণফল আেরাপণ তারপের হেব
z = y = x; // ডােনর আেরাপন আেগ , সই ফল িনেয় বােমর আেরাপন

তরাং কউ যমন অেনক েলা যাগ পরপর িলখেত পাের x + y + z + 3, িঠক তমিন
চাইেলই কউ অেনক েলা আেরাপণও পরপর িলখেত পাের যমন z = y = x = w। তেব কান
ব নী নাই ধের িনেল, যােগর ে সাধারণত সবেচেয় বােমর যাগিট থেক হেয় যাগ েলা
পরপর বাম থেক ডােন এেক এেক হেত থােক। আর আেরাপেণর (assignment) এর ে
সবেচেয় ডােন আেরাপণ হেত কের আেরাপণ েলা ডান থেক বােম এেক এেক হেত থােক।
int x = 1 , y = 2 ; z = 3 ; / / আিদ মান আেরাপণ

x + ( y = 3) ; / / y হেলা 3 , ফলাফল 1 + 3 বা 4
y = x + ( z = 4 ) ; / / z হেলা 4 , y হেলা 1 + 4 বা 5
z = 5 + ( y = z −3 ) ; / / y হেলা 4 − 3 বা 1 , z হেলা 5 + 1

উপেরর উদাহরেণর শষ িতনিট সাির খয়াল কেরা। চলক ঘাষনার পেরর সািরর িববৃিতেত
(statement) x + (y = 3) ; থেম ব নীর িভতের y এর মান 3 আেরাপণ (assign) হেব
আর আেরাপেণর (assignment) ফলাফলও হেব 3, যা x এর মান 1 সােথ যাগ হেয় যাগফল
হেব 4। এই 4 হেলা পুেরা রািশিটর মান। এরপেরর িববৃিতেত y = x + (z = 4) ; থেম ব নীর
িভতের z এর মান আেরাপ হেব 4 আর ফলাফল ও 4, আর তারপর 4 ও x এর মান 1 এর সােথ
যাগ হেয় হেব 5 যা িগেয় y চলেক আেরািপত হেব। এবাের আিস শষ িববৃিতেত z = 5 + (y
= z −3); থেম ব নীর িভতের z − 3 িহসাব হেব, z এর মান িঠক আেগর সািরেত হেয়েছ 4
সােথ 3 িবেয়াগ হেল হয় 1 যা y এ আেরািপত হেব আর আেরাপেণর ফলাফলও (result) হেব 1।
এরপর সই 1 আর 5 যাগ হেয় ফল হেব 6 যা z এর িভতের আেরািপত হেব।

৬.৫ যৗিগক আেরাপণ (Compound Assignment)


যৗিগক আেরাপণ (compound assignment) কী? িসিপিপেত যৗিগক আেরাপণ কী ভােব
আেরাপেণর সােথ অ একিট অণুি য়ার (operator) যাজন (composition) ঘটায়? আ -
শরণ (self referential) আেরাপেণর সােথ যৗিগক আেরাপেণর স ক কী?
যৗিগক আেরাপন হেলা আেরাপেনর সােথ আর একিট অণুি য়ার যাজন (composition)।
আেরাপন = এর সােথ যাগ + এর যাজন ঘটােনার ফেল নতুন য অণুি য়ক তরী হয় সিট যাগ-
আেরাপণ +=। একই ভােব আেরাপন = ও িবেয়াগ − যু হেয় তরী হয় িবেয়াগ-আেরাপণ −=,
তারপর একই ভােব ণ আেরাপণ ∗=, ভাগফল আেরাপণ /= আর ভাগেশষ আেরাপণ %=।

৫৯
৬.৬. াস ও বৃি অণুি য়া (Increment and Decrement)

x += 13 ; // এর মােন আসেল x = x + 13 ;
x −= 7; // এর মােন আসেল x = x − 7 ;
y ∗= x; // এর মােন আসেল y = y ∗ x ;
z /= x + y; // এর মােন আসেল z = z / ( x + y ) ;
z %= abs ( 3 ) ; // এর মােন আসেল z = z % abs ( 3 ) ;

তাহেল উপেরর উদাহরণ েলা থেক দখা যাে িতিট যৗিগক আেরাপণ আসেল এক এক-
িট আ -শরণ আেরাপন (self-referential assignment)। যৗিগক আেরাপেণর বাম পােশ
য চলকিট থােক সিটর মােনর সােথ সংি পািটগিণতীয় অণুি য়া যমন যাগ, িবেয়াগ, ণ,
ভাগফল, বা ভাগেশষ িহসাব করা হয়, আর তারপর ফলাফলিট ওই চলকিটেতই আেরাপ করা হয়।
আসেল যৗিগক আেরাপণ েলা মেলখ রচনার সময় ক ফ িকি ত কমােনার জ তরী করা
হেয়েছ। অেনক সময় আেরাপেনর বাম পােশ যিট থাকেব সিট সহজ সরল চলক না হেয় অ িকছু
হেত পাের যিট হয়েতা খুবই বড়, সিটর অব ই বাম-মান (l-value) আেছ অথাৎ তার জ র-
িণেত (memory) জায়গা দখল করা আেছ। যমন ধেরা নীেচর উদাহরেণ আমরা সাজন (array)
ব বহার করিছ, ণী (class) ব বহার করিছ, এ েলা কী এখনই তা জানেত চেয়া না, আমরা পের
িব ািরত কের িশখেবা ও েলা। খািল খয়াল কেরা থম সািরেত কী ভােব ল া একটা িজিনস
আেরাপ = িচে র বাম ও ডান উভয় পােশই আেছ। আর খয়াল কেরা শেষর সািরর িববৃিতিট:
যৗিগক আেরাপণ ব বহার কের ওই একই িবষয় কত চমৎকার কের সংে েপ লখা গেছ।
t h i s−>amarSajonCholok [ suchok ] =
t h i s−>amarSajonCholok [ suchok ] + amarbriddhi ;

t h i s−>amarSajonCholok [ suchok ] += amarbriddhi ;

তাহেল দখেল তা একই িজিনস আেরাপ = িচে র বাম পােশ একবার আবার পর েণই
আেরাপ = িচে র ডানপােশও একবার িলখেত হেব, এিট বশ িবরি কর, আর দখেতও কত
িবরি কর লােগ। তারেচেয় যৗিগক আেরাপণ সংি আর বুঝাটাও সহজ। ফলাফেলর িহসােব
উভয় ে িক আমরা একই ফলাফল পােবা। তেব মেন রেখা মেলখ (program) চালােত
সময় কম লাগেব নািক বশী লাগেব সইে ে িক যৗিগক আেরাপেণর কান ভুিমকা নই।

৬.৬ াস ও বৃি অণুি য়া (Increment and Decrement)

িসিপিপেত লখা মেলখেত (program) আমরা ++ বা −− ায়ই দখেত পাই। এই েলা কী?
একটা যাগ বা িবেয়াগ িচ দেখিছ িক েটা যাগ বা িবেয়াগ একসােথ তা আজব ব াপার!
েটা যাগ বা িবেয়াগ এক সােথ দয়ার িবধা-অ িবধা কী? মেলখ িক এেত ত চেল?
int x = 6 , y ; / / েটা চলক একটার আিদমান আেছ , আেরকটার নাই
++x ; / / এক বেড় x হেলা 7 , y জািননা কারণ আিদমান নই
x++ ; / / এক বেড় x হেলা 8 , y জািননা কারণ আিদমান নই
y = ++x ; / / এক বেড় x হেলা 9 , তারপর y এ 9 আেরািপত হেলা
y = x++ ; / / থেম y হেলা x এর সমান বা 9 , পের x হেলা 10

উপেরর মেলখাংশ (program segment) খয়াল কেরা। েটা চলক (variable) নয়া
হেয়েছ x আর y। চলক x এর আিদমান (initial value) দয়া হেয়েছ 6, িক y এর আিদ মান দ-

৬০
৬.৬. াস ও বৃি অণুি য়া (Increment and Decrement)

য়া হয় িন। এরপর ি তীয় আর তৃতীয় িববৃিতেত রেয়েছ ++x; আর x++;, খয়াল কেরা উভয় ে
x এর মান এক কের বেড়েছ, এ কারেণ অব ++ ক বলা হয় বৃি অণুি য়ক (increment
operator)। বৃি অণুি য়ক ++ চলেকর আেগই দয়া হউক আর পেরই দয়া হউক ফলাফল িক-
একই। অব বৃি ++ আেগ ব বহার করেল এিটেক পূব-বৃি (pre-increment) আর পের
ব বহার করেল এিটেক উ র-বৃি (post-increment) বলা হয়।
তেব বেল রািখ বৃি অণুি য়েকর (increment operator) সােথ িক এমন িকছু ব ব-
হার করেত হেব যার বাম-মান (l-value) রেয়েছ অথাৎ রিণেত (memory) জায়গা দখল করা
আেছ। চলেকর (variable) যেহতু বাম-মান আেছ তাই আমরা চলক x ব বহার করেত পার-
লাম। িক তুিম যিদ চাও ++3 বা 3++ িলখেব যােত 4 পাওয়া যায় অথবা িলখেব (x+3)++ বা
++(x+3), তা িলখেত পারেব না, সংকলন (compile) িট হেব। িট হওয়ার কারণ 3 সংখ া
(number) বা x+3 রািশর (expression) ডান-মান (r-value) তথা মান (value) আেছ িক-
তােদর বাম-মান (l-value) তথা রিণেত (memory) জায়গা দখল করা নই। দরকার নই
তবুও বেল রািখ, তুিম িক ++ এর সােথ চলক x এর বদেল বক (constant) জাতীয় িকছু তা
এমিনেতই ব বহার করেত পারেব না, কারণ বেকর তা মান বদলােনা যায় না।
যাইেহাক ++ আেগই দই আর পেরই দই ++x বা x++ আসেল x+=1; অথাৎ x = x+1;
এর সমতুল এবং সংি প বলেত পােরা। ল কেরা বৃি েত ++ য 1 বৃি ঘেট সই ব াপারটা
িক উ থােক। ফেল ++ কবল একটা উপাদােনর (operand) ওপর যু হয় বেল মেন হয়।
আর তাই ++ ক একিট এিকক (unary) অণুি য়ক (operator) বলা হয়। কথা হে এই এিকক
অণুি য়ার ফলাফলটা কী? ফলাফল তা আমরা আেগই দেখিছ, মান এক বেড় যাওয়া। সটা
িঠক, িক তাছাড়াও বৃি অণুি য়ার (increment operator) ফলাফেল িকছু পূণ িবষয়
আেছ য কারেণ পূব-বৃি (pre-increment) আর উ র-বৃি (post-increment) আলাদা।
পূব-বৃি (pre-increment) আর উ র বৃি (post-increment) য আলাদা তা পির ার
হেব উপেরর মেলখাংেশর (program segment) শেষর সাির েটা দখেল। যখন y = +
+x; করা হেয়েছ তখন x এর মান আেগ বেড় হেয়েছ 9 আর তারপর xএর সই বেড় যাওয়া মান
9ই y এ আেরািপত (assign) হেয়েছ। িক যখন y = x++; তখন িক খয়াল কেরা আেগ x
এর মান y এ আেরািপত হেয়েছ ফেল y হেয়েছ 9 আর তারপর x এর মান বেড়েছ 1 ফেল হেয়েছ
10। আ া y = ++x; আর y = x++; এ েটােক যিদ আমরা বৃি ++ ব বহার না কের িলখতাম
তাহেল কমন হেতা? আমােদর অব ই েটা কের িববৃিত িলখেত হেতা। নীেচ ল কেরা y = +
+x; এ আেগ মান বাড়ােনা পের আেরাপণ, আর y = x++; এ আেগ আেরাপণ পের মান বাড়ােনা।
আশা করা যায় পূব-বৃি (pre-) ও উ র-বৃি র (post-increment) তফাৎ পির ার হেয়েছ।
x = x + 1; // y= ++x ; এ x এর মান বৃি আেগ ঘটেব
y = x; // y= ++x ; এ y ত x এর মান আেরাপন পের

y = x; // y= x++ ; এ y ত x এর মান আেরাপন আেগ


x = x + 1; // y= x++ ; এ x এর মান বৃি তার পের

পূব-বৃি (pre-increment) আর উ র-বৃি র (post-increment) আেরা একটা পাথ-


ক ও জানা দরকার অব । সটা হেলা পূব-বৃি র ফলাফল আসেল একটা বাম-মান (l-value)
এে ে চলকিটর বাম-মান, অ িদেক উ র-বৃি র ফলাফল আসেল একটা ডান-মান (r-value)।
আেগই বেলিছ বৃি অণুি য়ার সােথ ব ব ত উপাদােনর (operand) অব ই বাম-মান থাকেত
হেব। ফেল উ র-বৃি র ফলাফেলর ওপের আবার কান বৃি ই চালােনা যায় না, িক পূব-বৃি র
ফলাফেলর ওপর চালােনা যায়। তুিম যিদ পরী া করেত চাও তাহেল ++++x; বা (++x)++; চ-

৬১
৬.৭. িবিত অণুি য়া (Comma Operator)

া কেরা, সংকলন (compile) হেয় যােব, িক x++++ বা ++(x++) চ া কেরা, সংকলন হেব
না, িট (error) আসেব পেরর বৃি টার জ "l-value required"। তুিম যিদ ফ ++x++;
িলেখা, এটা িক সংকলন হেব না, িট দখােব, কারণ হেলা পূব ও উ র বৃি র মেধ উ র বৃি র
অ গণ তা (precedence) আেগ, ফেল ++x++ আসেল ++(x++) এর সমতুল। অ গণ তার
েমর (precedence order) িনয়ম েলা আমরা পেরর এক পােঠ িব ািরত জানেবা।
এবাের আমরা বৃি ব বহাের মেলখেয়র গিতর ওপর ভাব িনেয় একটু আেলাচনা কির।
বৃি (increment) ++x বা x++ সাধারণত x+=1 বা x=x+1 এর চেয় তগিতর, এর কারণ
মুলত একদম য পযােয় x++ বা ++x িবেশষ ভােব িনবািহত হয় িক x+=1 বা x=x+1 সাধারণ
যােগর মেতা কের িনবািহত হয়। সাধারণেতা পূব-বৃি (pre-increment) আর উ র-বৃি র
(post-increment) মেধ পূব-বৃি ত গিতর। কারণ হেলা, উ র-বৃি র ফলাফল যেহতু x এর
মান বৃি করবার আেগর মান, তাই ওই আেগর মানিট থেম কাথাও ণ ায়ী (temporarily)
ভােব রেখ িদেত হয়, আর x এর মান বৃি টা তারপর ঘেট, আর তারপর ণ ায়ী ভােব রাখা মানটা
ফলাফল িহসােব আেস যিট y = x++; এর ে y এ আেরািপত হয়। িক পূব-বৃি র ে মান
বৃি আেগ ঘেট আর ফলাফলটাও সই বৃি া মানই, কােজই ণ ায়ী ভােব আেগর মান রেখ
দওয়ার কান বাঝা (overhead) এখােন নই। মাটকথা পূব-বৃি সরাসির বাম-মােনর ওপরই
কাজ কের অথাৎ ++x এ সরাসির চলকটার ওপরই কাজ কের, আর কান ণ ায়ী িকছু দরকার
হয় না। এ কারেণ পূব-বৃি ++x; উ র-বৃি x++; এর চেয় বশী তগিতর হেয় থােক। কােজই
তুিম পারেতা পে ++x ব বহার করেব, x++ ব বহার করেব না।
মেলখেত বৃি ব বহাের এবাের একটা পরামশ দই। পূব-বৃি ও উ র-বৃি িনেয় অেনক
রকম খলা যায়, যমন তুিম চাইেল x = (++x)++ + ++x; এর মেতা অেনক েলা + িচ িদেয়
িকছু একটা িলখেত পােরা। এই রকম জিটল িববৃিত েলা হয়েতা সংকলন (compile) হেব। এর
ফেল ফলাফলও িকছু একটা আসেব, যটা চাইেল বুঝা স ব, িক বুঝেত গেল মাথা বশ গরম
হেয় যায়। আমার পরামশ হেলা এইরকম জিটল িববৃিত পারেতা পে লখেব না। সবসময় এমন
ভােব সংেকত (code) িলখেব যােত পের তুিম বা অ কউ তমন কান ক ছাড়াই তামার
সংেকত দেখ বুঝেত পাের। মেন রাখেব সংেকত যত জিটল, তার ভুল বর করাও তত কিঠন।
উপেরর পুেরা আেলাচনােত আমরা কবল বৃি (increment) িনেয় আেলাচনা কেরিছ। আস-
ল াস (decrement) −− িনেয় আেলাচনাটা একদম একই রকম। আমরা তাই পুনরাবৃি কর-
বা না। কবল জেন রােখা ােসর (decrement) ফেল মান 1 কেম যায়। তাই −−x বা x−−
হেলা x −= 1 বা x = x − 1 এর সমতুল। আমরা −−x ক পূব াস (pre-decrement) আর
x−− ক উ র- াস (post-decrement) বিল। পূব- ােসর তুলনায় উ র- ােসর অ গণ তা
(precedence) বশী। গিতর িদক িবেবচনায় পূব- াস, উ র- ােসর চেয় য়তর।

৬.৭ িবিত অণুি য়া (Comma Operator)


িসিপিপেত িবিত অণুি য়া (comma operator) কেয়কিট রািশ (expression) ক এক সােথ
পরপর লখায় সাহায কের। িবিত (comma) অণুি য়ার বামপােশর উপাদােনর (operand)
মান সব সময় নথক (void) হয় আর উেপি ত হয়। এর অথ হে ডান পােশর উপাদানিটর
(operand) মানই িবিত অণুি য়ার (comma operator) ফলাফল হয়।
একটা উদাহরণ দিখ x = (y=3, y+1); এই িববৃিতর ফেল ব নীর িভতের থেম িবিতর
বাম পােশর রািশ িহসােব y এর মান আেরািপত (assign) হেব 3। যিদও আেরাপেনর কারেণ
আমরা y এ 3 আেরাপেণর পাশাপািশ ফলাফলও পাই 3, িক িবিতর (comma) কারেণ সই

৬২
৬.৮. অ গণ তার ম (Precedence Order)

ফলাফল বাদ িগেয় ফলাফল হেয় যােব নথক (void)। যাইেহাক এরপর িবিতর (comma) ডান
পােশর রািশ িহসােব y+1 এর মান 3+1 বা 4 হবপ যিট আসেল যােগরও + ফলাফল। আর
যােগর এই ফলাফল 4 ই শষ পয x চলেক আেরািপত হেব। এখােন ব নী দরকার কারণ িবিত
(comma) , সাধারণত আেরাপণ (assignment) = এর পের িহসাব করা হয়। আমরা ব নীর
িভতেরর আেরাপণিট y = 3 িবিতর (comma) আেগ করেত চাইেলও ব নীর বাইেরর চলক x এ
আেরাপণিট িবিতর পের করেত চাই, আর এ কারেণ ব নী জ রী। ব াপারিট আেরা পির ার বুঝেত
চাইেল একই িজিনস ব নী ছাড়া কী হেব দেখা x = y = 3, y + 1;। এখােন েটা আেরাপণই
(assignment) িবিতর (comma) আেগ িনবািহত (execute) হেব। ফেল থেম y এর মান
আেরািপত হেব 3, তারপর x এও মান 3ই আেরািপত হেব, তারপর y+1 িহসাব হেব 4। এই 4
িবিতর ফলাফল হেলও সিট িক এখােন িকছুেত আেরািপত হয় িন।
িবিত (comma) অণু্ি য়া (operator) িহসােব ব বহার হেলও এর আেরা নানান ব বহার
আেছ িসিপিপেত। যমন একািধক চলক (variable) একসােথ ঘাষণা (declare) করেত আমরা
িবিত (comma) িদেয় িলিখ int x, y, z = 3; িবিতর (comma) এই রকম ব বহার আসেল
অণুি য়া িহসােব নয়, বরং তািলকার পৃথকী (separator) িহসােব ব বহার। আমরা যখন পের
ম-ঘূণী (for-loop) ও পরািমিত (parameter) িনেয় আেলাচনা করেবা তখনও তািলকা পৃথকী
(list separator) িহসােব িবিতর (comma) ব বহার দখেত পােবা।

৬.৮ অ গণ তার ম (Precedence Order)


অ গণ তার ম (precedence order) কী? িসিপিপেত এ পয পিরিচত হওয়া অণুি য়া -
লার (operator) অ গণ তার ম (precedence order) আেলাচনা কেরা।
ধেরা তুিম 3 + 4∗5 + 6 এর মান িহসাব করেব। আেগকার িদেন এক রকম স া কলিন
(calculator) পাওয়া যেতা যিট করেতা কী, বাম থেক িহসাব করেতা এেকর পর এক। ফেল
সটা থম 3 ও 4 যাগ কের 7 বর করেতা, তারপর তার সােথ 5 ণ কের বর করেতা 35 আর
শেষ তার সােথ 6 যাগ কের ফল িদেতা 41। তুিম চাইেল উে া আেরক রকেমর অব া ভাবেত
পােরা, যখােন ডান িদক থেক এেকর পর এক িহসাব হেব। তরাং 5 ও 6 যাগ কের 11, তার-
সােথ 4 ণ কের 44, শেষ 3 যাগ কের 47। িক ছাটেবলা থেক সরেলর িনয়ম আমরা িশেখ
এেসিছ: ণ আেগ হেব যাগ পের হেব। আমরা তাই িহসাব কির 4 ও 5 এর ণ আেগ ফল 20
তার সােথ বােমর যাগ আেগ, তাই 3 আেগ যাগ হেলা 23, শেষ ডােনর যাগ তাই 6 যাগ কের
হেলা 29, যটােক আমরা সিঠক িহসাব বেল ধের নই। এই য বাম থেক ডােন বা ডান থেক
বােম িহসাব না কের ণ যােগর আেগ করেত হেব, আবার েটা যাগ পর পর থাকেল বােমর যাগ
আেগ করেত হেব। এই িনয়ম েলােক অ গণ তার ম(precedence order) বলা হয়।
সরল অংেক অ গণ তার ম িছল: ব ণী, এর, ভাগ, ণ, যাগ, িবেয়াগ। সেবেচেয় িভ-
তেরর ব নী সেবেচেয় আেগ। ভাগ আর ণ আসেল বাম থেক যটা আেগ আেস। একই ভােব
যাগ ও িবেয়াগ বাম থেক যটা আেগ আেস। িসিপিপেত আমরা এ পয অেনক েলা অণুি য়ার
(Operator) সােথ পিরিচত হেয়িছ। এ েলা হেলা এিকক + − ++ −− িয়ক + − ∗ / % =
+= −= ∗= /− %= , তা এেদর মেধ এিকক অণুি য়ার ম সবার আেগ, তারপর িয়ক অণু-
ি য়া েলার ম। আমরা আপাতত কবল এ েলার অ গণ তার ম (precedence order)
িবেবচনা করেবা। অ া অণুি য়া ও তােদর ম স েক আমরা পের জানেবা।

১. ++ −− ২িট এিকক অণুি য়া (unary operator) উ র-বৃি ও উ র- াস (post-


increment and post-decrement) x++, x−− এরা বাম-মােনর (l- value) ওপ-
র যু হেয় ডান-মান (r-value) ফল দয়। ফেল x++++ বা x−−−− করা যায় না।

৬৩
৬.৮. অ গণ তার ম (Precedence Order)

২. ++ −− + − ৪িট এিকক অণুি য়া (unary operator) পূব-বৃি (pre-increment)


++x ও পূব- াস (pre-decrement) −−x এরা বাম-মােনর (l-value) ওপর যু
হেয় বাম-মানই ফল দয়। ফেল ++++x বা −−−−x করা যায়, আর সেবেচেয় ডােনর
++ বা −− আেগ যু হয়। (পূব) এিকক অণুি য়া (unary operator) +x ধনা ক
(positive) −x আর ঋণা ক (negative) এরা ডান-মােনর (r-value) ওপর যু
হেয় ডান-মানই দয়। ফেল + + x বা − − x করা স ব, খয়াল কেরা েটা + বা েটা
− এর মেধ ফাঁকা িদেত হেয়েছ না হেল ও েলা বৃি বা াস িহসােব িচি ত হেয় যােব।

৩. ∗ / % ৩িট িয়ক অণুি য়া (binary operator) এরা িট ডান-মােনর (r-value)


উপাদােনর (operand) ওপর যু হেয় ডান-মানই ফল দয়। এই অণুি য়া েলা পরপর
অেনক েলা থাকেল বাম থেক ডােন এেক এেক িহসাব হেত থােক। যমন 10 / 2 ∗ 4
% 6 এ বাম থেক ডােন থেম ভাগফল, তারপর ণফল, তারপর ভাগেশষ িহসাব হেব।

৪. + − ২িট িয়ক অণুি য়া (binary operator) এরা িট ডান-মােনর (r-value) উপা-


দােনর (operator) ওপর যু হেয় ডান-মানই ফল দয়। এই অণুি য়া েলা পরপর
অেনক েলা থাকেল বাম থেক ডােন এেক এেক িহসাব হেত থােক। যমন 10 − 2 + 5
এ বাম থেক ডােন থেম িবেয়াগফল, তারপর যাগফল িহসাব হেব।

৫. = += −= ∗= /= %= এই সব িয়ক অণুি য়া (binary operator) আেরাপণ েলার


(assignment) বামপােশ এমন িকছু থাকেত হেব যার বাম-মান (l-value) আেছ, আর
ডান পােশ এমন িকছু থাকেত হয় যার ডান-মান (r-value) আেছ। এই অণুি য়া েলা
পরপর অেন েলা থাকেল ডান থেক বােম এেক এেক িহসাব হেত থােক। যমন x += y
= z ∗= 3 ত থেম ডােনর ∗= এর কারেণ z এর সােথ 3 ণ হেব, তারপর মােঝর =
এর কারেণ z এর মান y আেরািপত হেব, শেষ y এর মান x এর সােথ যাগ হেব।

৬. , িবিত (comma) একিট িয়ক অণুি য়া (binary operator) যিটর ফলাফল কবল
ডানপােশর উপাদান (operand)। বাম পােশর উপাদানিট িহসাব হয়, িক তার ফলাফল
হেব নথক (void)। এই অণুি য়া একািধক পরপর থাকেল, বাম থেক ডােন এেক এেক
িহসাব হেত থােক। যমন x + 2, y ∗ 3, z / 4 থেম যাগ হেব, তারপর ণ আর
শেষ ভাগ, ফলাফল হেব একদম ডােনর ভাগফলিটই।

েটা একই বা একই েমর অণুি য়া পরপর থাকেল কান পােশরিট আেগ হেব এইিট িন-
ধারণ কের দয়ােক বলা হয় সহেযাজ তা (associativity)। যমন x−y−z থাকেল আমােদর
থেম বােমর িবেয়াগ করেত হেব, তারপর ডােনর িবেয়াগ, কােজই িবেয়াগ হল বাম সহেযাজ
(left associative) অথাৎ x − y − z আর (x −y) − z একই। খয়াল কেরা িবেয়াগ িক
ডান সহেযাজ (right associative) নয় কারণ x − y − z আর x − (y − z) এক নয়। যাগ
আবার বাম ও ডান উভয় সহেযাজ কারণ x + y + z, (x + y) + z ও x + (y + z) একই।
সাধারণত উভয় সহেযাজ েদর ে িবধােথ তােদর বাম-সহেযাজ িহসােব িবেবচনা করা হয়।
উপেরর তািলকায় আেলািচত অণুি য়া েলার ে একই রকম অণুি য়া পরপর থাকেল কান
পােশরিট আেগ হেব, সটাও িক আেলাচনা করা হেয়েছ। সখান থেক বুঝেতা পােরা কান অণু-
ি য়া বাম সহেযাজ (left associative), আর কানিট ডান সহেযাজ (right associative)?
সেবেশেষ একটা পূণ িবষয় মেন রাখেব ব নী ( ) এর শি িক সবেচেয় বশী। য
কান ােন কান রকেমর ি ধা থাকেল সখােন ব নী ব বহার কের ি ধা পির ার করেব। অণু-
ি য়া েলার (operator) অ গণ তার ম (precedence order) ব বহার কের নানা রকম
জিটল জিটল িববৃিত ও রািশ (statement and expression) তরী করা যায়, য েলা ম

৬৪
৬.৯. গািণিতক সম া (Mathematical Problems)

িবেবচনায় িনেয় বুঝেত গেল মাথা গরম হেয় যেত পাের, ভুল হেল বর করা কিঠন হেয় যােব।
কােজই আমার পরামশ হে তামার িববৃিত বা রািশ অব ই সহেজ পাঠেযাগ হেত হেব, আর
এ কােজ যত দরকার ব নী ব বহার করেব। যমন ধেরা x += y − z এর চেয় x += (y − z)
বুঝা আমােদর জ বশী সহজ, কারণ এেত একদম পির ার িবেয়াগ আেগ হেব।

৬.৯ গািণিতক সম া (Mathematical Problems)


ি মাি ক ানা ব ব ায় (two dimensional coordinate system) িট িব র ানা
যাগান (input) িনেয় তােদর মােঝ দূর ফলন (output) িহসােব দখাও। ধেরা ানা েলা
ভ েক দয়া আেছ। তামার িন য় জানা আেছ য েটা িব র (x1 , y1 ) ও (x2 , y2 ) দূর হেলা

(x1 − x2 )2 + (y1 − y2 )2 অথাৎ ভুজ েয়র দূরে র বগ ও কািট েয়র দূরে র বেগর যা-
গফেলর বগমূল। বগমূল িনণেয়র জ cmath িশর নিথ (header file) থেক sqrt িবপাতক
ব বহার কেরা। আর বগ িনণেয়র জ তামােক একই িজিনস ইবার ণ করেত হেব।
িফিরি ৬.৫: িট িব র মেধ র দূর (Distance Between Two Points)
/ / নীেচর িশর নিথ main িবপাতেকর বাইের অ ভু কেরা

#i n c l u d e <cmath> // বগমূল িনণেয়র জ s q r t িবপাতক লাগেব

/ / নীেচর অংশ main িবপাতেকর িভতের return এর আেগ িলেখা

f l o a t x1 , y1 , x2 , y2 ; / / ানা েটা ( x1 , y1 ) , ( x2 , y2 )

cout << " prothom bindur x y : " ; / / যাগান যাচনা


c i n >> x1 >> y1 ; / / থম িব যাগান
cout << " d i t i y o bindur x y : " ; / / যাগান যাচনা
c i n >> x2 >> y2 ; / / ি তীয় িব যাগান

f l o a t xd = abs ( x1 − x2 ) ; / / ভুজ িটর দূর


f l o a t yd = abs ( y1 − y2 ) ; / / কািট িটর দূর

f l o a t dd = s q r t ( xd ∗ xd + yd ∗ yd ) ; / / দূর িহসাব কেরা


cout << " bindu dutor durotto : " << dd << endl ; / / ফলন

উপেরর মেলখ খয়াল কেরা। খুবই সাদামাটা। থেম main িবপাতেকর বাইের cmath
িশর নিথ অ ভু করেত হেব বেল দখােনা হেয়েছ। তারপর main িবপাতেকর িভতের িব
েটার ভুজ ও কািট ধারণ করার জ চারিট float ধরেনর ভ ক চলক (variable) নয়া হেয়-
ছ। এরপর যাগান যাচনা (input prompt) িদেয় িব েটার ানা যাগান (input) নয়া
হেয়েছ। তারপর ভুজ েয়র দূর abs(x1 − x2) বর কের xd নােমর আেরকিট চলেক নয়া
হেয়েছ, একই ভােব কািট েয়র দূর abs(y1 − y2) বর কের yd নােমর আেরকিট চলেক ন-
য়া হেয়েছ। মেন কের দেখা abs িবপাতকিট (function) কান সংখ ার পরম মান (absolute
value) অথাৎ িচ বাদ িদেয় কবল মানটু ফরত দয়। যাইেহাক তারপর xd এর বগ ও yd
এর বেগর যাগফল িনেয় তার বগমূল বর করা হেয়েছ sqrt িবপাতক ব বহার কের আর রাখা

৬৫
৬.১০. িশর নিথ cmath (Header File cmath)

হেয়েছ dd চলেক। সবেশেষ দূর dd চলক থেক ফলন (output) দয়া হেয়েছ। এখােন একটা
কথা বেল রািখ sqrt(xd ∗ xd + yd ∗ yd) এর বদেল cmath িশর নিথ (header file) থ-
কই hypot নােমর িবপাতকও (function) আমরা ব বহার করেত পারতাম। সে ে আমােদর
িলখেত হেতা hypot(xd, yd) আর সিট িঠক একই কাজ করেতা।

৬.১০ িশর নিথ cmath (Header File cmath)


িশর নিথ cmath এ গািণিতক ি য়াকরেণ ব ব তব নানান িবপাতক (function) আেছ। আম-
রা এখােন ওই িবপাতক েলার সােথ সংি আকাের পিরিচত হেবা। এই িবপাতক েলা কী তা
বুঝেত তামার উ মাধ িমক গিণেতর ধারণাবলী দরকার হেব। নীেচর পরাবৃ ীয় (hyperbolic)
িবপাতক েলা ছাড়া ায় সব েলা িবপাতকই আমােদর ায়শই কােজ লােগ।

গািণিতক িবপাতক (Mathematical Functions)


• abs(x): কান সংখ া x এর পরম মান। abs(3) হেব 3 এবং abs(−3) হেব 3।

ি েকাণিমিতক িবপাতক (Trigonometric Functions)


• cos(x): ল া পাত (cosine) যখােন x হল রিডয়ােন।

• sin(x): ল া পাত (sine) যখােন x হল রিডয়ােন।

• tan(x): শা পাত (tangent) যখােন x হল রিডয়ােন।

• acos(x): িবল া পাত (arc-cosine) যখােন ফরত মান রিডয়ােন।

• asin(x): িবল া পাত (arc-sine) যখােন ফরত মান রিডয়ােন।

• atan(x): িব শা পাত (arc-tangent) যখােন ফরত মান রিডয়ােন।

• atan2(x,y): িব শা পাত (arc-tangent) যখােন xy এর x হল লব (numerator)


আর y হল হর (denominator) আর ফরত মান রিডয়ােন।

পরাবৃ ীয় িবপাতক (Hyperbolic Functions)

• cosh(x): পরাবৃ ীয় ল া পাত (hyperbolic cosine) যখােন x হল রিডয়ােন।

• sinh(x): পরাবৃ ীয় ল া পাত (hyperbolic sine) যখােন x হল রিডয়ােন।

• tanh(x): পরাবৃ ীয় শা পাত (hyperbolic tangent) যখােন x হল রিডয়ােন।

• acosh(x): পরাবৃ ীয় িবল া পাত (hyperbolic arc-cosine), ফরত রিডয়ােন।

• asinh(x): পরাবৃ ীয় িবল া পাত (hyperbolic arc-sine), ফরত রিডয়ােন।

• atanh(x): পরাবৃ ীয় িব শা পাত (hyperbolic arc-tangent), ফরত রিডয়ােন।

৬৬
৬.১০. িশর নিথ cmath (Header File cmath)

চক ও ঘাতা (Exponents and Logarithms)


• exp(x): ex বা চকীয় িবপাতক (exponential function)

• log(x): loge x বা ঘাতা িবপাতক (logarithmic function)

• log10(x): log10 x বা ১০-িভি ক ঘাতা (logarithm)

• exp2(x): 2x বা ২-িভি ক চকীয় (exponential) িবপাতক

• log2(x): log2 x বা ২-িভি ক ঘাতা (logarithm)

শি ও ঘাত (Power and Index)


• pow(x,y): xy অথাৎ x এর y তম শি যমন pow(2,3) হল 23 বা 8

• sqrt(x): x অথাৎ x এর বগমূল যমন sqrt(16.0) হল 4.0

• cbrt(x): 3 x অথাৎ x এর ঘনমূল যমন cbrt(8.0) হল 2.0

• hypot(x,y): x2 + y 2 অথাৎ x ও y ক সমেকানী ি ভুেজর ল (perpendicular)
ও ভুিম (base) ধরেল অিতভুেজর (hypotenuse) দঘ

নকটায়েনর িবপাতক (Rounding Functions)


• round(x): নকটায়ন িবপাতক x এর িনকটতম পূণক।

• floor(x): মেঝ িবপাতক x এর সমান বা িঠক ছাট পূণকিট।

• ceil (x): ছাদ িবপাতক x এর সমান বা িঠক বড় পূণকিট।

• trunc(x): কতন িবপাতক x এর ভ াংশটু কেট ফলেব।

উপেরর িবপাতক েলার ফলাফল বুঝার জ নীেচর সারণী ল কেরা।


মান নকটায়ন মেঝ ছাদ কতন
x round(x) floor(x) ceil (x) trunc(x)
2.3 2.0 2.0 3.0 2.0
2.8 3.0 2.0 3.0 2.0
2.5 3.0 2.0 3.0 2.0
2.0 2.0 2.0 2.0 2.0
-2.3 -2.0 -3.0 -2.0 -2.0
-2.8 -3.0 -3.0 -2.0 -2.0
-2.5 -3.0 -3.0 -2.0 -2.0

৬৭
৬.১১. অ শীলনী সম া (Exercise Problems)

৬.১১ অ শীলনী সম া (Exercise Problems)


ধারণাগত : নীেচ িকছু ধারণাগত রেয়েছ। েলার উ র িনেজ িনেজ বর করেব।

১. িবপাতক (function) ও রািশ (expression) বলেত কী বুেঝা? উদাহরণ দাও।

২. এিকক (unary) ও িয়ক (binary) অণুি য়া (operation) বলেত কী বুেঝা? কেয়কটা


কের এিকক (unary) ও িয়ক (binary) অণুি য়ার (operation) নাম বেলা।

৩. উপা কারা র (type casting) কী? িয়ক অণুি য়ায় (binary operation) কী
ভােব উপা কারা র (type casting) হয়?

৪. িনবাহ-কালীন িট (execution-time error) বলেত কী বুেঝা? ভাগফল ও ভাগেশষ


িনণেয়র সময় কান িনবাহকালীন িট ঘটেত পাের?

৫. মেলখেত অদরকারী সংেকতাংশ (code segment) মুেছ না িদেয় কীভােব আমরা টীকা
(comment) ব বহার কের স েলােক অকাযকর কের রাখেত পাির, ব াখ া কেরা।

৬. ঋণা ক পূণেকর (integer) ভাগফল ও ভাগেশষ িনণেয়র িনয়ম বণনা কেরা।

৭. আেরাপণ অণুি য়ার (assignment operator) ফলাফল িঠক কী? যৗিগক আেরাপণ
(compound assignment) বলেত কী বুেঝা? কেয়কিট উদাহরণ দাও।

৮. সাধারণ যৗিগক আেরাপন (compound assignment) যমন x += 1 ব বহার না


কের কন বৃি (increment) x++ বা ++x কন ব বহার করা হয়?

৯. উ র-বৃি (post-increment) ও পূব-বৃি (pre-increment) এর মেধ পাথক েলা


আেলাচনা কেরা। তুিম কানিট ব বহার করেত চাইেব এবং কন?

১০. িবিত (comma) অণুি য়ার কাজ কী? এর ফলাফলই বা কী?

১১. অ গণ তার ম (precedence order) ও সহেযাজ তা (associativity) কী?

১২. িসিপিপেত এ পয শখা অণুি য়া েলার (operator) অ গণ তার ম (precedence


order) ও সহেযাজ তা (associativity) আেলাচনা কেরা।

পিরগণনার সম া: নীেচ আমরা িকছু পিরগণনার সম া দখেবা। এই সম া েলা আেগ ধয


ধের িনেজ িনেজ সমাধান করেত চ া করেব। যখন এেকবােরই পারেছা না বেল মেন হয় তখনই
কবল সমাধান দেখ িনেত পােরা। সমাধান েলা পিরগণনার েলার শেষ আেছ।

১. একিট সমা র ধারার (arithmetic series) থম পদ a সাধারণ অ র d হেল n-তম


পদ কেতা? n পেদর সমি ই বা কত? এর জ িসিপিপেত একটা মেলখ (program)
তরী কেরা যিট a, d, ও n যাগান (input) িনেব, আর n-তম পদ ও n পেদর সমি
ফলন (output) িদেব। এর জ তুিম সূ ব বহার করেব n-তম পদ = a + (n − 1) ∗ d
আর n পেদর সমি = n ∗ (2a + (n − 1) ∗ d)/2। দ িবিভ ধারার জে এই সূ
a আর d বসােল আমরা ওই ধারা েলার জ সরাসির সূ পেত পাির।

৬৮
৬.১১. অ শীলনী সম া (Exercise Problems)

• 1 + 2 + 3 + . . . ধারােত a = 1, d = 1। তরাং n-তম পদ = a + n − 1, n


পেদর সমি = n(n + 1)/2। যমন n = 10 হেল 10-তম পদ 10, সমি 55।
• 2 + 4 + 6 + . . . ধারােত a = 2, d = 2। তরাং n-তম পদ = 2n, n পেদর
সমি = n(n + 1)। যমন n = 10 হেল 10-তম পদ 20, সমি 110।
• 1 + 3 + 5 + . . . ধারােত a = 1, d = 2। তরাং n-তম পদ = 2n − 1, n পেদর
সমি = n2 । যমন n = 10 হেল 10-তম পদ 19, সমি 100।

২. নীেচর মেতা ফলন (output) দয় এরকম একিট মেলখ (program) তরী কেরা।
ফেলর িটেত তুিম িয়ক অণুি য়া েলা (binary operator) ব বহার করেব।
x=10 y=5

rashi fol
x=y+3 x= 8
x=y−2 x= 3
x=y∗5 x= 25
x=x / y x= 2
x=x%y x= 0

৩. এমন একিট মেলখ (program) রচনা কেরা যিট একিট িতন অে র সংখ ােক উে া
কের যমন 326 হেয় যায় 623। এ কােজ তুিম ভাগফল, ভাগেশষ, ণ, যাগ ও িবেয়াগ
ব বহার করেব। 326 থেক অ েলা আলাদা কের তারপর 623 তরী করেব।

৪. একিট ি ভুেজর িতন বা র দঘ a, b, c যাগান (input)


√ িনেয় ি ভুজিটর ফল িনণয়
কেরা। তুিম হয়েতা জােনা ি ভুেজর ফল = s(s − a)(s − b)(s − c) যখােন s
হেলা অধ পিরসীমা অথাৎ s = (a + b + c)/2।

৫. এমন একিট মেলখ (program) রচনা কেরা যিট সেক ড যাগান িনেয় তােক ঘ টা-
িমিনট- সেকে ড পা র কের। এ কােজ তুিম ভাগফল ও ভাগেশষ ব বহার করেব।

৬. একিট ি ভুেজর িতন বা র দঘ a, b, c যাগান (input) িনেয় এর কাণ েলা িনণয়


কেরা। ধেরা ি ভুেজর কান িতনিট A, B, C। এখান A, B, C যথা েম a, b, c বা র
িবপরীত কাণ। তুিম হয়েতা জােনা কাণ C = cos−1 ((a2 + b2 − c2 )/(2ab)), কাণ
B = cos−1 ((c2 +a2 −b2 )/(2ca)) ও কাণ A = cos−1 ((b2 +c2 −a2 )/(2bc))।
তামার মেলখেত ি ভুেজর কান েলােক তুিম িড ীেত পা র কের ফলন িদেব।

৭. এমন একিট মেলখ (program) রচনা কেরা যিট েটা সময় ঘ টা, িমিনট, সেকে ড
িনেয় সময় িটেক যাগ কের। এ কােজ তুিম যাগ, ভাগফল ও ভাগেশষ ব বহার করেব।

৮. এমন একিট মেলখ রচনা কেরা যিট েটা সমীকরণ ax + by = c ও dx + ey = f


এর a, b, c, d, e, f যাগান িনেয় x ও y এর মান ফলন দয়।

৯. একিট বাস u আিদেবগ ও a সম রণ িনেয় যা া করেলা। সময় t সেক ড পের বােসর


গিতেবগ v িনণয় কেরা। t সময় পের বাসিট অিত া র sও িনণয় কেরা। এ কােজ তুিম
গিতিবদ ার সূ v = u + at ও s = ut + 12 at2 ব বহার করেব।

৬৯
৬.১১. অ শীলনী সম া (Exercise Problems)

১০. নীেচর ছ -সংেকেতর (pseudocode) জ একিট মেলখ (program) তরী কেরা।

ক) পেড়া (read) x ও y
খ) গেণা (compute) p = x ∗ y
গ) গেণা (compute) s = x + y
ঘ) গেণা (compute) t = s2 + p ∗ (s − x) ∗ (p + y)
ঙ) িলেখা (write) t

পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।

১. একিট সমা র ধারার (arithmetic series) থম পদ a সাধারণ অ র d হেল n-তম


পদ কেতা? n পেদর সমি ই বা কত? এর জ িসিপিপেত একটা মেলখ (program)
তরী কেরা যিট a, d, ও n যাগান (input) িনেব, আর n-তম পদ ও n পেদর সমি
ফলন (output) িদেব। এর জ তুিম সূ ব বহার করেব n-তম পদ = a + (n − 1) ∗ d
আর n পেদর সমি = n ∗ (2a + (n − 1) ∗ d)/2। দ িবিভ ধারার জে এই সূ
a আর d বসােল আমরা ওই ধারা েলার জ সরাসির সূ পেত পাির।

• 1 + 2 + 3 + . . . ধারােত a = 1, d = 1। তরাং n-তম পদ = a + n − 1, n


পেদর সমি = n(n + 1)/2। যমন n = 10 হেল 10-তম পদ 10, সমি 55।
• 2 + 4 + 6 + . . . ধারােত a = 2, d = 2। তরাং n-তম পদ = 2n, n পেদর
সমি = n(n + 1)। যমন n = 10 হেল 10-তম পদ 20, সমি 110।
• 1 + 3 + 5 + . . . ধারােত a = 1, d = 2। তরাং n-তম পদ = 2n − 1, n পেদর
সমি = n2 । যমন n = 10 হেল 10-তম পদ 19, সমি 100।

আমরা এখােন কবল সাধারণ ে র জ মেলখ (program) তরী করেবা। দ


িবেশষ ধারার জ তুিম এই মেলখ (program) দরকার মেতা বদেল িনেত পারেব।

িফিরি ৬.৬: সমা র ধারার সম া (Arithmetic Series Problem)


int a , d , n ;
cout << " prothom pod ? " ; c i n >> a ;
cout << " sadharon ontor ? " ; c i n >> d ;
cout << " kototom pod ? " ; c i n >> n ;

i n t t = a + ( n − 1 ) ∗ d ; / / n−তম পদ
cout << n << "−tom pod = " << t << endl ;

i n t s = n ∗ ( 2∗a + ( n − 1 ) ∗d ) / 2 ; / / সমি
cout << n << " poder somosti = " << s << endl ;

৭০
৬.১১. অ শীলনী সম া (Exercise Problems)

যাগান-ফলনাংশ (input-output segment)


prothom pod ? 1
sadharon ontor ? 1
kototom pod ? 10
10−tom pod = 10
10 poder somosti = 55

২. নীেচর মেতা ফলন (output) দয় এরকম একিট মেলখ (program) তরী কেরা।
x=10 y=5

rashi fol
x=y+3 x= 8
x=y−2 x= 3
x=y∗5 x= 25
x=x / y x= 2
x=x%y x= 0

িফিরি ৬.৭: িয়ক অণুি য়ার ফলাফল (Binary Operation Results)


i n t x = 10 , y = 5 ;

cout << " x= " << x << " y= " << y << endl ;
cout << endl ; / / ফাঁকা সাির
cout << " r a s h i "<< " f o l " << endl ;
cout << " x=y+3 " << " x= " << y+3 << endl ;
cout << " x=y−2 " << " x= " << y−2 << endl ;
cout << " x=y∗5 " << " x= " << y∗5 << endl ;
cout << " x=x / y " << " x= " << x / y << endl ;
cout << " x=x%y " << " x= " << x%y << endl ;

৩. এমন একিট মেলখ (program) রচনা কেরা যিট একিট িতন অে র সংখ ােক উে া
কের যমন 326 হেয় যায় 623। এ কােজ তুিম ভাগফল, ভাগেশষ, ণ, যাগ ও িবেয়াগ
ব বহার করেব। 326 থেক অ েলা আলাদা কের তারপর 623 তরী করেব।
i n t s o j a = 326 ;

i n t daner = s o j a % 10 ; / / ভাগেশষ 6
i n t bamer = s o j a / 100 ; / / ভাগফল 3
i n t majher = s o j a / 10 % 10 ; / / ফল 2

i n t u l t a = bamer ; // উ া = 3
u l t a += majher ∗ 10 ; / / উ া = 23
u l t a += daner ∗ 100 ; / / উ া = 623

৭১
৬.১১. অ শীলনী সম া (Exercise Problems)

৪. একিট ি ভুেজর িতন বা র দঘ a, b, c যাগান (input)


√ িনেয় ি ভুজিটর ফল িনণয়
কেরা। তুিম হয়েতা জােনা ি ভুেজর ফল = s(s − a)(s − b)(s − c) যখােন s
হেলা অধ পিরসীমা অথাৎ s = (a + b + c)/2।

িফিরি ৬.৮: ি ভুেজর বা হেত ফল (Triangle's Area From Sides)


/ / main িবপাতেকর বাইের
#i n c l u d e <cmath>

/ / main িবপাতেকর িভতের


float a , b , c ; / / বা েলা
cout << " s i d e s a b c : " ; // যাগান যাচনা
c i n >> a >> b >> c ; // যাগান নওয়া

f l o a t s = ( a + b + c ) / 2 ; / / অধ পিরসীমা
f l o a t k = s q r t ( s ∗ ( s−a ) ∗ ( s−b ) ∗ ( s−c ) ) ; / / ফল

cout << " k h e t r o f o l = " << k << endl ; / / ফলন

যাগান-ফলনাংশ (input-output segment)


s i d e s a b c : 100 60 90
k h e t r o f o l = 2666

৫. এমন একিট মেলখ (program) রচনা কেরা যিট সেক ড যাগান িনেয় তােক ঘ টা-
িমিনট- সেকে ড পা র কের। এ কােজ তুিম ভাগফল ও ভাগেশষ ব বহার করেব।

িফিরি ৬.৯: সময়েক সেকে ড কাশ (Time in Seconds)


i n t motsekend = 38185 ;

i n t sekend = motsekend % 60 ; / / ফল 25
i n t motminit = motsekend / 60 ; / / ফল 636

i n t m i n i t = motminit % 60 ; / / ফল 36
i n t ghonta = motminit / 60 ; / / ফল 10

৬. একিট ি ভুেজর িতন বা র দঘ a, b, c যাগান (input) িনেয় এর কাণ েলা িনণয়


কেরা। ধেরা ি ভুেজর কান িতনিট A, B, C। এখান A, B, C যথা েম a, b, c বা র
িবপরীত কাণ। তুিম হয়েতা জােনা কাণ C = cos−1 ((a2 + b2 − c2 )/(2ab)), কাণ
B = cos−1 ((c2 +a2 −b2 )/(2ca)) ও কাণ A = cos−1 ((b2 +c2 −a2 )/(2bc))।
তামার মেলখেত ি ভুেজর কান েলােক তুিম িড ীেত পা র কের ফলন িদেব।
আমরা cmath িশর নিথ থেক িবল া পােতর (arccosine) জ acos িবপাতকিটেক
(function) ব বহার করেবা। িক এিট আমােদর রিডয়ােন কাণ ফরত িদেব। রিডয়ান
থেক িড ীেত িনেত চাইেল আমােদর 180/pi িদেয় ণ করেত হেব। কথা হে পাই

৭২
৬.১১. অ শীলনী সম া (Exercise Problems)

কমেন পােবা। আমরা pai একটা বক ঘাষণা করেত পাির যার মান িদেয় িদব 3.1416
অথবা আেরা িনখুত মান পেত চাইেল acos(−1) থেকও মান বর কের িনেত পাির।
িফিরি ৬.১০: ি ভুেজর বা হেত কাণ (Triangle's Angles From Sides)
/ / main িবপাতেকর বাইের
#i n c l u d e <cmath>

/ / main িবপাতেকর িভতের


float a , b , c ; / / বা েলা
cout << " s i d e s a b c : " ; // যাগান যাচনা
c i n >> a >> b >> c ; // যাগান নওয়া

// কাণ িনণয় রিডয়ােন


float C = acos ( ( a∗a + b∗b − c ∗ c ) / ( 2∗a∗b ) ) ;
float B = acos ( ( c ∗ c + a∗a − b∗b ) / ( 2∗ c ∗a ) ) ;
float A = acos ( ( b∗b + c ∗ c − a∗a ) / ( 2∗b∗ c ) ) ;

/ / িড ীেত পা র
f l o a t const p a i = a r c co s (−1 ) ; / / িবক হেলা 3 . 1416
C ∗= 180 / p a i ; B ∗= 180 / p a i ; A ∗= 180 / p a i ;

cout << " angles A B C= " ; / / ফলন


cout << A << " " << B << " " << C << endl ;

যাগান-ফলনাংশ (input-output segment)


s i d e s a b c : 145 60 90
angles A B C= 149 . 703 12 . 049 18 . 2475

৭. এমন একিট মেলখ (program) রচনা কেরা যিট েটা সময় ঘ টা, িমিনট, সেকে ড
িনেয় সময় িটেক যাগ কের। এ কােজ তুিম যাগ, ভাগফল ও ভাগেশষ ব বহার করেব।
িফিরি ৬.১১: িট সমেয়র যাগ (Adding Two Times)
i n t ghonta1 , minit1 , sekend1 ; / / ১ম সময় যাগান িনেব
i n t ghonta2 , minit2 , sekend2 ; / / ২য় সময় যাগান িনেব

i n t sekend = sekend1 + sekend2 ; / / সেক ড েটা যাগ


i n t m i n i t = minit1 + minit2 ; / / িমিনট েটা যাগ
i n t ghonta = ghonta1 + ghonta2 ; / / ঘ টা েটা যাগ

m i n i t += sekend / 60 ; / / মাট সেক ড 60 এর বশী হেল


sekend = sekend % 60 ; / / িমিনট হওয়ার পের অবিশ সেক ড
ghonta += m i n i t / 60 ; / / মাট িমিনট 60 এর বশী হেল
minit = minit % 60 ; / / ঘ টা হওয়ার পের অবিশ িমিনট

৭৩
৬.১১. অ শীলনী সম া (Exercise Problems)

৮. এমন একিট মেলখ রচনা কেরা যিট েটা সমীকরণ ax+by = c ও dx+ey = f এর
a, b, c, d, e, f যাগান িনেয় x ও y এর মান ফলন দয়। এরকম সহ সমীকরণ সমাধােনর
সূ হল x = (ce − bf )/(ae − bd) আর y = (af − cd)/(ae − bd)।
িফিরি ৬.১২: সহ সমীকরণ সমাধান (Simultaneous Equations)
float a , b , c , d , e , f ;

cout << " prothom somikoron a b c : " ;


c i n >> a >> b >> c ;

cout << " d i t i y o somikoron e f g : " ;


c i n >> d >> e >> e ;

f l o a t x = ( c ∗e − b∗ f ) / ( a∗e − b∗d ) ;
f l o a t y = ( a∗ f − c ∗d ) / ( a∗e − b∗d ) ;

cout << " x = " << x << " " ;


cout << " y = " << y << endl ;

যাগান-ফলনাংশ (input-output segment)


prothom somikoron a b c : 2 1 4
d i t i y o somikoron e f g : 1 −1 −1
x = 1 . 33333 y = 1 . 33333

৯. একিট বাস u আিদেবগ ও a সম রণ িনেয় যা া করেলা। সময় t সেক ড পের বােসর


গিতেবগ v িনণয় কেরা। t সময় পের বাসিট অিত া র sও িনণয় কেরা। এ কােজ তুিম
গিতিবদ ার সূ v = u + at ও s = ut + 12 at2 ব বহার করেব।

িফিরি ৬.১৩: গিতর সমীকরণ সমাধান (Solving Motion Equations)


float u , a , t ;

cout << " adibeg toron somoy : " ;


c i n >> u >> a >> t ;

float v = u + a ∗ t ;
f l o a t s = u∗ t + a ∗ t ∗ t / 2 ;

cout << " beg : " << v << " " ;


cout << " durutto : " << s << endl ;

যাগান-ফলনাংশ (input-output segment)


adibeg toron somoy : 2 1 4
beg : 6 durotto : 16

৭৪
৬.১২. গণনা পিরভাষা (Computing Terminologies)

১০. নীেচর ছ -সংেকেতর (pseudocode) জ একিট মেলখ (program) তরী কেরা।

ক) পেড়া (read) x ও y
খ) গেণা (compute) p = x ∗ y
গ) গেণা (compute) s = x + y
ঘ) গেণা (compute) t = s2 + p ∗ (s − x) ∗ (p + y)
ঙ) িলেখা (write) t

িফিরি ৬.১৪: ছ সংেকত থেক মেলখ তরী (Program from Pseudocode)


int x , y ; // কবল main িবপাতেকর িভতেরর অংশটু

cin >> x >> y; / / ধাপ ক


int p = x ∗ y; / / ধাপ খ
int s = x + y; / / ধাপ গ
int t = s∗s + p ∗ (s − x) ∗ (p + y ) ; // ধাপ ঘ

cout << t << endl ; / / ধাপ ঙ

৬.১২ গণনা পিরভাষা (Computing Terminologies)


• ধনা ক (positive) • িনবাহ-কালীন (execution-time)

• ঋণা ক (negative) • টীকা দয়া (commenting)

• অণুি য়া (operator) • টীকা তালা (uncommenting)

• উপাদান (operand) • যাজন (composition)

• এিকক (unary) • নথক (void)

• িয়ক (binary) • পৃথকী (separator)

• উপা কারা র (type casting) • অ গণ তা (precedence)

• চলা-কালীন (run-time) • সহেযাজ তা (associativity)

৭৫
অধ ায় ৭

শতািল পিরগণনা
(Conditional Programming)

আমােদর জীবনটা নাক বরাবর সাজা একটা পথ নয়, িতটা মােড় মােড় এটা শাখায় শাখায়
িবভ । তামােক একটা শাখায় যেত হেব, একসােথ এেকর বশী শাখায় যেত পারেব না। কা-
নটায় যােব তার জ ভাবেত হেব, তামার অব া ও ল িবেবচনা করেত হেব। শতািল পিরগণনায়
(conditional programming) আমরা শাখায় শাখায় ভাবা িশখেবা, আমােদর সামেনর গমন
পথ বাছাই করা িশখেবা, আমরা আমােদর জীবেনর িস া নয়া িশখেবা।

৭.১ যিদ তাহেল নাহেল (If Then Else)


ধেরা গিণত পরী ায় তুিম ৫০ বা বশী পেল পাশ করেব আর নাহেল করেব ফল। আর যিদ ৮০
বা বশী পাও তাহেল তুিম তারকা (star) পােব। এমন একিট মেলখ (program) তরী কেরা
যিট তামার গিণেত পাওয়া ন র যাগান (input) িনেয় তামােক পাশ না ফল ফলন (output)
িদেব। আর তুিম যিদ তারকা পেয় থােকা সটাও জানােব, তারকা না পেল িকছু জানােব না।

িফিরি ৭.১: পাশ- ফল-তারকা ন র িনণয় (Pass Fail Star Marks)


i n t nombor ; // চলক ঘাষণা

cout << "nombor? " ; // যাগান যাচনা


c i n >> nombor ; // যাগান নয়া

i f ( nombor >= 50) // যিদ পােশর ন র


cout << " pash " << endl ; // পাশ ফলন
else // না হেল
cout << " f e l l " << endl ; // ফল ফলন

i f ( nombor >= 80) // যিদ তারকা ন র


cout << " taroka " << endl ; // তারকা ফলন

৭৭
৭.১. যিদ তাহেল নাহেল (If Then Else)

উপেরর অংশটু কান মেলখেত (program) িনেয় সংকলন (compile) কের চািল-
য় (run) দেখা। যিদ 50 এর কম কান ন র যাগান (input) দাও যমন 45 তাহেল ফলন
(output) দখােব fell । আর যিদ 50 ও 79 এর মােঝর কান ন র যাগান (input) দাও য-
মন 65 তাহেল ফলন (output) দখােব pash। আর যিদ 80 বা বশী কান মান যাগান (input)
দাও যমন 85 তাহেল ই সাির ফলন (output) দখােব: থম সািরেত pash আর পেরর সাির-
ত taroka। নীেচর যাগান-ফলনাংেশ (input-output segment) মেলখিট (program)
িতন বার চািলেয় বােম, মােঝ, ও ডােন এই িতনিট ব াপার দখােনা হেয়েছ।
যাগান-ফলনাংশ (input-output segment)
nombor? 45 nombor? 65 nombor? 85
fell pash pash
taroka

এবার মেলখাংশিট (program segment) িবে ষণ কির। চলক ঘাষণা (variable


declaration), যাগান যাচনা (input prompt), ও যাগান নয়া (taking input) তা তুিম
আেগই িশেখেছা। এর পের খয়াল কেরা আমরা িলেখিছ if (nombor >= 50) অথাৎ যিদ ন র
50 বা তার বশী হয় তাহেল কী করেত হেব সটা িক তার পরপরই বেলিছ cout << "pash"
<< endl; অথাৎ পাশ ফলন (output) দখােত হেব। তারপেরর সাির খয়াল কেরা else মােন
হেলা না হেল অথাৎ ন র যিদ 50 বা তার বশী না হয় মােন 50 এর কম হয়, আমােদর ফল ফলেন
দখােত হেব যা বলা হেয়েছ িঠক পেরর সািরেত cout << "fell" << endl;। য কান ন র
হয় 50 এর কম হেব না হয় বশী বা সমান হেব, এই েটা ছাড়া আর িভ িকছু হেত পাের না, এম-
নিক ওই েটা একসােথও সিত হেত পাের না। কােজই আমােদর মেলখেত (program) হয়
cout << "pash" << endl; না হয় cout << "fell" << endl; িনবািহত (execute)
হেব, েটাই একসােথ হেত পারেব না। িঠক যন েটা শাখা তরী হেয় গেলা।
আমরা উপেরর মেলখাংশ হেত দখেত পলাম া ন েরর ওপর িভি কের ফলাফল পাশ
না ফল দখােত হেব অথাৎ ফলন (output) দখােনার ওই েটা িববৃিতর মেধ কানটা িনবা-
িহত হেব সটা আমরা ন র 50 এর কম না বশী বা সমান এই শতিট পরী া কের বাছাই কর-
ত পারলাম। অেনক পিরগণনা ভাষায় (programming language) (nombor > 50) এর
পের cout << "pash" << endl; এর আেগ then িলখেত হয়, িক c++ এ এটা িলখেত
হয় না। এখােন বরং শত nombor >= 50 এটােক েটা ( ) ব নী িদেয় ব ী করেত হয়। ব নী
দয়ার ব াপারটা মেন রাখেব, কারণ থম থম তুিম এটা িনেয় ায়ই ভুল কের সংকলন িট
(compilation error) পােব, আর তামােক তখন এিট িঠক করেত হেব। ব নী েটা এখােন
আেশ পােশর শতেক পৃথক কের, যা সফল সংকলেনর (compile) জে জ রী।
উপেরর মেলখাংেশ (program segment) খয়াল কেরা পাশ ফল দখােনার if এর
পের আেরা একটা if আেছ যিট িদেয় আমরা া ন রিট তারকা (star) িকনা তা দখাই। এই if
এ শত হে (nombor >= 80) অথাৎ ন র যিদ 80 বা এর বশী হয় তাহেল ফলন (output)
দখােব taroka। িক আর একটু সতক ভােব খয়াল কেরা এই শত িমথ া হেল বা পূরণ না হেল
কী দখােব সটা িক নাই। সাজা কথায় এই if এর সােথ কান else ব বহার করা হয় িন। মােন
ন র যিদ 80 এর কম হয় তাহেল ফ িকছুই দখােনার দরকার নাই। তাহেল আমরা জানলাম
if এর শত পূরণ হেল আমােদর কী করেত হেব সটা িলখেত হেব, িক শত পূরণ না হেল আমরা
দরকার মেতা কী করেত হেব সটা িলখেবা, অথবা দরকার না হেল িকছুই িলখেবা না।
এবার নীেচ মেলখাংশিট খয়াল কেরা। এখােন আমরা উপেরর পাশ- ফল দখােনা অংশিটই
আবার দিখেয়িছ, তেব একটু িভ ভােব। িভ তাটা হেলা উপের যমন else এর পের সরাসির
cout << "fell" << endl; িলেখিছলাম, এখােন তা না কের else এর পের if (nobmor

৭৮
৭.২. অ য়ী অণুি য়া (Relational Operators)

< 50) িলেখিছ। তামােদর কােছ মেন হেত পাের, এটা তা র, বুঝেত িবধা কারণ িঠক যন
মা েষর ভাষায় আমরা য ভােব বিল যমন যিদ ন র 50 বা বশী হয় ফলন দখাও পাশ নাহেল
যিদ ন র 50 এর কম হয় ফলন দখাও ফল িঠক তার মেতা। কথা সত আমােদর বুঝা িবধা হয়
এ ভােব। িক আমরা এভােব িলখেবা না, কারণ else এর পের ওই if (nobmor < 50) িলখা
আসেল অদরকারী আর স কারেণ তামার মেলখ (program) খােমাকা থ (slow) হেয়
যােব। ওই if (nobmor < 50) লখাটা অদরকারী কারণটা আেগই খািনকটা জেনিছ তবুও
আেরকবার বিল else এর শাখায় আসা মােন হেলা nombor >= 50 এই শতিট িমথ া হেয়েছ।
আর এই শতিট িমথ া হওয়া মােন nombor < 50 শতিট অব ই সত । কােজই এিট আবার
আর একিট if লািগেয় পরী া করার কান েয়াজন নাই।
i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
e l s e i f ( nombor < 50) // না হেল
cout << " f e l l " << endl ; // ফল ফলন

তুিম যিদ একা ই মা েষর বুঝার িবধােথ ওই if (nobmor < 50) টা িলখেত চাও, সটা
টীকার (comment) িভতের িলখেত পােরা। নীেচ যমন িলেখ দখালাম। এেত তামার মেল-
খও (program) ধীর গিতর হেলা না, আবার তামার পে মেলখ পড়েতও সহজ হেয় গেলা।
আমরা এ রকমই ায়ই কের থািক। তেব অেনক ে else এর পের ওইরকম একটা if দওয়া
অব াবীও হেয় যায়, এটা আমরা পেরর একটা পােঠই িব ািরত দখেবা।
i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
e l s e / / i f ( nombor < 50) // না হেল
cout << " f e l l " << endl ; // ফল ফলন

এই আেলাচনার শষ কির আেরকটা ব াপার িদেয়, সটা হেলা ছাড়ন দয়া (indentation)।
ছাড়ন িনেয় আেগ একবার আমরা আেলাচনা কেরিছলাম। খয়াল কেরা আমরা if (nombor
>=50) এর পের এই শত সত হেল য cout << "pash" << endl; টা িনবাহ (execute)
করেত হেব সটা পেরর সািরেত একটু িভতের থেক িলখেত কেরিছ। এটা করেল গণিনর
(computer) জ িক কান লাভ বা িত নই, িক আমরা সহেজ চােখ দেখই কমন বুঝেত
পাির য ওই cout এর সািরিট আসেল তার আেগর সািরর if এর সােথর শত সত হওয়ার ওপের
িনভরশীল। তারপর দেখা পেরর সািরেত থাকা else আবার একটু িভতর থেক না হেয় if
বরাবরই হেয়েছ। এটা িদেয় আমরা বুঝােত চাই এই else টা আসেল ওই if এর শতটা িমথ া
হেল েযাজ হেব। ল া মেলখেত যখন অেনক if আর অেনক else থাকেব তখন কান else
কান if এর সােথ তা িমলােনা (match) আমােদর পে চােখ দেখ কিঠন হেয় যেত পাের।
ওই িমলােনার িবধােথ if আর তার সােথর else এক বরাবর িলখা হয়। সবেশেষ খয়াল কেরা
else এর পেরর সািরর cout আবার একটু িভতর থেক লখা, কারণ এটা িনবাহ হেব িকনা তা
িনভর কের else এর ওপের। একটু িভতর থেক লখা কের সইটাই বুঝােনা হয়।

৭.২ অ য়ী অণুি য়া (Relational Operators)


অ য়ী অণুি য়া (relational operators) কী? িসিপিপ ভাষার ছয়িট অ য়ী অণুি য়া >= > =
= != < <= রেয়েছ েটা রািশর তুলনা করার জ । এই অ য়ী অণুি য়া েলা আেলাচনা কেরা।

৭৯
৭.২. অ য়ী অণুি য়া (Relational Operators)

মেলখাংশ (program segment)


cout << " x y x>=y x>y x==y x ! =y x<y x<=y " << endl ;

cout << 3 << " " << 4 << " ";


cout << ( 3>= 4 ) << " " << ( 3>4 ) << " ";
cout << ( 3== 4 ) << " " << ( 3 ! = 4 ) << " ";
cout << ( 3<4 ) << " " << ( 3<= 4 ) << endl ;

cout << 4 << " " << 4 << " ";


cout << ( 4>= 4 ) << " " << ( 4>4 ) << " ";
cout << ( 4== 4 ) << " " << ( 4 ! = 4 ) << " ";
cout << ( 4<4 ) << " " << ( 4<= 4 ) << endl ;

cout << 4 << " " << 3 << " ";


cout << ( 4>= 3 ) << " " << ( 4>3 ) << " ";
cout << ( 4== 3 ) << " " << ( 4 ! = 3 ) << " ";
cout << ( 4<3 ) << " " << ( 4<= 3 ) << endl ;

উপেরর মেলখাংেশ (program segment) থেম আমরা েটা অসমান সংখ ার তুলনা
কেরিছ যখােন আেগরিট পেরিট থেক ছাট। তারপের আমরা েটা সমান সংখ ার তুলনা কেরিছ।
সবেশেষ আবােরা েটা অসমান সংখ ার তুলনা কেরিছ িক এখােন আেগরিট বড়, পেররিট ছাট।
উ মােলখাংেশর ি েত ফলন (output) কী হেব তা নীেচ দখােনা হেয়েছ।

ফলনাংশ (output segment)


x y x>=y x>y x==y x ! =y x<y x<=y
3 4 0 0 0 1 1 1
4 4 1 0 1 0 0 1
4 3 1 1 0 1 0 0

এখােন ছয়িট অ য়ী অণুি য়া (relational operators) ব বহার করা হেয়েছ। এ েলা হল


>= বড় বা বশী (greater or equal), > বড় (greater), == সমান (equal), != অসমান
(unequal), < ছাট (smaller), <= ছাট বা কম (smaller or equal)। একটা িবষয় খয়াল
কেরা এখােন == সমান িচ িক েটা = িচ িদেয়, একটা িদেয় নয়। আেরাপণ (assignment)
হেলা একটা = িদেয়। মেলখ (program) িলখেত গেল আমােদর ায়শই এই ভুলিট হেয় যায়,
আর মেলখ িঠকঠাক কাজ কের না। তামরা এিদেক িবেশষ নজর রাখেব সব সময়।
যাইেহাক উপেরর ফলনাংেশ (output segment) দেখা, যখনই কান তুলনার ফলাফল
সত হেয়েছ, ফলেন (output) সিট এেসেছ 1 িহসােব আর যখােন তুলনার ফলাফল িমথ া তখ-
নই এেসেছ 0। আসেল এই অ য়ী অণুি য়া েলা (relational operators) বুলক (boolean)
নােমর এক কােরর মান ফলাফল িহসােব দয়। বুলক যটােক িসিপিপেত bool িহসােব লখা হয়
সটা হেলা এক রকেমর উপা করণ (data type)। বুলক মান কবল সত আর িমথ া হেত
পাের। িসিপিপেত মান েটা হল িমথ া 0 ও সত 1। মেলখেয়র (program) িভতের অব িম-
থ া আর সত েক 0 আর 1 িদেয় না বুিঝেয় আমরা চাইেল াকাের false ও true িদেয় বুঝােত
পাির, িক ফলেন (output) দখােল ওটা 0 আর 1 িহসােব দখােনা হেয় যােব।

৮০
৭.৩. যিদ-নাহেল মই (If-Else Ladder)

উপেরর মেলখাংেশ যিদও কবল পূণক (integer) ব বহার করা হেয়েছ, অ য়ী অণুি -
য়া েলা (relational operators) আসেল ভ েকর (fractioner) সােথও একই ভােব কাজ
কের। চাইেল একটা ভ ক ও একটা পূণকও ওই অণুি য়া েলােত এক সােথ ব বহার করা যায়,
আর সে ে পূণকিট (int) থেম ভ েক (float) কারা িরত (type cast) হেয় যােব, তা-
রপর তুলনািট হেব েটা ভ ক (float) এর মেধ । ফলাফল অব ই হেব একিট বুলক (bool)
অথাৎ 0 বা 1। অ য়ী অণুি য়া েলা (relational operators) বুলক (bool) এর ওপরও কাজ
কের। সে ে false আর true ক ফ 0 আর 1 ধের পূণক িহসােব িবেবচনা করেল তুলনার
য ফলাফল আসার কথা তাই আসেব। উপেরর মেলখাংেশ তুিম 3 ও 4 এর বদেল নানা রকম
বুলক (bool) বা পূণক (int) বা ভ ক (float) মান েটা উপাদানই (operand) একরকম বা
েটা ইরকম কের বিসেয় ফলাফল েলা পযেব ণ করেত পােরা।

৭.৩ যিদ-নাহেল মই (If-Else Ladder)


যিদ-নাহেল মই (If-Else Ladder) কী? যিদ-নাহেল মই ব বহার কের কান দ বছর অিধবষ
(leap year) িকনা তা িনণেয়র জ একিট মেলখ (program) তরী কেরা।
থেম আমরা দিখ একটা বছর কখন অিধবষ (leap year) হয়। একিট দ বছর যিদ ৪০০
ারা িবভাজ হয় তাহেল এিট অিধবষ, যমন ১৬০০ ও ২০০০। তা নাহেল অথাৎ বছরিট যিদ ৪০০
িদেয় িবভাজ না হয় িক এিট যিদ ১০০ িদেয় িবভাজ হয় তাহেল এিট অিধবষ নয়, যমন ১৮০০
ও ১৯০০। তাও নাহেল অথাৎ বছরিট ১০০ ারাও িবভাজ নয় িক যিদ ৪ ারা িবভাজ তাহেল
এিট অিধবষ, যমন ২০১২ বা ২০১৬। তাও নাহেল অথাৎ বছরিট যিদ ৪ ারা িবভাজ না হয়
তাহেল এিট অিধবষ নয় অথাৎ সাধারণ বষ যমন ২০১৪ বা ২০১৫। এই কথা েলােক সংে েপ
িলখেল দাঁড়ায় "যিদ ৪০০ ারা িবভাজ হয় তাহেল অিধবষ, নাহেল যিদ ১০০ ারা িবভাজ হয়
তাহেল অিধবষ নয়, নাহেল যিদ ৪ ারা িবভাজ হয় তাহেল অিধবষ, নাহেল অিধবষ নয়।"

িফিরি ৭.২: অিধবষ িনণয় (Leap Year Determination)


i n t bosor ;
cout << " bosor koto ? " ;
c i n >> bosor ;

i f ( bosor % 400 == 0 ) / / ৪০০ িদেয় িবভাজ


cout << " odhiborsho hoy " << endl ;
e l s e i f ( bosor % 100 == 0 ) / / ১০০ িদেয় িবভাজ
cout << " odhiborsho noy " << endl ;
e l s e i f ( bosor % 4 == 0 ) / / ৪ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
else / / i f ( bosor % 4 ! = 0 ) ৪ িদেয় িবভাজ নয়
cout << " odhiborsho noy " << endl ;

cout << " kee chomotkar ! " << endl ;

এবার আমােদর মেলখাংেশর (program segment) িদেক তাকাই। উপের সংে েপ


িঠক য ভােব অিধবষ িনণয় করার িনয়ম বণনা কেরিছ, আমােদর মেলখাংেশ আমরা যন তাই
িলেখিছ। িমিলেয় নাও। পািটগিণতীয় অণুি য়া েলার (arithmetical operators) পাঠ থেক

৮১
৭.৪. অ াি যিদ-নাহেল (Nested If-Else)

মেন কেরা দেখা % অণুি য়া আমােদর ভাগেশষ ফলাফল দয়। তা ভাগেশষ যিদ হয় তাহেল
আমরা িবভাজ তা বুঝেত পারেবা, আর ভাগেশষ না হেল অিবভাজ তা। আমরা থেম ৪০০
িদেয় িবভাজ তা পরী া কেরিছ, না হেল তারপর ১০০ িদেয় িবভাজ তা, তাও নাহেল তারপর ৪
িদেয় িবভাজ তা পরী া কেরিছ। কমন ব একই রকম কের মেলখিট লখা গেছ!
খয়াল কেরা িবভাজ হওয়া bosor %400 == 0 আর অিবভাজ হওয়া bosor %400 !=
0 এই েটােতা িবপরীত শত। মেলখেত (program) থম শত ব বহার করেল ওই শত সত
(অথবা িমথ া) হেল যা করেত হেব, একই কাজ ি তীয় শত ব বহার করেল সই শত িমথ া (অথবা
সত ) হেল করেত হেব। হেলা পর র িবপরীত এই েটার মেধ কান শতটা ব বহার করা
িবধাজনক। তাছাড়া 400 িদেয় িবভাজ তাই বা আেগ কন করেবা, 4 বা 100 িদেয় িবভাজ তাও
তা আেগ করেত পাির? এসেবর উ র হল ব িত ম ও বশী ব িত ম েলা তাহেলেত রােখা,
আর বাঁদবাকী কম ব িত ম েলা সব রােখা নাহেলেত, তােত িচ া করা সহজ হেয় যায়, মেলখ
(program) তরীও সহজ হয়। যমন ৪০০ িদেয় িবভাজ হেল অিধবষ, এটা অেনক বশী ব -
িত ম, তুলনামুলক অ সংখ ক বছর ৪০০ িদেয় িবভাজ হেব। ১০০ িদেয় িবভাজ হওয়া আর
একটু কম ব িত ম মােন তুলনামুলক ভােব অেনক বছরই ১০০ িদেয় িবভাজ । ৪ িদেয় িবভাজ
হওয়া আেরা কম ব িত ম মােন তুলনামুলক ভােব অেনক বশী সংখ ক বছর ৪ িদেয় িবভাজ ।
আর ৪ িদেয় িবভাজ না হওয়া মাটামুিট সাধারণ ঘটনা ধরা যায়, বাদবাঁকী সব বছরই ৪ িদেয়
অিবভাজ । খয়াল কেরা মেলখ (program) সভােবই ব িত ম মাথায় রেখই লখা হেয়েছ।
সব চেয় বশী ব িত মী ব াপার সবেচেয় আেগ, সবেচেয় কম ব িত ম সবেচেয় পের।
আমােদর মেলখেত ছাড়ন (indentation) দয়ার ব াপারটা একটু খয়াল কেরা। যিদও
আমরা জািন ছাড়ন দয়া না দওয়া অথবা ফাঁকা িদেয় িদেয় লখা বা না লখােত মেলখেয়র
(program) ফলাফেল কান পিরবতন হয় না। আমরা কবল মা েষর বাঝার িবধােথ ও েলা
কির। তারপরও খয়াল কেরা আমােদর বুঝার িবধােথ আমরা থেমর if , তারপেরর else if
েলা, সবেশেষর else আর তােদর শত সত হেল যা করেত হেব সব িমিলেয় কী র একটা ধাঁচ
(pattern) তরী কেরিছ। এই ধাঁচিট একিট মইেয়র মেতা কারণ আমােদর থম if িদেয়
কের শত পরী া করেত করেত নীেচর িদেক নামেত হেব। আর য কান একিট শত পূরণ হেলই
তার জ য কাজিট করেত হেব পােশর িদেক িগেয় সিট করেলই পুেরা ধাঁচিটর কাজই আসেল
শষ হেয় যােব। মােন একটা শত সত হেল নীেচর িদেকর আেরা কান শত আর পরী া করা হেব
না, পুেরা ধাঁেচর কাজ শষ হেয় যােব। আর িঠক এর পের য িববৃিত (statement) িনবািহত
(execute) হেব সিট হেলা এই পুেরা ধাঁেচর বাইের থাকা কান িববৃিত। যমন উপেরর মেলখ-
ত ল কেরা cout << "kee chomotkar!" << endl; হেলা পুেরা ধাঁেচর বাইের, তরাং
যিদ-নাহেল মই থেক বর হেয়ই ওইিট িনবািহত হেত করেব।

৭.৪ অ াি যিদ-নাহেল (Nested If-Else)

অ াি যিদ-নাহেল (nested if-else) কী? অ াি যিদ-নাহেল ব বহার কের কান দ বছর


অিধবষ (leap year) িকনা তা িনণেয়র জ একিট মেলখ (program) তরী কেরা।
একটা বছর কখন অিধবষ (leap year) হয়, সটা আেগর পােঠই জেনিছ, তবুও আেরকবার:
বছরিট যিদ ৪০০ ারা িবভাজ হয় তাহেল এিট অিধবষ, যমন ১৬০০ ও ২০০০। তা নাহেল অথাৎ
বছরিট যিদ ৪০০ িদেয় িবভাজ না হয় িক এিট যিদ ১০০ িদেয় িবভাজ হয় তাহেল এিট অিধবষ
নয়, যমন ১৮০০ ও ১৯০০। তাও নাহেল অথাৎ বছরিট ১০০ ারাও িবভাজ নয় িক যিদ ৪ ারা
িবভাজ তাহেল এিট অিধবষ, যমন ২০১২ বা ২০১৬। তাও নাহেল অথাৎ বছরিট যিদ ৪ ারা
িবভাজ না হয় তাহেল এিট অিধবষ নয় অথাৎ সাধারণ বষ যমন ২০১৪ বা ২০১৫। আেগর পােঠ

৮২
৭.৪. অ াি যিদ-নাহেল (Nested If-Else)

দখােনা আমােদর নীেচর মেলখাংশিট স ভােবই যিদ-নাহেল মই ব বহার কের লখা।


i f ( bosor % 400 == 0 ) / / ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
e l s e i f ( bosor % 100 == 0 ) / / ১০০ িদেয় িবভাজ
cout << " odhiborsho noy " << endl ;
e l s e i f ( bosor % 4 == 0 ) / / ৪ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
else / / i f ( bosor % 4 ! = 0 ) ৪ িদেয় িবভাজ নয়
cout << " odhiborsho noy " << endl ;

উপেরর মেলখাংেশ (program segment) দেখা ি তীয় if িববৃিতেত (statement)


১০০ িদেয় িবভাজ তা পরী া করা হেয়েছ িক ৪০০ িদেয় অিবভাজ হওয়ার পের। তা আমরা
যিদ bosor % 400 == 0 িলেখ িবভাজ তা পরী া না কের তার উে াটা bosor % 400 != 0
িলেখ অিবভাজ তা পরী া করতাম তাহেল মেলখাংশিট কমন হেতা? তাহেল সালিট য অিধবষ
সটা দখােনার cout চেল যেতা else এর সােথ। নীেচর মেলখাংেশর সােথ িমিলেয় নাও।
i f ( bosor % 400 ! = 0 ) / / ৪০০ িদেয় অিবভাজ
i f ( bosor % 100 == 0 ) / / ১০০ িদেয় িবভাজ
cout << " odhiborsho noy " << endl ;
e l s e i f ( bosor % 4 == 0 ) / / ৪ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
else / / i f ( bosor % 4 ! = 0 ) ৪ িদেয় িবভাজ নয়
cout << " odhiborsho noy " << endl ;
else / / i f ( bosor % 400 == 0 ) ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;

তুিম এবার িজে স করেত পােরা, আ া আিম িক একই ভােব ১০০ বা ৪ িদেয় িবভাজ হওয়ার
if েলােকও ১০০ বা ৪ িদেয় অিবভাজ তার if িদেয় িলখেত পারতাম? াঁ অব ই। নীেচর
মেলখাংশ (program segment) খয়াল কেরা। আমরা িতিট if এর শতই বদেল এখন
অিবভাজ তার শত িদেয় িদেয়িছ। যিদ-নাহেলর মইেত আমরা if এর সােথ থাকা শত িমথ া হেল
তার else এর পরপরই একটা if দখেত পতাম। এখােন দেখা উে াটা, if এর শত সত হেল
বরং তার পরপরই আেরকটা if দখা যাে । এটােক আমরা বলেবা অ াি যিদ-নাহেল (nested
if-else) অথাৎ একটা যিদ-নাহেলর িভতের আেরকটা যিদ-নাহেল, তার িভতের আেরকটা!
i f ( bosor % 400 ! = 0 ) / / ৪০০ িদেয় অিবভাজ
i f ( bosor % 100 ! = 0 ) / / ১০০ িদেয় অিবভাজ
i f ( bosor % 4 ! = 0 ) / / ৪ িদেয় অিবভাজ
cout << " odhiborsho noy " << endl ;
e l s e / / i f ( bosor % 4 == 0 ) ৪ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
else / / i f ( bosor % 100 == 0 ) ১০০ িদেয় িবভাজ
cout << " odhiborsho noy " << endl ;
else / / i f ( bosor % 400 == 0 ) ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;

৮৩
৭.৫. ঝুল নাহেল (Dangling Else)

অ াি যিদ-নাহেল লখায় ছাড়ন (indentation) দয়ার ব াপারিট খয়াল কেরা। সবেচেয়


িভতেরর else সবেচেয় িভতেরর if এর সােথ। মােঝর else মােঝর if এর সােথ আর সবেচেয়
বাইেরর else বাইেরর if এর সােথ। টীকার (comment) অংশ েলা দেখ িমিলেয় নাও। ম-
লখ (program) িলখেত ছাড়ন (indentation) দয়া য কতটা পূণ সটা এখান থেক
তামার বশ বুঝেত পারার কথা। ছাড়ন না থাকেল মেলখ বুঝা আমােদর জ রহ হেব।
উপেরর আেলাচনায় একটা িজিনস আমরা দেখিছ: যিদ-নাহেল মই (if-else ladder) আর
অ াি যিদ-নাহেল (nested if-else) খািনকটা পর েরর িবপরীত। তুিম িক চাইেল এ েটার
িম ণ ঘটােত পােরা মােন পুেরাটাই মই না কের বা পুেরাটাই অ াি না কের ইরকমটাই ব বহার
করেল! যমন ধেরা আমরা যিদ থেম ১০০ িদেয় িবভাজ তা পরী া কির। তাহেল শত সত
হেলই আমরা অিধবষ বলেত পাির না। আমােদর দখেত হেব ৪০০ িদেয় িবভাজ িকনা। আর
১০০ িদেয় িবভাজ না হেল আমােদর দখেত হেব ৪ িদেয় িবভাজ িকনা। তা সই অ সাের নীেচর
মেলখাংশ (program-segment) খয়াল কেরা এখােন অ াি যিদ-নাহেলও (nested if-
else) আেছ আবার যিদ-নাহেল মইও (if-else ladder) আেছ। ছাড়ন (indentation) দেখ
িচনেত পারেছা? তুিম িক আেরা নানান ভােব অিধবষ (leap year) িনণয় িনেয় আর যিদ-নাহেল
িনেয় খলেত পােরা। কান শত আেগ, কানটা পের, কানটা মােঝ, কানটােক অ াি করেব,
কানটােক মইেয় িদেব, চ া কের দখেব, মজাও পােব, িবষয় েলা িশখেবও!
i f ( bosor % 100 == 0 ) / / ১০০ িদেয় িবভাজ
i f ( bosor % 400 == 0 ) / / ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
else / / ৪০০ িদেয় অিবভাজ
cout << " odhiborsho noy " << endl ;
e l s e i f ( bosor % 4 == 0 ) / / ৪ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
else // ৪ িদেয় অিবভাজ
cout << " odhiborsho noy " << endl ;

৭.৫ ঝুল নাহেল (Dangling Else)


ডাক িবভাগ সারােদশেক অেনক অ েল ভাগ কের িতিট অ েলর একটা কের িমক ন র িদেয়
দয়। ঢাকার অ ল েলার িমক ন র ১০০ পয , তার মেধ ১৩ িদেয় িবভাজ ন র েলা হেলা
সংরি ত অ ল যমন ১৩, ২৬, ৩৯, ৫২, ৬৫, ৭৮, ৯১। ঢাকার িভতর থেক ডােক িচিঠ পাঠােনার
খরচ সারােদেশর য কান জায়গায় হেল ৪ টাকা। িক গ ব িঠকানা ঢাকার িভতেরই হেল খরচ
২টাকা, আর ঢাকার িভতেরই িক সংরি ত অ েল হেল খরচ ৩ টাকা। তুিম বশীর ভাগ সময়
ঢাকার িভতেরই কাথাও না কাথাও িচিঠ পাঠাও, তেব মােঝ মােঝ অ ও পাঠাও। তা তামােক
একিট মেলখ (program) িলখেত হেব যিট তামার িচিঠর গ ব কত ন র অ েল যাগান
(input) িনেয় তামােক িচিঠ পাঠােনার খরচ ফলেন (output) দখােব। তামার মেলখেত
(program) তুিম অব ই যিদ নাহেল (if-else) ব বহার করেব িক তােত যন কান ভােবই
ঝুল নাহেল (dangling else) িদেয় ভুল না কের বেসা, সটা খয়াল রাখেব।
এই মেলখ (program) লখা তা খুব সহজ। যিদ-নাহেল মই (if-else ladder) ব বহার
কের তুিম সহেজই িলেখ ফলেত পােরা। থেম পরী া করেব অ ল ১০০ এর চেয় বড় িকনা।
১০০ এর বড় হেল খরচ ৪ টাকা, কারণ অ লিট ঢাকার বাইের। আর নাহেল মােন অ লিট ঢাকার
িভতের হেল এবার পরী া কের দখেব ১৩ িদেয় িবভাজ িকনা। ১৩ িদেয় িবভাজ হওয়া মােন

৮৪
৭.৫. ঝুল নাহেল (Dangling Else)

সংরি ত অ ল তরাং খরচ ৩ টাকা, আর ১৩ িদেয় িবভাজ না হেল মােন অসংরি ত এলাকা
হেল খরচ ২ টাকা। নীেচর মেলখাংেশর (program segment) সােথ িমিলেয় দেখা।
i n t onchol ;

cout << " onchol koto ? " ;


c i n >> onchol ;

i f ( onchol > 100) / / ঢাকার বাইের


khoroch = 4 ;
e l s e i f ( onchol % 13 == 0 ) / / সংরি ত অ ল
khoroch = 3 ;
else / / অসংরি ত অ ল
khoroch = 2 ;

এই মেলখিট আেরা নানান ভােবই লখা স ব তুিম স েলা িনেজ িনেজ চ া করেব। তেব
আমরা তা কবল এিট সমাধানই িশখিছ না, আমরা িশখেবা ঝুল নাহেল (dangling else)
ধাঁচিট কমন সিট। তা আমােদর সম ার িববরেণ খয়াল কেরা একটা কথা আেছ তুিম বশীর
ভাগ িচিঠই পাঠাও ঢাকায়। আর সখােন অসংরি ত এলাকার সংখ ায় বশী। এ থেক আমরা ধের
িনেত পাির য খরচ বশীর ভাগ সময়ই ২ টাকা। কােজই আমরা khoroch চলকিটর মান েতই
২টাকা আিদ আেরাপণ (initial assignment) কের ফলেত পাির। তারপর শত পরী া কের
যিদ দিখ ঢাকার িভতের আর সংরি ত তাহেল খরচ কের িদেবা ৩ টাকা আর ঢাকার বাইের হেল
কের দেবা ৪ টাকা। নীেচর মেলখাংশিট দেখা। আমরা স রকমিট করার চ া কেরিছ।
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত

i f ( onchol <= 100) / / ঢাকার িভতের


i f ( onchol % 13 == 0 ) / / সংরি ত
khoroch = 3 ;
else / / দখেত মেন হয় ঢাকার বাইের
khoroch = 4 ;

উপেরর অংশটু ব বহার কের কান মেলখ (program) তরী কের চালােল সিট সিঠক
khoroch জানােব না। ঢাকার বাইেরর অ ল েলার জ যখােন খরচ ৪টাকা হওয়ার কথা,
তা না হেয় বরং ২টাকাই থাকেব। আর ঢাকার িভতেরর অসংরি ত এলাকার জ যখােন খরচ
হওয়ার কথা ২টাকা তা না হেয় খরচ ৪টাকা হেব। মেলখ (program) চােখ দেখ তা মেন
হে সব িঠক আেছ, তেব কন এই িবপি ! আসেল িবপি বাঁিধেয়েছ else অংশিট। আমরা
যভােব ছাড়ন (indentation) িদেয় িলেখিছ তােত মেন হে else অংশটু থম if সােথর
অথাৎ onchol <= 100 িমথ া হওয়ার সােথ জিড়ত। িক আসেল তা নয়। িতিট else তার
পূেবর িনকটতম স ীহীন if এর সােথ জিড়ত। তার মােন এইখােন else িট পেরর if এর সােথ
জিড়ত। অথাৎ onchol যিদ 13 িদেয় িবভাজ না হয় তার সােথ জিড়ত।
অ াি যিদ-নাহেল (nested if-else) আেলাচনায় আমরা দেখিছলাম সবেচেয় িভতেরর
else িঠক সবেচেয় িভতেরর if এর সােথ, মােঝর else িঠক মােঝর if এর সােথ, আর বাইেরর
else িঠক বাইেরর if এর সােথ। আসেল কান else কান if এর সােথ যােব এখােন ছাড়েনর
(indentation) কান ভাবই নই। য else এর জ if িমলােনা দরকার সখান থেক উপ-

৮৫
৭.৬. যৗিগক িববৃিত (Compound Statement)

রর িদেক যেত থাকেল থম য if পাওয়া যােব যার সােথ কান ইত মেধ else দওয়া হয়
নাই, সই if -ই হেলা আমােদর ওই else এর সােথর if । ছাড়ন কবল আমােদর চােখর দখার
জ , গণিনর (computer) কােছ এর কান অথ নই। তাহেল সিঠকভােব ছাড়ন িদেয় িলখেল
আমােদর উপেরর মেলখ আসেল নীেচর মেতা হেব। তরাং বুঝেতই পারেছা উ াপা া ছাড়ন
(indentation) দেখ তুিম ভাবেব তামার মেলখ এরকম কাজ করেব, িক আসেল সটা কাজ
করেব িভ রকম। আর ভুলটা কাথায় তা বর করেত তুিম গলদঘম হেয় যােব!
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত

i f ( onchol <= 100) / / ঢাকার িভতের


i f ( onchol % 13 == 0 ) / / সংরি ত
khoroch = 3 ;
else / / অসংরি ত
khoroch = 4 ;

এরকেমর সম া যখােন else কার সােথ তা বুঝেত আমােদর ঝােমলা লােগ, সই সম ােক
বলা হয় ঝুল নাহেল (dangling else)। উপেরর সিঠক ছাড়ন (indentation) িদেয় আমরা
বুঝেত পারলাম সম া কাথায় িক সমাধান িক আমরা এখেনা জািননা, else িক আসেলই
আমরা বাইেরর if এর onchol <= 100 িমথ া হেল কী হেব তার জ িলখেত চাই। উপায় কী?
উপায় খুবই সহজ। িভতেরর if এর জ একটা else লািগেয় দাও, আর সই else এর জ
তা আমােদর িকছু করার নাই। কারণ ওই else এর জ খরচ ২টাকা সটা তা আমরা আেগই
আিদমান আেরাপেণর সময় িদেয় এেসিছ। িকছু করার নাই বুঝােত আমরা সাধারণত িববৃিত
(empty statement) ব বহার কির। আর কান িকছু ছাড়া কবল িদিত (semicolon) ; িদেয়
আমরা িববৃিত বুঝাই। এবার তাহেল পির ার হেয় গেলা কান else কান if এর জে ।
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত

i f ( onchol <= 100) / / ঢাকার িভতের


i f ( onchol % 13 == 0 ) / / সংরি ত
khoroch = 3 ;
else // অসংরি ত
; // িববৃিত
else / / ঢাকার বাইের
khoroch = 4 ;

৭.৬ যৗিগক িববৃিত (Compound Statement)

যৗিগক িববৃিত (compound statement) বলেত কী বুেঝা? যৗিগক িববৃিত ও যিদ-নাহেল (if-
else) ব বহার কের একিট মেলখ (program) িলেখা যিট থেম িট সংখ া যাগান (input)
িনেব। তারপর থম সংখ ািট 0 হেল পেরর সংখ ািটেক ব াসাধ ধের ফল ও পিরিধ ফলন
(output) িদেব। আর থম সংখ ািট 1 হেল ি তীয় সংখ ািটেক বেগর এক বা র দঘ ধের বগিটর
ফল ও পিরসীমা ফলন (output) িদেব। থম সংখ ািট 0 বা 1 ছাড়া অ িকছু হেল দখােব
"osomorthito akriti" অথাৎ এর জ আমােদর মেলখ কাজ করেব না।

৮৬
৭.৬. যৗিগক িববৃিত (Compound Statement)

f l o a t nombor1 , nombor2 ; // চলক ঘাষণা

cout << "nombor d u t i koto ? " ; / / যাগান যাচনা


c i n >> nombor1 >> nombor2 ; // যাগান নওয়া

i f ( nombor1 == 0 ) / / যিদ বৃ হয়
{
cout << " k h e t r o f o l holo : " ;
cout << 3 . 1416 ∗ nombor2 ∗ nombor2 ;
cout << " p o r i d h i holo : " ;
cout << 2 ∗ 3 . 1416 ∗ nombor2 ;
cout << endl ;
}
e l s e i f nombor == 1 ) / / যিদ বগ হয়
{
cout << " k h e t r o f o l holo : " ;
cout << nombor2 ∗ nombor2 ;
cout << " porishima holo : " ;
cout << 4 ∗ nombor2 ;
cout << endl ;
}
else
cout << " osomorthito a k r i t i " << endl ;

cout << " bah hoye gelo . " << endl ;

এই মেলখিট লখা খুবই সহজ। কবল একটাই ঝােমলা আেছ সটা হল যিদ-নাহেলেত (if-
else) শত সত হাক বা িমথ া হাক আমােদর একটা িববৃিতর (statement) বদেল এক
িববৃিত িনবাহ (execute) করেত হেব। এর আেগর সব উদাহরেণ আমরা দেখিছ যিদ-নাহেল (if-
else) শত সত বা িমথ া হেল কবল একটা মা িববৃিত (statement) িনবাহ করেত। তা ঝােম-
লাটার সমাধানও আসেল সহজ। এক িববৃিতেক { } বাঁকা ব নীর (curly brackets) িভতের
ঢুিকেয় িদেলই হেলা। এর আেগ আমরা জেনিছলাম েটা বাঁকা ব নীর (curly brackets) { }
িদেয় আমরা একটা মহ া (block) তরী কির। তা বাঁকা ব নীর িভতের থাকা এক িববৃিতেক
আমরা বিল যৗিগক িববৃিত (compound statement)।
যৗিগক িববৃিত (compound statement) হেলই য তার িভতের একািধক িববৃিত থাকেত
হেব এমন কথা নই। মহ া তরী কের কবল একটা িববৃিতও তার িভতের িলখেত পােরা।

i f ( nombor % 2 == 0 )
{ cout << nombor << " holo j o r " << endl ; }
else
{ cout << nombor << " holo b e j o r " << endl ; }

৮৭
৭.৭. িট শনা করণ (Error Detection)

মহ া (block) তরীর ফেল অেনকসময় ঝুল নাহেলর (dangling else) ঝােমলা সহেজ
এড়ােনা স ব হয়। পাঠ ৭.৫ এর িচিঠ পাঠােনার খরচ িনণেয়র সম ািট িবেবচনা কেরা। স-
খােন else িট কান if এর তা িনেয় ঝােমলা তরী হেয়িছল আর আমরা িববৃিত (empty
statement) িদেয় সটা সমাধান কেরিছলাম। িববৃিত হল ফ ; িদিত (semicolon) তার
আেগ িকছু নই। নীেচর মেলখাংেশ (program segment) আমরা ওই িভতেরর if িটেক
একিট মহ ার (block) িভতের ঢুিকেয় িদলাম। তরাং মহ ার বাইের থাকা else িট কানভােবই
মহ ার িভতেরর if এর সােথ িমলােনা স ব হেব না, কােজই সটা আর ঝুল থাকেব না।
i n t khoroch = 2 ; / / ঢাকার িভতের অসংরি ত
i f ( onchol <= 100) / / ঢাকার িভতের
{
i f ( onchol % 13 == 0 ) / / সংরি ত
khoroch = 3 ;
}
else / / ঢাকার বাইের
khoroch = 4 ;

মহ া (block) তরী কের চাইেল তার িভতের িক আমরা কান িববৃিত একদমই না িদেত
পাির অথাৎ কবলই িট বাঁকা ব নী (curly brackets) পরপর { }। সে ে এটাও একর-
কেমর িববৃিত (empty statement) তরী হেব। কােজই িববৃিত তরীর েটা উপায়
আমরা িশখলাম একটা হেলা কবলই ; িদিত (semicolon) দয়া আেরকিট হেলা { } েটা বাঁ-
কা ব নীর (curly brackets) িভতের িকছু না লখা। থমিটর ব বহার আেগ দেখিছ আর নীেচ
ি তীয়িট ব বহার কের ঝুল (dangling else) এর আেরকিট সমাধান দয়া হেলা।
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত

i f ( onchol <= 100) / / ঢাকার িভতের


i f ( onchol % 13 == 0 ) / / সংরি ত
khoroch = 3 ;
else // অসংরি ত
{} // িববৃিত
else / / ঢাকার বাইের
khoroch = 4 ;

তাহেল যখােনই তুিম একটা িববৃিত (statement) িদেত পােরা, সখােনই তুিম আসেল চা-
ইেল একটা িববৃিতর বদেল একটা যৗিগক িববৃিতও (compound statement) িদেত পােরা,
আবার একটা িববৃিতও (empty statement) িদেত পােরা। এখন থেক আমরা যখন িব-
বৃিত বলেবা তখন তুিম সটা মােন কবল একটা িববৃিত বুঝেব না, বরং দরকার মেতা সটা য
যৗিগক িববৃিতও হেত পাের বা িববৃিতও হেত পাের, তা বুেঝ িনেব কমন!

৭.৭ িট শনা করণ (Error Detection)


একটা ি ঘাত সমীকরণ ax2 + bx + c = 0 এর সহগ েলা (coefficient) a, b ও বক
(constant) c এর মান যাগান (input) িনেয় x এর মান িট িনণয় করার জ একিট মেলখ

৮৮
৭.৭. িট শনা করণ (Error Detection)

(program) রচনা কেরা। এই মেলখেত তামােক সব রকেমর িনবাহকালীন (execution-


time) িট শনা (error detect) কের তা ব বহারকারীেক জানােত হেব।
#i n c l u d e <cmath> / / বগমূেলর জ s q r t িবপাতক লাগেব

// ওপেরর অংশ main িবপাতেকর আেগ , নীেচর অংশ িভতের

float a , b , c ; // সহগ ও বক েলার জ চলক

cout << " somikoron ax ˆ2 + bx + c = 0 " << endl ;


cout << " a b c er man koto ? " ; / / যাগান যাচনা
c i n >> a >> b >> c ; // যাগান নয়া

f l o a t d = b∗b − 4∗a∗ c ; // িন ায়ক

f l o a t x1 = (−b + s q r t ( d ) ) / ( 2∗a ) ; // থম সমাধান


f l o a t x2 = (−b − s q r t ( d ) ) / ( 2∗a ) ; // ি তীয় সমাধান

cout << " prothom somadhan x1 = " << x1 << endl ;


cout << " d i t i y o somadhan x2 = " << x2 << endl ;

ি ঘাত সমীকরণ ax2 + bx + c = 0√এর সহগ ও বেকর মান না জেনও আমরা সমা-
ধােনর সূ বর করেত পাির x = (−b ± b2 − 4ac)/(2a)। এই সূে র বগমূল বর করার
জ আমােদর cmath িশর নিথ (header file) থেক sqrt িবপাতক ব বহার করেত হেব।
বাদ বাঁকী অংশটু সহজ, উপেরর মেলখাংেশ (program segment) দখােনা হেলা। থেম
সমীকরণটা দখােনা হেয়েছ। খয়াল কেরা xˆ2 িদেয় আমরা িক x এর বগ বুিঝেয়িছ। সহগ ও
বক েলার মান যাগান (input) নয়ার পের আমরা b∗b − 4∗a∗c িনণয় কের চলক d ত
িনেয়িছ কারণ এিট ইিট সমাধােনর জ ইবার ব বহার করেত হেব। যাইেহাক ওপেরর অংশটু
ব বহার কের লখা মেলখ (program) কাজ করেব যিদ সমীকরণটা সহজ সাজা হয়, তােত
কান ঝােমলা না থােক! কী রকেমর ঝােমলা থাকেত পাের, িকছু অ মান করেত পােরা্?
আসেল মেলখ (program) তরীর সময় আমােদর ধের িনেত হয় য ব বহারকারী সিঠক
যাগান (input) যমন িদেত পাের তমিন যা ই া তা বিঠক যাগানও িদেত পাের। এইটা স
ভুল কের করেত পাের, না জেন করেত পাের, ই া কেরও করেত পাের। তামার কাজ ন কের
দয়ার আেরা নানািবধ উে ও থাকেত পাের। তেব আমরা আপাতত ধের িনই ব বহারকারী
ঝােমলা যা করার তা কবল ওই সহগ ও বেকর মান যাগান (input) দওয়ার মাধ েমই করেব।
আর ওই ঝােমলা েলা করেল যা হেব তা হেলা উপেরর মেলখাংশ আমােদর িনয় েণর বাইের
িনবাহকালীন (execution-time) িট দিখেয় ব হেয় (abort) যেত পাের। এরকম একটা
িট হেলা িদেয় ভাগ (divide by zero), আর একটা িট হেত পাের ঋণা ক সংখ ার
বগমূল বর করা! এই েটা িটই ি ঘাত সমীকরণ সমাধােনর ে ঘটেত পাের।
এই সব ে আমােদর আেগ থেক বুঝেত পারেত হেব য ওই রকম িটপূণ ঘটনা ঘটেব কী
না, যিদ ওইরকম িট সিত ই ঘেট সটা আমােদর ব বহারকারীেক জানােত হেব। আমােদর তর-
ফ জানােনাটা াভািবক। িক আমােদর অজাে যিদ িট ঘেট মেলখ (program) ব হেয়
যায় তাহেল সটা কানভােবই হণেযাগ নয়। সটা একটা বল পিরগণনার (programming)
উদাহরণ। আর আমরা িটটা ঘটবার আেগই ধরেত পারেল সটা ব বহারকারীেক জািনেয় চাই-

৮৯
৭.৭. িট শনা করণ (Error Detection)

ল আমােদর মেলখেক (program) তারপেরও িনবাহ করা চািলেয় যেত িদেত পারেবা। তা
আমরা নীেচ ি ঘাত সমীকরণ সমাধােনর পুেরা মেলখিট (program) িলখেবা আর তােত সব
রকম িট ধের সটা ব বহার কারীেক জানােনার চ া করেবা। আর যখন িট হে তখন আমরা
return EXIT SUCCESS; না কের return EXIT FAILURE; করেবা।

িফিরি ৭.৩: ি ঘাত সমীকরণ সমাধান (Solving Quadratic Equations)


#i n c l u d e <iostream> // cout ব বহার করার জ
#i n c l u d e <c s t d l i b> // EXIT SUCCESS / FAILURE এর জ
#i n c l u d e <cmath> // s q r t িবপাতক ব বহার করার জ

using namespace std ; // িমত নামাধার

i n t main ( )
{
float a , b , c ; // সহগ রাখার জ চলক।

cout << " somikoron ax ˆ2 + bx + c = 0 " << endl ;


cout << " a b c er man koto ? " ; / / যাগান যাচনা
c i n >> a >> b >> c ; // যাগান নওয়া

/ / a বা b যিদ হয় তখন কী হেব? c হেল সম া নই !


i f ( a == 0 ) // a হেল সমীকরণ ি ঘাত নয় , একঘাত !
{
i f ( b == 0 ) / / b হেল কান বধ সমীকরণই নয় !
{
cout << " boidho somikoron noi ! " << endl ;
ret ur n EXIT FAILURE ; / / মেলখ িবফল
}

// b নয় , কােজই সমীকরণ কবলই একঘাত


cout << " dighat somikoron noi ! " << endl ;
cout << " ekghat somikoron dhora holo . " << endl ;
cout << "somadhan holo x = " << −c / b << endl ;
ret ur n EXIT SUCCESS ; / / মেলখ তবুও সফল ধরা যায়
}

// a নয় , কােজই বধ ি ঘাত সমীকরণ

f l o a t d = b∗b − 4∗a∗ c ; // িন ায়ক িহসাব কেরা

i f ( d < 0 ) / / ঋণা ক িন ায়েকর বগমূল করা যায় না !


{
cout << " nischayok r i n a t o k ! " << endl ;

৯০
৭.৭. িট শনা করণ (Error Detection)

cout << " bastob somadhan n a i ! " << endl ;


ret urn EXIT FAILURE ; / / মেলখ িবফল
}

i f ( d == 0 ) / / িন ায়ক হেল েটা সমাধান সমান


{
cout << " duto somadhan ashole ekoi ! " << endl ;
cout << " somapotito x = " << −b / ( 2∗a ) << endl ;
ret urn EXIT SUCCESS ; / / মেলখ সফল
}

// েটা সমাধান আেছ , আর তারা অসমান

f l o a t x1 = (−b + s q r t ( d ) ) / ( 2∗a ) ; / / থম সমাধান


f l o a t x2 = (−b − s q r t ( d ) ) / ( 2∗a ) ; / / ি তীয় সমাধান

cout << " prothom somadhan x1 = " << x1 << endl ;


cout << " d i t i y o somadhan x2 = " << x2 << endl ;

ret ur n EXIT SUCCESS ; // মেলখ সমাধান


}

যাগান (input) নবার পর থেম যিট আমােদর িবেবচনা করেত হেব তা হেলা সমীকরণিট
আসেল ি ঘাত সমীকরণ িকনা? যিদ a হয়, তাহেল সমীকরেণ কান x2 থােক না, এিট হেয়
যায় bx + c = 0 যিট একিট একঘাত সমীকরণ। এমন অব ায় আমরা আেরা পরী া কের দখব
bও িকনা। যিদ b হয় তাহেল থােক কবল c = 0, যখােন কান চলক (variable)
নই। কােজই আমােদর িট বাতা দিখেয় return EXIT FAILURE; বেল ফরত যেত হেব।
নীেচর যাগান-ফলন (input-output) খয়াল কেরা, a ও b হওয়ায় িট বাতা িদেয়েছ।
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 0 0 3
boidho somikoron noi !

যিদ a হয় িক b না হয়, তাহেল আমরা if (a == 0) মহ ার (block) িভতেরই


আিছ, িক b না হওয়ায় সমীকরণিট আসেলই একঘাত হেয়েছ bx + c = 0। আমরা িক
ি ঘাত সমীকরণ সমাধান করেত চাই, িক আমােদর দয়া হেয়েছ একটা একঘাত সমীকরণ। তুিম
চাইেল এখােন িট বাতা (error message) দিখেয় িবফল হেয় ফরত যেত পােরা। আবার
উদারতা দিখেয় নীেচর মেতা ওই একঘাত সমীকরেণর সমাধানই ফলন (output) িদেত পােরা।
তেব সােথ সতক বাতাও (warning message) িদেয় িদেল য এটা ি ঘাত সমীকরণ নয়!
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 0 2 1
dighat somikoron noi !
ekghat somikoron dhora holo .
somadhan holo x = −0 . 5

৯১
৭.৮. বুলক সংেযাজক (Boolean Connectives)

যিদ a না হয় তাহেল এটা একটা বধ ি ঘাত সমীকরণ। তরাং থেম আমরা িন ায়ক
(discriminant) িনণয় কের একটা চলেক নেবা। উপেরর মেলখেত খয়াল কেরা float
d = b∗b − 4∗a∗c; িলেখ তাই করা হেয়েছ। এখন িন ায়ক যিদ ঋণা ক (negative) হয়
তাহেল তা বগমূল িনণয় করা স ব না, িক ি ঘাত সমীকরেণর সমাধােনর সূে িন ায়েকর
বগমূল আমােদর দরকার। কােজই িন ায়েকর মান ঋণা ক হেল আমােদর পে সমাধান করা
স ব নয়। একিট িট বাতা (error message) দিখেয় return EXIT FAILURE; ফরত
যাওয়া উিচৎ। নীেচর যাগান-ফলন (input-output) খয়াল কেরা, িঠক তাই ঘেটেছ।
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 2 −5 2
nischayok r i n a t o k !
bastob somadhan n a i !

িন ায়ক (discriminant) যিদ ঋণা ক (negative) না হয়, তাহেল এবার দখেত হেব
এিট িকনা। কারণ হেল সে ে আমােদর সমাধান িটই হেব, িক সমাধান িট আবার
আলাদা আলাদা না হেয় একই হেব। এইরকম অব ােক বলা হয় সমাপিতত (coincidental)
সমাধান। নীেচর যাগান-ফলেন (input-output) এিট দখােনা হেলা।
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 1 −2 1
duto somadhan ashole ekoi !
somapotito x = 1

সবেশেষর য অব া সিট হেলা িন ায়ক ঋণা কও নয়, ও নয়, তাহেল সিট ধনা ক
(positive)। আর এিটই হেলা সই অব া আমরা যিট ধের িনেয় একদম েত একটা ছাট
মেলখাংশ (program segment) দিখেয়িছলাম। কােজই আমরা সই কাজটু কের েটা
সমাধান আমােদর জানা সূ া যায়ী িনণয় কের ফলন দিখেয় return EXIT SUCCESS; কের
মেলখ শষ করেবা। নীেচর যাগান-ফলেন (input-output) এই অব া দখােনা হেলা।
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 2 −5 2
prothom somadhan x1 = 2
d i t i y o somadhan x2 = 0 . 5

উপেরর িব ািরত মেলখেত (program) খয়াল কেরা িতিট if এর শত সত হেল য


মহ ািট (block) িনবািহত হেব সই মহ া শষ হেয়েছ একিট return িদেয়। তার মােন ওই
শত েলা সত হেল মেলখেয়র (program) নীেচর কান অংশ আর িনবািহত হেব না। আর
একারেণ সংি if এর শত িমথ া হেল যা হেব সিট আর আমরা একিট else িলেখ তারপর
আেরকিট মহ ায় (block) ঢুিকেয় দই িন। কারণ if এর শত সত হেল য মহ া (block) তার
বাইের পুেরাটাইেতা এখন else এর জ , কােজই আলাদা কের মহ া করার দরকার নই।

৭.৮ বুলক সংেযাজক (Boolean Connectives)


একিট মেলখ (program) রচনা কেরা যিট একিট পূণক (integer) যাগান (input) িনেব।
তারপর সংখ ািট যিদ ৭ ও ১৩ উভয় ারা িবভাজ হয় তাহেল ফলন (output) িদেব "িম ভাগ

৯২
৭.৮. বুলক সংেযাজক (Boolean Connectives)

সংখ া", যিদ ৭ ারাও িবভাজ না হয় আবার ১৩ ারাও িবভাজ না হয় তাহেল ফলন িদেব "অভাগ
সংখ া", যিদ কবল ৭ ারা িবভাজ হয় িক ১৩ ারা িবভাজ নয় তাহেল ফলন িদেব " সৗভাগ
সংখ া", আর যিদ কবল ১৩ ারা িবভাজ হয় িক ৭ ারা নয় তাহেল ফলন িদেব " ভাগ সংখ া"।
যিদ সংখ ািট ৭ বা ১৩ য কান একিট বা উভয়িট ারা িবভাজ হয় তাহেল ফলন িদেব "ভাগ
সংখ া"। একিট সংখ া একই সােথ উপেরর এক বা একািধক ভােগ পড়েতই পাের।

িফিরি ৭.৪: সৗভাগ ও ভােগ র সংখ া (Lucky & Unlucky Numbers)


i n t nombor ;
cout << " sonkhya koto ? " ;
c i n >> sonkhya ;

i f ( sonkhya % 7 == 0 && sonkhya % 13 == 0 )


cout << " missrovaggo sonkhya " << endl ;

i f ( sonkhya % 7 ! = 0 && sonkhya % 13 ! = 0 )


cout << " ovaggo sonkhya " << endl ;

i f ( sonkhya % 7 == 0 && sonkhya % 13 ! = 0 )


cout << " souvaggo sonkhya " << endl ;

i f ( sonkhya % 13 == 0 && sonkhya % 7 ! = 0 )


cout << " durvaggo sonkhya " << endl ;

i f ( sonkhya % 7 == 0 | | sonkhya % 13 == 0 )
cout << " vaggo sonkhya " << endl ;

উপেরর মেলখাংেশ (program segment) && হেলা "এবং" আর | | হেলা "অথবা"।


তুিম চাইেল িসিপিপেত && এর বদেল and আর | | এর বদেল or িলখেত পােরা। আর বাংলায়
কখেনা কখেনা আমরা "এবং" এর বদেল "ও" বা "আর" িলখেবা, আর "অথবা" এর বদেল িলখেবা
"বা"। যাই হাক মেন রােখা && এর ফলাফল সত হয় যখন এর পােশর উপাদানই (operand)
সত হয়, আর যেকান একটা িমথ া হেলই ফলাফল িমথ া। অ িদেক | | এর ফলাফল িমথ া হয়
যখন এর পােশর উপাদানই (operand) িমথ া, আর য কান একিট সত হেলই ফলাফল সত ।
তা উপেরর মেলখাংশ বুঝার চ া কেরা। খুব কিঠন িকছু নয়। সম ািট িঠক যমন কের বাংলায়
বণনা করা হেয়েছ, মেলখেতও যন িঠক স রকম কেরই লখা হেয়েছ।
এবার ওই মেলখেক আমরা িকছু উ য়েনর চ া কির। একটা িবষয় খয়াল কেরা িবভাজ
হওয়া বা িবভাজ না হওয়া আমরা বারবার িহসাব কেরিছ। এইটা তা হওয়া উিচৎ নয়। তাছাড়া
ভাগেশষ বর করা অ অেনক অণুি য়া (operator) তুলনায় মাটামুিট সময় সােপ কাজ।
আমােদর তাই একবার ভাগেশষ িহসাব কের সটাই বারবার ব বহার করা উিচৎ। তা সই অ যায়ী
আমরা মেলখেত িকছু পিরবতন করেত পাির। মুলত ভাগেশেষর জ আমােদর েটা পূণক
(integer) চলক িনেত হেব int vagshes7 = sonkhya % 7; আর int vagshes13 =
sonkhya % 13; আর তারপর িতিট sonkhya % 7 এর বদেল vagshes7 এবং িতিট
sonkhya % 13 এর বদেল vagshesh13 িলখেত হেব। খুবই সহজ পিরবতন।
িক আমরা আসেল এই পিরবতেনর কথা বলিছ না। আমরা ভাগেশষ েলা পূণক (integer)
চলেক না রেখ বরং সংখ ািট ৭ বা ১৩ ারা িবভাজ িকনা তার সত তা বুলক (boolean) চলেক

৯৩
৭.৯. বুলক, পূণক, ভ ক (Boolean, Integer, Float)

রাখেত চাই। এে ে আমরা bool bivajyo7 = sonkhya % 7 == 0; িলখেবা। তােত সংখ া-


িট ৭ ারা িবভাজ হেল bivajyo7 চলেকর মান হেব true বা 1 আর ৭ ারা িবভাজ না হেল ওই
চলেকর মান হেব false বা 0। একই ভােব bool bivajyo13 = sonkhya % 13 == 0; িলখ-
ল bivajyo13 এর মান হেব true বা 1 যিদ সংখ ািট 13 ারা িবভাজ হয় আর মান হেব false
বা 0 যিদ সিট 13 ারা িবভাজ না হয়। নীেচ এই মেলখাংশ দখােনা হেলা।
i n t nombor ;
cout << " sonkhya koto ? " ;
c i n >> sonkhya ;

bool b i v a j y o 7 = sonkhya % 7 == 0 ;
bool b i v a j y o 1 3 = sonkhya % 13 == 0 ;

i f ( b i v a j y o 7 && b i v a j y o 1 3 )
cout << " missrovaggo sonkhya " << endl ;

i f ( ! b i v a j y o 7 && ! b i v a j y o 1 3 )
cout << " ovaggo sonkhya " << endl ;

i f ( b i v a j y o 7 && ! b i v a j y o 1 3 )
cout << " souvaggo sonkhya " << endl ;

i f ( b i v a j y o 1 3 && ! b i v a j y o 7 )
cout << " durvaggo sonkhya " << endl ;

i f ( bivajyo7 | | bivajyo13 )
cout << " vaggo sonkhya " << endl ;

উপেরর মেলখাংেশ (program segment) খয়াল কেরা bivajyo7 (বা একই ভােব
bivajyo13) এর মান সত নািক িমথ া আমরা িক bivajyo7 == true অথবা bivajyo7 =
= 1 িলেখ কির নাই, যিদও তা করেত পারতাম। আমরা বরং ফ চলকটা ব বহার কেরিছ কারণ
চলকটার মানই তা সরাসির সত বা িমথ া। আবার আলাদা কের == অণুি য়া (operator) িদেয়
সত বা িমথ া পরী া করার দরকার নই। তেব খয়াল কেরা যখন িবভাজ নয় পরী া করেত হেব
তখন আমরা !bivajyo7 (বা একই ভােব !bivajyou13) িলেখ অথাৎ চলেকর নােমর সামেন
! লািগেয় িদেয়িছ। এখােন ! হেলা নয় বা না অণুি য়া। তুিম চাইেল ! এর বদেল িসিপিপেত not
িলখেত পারেত। নয় অণুি য়া সত েক উপাদান (operand) িহসােব িনেয় িমথ া ফলাফল দয়
আর িমথ ােক উপাদান িহসােব িনেয় সত ফলাফল দয়। আর স কারেণ bivajyo7 == false
না িলেখ আমরা !bivajyo7 িলখেলই আমােদর কাজ হেয় যায়।

৭.৯ বুলক, পূণক, ভ ক (Boolean, Integer, Float)

একিট সংখ া জাড় না িবেজাড় তা িনণেয়র মেলখ (program) রচনা কেরা। তামার মেলখ-
ত তুিম কান বুলক চলক (boolean variable) বা অ য়ী অণুি য়া (relational operator)
ব বহার করেত পারেব না। তামােক পূণক মানেকই বুলক িহসােব ব বহার করেত হেব।

৯৪
৭.৯. বুলক, পূণক, ভ ক (Boolean, Integer, Float)

i n t sonkhya = 41 ; / / তুিম চাইেল যাগান িনেত পােরা।

i f ( sonkhya % 2 ! = 0 )
cout << " be jo r " << endl ;
else
cout << " j o r " << endl ;

এই মেলখিট (program) তুিম চাইেল উপেরর মেতা কের িলখেত পােরা। কান সংখ া
২ িদেয় ভাগ িদেল যিদ ভাগেশষ না হয় তাহেল সংখ ািট িবেজাড়, আর ভাগেশষ হেল
সংখ ািট জাড়। কােজই মেলখিট সহেজই িলেখ ফলা যায়। িক এেত অসমান িনণেয়র জ
একিট অণুি য়া != ব বহার করেত হে , যিট চাইেল আমরা ব বহার না কেরও কাজ চালােত
পাির। এর কারণ হেলা য কান সময় েক আমরা িমথ া ধের িনেত পাির আর য কান অ -
মানেক, সটা ধনা ক হাক বা ঋণা ক হাক, আমরা সটােক সত ধের িনেত পাির। তােত
আমােদর মানিট আালাদা কির িকনা তা আর পরী া করার দরকার পেড় না। কােজই নীেচর
মেলখাংেশর (program segment) মেতা কের != বাদ িদেয় ফ if (sonkhya % 2)
লখা মােনই হেলা if (sonkhya % 2 != 0) লখা।

i n t sonkhya = 41 ; / / তুিম চাইেল যাগান িনেত পােরা।

i f ( sonkhya % 2 ) / / ভাগেশষ অ হেল


cout << " be jo r " << endl ;
else / / ভাগেশষ হেল
cout << " j o r " << endl ;

উপেরর উদাহরেণ আমরা কবল পূণক ব বহার কেরিছ। িক ভ ক সংখ ার ে ও একই


কথা েযাজ । যমন নীেচর মেলখাংেশ ভ ক সংখ ািট িকনা তা িনণয় করা হেয়েছ। খয়াল
কের দেখা আমরা সংখ ািটেকই সরাসির শত িহসােব ব বহার কেরিছ। সংখ ািট না হেলই এিট
সত হেব shunyo noi ফলন আসেব, আর সংখ ািট হেল ফলন আসেব shunyo hoi।

f l o a t sonkhya = −3 . 5 ; / / তুিম চাইেল যাগান িনেত পােরা।

i f ( sonkhya ) / / সংখ ািট অ হেল


cout << " shunyo noi " << endl ;
else / / সংখ ািট হেল
cout << " shunyo hoi " << endl ;

তাহেল এখানকার আেলাচনায় আমরা দখলাম উপাদান (operand) িহসােব হেলা িম-
থ া (false) আর অ যেকান ধনা ক (positive) বা ঋণা ক (negative) পূণক (integer)
বা ভ ক (float) হেলা সত (true)। আর অ য়ী অণুি য়া (relational operators) আেলাচ-
নার সময় জেনিছ ফলাফল (result) িহসােব সবসময় false হেলা 0 এবং true হেলা 1। খয়াল
কেরা উপাদান (operand) িহসােব true 0 ছাড়া য কান িকছু হেলও ফলাফল (result) িহসােব
true কবল 1, false অব উভয় ে ই কবল 0।

৯৫
৭.১০. বুলক বীজগিণত (Boolean Algebra)

৭.১০ বুলক বীজগিণত (Boolean Algebra)


দ তার সােথ যিদ নাহেল (if else) ব বহার করেত চাইেল আমােদর খািনকটা বুলক বীজগ-
িণত (boolean algebra) জানা দরকার। অেনক সময় এবং &&, অথবা | |, নয় ! অণুি য়া
(operators) বশ কেয়কবার কের িনেয় তুিম হয়েতা জিটল একটা রািশ (expression) তরী
করেব যটা সরাসির মূল ায়ন (evaluate) করেত গেল ত কিট অণুি য়া (operator) ধােপ
ধােপ মূল ায়ন করেত হেব। িক বুলক বীজগিণত ব বহার কের সটা হয়েতা সরলীকরণ কের ছাট
কের অেনক কম অণুি য়া (operator) িদেয়ই কাশ করা স ব। অণুি য়ার সংখ া কম হওয়া
মােন সটা দ হেব, মেলখ িনবাহ (program execution) করেত সময় কম লাগেব।
বুলক বীজগিণেত (boolean algebra) সত েক মূতায়ন (representation) করা হয়
true বা 1 িদেয় আর িমথ ােক করা হয় false বা 0 িদেয়। িসিপিপেত অণুি য়াসমুহ (operator)
ফলাফেলর ে একদমএই প মূতায়নই (representation) মেন চেল, তেব উপাদােনর
(operand) ে িকছুটা উদার হেয় 0 ছাড়া যেকান মানেকই true িহসােব ধের নয়, false
ধের নয় যথারীিত কবল 0 ক। উপাদান ও ফলাফেলর ে true এর এই িভ তা মেন রাখেব।
অেনক সময় এিট িবধাজনক, আবার অেনক সময় এিট অেনক িটর (error) জ েদয়।
বুলক বীজগিণেতর (boolean algebra) থম য অণুি য়া (operator) তাহেলা নয়, না
যটা ! বা not িলেখ কাশ করা হয়। নয় অণুি য়ার উপাদান (operand) ও ফলাফল (result)
নীেচ খয়াল কেরা !true হেলা false আর ! false হেলা true। আমরা এখােন ≡ বা সমতুল
(equivalence) তীক ব বহার কের বুঝােবা য ওই তীেকর বাম ও ডানপাশ সমতুল।

• !true ≡ false • ! false ≡ true

ধেরা েটা ! পরপর আেছ যমন ! !true বা ! ! false বা ! !x, তাহেল ফলাফল কী হেব।
এইসব ে আমােদর ডােনর ! আেগ িহসাব করেত হেব, তার ওপর বােমর ! ধের শষ ফলাফল
িহসাব করেত হেব। একারেণ ! হেলা ডান সহেযাজ (right associative)। তা এখােন ডােনর
! অণুি য়া true বা false ক উে িদেব আর বােমর ! সটােক আবার িসধা করেব। তরাং
! !true হেব true, ! ! false হেব false, আর ! !x হেব x। বুলক বীজগিণেত এই িনয়মেক বলা
হয় েনা ঋণায়ন (double negation)। তুিম িক িতন বা বশী সংখ ক ! পরপর থাকেল কী
হেব বর করেত পারেব? অব ই পারেব, িত ইিট ! পর রেক বািতল কের িদেব।

• ! !x ≡ ! ( !x) ডান সহেযাজ • ! !true ≡ true েনা ঋণায়ন

• ! !x ≡ x েনা ঋণায়ন • ! ! false ≡ false েনা ঋণায়ন

বুলক বীজগিণেতর (boolean algebra) ি তীয় অণুি য়া (operator) এবং, ও যটা &&
বা and িলেখ কাশ করা হয়। ল কেরা এবং অণুি য়ার ফলাফল (result) সত যখন উভয়
উপাদানই (operand) সত , আর যেকান একিট উপাদান িমথ া হেলই ফলাফল িমথ া।

• true && true ≡ true • false && true ≡ false

• true && false ≡ false • false && false ≡ false

একিট উপাদান সত বা িমথ া ধের িনেল এবং && অণুি য়ার জে আমরা বশ িকছু সর-
লীকরণ কের ফলেত পাির য েলােক আমরা সেত র সরল (true simplification) ও িমথ ার
সরল (false simplification) বলেবা। কান একিট উপাদান আমরা যিদ আেগই বুেঝ ফিল
সিট সত না িমথ া তাহেল আমরা এই সরলীকরণ েলা কােজ লাগােত পারেবা।

৯৬
৭.১০. বুলক বীজগিণত (Boolean Algebra)

• x && true ≡ x সেত র সরল • x && false ≡ false িমথ ার সরল

• true && x ≡ x সেত র সরল • false && x ≡ false িমথ ার সরল

বুলক বীজগিণেতর (boolean algebra) তৃতীয় অণুি য়া (operator) অথবা, বা যটা | |


বা or িলেখ কাশ করা হয়। ল কেরা অথবা অণুি য়ার ফলাফল (result) িমথ া যখন উভয়
উপাদানই (operand) িমথ া, আর যেকান একিট উপাদান সত হেলই ফলাফল সত ।

• true | | true ≡ true • false | | true ≡ true

• true | | false ≡ true • false | | false ≡ false

একিট উপাদান সত বা িমথ া ধের িনেল অথবা | | অণুি য়ার জে আমরা বশ িকছু সর-
লীকরণ কের ফলেত পাির য েলােক আমরা সেত র সরল (true simplification) ও িমথ ার
সরল (false simplification) বলেবা। কান একিট উপাদান আমরা যিদ আেগই বুেঝ ফিল
সিট সত না িমথ া তাহেল আমরা এই সরলীকরণ েলা কােজ লাগােত পারেবা।

• x | | true ≡ true সেত র সরল • x | | false ≡ x িমথ ার সরল

• true | | x ≡ true সেত র সরল • false | | x ≡ x িমথ ার সরল

বুলক বীজগিণেত অণুি য়া েলার (operator) অ গণ তার ম (precedence order)


হেলা থেম নয় !, তারপর এবং &&, আর শেষ অথবা | |, এই েমর অ থা করেত চাইেল
েয়াজেন ব নী ব বহার করেত হেব। তাছাড়া থেবাধকতা এড়ােত ব নী ব বহার করা উিচৎ।
নীেচর উদাহরণ িট খয়াল কেরা। থমিটেত আেগ ! তারপর &&, শেষ | | করেত হেব, ব নী
ব বহার কের সটাই বুঝােনা হেয়েছ। ি তীয় উদাহরণিটেত ! আেগ করেলও && আেগ | | করায়
সটা সিঠক হয় িন। এখােন ̸≡ িদেয় বুঝােনা হেয়েছ ইপাশ পর েরর সমতুল নয়।

• x && !y | | z ≡ (x && (!y)) | | z আেগ !, মােঝ &&, পের | |


• x && !y | | z ̸≡ x && ((!y) | | z) আেগ !, মােঝ | | নয়, পেরও && নয়

গািণিতক অণুি য়া (mathematical operators) ও আেরাপেণর (assignment) সােথ


যিদ যৗি ক অণুি য়া েলা িমিলেয় দখা হয় তাহেল সব িমিলেয় অ গণ তার ম িন প:

১. ++ −− এিকক উ র (unary postfix বাম থেক ডােন (left associative)


২. ++ −− + − ! এিকক পূব (unary prefix) ডান থেক বােম (right associative)
৩. ∗ / % িয়ক (binary) বাম থেক ডােন (left associative)
৪. + − িয়ক (binary) বাম থেক ডােন (left associative)
৫. && িয়ক (binary) বাম থেক ডােন (left associative)
৬. | | িয়ক (binary) বাম থেক ডােন (left associative)
৭. = += −= ∗= /= %= িয়ক (binary) ডান থেক বােম (right associative)
৮. , িয়ক (binary) বাম থেক ডােন (left associative)

৯৭
৭.১১. বুলক সমতুল (Boolean Equivalence)

৭.১১ বুলক সমতুল (Boolean Equivalence)


এবার আমরা বশ িকছু সমতুেলর িনয়ম (equivalence rule) দখেবা। এই িনয়ম েলার বা-
মপাশ আর ডানপাশ সবসময় সমতুল। আমরা তাই এ েলা ব বহার কের িবিভ সমেয় আমােদর
যৗি ক রািশ (logical expression) সরল করার চ া করেবা।
নীেচর েটা িনয়ম হেলা এবং, অথবার িবিনময় িনয়ম (commutative rule)। িবিনময়
িনয়েম অণুি য়ার (operator) উপাদান েলা পাশ পিরবতন করেলও ফলাফল একই থােক।

• x && y ≡ y && x িবিনময় • x || y ≡ y || x িবিনময়

নীেচর েটা িনয়ম হেলা সহেযাজেনর িনয়ম (associative rule)। এই িনয়েম একই অণু-
ি য়া (operator) পরপর থাকেল আমরা য কানিট আেগ মূল ায়ন (evaluate) কের তার
ফলাফেলর সােথ অ অণুি য়ার মূল ায়ন করেত পাির, আর তােত ফলাফল একই হেব।

• x && y && z ≡ (x && y) && z ≡ x && (y && z) সহেযাজ

• x | | y | | z ≡ (x | | y) | | z ≡ x | | (y | | z) সহেযাজ

নীেচর েটা িনয়ম হেলা ব টন িনয়ম (distributive rule)। এই িনয়েম িট িভ অণুি য়া


(operator) পরপর থাকেল আমরা একিটেক আেরকিটর ওপর ব টন কের িদেত পাির। পািটগ-
িণেত ব টেনর িনয়েমর উদাহরণ হেলা x ∗ (y + z) = x ∗ y + x ∗ z।

• x && y | | z ̸≡ x && (y | | z) ≡ (x && y) | | (x && z) ব টন

• x | | y && z ̸≡ (x | | y) && z ≡ (x && z) | | (y && z) ব টন

• x | | y && z ≡ x | | (y && z) ≡ (x | | y) && (x | | z) ব টন

• x && y | | z ≡ (x && y) | | z) ≡ (x | | z) && (y | | z) ব টন

নীেচর িনয়ম েলা হেলা শাষন িনয়ম (absorption rule)। থম চারিট িনয়েম খয়াল
কেরা x যিদ true হয় তাহেল x | | y বা y | | x এর মানও true আর ফেল && এর ফলাফলও
true। আবার x যিদ false হয় তাহেল && এর ফলাফল অব ই false। তাহেল বামিদেকর
রািশ েলার মান সবসময় x এর মান যা তাই। একই ভােব শেষর চারিট িনয়েম খয়াল কেরা x
যিদ false হয় তাহেল x && y বা y && x এর মানও false। আবার x যিদ true হয় তাহেল
| | এর ফলাফল অব ই true। তাহেল বামিদেকর রািশ েলার মান সব সময় x এর মান যা তাই।
কােজই এই িনয়ম েলা তামাকের বুলক রািশেক কত সহজ ও ছাট কের ফেল!

• x && (x | | y) ≡ x শাষন • x | | (x && y) ≡ x শাষন

• x && (y | | x) ≡ x শাষন • x | | (y && x) ≡ x শাষন

• (x | | y) && x ≡ x শাষন • (x && y) | | x) ≡ x শাষন

• (y | | x) && x ≡ x শাষন • (y && x) | | x) ≡ x শাষন

নীেচর িনয়ম েটােত অণুি য়া েলার (operator) উপাদান েটা একই। এবং && ও অথবা
| | উভেয়র ফলাফল এে ে সবসময় উপাদানিটর মান যা তাই হেব। একিট উপাদােনর িনেজর

৯৮
৭.১২. সত ক সারণী (Truth Table)

সােথ িনেজর ওপর কান অণুি য়া (operator) যু হেল ফলাফল যিদ উপাদানিটই হয় তাহেল
অণুি য়ািটর এই ধমেক বলা হয় অ ি য়তা (idempotence)। সব অণুি য়াই িক অ ি য়
নয়, যমন পািটগিণেত সবাব ায় x + x = x সত নয়, কােজই যাগ + অ ি য় নয়। বুলক
বীজগিণেত এবং && ও অথবা | | উভেয়ই অ ি য় (idempotent)।

• x && x ≡ x অ ি য়তা • x || x ≡ x অ ি য়তা

v
নীেচর িনয়ম েটােত অণুি য়া েলার (operator) উপাদান েটা পর েরর িবপরীত। এবং
&& এর ফলাফল এে ে সবসময় false হেব, কারণ েটা উপাদােনর মেধ য কান একিট তা
িমথ া হেবই, আর য কান একিট িমথ া হেলই এবং এর ফলাফল িমথ া। তাই এই িনয়মেক বলা
হয় অস িত (contradiction)। আর অথবা | | এর ফলাফল এে ে সবসময় true হেব, কারণ
েটা উপাদােনর মেধ য কান একিট তা সত হেবই, আর য কান একিট সত হেলই অথবা
এর ফলাফল সত । তাই এই িনয়মেক বলা হয় নঞ মধ ম (excluded middle)।

• x && !x ≡ false অস িত • x | | !x ≡ true নঞ মধ ম

নীেচর িনয়ম েটার নাম িড মরগােনর িনয়ম (De Morgan's Law)। এই িনয়ম েটা খুবই
পূণ এবং ায়শই বুলক রািশর সরলীকরেণ ব ব ত হয়। এই িনয়ম অণুযায়ী এবং && এর
ফলাফেলর ওপর নয় ! করেল য ফলাফল পাওয়া যায় তা আেগ উপাদান েলার ওপের নয় ! কের
সই ফলাফেলর ওপর অথবা | | চািলেয় পাওয়া ফলাফেলর সমতুল। একই ভােব অথবা | | এর
ফলাফেলর ওপর নয় ! করেল য ফলাফল পাওয়া যায় তা আেগ উপাদান েলার ওপের নয় ! কের
সই ফলাফেলর ওপর এবং && চািলেয় পাওয়া ফলাফেলর সমতুল।

• ! (x && y) ≡ !x | | !y িড মরগান • ! (x | | y) ≡ !x && !y িড মরগান

৭.১২ সত ক সারণী (Truth Table)


সমতুেলর িনয়ম েলা (equivalence rule) য সিঠক, অথবা য কান েটা বুলক রািশ সমতুল
িকনা, এইটা তুিম কীভােব মাণ করেব। মাণ করাটা আসেল খুবই সহজ। উপাদান েলার মােনর
যত রকম সমােবশ (combination) স ব, িতিটর জ তামােক সমতুেলর িনয়েমর বাম ও
ডান পাশ সমান িকনা পরী া কের দখেত হেব। আমরা সাধারণত সত ক সারণী (truth table)
ব বহার কের সটা কের থািক। চেলা উদাহরণ িহসােব আমরা িড মরগােনর িনয়ম েটার থমিট
মাণ কির। একই প িত অ সরণ কের তুিম িড মরগােনর অ িনয়মিট মাণ করেত পারেব।
আর চাইেল উপেরর অ া য কান সমতুেলর িনয়ম েলাও িনেজ িনেজ মাণ করেব।
িড মরগােনর থম সূ িটেত চলক (variable) আেছ ইিট x ও y, আর চলক িটর মান
স ব কবল true ও false। এখন িট চলেকর জে িট মান িনেয় আমরা চারিট সমােবশ
(combination) পেত পাির। এর িতিটর জ আমরা িনয়মিটর বাম পাশ ও ডান পাশ মূল া-
য়ন (evaluate) কের দখেবা। এখােন বেল রািখ কান সমতুেলর িনয়েম যিদ ৩িট চলক থােক
তাহেল সমােবশ হেব ৮িট, ৪িট থাকেল হেব ১৬িট, অথাৎ n িট চলক থাকেল সমােবশ হেব 2n িট।
আর এর িতিট সমােবেশর জ সত ক সারণীেত (truth table) একিট কের আিড় (row) থা-
কেব। সত ক সারণীেত খািড় েলা (column) হেব িবিভ উপরািশর (subexpression) মান
য েলার মান আমােদর মূল ায়ন করেত হেব যিদ আমরা মুল রািশর (expression) মান পেত

৯৯
৭.১৩. বুলক সরলীকরণ (Boolean Simplification)

চাই। যমন ! (x && y) মূল ায়ন করেত গেল আমােদর x && y আেগ মূল ায়ন করেত হেব,
তমিন ভােব !x | | !y মূল ায়ন করেত গেল !x ও !y মূল ায়ন করেত হেব।

সত ক সারণী (Truth Table)


x y x && y ! (x && y) !x !y !x || ! y
true true true false false false false
true false false true false true true
false true false true true false true
false false false true true true true

উপেরর সত ক সারণীেত (truth table) িতিট আিড় (row) খয়াল কেরা:

১. থম আিড়েত (row) x ও y উভেয়র মানই true। তরাং x && y ও true, ফেল ! (


x && y) হেব false। তারপর !x আর !y উভয়ই হেলা false, ফেল !x | | !y হেলা
false। কােজই ! (x && y) আর !x | | !y উভেয়র মান সমান।

২. ি তীয় আিড়েত (row) x,y যথা েম true, false, ফেল x && y হেলা false আর ! (
x && y) হেলা true। তারপর !x ও !y হেব যথা েম false ও true, ফেল !x | | !y
হেলা true। তরাং ! (x && y) আর !x | | !y এর মান সমান।

৩. তৃতীয় আিড়েত (row) x,y যথা েম false , true, ফেল x && y হেলা false আর ! (
x && y) হেলা true। তারপর !x ও !y হেব যথা েম true ও false, ফেল !x | | !y
হেলা true। তরাং ! (x && y) আর !x | | !y এর মান সমান।

৪. চতুথ আিড়েত (row) x ও y উভেয়র মানই false। তরাং x && y ও false, ফেল !
(x && y) হেব true। তারপর !x আর !y উভয়ই হেলা true, ফেল !x | | !y হেলা
true। কােজই ! (x && y) আর !x | | !y উভেয়র মান সমান।

তরাং উপাদান েলার (operand) মান যাই হাক না কন সবাব ায় ! (x && y) আর !x | |


!y এর মান সমান, অথাৎ তারা এেক অপেরর সমতুল মাণ হেয় গেলা।

৭.১৩ বুলক সরলীকরণ (Boolean Simplification)


শতািল পিরগণনায় (conditional programming) বুলক বীজগিণত (boolean algebra)
িঠক কী কােজ লােগ? বুলক বীজগিণত ব বহার কের িকছু সরলীকরেণর উদাহরণ দখাও। আর
এই সরলীকরেণর কারেণ মেলখেত (program) কী ভাব পেড় সটাও দখাও।
ধেরা তামােক একিট মেলখ (program) িলখেত হেব যিট তুিম কান ণীেত পেড়া আর
তামার বয়স কত এই িট যাগান (input) িনেয় জানােব তুিম মারগ লড়াই খলেত পারেব িক
না। তুিম যিদ প ম ণীেত পেড়া তাহেল তুিম মারগ লড়াই খলেত পারেব। আর তুিম যিদ প ম
ণীেত নাও হও িক তামার বয়স যিদ ১০ বছর হয় তাহেলও তুিম মারগ লড়াই খলেত পারেব।
এই মেলখিট আমরা যিদ-নাহেল িদেয় খুব সহেজ িলেখ ফলেত পাির।
নীেচর মেলখাংশ খয়াল কেরা। আমরা েটা চলক ব বহার করিছ shreni আর boyosh
, য েটা থেম ঘাষণা (declare) কের তারপর যাগান যাচনা (input prompt) দিখেয়
যাগান (input) িনেত হেব। ধের িনই তুিম ও েলা িনেজ িনেজ করেত পারেব। আমরা কবল

১০০
৭.১৩. বুলক সরলীকরণ (Boolean Simplification)

াসি ক অংশটু দিখ। থেম if shreni == 5) িদেয় পরী া করা হেলা প ম ণী িকনা,
হেল ফলন (output) হেব "khelte parbe"। আর প ম ণী যিদ না হয় িক বয়স যিদ ১০
বছর হয় সটা পরী া করার জ আমােদর লাগেব if (shreni != 5 && boyosh == 10)
যিট আমরা আেগর if এর else এর সােথ লািগেয় িদেবা। আর সবেশেষ কান if এর শতই সত
না হেল আমরা ফলন (output) দখােবা "khelte parbena"। একটা পূণ িবষয় খয়াল
কেরা, বাংলা ভাষায় যটা "িক " সটা িসিপিপেত িগেয় হেয় যাে "এবং" &&।
i f ( s h r e n i == 5 )
cout << " khelte parbe " << endl ;
e l s e i f ( s h r e n i ! = 5 && boyosh == 10)
cout << " khelte parbe " << endl ;
e l s e / / উপেরর কানিটই না হেল
cout << " khelte parbena " << endl ;

উপেরর মেলখাংেশ েটা if এর শত সত হেলই আমােদর একই ফলন দখােত হয়। আমরা
তাই চ া করেত চাই একটা if িদেয় িবষয়টা সামলােত। সটা করা খুবই সহজ যিদ তুিম সম াটা
উে া িদক থেক ভােবা। তুিম মারগ লড়াই খলেত পারেব যিদ তুিম ৫ম ণী পেড়া অথবা তুিম
৫ম ণীেত না িক তামার বয়স ১০ বছর হেল। তা এই থেক তুিম খুব সহেজ খলেত পারার
শত িলেখ ফলেত পােরা shreni == 5 | | shreni != 5 && boyosh == 10, তাই না!
i f ( s h r e n i == 5 | | s h r e n i ! = 5 && boyosh == 10)
cout << " khelte parbe " << endl ;
e l s e / / উপেরর শত সত না হেল
cout << " khelte parbena " << endl ;

এখন কথা হে এই য খািনকটা জিটল একটা শত আমরা িলেখ ফললাম, এটােক িক কান
ভােব সরলীকরণ করা যায়? সরলীকরণ করার জ চেলা ধের িনই p ≡ shreni == 5 আর q
≡ boyosh == 5। তাহেল shreni != 5 ক লখা যায় !p। ফেল আমােদর শতিট দাঁড়ােলা
p | | !p && q, আমরা এিটেক বুলক বীজগিণত (boolean algebra) িদেয় সরল করেবা।

p | | !p && q দ শত যা সরল করেত হেব

≡ (p | | !p) && (p | | q) ব টন িনয়ম (distribution)

≡ true && (p | | q) নঞ মধ ম (excluded middle)

≡ p || q সেত র সরল (true simplification)

তরাং উপেরর সরেলর ফেল া রািশ (expression) অ যায়ী আমােদর মেলখাংশ


দাঁড়ােব িন প, যখােন আমােদর একিট অিতির শত আর মূল ায়ন করেত হে না। আমরা p
এর বদেল shreni == 5 আর q এর বদেল boyosh == 10 িলখেবা।
i f ( s h r e n i == 5 | | boyosh == 10)
cout << " khelte parbe " << endl ;
e l s e / / উপেরর শত সত না হেল
cout << " khelte parbena " << endl ;

১০১
৭.১৪. মই, অ াি , সংেযাজক (Ladder, Nesting, Connectives)

একই রকম আেরকিট উদাহরণ দেখা। ধেরা কান একটা মেলখেত (program) শত
দাঁড়াে ! (p && (!p | | q)) | | q। এখন কথা হে এিটেক সরল করেল কী দাঁড়ােব।
! (p && (!p | | q)) | | q দ শত যা সরল করেত হেব
≡ ! ( (p && !p) | | (p && q)) | | q ব টন িনয়ম (distribution)
≡ ! (false | | (p && q)) | | q অস িত (contradiction)
≡ ! (p && q) | | q িমথ ার সরল (false simplification)
≡ ( !p | | !q) | | q িড মরগান (De Morgan)
≡ !p | | ( !q | | q) সহেযাজন (associative)
≡ !p | | true নঞ মধ ম (excluded middle)
≡ true সেত র সরল (true simplification)
উপেরর সরলীকরেণর ফেল আমরা if ( ! (p && (!p | | q)) | | q) না িলেখ কবল if
(true) িলখেত পারেবা। িক একটা িবষয় দেখেছা, সরলীকরেণর ফলাফল একদম একটা বক
মান true হেয় গেছ। এর অথ দ শেতর মান কখেনা চলক p বা q এর ওপর িনভর কেরনা।
তরাং আমােদর আেদৗ কান if লাগােনার দরকার নাই। কারণ শত সত হেল যিট করেত হেতা
শত সবসময় সত হওয়ায় তুিম সিট এখন শত পরী ণ ছাড়াই করেব।
/ / i f ( true ) / / শত লখার দরকার নাই , টীকায় আটেক িদেয়িছ
cout << " kee moja " << endl ; / / কবল এিট িলখেলই হেব

তুিম এবার িজে স করেত পােরা সরলীকরেণর ফেল যিদ false আেস তাহেল কী হেব?
সিত ই তা কী হেব? সে ে আমােদর িলখেত হেব if (false) তাই না! িক সটা মােন তা
শত সব সময় িমথ া, শতিটর সত হওয়ার কান স াবনা নই। আর সে ে শত সত হেল যা
করার কথা িছেলা সটা কখেনাই করেত হেব না। ফেল তুিম এই if (false) আর তারপর শত
সত হেল যা করেত তার সব মেলখ (program) থেক মুেছ িদেত িদেত পােরা।
/ / i f ( f a l s e ) / / শত লখার দরকার নাই , টীকায় আটেক িদেয়িছ
/ / cout << " kee moja " << endl ; / / শত সব সময় িমথ া

৭.১৪ মই, অ াি , সংেযাজক (Ladder, Nesting, Connectives)


যিদ-নাহেলর মই (if-else ladder) ও অ াি যিদ-নাহেল (nested if-else) ব বহার না কের
কী ভােব সংেযাজক (connectives) এবং &&, অথবা | |, নয় ! ব বহার কের একই উে
বা বায়ন করা যায় তা আেলাচনা কেরা। অথবা উে াটা অথাৎ সংেযাজক ব বহার না কের কী
ভােব যিদ-নাহেলর মই বা অ াি যিদ ব বহার কের কাজ চালােনা যায় তা দখাও।
নীেচর উদাহরণ েলা খয়াল কেরা। এ েলােত েটা কের আেছ। বামপােশর ে যিদ-
নাহেল মই (if-else ladder) অথবা অ াি যিদ-নাহেল (nested if-else) িদেয় মেলখাংশ
লখা হেয়েছ, আর ডান পােশর ে তার সমতুল (equivalent) মেলখাংশ লখা হেয়েছ সং-
যাজক (connectives) এবং && অথবা | | না ! িদেয়। আমরা আসেল িবধামেতা কখেনা
বামপােশর মেতা কের িলিখ আবার কখেনা ডানপােশর মেতা কেরও িলিখ।

১০২
৭.১৪. মই, অ াি , সংেযাজক (Ladder, Nesting, Connectives)

i f ( shorto1 ) i f ( shorto1 | | shorto2 )


cout << " k i s u ekta " ; cout << " k i s u ekta " ;
e l s e i f ( shorto2 ) else
cout << " k i s u ekta " ; cout << " onno k i s u " ;
else cout << " koro " << endl ;
cout << "onno k i s u " ;
cout << " koro " << endl ;

উপেরর যিদ-নাহেল মইেয়র (if-else ladder) উদাহরেণ খয়াল কেরা shorto1 সত


হেলও "kisu ekta" ফলেন (output) যােব আবার shorto2 সত হেলও "kisu ekta" ফল-
ন (output) যােব। আর এ েটাই িমথ া হেল ফলেন যােব "onno kisu"। বাম ও ডান উভয়
পােশর মেলখাংেশই (program segment) এই একই ব াপার ঘটেব। একটা িবষয় উে খ
করা দরকার: shorto1 সত হেল বামপােশ দেখা shorto2 পরী ণই দরকার পের না। ডান-
পােশও আসেল একই ঘটনা ঘটেব। অথবা | | এর ফলাফল যেহতু য কান একিট উপাদান সত
হেলই সত হয়, সেহতু shorto1 সত হেলই shorto2 এর মুল ায়ন ছাড়াই | | এর ফলাফল
সত হেয় যােব। এই য ব াপারিট এটােক বলা আংিশক মুল ায়ন (partial evaluation), এেত
অদরকারী কাজ িকছুটা কেম, মেলখ (program) িকি ত তগিতর হয়।
i f ( shorto1 ) i f ( shorto1 && shorto2 )
i f ( shorto2 ) cout << " k i s u ekta " ;
cout << " k i s u ekta " ; else
else cout << " onno k i s u " ;
cout << " onno k i s u " ; cout << " koro " << endl ;
else
cout << "onno k i s u " ;
cout << " koro " << endl ;

উপেরর অ াি যিদ-নাহেলর (nested if-else) উদাহরেণ খয়াল কেরা shorto1 সত


হেল তারপর shorto2ও সত হেল "kisu ekta" ফলেন (output) যােব। আর শত েটার
যেকান একটা িমথ া হেলও ফলেন (output) যােব ফলেন যােব "onno kisu"। বাম ও ডান
উভয় পােশ মেলখাংেশই (program segment) এই একই ব াপার ঘটেব। এখােনও সই
একটা িবষয় উে খ করা দরকার: shorto1 িমথ া হেল বামপােশ দেখা shorto2 পরী ণই
দরকার পের না। ডানপােশও আসেল একই ঘটনা ঘটেব। অথবা && এর ফলাফল যেহতু য
কান একিট উপাদান িমথ া হেলই িমথ া হয়, সেহতু shorto1 িমথ া হেলই shorto2 এর
মুল ায়ন ছাড়াই && এর ফলাফল িমথ া হেয় যােব। এই য ব াপারিট এটােক বলা আংিশক মুল ায়ন
(partial evaluation), এেত অদরকারী কাজ িকছুটা কেম, গিত িকছুটা বােড়।
i f ( shorto ) i f ( ! shorto )
cout << " k i s u ekta " ; cout << " onno k i s u " ;
else else
cout << "onno k i s u " ; cout << " k i s u ekta " ;
cout << " koro " << endl ; cout << " koro " << endl ;

উপেরর উদাহরেণ বামপােশ shorto ব বহার করা হেয়েছ আর ডানপােশ !shorto। ফেল
শত সত হেল যা করেত হেব আর িমথ া হেল যা করেত হেব এই েটা ান বদলাবদিল কেরেছ।

১০৩
৭.১৪. মই, অ াি , সংেযাজক (Ladder, Nesting, Connectives)

i f ( shorto1 ) i f ( shorto1 | | ! shorto2 )


cout << " k i s u ekta " ; cout << " k i s u ekta " ;
e l s e i f ( shorto2 ) else
cout << "onno k i s u " ; cout << " onno k i s u " ;
else cout << " koro " << endl ;
cout << " k i s u ekta " ;
cout << " koro " << endl ;

উপেরর উদাহরেণ খয়াল কের দেখা "kisu ekta" ফলেন (output) যােব যিদ shorto1
সত হয় অথবা যিদ shorto2 িমথ া হয়, অ কথায় !shorto2 সত হয়। আর shorto1
িমথ া হেল তারপর shorto2ও িমথ া হেল ফলেন (output) যােব "onno kisu"। িঠক এই
ব াপারিটই উভয়পােশর মেলখাংেশ (program segment) িতফিলত হেয়েছ।
i f ( shorto1 ) i f ( ! shorto1 | | shorto2 )
i f ( shorto2 ) cout << " k i s u ekta " ;
cout << " k i s u ekta " ; else
else cout << " onno k i s u " ;
cout << " onno k i s u " ; cout << " koro " << endl ;
else
cout << " k i s u ekta " ;
cout << " koro " << endl ;

উপেরর উদাহরণিট একটু জিটল। বামপােশ খয়াল কেরা "kisu ekta" ফলেন (output)
যােব যিদ shorto1 িমথ া হয় অথবা তা না হেল যিদ shorto2 সত হয়। কথায় বলেল িঠক
তাই-ই ডানপােশও িলখা হেয়েছ। আর একটু বশী গভীের বুঝেত চাইেল ধেরা বামপােশ "kisu
ekta" ফলেন যােব যিদ shorto1 && shorto2 || !shorto1 সত হয়। বুলক বীজগিণত িদ-
য় সরলীকরণ করেল এিট আসেব !shorto1 || shorto2, তুিম িনেজ চ া কের দেখা।
bool shorto = true ; i f ( shorto1 && shorto2 )
i f ( ! shorto1 ) cout << " k i s u ekta " ;
shorto = f a l s e ; else
i f ( ! shorto2 ) cout << " onno k i s u " ;
shorto = f a l s e ; cout << " koro " << endl ;
i f ( shorto )
cout << " k i s u ekta " ;
else
cout << "onno k i s u " ;
cout << " koro " << endl ;

উপেরর এই উদাহরণিট খয়াল কেরা। থম িট if এেকবাের আলাদা আলাদা, কউ কােরা


অ াি ও (nested) নয়, আবার মইও (ladder) নয়। ডানপােশ যমন খুব র কের সংে েপ
আমরা short1 && shorto2 িলেখিছ। অেনকসময়ই এটা করা স ব হয় না। কারণ শত েটা
আলাদা কের থেম মূল ায়ন করাটা হয়েতা বশ এক একটা কাজ। তা এইরকম ে আমরা
বামপােশ যিট কেরিছ আলাদা একটা চলক িনেয়িছ shorto যখােন মুলত আমরা && এর ফলা-
ফল চাই। আমরা জািন && ফলাফল য কান একিট উপাদান (operand) িমথ া হেলই িমথ া

১০৪
৭.১৫. যিদ-নাহেল অ লায়ন (If-Else Optimisation)

হয়। তাই আমরা েত shorto এর মান িনেয়িছ true, এরপর shorto1 িমথ া হেল অথাৎ
!shorto1 সত হেল আমরা shorto ক িমথ া কের িদেয়িছ। একই ভােব shorto2 িমথ া হেল
অথাৎ !shorto2 সত হেলও আমরা shorto ক িমথ া কের িদেয়িছ। তাহেল েটা শেতর য
কানিট িমথ া হেলই shorto িমথ া হেয় যােব। িঠক && এর ফলাফেলর মেতা। শেষর if else
এ এবার shorto ব বহার কের ফলন দবার পালা। তেব একটা িবষয় খয়াল কেরা ডানপােশ য-
মন shorto1 িমথ া হেল আংিশক মূল ায়েনর কারেণ (partial evaluation) shorto2 আর
পরী ণই করা হেব না, বামপােশ িক তা হে না। তুিম যিদ এই উ য়ন টু করেত চাও তাহেল
তামােক if ( !shorto2) বদেল িলখেত হেব else if ( !shorto2)।
bool shorto = f a l s e ; i f ( shorto1 | | shorto2 )
i f ( shorto1 ) cout << " k i s u ekta " ;
shorto = true ; else
i f ( shorto2 ) cout << " onno k i s u " ;
shorto = true ; cout << " koro " << endl ;
i f ( shorto )
cout << " k i s u ekta " ;
else
cout << "onno k i s u " ;
cout << " koro " << endl ;

এই উদাহরণিটও িঠক আেগর উদাহরণিট মেতা, তেব এখােন | | এর জ করা হেয়েছ। অথ-
বার | | ে যেকান একিট উপাদান (operand) সত হেলই ফলাফল সত হয়, আমরা তাই
shorto এর আিদ মান ধেরিছ false। আর তারপর শত েটার য কানিট সত হেলই shorto
ক সত করা হেয়েছ। তুিম যিদ আংিশক মূল ায়ন (partial evaluation) এখােনও কােজ লা-
গােত চাও তাহেল বামপােশ if (shorto2) বদেল else if (shorto2) িলখেব।

৭.১৫ যিদ-নাহেল অ লায়ন (If-Else Optimisation)

ধেরা তামার ইশ েল গিণত পরী ায় ৫০ বা বশী পেল পাশ, না হেল ফল। আর ৮০ বা বশী
পেল তারকা িনেয় পাশ। তামার ণীেত ১০০ জন িশ াথী আেছ, যােদর মেধ মাটামুিট ১০ জন
ফল করেব, ২০ জন তারকা সহ পাশ করেব আর বাঁকী ৭০ জন ফ পাশ করেব। তুিম এমন একিট
মেলখ (program) রচনা কেরা যিট একজন িশ াথীর ছাে র ন র যাগান (input) িনেয়
ফল, পাশ, বা তারকা সহ পাশ ফলন (output) িদেব। তামার মেলখিট ১০০ জন িশ াথীর
জ ১০০ বার আলাদা আলাদা কের চালােনা (run) হেব। তেব এই ১০০ বার চালােনােত মাট
সময় যােত কম লােগ মেলখটা সটা মাথায় রেখ রচনা করেত হেব।
i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
else // না হেল
cout << " f e l l " << endl ; // ফল ফলন

i f ( nombor >= 80) // যিদ তারকা ন র


cout << " taroka " << endl ; // তারকা ফলন

১০৫
৭.১৫. যিদ-নাহেল অ লায়ন (If-Else Optimisation)

ধেরা উপেরর মেতা কের তুিম মেলখ তরী কেরেছা। য িশ াথী ফল করেলা বা পাশ
করেলা বা তারকা সহ পাশ করেলা, তার জ তা যা ফলন তা দখােতই হেব, সখােন সময় কম
লাগা বশী লাগার ব াপার নাই। সময় কম বা বশী লাগার হেলা তুিম কতবার শত পরী া কের
কাজটা করেত পারেছা সটােত। যমন ধেরা একজন ফল করা িশ াথীর জ উপেরর মেলখেত
(nombor >=50) শত পরী া হেব আবার মেলখ য ভােব লখা হেয়েছ তােত nombor
>= 80 শতিটও পরী া হেব। শত পরী ার ফলাফল সত হাক আর িমথ া হাক পরী া তা
করেতই হেব। ফেল মাট িট শত পরী া হেলা। য িশ াথীিট কবল পাশ করেব খয়াল কের
দেখা তার জে ও িটই শতই পরী া করেত হেব। একই হেব তারকাসহ পােশর ছাে র জে ও
িট শতই পরী া করেত হেব। তরাং উপেরর মেলখ িদেয় এই সম ার সমাধান করেল ১০০
জন িশ াথীর জ মাট শত পরী া হেলা ১০০ * ২ = ২০০ বার।
i f ( nombor >= 50) // যিদ পােশর ন র
{
cout << " pash " << endl ; // পাশ ফলন
i f ( nombor >= 80) / / যিদ তারকা ন র
cout << " taroka " << endl ; / / তারকা ফলন
}
else // না হেল
cout << " f e l l " << endl ; // ফল ফলন

এবার একটু ভেব দেখা পাশ বা ফল িনণয় করার জ তা আমােদর একটা শত লাগেবই,
িক যখন আমরা জেন গলাম একজন িশ াথী ফল কেরেছ, তখন তার জে ও কন আমরা
nombor >= 80 শত পরী া করেবা? সটা তা অদরকারী কাজ হেব। তরাং তারকা দখা-
না অংশটু যিদ আমরা পােশর জ য অংশ সখােন একটা মহ া (block) তরী কের সই
মহ ার িভতের িনেয় যাই, তাহেল nombor >= 80 শতিট কবল পাশ করা িশ াথীেদর জ
পরী া হেব। উপেরর মেলখাংশ দেখা। তা এই ে পাশ বা ফল িশ াথীর জ কবল ১
টা শত পরী া হেলা আর তারকা পাওয়া ছাে র জ ২টা তরাং মাট শত পরী ণ হেলা ২০*২
+ (৭০+১০)*১ = ১২০ বার মা । িনি তভােবই এই মেলখ আেগরিটর চেয় তাড়াতািড় ১০০
জন িশ াথীর ফলাফল দখােনার কাজ শষ করেব! কমন মজার িবষয় না!
i f ( nombor >= 80) // যিদ তারকা ন র
{
cout << " pash " << endl ; // পাশ ফলন
cout << " taroka " << endl ; // তারকা ফলন
}
e l s e i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
else // না হেল
cout << " f e l l " << endl ; // ফল ফলন

তুিম হয়েতা ভাবেছা দিখ আেরক ভােব করা যায় িকনা যােত আেরা কম সময় লােগ। যমন
ধেরা তুিম থেম ৮০ বা বশী িকনা পরী া করেব, তারপর ৫০ এর বশী িকনা পরী া করেব,
অথাৎ উপেরর মেলখাংেশর (program segment) মেতা কের। এখােন খয়াল কেরা তারকা
পাওয়া িশ াথীেদর জ শত পরী া করা লাগেব ১বার সিট nombor >= 80 আর ফ পাশ
বা ফল করা িশ াথীেদর জ ২িট শতই পরী া করা লাগেব। ফেল মাট শত পরী ণ হেব ২০*১

১০৬
৭.১৬. িতিনক অণুি য়া (Ternary Operator)

+ (৭০+১০)*২ = ১৮০ বার। তরাং উপেরর এই তৃতীয় মেলখাংশটু আমােদর লখা থম


মেলখাংেশর চেয় একটু তগিতর হেলও ি তীয়িটর চেয় যেথ ধীরগিতর হেব। তুিম আেরা
নানান ভােব চ া কের দখেত পােরা, তেব আমােদর ি তীয় মেলখাংশিটই সবেচেয় তগিতর
হেব, কারণ এেত সবেচেয় কম সংখ ক বার শত পরী া করেত হেয়েছ।
আ া তুিম কী ধরেত পেরেছা কন ি তীয় মেলখাংশিটেত সবেচেয় কম সংখ ক বার শত
পরী া করেত হেব? উ রটা িক খুবই সহজ। আমােদর দখেত হেব সবেচেয় বশী সংখ ক
িশ াথী কান ভােগ পেড়। এে ে ফ পাশ কের সেবা ৭০ জন। আমরা চাইেবা এই ৭০
জেনর জ ফলন (output) যােত কম সংখ ক, এে ে মা একটা শত পরী া কেরই িদেত
পাির। উ া িদেক য ভােগ িশ াথীর সংখ া যত কম তার জ তত বশী শত পরী া করা যেত
পাের। আমােদর তৃতীয় মেলখাংেশ আমরা আসেল এই িনয়ম ভ কেরিছ। কারণ এটােত তারকা
পাওয়া ২০ জেনর ফলন আমরা দখাই মা ১বার শত পরী া কের, আর পাশ করা ৭০জেনর ফলন
দখাই ২বার শত পরী া কের। আর স কারেণ এিট ি তীয় মেলখাংশ থেক ধীরগিতর হেব। তা
এখন থেক যিদ-তাহেল িনেয় কাজ করার সময় শতিদেয় সৃি হওয়া ডাল-পালা েলার কানটােত
কত েলা ব াপার (case) আসেত পাের সটা মাথায় রেখ দ মেলখ তরী করেব, কমন!

৭.১৬ িতিনক অণুি য়া (Ternary Operator)

িসিপিপেত শতালী পিরগণনায় (conditional programming) িতিনক অণুি য়ািট (ternary


operator) কী? উদাহরণসহ িতিনক অণুি য়ািটর ব বহার দখাও।
িসিপিপ ভাষায় ? : এই তীক িট িবেশষ ভােব একসােথ ব বহার কের িতিনক অণুি -
য়ািট (ternary operator) পাওয়া যায়। িতিনক অণুি য়ািট যিদ-তাহেল-নাহেলর (if-then-
else) কাজ কের, তেব েটার মেধ তফাৎ হেলা িতিনক অণুি য়া একিট রািশর (expression)
অংশ িহসােব থােক, ফেল এর একটা ফলাফল তরী হেব। আর if-else একটা শতযু িববৃিত
(conditional statement) তরী কের যার কান ফলাফল নই।
i n t prothom , d i t i y o ; / / চলক িটর মান যাগান িনেত পােরা

i n t boro = prothom > d i t i y o ? prothom : d i t i y o ;

িতিনক অণুি য়া ব বহার কের আমরা উপের েটা সংখ ার বড়িট বর করার মেলখাংশ
দিখেয়িছ। এখােন থেম ? িচে র আেগ য শত পরী া আেছ সিট মূল ায়ন হেব। শত যিদ
সত হয় তাহেল ? আর দাঁটা : িচে র মােঝ য মানিট আেছ সিট হেব অণুি য়ািটর ফলাফল
আর শত যিদ িমথ া হয় তাহেল অণুি য়ািটর ফলাফল হেব দাঁটা : িচে র পের থাকা অংশটু ।
তাহেল উপেরর মেলখাংেশ prothom > ditiyo শতিট সত হেল ফলাফল হেব prothom
অথাৎ বড়িট আর শতিট িমথ া হেল ফলাফল হেব ditiyo কারন এিটই তখন বড় অ িটর চেয়।
তরাং আমরা ফলাফল িহসােব prothom ও ditiyo চলক িটর মেধ সবসময় বড়িটই পাি ।
তুিম িন য় এখন েটা সংখ ার মেধ ছাটিট বর করার মেলখাংশ এভােব িলখেত পারেব!
i n t prothom , d i t i y o ; / / চলক িটর মান যাগান িনেত পােরা
i n t boro ; / / বড় মানিট রাখার জ চলক ঘাষণা

prothom > d i t i y o ? boro = prothom : boro = d i t i y o ;

১০৭
৭.১৬. িতিনক অণুি য়া (Ternary Operator)

তুিম িক চাইেল েটা সংখ ার বড়িট বর করার জ উপেরর মেতা কেরও িলখেত পারেত।
এইে ে চলক (variable) boro ত মান আেরাপণ (assign) আমরা িতিনক অণুি য়ার িভ-
তেরই কেরিছ খয়াল কেরা। আেরাপণ (assign) অণুি য়ার ফলাফল (result) তা আেরািপত
মানিটই হয়, তরাং এে ে ও িতিনক অণুি য়ার ফলাফল িহসােব আমরা বড়িটই পােবা, যিদও
boro চলেক মান আেরাপণ আেগই হেয় িগেয়েছ। তুিম িজে স করেত পােরা এই ে িত-
িনক অণুি য়ািটর যটা ফলাফল আসেব সটা আসেল কী কােজ লাগেব। এইখােন আসেল আমরা
ফলাফলিট কােজ লাগাি না। িক তুিম চাইেল int fol = prothom > ditiyo ? boro =
prothom : boro = ditiyo; িলখেতই পােরা। সে ে বড় মানিট boro চলেকর মেধ যমন
থাকেব তমিন fol চলেকর মেধ ও থাকেব। িতিনক অণুি য়ার ব বহার এভােব বশ সংি ।
i n t prothom , d i t i y o ; / / চলক িটর মান যাগান িনেত পােরা
i n t boro ; / / বড় মানিট রাখার জ চলক ঘাষণা

i f ( prothom > d i t i y o ) // থমিট বড় হেল


boro = prothom ;
else
boro = d i t i y o ; / / আর তা না হেল

িতিনক অণুি য়ার কাজ তা উপেরর মেতা কের যিদ-নাহেল িদেয়ও করা যেত পাের। তাহেল
কখন তুিম িতিনক অণুি য়া ব বহার করেব কখন যিদ-নাহেল ব বহার করেব? অত সংি
ধরেনর বেল িতিনক অণুি য়া (ternary) আসেল টুকটাক ছাটখাট িকছুর জ বশী ব বহার
করা হয়। আর যিদ-নাহেল হেলা একদম সব জায়গায় ব বহার করার জ , িবেশষ কের শত সত
বা িমথ া হেল যিদ একটা মহ া (block) িনবাহ (execute) করেত হয়।
i n t prothom , d i t i y o , t r i t i y o ; / / মান যাগান িনেত হেব

i n t boro = prothom > d i t i y o ? prothom : d i t i y o ;


boro = boro > t r i t i y o ? boro : t r i t i y o ;

তুিম িক িতিনক অণুি য়া (ternary operator) ব বহার কের িতনিট সংখ ার মেধ সব-
চেয় বড়িট বর করেত পারেব। িন য় পারেব, এ আর এমন কিঠন কী? উপেরর মেলখাংেশর
মেতা কের থেম েটার মেধ বড়িট বর করেব। তারপর boro এর সােথ tritiyo িট তুলনা
কের যিদ boroিটই বড় হয় তাহেল ফলাফল boro আর যিদ tritiyo িট বড় হয় তাহেল ফলা-
ফল tritiyo িট। িক আমরা আসেল এই রকম আলাদা েটা িতিনক অণুি য়া চাি না। আম-
রা বরং একটা িতিনক অণুি য়ােক আেরকিট িতিনক অণুি য়ার মেধ ঢুিকেয় িদেবা, আর যােক
বলব অ াি (nested) িতিনক অণুি য়া। নীেচর মেলখাংশ খয়াল কেরা, আমরা একটু ছা-
ড়ন (indentation) িদেয় িলেখিছ। থেম prothom ও ditiyo তুলনা করা হেয়েছ। শত সত
হওয়া মােন prothom বড় যিটেক tritiyo এর সােথ তুলনা করা হেয়েছ। আর শত িমথ া হও-
য়া মােন ditiyo বড়, কােজই এিটেক tritiyo এর সােথ তুলনা করা হেয়েছ। িতিনক অণুি য়া
ব বহার কেরই আেরা নানান ভােব এিট করা স ব, তুিম িনেজ িনেজ চ া কের দেখা।
i n t prothom , d i t i y o , t r i t i y o ; / / মান যাগান িনেত হেব

i n t boro = prothom > d i t i y o ?


( prothom > t r i t i y o ? prothom : t r i t i y o ) :
( ditiyo > tritiyo ? ditiyo : tritiyo ) ;

১০৮
৭.১৭. পি ব াপার (Switch Cases)

৭.১৭ পি ব াপার (Switch Cases)


এমন একিট মেলখ (program) রচনা কেরা যিট একিট পূণক (integer) আর একিট ভ ক
(fractioner) যাগান (input) িনেব। পূণকিট ১ হেল মেলখিট পেরর সংখ ািটেক কােণর
পিরমান রিডয়ােন ধের িনেয় তার ল া পাত (sine) ফলন িদেব। আর পূণকিট ২ হেল ল া পাত
(cosine), ৩ হেল শা পাত (tangent) ফলন িদেব। তেব এই িতনিটর কানিটই না হেল
বলেব "অসমিথত পছ "। এই মেলখিটেত তুিম পি ব াপার (switch case) ব বহার করেব
আর যিদ-নাহেলর (if-else) ব বহােরর সােথ কী তফাৎ হয় সটাও আেলাচনা করেব।

িফিরি ৭.৫: াপণ সহ ি েকাণিমিত (Trigonometry with Menu)


i n t onupat ; // কান অ পাত s i n e , cosine , tangent
f l o a t kone ; // কােণর পিরমান রিডয়ােন

/ / থেম াপণ (menu) দখােনা হেব


cout << " onupat 1 : lombanupat ( s i n e ) " << endl ;
cout << " onupat 2 : lognanupat ( cosine ) " << endl ;
cout << " onupat 3 : sporshanupat ( tangent ) " << endl
cout << endl ;

/ / তারপর অ পাত ও কাণ যাগান নয়া হেব


cout << " onupat : " << endl ; // যাগান যাচনা
c i n >> onupat ; // যাগান নওয়া
cout << " kone : " << endl ; // যাগান যাচনা
c i n >> kone ; // যাগান নওয়া

/ / পি ব াপার ব বহার কের ফলন দখােনা হেব


switch ( onupat ) / / এখােন চলক না হেয় কান রািশও হেত পাের
{
case 1 : / / ল া পাত ( s i n e ) cmath িশরনিথ লাগেব
cout << " lombanupat : " << s i n ( kone ) << endl ;
break ;
case 2 : / / ল া পাত ( cosine ) #i n c l u d e <cmath>
cout << " lognanupat : " << cos ( kone ) << endl ;
break ;
case 3 : // শা পাত ( tangent ) cmath িশরনিথ লাগেব
cout << " sporshanupat : " << tan ( kone ) << endl ;
break ;
default : / / অগত া িট বাতা ( e r r o r )
cout << " osomorthito posondo " << endl ;
break ;
}

cout << " kee chomotkar ! " << endl ; / / পি র বাইের অ িকছু

১০৯
৭.১৭. পি ব াপার (Switch Cases)

উপেরর মেলখাংশ (program segment) খয়াল কেরা। যমন বলা হেয়েছ তমন কের
িট চলক নয়া হেয়েছ: কান অ পাত তা রাখার জ চলক onupat আর কত রিডয়ান কান
তা রাখার জ চলক kone। এরপর একটা াপণ (menu) দখােনা হেয়েছ, কান সংখ া িদেয়
কান অ পাত বুঝােনা হে সটা ব বহারকারীেক জানােনার জ : 1 িদেল ল া পাত (sine), 2
িদেল ল া পাত (cosine), 3 িদেল শা পাত (tangent)। এরপের অ পাত ও কাণ যাগান
(input) নয়ার জ থেম যাগান যাচনা (input prompt) কের তারপর যাগান নওয়া হেয়-
ছ। তারপর মুল অংশ যখােন পি ব াপার (switch case) ব বহার কের য অ পাত চাওয়া
হেয়েছ সিট দখােনা হেব। পি -ব াপােরর পের আেছ অ িকছু মেলখাংেশর বাঁকী অংশ।
আমরা কবল পি ব াপার (switch case) অংেশ নজর দই। যেহতু onupat চলকিটর
(variable) মান ওপর িনভর করেব আমরা কান অ পাত ফলেন (output) দখােবা, আম-
রা তাই িলেখিছ switch(onupat) আর তারপর আমােদর একিট মহ া (block) তরী করেত
হেব { } বাঁকা ব নী (curly brackets) যুগল িদেয়। এবার অ পােতর মান কত হেল কী কর-
ত হেব তার সবিকছু আমরা রাখেবা মহ ার িভতের। খয়াল কেরা onupat এর মান 1, 2, 3
হওয়ার জ আমােদর িতনিট ব াপার (case) আেছ যমন case 1: case 2: case 3:; খ-
য়াল কেরা থেম case তারপের onupat চলকিটর কান মান সিট তারপর একটা : দাঁটা
(colon)। িতিট ব াপােরর (case) পের দেখা আমরা cout িদেয় ি েকানিমিতর অ পাত
sine, cosine, tangent ব বহার কের ফলন দিখেয়িছ। তারপর িলেখিছ break; অথাৎ এই-
খােন পি -ব াপােরর াি (break) ঘটেব। এই াি েয়র (break) কাজ আমরা একটু পেরই
আেলাচনা করিছ। তার আেগ দেখা case 3: এর াি েয়র (break) পের রেয়েছ default:
যিট হেলা অগত া ব াপার অথাৎ ওপেরর কান case এর সােথই onupat এর মান না িমলেল
অগত া ব াপারিট ঘটেব বেল ধের নয়া হেব। তাহেল onupat এর মান যিদ 1, 2, 3 িভ অ
িকছু হয় তাহেল default: অগত া ব াপারিট ঘটেব। যথারীিত সখােন আমরা িটবাতা (error
message) দিখেয়িছ। এখােন িক break; আেছ শেষ।
মেলখ িনবাহ (program execution) করার সময় ধের িনেত পােরা অদৃ বাতােমর
মেতা একটা ব াপার আেছ যটােক বলা হয় িনয় ণ (control)। এই িনয় ণ বাতামিট মেলখ
িনবােহর েত main িবপাতেকর একদম থম সািরেত থােক। বাতামিট যই সািরেত থােক
সই সাির িনবািহত (executed) হয়। আর তারপর িনয় ণ বাতামিট পেরর সািরেত লাফ দয়,
তখন সই সািরিট িনবািহত হয়। এভােব িনয় ণ বাতােমর লাফালািফ ও সই সােথ সংি সািরর
িনবাহ এেক এেক চলেত থােক। যিদ-নাহেল (if-else) আেলাচনা করার সময় আমরা বেলিছলাম
শত সত হেল িকছু কাজ হয় আবার শত িমথ া হেল অ িকছু কাজ হয়। িঠক যন েটা শাখা
(branch) তরী হয়। শেতর ওপর িনভর কের িনয় ণ বাতামিট আসেল হয় এই শাখায় নাহয়
ওই শাখায় িগেয় লাফ িদেয় বেস। িনয় ণ য শাখায় বেস সই শাখা িনবািহত হয়, অ শাখা
িনবািহত হয় না। িনয় ণ বাতাম এরপর if-else এর পেরর অংেশ চেল যায়।
পি -ব াপােরর (switch-case) ে বলেতা িনয় ণ switch(onupat) এর পের লাফ
িদেয় কান সািরেত িগেয় বসেব? যিদ onupat এর মান হয় 1 তাহেল িগেয় বসেব case 1: এর
সািরেত, 2 হেল িগেয় বসেব case 2: এর সািরেত, আর 3 হেল বসেব case 3: এর সািরেত,
আর িতনেটর কানটাই না হেল িগেয় বসেব default: এর সািরেত। িনয় ন switch(onupat
) হেত লাফ িদেয় িগেয় সংি ব াপাের (case) বসার পের সািরর পর সাির এেক এেক যেত
থাকেব যত ণনা একিট break; পাে । অথাৎ break পাওয়ার আেগ পয ত কিট সািরই
এেকর পর এক িনবািহত হেত থাকেব। আর break; পাওয়ার পেরই িনয় ণ আর একিট লাফ
িদেয় পি -ব াপােরর (switch-case) মহ ার বাইের চেল যােব। াি না িদেল কী ঘটেব আমরা
সটা পরবতীেত আেলাচনা করেবা। তেব বেল রািখ িতিট ব াপােরর (case) শেষ আসেল াি
(break) দয়াটা আসেলই খুব পূণ, আর আমরা আবার না দয়ার ভুলটা ায়ই কির।

১১০
৭.১৮. অ াি পি ব াপার (Nested Switch Cases)

৭.১৮ অ াি পি ব াপার (Nested Switch Cases)


অ াি পি ব াপার (nested switch case) ব বহার কের এমন একিট মেলখ (program)
রচনা কেরা, যিট থেম াপণ (menu) দিখেয় জানেত চােব আমরা বেগর িহসাব করেত চাই,
নািক বৃে র িহসাব করেত চাই। সিট যাগান (input) নবার পের আমােদর পছ বগ হেল
মেলখিট যাগান িনেব দঘ আর কী দখেত চাই ফল নািক পিরসীমা তা, আর সই অ যায়ী
ফলন (output) দখােব। আর আমােদর পছ বৃ হেল মেলখিট ব াসাধ যাগান িনেব আর
িনেব ফল নািক পিরিধ দখেত চাই তা, আর স অ যায়ী ফলন িদেব।
নীেচর মেলখ (program) খয়াল কেরা। থেম আকৃিতর াপণ (menu) দখােনা হেয়-
ছ। তারপর akriti চলক ঘাষণা (variable declare) কের যাগান যাচনা (input prompt)
কের যাগান (input) নয়া হেয়েছ। এরপর akriti চলেকর মােনর ওপর পি (switch) যােত
িতনিট ব াপার (case) আেছ। চলক akriti এর মান 1 হেল case 1: বগ, 2 হেল case 2: বৃ ,
আর অ িকছু হেল অগত া ব াপাের default: িট বাতা দখােনা হেয়েছ।

িফিরি ৭.৬: অ াি পি িদেয় াপণ (Menu with Nested Switch)


/ / আকৃিতর াপণ (menu)
cout << " a k r i t i 1 borgo " << endl ;
cout << " a k r i t i 2 b r i t t o " << endl ;

int akriti ; / / চলক ঘাষণা


cout << " a k r i t i : " ; / / যাগান যাচনা
c i n >> a k r i t i ; / / যাগান নওয়া

/ / বাইেরর পি যার িভতের আবার পি থাকেব


switch ( a k r i t i ) / / আকৃিতর পি
{
case 1 : / / বাইেরর পি বগ হেল
/ / কী পছ তা দখােনা হেব
cout << " posondo b r i t t o " << endl ;

/ / বেগর দঘ যাগান িনেত হেব


i n t doirgho ; / / চলক ঘাষণা
cout << " doirgho : " ; / / যাগান যাচনা
c i n >> doirgho ; / / যাগান নওয়া

/ / কী চাই তার াপণ (menu)


cout << " 1 c h a i k h e t r o f o l " << endl ;
cout << " 2 c h a i porishima " << endl ;

i n t keechai ; / / চলক ঘাষণা


cout << " kee c h a i : " ; / / যাগান যাচনা
c i n >> keechai ; / / যাগান নওয়া

১১১
৭.১৮. অ াি পি ব াপার (Nested Switch Cases)

/ / িভতেরর পি যিট আেরকিট পি র িভতের


switch ( keechai ) / / পি কী চাই
{
case 1 : / / িভতেরর পি ফল হেল
cout << " k h e t r o f o l : " ;
cout << doirgho ∗ doirgho ;
cout << endl ;
break ;

case 2 : / / িভতেরর পি পিরসীমা হেল


cout << " porishima : " ;
cout << 4∗ doirgho ;
cout << endl ;
break ;

default : / / িভতেরর পি অ িকছু হেল িটবাতা


cout << " osomorthito posondo " << endl ;
break ;
}
/ / এিট িভতেরর পি থেক বাইের
cout << " borger hi s a b shes " << endl ;
break ;

case 2 : / / িভতেরর পি বৃ হেল


/ / কী পছ তা দখােনা হেব
cout << " posondo b r i t t o " << endl ;

/ / বৃে র ব াসাধ যাগান িনেত হেব


i n t bashardho ; / / চলক ঘাষণা
cout << " bashardho : " ;
c i n >> bashardho ;

/ / কী চাই াপণ
cout << " 1 c h a i k h e t r o f o l " << endl ;
cout << " 2 c h a i p o r i d h i " << endl ;

i n t chaokee ; / / চলক ঘাষণা


cout << " chao kee : " ; / / যাগান যাচনা
c i n >> chaokee ; / / যাগান নওয়া

/ / িভতেরর পি যিট আেরকিট পি র িভতের


switch ( chaokee ) / / কী চাই পি
{

১১২
৭.১৮. অ াি পি ব াপার (Nested Switch Cases)

case 1 : / / িভতেরর পি ফল হেল


cout << " k h e t r o f o l : " ;
cout << 3 . 1416 ∗ bashardho ∗ bashardho ;
cout << endl ;
break ;

case 2 : / / িভতেরর পি পিরিধ হেল


cout << " p o r i d h i : " ;
cout << 2 ∗ 3 . 1416 ∗ bashardho ;
cout << endl ;
break ;

default : / / িভতেরর পি অ িকছু হেল িটবাতা


cout << " osomorthito posondo " << endl ;
break ;
}
/ / এিট িভতেরর পি থেক বাইের
cout << " b r i t t e r hi s ab shes " << endl ;
break ;

default : / / বাইেরর পি অ িকছু হেল িটবাতা


cout << " osomorthito posondo " << endl ;
break ;
}

// বাইেরর পি রও বাইের
cout << " kee chomotkar ! " << endl ;

যখন akriti এর মান 1 অথাৎ বগ বেছ নয়া হেয়েছ তখন থেম ফলেন (output) দখােনা
হেয়েছ য বগ পছ করা হেয়েছ। তারপর চলক doirgho ঘাষনা (declare) কের যাগান
যাচনা (input prompt) কের যাগান (input) নওয়া হেয়েছ। তারপর বেগর কী জানেত চাই
তার জ আেরকিট াপণ (menu) দখােনা হেয়েছ, যখােন ফল নািক পিরসীমা চাই সটা
দখােনা হেয়েছ। ব বহারকারীর পছ যাগান নয়ার জ এখােনও keechai নােম একিট চলক
ঘাষনা কের যাগান যাচনা কের মান যাগান নয়া হেয়েছ। তারপর চলক keechai এর মােনর
ওপর িনভর কের আেরকিট পি ব াপার (switch case) ব বহার কের ফল বা পিরসীমা
ফলেন (output) দখােনা হেয়েছ। এই পি ব াপারিট আেগর পি -ব াপােরর িভতের, আর
তাই এই িভতেররিটেক বলা হেব অ াি পি ব াপার (nested switch case)।
যখন akriti এর মান 2 অথাৎ বৃ বেছ নয়া হেয়েছ তখন থেম ফলেন (output) দ-
খােনা হেয়েছ য বৃ পছ করা হেয়েছ। তারপর চলক bashardho ঘাষনা (declare) কের
যাগান যাচনা (input prompt) কের যাগান (input) নওয়া হেয়েছ। তারপর বৃে র কী জান-
ত চাই তার জ আেরকিট াপণ (menu) দখােনা হেয়েছ, যখােন ফল নািক পিরিধ চাই
সটা দখােনা হেয়েছ। ব বহারকারীর পছ যাগান নয়ার জ এখােনও chaokee নােম এক-
িট চলক ঘাষনা কের যাগান যাচনা কের মান যাগান নয়া হেয়েছ। বেগর ে ব ব ত চলক
keechai থেক িভ একিট নাম নয়ার জ ই মুলত নাম দওয়া হেয়েছ chaokee। এই েটা

১১৩
৭.১৯. পি ব াপার াি (Switch Cases Breaks)

চলকই বাইেরর পি -ব াপােরর য মহ া (block) তার িভতের। একই মহ ায় েটা চলেকর


(variable) নাম একই হেত পাের না। আর স কারেণ নােমর এই িভ তা, যিদও তােদর উে
এখােন একই রকম। যাইেহাক, চলক chaokee এর মােনর ওপর িনভর কের এরপর আেরক-
িট পি ব াপার ব বহার কের ফল বা পিরিধ ফলেন (output) দখােনা হেয়েছ। এই পি
ব াপারিট (switch case) বেগর পি -ব াপােরর মেতাই বাইেরর পি ব াপারিটর িভতের, তাই
এিটও একিট অ াি পি ব াপার (nested switch case)।
এই পযােয় িজে স করেত পােরা, break; পাওয়া মা িনয় ণ (control) সই পি ব া-
পার (switch case) থেক বর হেয় আেস বেল আমরা জািন, তা িভতেরর পি ব াপার থেক
break; পেল কাথায় যাে ? উ র হে িভতেরর পি ব াপার থেক বর হেয় যখােন আস-
ব সটা িক বাইেরর পি র মহ া। িভতেরর পি থেক বর হেয় কাথায় আসেব সটা বুঝার
জ বেগর পি ব াপােরর বাইের cout << " borger hisab shes" << endl; আর বৃে র
পি ব াপােরর বাইের cout << "britter hisab shes" << endl; লখা হেয়েছ। আর বা-
ইেরর পি ব াপােরর বাইের লখা হেয়েছ cout << "kee chomotkar!" << endl;।

৭.১৯ পি ব াপার াি (Switch Cases Breaks)


পি ব াপাের (switch cases) াি (break) না িদেল কী ঘেট, আর াি না দওয়া কাথায়
কােজ লাগেত পাের? যথাযথ উদাহরণ সহ মেলখ (program) িলেখ দখাও।
ধেরা তামার একজন অিতিথ আসেব। স যিদ সকাল ১০ বা ১১টায় আেস তােক তামার
সকােল না া, পুেরর খাবার, আর িবকােলর না া খাওয়ােত হেব। আর স যিদ ১২টায় বা ১৩টায়
আেস তেব তােক কবল পুেরর খাবার ও িবকােলর না া খাওয়ােত হেব, আর িতিন যিদ ১৪টা বা
১৫টায় আেস তাহেল তােক কবল িবকােলর না া খাওয়ােত হেব। এই সময় েলা িভ অ কান
সমেয় যিদ স আেস তাহেল তােক িকছুই খাওয়ােনার দরকার নাই।
switch ( somoy )
{
case 10 :
case 11 :
cout << " s o k a l e r nasta " << endl ;
case 12 :
case 13 :
cout << " dupurer khabar " << endl ;
case 14 :
case 15 :
cout << " b i k a l e r nasta " << endl ;
}

উপেরর মেলখেত আমরা াি (break) ছাড়া পি ব াপার (switch case) িলেখ -


মেলখ (program) তরী কেরিছ। এখােন চলক somoy এ আমরা অিতিথর আসার সময় রা-
খেবা, সটা যাগান (input) নয়া হেয় থাকেত পাের, বা কান ভােবা আেরািপত (assigned)
হেয় থাকেত পাের। সাধারণত পি েত য ব াপারটার সােথ িমেল যায় সখান থেক িববৃিত েলা
(statement) িনবািহত হেত কের আর াি (break) পাওয়া পয চেল। আর একবার
কান ব াপােরর সােথ িমেল গেল পের আর কান ব াপােরর সােথ িমলােনার চ া করাও হয় না,
বরং াি (break) না পাওয়া পয মাগত িববৃিত েলা িনবািহত হেত থােক।

১১৪
৭.১৯. পি ব াপার াি (Switch Cases Breaks)

খয়াল কেরা উপেরর মেলখাংেশ (program segment) সময় যিদ ১০টা হয়, িঠক স-
খােন িকছু না থাকেলও পরপর য িববৃিত েলা আেছ স েলা এেক এেক িনবািহত হেব, ফেল যমন
sokaler nasta, dupurer khabar, bikaler nasta সব েলা এেক এেক ফলেন আসেত
থাকেব। সময় যিদ ১১টা হয় তাহেলও একই ঘটনা ঘটেব। সময় যিদ ১২ টা হয়, তাহেল sokaler
nasta ফলেন আসেব না, িক dupurer khabar ও bikaler nasta এেক এেক আসেত
থাকেব। পেরর সময় েলার জে ও একই রকেমর কথাবাতা েযাজ ।
আর একটা িবষয় খয়াল কেরা, উপেরর পি েত (switch) আমরা অগত া ব াপার default
: দই নাই। ফেল সময় যিদ তািলকায় না থােক তাহেল সিট কান ব াপােরর (case) সােথই
িমলেব না, আর এেত ফলেন (output) িকছুই আসেব না। আসেল পি েত (switch) অগত া
(default) ব াপার িদেতই হেব এমন কান কথা নই, দরকার না লাগেল িদেব না।

switch ( nombor )
{
case 4 :
case 0 :
case 2 :
cout << " j o r " << endl ;
break ;
case 1 :
case 5 :
case 3 :
cout << " b e j o r " << endl ;
break ;
}

এবার িকছু : পি েত কী ব াপার েলা মােনর মা সােরই থাকেত হেব? মান েলা কী
ধারাবািহকভােব পরপর সংখ া হেত হেব? উভয় ে র উ র হে "না"। কােজই িঠক উপেরর
উদাহরেণর মেতা তুিম দরকার মেতা ব াপার েলা (case) পরপর না হেলও বা উে াপা া েম
হেলও িলখেত পারেব। আবার দেখা িকছু ব াপাের (case) াি (break) নাই, আবার িকছু
ব াপাের আেছ। মাট কথা যখােন াি দয়া দরকার সখােন break; না দরকার হেল নাই।
আেরা িকছু : পি েত (switch) ব াপার েলা (case) কী পূণক (integer) ছাড়া ভ ক
(fractioner) হেত পারেব? আর switch() এ চলক (variable) ছাড়া অ িকছু ব বহার করা
যােব? তুিম কান ভ ক (fractioner) ব াপার িহসােব ব বহার কের দখেত পােরা, তােত সং-
কলেন (compile) িট বাতা (error message) দখােব, তার মােন হেলা পারেব না। আর
switch(nombor) এখােন switch এ য কবল চলক হেত হেব তা নয়, য কান রািশ যিট
পূণক ফলাফল দয় সিটই তুিম ব বহার করেত পােরা, যমন নীেচর উদাহরণ দেখা, আমরা ২
িদেয় ভাগেশেষর ওপর পি ব বহার করিছ। ভাগেশষ ০ হেলা জাড়, আর ১ হেল িবেজাড়।

switch ( nombor % 2 )
{
case 0 : cout << " j o r " << endl ; break ;
case 1 : cout << " b e j or " << endl ; break ;
}

১১৫
৭.২০. পি ব াপার যিদ-নাহেল (Swtich Cases If Else)

পি েত অব তুিম একই ব বহার ইবার ব বহার করেত পারেব না, যমন case 1: িল-
খ একই পি র িভতের পের আবার case 1: িলখেত পারেব না। তেব পি র িভতের অ াি
(nested) পি থাকেল সখােন case 1: থাকেতই পাের।

৭.২০ পি ব াপার যিদ-নাহেল (Swtich Cases If Else)


পি ব াপার (switch cases) ব বহার না কের যিদ নাহেল (if else) ব বহার করেলই তা হয়।
তাহেল পি ব াপার কাথায় ব বহার করেবা, আর কাথায় যিদ নাহেল ব বহার করেবা?
switch ( nombor )
{
case −2 :
case −1 :
cout << " r i n a t o k " << endl ;
break ;

case 0 :
cout << " shunyo " << endl ;
break ;

case 1 :
case 2 :
cout << " dhonatok " << endl ;
break ;
}

উপেরর উদাহরণিট খয়াল কেরা। এখােন আমরা একিট ন র ধনা ক (positive), ঋণা ক
(negative), নািক (zero) িনণয় করেত চাই। আমরা যিদ আেগ থেক জািন য ন রিট ক-
বল −2, −1, 0, 1, 2 এই পাঁচিট িনিদ সংখ ার একিট হেত পারেব, অ আর িকছু নয়, এ েলার
বাইের নয়, কবল তাহেলই আমরা উপেরর মেতা কের পি ব াপার (switch case) ব বহার
করেত পারেবা। আবার চাইেল আমরা নীেচর মেতা কের সমতুল আেরকিট মেলখাংশও িলখেত
পারেবা, যখােন আমরা পি ব াপার ব বহার না কের যিদ নাহেল (if else) ব বহার করেবা। যিদ
না হেল ব বহার কের অব আেরা নানা ভােবই এিট করা স ব, এিট কবল একটা উদাহরণ।
i f ( nombor == −2 | | nombor == −1 )
cout << " r i n a t o k " << endl ;
e l s e i f ( nombor == 1 | | nombor == 2 )
cout << " dhonatok " << endl ;
e l s e / / i f ( nombor == 0 )
cout << " shunyo " << endl ;

িক আমােদর ন রিট যিদ উপেরর ওই পাঁচিট সংখ ার বাইের অিনিদ সংখ ক ন র েলার
একিট হয়, অথবা অেনক অেনক বশী সংখ েকর একিট হয়, তাহেল িঠক পি ব বহার কের আমরা
সামলােত পারেবা না। কারণ এ সব ে ব াপােরর সংখ া (number of cases) হেব অেনক
বশী বা অসংখ । আর একিট ব াপার হেলা পি েত ব াপার েলা মুলত মান সমান == হেল কী

১১৬
৭.২১. ব াপীয় ও ানীয় চলক (Global & Local Variables)

হেব তার ওপর িভি কের তরী, অ কান ধরেনর তুলনা যমন বড় >, ছাট < ইত ািদ ব বহার
করা যায় না। ফেল পি (switch) সাধারণত ব বহার করা হয় অ িকছু সংখ ক ও িনিদ
সংখ ক ব াপােরর ে , আর এ সব ে মেলখ পড়া সহজ হেয় যায়। অ া সকল ে
সাধারণত যিদ নাহেল (if else) ব বহার করা হয় কারণ যিদ নাহেলর সােথ য কান শত বা
সংেযাজক (connectives) &&, | | , ! ব বহার কের আেরা জিটল শত ব বহার করা যায়।
i f ( nombor < 0 )
cout << " r i n a t o k " << endl ;
e l s e i f ( nombor > 0 )
cout << " dhonatok " << endl ;
e l s e / / i f ( nombor == 0 )
cout << " shunyo " << endl ;

৭.২১ ব াপীয় ও ানীয় চলক (Global & Local Variables)


ানীয় চলক (local variable) কী? এর িবপরীেত ব াপীয় চলকই (global variable) বা কী?
শতালী পিরগণনায় (conditional programming) ানীয় চলেকর ব বহার দখাও।
যখন কান চলক সকল বা বক বাঁকা ব নী যুগেলর বাইের অথাৎ য কান মহ ার বাইের
থােক তখন তােক ব াপীয় চলক (global variable) বা ব াপীয় বক (global constant)
বলা হয়। নীেচর মেলখেত (program) খয়াল কেরা pai আর nimnoshima য কান মহ-
ার (block) বাইের, তাই এ েলা যথা েম ব াপীয় বক (global constant) ও ব াপীয় চলক
(global variable)। ব াপীয় চলক বা বক ঘাষণা করার পর থেক মেলখেয়র য কান জা-
য়গায় ব বহার করা যায়। য কান বেকর মান তা ঘাষণার সময় অব ই িদেত হয়, ব াপীয়
বেকর (global constant) মানও ঘাষণার সময়ই িদেয় িদেত হয়। আর ব াপীয় চলেকর মান
ঘাষণার সময় না িদেয় িদেল এেত অগত া (default) থােক।

িফিরি ৭.৭: ানীয় ও ব াপীয় চলকের ব বহার (Using Local & Global Variables)
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>

using namespace std ;

f l o a t const p a i = 3 . 1416 ; / / ব াপীয় বক , মান িদেতই হেব


f l o a t nimnoshima = 1 . 00 ; / / ব াপীয় চলক , মান না িদেল

i n t main ( void )
{
f l o a t bashardho ; // ানীয় চলক
f l o a t const two = 2 . 0 ; // ানীয় বক

cout << " bashardho : " ;


c i n >> bashardho ;

১১৭
৭.২১. ব াপীয় ও ানীয় চলক (Global & Local Variables)

i f ( bashardho < nimnoshima )


{
cout << " nimnoshimar cheyeo kom" << endl ;
ret ur n EXIT FAILURE ;
}

f l o a t p o r i d h i = two ∗ p a i ∗ bashardho ; / / ানীয় চলক


cout << " p o r i d h i : " << p o r i d h i << endl ;

return EXIT SUCCESS ;


}

যখন কান চলক (variable) বা বক (constant) কান বাঁকা ব নী যুগল {} বা মহ ার


(block) িভতের ঘািষত হয় তখন তােক ানীয় চলক (local variable) বা ানীয় বক (local
constant) বলা হয়। উপেরর মেলখেত (program) খয়াল কেরা চলক bashardho এবং
বক two উভয়ই main িবপাতেকর মহ ার িভতের ঘািষত হেয়েছ, কােজই এ েটা যথা -
ম ানীয় চলক ও ানীয় বক। ানীয় চলক বা বক য কান মহ া (block) বা উপমহ ার
(subblock) িভতের ঘািষত হেত পাের। মহ ার িভতের আবার মহ া থাকেল িভতেরর মহ া-
ক উপমহ া (subblock) বলা হয় আর বাইেরর মহ ােক বলা হয় অিধমহ া (superblock)।
য কান বেকর মান তা ঘাষণার সময়ই িদেয় িদেত হয়, ানীয় বেকর মানও তাই ঘাষণার
সময়ই িদেয় িদেত হেব। আর ানীয় চলেকর মান িদেয় না িদেল এটােত উ া পা া একটা মান
থাকেব। তরাং ানীয় চলক ব বহােরর পূেব অব ই এেত মান আেরাপণ (assign) কের িনেত
হেব। ানীয় চলক ও বক ঘাষণা করার পর থেক ওই মহ ার িভতের য কান খােন ব বহার
করা যায়, এমনিক উপমহ া বা উপউপমহ ার িভতেরও ব বহার করা যায়।
i n t cholok = 2 ; / / ব াপীয় চলক

i n t main ( )
{
cout << cholok << endl ; / / ব াপীয় চলেকর মান 2

i n t cholok = 3 ; / / এখন থেক ানীয় চলক


cout << cholok << endl ; / / ানীয় চলেকর মান 3
{
cout << cholok << endl ; / / অিধমহ ার চলক মান 3

i n t cholok = 5 ; / / উপমহ ার ানীয় চলক


cout << cholok << endl ; / / উপমহ ার ানীয় চলক মান 5
}
cout << cholok << endl ; // ানীয় চলেকর মান 3

// অ া িকছু এখােন থাকেত পাের , আমরা িলখিছ না


}
i n t k i s u e k t a = cholok ; / / ব াপীয় চলেকর মান 2

১১৮
৭.২১. ব াপীয় ও ানীয় চলক (Global & Local Variables)

অেনক সময় একিট ানীয় (local) চলক বা বেক নাম একিট ব াপীয় (global) চলক বা
বেকর নােমর সােথ িমেল যেত পাের। থম কথা িতিট চলক বা বেকর নাম পুেরা মেলখ
জুেড় একক (unique) হওয়া উিচৎ, িক িবধার িবচাের অেনক সময় সটা করা স ব হয় না।
এমতাব ায় কী কের বুঝেবা ব ব ত চলক বা বকিট ব াপীয় না ানীয়? উপেরর মেলখাংশ
(program segment) খয়াল কেরা, সখােন cholok নাম বারবার ব বহার কের অেন েলা
চলক ঘাষণা করা হেয়েছ, যার একিট সকল মহ ার (block) বাইের তাই ব াপীয় (global) আর
অ েলা কান না কান মহ ার িভতের তাই ানীয় চলক। এখন cholok নােমর চলকেক নানান
খােন ফলেন (output) দখােনা হেয়েছ। কথা হে নাম যেহতু একই, তা আমরা নামিট িদেয়
কখন কান চলকিটেক বুঝেবা, কখন কান মানই বা ফলেন দখেত পােবা?
খয়াল কের দেখা যখােন ব াপীয় চলকিট ঘাষনা করা হেয়েছ আর মান দওয়া হেয়েছ 2
তারপর থেক এিটর কাযকারীতা বলবৎ আেছ, মহ ার বাইের তা অব ই আেছ যমন একদম
নীেচ যখােন int kisuekta = cholok; লখা হেয়েছ। আবার মহ ার (block) িভতের া-
নীয় চলক ঘাষণার আেগ পয এিটর কাযকারীতা রেয়েছ ফেল আমরা ব াপীয় চলকিটর মানিটই
অথাৎ 2ই দখেত পােবা। তারপর মহ ার িভতের যখন একই নাম িদেয় একিট চলক ঘাষনা করা
হেয়েছ আর মান দওয়া হেয়েছ 3, তখন cholok নােমর সােথ ানীয় এই চলকিটর কাযকারীতা
বলবৎ হেয়েছ, আর তা জাির আেছ মহ া শষ হওয়া পয , তাছাড়া উপমহ ার িভতের একই না-
মর আেরকিট চলক ঘাষণার আেগ পয ও তা জাির আেছ। মেলখেত (program) টীকা েলা
(comment) খয়াল কেরা। কাথায় কান মান ফলেন আসেব তা িদেয় আমরা বুঝার চ া কর-
িছ, কাথায় কান চলকিটর কাযকারীতা বলবৎ আেছ। তাহেল কান নাম কান চলকিটেক বুঝাই,
সটার জ আমােদর দখেত হেব একই মহ ার িভতের ওই নােমর কান চলক আেছ িকনা? যিদ
থােক সই চলকিট কাযকর আেছ। আর একই মহ ার িভতের যিদ না থােক, তাহেল আমরা িঠক
বাইেরর মহ ািট দখেবা, সখােন একই নােম কান চলক আেছ িকনা? যিদ থােক সটা বলবৎ
হেব আর তাও না থাকেল তার িঠক বাইের আেরা কান মহ া আেছ িকনা তা দখেবা।
i n t nombor ;
c i n >> nombor ;

/ / নীেচর vagshesh হেলা ানীয় চলক


i f ( i n t vagshesh = nombor % 3 )
cout << " nisheshe b i v a j y o " << endl ;
else
cout << " vagshesh " << vagshesh << endl ;

িসিপিপেত যিদ নাহেল (if else) লখার সময় যিদ { } বাঁকা ব নী যুগল ব বহার কের কান
মহ া (block) তরী করা হয়, তাহেল সই মহ ার িভতের ঘািষত য কান চলক বা বক
তা ানীয় চলক বা বক হেব। আমরা সটা আর আলাদা কের দখােত চাই না। তেব উপেরর
মেলখাংশ খয়াল কেরা if ( int vagshesh = nombor % 3) িলেখও আমরা vagshesh
নােম একিট চলক ঘাষণা কেরিছ। এই vagshesh নােমর চলকিটও একিট ানীয় চলক (local
variable) িহসােব পিরগিণত হয়, আর এটা কাযকর থােক কবল যখােন লখা হেয়েছ সখান
থেক হেয় ওই if else মই (ladder) বা অ াি (nesting) যত ণ শষ না হে তত ণ
পয , এর বাইের কান কাযকারীতা থাকেব না, ফেল ব বহার করেল িটবাতা পােব।
যিদ নাহেল (if else) এর ে ঘািষত ানীয় (local) চলকিটর মেতা আমরা পি ব া-
পােরর (switch cases) ে ও একই ভােব ানীয় চলক ঘাষণা করেত পাির। নীেচর মেল-
খাংেশ (program segment) খয়াল কেরা switch ( int vagshesh = nombor % 3)
িলেখ আমরা একিট ানীয় চলক vagshesh ঘাষণা কেরিছ। এই চলকিটর কাযকারীতাও কবল

১১৯
৭.২২. অ শীলনী সম া (Exercise Problems)

ওই পি র মহ ািটর িভতেরই। বাইের কাথাও এই চলকিটেক ব বহার করবার জা নই। তুিম


িক পি র মহ ািটর িভতের চাইেল আেরা ানীয় চলক (local variable) ঘাষণা ও ব বহার
করেতই পারেত। বেকর ে ও একইরকম আেলাচনা েযাজ ।
i n t nombor ;
c i n >> nombor ;

/ / নীেচর সািরেত vagshesh ানীয় চলক


switch ( i n t vagshesh = nombor % 3 )
{
case 0 :
cout << " ek " << vagshesh << endl ;
break ;
case 1 :
cout << " dui " << vagshesh << endl ;
break ;
case 2 :
cout << " teen " << vagshesh << endl ;
break ;
}

৭.২২ অ শীলনী সম া (Exercise Problems)

ধারণাগত : নীেচ িকছু ধারণাগত রেয়েছ। েলার উ র িনেজ িনেজ বর করেব।

১. শতািল পিরগণনা (conditional programming) কী? অ কথায় আেলাচনা কেরা।

২. যিদ if এর সােথর শত িমথ া হেল সংি নাহেলেত else িগেয় আবার ও শেতর িবপরীত
শতিট সত িকনা পরী া করা দরকার নই। ব াখ া কেরা।

৩. যিদ নাহেল (if else) িদেয় মেলখ (program) িলখেত ছাড়ন (indentation) দয়া
পূণ কন? কার জ পূণ মা েষর জ নািক গণিনর (computer) জ ?

৪. অ য়ী অণুি য়া (relational operators) কী? এ েলা কী ধরেনর ফলাফল দয়? িস-


িপিপেত থাকা কেয়কিট অ য়ী অণুি য়ার উদাহরণ দাও।

৫. যিদ নাহেল মইেত (if else ladder) শত েলা কী ভােব সাজােব, যিদ িচ ার িবধা িব-
বচনা কেরা অথবা মেলখেয়র দ তা িবেবচনা কেরা?

৬. অ াি যিদ নাহেল (nested if else) ও যিদ নাহেল মই (if else ladder) একটা থেক
আেরকিটেত পা র স ব, উদাহরণ সহ ব াখ া কেরা।

৭. ঝুল নাহেল (dangling else) সম ািট কী? এিটর সমাধান কী কী ভােব করা যেত
পাের, উদাহরণ িদেয় আেলাচনা কেরা।

১২০
৭.২২. অ শীলনী সম া (Exercise Problems)

৮. িববৃিত (empty statement) কী? কত ভােব িববৃিত দওয়া যায়?

৯. বুলক সংেযাজক েলা (boolean connectives) কী কী, কী ভােব ফলাফল দয়?

১০. পূণক (integer) ও ভ ক (fractioner) ক সরাসির বুলক িহসােব কী ভােব ব বহার


করা যায় আেলাচনা কেরা। এেত কী িবধা হয়?

১১. বুলক শেতর (boolean condition) আংিশক মূল ায়ন কী ও কী ভােব কাজ কের?

১২. একািধক ব াপীয় চলক (global variable ও ানীয় চলেকর (local variable) নাম
একই হেল কানটা কাযকর তা কী ভােব িনধািরত হয়?

পিরগণনার সম া: নীেচ আমরা িকছু পিরগণনার সম া দখেবা। এই সম া েলা আেগ ধয


ধের িনেজ িনেজ সমাধান করেত চ া করেব। যখন এেকবােরই পারেছা না বেল মেন হয় তখনই
কবল সমাধান দেখ িনেত পােরা। সমাধান েলা পিরগণনার েলার শেষ আেছ।

১. নীেচর মেলখাংেশর (program segment) ফলন (output) কী তা থেম খাতা কল-


ম িনণয় কেরা, আর তারপর গণিনেত চািলেয় তার সােথ িমলাও।
int n ; / / আিদ মান আেরাপ করা হয় িন
cout << ( n = 4 ) << endl ;
cout << ( n == 4 ) << endl ;
cout << ( n > 3 ) << endl ;
cout << ( n < 4 ) << endl ;
cout << ( n = 0 ) << endl ;
cout << ( n == 0 ) << endl ;
cout << ( n > 0 ) << endl ;
cout << ( n && 4 ) << endl ;
cout << ( n | | 4 ) << endl ;
cout << ( ! n ) << endl ;

২. নীেচর মেলখাংেশ (program segment) িকছু গঠনগত (syntactical) ভুল আেছ।


ভুলটা কাথায় বেল তুিম মেন কেরা? ভুলটা এমন ভােব িঠক কেরা যােত এিটর ছাড়ন
(indentation) দেখ যা করেত চাওয়া হেয়িছল বেল মেন হয়, মেলখিট অথেবাধকতায়
(semantically) যন একদম তাই কের।

i f ( x >= y )
j o g f o l += x ;
cout << " x boro " << endl ;
else
j o g f o l += y ;
cout << " y boro " << endl ;

৩. নীেচর মেলখাংশ (program segment) চালােল কী ফলন (output) পাওয়া যােব?

১২১
৭.২২. অ শীলনী সম া (Exercise Problems)

int n , k = 5 ;
n = ( 100 % k ? k + 1 : k − 1 ) ;
cout << "n = " << n << " k = " << k << endl ;

৪. নীেচর মেলখাংশ (program segment) চালােল কী ফলন (output) পাওয়া যােব?


i n t paowagese = 0 , g unti = 5 ;
i f ( ! paowagese | | ++ g unti == 0 )
cout << " bipod " << endl ;
cout << " g u nti = " << gunti << endl ;

৫. নীেচর মেলখাংেশ, স বত বলা যায় য শতািল িববৃিতর (conditional statement)


একদম থম সািরেতই একটা ভুল আেছ। মেলখিট য ভােব লখা আেছ সরকম অব া-
য়ই যিদ িনবাহ (execute) করা হয় তাহেল ফলন (output) কী হেব? আর যটা করেত
চাওয়া হেয়িছল বেল মেন হয় যিদ সটা করা হয় তাহেল ফলন কী হেব?
int n = 5 ;
i f ( n = 0 ) / / অণুি য়ািট খয়াল কেরা
cout << "n holo shunyo . " << endl ;
else
cout << "n shunyo noy " << endl ;
cout << "n er borgo " << n ∗ n << endl ;

৬. নীেচর শতািল িববৃিত (conditional statement) ত অেনক অ েয়াজনীয় শত আেছ।


তা সই অ েয়াজনীয় শত েলা বাদ িদেয় শতািল িববৃিতিট আবার লেখা।
f l o a t uparjon ;
cout << "mashe uparjon koto : " ;
c i n >> uparjon ;

i f ( uparjon < 0 )
cout << " tomar dena aro barbe . " << endl ;
e l s e i f ( uparjon >= 0 && uparjon < 1200)
cout << " tumi d a r i d r o shimar niche . " << endl ;
e l s e i f ( uparjon >= 1200 && uparjon < 2500)
cout << " tumi k i n c h i t socchol aso . " << endl ;
e l s e i f ( uparjon >= 2500)
cout << " tumi j o t h e s t o socchol . " << endl ;

৭. যিদ িভ িভ বার চালােনার সময় ০, ১৫, বা ৭ যাগান (input) দয়া হয় তাহেল নী-
চর মেলখাংেশর (program segment) ফলন (output) কান বাের কী হেব । কত
যাগান িদেল ফলেন "biroktikor!" আসেব?

১২২
৭.২২. অ শীলনী সম া (Exercise Problems)

int n ;
cout << "nombor koto : " ;
c i n >> n ;

i f ( n < 10)
cout << " 10 er choto . " << endl ;
else i f ( n > 5)
cout << " 5 er boro . " << endl ;
else
cout << " b i r o k t i k o r ! " << endl ;

৮. নীেচর অ াি যিদ নাহেল (nested if else) খয়াল কেরা। ছাড়ন (indentation) য


ভােব দয়া হেয়েছ তােত মেন হে না যা িলখেত চাওয়া হেয়েছ তা লখা হেয়েছ।
i f ( n < 10)
i f ( n > 0)
cout << " dhonatok . " << endl ;
else
cout << " . " << endl ;

যিদ n এর মান ৭ বা ১৫ বা -৩ যাগান (input) দয়া হয় তাহেল ফলন (output)


কী হেব? িববৃিতিটর (statement) গঠন (syntax) এমন ভােব িঠক কেরা যােত ছাড়ন
(indentation) দওয়া থেক যমনিট িলখেত চাওয়া হেয়েছ বেল মেন হয় ফলনও িঠক
স রকম আেস। আর সে ে ােন কী হেব বেল যৗি ক মেন হয় সটাও িঠক কেরা।
অ িদেক যা লখা হেয়েছ সটা িঠকই আেছ ধের িনেয় কবল ছাড়নটা (indentation)
িঠক কেরা, আর তােত ােন কী বসােনা যথাথ হেব তাও িনণয় কেরা।

৯. িতনিট সংখ া যাগান (input) িনেয় কানিট বড়, কানিট ছাট ফলেন (output) দখাও।

১০. িতনিট সংখ া যাগান (input) িনেয় তােদর মেধ মােঝরিট ফলেন (output) দখাও।

১১. িতনিট সংখ া যাগান (input) িনেয় তােদরেক উধ েম সািজেয় ফলন (output) দাও।

১২. গিণেত া ন র যাগান (input) িনেয় সটা থেক বণ মান (letter grade) ফলন
দাও। ধেরা ৯০ বা বশী হেল A, ৮০ বা বশী হেল B, ৭০ বা বশী হেল C, ৬০ বা বশী
হেল D, ৫০ বা বশী হেল E, আর তারও কম হেল F বণ মান পাওয়া যায়।

১৩. একিট ি মাি ক (two dimensional) িব র ানা দওয়া আেছ, িব িট চারিট চতু-
ভােগর (quadrant) িঠক কানিটেত পড়েব িনণয় কেরা।

১৪. একিট গমণ ১, ২, ৩, ..., ৯, ১১, ২২, ৩৩, ..., ৯৯ এর ১ম পদ ১, আর ১৮ তম পদ ৯৯।


কততম পদ দখােত হেব তা যাগান (input) িনেয় পদিট ফলেন (output) দখাও।

১৫. তামােক -১০০ ও ১০০ এর মেধ িট সংখ া যাগান (input) িহসােব দওয়া হেব, তুিম
ওই িট সংখ া সহ তােদর মােঝর সকল সংখ ার যাগফল ফলেন (output) দখাও।

১২৩
৭.২২. অ শীলনী সম া (Exercise Problems)

১৬. একিট দ বষ অিধবষ িক না তা িনণেয়র মেলখিট (program) তুিম যিদ-নাহেল মই


(if else ladder) ব বহার কের িলখেব। তেব মেলখিট রচনা করার সময় তামােক মেন
রাখেত হেব য এিট ১ থেক ২০০০ সাল পয িতিট সােলর জ চালােনা হেব। কােজই
তুিম মইেয়র শত েলা এমন ভােব সাজােব যােত মেলখ ততম হয়।
১৭. বাংলা বছেরর কততম মাস তা যাগান (input) িনেয় সই মােসর নাম ও ওই মােস কত িদন
তা ফলেন (output) দখাও। একােজ পি ব াপার (switch cases) ব বহার কেরা।
১৮. কতটা বােজ সই সময় ঘ টায় যাগান (input) িনেয় মাঝরাত (১-২), ভাত (৩-৬), সকাল
(৭-১১), পুর (১২-১৪), িবকাল (১৫-১৭), স া (১৮-১৯), রাত (২০-২৮) ফলেন দ-
খাও। একােজ পি ব াপার (switch cases) ব বহার কেরা।
১৯. এমন একিট মেলখ (program) িলেখা যিট ১-৫ পয ম অ যায়ী পাঁচটা কামল
পানীেয়র (পািন, কাক, াইট, ফানটা, পপিস) নােমর তািলকা দখােব, তারপর -
িমক ন র যাগান (input) িনেয় কামল পানীয়িটর নাম ফলেন (output) দখােব। আর
িমক ন রিট যিদ ১-৫ এর বাইের হয়, তাহেল স সং া একিট িট বাতা (error
message) দখােব। তুিম এই মেলখিট একবার পি ব াপার (switch cases) ব -
বহার কের আবার যিদ নাহেল (if else) ব বহার কের কেরা।
২০. একিট সংখ ার পুরক সংখ া িনণয় কেরা। সংখ াট এক অে র হেল তার পুরক সংখ ৯ এর
সােথ িবেয়াগফল, ই অে র হেল ৯৯ এর সােথ িবেয়াগফল, িতন অে র হেল ৯৯৯ এর
সােথ িবেয়াগফল। িতেনর চেয় বশী অে র সংখ া যাগান (input) দওয়া হেব না।
২১. এমন একিট মেলখ (program) িলেখা যটা ৫ জন লাক যােদর িমক ১-৫ তােদর ক
কতটা কের পেরাটা খেয়েছ যাগান (input) িনেব। মেলখিট তারপর একজেন সেবা
কয়টা পেরাটা খেয়েছ সটা ফলেন (output) দখােব। আর কান লাক সেবা সংখ ক
পেরাটা খেয়েছ মেলখিট সটাও দখােব, তেব সেবা পেরাটা খাওয়া একািধক ব ি
থাকেল থমজেনর িমক ন র হেলই চলেব, পেরর জনেদর দরকার নাই
২২. একজন লাক াভািবক িনয়ম অ যায়ী স ােহ ৪০ ঘ টা কাজ কের, ৪০ ঘ টার বশী কাজ
করেল অিতির সময়টু র জ াভািবক িনয়েমর চেয় ১.৫ ণ মজুির পায়। কান এক
স ােহ লাকিট কত ঘ টা কাজ কেরেছ আর াভািবক িনয়েম ঘ টা িত মজুির কত তা
যাগান (input) িনেয় ওই স ােহ তার মাট মজুির কত তা ফলেন (output) দখাও।
২৩. ধেরা তুিম চার টুকেরা কাগজ িনেয়েছা। তামার ১ম টুকেরােত লখা আেছ ১, ৩, ৫, ৭, ৯,
১১, ১৩, ২য় টুকেরােত আেছ ২, ৩, ৬, ৭, ১০, ১১, ১৪, ১৫, ৩য় টুকেরােত আেছ ৪, ৫,
৬, ৭, ১২, ১৩, ১৪, ১৫, ৪থ টুকেরােত আেছ ৮, ৯, ১০, ১১, ১২, ১৩, ১৪, ১৫। তামার
মেলখ (program) ব বহারকারী মেন মেন একিট সংখ া ধরেব, আর সিট ১ম, ২য়,
৩য়, ৪থ টুকেরার কান কানিটেত আেছ যাগান (input) িদেব, তারপর তামার মেলখ
ব বহারকারী মেন মেন য সংখ ািট ধেরেছ সিট ফলেন (output) দখােব। এিট খুব সহজ
একিট ব াপার। য য টুকেরােত সংখ ািট আেছ ওই টুকেরা েলার থম সংখ া েলা যাগ
করেলই ব বহারকারীর সংখ ািট পাওয়া যােব। যমন ব বহারকারীর সংখ ািট যিদ ১, ৩, ৪
ন র টুকেরােত থােক তাহেল সংখ ািট ১ + ৪ + ৮ = ১৩।

পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।

১২৪
৭.২২. অ শীলনী সম া (Exercise Problems)

১. নীেচর মেলখাংেশর (program segment) ফলন (output) কী তা থেম খাতা কল-


ম িনণয় কেরা, আর তারপর গণিনেত চািলেয় তার সােথ িমলাও।
int n ; / / আিদ মান আেরাপ করা হয় িন
cout << ( n = 4 ) << endl ;
cout << ( n == 4 ) << endl ;
cout << ( n > 3 ) << endl ;
cout << ( n < 4 ) << endl ;
cout << ( n = 0 ) << endl ;
cout << ( n == 0 ) << endl ;
cout << ( n > 0 ) << endl ;
cout << ( n && 4 ) << endl ;
cout << ( n | | 4 ) << endl ;
cout << ( ! n ) << endl ;

4 // আেরাপণ হেব 4
1 // মান আসেলই তা 4
1 // কােজই 3 এর বশী
0 // 4 এর সমান , কম তা নয়
0 // আেরাপন হেব 0
1 // মান 0 এর সমান , সত
0 // মান তা 0 , বশী তা নয়
0 // 0 হেলা িমথ া তাই ফলাফল িমথ া
1 // 4 যেহতু সত , তাই ফলাফল সত
1 // 0 িনেজ িমথ া তাই ! 0 সত

২. নীেচর মেলখাংেশ (program segment) িকছু গঠনগত (syntactical) ভুল আেছ।


ভুলটা কাথায় বেল তুিম মেন কেরা? ভুলটা এমন ভােব িঠক কেরা যােত এিটর ছাড়ন
(indentation) দেখ যা করেত চাওয়া হেয়িছল বেল মেন হয়, মেলখিট অথেবাধকতায়
(semantically) যন একদম তাই কের।
i f ( x >= y )
j o g f o l += x ;
cout << " x boro " << endl ;
else
j o g f o l += y ;
cout << " y boro " << endl ;

উপেরর মেলখাংেশ ছাড়ন দেখ মেন হয় যিদর শত সত হেল বা িমথ া হেল উভয় -
িঠক তােদর পেরর ই সািরেত থাকা িববৃিত েলা িনবািহত (executed) হেব। িক
একািধক িববৃিত যিদ িনবাহ করেত হয় সে ে আমােদর নীেচর মেলখাংেশর মেতা কের
বাঁকা ব নী িদেয় যৗিগক িববৃিত (compound statement) বািনেয় িনেত হেব। বাঁ-
কা ব নী না দয়ায় উপেরর মেলখিট সংকলন (compile) করেত গেল িট দখােব।

১২৫
৭.২২. অ শীলনী সম া (Exercise Problems)

িট টা হল সংি if সােপে else টা িঠক জায়গায় নাই। যিদ else টা cout << "
x boro" << endl; এর আেগ থােক তাহেল গঠনগত (syntactically) ভােব হয়,
িক তােত অব আমরা যা করেত চাই তা হেতা না।
i f ( x >= y )
{
j o g f o l += x ;
cout << " x boro " << endl ;
}
else
{
j o g f o l += y ;
cout << " y boro " << endl ;
}

৩. নীেচর মেলখাংশ (program segment) চালােল কী ফলন (output) পাওয়া যােব?


int n , k = 5 ;
n = ( 100 % k ? k + 1 : k − 1 ) ;
cout << "n = " << n << " k = " << k << endl ;

উপেরর মেলখাংেশর ফলন নীেচ দখােনা হেলা। েত k এর মান আেরাপণ (assign)


করা হেলা 5। তারপর 100 যেহতু 5 ারা িবভাজ তাই 100 % k হেব যাহা বুলক
(boolean) িহসােব ধরেল িমথ া, ফেল িতিনক অণুি য়ার (ternerary operator)
শেষর অংশ k − 1 অথাৎ 4 হেব ফলাফল যা n চলেক (variable) আেরািপত (assign)
হেব। সবিমিলেয় n হেলা 4 আর k েত যা িছেলা তাই অথাৎ 5।
n = 4 k = 5

৪. নীেচর মেলখাংশ (program segment) চালােল কী ফলন (output) পাওয়া যােব?


i n t paowagese = 0 , g unti = 5 ;
i f ( ! paowagese | | ++ gunti == 0 )
cout << " bipod " << endl ;
cout << " g u nti = " << gunti << endl ;

উপেরর মেলখাংেশর ফলন (output) নীেচ দখােনা হেলা। চলক paowagese এর


মান 0 অথ াৎ িমথ া, ফেল !paowagese হেলা সত , আর তাই অথবা | | এর ফলাফ-
লও সত । ল কেরা এই ফলাফল িনধারেণ আমােদর িক | | এর পেরর অংশ িনবাহ
(execute) করার দরকারই নাই। আংিশক মূল ায়েনর (partial evaluation) কার-
ণ এিট ঘটেব। তাহেল | | এর ফলাফল সত আসায় ফলেন আসেব "bipod"। আর ++
gunti যেহতু িনবািহতই হয় িন, তাই gunti এর মান 5 ই দখােবা।
bipod
gunti = 5

১২৬
৭.২২. অ শীলনী সম া (Exercise Problems)

৫. নীেচর মেলখাংেশ, স বত বলা যায় য শতািল িববৃিতর (conditional statement)


একদম থম সািরেতই একটা ভুল আেছ। মেলখিট য ভােব লখা আেছ সরকম অব া-
য়ই যিদ িনবাহ (execute) করা হয় তাহেল ফলন (output) কী হেব? আর যটা করেত
চাওয়া হেয়িছল বেল মেন হয় যিদ সটা করা হয় তাহেল ফলন কী হেব?
int n = 5 ;
i f ( n = 0 ) / / অণুি য়ািট খয়াল কেরা
cout << "n holo shunyo . " << endl ;
else
cout << "n shunyo noy " << endl ;
cout << "n er borgo " << n ∗ n << endl ;

উপেরর মেলখাংেশর ২য় সািরেত আেরাপন (assignment) = অণুি য়া ব বহার করা


হেয়েছ, সাধারণেতা শত পরী ার জ সমান (equal) == অণুি য়া ব বহার করা হয়।
তরাং এিট স বত একটা ভুল যটা ায়শই আমােদর হেয় থােক। যাই হাক মেলখিট
যমন আেছ তমিন চালােল আেরাপেণর ফেল n এর মান হেব আর আেরাপণ অণু-
ি য়ার ফলাফলও হেব , যা বুলক মান (boolean value) িহসােব িমথ া। তরাং
else অংেশ থাকা িববৃিতটু িনবািহত হেব, আর আমরা ফলেন পােবা n shunyo noy।
িবষয়িট কমন যন গালেমেল তাই না, একিদেক n এর মান আসেলই , িক অ
িদেক ফলন দখাে n নয়! যাইেহাক n এর মান আেরাপেণর ফেল if else এর
পেরর সািরেত থাকা cout এর কারেণ ফলেন আসেব n er borgo 0। এই ফলন েলা
নীেচ বামিদেক দখােনা হেলা, আর ডান িদেক রেয়েছ আেরাপণ (assignment) = না
িলেখ আমরা যিদ সমান (equality) == িলিখ তাহেল ফলন (output) কী হেব তা। ল
এবাের n এর মান িক 5ই থাকেছ যা আিদ আেরাপণ করা হেয়েছ। ফেল n == 0 িমথ া
হওয়ায় আেগর মেতাই n shunyo noy দখােব আর পেরর সািরেত 5 এর বগ হেব 25,
কােজই ফলেন আসেব n er borgo 25।
n shunyo noy n shunyo noy
n er borgo 0 n er borgo 25

৬. নীেচর শতািল িববৃিত (conditional statement) ত অেনক অ েয়াজনীয় শত আেছ।


তা সই অ েয়াজনীয় শত েলা বাদ িদেয় শতািল িববৃিতিট আবার লেখা।
f l o a t uparjon ;
cout << "mashe uparjon koto : " ;
c i n >> uparjon ;

i f ( uparjon < 0 )
cout << " tomar dena aro barbe . " << endl ;
e l s e i f ( uparjon >= 0 && uparjon < 1200)
cout << " tumi d a r i d r o shimar niche . " << endl ;
e l s e i f ( uparjon >= 1200 && uparjon < 2500)
cout << " tumi k i n c h i t socchol aso . " << endl ;
e l s e i f ( uparjon >= 2500)
cout << " tumi j o t h e s t o socchol . " << endl ;

১২৭
৭.২২. অ শীলনী সম া (Exercise Problems)

অদরকারী শত েলা ছাড়া মেলখাংশ (program segment) কমন হেব তা নীেচ দ-


খােনা হেলা। যিদ uparjon < 0 এই শত িমথ া হয়, তাহেল অব ই uparjon >=0
সত হেব। কােজই যিদ নাহেল মইেত (if else ladder) নাহেলর সােথ য যিদ থাকেব
সখােন uparjon >=0 আবার লখার কান দরকার নই। িনয় ণ (control) ওইখােন
যাওয়া মােন ওই শত অব ই সত আর এবং (and) && অণুি য়ার (operator) একিট
উপাদান (operand) সত হেল ফলাফল কবল ি তীয় উপাদােনর ওপর িনভর কের। -
তরাং আমরা সরলীকরণ কের কবল && এর ি তীয় উপাদানিটেকই িলখেবা। এই একই
ভােব uparjon >= 1200 আর uparjon >= 2500 লখার কান দরকার নাই।
f l o a t uparjon ;
cout << "mashe uparjon koto : " ;
c i n >> uparjon ;

i f ( uparjon < 0 )
cout << " tomar dena aro barbe . " << endl ;
e l s e i f ( uparjon < 1200) / / >= 0 দরকার নই
cout << " tumi d a r i d r o shimar niche . " << endl ;
e l s e i f ( uparjon < 2500) / / >= 1200 দরকার নই
cout << " tumi k i n c h i t socchol aso . " << endl ;
else / / >= 2500 দরকার নই
cout << " tumi j o t h e s t o socchol . " << endl ;

৭. যিদ িভ িভ বার চালােনার সময় ০, ১৫, বা ৭ যাগান (input) দয়া হয় তাহেল নী-
চর মেলখাংেশর (program segment) ফলন (output) কান বাের কী হেব । কত
যাগান িদেল ফলেন "biroktikor!" আসেব?
int n ;
cout << "nombor koto : " ;
c i n >> n ;

i f ( n < 10)
cout << " 10 er choto . " << endl ;
else i f ( n > 5)
cout << " 5 er boro . " << endl ;
else
cout << " b i r o k t i k o r ! " << endl ;

যাগান (input) িহসােব 0, 15, 7 িদেল, উপেরর মেলখাংশ কী ফলন (output) দেব
তা নীেচ ৩ ে দখােনা হেলা। এই মেলখাংশ n এর কান মােনর জ ই biroktikor
! ফলন িদেব না, িনয় ণ (control) কান অব ােতই সংি িববৃিতেত যােব না। তরাং
else cout << "biroktikor!" << endl; অংশটু পুেরাপুির অদরকারী আর স কা-
রেণ মুেছ দয়া যায়, তােত মেলখেয়র বিশে কান ভাব পড়েব না।
nombor koto : 0 nombor koto : 15 nombor koto : 7
10 er choto . 5 er boro . 10 er choto .

১২৮
৭.২২. অ শীলনী সম া (Exercise Problems)

৮. নীেচর অ াি যিদ নাহেল (nested if else) খয়াল কেরা। ছাড়ন (indentation) য


ভােব দয়া হেয়েছ তােত মেন হে না যা িলখেত চাওয়া হেয়েছ তা লখা হেয়েছ।
i f ( n < 10)
i f ( n > 0)
cout << " dhonatok . " << endl ;
else
cout << " . " << endl ;

যিদ n এর মান ৭ বা ১৫ বা -৩ যাগান (input) দয়া হয় তাহেল ফলন (output)


কী হেব? িববৃিতিটর (statement) গঠন (syntax) এমন ভােব িঠক কেরা যােত ছাড়ন
(indentation) দওয়া থেক যমনিট িলখেত চাওয়া হেয়েছ বেল মেন হয় ফলনও িঠক
স রকম আেস। আর সে ে ােন কী হেব বেল যৗি ক মেন হয় সটাও িঠক কেরা।
অ িদেক যা লখা হেয়েছ সটা িঠকই আেছ ধের িনেয় কবল ছাড়নটা (indentation)
িঠক কেরা, আর তােত ােন কী বসােনা যথাথ হেব তাও িনণয় কেরা।
i f ( n < 10)
i f ( n > 0)
cout << " dhonatok . " << endl ;
else
cout << " . " << endl ;

দ মেলখিট (program) লখার সময় এমন ভােব ছাড়ন (indentation) দয়া


হেয়েছ য মেন হে else অংশটু থম if এর শত n < 10 িমথ া হেল কাযকর হেব।
িক িসিপিপ ভাষায় ছাড়ন বা ফাঁকা দয়া না দয়া গণিনর (computer) জ কান ব াপার
নয়। আর ঝুল নাহেলর (dangling else) আেলাচনা থেক আমরা জািন এই else িট
তার িনকটতম পূববতী এমন একিট if এর সােথ সংি য if এর সােথ আর কান else
জুেড় দয়া হয় িন। কােজই, সই িহসােব িঠক উপের যমনিট দখােনা হেলা, সভােব এই
else িট ি তীয় if এর শত n > 0 িমথ া হেল কাযকর হেব।
dhonatok . কান ফলন নাই .

এমতাব ায় এই মেলখ চালােল আমরা ৭, ১৫, বা -৩ যাগান (input) িদেয় য ফলন


(output) পােবা তা উপেরর িতনিট ে দখােনা হেয়েছ। ল কেরা ১৫ যাগান িদেল
আমরা কান ফলন আসেল পােবা না, কারণ n < 10 শেতর কান else নই। আর -
ানিট ফলেন আেস যখন সংখ ািট ে র সমান বা কম হয় অথাৎ অধনা ক
হয়। আমরা তাহেল এর ােন িলখেত পাির odhonatok।
i f ( n < 10)
{
i f ( n > 0)
cout << " dhonatok . " << endl ;
}
else
cout << " . " << endl ;

১২৯
৭.২২. অ শীলনী সম া (Exercise Problems)

ছাড়ন (indentation) দয়া দেখ যমন মেন হয়, মেলখিট (program) সই অ -


যায়ী সংেশাধন করেল িঠক উপেরর মেতা কের বাঁকা ব নী ব বহার করেত হেব। সে ে
ান অংশিট ফলেন আসেব যখন n সংখ ািট ১০ এর বড় বা সমান, যমন ধেরা ১৫।
এে ে আমরা তাই এর বদেল িলখেত পাির "10 ba boro"। এবার খয়াল
কেরা n এর মান যখন এর বশী িক ১০ এর কম যমন ৭, তখন িক আমরা ফলন
পােবা dhonatok, আর বা কম হেল কান ফলনই পােবা না।

৯. িতনিট সংখ া যাগান (input) িনেয় কানিট বড়, কানিট ছাট ফলেন (output) দখাও।

িফিরি ৭.৮: িতনিট সংখ ার বড়- ছাট (Small and Big of Three Numbers)
int a , b , c ; / / চাইেল ভ কও িনেত পােরা
cout << " sokhya t i n t i koto ? " ;
c i n >> a >> b >> c ; / / যাগান নাও

i n t boro , soto ; // চলক ঘাষণা


i f (a > b) // a যিদ বড় হয় b এর চেয়
boro = a , soto = b ;
else // b যিদ বড় হয় a এর চেয়
boro = b , soto = a ;
i f ( boro < c ) // c যিদ boro এর চেয় বড় হয়
boro = c ;
e l s e i f ( soto > c ) // c যিদ soto এর চেয় ছাট হয়
soto = c ;

cout << " boro " << boro << " " ;
cout << " soto " << soto << endl ;

উপেরর মেলখাংশ খয়াল কেরা। থম িট সংখ া a ও b ক তুলনা কের বড় ও ছাট


িনধারণ করা হয়েছ। তারপর c ক তুলনা করা হেয়েছ সটা আেরা বড় িকনা দখেত, যিদ
তা না হয় তাহেল সটা আেরা ছাট িকনা সটা পরী া করা হেয়েছ। ল কেরা c ক তুলনা
করা সময় একটা else লাগােনা হেয়েছ, কারণ boroর বড় হেল তা আর sotoর ছাট
িকনা পরী া করার দরকার নই। তুিম িক চাইেল নীেচর মেতা কেরও মেলখ িলখেত
পােরা। থেম ধের নাও তামার সংখ া একটাই কােজই aই বড়, আবার aই ছাট। এরপর
তােদর সােথ b ক তুলনা কেরা। আর শেষ তােদর সােথ c ক তুলনা কেরা।
i n t boro = a , soto = a ; / / ধের নই a−ই বড় ও ছাট
i f ( boro < b ) / / b যিদ তার চেয়ও বড় হয়
boro = b ;
e l s e i f ( soto > b ) / / b যিদ তার চেয়ও ছাট হয়
soto = b ;
i f ( boro < c ) / / c যিদ তার চেয়ও বড় হয়
boro = c ;
e l s e i f ( soto > c ) / / c যিদ তার চেয়ও ছাট হয়
soto = c ;

১৩০
৭.২২. অ শীলনী সম া (Exercise Problems)

১০. িতনিট সংখ া যাগান (input) িনেয় তােদর মেধ মােঝরিট ফলেন (output) দখাও।

িফিরি ৭.৯: িতনিট সংখ ার মধ ক (Median of Three Numbers)


/ / ধেরা চলক িতনিট a , b , c ঘাষণা কের যাগান নয়া হেয়েছ

i f (a > b) // ম হেলা a > b


if (c > a) // ম হেলা c > a > b
cout << a << endl ;
else i f (b > c ) // ম হেলা a > b > c
cout << b << endl ;
else // ম হেলা a >= c >= b
cout << c << endl ;
else // ম হেলা a <= b
if (c < a) // ম হেলা c < a <= b
cout << a << endl ;
else i f c > b) // ম হেলা a <= b < c
cout << b << endl ;
else // ম হেলা a <= c <= b
cout << c << endl ;

উপেরর মেলখেত থেম a ও b তুলনা করা হেয়েছ। তারপর c তােদর বড়িটর চেয় বড়
িকনা, নাহেল ছাটিটর চেয় ছাট িকনা পরী া করা হেয়েছ, আর তাও না হেল সিট উভ-
য়র মাঝামািঝ। এভােব িতনিট সংখ ার ম জানা হেয় গেল মােঝরিট ফলেন (output)
দখােনা হেয়েছ। এিট অ াি (nesting) ও মইেয়র (ladder) চমৎকার উদাহরণ।

১১. িতনিট সংখ া যাগান (input) িনেয় তােদরেক উধ েম সািজেয় ফলন (output) দাও।

িফিরি ৭.১০: িতনিট সংখ ার উধ ম (Three Numbers in Ascending Order)


/ / ধেরা চলক িতনিট a , b , c ঘাষণা কের যাগান নয়া হেয়েছ

i f (a > b) // ম হেলা a > b


if (c > a) // ম হেলা c > a > b
cout << b << " " << a << " " << c << endl ;
else i f (b > c ) // ম হেলা a > b > c
cout << c << " " << b << " " << a << endl ;
else // ম হেলা a >= c >= b
cout << b << " " << c << " " << a << endl ;
else // ম হেলা a <= b
if (c < a) // ম হেলা c < a <= b
cout << c << " " << a << " " << b << endl ;
else i f c > b) // ম হেলা a <= b < c
cout << a << " " << b << " " << c << endl ;
else // ম হেলা a <= c <= b
cout << a << " " << c << " " << b << endl ;

১৩১
৭.২২. অ শীলনী সম া (Exercise Problems)

উপেরর মেলখেত থেম a ও b তুলনা করা হেয়েছ। তারপর c তােদর বড়িটর চেয়
বড় িকনা, নাহেল ছাটিটর চেয় ছাট িকনা পরী া করা হেয়েছ, আর তাও না হেল সিট
উভেয়র মাঝামািঝ। এভােব িতনিট সংখ ার ম জানা হেয় গেল তােদর মােনর উধ েম
(ascending order) ফলেন (output) দখােনা হেয়েছ। এিট যিদ নাহেলর (if else)
অ াি (nesting) ও মইেয়র (ladder) এক সােথ ব বহােরর চমৎকার উদাহরণ।

১২. গিণেত া ন র যাগান (input) িনেয় সটা থেক বণ মান (letter grade) ফলন
দাও। ধেরা ৯০ বা বশী হেল A, ৮০ বা বশী হেল B, ৭০ বা বশী হেল C, ৬০ বা বশী
হেল D, ৫০ বা বশী হেল E, আর তারও কম হেল F বণ মান পাওয়া যায়।

িফিরি ৭.১১: ন র হেত বণমান (Letter Grades from Numbers)


cout << " gonite nombor koto ? " ;
i n t nombor ; c i n >> nombor ;

i f ( nombor >= 90)


cout << "bornoman A" << endl ;
e l s e i f ( nombor >= 80)
cout << "bornoman B" << endl ;
e l s e i f ( nombor >= 70)
cout << "bornoman C" << endl ;
e l s e i f ( nombor >= 60)
cout << "bornoman D" << endl ;
e l s e i f ( nombor >= 50)
cout << "bornoman E " << endl ;
e l s e / / ৫০ এর ছাট
cout << "bornoman F " << endl ;

উপেরর মেলখ পি ব াপার (switch cases) িদেয় করা স ব নয়, কারন এখােন >=
তুলনা ব বহার করেত হেব। পি ব াপার কবল সমান == তুলনায় ব বহার করা যায়।

১৩. একিট ি মাি ক (two dimensional) িব র ানা দওয়া আেছ, িব িট চারিট চতু-
ভােগর (quadrant) িঠক কানিটেত পড়েব িনণয় কেরা।
এই মেলখেত (program) আমরা কবল চতুভাগ (quadrant) িবেবচনা না কের বরং,
িব িট কান অে র ওপের িকনা, হেল ধনা ক িদেক না ঋণা ক িদেক, অথবা ানাংকের
মূল িব েত িকনা তাও িবেবচনা করেবা। য কান একিট দ িব র x বা y েটাই
আলাদা আলাদা ভােব ধনা ক বা ঋণা ক বা এই িতন রকম হেত পাের। কােজই
একসােথ িবেবচনা করেল আমরা মাট নয় রকম সমােবশ (combination) পােবা।

িফিরি ৭.১২: িব র চতুভাগ িনণয় (Quadrant of a Point)


float x , y ;
cout << " bhuj x ? " ;
c i n >> x ;
cout << " k o t i y ? " ;
c i n >> y ;

১৩২
৭.২২. অ শীলনী সম া (Exercise Problems)

i f ( x > 0)
i f ( y > 0)
cout << " prothom choturvag " << endl ;
else i f ( y < 0)
cout << " choturtho choturvag " << endl ;
else // y
cout << " dhonatok x okkher opor " << endl ;
else i f ( x < 0)
i f ( y > 0)
cout << " d i t i y o choturvag " << endl ;
else i f ( y < 0)
cout << " t r i t i y o choturvag " << endl ;
else
cout << " r i n a t o k x okkher opor " << endl ;
else // x
i f ( y > 0)
cout << " dhonatok y okkher opor " << endl ;
else i f ( y < 0)
cout << " r i n a t o k y okkher opor " << endl ;
else // y
cout << " sthananker mul bindu " << endl ;

১৪. একিট গমণ ১, ২, ৩, ..., ৯, ১১, ২২, ৩৩, ..., ৯৯ এর ১ম পদ ১, আর ১৮ তম পদ ৯৯।


কততম পদ দখােত হেব তা যাগান (input) িনেয় পদিট ফলেন (output) দখাও।
cout << " kototom pod : " << endl ;
i n t n ; c i n << n ;

i f ( n < 0)
cout << " p a l l a r b a i r e " << endl ;
e l s e i f ( n <= 9 ) / / এক অে র সংখ া
cout << n << endl ;
e l s e i f ( n <= 18) / / ই অে র সংখ া
cout << ( ( n−9 ) ∗ 11) << endl ;
else
cout << " p a l l a r b a i r e " << endl ;

১৫. তামােক -১০০ ও ১০০ এর মেধ িট সংখ া যাগান (input) িহসােব দওয়া হেব, তুিম
ওই িট সংখ া সহ তােদর মােঝর সকল সংখ ার যাগফল ফলেন (output) দখাও।
নীেচর সংি মেলখাংশ (program segment) দখােনা হেলা। য সংখ া িট যা-
গান (input) নয়া হেব, স েলা অব ই -১০০ ও ১০০ এর িভতের হেত হেব। আমরা
তাই আেগ পরী া কের দখেবা। যিদ n1 বা n2 য কানিট −100 এর ছাট বা 100 এর

১৩৩
৭.২২. অ শীলনী সম া (Exercise Problems)

বড় হয়, তাহেল িট বাতা (error message) দিখেয় িবফল হেয় িনয় ণ ফরত যােব।
খয়াল কেরা আমােদর িক শত েলােক অথবা | | িদেয় যু করেত হেব।
cout << " sonkhya d u t i koto ? " ; / / যাচনা
i n t n1 , n2 ; c i n >> n1 >> n2 ; / / যাগান

/ / −১০০ ও ১০০ এর মেধ িকনা পরী া করেত হেব


i f ( n1 < −100 | | n1 > 100 | |
n2 < −100 | | n2 > 100)
{
cout << " sonkhya p a l l a r b a i r e " << endl ;
ret u rn EXIT FAILURE ;
}

int s , n ; / / ( থম পদ + শষ পদ ) আর পদসংখ া

s = n1 + n2 ; // থম পদ + শষ পদ।

i f ( n1 > n2 ) / / কানটা ছাট কানটা বড়


n = n1 − n2 + 1 ; / / পদসংখ া
else
n = n2 − n1 + 1 ; / / পদসংখ া

cout << " j o g f o l " << s ∗n / 2 ; / / ফলন

এবার আমরা জািন কান সমা র গমেণর সংখ া েলার যাগফল হেলা ( থম সংখ া +
শষ সংখ া) * পদসংখ া / 2। সংখ া েটা যাগান নয়ার সময় ব বহারকারী য কানিটেক
আেগ যাগান িদেত পাের, মােন কানটা বড় কানটা ছাট আমরা িনি ত থাকেবা না।
( থম সংখ া + শষ সংখ া) এই যাগফল s বর করেত এেত কান সম া হেব না, তেব
পদসংখ া n বর করেত গেল আমােদর জানেত হেব কানটা বড় কানটা ছাট। ধেরা ৭
আর ১৩ িনেজেদর সহ তােদর মেধ কয়টা সংখ া আেছ সটা বর করা যায় ১৩ - ৭ + ১
িহসাব কের, যখােন ১৩ হেলা বড় আর ৭ হেলা ছাট। তা n1 আর n2 এর িনেজেদর সহ
তােদর মােঝ মাট কয়িট সংখ া আেছ তা বর করেত আমােদর জানেত হেব কানিট বড়।
তা আমরা একিট যিদ নাহেল (if else) ব বহার কের দখেবা n1 > n2 িকনা, যিদ হয়
তাহেল পদসংখ া n1 − n2 + 1 আর যিদ না হয় তাহেল পদসংখ া হেব n2 − n1 + 1।
সবেশেষ যাগফল হেলা s ∗ n / 2 আমরা যটা ফলেন (output) দখােবা।

১৬. একিট দ বষ অিধবষ িক না তা িনণেয়র মেলখিট (program) তুিম যিদ-নাহেল মই


(if else ladder) ব বহার কের িলখেব। তেব মেলখিট রচনা করার সময় তামােক মেন
রাখেত হেব য এিট ১ থেক ২০০০ সাল পয িতিট সােলর জ চালােনা হেব। কােজই
তুিম মইেয়র শত েলা এমন ভােব সাজােব যােত মেলখ ততম হয়।
যিদ ১ থেক ২০০০ সাল পয িতিট সােলর জ চালােনা হয় তাহেল আমরা থেম
েত ক রকেমর সােলর িহসাব কির। মাটামুিট িত চারিট সােলর িতনিট অিধবষ নয়,
একিট অিধবষ। কােজই সবেচেয় বশী সংখ ক ২০০০ / ৪ * ৩ = ১৫০০ িট সাল আেছ য

১৩৪
৭.২২. অ শীলনী সম া (Exercise Problems)

েলা ৪ িদেয় িবভাজ হয় না, এ েলার কানিটই অিধবষ নয়। বাঁকী ৫০০ িট সাল ৪ িদেয়
িবভাজ । এেদর মেধ য েলা ১০০ িদেয় িবভাজ নয় যমন ১৯৯৬ এমন ২০িট ছাড়া বাঁকী
৪৮০ িট অিধবষ। আর ওই ২০িট সােলর মেধ য ১৫িট ৪০০ িদেয় িবভাজ নয় স েলা
অিধবষ নয়, আর বাঁকী ৪িট সাল য েলা ৪০০ িদেয় িবভাজ স েলা অিধবষ।
i f ( bosor % 4 ! = 0 ) / / ৪ িদেয় িবভাজ নয়
cout << " odhiborsho noy " << endl ;
e l s e i f ( bosor % 100 ! = 0 ) / / ১০০ িদেয় িবভাজ নয়
cout << " odhiborsho hoy " << endl ;
e l s e i f ( bosor % 400 ! = 0 ) / / ৪০০ িদেয় িবভাজ নয়
cout << " odhiborsho noy " << endl ;
e l s e / / i f ( bosor % 400 = 0 ) ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;

ততম গিতর মেলখেয়র (program) জ য রকেমর সাল সবেচেয় বশী স েলা িন-
ণয় করেত সবেচেয় কম সংখ ক শত পরী ণ ব বহার করেত হেব। কােজই আমরা ১৫০০
সাল য েলা ৪ িদেয় িবভাজ নয় স েলােক থম শত পরী া কেরই বর করেত চাই-
বা। উপেরর েলখাংশ খয়াল কেরা, আমরা তাই কেরিছ। এরপের রেয়েছ য ৪৮০িট
বছর য েলা ৪ িদেয় িবভাজ িক ১০০ িদেয় িবভাজ নয়। আমরা এ েলােক ইবার শত
পরী া কের বর করেত চাই। একটা শত হে ৪ িদেয় িবভাজ নাহওয়া কােজই থম
শেতর else িহসােব থাকেব সটা, আেরকিট শত হেলা ১০০ িদেয় িবভাজ না হওয়া। উপ-
রর মেলখাংেশর যিদ নাহেল মইেত (if else ladder) দেখা else if িদেয় এটা করা
হেয়েছ। এরপর থােক ১৫ িট সাল য েলা ১০০ িদেয় িবভাজ িক ৪০০ িদেয় িবভাজ নয়
এই ১৫ িট সাল, এ েলা িনণয় করা হেয়েছ আেরকিট else if লািগেয় অথাৎ মাট িতনিট
শত পরী ণ শেষ। আর সবেশেষ ৪০০ িদেয় িবভাজ সই সাল েলা এেসেছ সবেশেষর
else িদেয়, এ েলার জ িতনিট শত পরী ণই লেগেছ, কারণ শেষর শত িমথ া হেলই
তা এ েলা িনণীত হেব। তাহেল মাট শত পরী া লাগেলা কত েলা? ১৫০০ * ১ + ৪৮০
* ২ + ১৫ * ৩ + ৫ * ৩ = ২৫২০ িট। তুিম আেরা নানান ভােব চ া কের দখেত পােরা,
এর চেয় কম শত পরী া কের করেত পােরা িকনা! পারেব না!
i f ( bosor % 4 ! = 0 | |
( bosor % 100 == 0 && bosor % 400 ! = 0 ) )
cout << " odhiborsho noy " << endl ;
else
cout << " odhiborsho hoy " << endl ;

একই মেলখ আমরা যিদ নাহেল মই (if else ladder) ব বহার না কের িঠক উপেরর
মেলখাংেশর মেতা বুলক সংেযাজক (boolean connectives) ব বহার কের করেত
পাির। বুলক সংেযাজেকর আংিশক মূল ায়েনর (partial evaluation) মেন আেছ? অথ-
বা | | ে য কান একিট উপাদান (operand) সিত হেলই অ িট মূল ায়ন ছাড়াই
আমরা ফলাফল সত বেল ধের িনেত পাির। আর && এর ে য কান একিট উপাদান
(operand) িমথ া হেলই ফলাফল িমথ া বেল ধের নয়া যায়। কান সাল অিধবষ নয়
যখন সালিট ৪ ারা িবভাজ নয় অথবা ১০০ ারা িবভাজ হেলও ৪০০ ারা িবভাজ নয়
তখন। যিদর সােথ শত িহসােব সিটই লাগােনা হেয়েছ দেখা। অ িদেক কান সাল অিধ-
বষ হেত গেল | | এর ফলাফল িমথ া হেত হেব, তারমােন বাম ও ডােনর উভয় উপাদান

১৩৫
৭.২২. অ শীলনী সম া (Exercise Problems)

(operand) িমথ া হেত হেব অথাৎ bosor % 4 == 0 এবং (bosor % 100 == 0 &
& bosor % 400 != 0) িমথ া হেত হেব। এখােন bosor % 4 == 0 িমথ া হওয়া মােন
বছরিট ৪ ারা িবভাজ হওয়া আর (bosor % 100 == 0 && bosor % 400 != 0)
িমথ া হেত গেল && এর পােশর যেকান একিট িমথ া হেলই হেব। তা (bosor %
100 == 0 িমথ া হওয়া মােন বছরিট ১০০ ারা িবভাজ না হওয়া আর bosor % 400 !
= 0 িমথ া হওয়া মােন ৪০০ িদেয় িবভাজ হওয়া।

১৭. বাংলা বছেরর কততম মাস তা যাগান (input) িনেয় সই মােসর নাম ও ওই মােস কত িদন
তা ফলেন (output) দখাও। একােজ পি ব াপার (switch cases) ব বহার কেরা।

িফিরি ৭.১৩: বাংলা মােসর নাম (Bengali Month Names)


i n t mash ; c i n >> mash ; / / চাইেল যাচনা করেত পােরা

switch ( mash )
{
case 1 : cout << " boishakh 31 " << endl ; break ;
case 2 : cout << " j o i s t h o 31 " << endl ; break ;
case 3 : cout << " ashar 31 " << endl ; break ;
case 4 : cout << " shrabon 31 " << endl ; break ;
case 5 : cout << " vadro 31 " << endl ; break ;
case 6 : cout << " a r s h i n 30 " << endl ; break ;
case 7 : cout << " k a r t i k 30 " << endl ; break ;
case 8 : cout << " ogrohayon 30 " << endl ; break ;
case 9 : cout << " poush 30 " << endl ; break ;
case 10 : cout << "magh 30 " << endl ; break ;
case 11 : cout << " falgun 30 " << endl ; break ;
case 12 : cout << " c h o i t r o 30 " << endl ; break ;
d e f a u l t : cout << " ojana mash" << endl ; break ;
}

১৮. কতটা বােজ সই সময় ঘ টায় যাগান (input) িনেয় মাঝরাত (০-২), ভাত (৩-৬), সকাল
(৭-১১), পুর (১২-১৪), িবকাল (১৫-১৭), স া (১৮-১৯), রাত (২০-২৪) ফলেন দ-
খাও। একােজ পি ব াপার (switch cases) ব বহার কেরা।
i n t somoy ; c i n >> somoy ; / / যাচনা করেত পােরা

switch ( somoy )
{
case 0 : case 1 : case 2 :
cout << " majhrat " << endl ; break ;
case 3 : case 4 : case 5 : case 6 :
cout << " provat " << endl ; break ;
case 7 : case 8 : case 9 : case 10 : case 11 :
cout << " shokal " << endl ; break ;

১৩৬
৭.২২. অ শীলনী সম া (Exercise Problems)

case 12 : case 13 : case 14 :


cout << " dupur " << endl ; break ;
case 15 : case 16 : case 17 :
cout << " b i k a l " << endl ; break ;
case 18 : case 19 :
cout << " shondhya " << endl ; break ;
case 20 : case 21 : case 22 : case 23
cout << " r a t " << endl ; break ;
default :
cout << " ojana somoy" << endl ;
}

১৯. এমন একিট মেলখ (program) িলেখা যিট ১-৫ পয ম অ যায়ী পাঁচটা কামল
পানীেয়র (পািন, কাক, াইট, ফানটা, পপিস) নােমর তািলকা দখােব, তারপর -
িমক ন র যাগান (input) িনেয় কামল পানীয়িটর নাম ফলেন (output) দখােব। আর
িমক ন রিট যিদ ১-৫ এর বাইের হয়, তাহেল স সং া একিট িট বাতা (error
message) দখােব। তুিম এই মেলখিট একবার পি ব াপার (switch cases) ব -
বহার কের আবার যিদ নাহেল (if else) ব বহার কের কেরা।
cout << " t a l i k a " << endl ;
cout << " 1 pani " << endl ;
cout << " 2 coke " << endl ;
cout << " 3 s p r i t e " << endl ;
cout << " 4 fanta " << endl ;
cout << " 5 pepsi " << endl ;
cout << endl ;

cout << " posondo : " << endl ;


i n t posondo ;
c i n >> posondo ;

cout << " posondo " ;


switch ( posondo )
{
case 1 : cout << " pani " << endl ; break ;
case 2 : cout << " coke " << endl ; break ;
case 3 : cout << " s p r i t e " << endl ; break ;
case 4 : cout << " fanta " << endl ; break ;
case 5 : cout << " pepsi " << endl ; break ;
d e f a u l t : cout << " ojana " << endl ; break ;
}

উপেরর মেলখাংেশর (program segment) পি ব াপার (switch case) অংশিট


যিদ নাহেল (if else) ব বহার কের িলখেল নীেচর মেতা হেব।

১৩৭
৭.২২. অ শীলনী সম া (Exercise Problems)

i f ( posondo == 1 )
cout << " pani " << endl ;
e l s e i f ( posondo == 2 )
cout << " coke " << endl ;
e l s e i f ( posondo == 3 )
cout << " s p r i t e " << endl ;
e l s e i f ( posondo == 4 )
cout << " fanta " << endl ;
e l s e i f ( posondo == 5 )
cout << " pepsi " << endl ;
else
cout << " ojana " << endl ;

২০. একিট সংখ ার পুরক সংখ া িনণয় কেরা। সংখ াট এক অে র হেল তার পুরক সংখ ৯ এর
সােথ িবেয়াগফল, ই অে র হেল ৯৯ এর সােথ িবেয়াগফল, িতন অে র হেল ৯৯৯ এর
সােথ িবেয়াগফল। িতেনর চেয় বশী অে র সংখ া যাগান (input) দওয়া হেব না।
i n t nombor , purok ;
c i n >> nombor ;

// িট আেগই সামলােনা হেলা


i f ( nombor < 0 | | nombor > 1000)
{
cout << " onakankhito " << endl ;
ret u rn EXIT FAILURE ;
}

/ / এবার কবল বধ ব াপার েলা


i f ( nombor <= 9 ) / / এক অ মােন ৯ বা কম
purok = 9 − nombor ;
e l s e i f ( nombor <= 99) / / এক অ মােন ৯৯ বা কম
purok = 99 − nombor ;
e l s e i f ( nombor <= 999) / / এক অ মােন ৯৯৯ বা কম
purok = 999 − nombor ;

২১. এমন একিট মেলখ (program) িলেখা যটা ৫ জন লাক যােদর িমক ১-৫ তােদর ক
কতটা কের পেরাটা খেয়েছ যাগান (input) িনেব। মেলখিট তারপর একজেন সেবা
কয়টা পেরাটা খেয়েছ সটা ফলেন (output) দখােব। আর কান লাক সেবা সংখ ক
পেরাটা খেয়েছ মেলখিট সটাও দখােব, তেব সেবা পেরাটা খাওয়া একািধক ব ি
থাকেল থমজেনর িমক ন র হেলই চলেব, পেরর জনেদর দরকার নাই।
আমরা পাঁচজন লােকর জ িবধােথ পাঁচিট চলক িনেবা p1, p2, p3, p4, p5। তা-
রপর যথাযথ ভােব যাগান যাচনা (input prompt) কের কান লাক কতিট পেরাটা
খেয়েছ সটা যাগান (input) িনেবা। তারপর আমােদর আেরা িট চলক লাগেব: একিট

১৩৮
৭.২২. অ শীলনী সম া (Exercise Problems)

হেলা sorboccho সেবা কতিট পেরাটা খেয়েছ আর একিট হেলা kekheyese ক


খেয়েছ সেবা িট। তারপর আমরা একজন একজন কের লাক িবেবচনা করেবা। েত
মা একজন লাক ধের িনেল সই সেবা পেরাটা খেয়েছ, কােজই sorboccho = p1,
kekheyese = 1 আিদমান িহসােব আরপণ করা হেয়েছ। এর পেরর িতিট ব ি র জ
আমরা পরী া কের দখেবা স এ পয sorboccho এর মান যত তার চেয় বশী পেরা-
টা খেয়েছ িকনা। যিদ খেয় থােক তাহেল sorboccho এর মান বদেল যােব আর ক
খেয়েছ সটাও বদেল যােব। এরকম মেলখাংশ (program segment) নীেচ দেখা।

িফিরি ৭.১৪: পাঁচিট সংখ ার বৃহ ম (Largest of Five Numbers)


int p1 ; cout << " p1 : "; cin >> p1 ;
int p2 ; cout << " p2 : "; cin >> p2 ;
int p3 ; cout << " p3 : "; cin >> p3 ;
int p4 ; cout << " p4 : "; cin >> p4 ;
int p5 ; cout << " p5 : "; cin >> p5 ;

i n t sorboccho = p1 , kekheyese = 1 ;
i f ( sorboccho < p2 )
{ sorboccho = p2 ; kekheyese = 2 ; }
i f ( sorboccho < p3 )
{ sorboccho = p3 ; kekheyese = 3 ; }
i f ( sorboccho < p4 )
{ sorboccho = p4 ; kekheyese = 4 ; }
i f ( sorboccho < p5 )
{ sorboccho = p5 ; kekheyese = 5 ; }

cout << " porota " << sorboccho << endl ;


cout << " l o k t a " << kekheyese << endl ;

খয়াল কেরা আমরা > ব বহার কেরিছ >= ব বহার কির নাই। এর কারণ এ পয সেবা
যতিট খাওয়া হেয়েছ তার সমান কউ যিদ পেরর কউ খেয়ও থােক, আমরা িক সই লা-
কিটেক ফলেন (output) দখােত চাইনা, বরং আেগর জনেকই দখােত চাই। তুিম যিদ
সেবা পেরাটা খেয়েছ এরকম কেয়ক জন থাকেল তােদর মেধ র শেষর জনেক ফল-
ন (output) দখােত চাও, তাহেল < বদেল <= কের িদেব। আর একিট ব াপার হেলা
অেনক সময় sorboccho আর kekheyese চলক িটর আিদমান ১মজেনর পেরাটা খা-
ওয়া িবেবচনা কের না িদেয় নীেচর মেতা কের বরং আমরা একটা ছাট সংখ া ধের নই,
তারপর ২য়, ৩য়, ৪থ, ৫ম লােকর মেতা ১ম জেনর জ ও একই রকম যিদ নাহেল ব বহার
কির। এেত সব লােকর জ িচ া করাটা একই রকম হয়।
/ / সেবা একটা ছাট মান , ক খেয়েছ সটা জািননা
i n t sorboccho = 0 , kekheyese = 0 ;

i f ( sorboccho < p1 ) / / ১ম জেনর ে ও একই


{ sorboccho = p1 ; kekheyese = 1 ; }
/ / p2 , p3 , p4 , p5 এর যিদ নাহেল িঠকই থাকেব

১৩৯
৭.২২. অ শীলনী সম া (Exercise Problems)

২২. একজন লাক াভািবক িনয়ম অ যায়ী স ােহ ৪০ ঘ টা কাজ কের, ৪০ ঘ টার বশী কাজ
করেল অিতির সময়টু র জ াভািবক িনয়েমর চেয় ১.৫ ণ মজুির পায়। কান এক
স ােহ লাকিট কত ঘ টা কাজ কেরেছ আর াভািবক িনয়েম ঘ টা িত মজুির কত তা
যাগান (input) িনেয় ওই স ােহ তার মাট মজুির কত তা ফলেন (output) দখাও।

িফিরি ৭.১৫: স ােহর মজুির িহসাব (Weekly Wage Calculation)


f l o a t const shaShima = 40 . 0 ; / / াভািবক সীমা
f l o a t const o t i H a r = 1 . 5 ; / / অিতির হার

f l o a t ghontaProti ; / / ঘ টা িত কত হার
f l o a t kotoGhonta ; / / কত ঘ টা কাজ
f l o a t motMojuri ; / / মাট মজুির কত

cout << " ghonta p r o t i har : " ;


c i n >> ghontaProti ;
cout << " koto ghonta k a j : " ;
c i n >> kotoGhonta ;

i f ( kotoGhonta <= shoptahShima )


motMojuri = kotoGhonta ∗ ghontaProti ;
e l s e / / অিতির সময় কাজ হেয়েছ
{
/ / াভািবক মজুির ৪০ ঘ টার
f l o a t shaMojuri = shaShima ∗ ghontaProti ;

/ / অিতির ঘ টা বর করেত হেব


f l o a t otiGhonta = kotoGhonta − shoptahShima ;

/ / অিতির সমেয়র মজুিরর হার


f l o a t o t i G h o n t a P r o t i = ghontaProti ∗ o t i H a r ;

/ / অিতির সমেয় মজুির


f l o a t o t i M o j u r i = otiGhonta ∗ o t i G h o n t a P r o t i ;

/ / মাট মজুির েটার যাগফল


motMojuri = shaMojuri + o t i M o j u r i ;
}

cout << "mot mojuri " << motMojuri << endl ;

২৩. ধেরা তুিম চার টুকেরা কাগজ িনেয়েছা। তামার ১ম টুকেরােত লখা আেছ ১, ৩, ৫, ৭, ৯,
১১, ১৩, ২য় টুকেরােত আেছ ২, ৩, ৬, ৭, ১০, ১১, ১৪, ১৫, ৩য় টুকেরােত আেছ ৪, ৫,
৬, ৭, ১২, ১৩, ১৪, ১৫, ৪থ টুকেরােত আেছ ৮, ৯, ১০, ১১, ১২, ১৩, ১৪, ১৫। তামার

১৪০
৭.২২. অ শীলনী সম া (Exercise Problems)

মেলখ (program) ব বহারকারী মেন মেন একিট সংখ া ধরেব, আর সিট ১ম, ২য়,
৩য়, ৪থ টুকেরার কান কানিটেত আেছ যাগান (input) িদেব, তারপর তামার মেলখ
ব বহারকারী মেন মেন য সংখ ািট ধেরেছ সিট ফলেন (output) দখােব। এিট খুব সহজ
একিট ব াপার। য য টুকেরােত সংখ ািট আেছ ওই টুকেরা েলার থম সংখ া েলা যাগ
করেলই ব বহারকারীর সংখ ািট পাওয়া যােব। যমন ব বহারকারীর সংখ ািট যিদ ১, ৩, ৪
ন র টুকেরােত থােক তাহেল সংখ ািট ১ + ৪ + ৮ = ১৩।

সংখ া বলার খলা (Number Finding Game)


cout << " ekta sonkhya nao 0 theke 15 " << endl ;

cout << " tash 1: 1 3 5 7 9 11 13 15 " << endl ;


cout << " tash 2: 2 3 6 7 10 11 14 15 " << endl ;
cout << " tash 3: 4 5 6 7 12 13 14 15 " << endl ;
cout << " tash 4: 8 9 10 11 12 13 14 15 " << endl ;

cout << " n i c h e r prosno gulor u t t o r dao " << endl ;


cout << " u t t o r ha hole 1 , na hole 0 " << endl ;

i n t tash1 , tash2 , tash3 , tash4 ;

cout << " tash 1 e tomar sonkhya ase ? " ;


c i n >> tash1 ;
cout << " tash 2 e tomar sonkhya ase ? " ;
c i n >> tash2 ;
cout << " tash 3 e tomar sonkhya ase ? " ;
c i n >> tash3 ;
cout << " tash 4 e tomar sonkhya ase ? " ;
c i n >> tash4 ;

i n t sonkhya = 0 ;

if ( tash1 ) sonkhya += 1;
if ( tash2 ) sonkhya += 2;
if ( tash3 ) sonkhya += 3;
if ( tash4 ) sonkhya += 4;

cout << " tomar sonkhya " << sonkhya << endl ;

উপেরর মেলখাংশ (program segment) দেখা। থেম কাগেজর টুকেরা বা তাস -


লােত কী কী সংখ া লখা আেছ তা দখােনা হেয়েছ। এরপর বলা হেয়েছ পেরর দখােনার
েলার উ র া হেল ১ আর না হেল ০ িদেয় িদেত। আমরা চারিট চলক িনেয়িছ। আর
উ র েলা ওই চলক েলােত আেছ। ে যমন বলা হেয়েছ য তাস েলােত ব বহারকা-
রীর মেন মেন ধের নয়া সংখ ািট আেছ সই তাস েলার থম সংখ া েলা িনেয় আমােদর
যাগ করেত হেব। আমরা েত সংখ ািট ধের িনেয়িছ int sonkhya = 0; িলেখ।

১৪১
৭.২৩. গণনা পিরভাষা (Computing Terminologies)

এরপর দেখা িতিট if পরী া করেছ সংখ ািট ওই তােস আেছ িকনা, অথাৎ ব বহারকা-
রীর দয়া উ র সত িকনা, সত হেল ওই তােসর থম সংখ ািট তা আমরা জািনই, সটা
sonkhya চলেকর সােথ যাগ কের দয়া হেয়েছ। পিরেশেষ ফলন (output) ব বহার-
কারীর মেন মেন ধের নয়া সংখ ািট দখােনা হেয়েছ।

৭.২৩ গণনা পিরভাষা (Computing Terminologies)


• শতািল (conditional) • সমতুল (equivalence)

• যিদ (if) • ব টন (distribution)

• নাহেল (else) • িবিনময় (commutative)

• অ য়ী (relational) • শাষণ (absorption)

• বুলক (boolean) • অস িত (contradiction)

• মই (ladder) • নঞ মধ ম (excluded middle)

• অ াি (nested) • সত ক সারণী (truth table)

• ঝুল (dangling) • অ লায়ন (optimisation)

• (empty) • িতিনক (ternary)

• যৗিগক (compound) • পি (switch)

• শনা করণ (detection) • ব াপার (case)

• সংেযাজক (connective) • িনয় ণ (control)

• এবং, ও (and) • াি (break)

• অথবা, বা (or) • অগত া (default)

• নয়, না (not) • ব াপীয় (global)

• সহেযাজ (associative) • ানীয় (local)

• সরল (simplification) • মহ া (block)

• অ গণ তা (precedence) • উপমহ া (subblock)

• ম (order) • অিধমহ া (superblock)

১৪২

You might also like