Professional Documents
Culture Documents
Banglacpp2 PDF
Banglacpp2 PDF
com/annaaba
িসিপিপ পিরগণনা
c++ programming
১ম খ ড বাংলা (English)
২য় খ ড English (বাংলা)
5g
in
am
al
5g
in
am
al
সূচীপ
১ বাংলা (English) ১
১৩
১৩
১৫
in
২.৩ মেলখেত টীকা িলখন (Writing Program Comments) . . . . . . ১৬
২.৪ মেলখেত ফাঁকা দওয়া (Spacing and Indentation) . . . . . . . . ১৮
২.৫ অ শীলনী সম া (Exercise Problems) . . . . . . . . . . . . . . . ২০
২.৬ গণনা পিরভাষা (Computing Terminologies) . . . . . . . . . . . ২৩
am
5g
৬.৯ গািণিতক সম া (Mathematical Problems) . . . .
৬.১০ িশর নিথ cmath (Header File cmath) . . . . . . .
৬.১১ অ শীলনী সম া (Exercise Problems) . . . . . . .
৬.১২ গণনা পিরভাষা (Computing Terminologies) . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
৭১
৭২
৭৪
৮১
in
৭ শতািল পিরগণনা (Conditional Programming) ৮৩
৭.১ যিদ তাহেল নাহেল (If Then Else) . . . . . . . . . . . . . . . . . . ৮৩
৭.২ অ য়ী অণুি য়া (Relational Operators) . . . . . . . . . . . . . . ৮৫
am
5g
৮.১৪ পূব শেতর ণ ঘূণী (Precondition in While Loop) . . .
৮.১৫ উ র শেতর কর ঘূণী (Post-condition in Do Loops) . . .
৮.১৬ আবার াি ও িডঙােনা (Break and Continue Again) . .
৮.১৭ ঘূণী যিদ িমথি য়া (Loop and If Interaction) . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
১৭২
১৭৪
১৭৬
১৭৭
in
৮.১৮ অ াি াধীন ঘূণী (Nested Independent Loops) . . . . . . . . . ১৮০
৮.১৯ অ াি িনভরশীল ঘূণী (Nested Dependent Loop) . . . . . . . . . ১৮২
৮.২০ গভীর অ াি ঘূণী (Deeply Nested Loops) . . . . . . . . . . . . . ১৮৪
am
5g
১৩ Input and Assignment ( যাগান ও আেরাপণ)
১৩.১ Data Input (উপা যাগান) . . . . . . . . . . . . . .
১৩.২ Input Prompt ( যাগান যাচনা) . . . . . . . . . . . .
১৩.৩ Value Assignment (মান আেরাপণ) . . . . . . . . .
১৩.৪ Value Swapping (মান অদল-বদল) . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
২৬১
২৬১
২৬৪
২৬৬
২৬৭
in
১৩.৫ Assignment Left and Right (আেরাপেণর বাম ও ডান) . . . . . . . ২৬৯
১৩.৬ Self-Referential Assignment (আ -শরন আেরাপণ) . . . . . . . ২৭০
১৩.৭ Exercise Problems (অ শীলনী সম া) . . . . . . . . . . . . . . . ২৭১
am
5g
১৫.২০ Swtich Cases If Else (পি ব াপার যিদ-নাহেল) . . . . .
১৫.২১ Global & Local Variables (ব াপীয় ও ানীয় চলক) . . .
১৫.২২ Exercise Problems (অ শীলনী সম া) . . . . . . . . .
১৫.২৩ গণনা পিরভাষা (Computing Terminologies) . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
৩৪০
৩৪১
৩৪৫
৩৬৬
in
১৬ Iterative Programming (পুনািল পিরগণনা) ৩৬৯
১৬.১ For Loop Repetition (জ ঘূণীর পুনরাবৃি ) . . . . . . . . . . . . ৩৬৯
১৬.২ For Loop Block (জ ঘূণীর মহ া) . . . . . . . . . . . . . . . . . ৩৭২
am
িফিরি তািলকা
5g
১৪.১১ Adding Two Times ( িট সমেয়র যাগ) . . . . . . . . . . . . . . . ২৯৮
১৪.১২ Simultaneous Equations (সহ সমীকরণ সমাধান) . . . . . . . . . ২৯৮
১৪.১৩ Solving Motion Equations (গিতর সমীকরণ সমাধান) . . . . . . . ২৯৯
১৪.১৪ Program from Pseudocode (ছ সংেকত থেক মেলখ তরী) . . ২৯৯
in
১৫.১ Pass Fail Star Marks (পাশ- ফল-তারকা ন র িনণয়) . . . . . . . . . ৩০১
১৫.২ Leap Year Determination (অিধবষ িনণয়) . . . . . . . . . . . . ৩০৫
১৫.৩ Solving Quadratic Equations (ি ঘাত সমীকরণ সমাধান) . . . . . ৩১৪
১৫.৪ Lucky & Unlucky Numbers ( সৗভাগ ও ভােগ র সংখ া) . . . . . ৩১৭
am
5g
in
am
al
5g
in
am
al
খড১
5g
বাংলা (English)
in
am
al
5g
in
am
al
অধ ায় ১
5g
কান পিরগণেকর (programmer) কােছ িনেজর লখা মেলখ (program) একদম স ােনর
মেতা। িতল িতল কের সময় িনেয় পিরগণক একিট মেলখ গেড় তােল। য সম ার জ
লখ তরী করেত হেব, সটা জানার পের পিরগণক থেম িচ া ভাবনা কের কী িলখেব, তারপর
সটা মেলখ রচনার যথাযথ িনয়ম মেন িলেখ ফেল, তারপর সটা চািলেয় দেখ িঠক ঠাক কাজ
ম-
in
কের িক না। যিদ ভুল িকছু থেক থােক, ভুলটা বর কের, সটা িঠক কের, তারপর আবার মেলখ
চািলেয় দেখ। এই চলেত থােক যত ণ না মন মেতা সম ািটর সমাধান পাওয়া যাে । আমরা
সারা বইেত পড়েবা মেলখেত কী িলখেবা আমরা, আর যথাযথ ভােব মেলখ রচনার িনয়ম কী।
am
তেব এইখােন আেলাচনা করেবা, মেলখ িলখেবা কাথায় আর সটা চালােবা কী কের।
গণিনেত (computer) িনবাহ (execution) করা জ আমরা যখন কান একিট মেলখ
(program) িলখেত চাই, তখন থেম আমরা সটা স াদনা (edit) কির সাধারণত কান একটা
পিরগণনা ভাষায় (programming language)। এই পিরগণনা ভাষা িঠক গণিনেত িনবাহেযা-
গ (executable) ভাষা নয়, আবার িঠক মা েষর াভািবক ভাষাও (natural language) নয়,
বরং এ েটার মাঝামািঝ িকছু একটা। পিরগণনা ভাষায় িলিখত আমােদর মেলখেক আমরা তাই
al
এরপের সংকলন (compile) কের য ভাষায় (machine language) পা র কির যােত গণিন
সটা বুঝেত পাের। তারপর পা িরত মেলখিটেক আমরা িনবাহ (execute) কির।
5g
in
am
আমরা মুলত মেলখ রচনা ও স াদনা করেবা স াদন খানায় (Editing Area)। নমু-
না (sample) িহসােব স াদন খানায় আেগ থেক িকছু থাকেত পাের, তুিম স েলা মুেছ িদ-
ত পােরা বা তামার মেলখেয়র জ দরকার মেতা বদেল িনেত পােরা। cpp.sh জালপাতায়
(webpage) গেল সাধারণত নীেচ দখােনা মেলখিটই (program) সখােন থােক। আমরা
আপাতত উপা পােট (options tab) কান পিরবতন না কের সরাসির চালাও বাতােম (run
al
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" ;
}
মেলখ স াদনা শষ হেল অথবা মাঝামািঝ অব ােতও পরী া কের দখার জ আম-
রা সাধারণত চালাও বাতােম িটপ (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) িফের আসেব।
5g
in
am
al
নমুনা মেলখিট আমােদর আপাতত িব ািরত বুঝার দরকার নাই, আমরা পের ব াপার েলা
িব ািরত িশখেবা। নমুনা মেলখিট চালােল উপেরর ছিবর মেতা থেম িনবাহ পােট (execution
tab) দখােব What is your name? তখন তুিম যিদ তামার নাম িলেখ দাও gonimia আর
তারপর ভুি (enter) চাপ দাও, তাহেল পেরর সািরেত লখা আসেব Hello, gonimia! না-
মটু নওয়ার আেগ What is your name? দখােনােক আমরা বিল যাগান যাচনা (input
prompt) আর নাম gonimia দওয়াটােক আমরা বিল যাগান (input) দওয়া আর পেরর
সািরেত Hello, gonimia! দখােনােক আমরা বিল ফলন (output) দওয়া।
তা তুিম চালাও বাতােম (run button) িটপ িদেয় দেখা কী হয়। থেম সংকলন পাট হেয়
িনবাহ পােট (execution tab) িগেয় উপের য ভােব বলা হেলা স রকম হয় কী না দেখা।
তামার বাঝার িবধােথ িনবাহ পােট শষ পয কী থাকেব তা নীেচ দখােনা হেলা।
What i s your name? gonimia
Hello , gonimia !
এবার আমরা একটু দিখ সংকলেন (compilation) িট হেল কী ঘেট, আর আমােদর কী
করেত হয়! এটার জ আমরা ইে কের একটা িট (error) তরী কের দই। যমন ধেরা
std: : string name; লখা রেয়েছ য সািরেত সখােন একদম শষ হেত িদিত (semicolon)
; তুিম মুেছ দাও। আর তারপর চালাও বাতােম (run button) িটপ দাও। দখেব নীেচর মেতা
কের িট বাতা দখােব সংকলন পােট (compilation tab), আর সংকলন পাটই সামেন থাকেব,
িনবাহ পাট (execution tab) সামেন আসেব না।
5g
in
am
al
সংকলন পােট য বাতা েলা আসেব তা নীেচ দখােনা হেলা। ি তীয় সািরেত দেখা 8 : 3
মােন বুঝাে ৮ম সািরেত িট আেছ আর ৩য় অ ের, আর িটটা হেলা ; থাকেত হেব। আসেল
; দরকার আমােদর ৭ম সািরর শেষ। সাধারণত য সািরেত িট আেছ বলা হয়, িট সই সাির
বা আেগর সািরেত থােক। এখােন ; থাকায় সংকলক (compiler) আসেল িঠক ৭ম আর ৮ম সাির
িনেয় িকি ত িব াি েত রেয়েছ। মেলখ রচনার সময় আমরা নানান রকম ভুল িট কির, তুিম
মেলখ লখার চচা করেত থাকেল এই িট েলার সােথ পিরিচত হেয় যােব। তখন দখা মা ই
বুঝেত পারেব ভুলটু কী আর কী কের সটা িঠক করেত হেব। যাইেহাক িটটু বুঝেত পারেল
আমরা সিট িঠক কের আবার চালাও বাতােম িটপ িদেবা, আর তখন সফল ভােবই িনবািহত হেব।
I n f u n c t i o n ' i n t main ( ) ' :
8 : 3 : e r r o r : expected i n i t i a l i z e r before ' std '
9 : 22 : e r r o r : 'name ' was not declared i n t h i s scope
সবেশেষ আমরা উপা পাট (options tab) সংে েপ আেলাচনা করেবা। সখােন থাকা নানা
উপা েলার (option) কী কাজ মুলত সটাই জানা আমােদর উে । তেব এ েলা িনেয় আমরা
আপাতত পরী া-িনরী া করেবা না, বরং য রকম অব ায় আেছ স রকম অব ােতই মেলখ
(program) স াদনা (editing), সংকলন (compile) ও িনবাহ (execute) করেবা।
১. সবেচেয় বােমর ে (column) দেখা িমত (standard) উপা েলা রেয়েছ। িসিপিপ
ভাষার নানান সং রণ (version) রেয়েছ, তুিম চাইেল আেগর সং রণ ব বহার করেত
পােরা, সাধারণত এখােন C++14 সং রণ িনবাচন করা থােক।
২. বাম থেক ি তীয় ে আেছ সতকবাতার উপা েলা, অথাৎ সংকলন (compile) করার
সময় সংকলক (compiler) কতটা খুঁিট নািট িট ধরেব সটা এখােন বেল দয়া হয়।
সাধারণত এখােন সব Many (-Wall) উপা িনবািচত থােক।
৩. বামেথেক তৃতীয় ে আেছ অ লায়েনর(optimisation) উপা েলা। একই মেলখ
(program) সংকলক (compiler) চাইেল এমন ভােব সংকলন (compile) করেত পা-
র য মেলখিট অেনক ত িনবাহ (execute) হেব, আবার এমন ভােব সংকলন করেত
পাের য মেলখিট অেনক ধীের িনবাহ হেব। ত িনবাহ হেব এমন সংকলন করেত া-
ভািবক ভােবই বশী সময় লােগ, আর ধীের িনবাহ হেব সরকম সংকলন করেত সময় কম
5g
লােগ। এখােন সাধারণত পূণ Full (-O2) উপা িনবািচত থােক।
৪. সবেচেয় ডােনর ে আেছ িমত যাগান (standard input) উপা সমুহ। সাধারণত
এখােন িমথি য় (interactive) উপা িনবািচত থােক যার অথ চাপিন (keyboard)
ব বহার কের যাগান (input) দওয়া যােব। তামার মেলখেত কান যাগান না থা-
in
কেল তুিম িকছুনা (none) উপা িনবাচন করেত পােরা। অথবা তুিম যিদ আেগই যা-
গান িদেয় রাখেত চাও তাহেল পাঠিনক (text) উপা িনবাচন কের ওইখােন থাকা বাে
আেগ থেক তামার যাগান েলা িদেয় রাখেত পােরা। তােত মেলখ (program) চাপিন
am
ড কেস তুিম c/c++ মেলখ স াদনা ও সংকলন (editing and compilation) করেত
পারেব। কাড কস তামার গণিনেত (computer) সং াপন (install) কের িনেল তুিম আ -
জাল (internet) ব বহার করা ছাড়াই তামার মেলখ স াদনা ও সংকলন কের যেত পারেব।
কাড কস পাওয়া যায় http://www.codeblocks.org/ জালপাতা (webpage) হেত, এর
ম তুিম http://www.codeblocks.org/downloads/binaries সূ হেত নািমেয় িনেত
পােরা। তুিম উইে ডাজ ব বহারকারী হেল codeblocks-13.12mingw-setup.exe সং রণ
নািমেয় সং াপন (install) করেব। এই সং রেণ GCC সংকলক (compiler) আর GDB আপ-
দনাশক (debugger) আেছ। তুিম িলনা বা ম াক ব বহারকারী হেল দরকার মেতা তামার সং-
রণ নািমেয় সং াপন (install) করেব। গণিনেত (computer) কাড কস সং াপন (install)
িবষেয় সাহায পেত চাইেল নীেচর থম িট সূ হেত ছিবও (video) দখেত পােরা আর ব বহার
পুি কা (user manual) পেত চাইেল তা পেত পােরা তৃতীয় সূ হেত ।
5g
in
am
উপেরর ছিবেত ল কেরা আমরা য মেলখ িলেখিছ সটােত আসেল নীেচর সংেকত -
লাই িলেখিছ। এিট িঠক হয়মান ম পািত (online software) িহসােব cpp.sh জালপাতা
(webpage) ব বহার কের য মেলখ িলেখিছলাম সিটই। কাড কেস নমুনা িহসােব আেগ থ-
ক এই রকম মেলখ থােক না, তামােক িনেজ এটা িলেখ িনেত হেব। তারপর উপেরর ছিবেত দ-
খােনা বানাও+চালাও (Build+Run) বাতােম িটপ িদেয় তুিম মেলখিট চালােব। বানাও+চালাও
বাতােম িটপ িদেল আসেল থেম তামার লখা মেলখ সংকলন (compile) হেয় িনবাহেযাগ
(executable) মেলখ তরী হয়, আর তারপর সই িনবাহেযাগ মেলখ আসেল চেল (run)।
/ / 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" ;
}
5g
তা বানাও+চালাও (Build+Run) বাতােম িটপ িদেল সাধারণত নীেচর ছিবর মেতা কের
একটা অিতির জানালা (window) আসেব। আর তােত লখা থাকেব What is your name
? তখন তুিম যিদ তামার নাম িলেখ দাও gonimia আর তারপর ভুি (enter) চাপ দাও, তা-
হেল পেরর সািরেত দখেব লখা আসেব Hello, gonimia!। নামটু নওয়ার আেগ What is
in
your name? দখােনােক আমরা বিল যাগান যাচনা (input prompt) আর নাম gonimia
দওয়াটােক আমরা বিল যাগান (input) দওয়া আর পেরর সািরেত Hello, gonimia! দখা-
নােক আমরা বিল ফলন (output) দওয়া।
am
al
তা তুিম বানাও+চালাও বাতােম (Build+Run button) িটপ িদেয় দেখা কী হয়। উপের
য ভােব বলা হেলা স রকম হয় কী না দেখা। তামার বাঝার িবধােথ িনবাহ (execution)
শেষ ওই অিতির জানালােত কী থাকেব তা নীেচ দখােনা হেলা।
What i s your name? gonimia
Hello , gonimia !
এবার আমরা দখেবা কাড কেস লখা আমােদর মেলখেত যিদ কান ভুল থােক তাহ-
ল বানাও+চালাও (build+run) বাতােম িটপ িদেল কী ঘটেব? বানাও+চালাও বাতােম িটপ
দওয়ার আেগ তামােক াপণ (menu) থেক Viewএর (দৃি ) অধীেন Logsএ (ঘটচা) িটপ
িদেত বলেবা, অথবা F2 চাপিন (key) চাপেলও একই কাজ হেব। এর ফেল নীেচর ছিবেত দখা-
না বানাও বাতা পােটর (build messages tab) দখা যােব, যখােন আসেল সংকলেন কান
িট (error) থাকেল তা দখােনা হেব। এবার আমরা ইে কের একটা িট (error) তরী
কের দই। যমন ধেরা std: : string name; লখা রেয়েছ য সািরেত সখােন একদম শষ
হেত িদিত (semicolon) ; তুিম মুেছ দাও। আর তারপর বানাও+চালাও বাতােম (build+run
button) িটপ দাও। দখেব িট বাতা দখােব বানাও বাতা পােট (build messages tab)।
5g
in
am
বানাও বাতা পােট (build messages tab) য বাতা েলা আসেব তা নীেচ দখােনা হেলা।
ি তীয় সািরেত দেখা 8 মােন বুঝাে ৮ম সািরেত িট আেছ, আর িটটা হেলা ; থাকেত হেব।
আসেল ; দরকার আমােদর ৭ম সািরর শেষ। সাধারণত য সািরেত িট আেছ বলা হয়, িট সই
সাির বা আেগর সািরেত থােক। এখােন ; থাকায় সংকলক (compiler) আসেল িঠক ৭ম আর
৮ম সাির িনেয় িকি ত িব াি েত রেয়েছ। মেলখ রচনার সময় আমরা নানান রকম ভুল িট
al
কির, তুিম মেলখ লখার চচা করেত থাকেল এই িট েলার সােথ পিরিচত হেয় যােব। তখন
দখা মা ই বুঝেত পারেব ভুলটু কী আর কী কের সটা িঠক করেত হেব। যাইেহাক িটটু
বুঝেত পারেল আমরা সিট িঠক কের আবার বানাও+চালাও বাতােম (build+run button)
িটপ িদেবা, আর তখন মেলখ (program) সফল ভােবই িনবািহত হেব।
I n f u n c t i o n ' i n t main ( ) ' :
8 : e r r o r : expected i n i t i a l i z e r before ' std '
9 : e r r o r : 'name ' was not declared i n t h i s scope
১০
• পাঠিনক (text)
• পিরচালনা ত
(operating system)
in
• জাল িঠকানা (web address)
• সং াপন (install)
• স াদন খানা (editing area)
• আপদনাশক (debugger)
am
• পাট (tab)
• ছিবও (video)
• উপা (option)
• ব বহার পুি কা (user manual)
• উপা পাট (options tab)
• জানালা (window)
• সংকলন পাট (compilaiton tab)
al
• াপণ (menu)
• িনবাহ পাট (execution tab)
• নিথ (file)
• চালাও (run)
• ফাঁকা নিথ (empty file)
• বানাও (build)
• নতুন (New)
• নমুনা (sample)
• সংর ণ (save),
• িটপ (click)
• বাতাম (button) • মূিত (icon)
১১
5g
in
am
al
অধ ায় ২
মেলখেয়র কাঠােমা
(Program Structure)
5g
গণিনেত (computer) িনবাহেযাগ (executable) এক িনেদেশর (instruction) ম-
ক মেলখ (program) বলা হয়। আমরা িসিপিপ (c++) ভাষায় মেলখ তরী করেবা। -
মেলখ সাধারণত একিট স াদনা (editor) ম (software) ব বহার কের তরী করা হয়।
আমরা একােজ আপাতত cpp.sh নােমর একিট জালপাতা (webpage) ব বহার করেবা। িস-
in
িপিপ ভাষায় তরী মেলখেক থেম একিট সংকলক (compiler) িদেয় সংকলন (compile)
কের গণিনেত িনবাহেযাগ সংেকত (code) তরী করা হয়। তারপর সই সংেকত চালােল (run)
বা িনবাহ (execution) করেল আমরা সাধারণত য ালেয়র (console) নজিরেত (monitor)
am
ফলন (output) দখেত পাই । মেলখ অেনক সময় আমােদর কাছ থেক য ালেয়র চাপিনর
(keyboard) বা িটপিনর (mouse) মাধ েম যাগান (input) িনেত পাের। জেন রেখা য া-
লয় (console) বলেত যাগােনর (input) জ চাপিন ও িটপিন (keyboard and mouse)
আর ফলেনর (output) জ নজির (monitor) বুঝােনা হয়। মেলখ িলখেত গেল য ালয়
(console) থেক যাগান (input) নয়ার ও য ালেয় (console) ফলন (output) দখােনার
কথা তুিম ায়শই নেত পােব। কােজই এ েলা কী বুঝায় সটা ভােলা কের মেন রেখা।
al
১৩
ret ur n 0 ;
}
shuvessa nin 5g
ফলন (output)
in
একদম েত আমরা #include <iostream> ব বহার কেরিছ কারণ iostream নােম
একটা িশর নিথ (header file) আেছ যটা আমরা আমােদর মেলখেত অ ভু করেত চাই।
ওই িশর নিথেত নানান িবপাতক (function) আেছ য েলা আমরা পের জানব ও ব বহার কর-
am
বা। আপাতত জেন নই, ওই নিথেত cout আর endl আেছ। মুলত আমােদর মেলখেত cout
আর endl ব বহার করার জ ই আমরা iostream অ ভু কেরিছ। এরকম আেরা িশর নিথর
(header file) কথা আমরা পের িব ািরত জানেবা ও অব ই ব বহার করেবা।
using namespace std; আমরা ব বহার কেরিছ কারণ cout আর endl আসেল েটা
নাম, আর ওই নাম েটা িসিপিপেত আেগ থেক িবদ মান std (standard বা িমত) নামাধােরর
(namespace) অ গত। িসিপিপেত একই নাম িভ িভ নামাধাের অ গত হেত পাের। তা
al
কােনা নাম বলেল সিট কান নামাধার থেক আসেব সিট আমরা আেগই বেল িদি , যমন
আমােদর সকল নাম আসেল 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: : লািগেয় িনেত হেব, িঠক যমন গাবতিল বলার আেগ ঢাকা লািগেয়
১৪
বলেত হেব ঢাকার গাবতিল। 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 িদেয় হওয়া িববৃিত িট একিট মহ ার
5g
িভতের রেয়েছ। আর একিট িবষয় খয়াল কেরা, আমােদর িববৃিত েলার শেষ িক একিট কের
িদিত (semicolon) ; রেয়েছ। িসিপিপেত বশীরভাগ িববৃিতর পেরই আমরা এইরকম িদিত ;
িদেয় িববৃিত শষ কির। িঠক বাংলা ভাষায় িতিট বােক র পের দাঁিড় । দয়ার মেতা ব াপার।
সব িমিলেয় এই হল আমােদর থম মেলখ, যটা ব বহারকারীেক েভ া জানােব।
in
২.২ নাম-ধাম-বৃ াে র মেলখ (Detailing Program)
am
িসিপিপেত এমন একিট মেলখ (program) রচনা কেরা যিট চালােল ব বহারকারীেক তা-
মার নাম-ধাম-বৃ া কেয়ক সািরেত মালা (string) আকাের বেল দয়। সােথ সংখ া (number)
িহসােব তামার বয়স ও তামার ফলাফেলর িজিপএও বেল দয়।
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
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 f o l a f o l gpa " << 3 . 99 << endl ;
১৫
ফলন (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
5g
cout << " amar boyos 20 bosor " << endl ;
cout << " amar f o l a f o l gpa 3 . 99 " << endl ;
সবেশেষ একটা িবষয় খয়াল কেরা। আমরা এই মেলখেত return 0; এর বদেল িলেখিছ
return EXIT SUCCESS; আর এই EXIT SUCCESS আেছ cstdlib িশর নিথেত (header
in
file)। আমরা তাই #include <cstdlib> িলেখ cstdlib িশর নিথিটও আমােদর মেলখেত
অ ভু কেরিছ। মেন রাখেব EXIT SUCCESS এর মান আসেল 0 িক 0 তা একটা সংখ া
যটা দেখ সরাসির িঠক অ ধাবন করা যায় না আমরা কী বুঝােত চাইিছ, মােন মেলখ সফল
am
না িবফল হেয়েছ। আমরা তাই কের EXIT SUCCESS িলখেবা যােত চােখ দেখই আমরা
বুঝেত পাির ব াপারটা কী। বেল রািখ গণিনর (computer) জ িক 0 আর EXIT SUCCESS
একই ব াপার কারণ EXIT SUCCESS এর মান য 0 ওইটা তা cstdlib নিথেত বলা আেছ,
সংকলন করার পের EXIT SUCCESS আসেল 0 হেয় যােব, গণিন ওইটা ই দখেত পােব।
আমরা 0 এর বদেল EXIT SUCCESS আসেল িলখিছ কবল মা েষর বুঝার িবধার জ , -
মেলখ পেড় চােখ দেখই যােত সহেজ বুঝা যায় মেলখিট সফল না িবফল ভােব শষ হে ,
al
সটাই আমােদর উে । তাহেল এখন থেক মেলখেয়র main িবপাতেক return 0; না িল-
খ return EXIT SUCCESS; িলখেব আর cstdlib িশর নিথও অ ভু কের নেব!
তা তামরা এখন থেক কেয়ক সািরেত িকছু দখােনার মেলখ রচনা করেত চাইেল এই
মেলখেয়র মেতা কের রচনা করেব। দরকার মেতা সংখ া (number) ও মালা (string) িম ণ
কেরও িক যা দখােত চাও তা দখােত পারেব। চ া কের দেখা কমন?
১৬
বাংলায় বা ইংেরজীেত, িসিপিপ ভাষায়ও নয়, যে র ভাষায়ও নয়, কােজই টীকা িলখেল অেনক িদন
পেরও আমােদর মেলখ বুঝেত িবধা হয়।
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
i n t main ( )
{
/ / Subt r a c t 20 years from 2015 to get b i r t h y e a r
}
ret ur n EXIT SUCCESS ; 5g
cout << " amar jonmoshal " << 2015 − 20 << endl ;
উপেরর মেলখ খয়াল কেরা। কিঠন িকছু নয়। আেগর মেতাই iostream আর cstdlib
অ ভু (include) করা আেছ। তারপর বলা হেয়েছ using namespace std; তারপর মুল
িবপাতক (function) িহসােব int main() যিটর কান পরািমিত (parameter) নাই কারণ
( ) গাল ব নীর িভতের িকছু নাই আর যিট একিট পূণক (integer) ফরত দয় কারণ int বলা
আেছ েত। তারপর মুল িবপাতেকর শরীের েটা {} বাঁকাব নীর িভতেরর মহ ায় (block)
al
বলা আেছ 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)। িসিপিপ ভাষায় অিধকাংশ সময়ই সাির টীকা ব বহার করা হয়।
১৭
সাির টীকা যিদ সািরর একদম েত লখা হয় তাহেল সাধারণত এিট টীকার িঠক নীেচ য
সংেকত (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) সংেকত বুঝেত পাের। কােজই টীকা বাংলায়ও লখা স ব।
আমরা এরপর থেক িসিপিপেত লখা সকল মেলখেত টীকা বাংলায় িলখেবা, যােত আমরা আমা-
5g
দর িনেজর ভাষায় সহেজ বুঝেত পাির। এ েলা যেহতু িনবাহ execution) হেব না, কােজই
খােমাকা কন ক কের ইংেরজীেত িলখেত যােবা! আর িবেদশী কউ তা আমােদর মেলখেয়র
সংেকত দখেব না, কােজই আমরা আমােদর বাংলা ভাষােতই টীকা িলখেবা। তেব মেন রাখেব িব-
দশী কােরা পড়ার স াবনা থাকেল আমােদর টীকা সহ সবিকছু ইংেরজী ভাষােতই িলখেত হেব।
in
তাহেল সাির টীকা আর মহ া টীকা শখা হেলা। এখন থেক মেলখ লখার সময় যেথ পিরমােন
টীকা িদেব কমন? আিমও মেলখ েলােত টীকা দেবা, যােত তামােদর বুঝেত িবধা হয়।
am
i n t main ( )
{
cout << " shuvessa nin " << endl ;
ret ur n EXIT SUCCESS ;
}
১৮
সাির টীকা (line comment) িলখেত পােরা যােত বুঝা যায় ওই সািরর র িদেক তুিম আসেল
কী করেত চেয়েছা। তামার মেলখেত লখা কাটাকািট িচ # িদেয় হওয়া সাির েলা সা-
ধারণত সংকলক (compiler) িদেয় ি য়া করা হয় না। আলাদা একিট ম (software) যার
নাম পুব- ি য়ক (preprocessor) সটা িদেয় সংকলন করারও আেগ এই েলা ি য়া করা
হয়, কাজটা বশীর ভাগ সমেয় অব সংকলকই কিরেয় নয়। পূব- ি য়ক (preprocessor)
িবষেয় িব ািরত আেলাচনা আমরা পের করেবা।
#i n c l u d e <iostream> / / যাগান ফলন াত িশর নিথ অ ভু হেলা
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
5g
খেত থাকা সকল সংকলনেযাগ সংেকত এক সািরেত িলখেত পােরা। যমন উপেরর মেলখেয়র
সংকলনেযাগ অংশটু আমরা চাইেল নীেচর মেতা কের টানা এক সািরেত িলখেত পাির।
উপের যিদও ই সািরেত দখা যাে আমরা আসেল using থেক কের } পয টানা
am
একসােথ িলেখিছ, িক এখােন পােশর িদেক ােনর তার কারেণ টানা সািরিট ভেঙ ই সাির
হেয় গেছ। তামার স াদেক (editor) এ যিদ পােশর িদেক অেনক জায়গা থােক তুিম এক
সািরেতই িলখেত পারেব। আসেল তম একিট ফাঁকা (space) দয়া বাধ তামুলক হেয় যায়
যখন পরপর েটা শ লখা হয়। যমন using, namespace, std, int, main এইরকম শ
পরপর েটা থাকেল তামােক কমপে একিট ফাঁকা (space) িদেত হেব। েটা িচ যমন ব নী
( ) বা িদিত ; বা আেরা অেনক তীক আেছ, এই েলা পরপর েটা থাকেলও কান সম া নাই।
al
১৯
সবেচেয় উপের যভােব আমরা মেলখ িলেখিছ সখােন আেরা একটা ব াপার খয়াল কেরা,
আমরা cout বা return এর িববৃিত েলা লখার আেগ তােদর িনজ িনজ সািরেত বশ িকছুটা
ফাঁকা িদেয় িলেখিছ, একদম সািরর থেক িলিখ নাই। এিট কন করলাম? এিট করলাম এ
কারেণ য ওই েটা সাির আসেল আমােদর মহ ার িভতের আেছ। ল কেরা মহ ার বাঁকা ব নী
েটা কমন দেখই বুঝা যায় য এরা জেন জনার। আর মহ ার িভতেরর িববৃিত েটা কমন
একটু িভতেরর িদেক থাকায় পির ার বুঝা যায় য ওরা আসেলই ওই মহ ার িভতের। তা দরকার
মেতা কান িববৃিত এরকম সািরর একটু িভতেরর িদেক থেক লখার ব াপারিটেক বলা হয় ছাড়ন
দয়া (indentation)। মেলখ লখার সময় এখন থেক তামরা অব ই দরকার মেতা ছাড়ন
িদেয় িলখেব, তাহেল দখেব মেলখ পড়া ও বাঝা কত সহজ হেয় যায়।
এই পযােয় িজে স করেত পােরা, েত ক সািরেত এভােব অত লা কের ফাঁকা চাপেবা কম-
ন এইটা তা িবরি কর। আসেল তামার চাপিনমাঁচায় (keyboard) একটা ল (tab) চাপিন
আেছ, দেখা ওইটা চাপেল একসােথ ৪টা বা ৮টা ফাঁকা (space) এর সমপিরমান ফাঁকা একবাের
আেস। তা দরকার মেতা একবার বা বার ল চাপেলই হেয় গেলা। কােজই মেলখ লখার
সময় কখেনাই এই আলেসিম টু করেব না। ছাড়ন দয়া মেলখ লখার জ পূণ ব াপার,
5g
র দখা যাওয়া আর তাড়াতািড় পড়ার জ দরকারী, মেলখেত কান ভুল থাকেল আমরা
যখন ভুল বর করেত চাই তখনও খুব খুব দরকারী, বড় বড় মেলখ যখন িলখেব তখন ব াপারটা
খািনকটা ঠেক ঠেক িশেখ অিভ তা িদেয় ভােলা কের বুঝেত পারেব।
২. িসিপিপ ভাষায় মেলখ তরী হেত সটার ফলাফল দখা পয কী কী ঘটনা ঘেট?
৪. িসিপিপেত িশরনিথ (header file) বলেত কী বুেঝা? আমােদর মেলখ েলােত িশর
al
৬. িসিপিপেত main িবপাতক হেত ফরেতর সময় return 0; না িলেখ তার বদেল return
EXIT SUCCESS; িলখা কন উ ম? ব াখ া কেরা।
৭. মেলখেত ছাড়ন দয়া (indentation) মােন কী? ছাড়ন দয়ার পে -িবপে যুি
িলখ। মেলখ কন বশ ফাঁকা ফাঁকা কের িলখা উিচৎ?
৮. মেলখেত টীকা (comment) লখা কী? মেলখেত টীকা (comment) িলখার কেয়-
কিট কারণ ব াখ া কেরা? সাির (line) টীকা ও মহ া (block) টীকা কী?
২০
১০. মেলখ সফল ভােব শষ হেল main িবপাতক হেত সাধারণত কত ফরত পাঠােনা হয়?
ক) −1 খ) 0 গ) 1 ঘ) িকছুই না
১১. িসিপিপেত মহ া (block) বুঝােনার জ নীেচর কান েলা ব বহার করা হয়?
১২. িসিপিপেত একিট িববৃিতর (statement) শেষ সাধারণত কান িচ ব বহার করা হয়?
ক) . খ) ; গ) : ঘ) ,
খ) ∗∗ টীকা ∗∗
5g
১৩. িসিপিপেত নীেচর কানিট সিঠক টীকা (comment)?
কবল সমাধান দেখ িনেত পােরা। সমাধান েলা পিরগণনার েলার শেষ আেছ।
১. নীেচর কথা েলা ফলেন (output) দখােনার জ িসিপিপেত একিট মেলখ িলেখা।
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
tomar boyosh noy bosor .
al
porigonona s h i k h t e chao ?
porigonona k i sohoj na !
২. িসিপিপেত একিট মেলখ রচনা কেরা যিট নীেচর নকশািটর মেতা নকশা তরী কের।
খয়াল কের দেখা নকশািট বাংলা অ 8 এর মেতা। তুিম চাইেল আেরা নানান নকশা,
নানান বণ বা অ িনেজর মেতা কের ভেব িনেয় সইমেতা নকশা তরী করেত পােরা।
যাইেহাক দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব
আর সহেজ বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
∗∗ ∗∗ ∗
∗ ∗
∗ ∗ ∗
∗ ∗
∗∗ ∗∗ ∗
২১
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন যােত
একটু সাহায কবল পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
১. নীেচর কথা েলা ফলেন (output) দখােনার জ িসিপিপেত একিট মেলখ িলেখা।
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
tomar boyosh noy bosor .
porigonona s h i k h t e chao ?
porigonona k i sohoj na !
i n t main ( )
{
5g
using namespace std ; / / িমত নামাধার ব বহােরর জ
in
/ / দরকারী কথা েলা ফলেন দখাও
cout << " tomar boyosh noy bosor . " << endl ;
cout << " porigonona s h i k h t e chao ? " << endl ;
am
২. িসিপিপেত একিট মেলখ রচনা কেরা যিট নীেচর নকশার মেতা নকশা তরী কের। খ-
য়াল কের দেখা নকশািট বাংলা অ 8 এর মেতা। তুিম চাইেল আেরা নানান নকশা, নানান
বণ বা অ িনেজর মেতা কের ভেব িনেয় সইমেতা নকশা তরী করেত পােরা। যাইেহাক
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
∗∗ ∗∗ ∗
∗ ∗
∗ ∗ ∗
∗ ∗
∗∗ ∗∗ ∗
এই মেলখিট িক অেনক মজার তাই না। তুিম িক বণমালার িতটা বণ আর ০-৯ দশটা
অে র জে ই এরকম নকশা তরী করেত পারেব? রা াঘােট বা িবেয় বািড়েত অেনক সময়
ছাট ছাট বািত িদেয় নানান িকছু লখা হয়, আসেল এই নকশা েলার মেতা কের নকশা
বািনেয়ই স েলা করা হয়। গণিনেত (computer) এর নজিরর (monitor) পদায়ও
২২
অেনক িকছু এভােব দখােনা হয়। আসেল য কান ছিবই এরকম অসংখ িব র সম েয়
তরী, িকছু িব ালােনা, িকছু িব নভােনা। য িব েলা ালােনা স েলা হেলা ∗
আর য েলা নভােনা স েলা ফাঁকা। তা চেলা আমরা মেলখিট দিখ।
i n t main ( )
{
/ / দরকার মেতা ∗ ও ফাঁকা িদেয় নকশা
cout << " ∗∗ ∗∗ ∗ " << endl ;
cout << " ∗ ∗ " << endl ;
cout << " ∗ ∗ ∗ " << endl ;
cout << " ∗ ∗ " << endl ;
cout << " ∗∗ ∗∗ ∗ " << endl ;
২৩
• যাগান (input)
২৪
অধ ায় ৩
চলক ও বক
(Variables and Constants)
5g
চলেকর (variable) মান (value) বদলােনা যায় িক বেকর (constant) মান বদলােনা যায়
না। মেলখেত উপা (data) সরাসির (directly) না িলেখ চলক বা বেকর মাধ েম ব বহার
করেল একরকেমর পেরা তা (indirection) তরী হয়। ফেল উপা িঠক কেতা সটা না ভেব
উপা িট কীেসর আর তার ি য়াকরণ কমন সটা ভেব মেলখ তরী সহজ হেয় যায়।
in
৩.১ চলেকর ব বহার (Using Variables)
am
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
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 ;
২৫
উপের আমরা য মেলখ িলখলাম আমরা িক ওইটা চাই না। ওইখােন সংখ া েলা সরাসির
ে বিসেয় িহসাব কের ফলন (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>
i n t main ( )
{
5g
i n t doirgho ; / / এই চলেক থাকেব বেগর দঘ ।
i n t prostho ; / / এই চলেক থাকেব বেগর
i n t k h e t r o f o l ; / / এই চলেক থাকেব বেগর
।
ফল।
in
i n t porishima ; / / এই চলেক থাকেব বেগর পিরসীমা।
// ফল বর করার সূ হল দঘ আর ে র ণফল।
k h e t r o f o l = doirgho ∗ prostho ;
ফলন (output)
k h e t r o f o l holo 15 borgometer
porishima holo 16 meter
২৬
5g
আেগ এই রকম int িলেখ বুিঝেয়িছ য আমােদর এই চলক েলার মান হেব পূণক, আমরা কান
ভ াংশ ব বহার করেবা না। তুিম যিদ ভ াংশ ব বহার করেত চাও তাহেল তামােক int এর বদেল
float িলখেত হেব। float হল একরকেমর ভ াংশ। আমরা সই আেলাচনা পের আেরা িব ািরত
করেবা। তেব int এর বদেল float িলখেল আমােদর মেলখেত িক আর কাথাও কান িকছু
বদলােত হেব না, িঠক কাজ করেব। আমরা আপাতত int রেখই এই পােঠর আেলাচনা চালাই।
in
তা উপেরর মেলখেত আমরা যখন িলখলাম int doirgho; এর মােন হেলা doirgho
নােমর আমােদর একটা চলক আেছ আর তার মান হেব পূণক। এইেয int doirgho; িলেখ এই
িবষয় েলা বুঝাইলাম এটােক বলা হয় চলক ঘাষনা (variable declaration)। চলক ঘাষ-
am
না করেল তারপর থেকই চলকিট পরবতী যেকান িববৃিতেত (statement) ব বহার করা যায়,
িক ঘাষনা করার সােথ সােথ ওইখােন চলেকর মান কত সইটা িক আমরা জািননা, সাধারনত
চলেক তখন একটা উ াপা া মান থােক। এইটা িনেয় আমরা পের আেরা আেলাচনা করেবা।
এই মেলখেত আমরা দখিছ এর পের doirgho = 5; িলেখ অথাৎ = িচ ব বহার কের আমরা
doirgho চলেকর মান আেরাপ (value assign) কেরিছ 5। তরাং এরপর থেক doirgho
চলেকর মান হেব 5। একই ভােব prostho চলেকর মানও আমরা 3 আেরাপ কেরিছ।
al
২৭
না। নামটা যখন উ ৃিতর বাইের থােক তখন ওইটা একটা নাম হয়, এইে ে একটা চলেকর নাম
হয় আর ওইটার মান িনেয় কাজ হয়। একই অব া porishima এর ে ও। উ ৃিত িচে র
িভতের থাকা porishima কথািট ব ফলেন এেসেছ িক উ ৃিতর বাইের থাকা porishima
কথািটর বদেল ওিটেক চলক ধরেল য মান পাওয়া যােব তা ফলেন এেসেছ।
িফিরি ৩.২:
5g
তা কখেনা বদলােব না, সব সময় বক থাকেব। পাইেয়র মান যেহতু ভ ক আমােদর বকিট
তাই হেব float বক। চেলা আমরা এবার তাহেল মেলখিট দিখ।
i n t main ( )
{
i n t bashardho = 5 ; / / এিট বৃে র ব াসােধর জ চলক
ফলন (output)
b r i t t e r k h e t r o f o l 78 borgo cm
২৮
5g
সািরেত না িদেয় যখােন চলক ঘাষনা (variable declare) কেরিছ সখােনই = িচ িদেয় মান
আেরাপ কেরিছ অথাৎ bashardho এর মান সরাসির 5 হেয় গেছ। এটােক বলা হয় চলেকর
আিদ মান আেরাপণ (initial value assignment)। এটা করার েটা িবধা: একটা হেলা
আমােদর ইটা আলাদা সািরেত ইবার িলখেত হেলা না, আেরকটা হেলা চলেক উ াপা া মান
থাকার কারেণ মেলখেয় ভুল িহসাব করার স াবনা কেম গল। জেন রােখা চলক ঘাষনার সােথ
in
সােথ কান মান না িদেয় না িদেলও ওখােন উ া পা া একটা মান থােক, কী মান থাকেব আমরা
িক কান ভােবই আেগ থেক সটা জািননা, পুরাই উ াপা া একটা মান হেত পাের সটা। আর
ভুল েম ওই চলেক যিদ পের আর মান আেরাপ (assign) করা না হয়, অথবা যিদ আেরাপ করার
am
আেগই অ কান িহসােব চলকিট ব বহার করা হয়, তাহেল স ত কারেণই উ াপা া মানিট
কােজ লািগেয় একটা উ াপা া ফলাফল আসেব, যটা আমরা কখেনাই চাই না।
ব াসােধর জ চলক নয়ার পের আমরা পাইেয়র মান রাখার জ একিট float const
ধরেনর বক নেবা যার নাম pai। পাইেয়র মান যেহতু ভ সংখ া আমােদর তাই float িনেত
হেব, আর পাইেয়র মান যেহতু সব সময় বক তাই আমরা float এর পের const িলেখ িদেত
চাই। তুিম যিদ const না িলেখা তাহেল িক এটা একটা চলেকর মেতা কাজ করেব।
al
২৯
উপেরর মেলখ ল কেরা। চলক আর বেকর মেধ তফাৎ হেলা চলেকর (variable)
মান ঘাষনার সময় একবার আেরাপ করা যায়, আর তারপেরও যতবার ই া ততবার নতুন নতুন
মান আেরাপ (assign) করা যায়। িক বেক (constant) একটা মান কবল ঘাষনা করার
সময় বেল দওয়া যায়, মেলখেত পের আর কাথাও ওই বেকর মান বদেল নতুন মান আেরাপ
(assign) করা যায় না। যিদ কেরা তাহেল সংকলক (compiler) িট বাতা (error message)
দখােব। তা আমরা যেহতু জািন য পাইেয়র মান সবসময় বক, এটার মান আমােদর কখেনা
বদল হেব না, আমরা তাই এটােক চলক িহসােব ঘাষনা না কের বক িহসােব ঘাষনা করেবা।
আশা করা যায় চলক আর বেকর পাথক পির ার হেয়েছ। এবার দেখা আমােদর বৃে র
ফেলর মেলখেত আমরা ফেলর জ khetrofol নােম একটা চলক িনেয়িছ, যার -
করণ হল int বা পূণক. যিদও আমরা জািন পাইেয়র মান ভ ক হওয়ার কারেণ আমােদর ফলাফল
আসেল একিট ভ ক হেব। এইটা আমরা মুলত পরী ামুলক করিছ। তা int নয়ার কারেণ আমরা
আমােদর মেলখেয়র ফলন দখেত পােবা 78 আসেল হওয়ার কথা 78.5375। এইটা কন হেলা
কারণ হেলা থেম 78.5375 িঠক মেতা িভতের িভতের িহসাব হেয় যােব, িক যখন khetrofol
চলেকর মেধ মানটা আেরাপ (assign) হেব তখন যেহতু পূণ সংখ া বেল ভ াংশটু ঢুকােনা যা-
ব না, তাই ওইটা বাদ পের যােব (truncation)। আর মান যটা আেরাপ হেব সটা হেলা বাঁকী
5g
পূণাংশটু বা 78। তা ভ াংশ সহ সিঠক ফল পাওয়ার জ khetrofol এর সামেন int না
িলেখ float িলেখ দাও তাহেল দখেব িঠক িঠক 78.5375 ই ফলন িহসােব চেল আসেব।
উপেরর আেলাচনায় আমরা িতনটা ব াপার িশখলাম: ১) আমরা চলক (variable) না বক
(constant) ব বহার করেবা সটা; তারপর ২) ঘাষনা করার সােথ সােথ একটা আিদ মান িদেয়
in
দয়া যােক বলা হয় আিদ মান আেরাপণ (initial assignment), আর ৩) কান চলক বা বেকর
করণ কমন হেব, int না float হেব, পূণক না ভ ক হেব সটা আেগ থেক ধারনা করেত
পারেত হেব, আর সই অ যায়ী চলক বা বেকর কার বেল িদেত হেব, না হেল সিঠক ফলাফল
am
নাও পাওয়া যেত পাের, যমন 78.5375 এর বদেল 78 পাওয়া যেত পাের।
করেত পাির তা আেলাচনা করেবা। আমরা আেগ দেখিছ িতিট চলক আলাদা আলাদা কের, এম-
নিক আলাদা আলাদা সািরেত ঘাষনা করেত। তা িবধার জ আমরা চাইেল একািধক চলক
এক সািরেতই একটা িববৃিতেতই ঘাষনা করেত পাির, যিদ তােদর সকেলর উপা করণ (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 ধরেনর
৩০
5g
িববৃিতেত িলখেতই পারতাম। এখােন আমরা বরং সটা না করা িনেয়ই আেলাচনা করিছ।
i n t doirgho , prostho , porishima ; / / দঘ ,
f l o a t bashardho , k h e t r o f o l ; / / ব াসাধ ও ফল
, পিরসীমা
in
৩.৪ আিদমান আেরাপণ (Initial Assignment)
am
আেগর পােঠ আমরা একািধক চলক (variable) ঘাষনা (declaration) িনেয় আেলাচনা কের-
িছ। এখন আমরা এেদর আিদ মান (initial value) আেরাপ (assign) করার িদেক নজর দই।
আিদমান হল থমবােরর মেতা য মান িদেয় দওয়া হয় সই মানিট। ঘাষনা দয়ার পের চলেক
আলাদা কের আিদ মান আেরাপ করেত চাইেল আমরা নীেচর মেতা কের করেবা।
doirgho = 6 ;
prostho = 3 ;
al
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 ;
৩১
কান চলক ঘাষনার সােথ সােথ তােত কান আিদমান না িদেলও য উ াপা া মান থােক
সটা কত তা যিদ জানেতা চাও তেব পরী া কের দখেত পােরা। ধেরা তামার চলক 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 ; / / পাইেয়র মােনর জ বক
5g
আমােদর যিদ একািধক float constant থােক স েলােক আবার এক িববৃিতেতই ঘা-
ষনা করেত পারেবা, যমন পাই আর g এর মান ঘাষনা করিছ নীেচ। তামরা জােনা িজ হল
মাধ াকষেনর রেণর মান, যা িনিদ ােন মাটামুিট একটা বক।
in
f l o a t const p a i = 3 . 1415 , g = 9 . 81 ;
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 ;
al
৩২
১.
: নীেচ িকছু ধারণাগত রেয়েছ।
5g
েলার উ র িনেজ িনেজ বর করেব।
৫. িসিপিপেত কী ভােব চলক ও বক ঘাষনা করেত হয়। যথাযথ উদাহরণ িদেয় দখাও।
৬. িসিপিপেত কী ভােব পূণক ও ভ ক ধরেনর চলক ঘাষনা করেত হয় উদাহরণ িদেয় দখাও।
৭. িসিপিপেত এক সািরেত কখন একািধক চলক ঘাষনা করা যায়? উদাহরণ িদেয় দখাও।
al
১০. বেক (constant) কন আিদমান আেরাপ করেত হয়, িক পের আেরাপ করা যায় না?
১১. ফলাফল ভ ক (float) িক int ধরেনর পূণক চলেক আেরাপ করেল কী ঘেট?
১. এমন একিট মেলখ রচনা কেরা যিট িট পূণক int ধরেনর, আর একিট ভ ক float
ধরেনর চলক ঘাষনা কের। মেলখিট তারপর চলক িতনিটর মান যথা েম 10, 15, 12.6
আেরাপণ কের। পিরেশেষ মেলখিট চলক েলার মান পদায় দখায়।
৩৩
২. ধেরা েটা পূণ সংখ া 89 আর 56। এই িটেক তুিম েটা চলেক িনেব, আর তারপর ইিট
চলেক তােদর যাগফল, িবেয়াগফল িনণয় করেব। সবেশেষ সব েলা চলেকর মান ফলেন
দখােব। সব িমিলেয় এই রকম একিট মেলখ রচনা কেরা।
5g
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
in
১. এমন একিট মেলখ রচনা কেরা যিট িট পূণক int ধরেনর, আর একিট ভ ক float
ধরেনর চলক ঘাষনা কের। মেলখিট তারপর চলক িতনিটর মান যথা েম 10, 15, 12.6
আেরাপণ কের। পিরেশেষ মেলখিট চলক েলার মান পদায় দখায়।
am
i n t main ( )
{
i n t purnok1 , purnok2 ; / / পূণক িট এক সােথ ঘাষনা
f l o a t vognok ; / / ভ কিট আলাদা ঘাষনা
৩৪
ফলন (output)
purnok d u t i 10 15
vognok holo 12 . 6
২. ধেরা েটা পূণ সংখ া 89 আর 56। এই িটেক তুিম েটা চলেক িনেব, আর তারপর ইিট
চলেক তােদর যাগফল, িবেয়াগফল িনণয় করেব। সবেশেষ সব েলা চলেকর মান ফলেন
দখােব। সব িমিলেয় একিট মেলখ রচনা কেরা।
আমরা এই মেলখেত কবল দরকারী অংশটু দখাি । ধের িনি য তুিম দরকারী
িশর নিথ (header) অ ভু করা, নামাধার std ব বহার, main িবপাতক লখা ও মান
ফরত দয়া ইত মেধ ভােলা কের িশেখ ফেলেছা। তা তুিম যিদ সিত নীেচর লখা ম-
লখ সংকলন কের চালােত চাও, তামােক িক আেগ include, namespace, main,
return ওই েলা িলেখ িনেত হেব, তারপর main িবপাতেকর িভতের return এর আেগ
তুিম আমােদর নীেচর অংশ েলা িলেখ িনেব। তারপর সংকলন কের মেলখ চালােব।
i n t j o g f o l = prothom + d i t i y o ;
in
i n t b i y o g f o l = prothom − d i t i y o ;
৩৫
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 ;
5g
৩.৬ গণনা পিরভাষা (Computing Terminologies)
in
• আিদ মান (initial value) • ভ ক (fraction)
৩৬
অধ ায় ৪
5g
নােম কী আেস যায় কেম পিরচয়। আপনার কাজই িনধারণ কের দেব আপনার পিরচয়। আপনার
নাম পিরচয় হেব আপনার কােজর কারেণই। মেলখ (program) িলখেত িগেয় আমরা তাই
চলক (variable), বক (constant), িবপাতক (function) সহ য কান িকছুর নাম দই
in
তােদর কী কােজ লাগােনা হেব সটা মাথায় রেখ।
am
িসিপিপেত চলক ও বেকর ব বহার তুিম ইত মেধ িশেখ ফেলেছা। আর চলেকর নাম কী রকম
িদেত হেব সটাও আেগ একটু জেনেছা। এখন আমরা িব ািরত ভােব িশখব িসিপিপেত কী ভা-
al
ব চলক বা বেকর নাম িদেত হয়, িবেশষ কের নােমর গঠনরীিত (syntax) কমন অথাৎ না-
ম কী রকম অ র থাকেত পারেব অথবা পারেব না। আমরা আপাতত কবল main িবপাতক
(function) িনেয় কাজ করিছ। িক ভিব েত আমরা যখন িনেজেদর জ নানান িবপাতক তরী
করেবা, তখন িবপাতেকর নামকরেণর জে ও চলক বা বেকর নাম তরীর িনয়ম েলাই কােজ
লাগেব। চলক বা বক বা িবপাতক যাইেহাক নাম ক বলা হয় শনা ক (identifier)।
িসিপিপেত কান শনা েকর (identifier) নােম কবল ১) ইংেরজী বণমালার বড় হােতর
অ র A-Z, ২) ইংেরজী বণমালার ছাট হােতর অ র a-z, ৩) ইংেরজী অংক 0-9 আর ৪) িন দাগ
(underscore) থাকেত পারেব। তেব শনা েকর নােমর থম অ র আবার অংক 0-9 হেত
পারেব না, থম অ র ছাড়া অ য কান অ র িহসােব অংক েলা ব বহার করা যােব। তরাং
বাঝাই যাে থম অ র য কান বণ A-Z বা a-z অথবা িন দাগ (underscore) হেত পা-
রেব। আর তারপেরর য কান অ র বণ বা অংক বা িন দাগ হেত পারেব। িসিপিপেত শনা েকর
নােমর দঘ িনেয় কান িবিধিনেষধ নই তেব মেলখ (program) সংকলেন (compile) কী
সংকলক ব বহার করা হে তার ওপর এটা িনভর করেত পাের। cpp.sh িদেয় সংকলন করেল
কান িবিধ িনেষধ নই, মাইে াসফট c++ িদেয় সংকলন করেল ২০৪৮ অ র পয হেত পাের।
যাইেহাক আমরা এখােন গঠনরীিত অ যায়ী বধ ও অৈবধ িকছু নাম দখেবা।
৩৭
অৈবধনাম কারণ
12 নােমর সব েলার অ র অংক হেত পারেব না
12cholok নােমর থম অ র অংক হেত পারেব না
amar cholok নােমর মাঝখােন কান ফাঁকা (space) থাকেত পারেব না
ama;cho+k বণ, অংক, িন দাগ ছাড়া অ কান তীক থাকেত পারেব না
মেলখেত (program) অৈবধনাম ব বহার করেল কী হয়? কের দেখা কী হয়! সংকলক
(compiler) িটবাতা (error message) িদেব, আর তামােক নামিট িঠক করেত হেব। তাহ-
ল এখন থেক তামার মেলখেত নাম দওয়ার সময় নােমর এই গঠনরীিত েলা মেন চলেব।
বধনাম কারণ
p একটাই অ র সিট ছাট হােতর বণ
P একটাই অ র সট বড় হােতর বণ
abc িতনটা অ র সব ছাট হােতর বণ
ABC িতনটা অ র সব বড় হােতর বণ
Abc িতনটা অ র ছাটহােতর বড়হােতর িমশােনা
bAc
a1bc
a1Bc
a bc
abc
5g
িতনটা অ র ছাটহােতর বড়হােতর িমশােনা
িতনটা ছাটহােতর অ র ও একটা অংক, অংকিট
িতনটা ছাটবড় হােতর অ র ও একটা অংক যিট
িতনটা ছাটহােতর অ র ও একিট িন দাগ
িতনটা ছাট হােতর অ র ও িতনিট িন দাগ
েত নয়
েত নয়
in
Abc িতনটা ছাটবড় হােতর অ র ও িতনিট িন দাগ
amar cholok ছাটহােতর অ র ও িন দাগ, নামিট অিধক বাধগম
amar Cholok ছাটবড় হােতর অ র ও িন দাগ, অিধক বাধগম
am
িসিপিপেত শনা েকর (identifier) নাম কমন হেত পাের আর কমন হেত পাের না, আমরা তা
আেগর পােঠ দেখিছ। এই পােঠ আমরা দখেবা নােমর অথেবাধকতা (semantic)। আমরা যখন
কান নাম দেবা, তখন নামিট অব ই অথবহ হওয়া চাই। আমরা আেগর একিট পােঠ অ একটু
আেলাচনা কেরিছ নােমর অথেবাধকতা িনেয়। এখন আেরা িব ািরত আেলাচনা করিছ নাম েলা
কমন হেল ভােলা হয় স স েক। চলক (variable) বা বক (constant) বা িবপাতেকর
(function) নাম সবসময় তার কাজ ও ব বহােরর িদেক খয়াল রেখ অথেবাধক হওয়া উিচৎ।
অথেবাধক না হেল মেলখ (program) বাঝা আমােদর জ কিঠন হেয় যায়।
অেনেক অিতির আ েহ য ত িনেজর নােম বা ি য় কােরা নােম শনা েকর নামকরণ কের
থােক যমন gonimia1, gonimia2, ইত ািদ। তা এই চলক েটার একটা যিদ ব াসােধর জ
আেরকটা যিদ ফেলর জ ব বহার করা হয়, তাহেল চলেকর নাম থেক মােটও বুঝা যােব
না কান নামিট কী কােজ ব ব ত হে । ব াসােধর জ বরং radius বা bashardho অথবা
িনেদনপে r বা b ব বহার করা যেত পাের। এক অ েরর নাম দয়া অেনেক পছ কের, কারণ
তাড়াতািড় লখা যায়, িক একই আদ া র যু একািধক চলক থাকেল তখন মুশিকল হেয় যায়।
সে ে ওই অ েরর সােথ আেরা অ র লািগেয় অথবা সংখ া লািগেয় িতিট নামেক আলাদা
করেত হেব, যােত অ ত বুঝা যায় কান চলকিট কী উে ে ব বহার করা হেয়েছ।
৩৮
আমরা যিদ েটা বৃ িনেয় কাজ কির তাহেল তােদর ব াসােধর জ িট চলক হেতই পাের
bashardho1 আর bashardho2 তােত কান সম া নাই। ব াপারটা দীপু ন র ২ চলি ে র
মেতা, একজেনর নাম দীপু ন র ১ আর একজন দীপু ন র ২। অথবা কউ চাইেল নাম িদেত
পাের bashardhoA আর bashardhoB। এভােব একই ধরেনর কােজ ব বহার হেব এরকম
অেনক েলা চলক লাগেল আমরা সংখ া লািগেয় বা বণ লািগেয় আলাদা আলাদা নাম তরী কের
িনেবা। এর জ অব সাজন (array) নােম আলাদা একটা ধারণা আেছ, যটা আমরা পের
জানেবা। সাজন ব বহার কের আমরা সংখ া লািগেয় যত ই া তত েলা একই ধরেনর নাম পাই।
অেনেক অিতির অলস হেয় অথবা য কান কারেণ শনা েকর নাম করণ করেত থােক a, b, c
, p, q, r , i , j , k, x, y, z ইত ািদ এেকর পর এক অ র িদেয়। এটা একটা খুবই বােজ
অভ াস। এইরকম শনা ক মােটও অথেবাধক নয়। এ েলা থেক বুঝার কান উপায় নই কান
চলকিট িঠক কী কােজ ব বহার করা হে । সবসময় এরকম নামকরণ থেক ের থাকেব।
এখােন করেত পােরা: নামকরেণ িক সবসময় একটা মা শ ই ব বহার করেবা? এেকর
অিধক শ ব বহার করেবা না? উ র হে অথেবাধক করার জ তুিম দরকার মেতা একািধক
শ অব ই ব বহার করেব, এইটা খুবই ভােলা অভ াস। আর সে ে যােত িতিট শ খুব
সহেজ বাঝা যায় স জ তামার িকছু কৗশল অবল ন করেত হেব। একটা কৗশল হেলা িট
5g
শে র মােঝ একিট িন দাগ দওয়া যমন amar cholok। আেরকিট কৗশল হল িতিট শে র
থম অ রিট বড়হােতর দওয়া আর অ েলা ছাট হােতর, যমন AmarCholok তেব চাইেল
একদম থম শে র থম অ রিট ছাটহােতরও রাখেত পােরা যমন amarCholok। নীেচর
সারণীেত আমরা িকছু অথেবাধক নােমর উদাহরণ দখেবা।
in
নাম যেথাপযু তার কারণ
sum যাগফেলর জ sum চলেকর ইংেরজী নাম
jogfol যাগফেলর জ jogfol চলেকর বাংলা নাম
am
৩৯
ছাটহােতর িকছু অ র বড় হােতর এইভােব িলখেত পারেবা িকনা। িবেশষ কের আমরা জািন ইং-
রজীেত আিম ছাট হােতরই িলিখ আর বড় হােতরই িলিখ শ টা আসেল একই থােক, িসিপিপেতও
িক তাই? আমরা বরং উদাহরণ িদেয় ব াপারটা দিখ। ইংেরজীেত ছাট হােতর বড় হােতর অ র
আলাদা হেলও ও েলা কবলই সৗ যবধন মুলক। উপেরর িতনেট ইংেরজী বাক তাই একই।
এবার আমরা িসিপিপ ভাষায় ছাট হােতর বড় হােতর অ েরর ব বহার দিখ। নীেচর নাম -
লার ত েকিট িসিপিপ ভাষায় আলাদা আলাদা নাম িহসােব ধরা হেব।
amarcholok , amarCholok , AmarCholok , amar cholok ,
Amar Cholok , amarChoLok , AmarChOlOk
িসিপিপেত উপেরর একটা নাম িদেয় য চলক বা বক বা িবপাতকেক বুঝােনা হেব অ নাম
িদেয় ওইটােক বুঝােনা যােব না, বরং অ একটা বুঝােনা হেয় যােব। মাট কথা েটা নােমর একটা
অ েরও যিদ এিদক সিদক থােক তাহেল নাম েটা আসেল আলাদা। েটােক একই িজিনেসর নাম
িহসােব ধের নয়া যােব না। তরাং মেলখ (program) লখার সময় খয়াল রাখেব যােত একটা
চলকেক বুঝােত িগেয় কবল বড়হােতর ছাটহােতর বেণর িভ তার কারেণ আেরকটােক বুিঝেয় না
5g
ফেলা, তােত সব ভজঘট লেগ যােব। তামার মেলখও উ াপা া ফলাফল িদেব। আবার ধেরা
তামার একটাই চলক যার নাম amarcholok, িক পের তুিম িলেখেছা amarCholok। এই
অব ায় সংকলন (compile) করেল তামােক "amarCholok is not declared" এইরকম
িটবাতা (error message) িদেব। তামােক তখন amarCholok এর বদেল amarcholok
িলেখ িঠক করেত হেব। মেলখ তরীর সময় আমরা ায়শই এইরকম ভুল কের থািক।
in
উপেরর এই িনয়ম জানার পের তুিম হয়েতা মেন করেব এইটা তা ভােলাই। আমার যিদ
ইটা বৃে র ব াসােধর জ চলক লােগ একটার নাম িদেবা bashardho আর একটার নাম িদেবা
Bashardho। াঁ, তুিম সটা িদেতই পােরা। িসিপিপ যেহতু ইটােক আলাদা আলাদা চলক
am
িহসােব ধের িনেব, তাই এই েটা হেলা েটা বধ আলাদা নাম। তেব অথেবাধকতার িদক ভেব
তুিম হয়েতা এরকম নাম করণ থেক দূের থাকার চ া করেব। একটা অ র বড় বা ছাটহােতর
কবল এই অ একটুখািন িভ তা িদেয় আসেল তমন বশী অথেবাধক পাথক তরী করা যায় না,
ফেল মেলখ (program) পড়া কিঠন হয়। আর একটা ব াপার: চলেকর নামকরেণ বড়হােতর
ছাটহােতর অ র িমশােত তা পােরাই যমন AmarCholok, িক এমন ভােব িমিশও না য
পড়াটা খুব কিঠন হেয় যায়, যমন AmArChOlOk, এই রকম নাম চট কের পড়া আসেল স ব
al
না, বরং এইরকম নাম য নাদায়ক। কােজই সবিমিলেয় সহজ ও র নাম িদেব, কমন!
৪০
নাম লাল, সই বাসার কােজর ছেলর নাম লাল হয় কমেন, ালক হেলা বড় টুম, তার
কী এত বড় অস ান করা যায়! আর জামাইেয়র নাম হেলা কােদর। তা বউ আেরা এক কািঠ
বািড়েয় বলেত থােক িঠক আেছ কােজর ছেলর নাম বদেল কােদর রাখা হউক, দিখ জামাইেয়র
কমন লােগ। তারপর জামাইেয়র সামেনই কােজর ছেলেক বেল "এই এখন থেক তার নাম
িদলাম কােদর।" তারপর হঁেড় গলায় ডাকেত থােক "কােদর, এই কােদর, এই িদেক আয়।"
কমন একটা বড়ােছড়া অব া। শষ পয িঠক হয় এক বাসায় ইটা লাল তা হেত পােরনা,
একজেনর নাম বদলােত হেব। আর বাসার বড় টুেমর নাম তা আর বদলােনা যােব না কান
ভােবই, ওটা সংরি ত নাম, কােজই বদলােত হেব কােজর ছেলর নাম। তরাং কােজর ছেলর
নাম দয়া হয় লাল া। তাহেল ালেকর নাম লাল, আর কােজর ছেলর নাম লাল া।
িসিপিপ ভাষায় গঠন কাঠােমা িঠক রাখার জ িকছু িনিদ শ আেছ। আমরা ইত মেধ
এরকম িকছু শ ব বহার কেরিছ। যমন return, int , float। এই শ েলার অথ িসিপিপ
ভাষােত আেগ থেক িনিদ , যমন return মােন যখন িবপাতক (function) শষ হয়, int আর
float হল চলেকর মান কমন পূণক বা পূণ সংখ া না ভ ক বা ভ সংখ া এইরকম। এই িতনিট
ছাড়াও আেরা অেনক েলা এই রকম শ আেছ। এই শ েলা চাইেল আমরা িনেজরা আমােদর
চলক বা বক বা িবপাতেকর নাম িহসােব ব বহার করেত পারেবা না। এই েলা হে সংরি ত
5g
শ (reserved word)। এই শ েলােক অ কথায় চািব শ ও (key word) বলা হয়।
তাহেল তামার মেলখেত তুিম এই প সংরি ত শ বা চািব শ শনা েকর (identifier) নাম
িহসােব ব বহার করেব না। কারণ ও েলা বড় টুম লােলর নােমর মেতা। যিদ একা ই দরকার
হয় তাহেল লাল ক লাল া বানােনার মেতা িকছু যাগ-িবেয়াগ কের িভ শ বািনেয় ব বহার
in
করেব। যমন return না ব বহার কের returnValue ব বহার করেল, এইরকম। নীেচ আমরা
িসিপিপর সংরি ত শ েলার তািলকা িদি ।
am
• ছাঁচ (template) সং া শ :
export, template, typename
৪১
5g
মেলখেত শনা েকর ভুিমকা কী?
৬. সংরি ত ও চািব শ কী? এ েলা কন শনা ক িহসােব ব বহার করা যায় না?
৪২
5g
না, যিদ না পািরপাি কতা পির ার থােক
১১. "char" : অৈবধ শনা ক কারণ নােম " ব বহার করা যায় না
১৫. 9xyz : অৈবধ শনা ক, নােমর েত অ থাকেত পাের না, পের থাকেত পাের
২২. Int : বধ শনা ক, তেব সংরি ত শ int এর সােথ িব াি দখা িদেত পাের
৪৩
২৩. INT : বধ শনা ক, তেব সংরি ত শ int এর সােথ িব াি দখা িদেত পাের
২৮. printf : বধ শনা ক, অথেবাধক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ
৩০. pow : বধ শনা ক, অথেবাধক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ
5g
৩২. numˆ2 : অৈবধ শনা ক, নােম ˆ িচ ব বহার করা যায় না
oriented programming)
• িন দাগ (underscore)
• িট সামলােনা (error handling)
• সাজন (array)
• যুি অণুি য়া (logical operators)
• সংগিঠত (structured)
• িবট িত অণুি য়
al
৪৪
অধ ায় ৫
যাগান ও আেরাপণ
(Input and Assignment)
5g
মেলখেত (program) উপা (data) কাথা থেক আেস? হয় আমরা মেলখেয়র িভতের
সরাসির িলেখ দই, যমনিট আেগর পাঠ েলােত কেরিছ, আর না হয় আমরা উপা ব বহারকারী-
দর কােছ থেক যাগান (input) নই। উপা যাগান িনেয় সিটেক ধারন করার উে ে আমরা
চলেক (variable) আেরাপণ (assign) কির যােত ওই উপা পের কােজ লাগােনা যায়।
in
৫.১ উপা যাগান (Data Input)
am
িসিপিপেত এমন একিট মেলখ (program) িলেখা যিট য কান আয়েতর ফল ও পিরসী-
মা িনণয় করেত পাের। তামার মেলখ তুিম মা একবারই সংকলন (compile) করেত পারেব,
আর েত ক আলাদা আয়েতর জ তুিম মেলখিট বারবার কবল চালােত পারেব, িক ম-
লখেয়র িভতের দঘ ও বদেল িদেয় বারবার সংকলন করেত পারেব না। তারমােন তামােক
দঘ ও যাগান (input) িহসােব তামার মেলখ ব বহারকারীর কােছ থেক িনেত হেব।
al
উ মেলখ লখার আেগ চেলা আমরা িকছু দরকারী আেলাচনা সাির। আমরা যখন কান
গণনা সম ার (computing problem) সমাধান করেত চাই, যমন আেলাচ ে আমরা
আয়েতর দঘ ও জেন তার ফল ও পিরসীমা িনণয় করেত চাই, তখন আমরা মুলত
একিট মেলখ (program) ব বহার করেবা, মােন আমরা মেলখিট চালােবা (run)। এখন
এই মেলখ হয়েতা আমরা িনেজরা তরী করেবা অথবা অ কউ আমােদর তরী কের িদেব।
বশীর ভাগ ে মেলখিট অে র তরী করা দয়া, আমরা কবল ব বহারকারী।
ভেব দেখা মেলখ তরী করা (write) আর চালােনা (run) আসেল েটা িভ ঘটনা। এই
েটা ঘটনা পরপর একসােথ ঘটেব এরকম সবসময় হয় না। বরং বশীর ভাগ সমেয় এই ঘটনা
েটা আসেল িভ িট ােন িভ িট সমেয় িভ ই ব ি র ারা সংঘিটত হয়। তাছাড়া মেলখ
য চালােব স হয়েতা কবল একটা আয়েতর ফল ও পিরসীমা িনণয় করেত চায় না বরং তার
হােত হয়েতা অেনক অেনক আয়ত আেছ আর স সব েলা আয়েতর জ ই ফল ও পিরসীমা
িনণয় করেত চায়। তরাং িতটা আয়েতর জ তার একটা কের আলাদা মেলখ লাগেব যিদ
মেলখেয়র িভতের আয়েতর দঘ ও িদেয় দয়া হয়। অথবা তার এমন একটা মেলখ
লাগেব যটা কান না কান ভােব সব েলা আয়েতর জ ই কাজ করেব, আর সিঠক ভােবই করেব
অথাৎ মেলখিট মুলত ে র (formula) ওপর নজর দেব, উপাে র (data) ওপর নয়।
৪৫
i n t main ( )
{
5g
i n t doirgho ; / / আয়েতর দেঘ র জ চলক
in
c i n >> doirgho ; / / দঘ যাগান িহসােব নওয়া হেব
// ফল ও পিরসীমার সূ
i n t k h e t r o f o l = doirgho ∗ prostho ;
i n t porishima = 2∗ ( doirgho + prostho ) ;
al
// ফল ও পিরসীমা ফলন
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 ;
যাগান-ফলন (input-output)
13
12
k h e t r o f o l holo 156
porishima holo 50
৪৬
উপেরর মেলখেত খয়াল কেরা আমরা দেঘ র জ একিট চলক 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 এর মান ব বহারকারীর কােছ
থেক নয়ার কথা িলেখিছ। উপেরর মেলখেয়র বাঁকী অংশটু তা আেগর পােঠর মেলখ -
লােত যমন দঘ ও ব বহার কের ফল ও পিরসীমার সূ িলখা হেয়েছ আর তারপের
5g
ফলন (output) দখােনা হেয়েছ িঠক তমনই। আমরা স েলা আর আেলাচনা করিছ না।
এবার আমরা আর একটু আেলাচনা কির উপেরর মেলখিট সংকলন (compile) কের চা-
লােল কী ঘটেব তা িনেয়। উপেরর মেলখিট চালােল আমরা দখব পদায় (screen) িকছু আসেছ
না, চটুলটা (cursor) কবল লাফালািফ করেছ। আমরা এই অব ায় দেঘ র মান, ধরা যাক 13
in
চেপ ভুি (enter) চাপেবা। িভতের িভতের cin ওই মান িনেয় doirgho চলেকর মেধ রেখ
িদেব। চটুলটা (cursor) তারপরও লাফালািফ করেব। আমরা তখন 12 িদেয় ভুি (enter) চা-
পেবা, cin ওইটা prostho চলেক রেখ িদেব। তারপর পদায় আমরা ফলন দখেত পােবা। থম
সািরেত থাকেব khetrofol holo 156 আর পেরর সািরেত porishima holo 50।
am
উপের মেলখেত আমরা চাইেল িকছু সংি করণ করেত পাির। যমন দঘ ও ঘাষনা
(declaration) ও যাগান (input) নয়া চার সািরেত না কের আমরা ও েলােক মা ই সািরেত
সারেত পাির। থম সািরেত আমরা চলক েটা ঘাষনা করেবা। আর পেরর সািরেত আমরা চলক
েটার যাগান িনেবা। নীেচর মেলখেত (program) এই েলা দখােনা হেলা।
i n t doirgho , prostho ; / / আয়েতর দেঘ ও ে র জ চলক
al
কউ যিদ চায় তাহেল িক ফলন অংেশও এরকম সংি করণ করেত পাের। যমন ফল
ও পিরসীমা চাইেল এক সািরেতই ফলন িদেত পাের।
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 িদেয় দওয়ার চেয় আমরা হয়েতা ইবাের িদেত চাইেবা।
৪৭
i n t main ( )
am
{
i n t doirgho ; / / আয়েতর দেঘ র জ চলক
cout << " doirgho koto ? " ; / / মান যাচনা করা হে
c i n >> doirgho ; / / দঘ যাগান িহসােব নওয়া হেব
// ফল ও পিরসীমার সূ
i n t k h e t r o f o l = doirgho ∗ prostho ;
i n t porishima = 2∗ ( doirgho + prostho ) ;
৪৮
যাগান-ফলন (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)। আমরা এে ে
জািন য আমােদর মেলখিট থেম দঘ চাে আর সটা দবার পর চাে । এবার ভেব
5g
দেখা আমােদর লখা মেলখ যিদ আমরা ছাড়া অ কউ চালায় (run) তাহেল স কী ভােব
জানেব চটুলিট (cursor) ওই অব ায় কন লাফাে । স িক আসেলই দঘ বা
অেপ া করেছ নািক িভতের িভতের ঘটনা অ িকছু, স হয়েতা অ িকছু করেছ।
তা ওপেরর সম া সমাধােনর জ আমরা যিট করেবা সিট হেলা আমােদর মেলখেত
নয়ার জ
in
cin >> doirgho; লখার আেগ আমরা একটা বাতা দখােবা য আমরা দেঘ র মান চাই।
উপেরর মেলখ খয়াল কেরা cin >> doirgho; লখার আেগ আমরা cout << "doirgho
koto? "; িলেখ আসেল সটাই করেত চাইিছ। এই মেলখ যখন চালােনা হেব তখন থেম পদায়
am
doirgho koto? দখা যােব। আর cout এর শেষ আমরা যেহতু endl অথাৎ end line দই
নাই, চটুলটা (cursor) সেহতু ওই একই সািরেত লাফাইেত থাকেব, লাফাইেত থাকেব মুলত
cin >> doirgho; এর কারেণ doirgho এর মান নয়ার জ । আমরা তখন doirgho এর
মান িদেয় ভুি (enter) চাপেবা। তাহেল "চটুল কন লাফায়?" আমরা এই সম ার সমাধান
কের ফললাম কমন! এই য যাগান (input) নবার আেগ একটা বাতা িদেয় ব বহারকারীেক
জানােনা য আমরা কী যাগান চাই, এই ব াপারিটেক বলা হয় যাগান যাচনা (input prompt)।
al
উপেরর মেলখেত খয়াল কেরা আমরা ে র জে ও একই ভােব যাগান (input) নবার আেগ
"prostho koto? " বাতা িদেয় যাগান যাচনা (input prompt) কেরিছ। তাহেল এখন থেক
তামার মেলখেত যাগান নবার আেগ অব ই যাগান যাচনা করেব, কমন?
উপের মেলখেত আমরা চাইেল িকছু সংি করণ করেত পাির। যমন দঘ ও ঘাষনা
(declaration), যাগান যাচনা (input prompt) করা, ও যাগান (input) নয়া ছয় সািরেত
না কের আমরা ও েলাক মা িতন সািরেত সারেত পাির। থম সািরেত আমরা চলক েটা ঘাষনা
করেবা। আর পেরর সািরেত আমরা যাগান যাচনা করেবা তারপের সািরেত চলক েটার মান
যাগান িনেবা। নীেচ মেলখেত (program) এই েলা দখােনা হেলা।
i n t doirgho , prostho ; / / দেঘ ও ে র জ চলক
cout << " doirgho o prostho koto ? " ; / / একসােথ যাচনা
c i n >> doirgho >> prostho ; / / দঘ ও যাগান
৪৯
পারেবা, অথবা চাইেল 13 িলেখ ভুি চেপ তারপর 12 িলেখ আবার ভুি চাপেত পারেবা। আর
ফলেনর অংশ আেগর মেতাই হেব, কােজই আমরা সটা আর দখাি না।
doirgho o prostho koto ? 13 12
উপের আমরা েটা চলক ঘাষনা (variable declare) করলাম: একটার নাম amar আর
5g
আেরকটার নাম tomar, েটাই int ধরেনর অথাৎ পূণক, একটােত আিদমান (initial value)
িদেয় িদলাম আর একটােত িদলাম না। আমরা যখন চলক ঘাষনা কির তখন আসেল আমরা গণিনর
(computer) রিনেত (memory) িকছু জায়গা দখল কির। ধের িনেত পােরা রিন হল একটা
রা ার পােশ অেনক েলা একই রকম বাড়ী। কান চলক ঘাষনা করার সময় আমরা আসেল ওই
in
বাড়ী েলার একটা দখল কের সই বাড়ীটার নাম িদেয় দই আমােদর চলেকর নােম। তামরা
িন য় দেখেছা অেনেকরই বাড়ীর নাম থােক যমন "শাি নীড়"। আমােদর চলক বাড়ী েলার
নাম amar ও tomar। তা আমরা যখন উপেরর েটা চলক ঘাষনা করলাম তখন রিনেত ওই
রকম েটা জায়গা িনেয় তােদর নাম িদেয় িদলাম amar আর tomar। এখন কথা হে রিণেত
am
(memory) ওই জায়গায় আমরা আসেল রাখেবা কী? উ রটােতা সহজ আমরা রাখেবা চলকিটর
মান। যখন আমরা আিদমান িদেয় িদলাম তখন ওই জায়গােত আমােদর দয়া মানটা থাকেব, আর
যখন আিদমান িদেবা না, তখনও ওই জায়গািটেত আেগ থেক যাই িছল তাই থাকেব।
amar = tomar ;
al
এবার আমরা যিদ উপেরর মেতা কের tomar এর মান amar এ আেরাপ কির তাহেল কী ঘট-
ব? আসেল উপেরর এই িববৃিত (statement) চালােনার পের amar এর আেগর মান মুেছ িগেয়
সটার নতুন মান হেয় যােব tomar এর মােনর সমান অথাৎ amar এর মানও হেব 5। এখােন
একটা পূণ িবষয় বেল রাখেত হেব য এই য tomar থেক amar এ মান আেরাপ করা হেলা
এেত িক tomar এর মােন কান পিরবতন হেব না। অথাৎ tomar এর মান আেগর মেতা 5-ই
থাকেব। আেরাপেণ (assignment) সমান িচে র বােম যা থােক সটােক ল (target) আর
ডােন যটা থােক সটােক উৎস (source) বলা হয়, কারণ উৎস থেক মান িনেয় লে আেরাপ
করা হয়। উপেরর আেরাপেণ amar = িচে র বােম তাই এিট ল আর tomar ডানপােশ তাই
এিট উৎস। আেরাপেণর ফেল লে র মান বদেল িক উৎেসর মান বদেল না, একই থােক।
উপেরর মেলখ (program) আর ফলন (output) ল কেরা। আমরা থেম চলক 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 এ তা কান মান আেরাপ কির নাই। মেলখেত
৫০
পেরর িববৃিতেত (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 এ কান মান আেরাপ করা হয় িন।
int x = 3 ; / / আিদ মান আেরাপ
int y = x + 5 ; / / আিদ মান আেরাপ
cout << " x " << x << " y " << y << endl ; / / মান দখাও
x = y + 3 ∗ 4;
5g
/ / পুনরায় মান আেরাপ
cout << " x " << x << " y " << y << endl ; / / মান দখাও
x 24 y 8
x 20 y 8
x 20 y 40
সবিমিলেয় একটা িবষয় দখা যাে আেরাপেণ = িচে র বােম থাকা ল চলেকর (target
variable) মান কবল পিরবতন হয়, আর = িচে র ডােন থাকা চলক (variable) বা রািশর
al
(expression) এর মান কান পিরবতন হয় না। আেরকিট ব াপার হেলা কান চলেক পের কান
নতুন মান আেরাপ না হওয়া পয আেগরবার য মান আেরাপ করা হেয়িছল সটাই থােক।
উপের আমরা কবল চলক x আর y ঘাষনা কের তােদর আিদমান িহসােব 12 ও 13 িদেয়
িদলাম। এখন আমরা এমন িকছু করেবা যােত x আর y মান অদল-বদল হেয় যায়। থেমই আমরা
একটা চটুল সমাধান কির। তামােদর মেধ যারা ু ধরেনর আর চটপেট তারা সাধারণত এই
৫১
সমাধানিট করেত চাইেব। নীেচর িববৃিত েটা ল কেরা: আমরা ফ x এর মেধ সরাসির 13
আেরাপ কেরিছ আর y এর মেধ 12 আেরাপ কেরিছ। ব স হেয় গল x আর y এর মান অদল-বদল!
আসেল আমরা কী এইেট চেয়িছলাম? এখােন তা চলক েটার মেধ একটা থেক আেরকটােত
মান নয়ার মেতা কান ঘটনা ঘেট িন, কােজই কান অদল বদেলর িকছু ঘেট িন!
x = 13 ; / / x এর মান আেরাপ করা হেলা
y = 12 ; / / y এর মান আেরাপ করা হেলা
5g
তামার কাঁচ আর কাঁসার পয়ালার ফেলর রস অদল-বদল করা যায়, আমরা নীেচ তা দিখ।
৩. কাঁসার পয়ালা যেহতু এখন খািল আর কােঠর পয়লায় আেছ আঙুেরর রস, আমরা তাই
কােঠর পয়ালার আঙুেরর রস কাঁসার পয়ালায় ঢালেবা। ফেল কাঁসার পয়ালায় থাকেলা
আঙুেরর রস আর কােঠর পয়ালা খািল হেয় গেলা।
al
তা উপেরর িতনিট িববৃিত চালােলই আমােদর x আর y চলক েটার মান অদল-বদল হেয়
গেলা। তেব পয়ালা আর ফেলর রেসর অদল বদেলর সােথ চলক আর মােনর অদল-বদেলর িক
িকছুটা তফাৎ আেছ। তফাৎটা হেলা ফেলর রস এক পয়ালা থেক আেরক পয়ালয় ঢালেল যটা
থেক ঢালা হেলা সই পয়ালা খািল হেয় যায়। িক চলেকর ে z = x; করেল চলক x এর
মান চলক z এ আেরাপ হয় িঠকই, িক চলক x িকছুেতই খািল হয় না, বরং তার য মান িছেলা
সটাই থােক। চলেকর মান বদেল যায় কবল যখন এেত নতুন মান আেরাপ করা হয়।
৫২
5g
হে । এক বািট হািলম মােন একটা বািটেত থাকা হািলম। িবষয় েলােক চলক আর তার মােনর
সােথ িমলাও। বািট িঠক যন চলেকর মেতা আর হািলম হল তার মােনর মেতা। আবার "আমার
বািটটা পির ার নয়, তামার বািটটা পির ার।" এই অংেশ বািট মােন আসেল বািট নােমর পা টা,
সই পাে ঢালা হািলম নয় কান ভােবই। তাহেল দখা যাে বািট বলেত কখেনা কখেনা আসেল
in
পা টােক বুঝােনা হয় আর কখেনা কখেনা পা টােত থাকা হািলমেক বুঝােনা হয়। একই ভােব
চলেকর নাম উে খ করেল কখেনা কখেনা চলকিটর মানেক বুঝােনা হয়, কখেনা কখেনা আসেল
চলকিটর জ রিণেত (memory) বরা জায়গাটু বুঝােনা হয়।
am
x = 3; এখােন চলক x বলেত আমরা আসেল চলক x এর জ রিনেত (memory) নয়া জা-
য়গাটু বুিঝ যখােন মান 3 ক রাখা হেব। এখােন কান ভােবই চলক x এ আেগ থেক
িবদ মান মানেক বুঝােনা হে না। খয়াল কেরা এখােন চলক x আেরাপ = িচে র বাম পা-
শ আেছ। যখন চলক x আসেল রিনেত বরা কৃত জায়গােক বুঝায় তখন এটােক আমরা
ফ চলক না বেল আেরা কের বলেবা চলেকর বাম-মান (l-value)। তাহেল মেন
রেখা চলেকর বাম মান িদেয় আমরা বুঝােবা চলেকর জ রিনেত নয়া জায়গাটু ।
al
y = x; এখােন চলক y বলেত আমরা চলক y এর জ রিনেত বরা পাওয়া জায়গাটু েক বুিঝ।
আর চলক y আেরাপ = িচে র বােম আেছ তাই এখােন চলক y এর বাম-মান ব ব ত
হেয়েছ। তেব চলক x বলেত এখােন আমরা কবল তার মানটােক বুিঝ। খয়াল কেরা চলক
x এর মানটাইেতা চলক y এর রিনর জায়গাটােত জমা হেব, চলক x এর জ বরা
জায়গােতা আর িগেয় চলক y এর জায়গায় লখা হেব না। আমরা দখিছ এখােন চলক x
আেরাপ = িচে র ডােন রেয়েছ। যখন চলক x আসেল তার মানটােক বুঝায় তখন আমরা
এটােক বলব চলেকর ডান-মান (r-value)। চলেকর ডান মান িদেয় আমরা তাহেল বুঝােবা
চলেকর য মান সিটেক, রিণেত থাকা জায়গািটেক নয়।
উপেরর আেলাচনা থেক আমরা একটা িবষয়ই পির ার করেত চেয়িছ সটা হেলা, আেরাপ
= িচে র বােম আমরা কবল এমন িকছু িদেত পারেবা যার জ রিনেত জায়গা দখল করা আেছ,
অথাৎ যার বাম-মান (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 এর বাম-মান আেছ।
x = x + 1; / / িচ
5g
= িচে র বােমও রেয়েছ আবার ডােনও রেয়েছ। আমরা সকেল গিণত জািন কম বা বশী। সখােন
সমীকরণ িনেয় আমােদর য ধারনা আেছ সই অ যায়ী তা x কখেনা x + 1 এর সমান হেত পাের
না। তাহেল মেলখেত x = x + 1; এর মেতা অথহীন িবষয় কন থােক?
= গিণেতর সমান িচ নয় , এিট গণনার আেরাপণ।
in
আসেল = িচ িট গিণেত আমরা ব বহার কির েটা সংখ া তুলনা কের যিদ দিখ তারা এেক
অপেরর সমান তাহেল। আমরা তাই ওটােক গিণেত সমান (equal) িচ বেল থািক। িক গণনার
am
আেরাপণ তেব এখােন একই চলক আেরাপ িচে র বােমও আেছ ডােনও আেছ। এইরকম আেরা-
পণ যখােন একই চলক বােমও আেছ ডােনও আেছ সটােক আমরা বলেবা আ শরন আেরাপণ
(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 এর বাম-মােন অথাৎ
রিনেত (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;। এ েলার িতিট ে আেগ ডানপােশর মান িহসাব করা হেব আর তারপর সই
মান বাম পােশ িলেখ দয়া হেব, ফেল চলকিটেত নতুন একট মান থাকেব।
১. সরাসির
5g
মেলখেয়র (program) িভতের উপা িদেয় িদেল সম া কী?
২. উপা (data) কেনা যাগান (input) িনেত হেব? িবধা-অ িবধা কী কী?
৩. যাগান যাচনা (input prompt) কী? যাগান নয়ার আেগ কন যাচনা করা উিচৎ?
in
৪. চলেক (variable) মান আেরাপেণ (assignment) ল ও উৎেস কী ঘেট বণনা কেরা।
am
৬. আেরাপেণ = িচে র বােম কন এমন িকছু দয়া যায় না যার কবল ডান মান আেছ?
১. এমন একিট মেলখ (program) রচনা কেরা যিট একিট পূণক (int) ও একিট ভ ক
(float) যাগান (input) িনেয় স েলা আবার ফলেন (output) দখায়।
২. এমন একিট মেলখ (program) রচনা কেরা যিট িট ভ ক (float) সংখ া যাগান
(input) িনেয় সংখ া িট ও তােদর যাগফল ফলেন (output) দখায়।
৩. এমন একিট মেলখ (program) রচনা কেরা যিট িতনিট পূণক (int) যাগান (input)
িনেয় তােদরেক য েম যাগান নয়া হেয়েছ সই েম আবার উে া েম দখােব। যমন
ভু সংখ া িতনিট যিদ হয় পর পর 2 3 1 তাহল িসধা েম দখােব 2 3 1 আবার তােদর
উ া েম দখােব 1 3 2। খয়াল কেরা আমরা িক মােনর ম বলিছ না।
৫৫
৪. এমন একিট মেলখ (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
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
5g
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
আমরা ধের িনি য তুিম দরকারী িশর নিথ (header) অ ভু করা, নামাধার
(namespace) std ব বহার করা, main িবপাতেকর কংকাল লখা আর স-
টার শেষ return EXIT SUCCESS; িলেখ মান ফরত দয়া ইত মেধ ভােলা
in
কের িশেখ ফেলেছা। তা তুিম যিদ নীেচ লখা মেলখ েলা সংকলন (compile)
কের চালােত (run) চাও, তামােক িক আেগ include, namespace, main,
return এ েলা িলেখ িনেত হেব, তারপর main িবপাতেকর িভতের return এর
am
আেগ তুিম আমােদর নীেচর অংশ েলা িলেখ িনেব। তারপর সংকলন কের মেলখ
চালােব। আমরা এখন থেক মাটামুিট এইভােব মেলখ দখােবা।
১. এমন একিট মেলখ (program) রচনা কেরা যিট একিট পূণক (int) ও একিট ভ ক
(float) যাগান (input) িনেয় স েলা আবার ফলেন (output) দখায়।
al
cout << " puronok holo " << purnok << endl ;
cout << " vognok holo " << vognok << endl ;
২. এমন একিট মেলখ (program) রচনা কেরা যিট িট ভ ক (float) সংখ া যাগান
(input) িনেয় সংখ া িট ও তােদর যাগফল ফলেন (output) দখায়।
৫৬
f l o a t j o g f o l = prothom + d i t i y o ;
৩. এমন একিট মেলখ (program) রচনা কেরা যিট িতনিট পূণক (int) যাগান (input)
5g
িনেয় তােদরেক য েম যাগান নয়া হেয়েছ সই েম আবার উে া েম দখােব। যমন
ভু সংখ া িতনিট যিদ হয় পর পর 2 3 1 তাহল িসধা েম দখােব 2 3 1 আবার তােদর
উ া েম দখােব 1 3 2। খয়াল কেরা আমরা িক মােনর ম বলিছ না।
cout << " s i d h a krome " << prothom << " " ;
cout << d i t i y o << " " << t r i t i y o << 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
৫৭
5g
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 ;
in
cout << " shorbo mot number holo " ;
cout << f o l a f o l << endl ;
am
৫৮
অধ ায় ৬
গািণিতক ি য়াকরণ
(Mathematical Processing)
5g
গািণিতক ি য়াকরেণ রািশেত (expression) গািণিতক অণুি য়া (operator) ও িবপাতক
(function) সমুহ কী ভােব িহসাব করা হয় আমােদর তা জানেত হেব।
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)
+7 = 7 −7 = −7
+a = 5 −a = −5
+b = −9 −b = 9
৫৯
িসিপিপেত িয়ক (binary) অণুি য়ক েলা যাগ +, িবেয়াগ −, ণ ∗, কী ভােব কাজ কের?
cout
5g
যথাযথ মেলখ িলেখ উদাহরণ সহ বুিঝেয় দাও। িয়ক অণুি য়ক (operator) েটা উপাদােনর
(operand) ওপর যু হেয় ফলাফল উৎপ কের।
উপেরর মেলখ (program) খয়াল কেরা। আর তার সােথ নীেচর ফলন (output) িম-
িলেয় নাও। ল কেরা আমরা িতনিট কের যাগ, িবেয়াগ, আর ণ কেরিছ। যাগ, িবেয়াগ, বা
ণ আমরা ভােলাই জািন, নতুন কের শখার িকছু নাই। তেব একিট িবষয় খয়াল করেত হেব।
সিট হেলা উপাে র ধরণ কমন? আর এ কারেণই আমরা িতিট অণুি য়ার (operator) জে
িতনিট কের উদাহরণ িনেয়িছ। িতিট অণুি য়ার উদাহরণ েলার থম সািরেত খয়াল কেরা।
সখােন উপাদান (operand) িহসােব আমরা েটা পূণেকর যাগ, িবেয়াগ বা ণ কেরিছ, যমন
5 + 3, 5 − 3 আর 5 ∗ 3। ফলাফল িহসােব যা পেয়িছ তাও একিট পূণক, যমন 8, 2, আর
15। এবার িতিট অণুি য়ার জ তৃতীয় সািরেত খয়াল কেরা। সখােন উপাদান (operand)
িহসােব আমরা েটা ভ ক যাগ, িবেয়াগ বা ণ কেরিছ, যমন 5.1 + 3.2, 5.1 − 3.2 আর 5.
1 ∗ 3.2। ফলাফল িহসােবও আমরা পেয়িছ একিট ভ ক যমন 8.3, 1.9, আর 16.32। তারপর
৬০
িতিট অণুি য়ার জ ি তীয় সািরেত খয়াল কেরা। উপাদান িহসােব একিট ভ ক ও একিট পূ-
ণক যাগ, িবেয়াগ বা ণ করা হেয়েছ যমন 5.1 + 3, 5.1 − 3, আর 5.1 ∗ 3। আর ফলাফল
এেসেছ একিট ভ ক যমন 8.1, 2.1, আর 15.3, য েলার কানিটই পূণক নয়। উপাদান েটা
একটা ভ ক হওয়ায় ফলাফলও ভ ক হেয় গেছ।
ফলন (output)
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
5g
তাহেল উপেরর আেলাচনা থেক আমরা দখলাম কান অণুি য়ার (operator) যিদ িট
উপাদানই (operand) একরকম হয় তাহেল ফলাফলও সই রকমই হয়। যমন উপাদান েটাই
in
int হেল ফলাফলও int; উপাদান েটাই float হেল ফলাফলও float। আর যিদ েটা উপাদান
রকম হয় যমন একিট পূণক বা int আর একিট ভ ক বা float তাহেল ফলাফল হেব ভ ক বা
float। গিণেত আমরা জািন পূণক সংখ া েলা একই সােথ ভ কও যমন 3 আসেল 3.0, িক
am
একিট ভ ক িক পূণক নাও হেত পাের যমন 5.1 ভ ক িক এেক পূণক িহসােব লখা স ব নয়।
আর এ কারেণ কান অণুি য়া (operator) েয়ােগর পূেব উপাদান (operand) েটা রকম
হেল থেম পূণকিটেক িভতের িভতের ভ েক পা র কের নয়া হয়, আর তারপর যাগ, িবেয়াগ
বা ণ করা হয় েটােক ভ ক িহসােব িনেয়ই। এই য িভতের িভতের পূণকিট ভ েক পা র করা
হয় এটা এক রকেমর উপা কারা র (type casting)। উপা কারা র িনেয় আমরা পের
আেরা িব ািরত জানেবা, আপাতত পূণক থেক ভ েক কারা র মেন রােখা।
al
ভাগফেলর উপা করণ (data type) কমন হেব সই িনয়ম আসেল যাগ, িবেয়াগ, বা
েণর মেতা একই। যিদ েটা উপাদানই (operand) এক রকেমর হয় তাহেল ফলাফলও হেব
৬১
উপেরর ফলন ল কেরা, যিদ ভােগর উপাদান েটার যেকান একিটও ভ ক হয়, যমন
শেষর িতন সাির, তাহেল িক ভাগেশেষর কান ব াপার থােক না, ফেল আমরা সে ে ভাগফল
পাই 2.6। িক ভােগর ে যিদ েটা উপাদানই পূণক হয়, যমন থম সাির তাহেল ভাগিট
িক একটু আলাদা। যমন 13 / 5 করেল আমরা ফলাফল পাই 2 কারণ আমরা জািন এে ে
3 অবিশ থােক। ভােগর ে আেরা একিট
৬২
হেয় যায়। কােজই এমন িকছু আমােদর মেলখেত (program) িলখেল সংকলন (compile)
করার সময় িট (error) আসেব। নীেচর মেলখেয়র শেষর িতনিট সাির দখেত পােরা য েলা
টীকা িহসােব রাখা আেছ। ওই েলা টীকা না কের সামেনর // হলােনা দাগ েটা তুেল িদেল
মেলখেয়র অংশ হেয় যােব, আর তখন সংকলন করেল িট আসেব, কের দখেত পােরা।
একটা িবষয় খয়াল কেরেছা, এখােন আমরা িক টীকার (comment) হলােনা // িচ
েটার একরকেমর অপব বহার কেরিছ। উপেরর মেলখেয়র শষ িতনিট সাির আসেল কান ভা-
বই কৃত টীকা নয়। ও েলােতা বাংলায় বা ইংেরজীেত লখা নয়, ও েলা িসিপিপেত লখা আর
টীকা িচ তুেল িনেলই ও েলা মেলখেয়র অংশ হেয় যােব সহেজই। তবু কন এখােন আমরা
ও েলােক টীকার িভতের রাখলাম? এটা আসেল একটা খুবই উপকারী কৗশল। টীকার িভতের
রাখেল যেহতু সটা মেলখেয়র িঠক অংশ থােক না, সংকলন হয় না, কান িট আসার ব াপার
নাই, আমরা তাই মােঝ মােঝ িকছু িকছু িসিপিপেত লখা অংশও টীকার িভতের রািখ। মেলখ
(program) লখার সময় আমরা নানান িকছু পরী া িনরী া কির, এভােব কির, ওভােব কির।
তখন য অংশ েলা ওই সময় দরকার নাই, চাইেল স েলা তা মুেছ ফলা যায়, িক মুেছ ফল-
লই তা তামােক পের আবার ক কের িলখেত হেত পাের। এমতাব ায় তুিম যিদ ওই অদরকারী
অংশটু েত টীকা িদেয় (commenting) দাও, ব স হেয় গেলা। কান ঝােমলা নাই, পের ওই
13 / 5 = 2
5g
অংশটু আবার দরকার হেলই টীকা তুেল (uncomment) িনেব। কী চমৎকার কৗশল তাই না!
আমরা সবাই এিট হরদম ব বহার কির। এখন থেক এই কৗশল কােজ লাগােব, কমন!
ফলন (output)
13 % 5 = 3
in
13 / −5 = −2 13 % −5 = 3
−13 / 5 = −2 −13 % 5 = −3
−13 / −5 = 2 −13 % −5 = −3
am
এবাের ভাগেশেষর ফলাফেলর িদেক নজর দই। ভাগফল সহ আেলাচনার িবধার জ উপ-
রর মেলখ (program) আর ফলন (output) আমরা ভাগেশেষর সােথ সােথ ভাগফলও দ-
িখেয়িছ। আমরা আেগই আেলাচনা কেরিছ ভাগেশষ করা যায় কবল পূণেকর জ । ভাগ করেল
যা অবেশষ থােক তাই ভাগেশষ। িক পূণক তা ধনা কও (positive) হেত পাের, ঋণা কও
(negative) হেত পাের। আসেল ঋণা ক সংখ ার ভাগেশষ িনেয়ই যেতা জিটলতা সৃি হয়। ঋণা-
al
ক সংখ ার ভাগেশষ িনেয় নানান রকম িনয়ম আেছ, আমরা এখােন আেলাচনা করিছ cpp.sh
এ য িনয়েম ভাগেশষ হয়, সটা িনেয়। তুিম য সংকলক (compiler) িদেয় মেলখ সংকলন
(compile) করেব, জেন িনও সখােন কমন হয়। কােরা কােছ থেক জেন িনেত পােরা। অথবা
িনেজই উপেরর মেলখ (program) এর মেতা কের মেলখ তরী কের চািলেয় দেখ িনেত
পােরা। তমন কিঠন িকছু নয়।
যাইেহাক উপেরর ফলন খয়াল কেরা। সখােন িক কান ভ ক নই, সব েলাই পূণক, তেব
ধনা ক ও ঋণা ক আেছ। খয়াল কেরা ভাগফল ও ভাগেশষ উভয় ে মানটা িঠক পাওয়া যায়
িচ িবেবচনা না করেল। যমন চারটা ব াপােরর সব েলােতই িচ বাদ িদেল ভাজক (divisor)
আর ভাজ (dividend) হয় কবল 5 আর 13। 13 ক 5 িদেয় ভাগ করেল ভাগফল হয় 2 আর
ভাগেশষ হয় 3। এই পয সব েলা ব াপােরই িঠক আেছ, িক গালমাল বাঁেধ কবল িচ িনেয়,
ভাগফল বা ভাগেশষ কখন ধনা ক + হেব আর কখন ঋণা ক − হেব। ভাগফেলর ে খয়াল
কেরা যখনই সংখ া েটার িচ একই রকম তখন ভাগফল ধনা ক যমন থম ও চতুথ সাির,
আর যখনই তারা িবপরীত িচে র তখনই ভাগফল ঋণা ক যমন ি তীয় ও তৃতীয় সাির। ভাগ-
শেষর ে িচ িনভর কের ভাজ (dividend) এর ওপর, ভাজেকর ওপর নয়। ভাজ যখনই
ধনা ক যমন 13, ভাগেশষ তখন ধনা ক + হেয়েছ। আর ভাজ যখন ঋণা ক যমন −13 তখন
৬৩
ভাগেশষ ঋণা ক − হেয়েছ। ভাগেশেষর িচ 5 বা −5 এর িচে র ওপর িনভর কের নাই। একটা
িবষয় আেগই বেলিছ, ভাগফল ও ভাগেশেষর ে ভাজক যিদ হয় তাহেল তামার মেলখ
চালােনার সময় divide by zero বা িদেয় ভাগ নােম িটবাতা দিখেয় ব হেয় যােব। এই
রকম িট সংকলেনর (compile) সময় ধরা পেড় না, কবল চালােনার (run) সময় ধরা পেড়,
তাই এেদরেক বলা হয় চলা-কালীন িট (run-time error)।
উপেরর উদাহরণ েলােত আমরা যিদও কবল সংখ াই সরাসির ব বহার কেরিছ, তুিম িক
চাইেল কান চলক (variable) বা বক (constant) ব বহার করেত পারেত। তুিম চাইেল কান
রািশ (expression) বা িবপাতক (function) ও ব বহার করেত পারেত। আসেল ডান-মান
(r-value) আেছ এরকম য কান িকছুই এখােন ব বহার করা যেত পাের। এই আেলাচনা েলা
এিকক অণুি য়ার সময়ই আেলাচনা করা হেয়েছ, তবুও আবার বিল। িবপাতক (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) হল সংখ া, বক, চলক, অণুি য়ক, িবপাতক িমেল যখন একটা িকছু তরী করা
i n t a = 4 , b = −3 ;
i n t const c = 5 ;
5g
হয় যার মান আেছ সিট, যমন 3 + x ∗ abs(y) একিট রািশ যখােন x আর y হল চলক।
in
a + 3, c / b, b ∗ c; / / চলক , বক , সংখ া
a = c % abs ( b ) ; / / abs ( b ) হল িবপাতক
a = a − ( b ∗ c) ; / / b ∗ c হল রািশ
am
আেরাপণ একটা অণুি য়া এই কথার মােন কী? আমরা আেরাপণ িনয়া কী কী করেত পারেবা?
আেরাপণ (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
৬৪
তরাং কউ যমন অেনক েলা যাগ পরপর িলখেত পাের x + y + z + 3, িঠক তমিন
চাইেলই কউ অেনক েলা আেরাপণও পরপর িলখেত পাের যমন z = y = x = w। তেব কান
ব নী নাই ধের িনেল, যােগর ে সাধারণত সবেচেয় বােমর যাগিট থেক হেয় যাগ েলা
5g
পরপর বাম থেক ডােন এেক এেক হেত থােক। আর আেরাপেণর (assignment) ে সবেচেয়
ডােনর আেরাপণ হেত কের আেরাপণ েলা ডান থেক বােম এেক এেক হেত থােক।
int x = 1 , y = 2 ; z = 3 ; / / আিদ মান আেরাপণ
in
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
am
উপেরর উদাহরেণর শষ িতনিট সাির খয়াল কেরা। চলক ঘাষনার পেরর সািরর িববৃিতেত
(statement) x + (y = 3) ; থেম ব নীর িভতের y এর মান 3 আেরাপণ (assign) হেব
আর আেরাপেণর (assignment) ফলাফলও হেব 3, যা x এর মান 1 সােথ যাগ হেয় যাগফল
হেব 4। এই 4 হেলা পুেরা রািশিটর মান। এরপেরর িববৃিতেত y = x + (z = 4) ; থেম ব নীর
িভতের z এর মান আেরাপ হেব 4 আর ফলাফল ও 4, আর তারপর 4 ও x এর মান 1 এর সােথ
al
যাগ হেয় হেব 5 যা িগেয় y চলেক আেরািপত হেব। এবাের আিস শষ িববৃিতেত z = 5 + (y
= z −3); থেম ব নীর িভতের z − 3 িহসাব হেব, z এর মান িঠক আেগর সািরেত হেয়েছ 4
সােথ 3 িবেয়াগ হেল হয় 1 যা y এ আেরািপত হেব আর আেরাপেণর ফলাফলও (result) হেব 1।
এরপর সই 1 আর 5 যাগ হেয় ফল হেব 6 যা z এর িভতের আেরািপত হেব।
৬৫
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)
5g
ব বহার করিছ, ণী (class) ব বহার করিছ, এ েলা কী এখনই তা জানেত চেয়া না, আমরা পের
িব ািরত কের িশখেবা ও েলা। খািল খয়াল কেরা থম সািরেত কী ভােব ল া একটা িজিনস
আেরাপ = িচে র বাম ও ডান উভয় পােশই আেছ। আর খয়াল কেরা শেষর সািরর িববৃিতিট:
যৗিগক আেরাপণ ব বহার কের ওই একই িবষয় কত চমৎকার কের সংে েপ লখা গেছ।
t h i s−>amarSajonCholok [ suchok ] =
in
t h i s−>amarSajonCholok [ suchok ] + amarbriddhi ;
তাহেল দখেল তা একই িজিনস আেরাপ = িচে র বাম পােশ একবার আবার পর েণই
আেরাপ = িচে র ডানপােশও একবার িলখেত হেব, এিট বশ িবরি কর, আর দখেতও কত
িবরি কর লােগ। তারেচেয় যৗিগক আেরাপণ সংি আর বুঝাটাও সহজ। ফলাফেলর িহসােব
উভয় ে িক আমরা একই ফলাফল পােবা। তেব মেন রেখা মেলখ (program) চালােত
সময় কম লাগেব নািক বশী লাগেব সইে ে িক যৗিগক আেরাপেণর কান ভুিমকা নই।
al
িসিপিপেত লখা মেলখেত (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) খয়াল কেরা। েটা চলক (variable) নয়া হেয়েছ x আর y।
চলক x এর আিদমান (initial value) দয়া হেয়েছ 6, িক y এর আিদ মান দয়া হয় িন। এরপর
৬৬
ি তীয় আর তৃতীয় িববৃিতেত রেয়েছ ++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) জাতীয় িকছু তা
এমিনেতই ব বহার করেত পারেব না, কারণ বেকর তা মান বদলােনা যায় না।
5g
যাইেহাক ++ আেগই দই আর পেরই দই ++x বা x++ আসেল x+=1; অথাৎ x = x+1;
এর সমতুল এবং সংি প বলেত পােরা। ল কেরা বৃি েত ++ য 1 বৃি ঘেট সই ব াপারটা
িক উ থােক। ফেল ++ কবল একটা উপাদােনর (operand) ওপর যু হয় বেল মেন হয়।
আর তাই ++ ক একিট এিকক (unary) অণুি য়ক (operator) বলা হয়। কথা হে এই এিকক
অণুি য়ার ফলাফলটা কী? ফলাফল তা আমরা আেগই দেখিছ, মান এক বেড় যাওয়া। সটা
in
িঠক, িক তাছাড়াও বৃি অণুি য়ার (increment operator) ফলাফেল িকছু পূণ িবষয়
আেছ য কারেণ পূব-বৃি (pre-increment) আর উ র-বৃি (post-increment) আলাদা।
পূব-বৃি (pre-increment) আর উ র বৃি (post-increment) য আলাদা তা পির ার
am
হেব উপেরর মেলখেয়র (program) শেষর সাির েটা দখেল। যখন y = ++x; করা হেয়েছ
তখন x এর মান আেগ বেড় হেয়েছ 9 আর তারপর xএর সই বেড় যাওয়া মান 9ই y এ আেরািপত
(assign) হেয়েছ। িক যখন y = x++; তখন িক খয়াল কেরা আেগ x এর মান y এ আেরািপত
হেয়েছ ফেল y হেয়েছ 9 আর তারপর x এর মান বেড়েছ 1 ফেল হেয়েছ 10। আ া y = ++x;
আর y = x++; এ েটােক যিদ আমরা বৃি ++ ব বহার না কের িলখতাম তাহেল কমন হেতা?
আমােদর অব ই েটা কের িববৃিত িলখেত হেতা। নীেচ ল কেরা y = ++x; এ আেগ মান
al
বাড়ােনা পের আেরাপণ, আর y = x++; এ আেগ আেরাপণ পের মান বাড়ােনা। আশা করা যায়
পূব-বৃি (pre-) ও উ র-বৃি র (post-increment) তফাৎ পির ার হেয়েছ।
x = x + 1; // y= ++x ; এ x এর মান বৃি আেগ ঘটেব
y = x; // y= ++x ; এ y ত x এর মান আেরাপন পের
৬৭
া কেরা, সংকলন (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 এ আেরািপত হয়। িক পূব-বৃি র ে মান
বৃি আেগ ঘেট আর ফলাফলটাও সই বৃি া মানই, কােজই ণ ায়ী ভােব আেগর মান রেখ
5g
দওয়ার কান বাঝা (overhead) এখােন নই। মাটকথা পূব-বৃি সরাসির বাম-মােনর ওপরই
কাজ কের অথাৎ ++x এ সরাসির চলকটার ওপরই কাজ কের, আর কান ণ ায়ী িকছু দরকার
হয় না। এ কারেণ পূব-বৃি ++x; উ র-বৃি x++; এর চেয় বশী তগিতর হেয় থােক। কােজই
তুিম পারেতা পে ++x ব বহার করেব, x++ ব বহার করেব না।
in
মেলখেত বৃি ব বহাের এবাের একটা পরামশ দই। পূব-বৃি ও উ র-বৃি িনেয় অেনক
রকম খলা যায়, যমন তুিম চাইেল x = (++x)++ + ++x; এর মেতা অেনক েলা + িচ িদেয়
িকছু একটা িলখেত পােরা। এই রকম জিটল িববৃিত েলা হয়েতা সংকলন (compile) হেব। এর
am
ফেল ফলাফলও িকছু একটা আসেব, যটা চাইেল বুঝা স ব, িক বুঝেত গেল মাথা বশ গরম
হেয় যায়। আমার পরামশ হেলা এইরকম জিটল িববৃিত পারেতা পে লখেব না। সবসময় এমন
ভােব সংেকত (code) িলখেব যােত পের তুিম বা অ কউ তমন কান ক ছাড়াই তামার
সংেকত দেখ বুঝেত পাের। মেন রাখেব সংেকত যত জিটল, তার ভুল বর করাও তত কিঠন।
উপেরর পুেরা আেলাচনােত আমরা কবল বৃি (increment) িনেয় আেলাচনা কেরিছ। আস-
ল াস (decrement) −− িনেয় আেলাচনাটা একদম একই রকম। আমরা তাই পুনরাবৃি কর-
al
বা না। কবল জেন রােখা ােসর (decrement) ফেল মান 1 কেম যায়। তাই −−x বা x−−
হেলা x −= 1 বা x = x − 1 এর সমতুল। আমরা −−x ক পূব াস (pre-decrement) আর
x−− ক উ র- াস (post-decrement) বিল। পূব- ােসর তুলনায় উ র- ােসর অ গণ তা
(precedence) বশী। গিতর িদক িবেবচনায় পূব- াস, উ র- ােসর চেয় য়তর।
৬৮
ফলাফল বাদ িগেয় ফলাফল হেয় যােব নথক (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) িনেয় আেলাচনা করেবা তখনও তািলকা পৃ-
৬.৮ অ গণ তার
5g
থকী (list separator) িহসােব িবিতর (comma) ব বহার দখেত পােবা।
ম (Precedence Order)
in
অ গণ তার ম (precedence order) কী? িসিপিপেত এ পয পিরিচত হওয়া অণুি য়া -
লার (operator) অ গণ তার ম (precedence order) আেলাচনা কেরা।
ধেরা তুিম 3 + 4∗5 + 6 এর মান িহসাব করেব। আেগকার িদেন এক রকম স া কলিন
am
(calculator) পাওয়া যেতা যিট করেতা কী, বাম থেক িহসাব করেতা এেকর পর এক। ফেল
সটা থম 3 ও 4 যাগ কের 7 বর করেতা, তারপর তার সােথ 5 ণ কের বর করেতা 35 আর
শেষ তার সােথ 6 যাগ কের ফল িদেতা 41। তুিম চাইেল উে া আেরক রকেমর অব া ভাবেত
পােরা, যখােন ডান িদক থেক এেকর পর এক িহসাব হেব। তরাং 5 ও 6 যাগ কের 11, তার-
সােথ 4 ণ কের 44, শেষ 3 যাগ কের 47। িক ছাটেবলা থেক সরেলর িনয়ম আমরা িশেখ
এেসিছ: ণ আেগ হেব যাগ পের হেব। আমরা তাই িহসাব কির 4 ও 5 এর ণ আেগ ফল 20
al
তার সােথ বােমর যাগ আেগ, তাই 3 আেগ যাগ হেলা 23, শেষ ডােনর যাগ তাই 6 যাগ কের
হেলা 29, যটােক আমরা সিঠক িহসাব বেল ধের নই। এই য বাম থেক ডােন বা ডান থেক
বােম িহসাব না কের ণ যােগর আেগ করেত হেব, আবার েটা যাগ পর পর থাকেল বােমর যাগ
আেগ করেত হেব। এই িনয়ম েলােক অ গণ তার ম(precedence order) বলা হয়।
সরল অংেক অ গণ তার ম িছল: ব ণী, এর, ভাগ, ণ, যাগ, িবেয়াগ। সেবেচেয় িভ-
তেরর ব নী সেবেচেয় আেগ। ভাগ আর ণ আসেল বাম থেক যটা আেগ আেস। একই ভােব
যাগ ও িবেয়াগ বাম থেক যটা আেগ আেস। িসিপিপেত আমরা এ পয অেনক েলা অণুি য়ার
(Operator) সােথ পিরিচত হেয়িছ। এ েলা হেলা এিকক + − ++ −− িয়ক + − ∗ / % =
+= −= ∗= /− %= , তা এেদর মেধ এিকক অণুি য়ার ম সবার আেগ, তারপর িয়ক অণু-
ি য়া েলার ম। আমরা আপাতত কবল এ েলার অ গণ তার ম (precedence order)
িবেবচনা করেবা। অ া অণুি য়া ও তােদর ম স েক আমরা পের জানেবা।
৬৯
5g
অেনক েলা থাকেল বাম থেক ডােন এেক এেক িহসাব হেত থােক। যমন 10 − 2 + 5
এ বাম থেক ডােন থেম িবেয়াগফল, তারপর যাগফল িহসাব হেব।
৬. , িবিত (comma) একিট িয়ক অণুি য়া (binary operator) যিটর ফলাফল কবল
ডানপােশর উপাদান (operand)। বাম পােশর উপাদানিট িহসাব হয়, িক তার ফলাফল
হেব নথক (void)। এই অণুি য়া একািধক পরপর থাকেল, বাম থেক ডােন এেক এেক
িহসাব হেত থােক। যমন x + 2, y ∗ 3, z / 4 থেম যাগ হেব, তারপর ণ আর
শেষ ভাগ, ফলাফল হেব একদম ডােনর ভাগফলিটই।
al
েটা একই বা একই েমর অণুি য়া পরপর থাকেল কান পােশরিট আেগ হেব এইিট িন-
ধারণ কের দয়ােক বলা হয় সহেযাজ তা (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) তরী করা যায়, য েলা ম
৭০
িবেবচনায় িনেয় বুঝেত গেল মাথা গরম হেয় যেত পাের, ভুল হেল বর করা কিঠন হেয় যােব।
কােজই আমার পরামশ হে তামার িববৃিত বা রািশ অব ই সহেজ পাঠেযাগ হেত হেব, আর
এ কােজ যত দরকার ব নী ব বহার করেব। যমন ধেরা x += y − z এর চেয় x += (y − z)
বুঝা আমােদর জ বশী সহজ, কারণ এেত একদম পির ার িবেয়াগ আেগ হেব।
#i n c l u d e <cmath> //
5g
িফিরি ৬.৫: িট িব র মেধ র দূর (Distance Between Two Points)
/ / নীেচর িশর নিথ main িবপাতেকর বাইের অ ভু
বগমূল িনণেয়র জ
কেরা
s q r t িবপাতক লাগেব
in
/ / নীেচর অংশ main িবপাতেকর িভতের return এর আেগ িলেখা
f l o a t x1 , y1 , x2 , y2 ; / / ানা েটা ( x1 , y1 ) , ( x2 , y2 )
am
উপেরর মেলখ খয়াল কেরা। খুবই সাদামাটা। থেম main িবপাতেকর বাইের cmath
িশর নিথ অ ভু করেত হেব বেল দখােনা হেয়েছ। তারপর main িবপাতেকর িভতের িব
েটার ভুজ ও কািট ধারণ করার জ চারিট float ধরেনর ভ ক চলক (variable) নয়া হেয়-
ছ। এরপর যাগান যাচনা (input prompt) িদেয় িব েটার ানা যাগান (input) নয়া
হেয়েছ। তারপর ভুজ েয়র দূর abs(x1 − x2) বর কের xd নােমর আেরকিট চলেক নয়া
হেয়েছ, একই ভােব কািট েয়র দূর abs(y1 − y2) বর কের yd নােমর আেরকিট চলেক ন-
য়া হেয়েছ। মেন কের দেখা abs িবপাতকিট (function) কান সংখ ার পরম মান (absolute
value) অথাৎ িচ বাদ িদেয় কবল মানটু ফরত দয়। যাইেহাক তারপর xd এর বগ ও yd
এর বেগর যাগফল িনেয় তার বগমূল বর করা হেয়েছ sqrt িবপাতক ব বহার কের আর রাখা
৭১
হেয়েছ dd চলেক। সবেশেষ দূর dd চলক থেক ফলন (output) দয়া হেয়েছ। এখােন এক-
টা কথা বেল রািখ sqrt(xd ∗ xd + yd ∗ yd) এর বদেল cmath িশর নিথ (header file)
থেকই hypot নােমর িবপাতকও (function) আমরা ব বহার করেত পারতাম। সে ে আমা-
দর িলখেত হেতা hypot(xd, yd) আর সিট িঠক একই কাজ করেতা। িবপাতক hypot আসেল
সমেকাণী ি ভুেজর অিতভুেজর দঘ িনণয় কের, িক তার সূ আর েটা িব র দূর িনণেয়র
সূে র মেধ িমল রেয়েছ।
5g
গািণিতক িবপাতক (Mathematical Functions)
• abs(x): কান সংখ া x এর পরম মান। abs(3) হেব 3 এবং abs(−3) হেব 3।
in
ি েকাণিমিতক িবপাতক (Trigonometric Functions)
• cos(x): ল া পাত (cosine) যখােন x হল রিডয়ােন।
am
৭২
5g
• 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
in
√
• hypot(x,y): x2 + y 2 অথাৎ x ও y ক সমেকানী ি ভুেজর ল (perpendicular)
ও ভুিম (base) ধরেল অিতভুেজর (hypotenuse) দঘ
am
৭৩
৩. উপা কারা র (type casting) কী? িয়ক অণুি য়ায় (binary operation) কী
ভােব উপা কারা র (type casting) হয়?
৫. মেলখেত অদরকারী সংেকত (code) মুেছ না িদেয় কীভােব আমরা টীকা (comment)
5g
ব বহার কের স েলােক অকাযকর কের রাখেত পাির, ব াখ া কেরা।
৭. আেরাপণ অণুি য়ার (assignment operator) ফলাফল িঠক কী? যৗিগক আেরাপণ
in
(compound assignment) বলেত কী বুেঝা? কেয়কিট উদাহরণ দাও।
৭৪
২. নীেচর মেতা ফলন (output) দয় এরকম একিট মেলখ (program) তরী কেরা।
ফেলর িটেত তুিম িয়ক অণুি য়া েলা (binary operator) ব বহার করেব।
x=10 y=5
rashi fol
x=y+3 x= 8
x=y−2 x= 3
x=y∗5
x=x / y
x=x%y
x= 25
x= 2
x= 0 5g
in
৩. এমন একিট মেলখ (program) রচনা কেরা যিট একিট িতন অে র সংখ ােক উে া
কের যমন 326 হেয় যায় 623। এ কােজ তুিম ভাগফল, ভাগেশষ, ণ, যাগ ও িবেয়াগ
ব বহার করেব। 326 থেক অ েলা আলাদা কের তারপর 623 তরী করেব।
am
৫. এমন একিট মেলখ (program) রচনা কেরা যিট সেক ড যাগান িনেয় তােক ঘ টা-
িমিনট- সেকে ড পা র কের। এ কােজ তুিম ভাগফল ও ভাগেশষ ব বহার করেব।
al
৭. এমন একিট মেলখ (program) রচনা কেরা যিট েটা সময় ঘ টা, িমিনট, সেকে ড
িনেয় সময় িটেক যাগ কের। এ কােজ তুিম যাগ, ভাগফল ও ভাগেশষ ব বহার করেব।
৭৫
ক) পেড়া (read) x ও y
খ) গেণা (compute) p = x ∗ y
গ) গেণা (compute) s = x + y
ঘ) গেণা (compute) t = s2 + p ∗ (s − x) ∗ (p + y)
ঙ) িলেখা (write) t
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
5g
পদ কেতা? n পেদর সমি ই বা কত? এর জ িসিপিপেত একটা মেলখ (program)
তরী কেরা যিট a, d, ও n যাগান (input) িনেব, আর n-তম পদ ও n পেদর সমি
ফলন (output) িদেব। এর জ তুিম সূ ব বহার করেব n-তম পদ = a + (n − 1) ∗ d
আর n পেদর সমি = n ∗ (2a + (n − 1) ∗ d)/2। দ িবিভ ধারার জে এই সূ
a আর d বসােল আমরা ওই ধারা েলার জ সরাসির সূ পেত পাির।
in
• 1 + 2 + 3 + . . . ধারােত a = 1, d = 1। তরাং n-তম পদ = a + n − 1, n
পেদর সমি = n(n + 1)/2। যমন n = 10 হেল 10-তম পদ 10, সমি 55।
am
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 ;
৭৬
যাগান-ফলন (input-output)
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=x%y
x= 2
x= 0
5g
িফিরি ৬.৭: িয়ক অণুি য়ার ফলাফল (Binary Operation Results)
in
i n t x = 10 , y = 5 ;
cout << " x= " << x << " y= " << y << endl ;
am
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
৭৭
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 ) ) ; / / ফল
5g
cout << " k h e t r o f o l = " << k << endl ;
যাগান-ফলন (input-output)
/ / ফলন
in
bahu a b c : 100 60 90
k h e t r o f o l = 2666
am
৫. এমন একিট মেলখ (program) রচনা কেরা যিট সেক ড যাগান িনেয় তােক ঘ টা-
িমিনট- সেকে ড পা র কের। এ কােজ তুিম ভাগফল ও ভাগেশষ ব বহার করেব।
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
৭৮
কমেন পােবা। আমরা pai একটা বক ঘাষণা করেত পাির যার মান িদেয় িদব 3.1416
অথবা আেরা িনখুত মান পেত চাইেল acos(−1) থেকও মান বর কের িনেত পাির।
িফিরি ৬.১০: ি ভুেজর বা হেত কাণ (Triangle's Angles From Sides)
/ / main িবপাতেকর বাইের
#i n c l u d e <cmath>
/ / িড ীেত পা র 5g
= acos ( ( b∗b + c ∗ c − a∗a ) / ( 2∗b∗ c ) ) ;
যাগান-ফলন (input-output)
bahu a b c : 145 60 90
kon A B C= 149 . 703 12 . 049 18 . 2475
al
৭. এমন একিট মেলখ (program) রচনা কেরা যিট েটা সময় ঘ টা, িমিনট, সেকে ড
িনেয় সময় িটেক যাগ কের। এ কােজ তুিম যাগ, ভাগফল ও ভাগেশষ ব বহার করেব।
িফিরি ৬.১১: িট সমেয়র যাগ (Adding Two Times)
i n t ghonta1 , minit1 , sekend1 ; / / ১ম সময় যাগান িনেব
i n t ghonta2 , minit2 , sekend2 ; / / ২য় সময় যাগান িনেব
৭৯
৮. এমন একিট মেলখ রচনা কেরা যিট েটা সমীকরণ 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 ;
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 ) ;
5g
cout << " x = " << x << " " ;
cout << " y = " << y << endl ;
যাগান-ফলন (input-output)
in
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
am
float u , a , t ;
float v = u + a ∗ t ;
f l o a t s = u∗ t + a ∗ t ∗ t / 2 ;
যাগান-ফলন (input-output)
adibeg toron somoy : 2 1 4
beg : 6 durotto : 16
৮০
ক) পেড়া (read) x ও y
খ) গেণা (compute) p = x ∗ y
গ) গেণা (compute) s = x + y
ঘ) গেণা (compute) t = s2 + p ∗ (s − x) ∗ (p + y)
ঙ) িলেখা (write) t
5g
x) ∗ (p + y ) ;
/ / ধাপ ঙ
// ধাপ ঘ
in
৬.১২ গণনা পিরভাষা (Computing Terminologies)
am
৮১
5g
in
am
al
অধ ায় ৭
শতািল পিরগণনা
(Conditional Programming)
5g
আমােদর জীবনটা নাক বরাবর সাজা একটা পথ নয়, িতটা মােড় মােড় এটা শাখায় শাখায়
িবভ । তামােক একটা শাখায় যেত হেব, একসােথ এেকর বশী শাখায় যেত পারেব না। কা-
নটায় যােব তার জ ভাবেত হেব, তামার অব া ও ল িবেবচনা করেত হেব। শতািল পিরগণনায়
(conditional programming) আমরা শাখায় শাখায় ভাবা িশখেবা, আমােদর সামেনর গমন
in
পথ বাছাই করা িশখেবা, আমরা আমােদর জীবেনর িস া নয়া িশখেবা।
am
৮৩
উপেরর অংশটু কান মেলখেত (program) িনেয় সংকলন (compile) কের চািল-
য় (run) দেখা। যিদ 50 এর কম কান ন র যাগান (input) দাও যমন 45 তাহেল ফলন
(output) দখােব fell । আর যিদ 50 ও 79 এর মােঝর কান ন র যাগান (input) দাও য-
মন 65 তাহেল ফলন (output) দখােব pash। আর যিদ 80 বা বশী কান মান যাগান (input)
দাও যমন 85 তাহেল ই সাির ফলন (output) দখােব: থম সািরেত pash আর পেরর সা-
িরেত taroka। নীেচর যাগান-ফলেন (input-output) এই মেলখিট (program) িতন বার
চািলেয় বােম, মােঝ, ও ডােন এই িতনিট ব াপার দখােনা হেয়েছ।
যাগান-ফলন (input-output)
nombor? 45 nombor? 65 nombor? 85
fell pash pash
taroka
5g
এর পের খয়াল কেরা আমরা িলেখিছ if (nombor >= 50) অথাৎ যিদ ন র 50 বা তার বশী
হয় তাহেল কী করেত হেব সটা িক তার পরপরই বেলিছ cout << "pash" << endl; অথাৎ
পাশ ফলন (output) দখােত হেব। তারপেরর সাির খয়াল কেরা else মােন হেলা না হেল অথাৎ
ন র যিদ 50 বা তার বশী না হয় মােন 50 এর কম হয়, আমােদর ফল ফলেন দখােত হেব যা
বলা হেয়েছ িঠক পেরর সািরেত cout << "fell" << endl;। য কান ন র হয় 50 এর কম
in
হেব না হয় বশী বা সমান হেব, এই েটা ছাড়া আর িভ িকছু হেত পাের না, এমনিক ওই েটা
একসােথও সিত হেত পাের না। কােজই আমােদর মেলখেত (program) হয় cout << "
pash" << endl; না হয় cout << "fell" << endl; িনবািহত (execute) হেব, েটাই
am
একসােথ হেত পারেব না। িঠক যন েটা শাখা তরী হেয় গেলা।
আমরা উপেরর মেলখ হেত দখেত পলাম া ন েরর ওপর িভি কের ফলাফল পাশ
না ফল দখােত হেব অথাৎ ফলন (output) দখােনার ওই েটা িববৃিতর মেধ কানটা িনবা-
িহত হেব সটা আমরা ন র 50 এর কম না বশী বা সমান এই শতিট পরী া কের বাছাই কর-
ত পারলাম। অেনক পিরগণনা ভাষায় (programming language) (nombor > 50) এর
পের cout << "pash" << endl; এর আেগ then িলখেত হয়, িক c++ এ এটা িলখেত
al
হয় না। এখােন বরং শত nombor >= 50 এটােক েটা ( ) ব নী িদেয় ব ী করেত হয়। ব নী
দয়ার ব াপারটা মেন রাখেব, কারণ থম থম তুিম এটা িনেয় ায়ই ভুল কের সংকলন িট
(compilation error) পােব, আর তামােক তখন এিট িঠক করেত হেব। ব নী েটা এখােন
আেশ পােশর শতেক পৃথক কের, যা সফল সংকলেনর (compile) জে জ রী।
উপেরর মেলখেত (program) খয়াল কেরা পাশ ফল দখােনার if এর পের আেরা
একটা if আেছ যিট িদেয় আমরা া ন রিট তারকা (star) িকনা তা দখাই। এই if এ শত
হে (nombor >= 80) অথাৎ ন র যিদ 80 বা এর বশী হয় তাহেল ফলন (output) দখােব
taroka। িক আর একটু সতক ভােব খয়াল কেরা এই শত িমথ া হেল বা পূরণ না হেল কী দখােব
সটা িক নাই। সাজা কথায় এই if এর সােথ কান else ব বহার করা হয় িন। মােন ন র যিদ
80 এর কম হয় তাহেল ফ িকছুই দখােনার দরকার নাই। তাহেল আমরা জানলাম if এর শত
পূরণ হেল আমােদর কী করেত হেব সটা িলখেত হেব, িক শত পূরণ না হেল আমরা দরকার মেতা
কী করেত হেব সটা িলখেবা, অথবা দরকার না হেল িকছুই িলখেবা না।
এবার নীেচ মেলখিট খয়াল কেরা। এখােন আমরা উপেরর পাশ- ফল দখােনা অংশিটই
আবার দিখেয়িছ, তেব একটু িভ ভােব। িভ তাটা হেলা উপের যমন else এর পের সরাসির
cout << "fell" << endl; িলেখিছলাম, এখােন তা না কের else এর পের if (nombor
৮৪
< 50) িলেখিছ। তামােদর কােছ মেন হেত পাের, এটা তা র, বুঝেত িবধা কারণ িঠক যন
মা েষর ভাষায় আমরা য ভােব বিল যমন যিদ ন র 50 বা বশী হয় ফলন দখাও পাশ নাহেল
যিদ ন র 50 এর কম হয় ফলন দখাও ফল িঠক তার মেতা। কথা সত আমােদর বুঝা িবধা হয়
এ ভােব। িক আমরা এভােব িলখেবা না, কারণ else এর পের ওই if (nombor < 50) িলখা
আসেল অদরকারী আর স কারেণ তামার মেলখ (program) খােমাকা থ (slow) হেয়
যােব। ওই if (nombor < 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 ; // ফল ফলন
অব
5g
তুিম যিদ একা ই মা েষর বুঝার িবধােথ ওই if (nombor < 50) টা িলখেত চাও, সটা
টীকার (comment) িভতের িলখেত পােরা। নীেচ যমন িলেখ দখালাম। এেত তামার মেল-
খও (program) ধীর গিতর হেলা না, আবার তামার পে মেলখ পড়েতও সহজ হেয় গেলা।
আমরা এ রকমই ায়ই কের থািক। তেব অেনক ে else এর পের ওইরকম একটা if দওয়া
াবীও হেয় যায়, এটা আমরা পেরর একটা পােঠই িব ািরত দখেবা।
in
i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
e l s e / / i f ( nombor < 50) // না হেল
am
এই আেলাচনার শষ কির আেরকটা ব াপার িদেয়, সটা হেলা ছাড়ন দয়া (indentation)।
ছাড়ন িনেয় আেগ একবার আমরা আেলাচনা কেরিছলাম। খয়াল কেরা আমরা if (nombor
>=50) এর পের এই শত সত হেল য cout << "pash" << endl; টা িনবাহ (execute)
করেত হেব সটা পেরর সািরেত একটু িভতের থেক িলখেত কেরিছ। এটা করেল গণিনর
al
(computer) জ িক কান লাভ বা িত নই, িক আমরা সহেজ চােখ দেখই কমন বুঝেত
পাির য ওই cout এর সািরিট আসেল তার আেগর সািরর if এর সােথর শত সত হওয়ার ওপের
িনভরশীল। তারপর দেখা পেরর সািরেত থাকা else আবার একটু িভতর থেক না হেয় if
বরাবরই হেয়েছ। এটা িদেয় আমরা বুঝােত চাই এই else টা আসেল ওই if এর শতটা িমথ া
হেল েযাজ হেব। ল া মেলখেত যখন অেনক if আর অেনক else থাকেব তখন কান else
কান if এর সােথ তা িমলােনা (match) আমােদর পে চােখ দেখ কিঠন হেয় যেত পাের।
ওই িমলােনার িবধােথ if আর তার সােথর else এক বরাবর িলখা হয়। সবেশেষ খয়াল কেরা
else এর পেরর সািরর cout আবার একটু িভতর থেক লখা, কারণ এটা িনবাহ হেব িকনা তা
িনভর কের else এর ওপের। একটু িভতর থেক লখা কের সইটাই বুঝােনা হয়।
৮৫
cout << " x y x>=y x>y x==y x ! =y x<y x<=y " << endl ;
উপেরর মেলখেত (program) থেম আমরা েটা অসমান সংখ ার তুলনা কেরিছ যখা-
ন আেগরিট পেরিট থেক ছাট। তারপের আমরা েটা সমান সংখ ার তুলনা কেরিছ। সবেশেষ
in
আবােরা েটা অসমান সংখ ার তুলনা কেরিছ িক এখােন আেগরিট বড়, পেররিট ছাট। উ -
মেলখেয়র ি েত ফলন (output) কী হেব তা নীেচ দখােনা হেয়েছ।
ফলন (output)
am
৮৬
চাইেল একটা ভ ক ও একটা পূণকও ওই অণুি য়া েলােত এক সােথ ব বহার করা যায়, আর স-
ে পূণকিট (int) থেম ভ েক (float) কারা িরত (type cast) হেয় যােব, তারপর তুল-
নািট হেব েটা ভ ক (float) এর মেধ । ফলাফল অব ই হেব একিট বুলক (bool) অথাৎ 0 বা
1। অ য়ী অণুি য়া েলা (relational operators) বুলক (bool) এর ওপরও কাজ কের। স-
ে false আর true ক ফ 0 আর 1 ধের পূণক িহসােব িবেবচনা করেল তুলনার য ফলাফল
আসার কথা তাই আসেব। উপেরর মেলখেত তুিম 3 ও 4 এর বদেল নানা রকম বুলক (bool)
বা পূণক (int) বা ভ ক (float) মান েটা উপাদানই (operand) একরকম বা েটা ইরকম
কের বিসেয় ফলাফল েলা পযেব ণ করেত পােরা।
5g
ারা িবভাজ হয় তাহেল এিট অিধবষ, যমন ১৬০০ ও ২০০০। তা নাহেল অথাৎ বছরিট যিদ ৪০০
িদেয় িবভাজ না হয় িক এিট যিদ ১০০ িদেয় িবভাজ হয় তাহেল এিট অিধবষ নয়, যমন ১৮০০
ও ১৯০০। তাও নাহেল অথাৎ বছরিট ১০০ ারাও িবভাজ নয় িক যিদ ৪ ারা িবভাজ তাহেল
এিট অিধবষ, যমন ২০১২ বা ২০১৬। তাও নাহেল অথাৎ বছরিট যিদ ৪ ারা িবভাজ না হয়
in
তাহেল এিট অিধবষ নয় অথাৎ সাধারণ বষ যমন ২০১৪ বা ২০১৫। এই কথা েলােক সংে েপ
িলখেল দাঁড়ায় "যিদ ৪০০ ারা িবভাজ হয় তাহেল অিধবষ, নাহেল যিদ ১০০ ারা িবভাজ হয়
তাহেল অিধবষ নয়, নাহেল যিদ ৪ ারা িবভাজ হয় তাহেল অিধবষ, নাহেল অিধবষ নয়।"
am
এবার আমােদর মেলখেয়র (program) িদেক তাকাই। উপের সংে েপ িঠক য ভােব
অিধবষ িনণয় করার িনয়ম বণনা কেরিছ, আমােদর মেলখেত আমরা যন তাই িলেখিছ। িম-
িলেয় নাও। পািটগিণতীয় অণুি য়া েলার (arithmetical operators) পাঠ থেক মেন কেরা
দেখা % অণুি য়া আমােদর ভাগেশষ ফলাফল দয়। তা ভাগেশষ যিদ হয় তাহেল আমরা
িবভাজ তা বুঝেত পারেবা, আর ভাগেশষ না হেল অিবভাজ তা। আমরা থেম ৪০০ িদেয়
৮৭
িবভাজ তা পরী া কেরিছ, না হেল তারপর ১০০ িদেয় িবভাজ তা, তাও নাহেল তারপর ৪ িদেয়
িবভাজ তা পরী া কেরিছ। কমন ব একই রকম কের মেলখিট লখা গেছ!
খয়াল কেরা িবভাজ হওয়া bosor %400 == 0 আর অিবভাজ হওয়া bosor %400 !=
0 এই েটােতা িবপরীত শত। মেলখেত (program) থম শত ব বহার করেল ওই শত সত
(অথবা িমথ া) হেল যা করেত হেব, একই কাজ ি তীয় শত ব বহার করেল সই শত িমথ া (অথবা
সত ) হেল করেত হেব। হেলা পর র িবপরীত এই েটার মেধ কান শতটা ব বহার করা
িবধাজনক। তাছাড়া 400 িদেয় িবভাজ তাই বা আেগ কন করেবা, 4 বা 100 িদেয় িবভাজ তাও
তা আেগ করেত পাির? এসেবর উ র হল ব িত ম ও বশী ব িত ম েলা তাহেলেত রােখা,
আর বাঁদবাকী কম ব িত ম েলা সব রােখা নাহেলেত, তােত িচ া করা সহজ হেয় যায়, মেলখ
(program) তরীও সহজ হয়। যমন ৪০০ িদেয় িবভাজ হেল অিধবষ, এটা অেনক বশী ব -
িত ম, তুলনামুলক অ সংখ ক বছর ৪০০ িদেয় িবভাজ হেব। ১০০ িদেয় িবভাজ হওয়া আর
একটু কম ব িত ম মােন তুলনামুলক ভােব অেনক বছরই ১০০ িদেয় িবভাজ । ৪ িদেয় িবভাজ
হওয়া আেরা কম ব িত ম মােন তুলনামুলক ভােব অেনক বশী সংখ ক বছর ৪ িদেয় িবভাজ ।
আর ৪ িদেয় িবভাজ না হওয়া মাটামুিট সাধারণ ঘটনা ধরা যায়, বাদবাঁকী সব বছরই ৪ িদেয়
অিবভাজ । খয়াল কেরা মেলখ (program) সভােবই ব িত ম মাথায় রেখই লখা হেয়েছ।
5g
সব চেয় বশী ব িত মী ব াপার সবেচেয় আেগ, সবেচেয় কম ব িত ম সবেচেয় পের।
আমােদর মেলখেত ছাড়ন (indentation) দয়ার ব াপারটা একটু খয়াল কেরা। যিদও
আমরা জািন ছাড়ন দয়া না দওয়া অথবা ফাঁকা িদেয় িদেয় লখা বা না লখােত মেলখেয়র
(program) ফলাফেল কান পিরবতন হয় না। আমরা কবল মা েষর বাঝার িবধােথ ও েলা
in
কির। তারপরও খয়াল কেরা আমােদর বুঝার িবধােথ আমরা থেমর if , তারপেরর else if
েলা, সবেশেষর else আর তােদর শত সত হেল যা করেত হেব সব িমিলেয় কী র একটা ধাঁচ
(pattern) তরী কেরিছ। এই ধাঁচিট একিট মইেয়র মেতা কারণ আমােদর থম if িদেয়
কের শত পরী া করেত করেত নীেচর িদেক নামেত হেব। আর য কান একিট শত পূরণ হেলই
am
তার জ য কাজিট করেত হেব পােশর িদেক িগেয় সিট করেলই পুেরা ধাঁচিটর কাজই আসেল
শষ হেয় যােব। মােন একটা শত সত হেল নীেচর িদেকর আেরা কান শত আর পরী া করা হেব
না, পুেরা ধাঁেচর কাজ শষ হেয় যােব। আর িঠক এর পের য িববৃিত (statement) িনবািহত
(execute) হেব সিট হেলা এই পুেরা ধাঁেচর বাইের থাকা কান িববৃিত। যমন উপেরর মেলখ-
ত ল কেরা cout << "kee chomotkar!" << endl; হেলা পুেরা ধাঁেচর বাইের, তরাং
al
৮৮
5g
i f ( bosor % 100 == 0 ) / / ১০০ িদেয় িবভাজ
cout << " odhiborsho noy " << endl ;
e l s e i f ( bosor % 4 == 0 ) / / ৪ িদেয় িবভাজ
else
cout << " odhiborsho hoy " << endl ;
/ / i f ( bosor % 4 ! = 0 ) ৪ িদেয় িবভাজ নয়
in
cout << " odhiborsho noy " << endl ;
else / / i f ( bosor % 400 == 0 ) ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
am
তুিম এবার িজে স করেত পােরা, আ া আিম িক একই ভােব ১০০ বা ৪ িদেয় িবভাজ হওয়ার
if েলােকও ১০০ বা ৪ িদেয় অিবভাজ তার if িদেয় িলখেত পারতাম? াঁ অব ই। নীেচর
মেলখ (program) খয়াল কেরা। আমরা িতিট if এর শতই বদেল এখন অিবভাজ তার
শত িদেয় িদেয়িছ। যিদ-নাহেলর মইেত আমরা if এর সােথ থাকা শত িমথ া হেল তার else
এর পরপরই একটা if দখেত পতাম। এখােন দেখা উে াটা, if এর শত সত হেল বরং তার
al
পরপরই আেরকটা 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 ;
৮৯
বাইেরর else বাইেরর if এর সােথ। টীকার (comment) অংশ েলা দেখ িমিলেয় নাও। ম-
লখ (program) িলখেত ছাড়ন (indentation) দয়া য কতটা পূণ সটা এখান থেক
তামার বশ বুঝেত পারার কথা। ছাড়ন না থাকেল মেলখ বুঝা আমােদর জ রহ হেব।
উপেরর আেলাচনায় একটা িজিনস আমরা দেখিছ: যিদ-নাহেল মই (if-else ladder) আর
অ াি যিদ-নাহেল (nested if-else) খািনকটা পর েরর িবপরীত। তুিম িক চাইেল এ েটার
িম ণ ঘটােত পােরা মােন পুেরাটাই মই না কের বা পুেরাটাই অ াি না কের ইরকমটাই ব বহার
করেল! যমন ধেরা আমরা যিদ থেম ১০০ িদেয় িবভাজ তা পরী া কির। তাহেল শত সত হেলই
আমরা অিধবষ বলেত পাির না। আমােদর দখেত হেব ৪০০ িদেয় িবভাজ িকনা। আর ১০০ িদেয়
িবভাজ না হেল আমােদর দখেত হেব ৪ িদেয় িবভাজ িকনা। তা সই অ সাের নীেচর মেলখ
(program) খয়াল কেরা এখােন অ াি যিদ-নাহেলও (nested if-else) আেছ আবার যিদ-
নাহেল মইও (if-else ladder) আেছ। ছাড়ন (indentation) দেখ িচনেত পারেছা? তুিম িক
আেরা নানান ভােব অিধবষ (leap year) িনণয় িনেয় আর যিদ-নাহেল িনেয় খলেত পােরা। কান
শত আেগ, কানটা পের, কানটা মােঝ, কানটােক অ াি করেব, কানটােক মইেয় িদেব, চ া
কের দখেব, মজাও পােব, িবষয় েলা িশখেবও!
else
5g
i f ( bosor % 100 == 0 ) / / ১০০ িদেয় িবভাজ
i f ( bosor % 400 == 0 ) / / ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
/ / ৪০০ িদেয় অিবভাজ
cout << " odhiborsho noy " << endl ;
in
e l s e i f ( bosor % 4 == 0 ) / / ৪ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
else // ৪ িদেয় অিবভাজ
am
দয়। ঢাকার অ ল েলার িমক ন র ১০০ পয , তার মেধ ১৩ িদেয় িবভাজ ন র েলা হেলা
সংরি ত অ ল যমন ১৩, ২৬, ৩৯, ৫২, ৬৫, ৭৮, ৯১। ঢাকার িভতর থেক ডােক িচিঠ পাঠােনার
খরচ সারােদেশর য কান জায়গায় হেল ৪ টাকা। িক গ ব িঠকানা ঢাকার িভতেরই হেল খরচ
২টাকা, আর ঢাকার িভতেরই িক সংরি ত অ েল হেল খরচ ৩ টাকা। তুিম বশীর ভাগ সময়
ঢাকার িভতেরই কাথাও না কাথাও িচিঠ পাঠাও, তেব মােঝ মােঝ অ ও পাঠাও। তা তামােক
একিট মেলখ (program) িলখেত হেব যিট তামার িচিঠর গ ব কত ন র অ েল যাগান
(input) িনেয় তামােক িচিঠ পাঠােনার খরচ ফলেন (output) দখােব। তামার মেলখেত
(program) তুিম অব ই যিদ নাহেল (if-else) ব বহার করেব িক তােত যন কান ভােবই
ঝুল নাহেল (dangling else) িদেয় ভুল না কের বেসা, সটা খয়াল রাখেব।
এই মেলখ (program) লখা তা খুব সহজ। যিদ-নাহেল মই (if-else ladder) ব বহার
কের তুিম সহেজই িলেখ ফলেত পােরা। থেম পরী া করেব অ ল ১০০ এর চেয় বড় িকনা।
১০০ এর বড় হেল খরচ ৪ টাকা, কারণ অ লিট ঢাকার বাইের। আর নাহেল মােন অ লিট ঢাকার
িভতের হেল এবার পরী া কের দখেব ১৩ িদেয় িবভাজ িকনা। ১৩ িদেয় িবভাজ হওয়া মােন
সংরি ত অ ল তরাং খরচ ৩ টাকা, আর ১৩ িদেয় িবভাজ না হেল মােন অসংরি ত এলাকা
হেল খরচ ২ টাকা। নীেচর মেলখেয়র (program) সােথ িমিলেয় দেখা।
৯০
i n t onchol ;
এই মেলখিট আেরা নানান ভােবই লখা স ব তুিম স েলা িনেজ িনেজ চ া করেব। তেব
আমরা তা কবল এিট সমাধানই িশখিছ না, আমরা িশখেবা ঝুল নাহেল (dangling else)
5g
ধাঁচিট কমন সিট। তা আমােদর সম ার িববরেণ খয়াল কেরা একটা কথা আেছ তুিম বশীর
ভাগ িচিঠই পাঠাও ঢাকায়। আর সখােন অসংরি ত এলাকার সংখ ায় বশী। এ থেক আমরা ধের
িনেত পাির য খরচ বশীর ভাগ সময়ই ২ টাকা। কােজই আমরা khoroch চলকিটর মান েতই
২টাকা আিদ আেরাপণ (initial assignment) কের ফলেত পাির। তারপর শত পরী া কের
যিদ দিখ ঢাকার িভতের আর সংরি ত তাহেল খরচ কের িদেবা ৩ টাকা আর ঢাকার বাইের হেল
in
কের দেবা ৪ টাকা। নীেচর মেলখিট দেখা। আমরা স রকমিট করার চ া কেরিছ।
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত
am
উপেরর অংশটু ব বহার কের কান মেলখ (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 িমলােনা দরকার সখান থেক উপ-
রর িদেক যেত থাকেল থম য if পাওয়া যােব যার সােথ কান ইত মেধ else দওয়া হয়
নাই, সই if -ই হেলা আমােদর ওই else এর সােথর if । ছাড়ন কবল আমােদর চােখর দখার
৯১
জ , গণিনর (computer) কােছ এর কান অথ নই। তাহেল সিঠকভােব ছাড়ন িদেয় িলখেল
আমােদর উপেরর মেলখ আসেল নীেচর মেতা হেব। তরাং বুঝেতই পারেছা উ াপা া ছাড়ন
(indentation) দেখ তুিম ভাবেব তামার মেলখ এরকম কাজ করেব, িক আসেল সটা কাজ
করেব িভ রকম। আর ভুলটা কাথায় তা বর করেত তুিম গলদঘম হেয় যােব!
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত
এরকেমর সম া যখােন else কার সােথ তা বুঝেত আমােদর ঝােমলা লােগ, সই সম ােক
বলা হয় ঝুল নাহেল (dangling else)। উপেরর সিঠক ছাড়ন (indentation) িদেয় আমরা
বুঝেত পারলাম সম া কাথায় িক সমাধান িক আমরা এখেনা জািননা, else িক আসেলই
5g
আমরা বাইেরর if এর onchol <= 100 িমথ া হেল কী হেব তার জ িলখেত চাই। উপায় কী?
উপায় খুবই সহজ। িভতেরর if এর জ একটা else লািগেয় দাও, আর সই else এর জ
তা আমােদর িকছু করার নাই। কারণ ওই else এর জ খরচ ২টাকা সটা তা আমরা আেগই
আিদমান আেরাপেণর সময় িদেয় এেসিছ। িকছু করার নাই বুঝােত আমরা সাধারণত িববৃিত
in
(empty statement) ব বহার কির। আর কান িকছু ছাড়া কবল িদিত (semicolon) ; িদেয়
আমরা িববৃিত বুঝাই। এবার তাহেল পির ার হেয় গেলা কান else কান if এর জে ।
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত
am
যৗিগক িববৃিত (compound statement) বলেত কী বুেঝা? যৗিগক িববৃিত ও যিদ-নাহেল (if-
else) ব বহার কের একিট মেলখ (program) িলেখা যিট থেম িট সংখ া যাগান (input)
িনেব। তারপর থম সংখ ািট 0 হেল পেরর সংখ ািটেক ব াসাধ ধের ফল ও পিরিধ ফলন
(output) িদেব। আর থম সংখ ািট 1 হেল ি তীয় সংখ ািটেক বেগর এক বা র দঘ ধের বগিটর
ফল ও পিরসীমা ফলন (output) িদেব। থম সংখ ািট 0 বা 1 ছাড়া অ িকছু হেল দখােব
"osomorthito akriti" অথাৎ এর জ আমােদর মেলখ কাজ করেব না।
f l o a t 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 ;
}
else
cout << " porishima holo : " ;
cout << 4 ∗ nombor2 ;
cout << endl ; 5g
in
cout << " osomorthito a k r i t i " << endl ;
এই মেলখিট লখা খুবই সহজ। কবল একটাই ঝােমলা আেছ সটা হল যিদ-নাহেলেত (if-
else) শত সত হাক বা িমথ া হাক আমােদর একটা িববৃিতর (statement) বদেল এক
িববৃিত িনবাহ (execute) করেত হেব। এর আেগর সব উদাহরেণ আমরা দেখিছ যিদ-নাহেল (if-
else) শত সত বা িমথ া হেল কবল একটা মা িববৃিত (statement) িনবাহ করেত। তা ঝােম-
লাটার সমাধানও আসেল সহজ। এক িববৃিতেক { } বাঁকা ব নীর (curly brackets) িভতের
al
ঢুিকেয় িদেলই হেলা। এর আেগ আমরা জেনিছলাম েটা বাঁকা ব নীর (curly brackets) { }
িদেয় আমরা একটা মহ া (block) তরী কির। তা বাঁকা ব নীর িভতের থাকা এক িববৃিতেক
আমরা বিল যৗিগক িববৃিত (compound statement)।
যৗিগক িববৃিত (compound statement) হেলই য তার িভতের একািধক িববৃিত থাকেত
হেব এমন কথা নই। মহ া তরী কের কবল একটা িববৃিতও তার িভতের িলখেত পােরা।
i f ( nombor % 2 == 0 )
{ cout << nombor << " holo j o r " << endl ; }
else
{ cout << nombor << " holo be jo r " << endl ; }
মহ া (block) তরীর ফেল অেনকসময় ঝুল নাহেলর (dangling else) ঝােমলা সহেজ
এড়ােনা স ব হয়। আেগর পােঠর িচিঠ পাঠােনার খরচ িনণেয়র সম ািট িবেবচনা কেরা। স-
খােন else িট কান if এর তা িনেয় ঝােমলা তরী হেয়িছল আর আমরা িববৃিত (empty
statement) িদেয় সটা সমাধান কেরিছলাম। িববৃিত হল ফ ; িদিত (semicolon)
৯৩
তার আেগ িকছু নই। নীেচর মেলখেত (program) আমরা ওই িভতেরর 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) পরপর { }। সে ে এটাও একর-
কেমর
5g
িববৃিত (empty statement) তরী হেব। কােজই িববৃিত তরীর েটা উপায়
আমরা িশখলাম একটা হেলা কবলই ; িদিত (semicolon) দয়া আেরকিট হেলা { } েটা বাঁ-
কা ব নীর (curly brackets) িভতের িকছু না লখা। থমিটর ব বহার আেগ দেখিছ আর নীেচ
ি তীয়িট ব বহার কের ঝুল নাহেলর (dangling else) আেরকিট সমাধান দয়া হেলা।
in
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত
khoroch = 3 ;
else // অসংরি ত
{} // িববৃিত
else / / ঢাকার বাইের
khoroch = 4 ;
al
তাহেল যখােনই তুিম একটা িববৃিত (statement) িদেত পােরা, সখােনই তুিম আসেল চা-
ইেল একটা িববৃিতর বদেল একটা যৗিগক িববৃিতও (compound statement) িদেত পােরা,
আবার একটা িববৃিতও (empty statement) িদেত পােরা। এখন থেক আমরা যখন িব-
বৃিত বলেবা তখন তুিম সটা মােন কবল একটা িববৃিত বুঝেব না, বরং দরকার মেতা সটা য
যৗিগক িববৃিতও হেত পাের বা িববৃিতও হেত পাের, তা বুেঝ িনেব কমন!
৯৪
5g
cout << " d i t i y o somadhan x2 = " << x2 << endl ;
ি ঘাত সমীকরণ ax2 + bx + c =√0 এর সহগ ও বেকর মান না জেনও আমরা সমাধােনর
সূ বর করেত পাির x = (−b ± b2 − 4ac)/(2a)। এই সূে র বগমূল বর করার জ
in
আমােদর cmath িশর নিথ (header file) থেক sqrt িবপাতক ব বহার করেত হেব। বাদ বাঁকী
অংশটু সহজ, উপেরর মেলখেত (program) দখােনা হেলা। থেম সমীকরণটা দখােনা
হেয়েছ। খয়াল কেরা xˆ2 িদেয় আমরা িক x এর বগ বুিঝেয়িছ। সহগ ও বক েলার মান
am
যাগান (input) নয়ার পের আমরা b∗b − 4∗a∗c িনণয় কের চলক d ত িনেয়িছ কারণ এিট
ইিট সমাধােনর জ ইবার ব বহার করেত হেব। যাইেহাক ওপেরর অংশটু ব বহার কের
লখা মেলখ (program) কাজ করেব যিদ সমীকরণটা সহজ সাজা হয়, তােত কান ঝােমলা
না থােক! কী রকেমর ঝােমলা থাকেত পাের, িকছু অ মান করেত পােরা্?
আসেল মেলখ (program) তরীর সময় আমােদর ধের িনেত হয় য ব বহারকারী সিঠক
যাগান (input) যমন িদেত পাের তমিন যা ই া তা বিঠক যাগানও িদেত পাের। এইটা স ভুল
al
কের করেত পাের, না জেন করেত পাের, ই া কেরও করেত পাের। তামার কাজ ন কের দয়ার
আেরা নানািবধ উে ও থাকেত পাের। তেব আমরা আপাতত ধের িনই ব বহারকারী ঝােমলা যা
করার তা কবল ওই সহগ ও বেকর মান যাগান (input) দওয়ার মাধ েমই করেব। আর ওই
ঝােমলা েলা করেল যা হেব তা হেলা উপেরর মেলখ আমােদর িনয় েণর বাইের িনবাহকালীন
(execution-time) িট দিখেয় ব হেয় (abort) যেত পাের। এরকম একটা িট হেলা
িদেয় ভাগ (divide by zero), আর একটা িট হেত পাের ঋণা ক সংখ ার বগমূল বর
করা! এই েটা িটই ি ঘাত সমীকরণ সমাধােনর ে ঘটেত পাের।
এই সব ে আমােদর আেগ থেক বুঝেত পারেত হেব য ওই রকম িটপূণ ঘটনা ঘটেব কী
না, যিদ ওইরকম িট সিত ই ঘেট সটা আমােদর ব বহারকারীেক জানােত হেব। আমােদর তর-
ফ জানােনাটা াভািবক। িক আমােদর অজাে যিদ িট ঘেট মেলখ (program) ব হেয়
যায় তাহেল সটা কানভােবই হণেযাগ নয়। সটা একটা বল পিরগণনার (programming)
উদাহরণ। আর আমরা িটটা ঘটবার আেগই ধরেত পারেল সটা ব বহারকারীেক জািনেয় চাই-
ল আমােদর মেলখেক (program) তারপেরও িনবাহ করা চািলেয় যেত িদেত পারেবা। তা
আমরা নীেচ ি ঘাত সমীকরণ সমাধােনর পুেরা মেলখিট (program) িলখেবা আর তােত সব
রকম িট ধের সটা ব বহার কারীেক জানােনার চ া করেবা। আর যখন িট হে তখন আমরা
৯৫
i n t main ( )
{
float a , b , c ; // সহগ রাখার জ চলক।
/ / a বা b যিদ
i f ( a == 0 )
5g
cout << " a b c er man koto ? " ; / /
//
হয় তখন কী হেব? c
// a
যাগান যাচনা
যাগান নওয়া
হেল সম া নই !
হেল সমীকরণ ি ঘাত নয় , একঘাত !
in
{
i f ( b == 0 ) / / b হেল কান বধ সমীকরণই নয় !
{
am
cout << " ekghat somikoron dhora holo . " << endl ;
cout << "somadhan holo x = " << −c / b << endl ;
ret ur n EXIT SUCCESS ; / / মেলখ তবুও সফল ধরা যায়
}
৯৬
}
ret ur n EXIT SUCCESS ; //
5gমেলখ সমাধান
যাগান (input) নবার পর থেম যিট আমােদর িবেবচনা করেত হেব তা হেলা সমীকরণিট
in
আসেল ি ঘাত সমীকরণ িকনা? যিদ a হয়, তাহেল সমীকরেণ কান x2 থােক না, এিট হেয়
যায় bx + c = 0 যিট একিট একঘাত সমীকরণ। এমন অব ায় আমরা আেরা পরী া কের দখব
bও িকনা। যিদ b হয় তাহেল থােক কবল c = 0, যখােন কান চলক (variable)
am
নই। কােজই আমােদর িট বাতা দিখেয় 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 !
al
যিদ 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 5g
সবেশেষর য অব া সিট হেলা িন ায়ক ঋণা কও নয়, ও নয়, তাহেল সিট ধনা ক
in
(positive)। আর এিটই হেলা সই অব া আমরা যিট ধের িনেয় একদম েত একটা ছাট
মেলখ (program) দিখেয়িছলাম। কােজই আমরা সই কাজটু কের েটা সমাধান আমা-
দর জানা সূ া যায়ী িনণয় কের ফলন দিখেয় return EXIT SUCCESS; কের মেলখ শষ
am
৯৮
যিদ সংখ ািট ৭ বা ১৩ য কান একিট বা উভয়িট ারা িবভাজ হয় তাহেল ফলন িদেব "ভাগ
সংখ া"। একিট সংখ া একই সােথ উপেরর এক বা একািধক ভােগ পড়েতই পাের।
5g
cout << " souvaggo sonkhya " << endl ;
উপেরর মেলখেত (program) && হেলা "এবং" আর | | হেলা "অথবা"। তুিম চাইেল
িসিপিপেত && এর বদেল and আর | | এর বদেল or িলখেত পােরা। আর বাংলায় কখেনা কখেনা
আমরা "এবং" এর বদেল "ও" বা "আর" িলখেবা, আর "অথবা" এর বদেল িলখেবা "বা"। যাই
হাক মেন রােখা && এর ফলাফল সত হয় যখন এর পােশর উপাদানই (operand) সত হয়,
আর যেকান একটা িমথ া হেলই ফলাফল িমথ া। অ িদেক | | এর ফলাফল িমথ া হয় যখন এর
পােশর উপাদানই (operand) িমথ া, আর য কান একিট সত হেলই ফলাফল সত । তা
al
উপেরর মেলখ বুঝার চ া কেরা। খুব কিঠন িকছু নয়। সম ািট িঠক যমন কের বাংলায় বণনা
করা হেয়েছ, মেলখেতও যন িঠক স রকম কেরই লখা হেয়েছ।
এবার ওই মেলখেক আমরা িকছু উ য়েনর চ া কির। একটা িবষয় খয়াল কেরা িবভাজ
হওয়া বা িবভাজ না হওয়া আমরা বারবার িহসাব কেরিছ। এইটা তা হওয়া উিচৎ নয়। তাছাড়া
ভাগেশষ বর করা অ অেনক অণুি য়া (operator) তুলনায় মাটামুিট সময় সােপ কাজ।
আমােদর তাই একবার ভাগেশষ িহসাব কের সটাই বারবার ব বহার করা উিচৎ। তা সই অ যায়ী
আমরা মেলখেত িকছু পিরবতন করেত পাির। মুলত ভাগেশেষর জ আমােদর েটা পূণক
(integer) চলক িনেত হেব int vagshesh7 = sonkhya % 7; আর int vagshesh13
= sonkhya % 13; আর তারপর িতিট sonkhya % 7 এর বদেল vagshesh7 এবং িতিট
sonkhya % 13 এর বদেল vagshesh13 িলখেত হেব। খুবই সহজ পিরবতন।
িক আমরা আসেল এই পিরবতেনর কথা বলিছ না। আমরা ভাগেশষ েলা পূণক (integer)
চলেক না রেখ বরং সংখ ািট ৭ বা ১৩ ারা িবভাজ িকনা তার সত তা বুলক (boolean) চলেক
রাখেত চাই। এে ে আমরা 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 ;
5g
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 )
in
cout << " durvaggo sonkhya " << endl ;
i f ( bivajyo7 | | bivajyo13 )
am
উপেরর মেলখেত (program) খয়াল কেরা bivajyo7 (বা একই ভােব bivajyo13)
এর মান সত নািক িমথ া আমরা িক bivajyo7 == true অথবা bivajyo7 == 1 িলেখ কির
নাই, যিদও তা করেত পারতাম। আমরা বরং ফ চলকটা ব বহার কেরিছ কারণ চলকটার মানই
তা সরাসির সত বা িমথ া। আবার আলাদা কের == অণুি য়া (operator) িদেয় সত বা িম-
al
থ া পরী া করার দরকার নই। তেব খয়াল কেরা যখন িবভাজ নয় পরী া করেত হেব তখন
আমরা !bivajyo7 (বা একই ভােব !bivajyo13) িলেখ অথাৎ চলেকর নােমর সামেন ! লািগেয়
িদেয়িছ। এখােন ! হেলা নয় বা না অণুি য়া। তুিম চাইেল ! এর বদেল িসিপিপেত not িলখেত
পারেত। নয় অণুি য়া সত েক উপাদান (operand) িহসােব িনেয় িমথ া ফলাফল দয় আর িম-
থ ােক উপাদান িহসােব িনেয় সত ফলাফল দয়। আর স কারেণ bivajyo7 == false না িলেখ
আমরা !bivajyo7 িলখেলই আমােদর কাজ হেয় যায়।
একিট সংখ া জাড় না িবেজাড় তা িনণেয়র মেলখ (program) রচনা কেরা। তামার মেলখ-
ত তুিম কান বুলক চলক (boolean variable) বা অ য়ী অণুি য়া (relational operator)
ব বহার করেত পারেব না। তামােক পূণক মানেকই বুলক িহসােব ব বহার করেত হেব।
i n t sonkhya = 41 ; / / তুিম চাইেল যাগান িনেত পােরা।
১০০
i f ( sonkhya % 2 ! = 0 )
cout << " b e j o r " << endl ;
else
cout << " j o r " << endl ;
এই মেলখিট (program) তুিম চাইেল উপেরর মেতা কের িলখেত পােরা। কান সংখ া
২ িদেয় ভাগ িদেল যিদ ভাগেশষ না হয় তাহেল সংখ ািট িবেজাড়, আর ভাগেশষ হেল
সংখ ািট জাড়। কােজই মেলখিট সহেজই িলেখ ফলা যায়। িক এেত অসমান িনণেয়র জ
একিট অণুি য়া != ব বহার করেত হে , যিট চাইেল আমরা ব বহার না কেরও কাজ চালােত
পাির। এর কারণ হেলা য কান সময় েক আমরা িমথ া ধের িনেত পাির আর য কান অ -
মানেক, সটা ধনা ক হাক বা ঋণা ক হাক, আমরা সটােক সত ধের িনেত পাির। তােত
আমােদর মানিট আালাদা কির িকনা তা আর পরী া করার দরকার পেড় না। কােজই নীেচর
মেলখেয়র (program) মেতা কের != বাদ িদেয় ফ if (sonkhya % 2) লখা মােনই
হেলা if (sonkhya % 2 != 0) লখা।
i n t sonkhya = 41 ; / / তুিম চাইেল যাগান িনেত পােরা।
i f ( sonkhya % 2 ) / / ভাগেশষ অ
cout << " b e j o r " << endl ;
else / / ভাগেশষ
5g হেল
হেল
in
cout << " j o r " << endl ;
কের দেখা আমরা সংখ ািটেকই সরাসির শত িহসােব ব বহার কেরিছ। সংখ ািট না হেলই এিট
সত হেব shunyo noi ফলন আসেব, আর সংখ ািট হেল ফলন আসেব shunyo hoi।
f l o a t sonkhya = −3 . 5 ; / / তুিম চাইেল যাগান িনেত পােরা।
তাহেল এখানকার আেলাচনায় আমরা দখলাম উপাদান (operand) িহসােব হেলা িম-
থ া (false) আর অ যেকান ধনা ক (positive) বা ঋণা ক (negative) পূণক (integer)
বা ভ ক (float) হেলা সত (true)। আর অ য়ী অণুি য়া (relational operators) আেলাচ-
নার সময় জেনিছ ফলাফল (result) িহসােব সবসময় false হেলা 0 এবং true হেলা 1। খয়াল
কেরা উপাদান (operand) িহসােব true 0 ছাড়া য কান িকছু হেলও ফলাফল (result) িহসােব
true কবল 1, false অব উভয় ে ই কবল 0।
১০১
(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
5g • ! false ≡ true
ধেরা েটা ! পরপর আেছ যমন ! !true বা ! ! false বা ! !x, তাহেল ফলাফল কী হেব।
এইসব ে আমােদর ডােনর ! আেগ িহসাব করেত হেব, তার ওপর বােমর ! ধের শষ ফলাফল
in
িহসাব করেত হেব। একারেণ ! হেলা ডান সহেযাজ (right associative)। তা এখােন ডােনর
! অণুি য়া true বা false ক উে িদেব আর বােমর ! সটােক আবার িসধা করেব। তরাং
! !true হেব true, ! ! false হেব false, আর ! !x হেব x। বুলক বীজগিণেত এই িবিধেক বলা
am
হয় েনা ঋণায়ন (double negation)। তুিম িক িতন বা বশী সংখ ক ! পরপর থাকেল কী
হেব বর করেত পারেব? অব ই পারেব, িত ইিট ! পর রেক বািতল কের িদেব।
বুলক বীজগিণেতর (boolean algebra) ি তীয় অণুি য়া (operator) এবং, ও যটা &&
বা and িলেখ কাশ করা হয়। ল কেরা এবং অণুি য়ার ফলাফল (result) সত যখন উভয়
উপাদানই (operand) সত , আর যেকান একিট উপাদান িমথ া হেলই ফলাফল িমথ া।
একিট উপাদান সত বা িমথ া ধের িনেল এবং && অণুি য়ার জে আমরা বশ িকছু সর-
লীকরণ কের ফলেত পাির য েলােক আমরা সেত র সরল (true simplification) ও িমথ ার
সরল (false simplification) বলেবা। কান একিট উপাদান আমরা যিদ আেগই বুেঝ ফিল
সিট সত না িমথ া তাহেল আমরা এই সরলীকরণ েলা কােজ লাগােত পারেবা।
১০২
একিট উপাদান সত বা িমথ া ধের িনেল অথবা | | অণুি য়ার জে আমরা বশ িকছু সর-
লীকরণ কের ফলেত পাির য েলােক আমরা সেত র সরল (true simplification) ও িমথ ার
সরল (false simplification) বলেবা। কান একিট উপাদান আমরা যিদ আেগই বুেঝ ফিল
সিট সত না িমথ া তাহেল আমরা এই সরলীকরণ েলা কােজ লাগােত পারেবা।
• x | | true ≡ true
• true | | x ≡ true
সেত র সরল
• false | | x ≡ x
িমথ ার সরল
িমথ ার সরল
ব বহার কের সটাই বুঝােনা হেয়েছ। ি তীয় উদাহরণিটেত ! আেগ করেলও && আেগ | | করায়
সটা সিঠক হয় িন। এখােন ̸≡ িদেয় বুঝােনা হেয়েছ ইপাশ পর েরর সমতুল নয়।
১০৩
নীেচর েটা িবিধ হেলা সহেযাজন িবিধ (associative law)। এই িবিধেত একই অণুি য়া
(operator) পরপর থাকেল আমরা য কানিট আেগ মূল ায়ন (evaluate) কের তার ফলাফেলর
সােথ অ অণুি য়ার মূল ায়ন করেত পাির, আর তােত ফলাফল একই হেব।
5g
• x | | y | | z ≡ (x | | y) | | z ≡ x | | (y | | z) সহেযাজ
নীেচর িবিধ েলা হেলা শাষন িবিধ (absorption law)। থম চারিট িবিধেত খয়াল কেরা
al
নীেচর িবিধ েটােত অণুি য়া েলার (operator) উপাদান েটা একই। এবং && ও অথবা
| | উভেয়র ফলাফল এে ে সবসময় উপাদানিটর মান যা তাই হেব। একিট উপাদােনর িনেজর
১০৪
সােথ িনেজর ওপর কান অণুি য়া (operator) যু হেল ফলাফল যিদ উপাদানিটই হয় তাহেল
অণুি য়ািটর এই ধমেক বলা হয় অ ি য়তা (idempotence)। সব অণুি য়াই িক অ ি য়
নয়, যমন পািটগিণেত সবাব ায় x + x = x সত নয়, কােজই যাগ + অ ি য় নয়। বুলক
বীজগিণেত এবং && ও অথবা | | উভেয়ই অ ি য় (idempotent)।
v
নীেচর িবিধ েটােত অণুি য়া েলার (operator) উপাদান েটা পর েরর িবপরীত। এবং
&& এর ফলাফল এে ে সবসময় false হেব, কারণ েটা উপাদােনর মেধ য কান একিট
তা িমথ া হেবই, আর য কান একিট িমথ া হেলই এবং এর ফলাফল িমথ া। তাই এই িবিধেক
বলা হয় অস িত (contradiction)। আর অথবা | | এর ফলাফল এে ে সবসময় true হেব,
কারণ েটা উপাদােনর মেধ য কান একিট তা সত হেবই, আর য কান একিট সত হেলই
অথবা এর ফলাফল সত । তাই এই িবিধেক বলা হয় নঞ মধ ম (excluded middle)।
• x && !x ≡ false অস িত
5g
• x | | !x ≡ true নঞ মধ ম
নীেচর িবিধ েটার নাম িড মরগােনর িবিধ (De Morgan's Law)। এই িবিধ েটা খুবই
পূণ এবং ায়শই বুলক রািশর সরলীকরেণ ব ব ত হয়। এই িবিধ অণুযায়ী এবং && এর
ফলাফেলর ওপর নয় ! করেল য ফলাফল পাওয়া যায় তা আেগ উপাদান েলার ওপের নয় ! কের
in
সই ফলাফেলর ওপর অথবা | | চািলেয় পাওয়া ফলাফেলর সমতুল। একই ভােব অথবা | | এর
ফলাফেলর ওপর নয় ! করেল য ফলাফল পাওয়া যায় তা আেগ উপাদান েলার ওপের নয় ! কের
সই ফলাফেলর ওপর এবং && চািলেয় পাওয়া ফলাফেলর সমতুল।
am
সমতুেলর িবিধ েলা (equivalence law) য সিঠক, অথবা য কান েটা বুলক রািশ সমতুল
িকনা, এইটা তুিম কীভােব মাণ করেব। মাণ করাটা আসেল খুবই সহজ। উপাদান েলার মােনর
যত রকম সমােবশ (combination) স ব, িতিটর জ তামােক সমতুল িবিধর বাম ও ডান
পাশ সমান িকনা পরী া কের দখেত হেব। আমরা সাধারণত সত ক সারণী (truth table)
ব বহার কের সটা কের থািক। চেলা উদাহরণ িহসােব আমরা িড মরগােনর িবিধ েটার থমিট
মাণ কির। একই প িত অ সরণ কের তুিম িড মরগােনর অ িবিধিট মাণ করেত পারেব। আর
চাইেল উপেরর অ া য কান সমতুেলর িবিধ েলাও িনেজ িনেজ মাণ করেব।
িড মরগােনর থম সূ িটেত চলক (variable) আেছ ইিট x ও y, আর চলক িটর মান
স ব কবল true ও false। এখন িট চলেকর জে িট মান িনেয় আমরা চারিট সমােবশ
(combination) পেত পাির। এর িতিটর জ আমরা িবিধিটর বাম পাশ ও ডান পাশ মূল ায়ন
(evaluate) কের দখেবা। এখােন বেল রািখ কান সমতুল িবিধেত যিদ ৩িট চলক থােক তাহেল
সমােবশ হেব ৮িট, ৪িট থাকেল হেব ১৬িট, অথাৎ n িট চলক থাকেল সমােবশ হেব 2n িট। আর
এর িতিট সমােবেশর জ সত ক সারণীেত (truth table) একিট কের আিড় (row) থাকেব।
সত ক সারণীেত খািড় েলা (column) হেব িবিভ উপরািশর (subexpression) মান য -
লার মান আমােদর মূল ায়ন করেত হেব যিদ আমরা মুল রািশর (expression) মান পেত চাই।
১০৫
যমন ! (x && y) মূল ায়ন করেত গেল আমােদর x && y আেগ মূল ায়ন করেত হেব, তমিন
ভােব !x | | !y মূল ায়ন করেত গেল !x ও !y মূল ায়ন করেত হেব।
5g
২. ি তীয় আিড়েত (row) x,y যথা েম true, false, ফেল x && y হেলা false আর ! (
x && y) হেলা true। তারপর !x ও !y হেব যথা েম false ও true, ফেল !x | | !y
হেলা true। তরাং ! (x && y) আর !x | | !y এর মান সমান।
in
৩. তৃতীয় আিড়েত (row) x,y যথা েম false , true, ফেল x && y হেলা false আর ! (
x && y) হেলা true। তারপর !x ও !y হেব যথা েম true ও false, ফেল !x | | !y
হেলা true। তরাং ! (x && y) আর !x | | !y এর মান সমান।
am
৪. চতুথ আিড়েত (row) x ও y উভেয়র মানই false। তরাং x && y ও false, ফেল !
(x && y) হেব true। তারপর !x আর !y উভয়ই হেলা true, ফেল !x | | !y হেলা
true। কােজই ! (x && y) আর !x | | !y উভেয়র মান সমান।
১০৬
অংশটু দিখ। থেম 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 এর শত সত হেলই আমােদর একই ফলন দখােত হয়। আমরা
5g
তাই চ া করেত চাই একটা 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)
in
cout << " khelte parbe " << endl ;
e l s e / / উপেরর শত সত না হেল
cout << " khelte parbena " << endl ;
am
এখন কথা হে এই য খািনকটা জিটল একটা শত আমরা িলেখ ফললাম, এটােক িক কান
ভােব সরলীকরণ করা যায়? সরলীকরণ করার জ চেলা ধের িনই p ≡ shreni == 5 আর q
≡ boyosh == 5। তাহেল shreni != 5 ক লখা যায় !p। ফেল আমােদর শতিট দাঁড়ােলা
p | | !p && q, আমরা এিটেক বুলক বীজগিণত (boolean algebra) িদেয় সরল করেবা।
al
তরাং উপেরর সরেলর ফেল া রািশ (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 ;
১০৭
একই রকম আেরকিট উদাহরণ দেখা। ধেরা কান একটা মেলখেত (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)
5g
উপেরর সরলীকরেণর ফেল আমরা if ( ! (p && (!p | | q)) | | q) না িলেখ কবল if
(true) িলখেত পারেবা। িক একটা িবষয় দেখেছা, সরলীকরেণর ফলাফল একদম একটা বক
মান true হেয় গেছ। এর অথ দ শেতর মান কখেনা চলক p বা q এর ওপর িনভর কেরনা।
তরাং আমােদর আেদৗ কান if লাগােনার দরকার নাই। কারণ শত সত হেল যিট করেত হেতা
in
শত সবসময় সত হওয়ায় তুিম সিট এখন শত পরী ণ ছাড়াই করেব।
/ / i f ( true ) / / শত লখার দরকার নাই , টীকায় আটেক িদেয়িছ
cout << " kee moja " << endl ; / / কবল এিট িলখেলই হেব
am
তুিম এবার িজে স করেত পােরা সরলীকরেণর ফেল যিদ false আেস তাহেল কী হেব?
সিত ই তা কী হেব? সে ে আমােদর িলখেত হেব if (false) তাই না! িক সটা মােন তা
শত সব সময় িমথ া, শতিটর সত হওয়ার কান স াবনা নই। আর সে ে শত সত হেল যা
করার কথা িছেলা সটা কখেনাই করেত হেব না। ফেল তুিম এই if (false) আর তারপর শত
সত হেল যা করেত তার সব মেলখ (program) থেক মুেছ িদেত িদেত পােরা।
al
১০৮
i f ( shorto1 )
i f ( shorto2 )
5g
সেহতু shorto1 সত হেলই shorto2 এর মুল ায়ন ছাড়াই | | এর ফলাফল সত হেয় যােব।
এই য ব াপারিট এটােক বলা আংিশক মুল ায়ন (partial evaluation), এেত অদরকারী কাজ
িকছুটা কেম, মেলখ (program) িকি ত তগিতর হয়।
i f ( shorto1 && shorto2 )
cout << " k i s u ekta " ;
in
cout << " k i s u ekta " ; else
else cout << " onno k i s u " ;
cout << " onno k i s u " ; cout << " koro " << endl ;
am
else
cout << "onno k i s u " ;
cout << " koro " << endl ;
কান একটা িমথ া হেলও ফলেন (output) যােব "onno kisu"। বাম ও ডান উভয় পােশ ম-
লখেতই (program) এই একই ব াপার ঘটেব। এখােনও সই একটা িবষয় উে খ করা দরকার:
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। ফেল
শত সত হেল যা করেত হেব আর িমথ া হেল যা করেত হেব এই েটা ান বদলাবদিল কেরেছ।
১০৯
উপেরর উদাহরেণ খয়াল কের দেখা "kisu ekta" ফলেন (output) যােব যিদ shorto1
সত হয় অথবা যিদ shorto2 িমথ া হয়, অ কথায় !shorto2 সত হয়। আর shorto1
িমথ া হেল তারপর shorto2ও িমথ া হেল ফলেন (output) যােব "onno kisu"। িঠক এই
ব াপারিটই উভয়পােশর মেলখেত (program) িতফিলত হেয়েছ।
i f ( shorto1 ) i f ( ! shorto1 | | shorto2 )
i f ( shorto2 ) cout << " k i s u ekta " ;
else
else
5g
cout << " k i s u ekta " ;
উপেরর উদাহরণিট একটু জিটল। বামপােশ খয়াল কেরা "kisu ekta" ফলেন (output)
am
যােব যিদ 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 " ;
al
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 ;
১১০
হয়। তাই আমরা েত 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 ;
5g
in
এই উদাহরণিটও িঠক আেগর উদাহরণিট মেতা, তেব এখােন | | এর জ করা হেয়েছ। অথ-
বার | | ে যেকান একিট উপাদান (operand) সত হেলই ফলাফল সত হয়, আমরা তাই
shorto এর আিদ মান ধেরিছ false। আর তারপর শত েটার য কানিট সত হেলই shorto
am
ক সত করা হেয়েছ। তুিম যিদ আংিশক মূল ায়ন (partial evaluation) এখােনও কােজ লা-
গােত চাও তাহেল বামপােশ if (shorto2) বদেল else if (shorto2) িলখেব।
ধেরা তামার ইশ েল গিণত পরী ায় ৫০ বা বশী পেল পাশ, না হেল ফল। আর ৮০ বা বশী
পেল তারকা িনেয় পাশ। তামার ণীেত ১০০ জন িশ াথী আেছ, যােদর মেধ মাটামুিট ১০ জন
ফল করেব, ২০ জন তারকা সহ পাশ করেব আর বাঁকী ৭০ জন ফ পাশ করেব। তুিম এমন একিট
মেলখ (program) রচনা কেরা যিট একজন িশ াথীর ছাে র ন র যাগান (input) িনেয়
ফল, পাশ, বা তারকা সহ পাশ ফলন (output) িদেব। তামার মেলখিট ১০০ জন িশ াথীর
জ ১০০ বার আলাদা আলাদা কের চালােনা (run) হেব। তেব এই ১০০ বার চালােনােত মাট
সময় যােত কম লােগ মেলখটা সটা মাথায় রেখ রচনা করেত হেব।
i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
else // না হেল
cout << " f e l l " << endl ; // ফল ফলন
১১১
ধেরা উপেরর মেতা কের তুিম মেলখ তরী কেরেছা। য িশ াথী ফল করেলা বা পাশ
করেলা বা তারকা সহ পাশ করেলা, তার জ তা যা ফলন তা দখােতই হেব, সখােন সময় কম
লাগা বশী লাগার ব াপার নাই। সময় কম বা বশী লাগার হেলা তুিম কতবার শত পরী া কের
কাজটা করেত পারেছা সটােত। যমন ধেরা একজন ফল করা িশ াথীর জ উপেরর মেলখেত
(nombor >=50) শত পরী া হেব আবার মেলখ য ভােব লখা হেয়েছ তােত nombor
>= 80 শতিটও পরী া হেব। শত পরী ার ফলাফল সত হাক আর িমথ া হাক পরী া তা
করেতই হেব। ফেল মাট িট শত পরী া হেলা। য িশ াথীিট কবল পাশ করেব খয়াল কের
দেখা তার জে ও িটই শতই পরী া করেত হেব। একই হেব তারকাসহ পােশর ছাে র জে ও
িট শতই পরী া করেত হেব। তরাং উপেরর মেলখ িদেয় এই সম ার সমাধান করেল ১০০
জন িশ াথীর জ মাট শত পরী া হেলা ১০০ * ২ = ২০০ বার।
i f ( nombor >= 50) // যিদ পােশর ন র
{
cout << " pash " << endl ; // পাশ ফলন
i f ( nombor >= 80) / / যিদ তারকা ন র
}
else 5g
cout << " taroka " << endl ;
না হেল
ফল ফলন
in
এবার একটু ভেব দেখা পাশ বা ফল িনণয় করার জ তা আমােদর একটা শত লাগেবই,
িক যখন আমরা জেন গলাম একজন িশ াথী ফল কেরেছ, তখন তার জে ও কন আমরা
nombor >= 80 শত পরী া করেবা? সটা তা অদরকারী কাজ হেব। তরাং তারকা দখােনা
am
অংশটু যিদ আমরা পােশর জ য অংশ সখােন একটা মহ া (block) তরী কের সই মহ ার
িভতের িনেয় যাই, তাহেল nombor >= 80 শতিট কবল পাশ করা িশ াথীেদর জ পরী া
হেব। উপেরর মেলখ দেখা। তা এই ে পাশ বা ফল িশ াথীর জ কবল ১ টা শত পরী া
হেলা আর তারকা পাওয়া ছাে র জ ২টা তরাং মাট শত পরী ণ হেলা ২০*২ + (৭০+১০)*১
= ১২০ বার মা । িনি তভােবই এই মেলখ আেগরিটর চেয় তাড়াতািড় ১০০ জন িশ াথীর
ফলাফল দখােনার কাজ শষ করেব! কমন মজার িবষয় না!
al
তুিম হয়েতা ভাবেছা দিখ আেরক ভােব করা যায় িকনা যােত আেরা কম সময় লােগ। যমন
ধেরা তুিম থেম ৮০ বা বশী িকনা পরী া করেব, তারপর ৫০ এর বশী িকনা পরী া করেব,
অথাৎ উপেরর মেলখেয়র (program) মেতা কের। এখােন খয়াল কেরা তারকা পাওয়া িশ-
াথীেদর জ শত পরী া করা লাগেব ১বার সিট nombor >= 80 আর ফ পাশ বা ফল
করা িশ াথীেদর জ ২িট শতই পরী া করা লাগেব। ফেল মাট শত পরী ণ হেব ২০*১ +
১১২
(৭০+১০)*২ = ১৮০ বার। তরাং উপেরর এই তৃতীয় মেলখ আমােদর লখা থম মেলখ-
য়র চেয় একটু তগিতর হেলও ি তীয়িটর চেয় যেথ ধীরগিতর হেব। তুিম আেরা নানান ভােব
চ া কের দখেত পােরা, তেব আমােদর ি তীয় মেলখিটই সবেচেয় তগিতর হেব, কারণ এেত
সবেচেয় কম সংখ ক বার শত পরী া করেত হেয়েছ।
আ া তুিম কী ধরেত পেরেছা কন ি তীয় মেলখিটেত সবেচেয় কম সংখ ক বার শত পরী-
া করেত হেব? উ রটা িক খুবই সহজ। আমােদর দখেত হেব সবেচেয় বশী সংখ ক িশ াথী
কান ভােগ পেড়। এে ে ফ পাশ কের সেবা ৭০ জন। আমরা চাইেবা এই ৭০ জেনর জ
ফলন (output) যােত কম সংখ ক, এে ে মা একটা শত পরী া কেরই িদেত পাির। উ া িদ-
ক য ভােগ িশ াথীর সংখ া যত কম তার জ তত বশী শত পরী া করা যেত পাের। আমােদর
তৃতীয় মেলখেত আমরা আসেল এই িনয়ম ভ কেরিছ। কারণ এটােত তারকা পাওয়া ২০ জেনর
ফলন আমরা দখাই মা ১বার শত পরী া কের, আর পাশ করা ৭০জেনর ফলন দখাই ২বার
শত পরী া কের। আর স কারেণ এিট ি তীয় মেলখ থেক ধীরগিতর হেব। তা এখন থেক
যিদ-তাহেল িনেয় কাজ করার সময় শতিদেয় সৃি হওয়া ডাল-পালা েলার কানটােত কত েলা
ব াপার (case) আসেত পাের সটা মাথায় রেখ দ মেলখ তরী করেব, কমন!
else) কাজ কের, তেব েটার মেধ তফাৎ হেলা িতিনক অণুি য়া একিট রািশর (expression)
অংশ িহসােব থােক, ফেল এর একটা ফলাফল তরী হেব। আর if-else একটা শতযু িববৃিত
(conditional statement) তরী কের যার কান ফলাফল নই।
i n t prothom , d i t i y o ; / / চলক িটর মান যাগান িনেত পােরা
al
িতিনক অণুি য়া ব বহার কের আমরা উপের েটা সংখ ার বড়িট বর করার মেলখ দিখ-
য়িছ। এখােন থেম ? িচে র আেগ য শত পরী া আেছ সিট মূল ায়ন হেব। শত যিদ সত
হয় তাহেল ? আর দাঁটা : িচে র মােঝ য মানিট আেছ সিট হেব অণুি য়ািটর ফলাফল আর
শত যিদ িমথ া হয় তাহেল অণুি য়ািটর ফলাফল হেব দাঁটা : িচে র পের থাকা অংশটু । তাহ-
ল উপেরর মেলখেত prothom > ditiyo শতিট সত হেল ফলাফল হেব prothom অথাৎ
বড়িট আর শতিট িমথ া হেল ফলাফল হেব ditiyo কারন এিটই তখন বড় অ িটর চেয়। তরাং
আমরা ফলাফল িহসােব prothom ও ditiyo চলক িটর মেধ সবসময় বড়িটই পাি । তুিম
িন য় এখন েটা সংখ ার মেধ ছাটিট বর করার মেলখ এভােব িলখেত পারেব!
i n t prothom , d i t i y o ; / / চলক িটর মান যাগান িনেত পােরা
i n t boro ; / / বড় মানিট রাখার জ চলক ঘাষণা
১১৩
তুিম িক চাইেল েটা সংখ ার বড়িট বর করার জ উপেরর মেতা কেরও িলখেত পারেত।
এইে ে চলক (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 ; / / বড় মানিট রাখার জ চলক ঘাষণা
িতিনক অণুি য়ার কাজ তা উপেরর মেতা কের যিদ-নাহেল িদেয়ও করা যেত পাের। তাহেল
কখন তুিম িতিনক অণুি য়া ব বহার করেব কখন যিদ-নাহেল ব বহার করেব? অত সংি
in
ধরেনর বেল িতিনক অণুি য়া (ternary) আসেল টুকটাক ছাটখাট িকছুর জ বশী ব বহার
করা হয়। আর যিদ-নাহেল হেলা একদম সব জায়গায় ব বহার করার জ , িবেশষ কের শত সত
বা িমথ া হেল যিদ একটা মহ া (block) িনবাহ (execute) করেত হয়।
am
তুিম িক িতিনক অণুি য়া (ternary operator) ব বহার কের িতনিট সংখ ার মেধ সবেচেয়
বড়িট বর করেত পারেব। িন য় পারেব, এ আর এমন কিঠন কী? উপেরর মেলখেয়র মেতা কের
al
থেম েটার মেধ বড়িট বর করেব। তারপর 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 ; / / মান যাগান িনেত হেব
১১৪
cout << " kee chomotkar ! " << endl ; / / পি র বাইের অ িকছু
১১৫
উপেরর মেলখ (program) খয়াল কেরা। যমন বলা হেয়েছ তমন কের িট চলক নয়া
হেয়েছ: কান অ পাত তা রাখার জ চলক 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 চলকিটর কান মান সিট তারপর একটা : দাঁটা
5g
(colon)। িতিট ব াপােরর (case) পের দেখা আমরা cout িদেয় ি েকানিমিতর অ পাত
sine, cosine, tangent ব বহার কের ফলন দিখেয়িছ। তারপর িলেখিছ break; অথাৎ এই-
খােন পি -ব াপােরর াি (break) ঘটেব। এই াি েয়র (break) কাজ আমরা একটু পেরই
আেলাচনা করিছ। তার আেগ দেখা case 3: এর াি েয়র (break) পের রেয়েছ default:
in
যিট হেলা অগত া ব াপার অথাৎ ওপেরর কান case এর সােথই onupat এর মান না িমলেল
অগত া ব াপারিট ঘটেব বেল ধের নয়া হেব। তাহেল onupat এর মান যিদ 1, 2, 3 িভ অ
িকছু হয় তাহেল default: অগত া ব াপারিট ঘটেব। যথারীিত সখােন আমরা িটবাতা (error
message) দিখেয়িছ। এখােন িক break; আেছ শেষ।
am
মেলখ িনবাহ (program execution) করার সময় ধের িনেত পােরা অদৃ বাতােমর
মেতা একটা ব াপার আেছ যটােক বলা হয় িনয় ণ (control)। এই িনয় ণ বাতামিট মেলখ
িনবােহর েত main িবপাতেকর একদম থম সািরেত থােক। বাতামিট যই সািরেত থােক
সই সাির িনবািহত (executed) হয়। আর তারপর িনয় ণ বাতামিট পেরর সািরেত লাফ দয়,
তখন সই সািরিট িনবািহত হয়। এভােব িনয় ণ বাতােমর লাফালািফ ও সই সােথ সংি সািরর
al
িনবাহ এেক এেক চলেত থােক। যিদ-নাহেল (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) দয়াটা আসেলই খুব পূণ, আর আমরা আবার না দয়ার ভুলটা ায়ই কির।
১১৬
িফিরি ৭.৬: অ াি পি
/ / আকৃিতর াপণ (menu)
5g
িদেয় াপণ (Menu with Nested Switch)
১১৭
}
default :
5g
/ / িভতেরর পি অ িকছু হেল িটবাতা
cout << " osomorthito posondo " << endl ;
break ;
in
/ / এিট িভতেরর পি থেক বাইের
cout << " borger hisab shes " << endl ;
break ;
am
/ / কী চাই াপণ
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 ;
১১৮
// বাইেরর পি রও বাইের
cout << " kee chomotkar ! " << endl ;
যখন akriti এর মান 1 অথাৎ বগ বেছ নয়া হেয়েছ তখন থেম ফলেন (output) দখােনা
al
হেয়েছ য বগ পছ করা হেয়েছ। তারপর চলক 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। এই েটা
১১৯
৭.১৯ পি ব াপার
5g
াি (Switch Cases Breaks)
পি ব াপাের (switch cases) াি (break) না িদেল কী ঘেট, আর াি না দওয়া কাথায়
কােজ লাগেত পাের? যথাযথ উদাহরণ সহ মেলখ (program) িলেখ দখাও।
ধেরা তামার একজন অিতিথ আসেব। স যিদ সকাল ১০ বা ১১টায় আেস তােক তামার
in
সকােল না া, পুেরর খাবার, আর িবকােলর না া খাওয়ােত হেব। আর স যিদ ১২টায় বা ১৩টায়
আেস তেব তােক কবল পুেরর খাবার ও িবকােলর না া খাওয়ােত হেব, আর িতিন যিদ ১৪টা বা
১৫টায় আেস তাহেল তােক কবল িবকােলর না া খাওয়ােত হেব। এই সময় েলা িভ অ কান
am
case 12 :
case 13 :
cout << " dupurer khabar " << endl ;
case 14 :
case 15 :
cout << " b i k a l e r nasta " << endl ;
}
১২০
খয়াল কেরা উপেরর মেলখেত (program) সময় যিদ ১০টা হয়, িঠক সখােন িকছু না
থাকেলও পরপর য িববৃিত েলা আেছ স েলা এেক এেক িনবািহত হেব, ফেল যমন 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 :
5g
in
case 3 :
cout << " b e j o r " << endl ;
break ;
am
এবার িকছু : পি েত কী ব াপার েলা মােনর মা সােরই থাকেত হেব? মান েলা কী
ধারাবািহকভােব পরপর সংখ া হেত হেব? উভয় ে র উ র হে "না"। কােজই িঠক উপেরর
উদাহরেণর মেতা তুিম দরকার মেতা ব াপার েলা (case) পরপর না হেলও বা উে াপা া েম
হেলও িলখেত পারেব। আবার দেখা িকছু ব াপাের (case) াি (break) নাই, আবার িকছু
al
ব াপাের আেছ। মাট কথা যখােন াি দয়া দরকার সখােন 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 ;
}
১২১
পি েত অব তুিম একই ব াপার ইবার ব বহার করেত পারেব না, যমন case 1: িল-
খ একই পি র িভতের পের আবার case 1: িলখেত পারেব না। তেব পি র িভতের অ াি
(nested) পি থাকেল সখােন case 1: থাকেতই পাের।
case 0 :
5g
cout << " shunyo " << endl ;
break ;
in
case 1 :
case 2 :
cout << " dhonatok " << endl ;
am
break ;
}
উপেরর উদাহরণিট খয়াল কেরা। এখােন আমরা একিট ন র ধনা ক (positive), ঋণা ক
(negative), নািক (zero) িনণয় করেত চাই। আমরা যিদ আেগ থেক জািন য ন রিট ক-
বল −2, −1, 0, 1, 2 এই পাঁচিট িনিদ সংখ ার একিট হেত পারেব, অ আর িকছু নয়, এ েলার
al
বাইের নয়, কবল তাহেলই আমরা উপেরর মেতা কের পি ব াপার (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) হেব অেনক
বশী বা অসংখ । আর একিট ব াপার হেলা পি েত ব াপার েলা মুলত মান সমান == হেল কী
১২২
হেব তার ওপর িভি কের তরী, অ কান ধরেনর তুলনা যমন বড় >, ছাট < ইত ািদ ব বহার
করা যায় না। ফেল পি (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 ;
5g
ানীয় চলক (local variable) কী? এর িবপরীেত ব াপীয় চলকই (global variable) বা কী?
শতালী পিরগণনায় (conditional programming) ানীয় চলেকর ব বহার দখাও।
যখন কান চলক বা বক বাঁকা ব নী যুগেলর বাইের অথাৎ য কান মহ ার বাইের থােক
তখন তােক ব াপীয় চলক (global variable) বা ব াপীয় বক (global constant) বলা
in
হয়। নীেচর মেলখেত (program) খয়াল কেরা pai আর nimnoshima য কান মহ ার
(block) বাইের, তাই এ েলা যথা েম ব াপীয় বক (global constant) ও ব াপীয় চলক
(global variable)। ব াপীয় চলক বা বক ঘাষণা করার পর থেক মেলখেয়র য কান
am
জায়গায় ব বহার করা যায়। য কান বেকর মান তা ঘাষণার সময় অব ই িদেত হয়, ব াপীয়
বেকর (global constant) মানও ঘাষণার সময়ই িদেয় িদেত হয়। আর ব াপীয় চলেকর মান
ঘাষণার সময় না িদেয় িদেল এেত অগত া (default) থােক।
িফিরি ৭.৭: ানীয় ও ব াপীয় চলকের ব বহার (Using Local & Global Variables)
#i n c l u d e <iostream>
al
#i n c l u d e <c s t d l i b>
i n t main ( void )
{
f l o a t bashardho ; // ানীয় চলক
f l o a t const two = 2 . 0 ; // ানীয় বক
১২৩
5g
বক two উভয়ই main িবপাতেকর মহ ার িভতের ঘািষত হেয়েছ, কােজই এ েটা যথা -
ম ানীয় চলক ও ানীয় বক। ানীয় চলক বা বক য কান মহ া (block) বা উপমহ ার
(subblock) িভতের ঘািষত হেত পাের। মহ ার িভতের আবার মহ া থাকেল িভতেরর মহ া-
ক উপমহ া (subblock) বলা হয় আর বাইেরর মহ ােক বলা হয় অিধমহ া (superblock)।
য কান বেকর মান তা ঘাষণার সময়ই িদেয় িদেত হয়, ানীয় বেকর মানও তাই ঘাষণার
in
সময়ই িদেয় িদেত হেব। আর ানীয় চলেকর মান িদেয় না িদেল এটােত উ া পা া একটা মান
থাকেব। তরাং ানীয় চলক ব বহােরর পূেব অব ই এেত মান আেরাপণ (assign) কের িনেত
হেব। ানীয় চলক ও বক ঘাষণা করার পর থেক ওই মহ ার িভতের য কান খােন ব বহার
am
i n t main ( )
{
al
১২৪
অেনক সময় একিট ানীয় (local) চলক বা বেক নাম একিট ব াপীয় (global) চলক বা
বেকর নােমর সােথ িমেল যেত পাের। থম কথা িতিট চলক বা বেকর নাম পুেরা ম-
লখ জুেড় একক (unique) হওয়া উিচৎ, িক িবধার িবচাের অেনক সময় সটা করা স ব হয়
না। এমতাব ায় কী কের বুঝেবা ব ব ত চলক বা বকিট ব াপীয় না ানীয়? উপেরর মেলখ
(program) খয়াল কেরা, সখােন cholok নাম বারবার ব বহার কের অেন েলা চলক ঘাষণা
করা হেয়েছ, যার একিট সকল মহ ার (block) বাইের তাই ব াপীয় (global) আর অ েলা
কান না কান মহ ার িভতের তাই ানীয় চলক। এখন cholok নােমর চলকেক নানান খােন
ফলেন (output) দখােনা হেয়েছ। কথা হে নাম যেহতু একই, তা আমরা নামিট িদেয় কখন
কান চলকিটেক বুঝেবা, কখন কান মানই বা ফলেন দখেত পােবা?
খয়াল কের দেখা যখােন ব াপীয় চলকিট ঘাষনা করা হেয়েছ আর মান দওয়া হেয়েছ 2
তারপর থেক এিটর কাযকারীতা বলবৎ আেছ, মহ ার বাইের তা অব ই আেছ যমন একদম
নীেচ যখােন int kisuekta = cholok; লখা হেয়েছ। আবার মহ ার (block) িভতের া-
নীয় চলক ঘাষণার আেগ পয এিটর কাযকারীতা রেয়েছ ফেল আমরা ব াপীয় চলকিটর মানিটই
অথাৎ 2ই দখেত পােবা। তারপর মহ ার িভতের যখন একই নাম িদেয় একিট চলক ঘাষনা করা
হেয়েছ আর মান দওয়া হেয়েছ 3, তখন cholok নােমর সােথ ানীয় এই চলকিটর কাযকারীতা
5g
বলবৎ হেয়েছ, আর তা জাির আেছ মহ া শষ হওয়া পয , তাছাড়া উপমহ ার িভতের একই না-
মর আেরকিট চলক ঘাষণার আেগ পয ও তা জাির আেছ। মেলখেত (program) টীকা েলা
(comment) খয়াল কেরা। কাথায় কান মান ফলেন আসেব তা িদেয় আমরা বুঝার চ া কর-
িছ, কাথায় কান চলকিটর কাযকারীতা বলবৎ আেছ। তাহেল কান নাম কান চলকিটেক বুঝাই,
সটার জ আমােদর দখেত হেব একই মহ ার িভতের ওই নােমর কান চলক আেছ িকনা? যিদ
in
থােক সই চলকিট কাযকর আেছ। আর একই মহ ার িভতের যিদ না থােক, তাহেল আমরা িঠক
বাইেরর মহ ািট দখেবা, সখােন একই নােম কান চলক আেছ িকনা? যিদ থােক সটা বলবৎ
হেব আর তাও না থাকেল তার িঠক বাইের আেরা কান মহ া আেছ িকনা তা দখেবা।
am
i n t nombor ;
c i n >> nombor ;
িসিপিপেত যিদ নাহেল (if else) লখার সময় যিদ { } বাঁকা ব নী যুগল ব বহার কের কান
মহ া (block) তরী করা হয়, তাহেল সই মহ ার িভতের ঘািষত য কান চলক বা বক তা
ানীয় চলক বা বক হেব। আমরা সটা আর আলাদা কের দখােত চাই না। তেব উপেরর মেলখ
খয়াল কেরা if ( int vagshesh = nombor % 3) িলেখও আমরা vagshesh নােম একিট
চলক ঘাষণা কেরিছ। এই vagshesh নােমর চলকিটও একিট ানীয় চলক (local variable)
িহসােব পিরগিণত হয়, আর এটা কাযকর থােক কবল যখােন লখা হেয়েছ সখান থেক
হেয় ওই if else মই (ladder) বা অ াি (nesting) যত ণ শষ না হে তত ণ পয , এর
বাইের কান কাযকারীতা থাকেব না, ফেল ব বহার করেল িটবাতা পােব।
যিদ নাহেল (if else) এর ে ঘািষত ানীয় (local) চলকিটর মেতা আমরা পি ব াপা-
রর (switch cases) ে ও একই ভােব ানীয় চলক ঘাষণা করেত পাির। নীেচর মেলখেত
(program) খয়াল কেরা switch ( int vagshesh = nombor % 3) িলেখ আমরা একিট
ানীয় চলক vagshesh ঘাষণা কেরিছ। এই চলকিটর কাযকারীতাও কবল ওই পি র মহ া-
১২৫
}
break ;
case 2 :
5g
cout << " dui " << vagshesh << endl ;
break ;
in
৭.২২ অ শীলনী সম া (Exercise Problems)
am
২. যিদ if এর সােথর শত িমথ া হেল সংি নাহেলেত else িগেয় আবারও শেতর িবপরীত
al
৩. যিদ নাহেল (if else) িদেয় মেলখ (program) িলখেত ছাড়ন (indentation) দয়া
পূণ কন? কার জ পূণ মা েষর জ নািক গণিনর (computer) জ ?
৫. যিদ নাহেল মইেত (if else ladder) শত েলা কী ভােব সাজােব, যিদ িচ ার িবধা িব-
বচনা কেরা অথবা মেলখেয়র দ তা িবেবচনা কেরা?
৬. অ াি যিদ নাহেল (nested if else) ও যিদ নাহেল মই (if else ladder) একটা থেক
আেরকিটেত পা র স ব, উদাহরণ সহ ব াখ া কেরা।
৭. ঝুল নাহেল (dangling else) সম ািট কী? এিটর সমাধান কী কী ভােব করা যেত
পাের, উদাহরণ িদেয় আেলাচনা কেরা।
১২৬
১১. বুলক শেতর (Boolean condition) আংিশক মূল ায়ন কী ও কী ভােব কাজ কের?
১২. একািধক ব াপীয় চলক (global variable ও ানীয় চলেকর (local variable) নাম
একই হেল কানটা কাযকর তা কী ভােব িনধািরত হয়?
int n ;
cout <<
5g
১. নীেচর মেলখেয়র (program) ফলন (output) কী তা থেম খাতা কলেম িনণয় কেরা,
আর তারপর গণিনেত চািলেয় তার সােথ িমলাও।
/ / আিদ মান আেরাপ করা হয় িন
( n = 4 ) << endl ;
in
cout << ( n == 4 ) << endl ;
cout << ( n > 3 ) << endl ;
cout << ( n < 4 ) << endl ;
cout << ( n = 0 ) << endl ;
am
২. নীেচর মেলখেত (program) িকছু গঠনগত (syntactical) ভুল আেছ। ভুলটা কাথায়
বেল তুিম মেন কেরা? ভুলটা এমন ভােব িঠক কেরা যােত এিটর ছাড়ন (indentation)
দেখ যা করেত চাওয়া হেয়িছল বেল মেন হয়, মেলখিট (program) অথেবাধকতায়
(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 ;
১২৭
int n , k = 5 ;
n = ( 100 % k ? k + 1 : k − 1 ) ;
cout << "n = " << n << " k = " << k << endl ;
5g
য়ই যিদ িনবাহ (execute) করা হয় তাহেল ফলন (output) কী হেব? আর যটা করেত
চাওয়া হেয়িছল বেল মেন হয় যিদ সটা করা হয় তাহেল ফলন কী হেব?
int n = 5 ;
i f ( n = 0 ) / / অণুি য়ািট খয়াল কেরা
in
cout << "n holo shunyo . " << endl ;
else
cout << "n shunyo noy " << endl ;
cout << "n er borgo " << n ∗ n << endl ;
am
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) ফলন (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 ;
else
5g
cout << " dhonatok . " << endl ;
(indentation) দওয়া থেক যমনিট িলখেত চাওয়া হেয়েছ বেল মেন হয় ফলনও িঠক
স রকম আেস। আর সে ে ােন কী হেব বেল যৗি ক মেন হয় সটাও িঠক কেরা।
অ িদেক যা লখা হেয়েছ সটা িঠকই আেছ ধের িনেয় কবল ছাড়নটা (indentation)
িঠক কেরা, আর তােত ােন কী বসােনা যথাথ হেব তাও িনণয় কেরা।
৯. িতনিট সংখ া যাগান (input) িনেয় কানিট বড়, কানিট ছাট ফলেন (output) দখাও।
al
১০. িতনিট সংখ া যাগান (input) িনেয় তােদর মেধ মােঝরিট ফলেন (output) দখাও।
১১. িতনিট সংখ া যাগান (input) িনেয় তােদরেক উধ েম সািজেয় ফলন (output) দাও।
১২. গিণেত া ন র যাগান (input) িনেয় সটা থেক বণ মান (letter grade) ফলন
দাও। ধেরা ৯০ বা বশী হেল A, ৮০ বা বশী হেল B, ৭০ বা বশী হেল C, ৬০ বা বশী
হেল D, ৫০ বা বশী হেল E, আর তারও কম হেল F বণ মান পাওয়া যায়।
১৩. একিট ি মাি ক (two dimensional) িব র ানা দওয়া আেছ, িব িট চারিট চতু-
ভােগর (quadrant) িঠক কানিটেত পড়েব িনণয় কেরা।
১৫. তামােক -১০০ ও ১০০ এর মেধ িট সংখ া যাগান (input) িহসােব দওয়া হেব, তুিম
ওই িট সংখ া সহ তােদর মােঝর সকল সংখ ার যাগফল ফলেন (output) দখাও।
১২৯
5g
message) দখােব। তুিম এই মেলখিট একবার পি ব াপার (switch cases) ব -
বহার কের আবার যিদ নাহেল (if else) ব বহার কের কেরা।
২০. একিট সংখ ার পুরক সংখ া িনণয় কেরা। সংখ াট এক অে র হেল তার পুরক সংখ ৯ এর
সােথ িবেয়াগফল, ই অে র হেল ৯৯ এর সােথ িবেয়াগফল, িতন অে র হেল ৯৯৯ এর
in
সােথ িবেয়াগফল। িতেনর চেয় বশী অে র সংখ া যাগান (input) দওয়া হেব না।
২১. এমন একিট মেলখ (program) িলেখা যটা ৫ জন লাক যােদর িমক ১-৫ তােদর ক
কতটা কের পেরাটা খেয়েছ যাগান (input) িনেব। মেলখিট তারপর একজেন সেবা
am
কয়টা পেরাটা খেয়েছ সটা ফলেন (output) দখােব। আর কান লাক সেবা সংখ ক
পেরাটা খেয়েছ মেলখিট সটাও দখােব, তেব সেবা পেরাটা খাওয়া একািধক ব ি
থাকেল থমজেনর িমক ন র হেলই চলেব, পেরর জনেদর দরকার নাই।
২২. একজন লাক াভািবক িনয়ম অ যায়ী স ােহ ৪০ ঘ টা কাজ কের, ৪০ ঘ টার বশী কাজ
করেল অিতির সময়টু র জ াভািবক িনয়েমর চেয় ১.৫ ণ মজুির পায়। কান এক
স ােহ লাকিট কত ঘ টা কাজ কেরেছ আর াভািবক িনয়েম ঘ টা িত মজুির কত তা
al
যাগান (input) িনেয় ওই স ােহ তার মাট মজুির কত তা ফলেন (output) দখাও।
২৩. ধেরা তুিম চার টুকেরা কাগজ িনেয়েছা। তামার ১ম টুকেরােত লখা আেছ ১, ৩, ৫, ৭, ৯,
১১, ১৩, ২য় টুকেরােত আেছ ২, ৩, ৬, ৭, ১০, ১১, ১৪, ১৫, ৩য় টুকেরােত আেছ ৪, ৫,
৬, ৭, ১২, ১৩, ১৪, ১৫, ৪থ টুকেরােত আেছ ৮, ৯, ১০, ১১, ১২, ১৩, ১৪, ১৫। তামার
মেলখ (program) ব বহারকারী মেন মেন একিট সংখ া ধরেব, আর সিট ১ম, ২য়,
৩য়, ৪থ টুকেরার কান কানিটেত আেছ যাগান (input) িদেব, তারপর তামার মেলখ
ব বহারকারী মেন মেন য সংখ ািট ধেরেছ সিট ফলেন (output) দখােব। এিট খুব সহজ
একিট ব াপার। য য টুকেরােত সংখ ািট আেছ ওই টুকেরা েলার থম সংখ া েলা যাগ
করেলই ব বহারকারীর সংখ ািট পাওয়া যােব। যমন ব বহারকারীর সংখ ািট যিদ ১, ৩, ৪
ন র টুকেরােত থােক তাহেল সংখ ািট ১ + ৪ + ৮ = ১৩।
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
১৩০
১. নীেচর মেলখেয়র (program) ফলন (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
1
1
0
0
//
//
//
//
//
আেরাপণ হেব 4
মান আসেলই তা 4
কােজই 3 এর বশী 5g
4 এর সমান , কম তা নয়
আেরাপন হেব 0
in
1 // মান 0 এর সমান , সত
0 // মান তা 0 , বশী তা নয়
0 // 0 হেলা িমথ া তাই ফলাফল িমথ া
am
২. নীেচর মেলখেত (program) িকছু গঠনগত (syntactical) ভুল আেছ। ভুলটা কাথায়
বেল তুিম মেন কেরা? ভুলটা এমন ভােব িঠক কেরা যােত এিটর ছাড়ন (indentation)
al
দেখ যা করেত চাওয়া হেয়িছল বেল মেন হয়, মেলখিট (program) অথেবাধকতায়
(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) করেত গেল িট দখােব। িট টা
১৩১
হল সংি 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 ;
}
৩. নীেচর
int n , k = 5 ;
5g
মেলখ (program) চালােল কী ফলন (output) পাওয়া যােব?
n = ( 100 % k ? k + 1 : k − 1 ) ;
cout << "n = " << n << " k = " << k << endl ;
in
উপেরর মেলখেয়র ফলন নীেচ দখােনা হেলা। েত k এর মান আেরাপণ (assign)
করা হেলা 5। তারপর 100 যেহতু 5 ারা িবভাজ তাই 100 % k হেব যাহা বুলক
(Boolean) িহসােব ধরেল িমথ া, ফেল িতিনক অণুি য়ার (ternerary operator)
am
i n t paowagese = 0 , gunti = 5 ;
i f ( ! paowagese | | ++ gunti == 0 )
cout << " bipod " << endl ;
cout << " g unti = " << gunti << endl ;
১৩২
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 ;
১৩৩
অদরকারী শত েলা ছাড়া মেলখ (program) কমন হেব তা নীেচ দখােনা হেলা। যিদ
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 ;
5g
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 দরকার নই
else
cout << " tumi k i n c h i t socchol aso . " << endl ;
/ / >= 2500 দরকার নই
in
cout << " tumi j o t h e s t o socchol . " << endl ;
৭. যিদ িভ িভ বার চালােনার সময় ০, ১৫, বা ৭ যাগান (input) দয়া হয় তাহেল নী-
am
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 .
১৩৪
১৩৫
৯. িতনিট সংখ া যাগান (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 ; / / যাগান নাও
else 5g
boro = a , soto = b ;
boro = b , soto = a ;
i f ( boro < c )
//
//
//
a যিদ বড় হয় b এর চেয়
b যিদ বড় হয় a এর চেয়
cout << " boro " << boro << " " ;
cout << " soto " << soto << endl ;
হয় তাহেল সটা আেরা ছাট িকনা সটা পরী া করা হেয়েছ। ল কেরা 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 ;
১৩৬
১০. িতনিট সংখ া যাগান (input) িনেয় তােদর মেধ মােঝরিট ফলেন (output) দখাও।
//
ম হেলা a <= b < c
১১. িতনিট সংখ া যাগান (input) িনেয় তােদরেক উধ েম সািজেয় ফলন (output) দাও।
১৩৭
উপেরর মেলখেত থেম a ও b তুলনা করা হেয়েছ। তারপর c তােদর বড়িটর চেয়
বড় িকনা, নাহেল ছাটিটর চেয় ছাট িকনা পরী া করা হেয়েছ, আর তাও না হেল সিট
উভেয়র মাঝামািঝ। এভােব িতনিট সংখ ার ম জানা হেয় গেল তােদর মােনর উধ েম
(ascending order) ফলেন (output) দখােনা হেয়েছ। এিট যিদ নাহেলর (if else)
অ াি (nesting) ও মইেয়র (ladder) এক সােথ ব বহােরর চমৎকার উদাহরণ।
১২. গিণেত া ন র যাগান (input) িনেয় সটা থেক বণ মান (letter grade) ফলন
দাও। ধেরা ৯০ বা বশী হেল A, ৮০ বা বশী হেল B, ৭০ বা বশী হেল C, ৬০ বা বশী
হেল D, ৫০ বা বশী হেল E, আর তারও কম হেল F বণ মান পাওয়া যায়।
5g
cout << "bornoman A"
e l s e i f ( nombor >= 80)
cout << "bornoman B"
e l s e i f ( nombor >= 70)
cout << "bornoman C"
<< endl ;
<< endl ;
<< endl ;
in
e l s e i f ( nombor >= 60)
cout << "bornoman D" << endl ;
e l s e i f ( nombor >= 50)
am
উপেরর মেলখ পি ব াপার (switch cases) িদেয় করা স ব নয়, কারন এখােন >=
তুলনা ব বহার করেত হেব। পি ব াপার কবল সমান == তুলনায় ব বহার করা যায়।
al
১৩. একিট ি মাি ক (two dimensional) িব র ানা দওয়া আেছ, িব িট চারিট চতু-
ভােগর (quadrant) িঠক কানিটেত পড়েব িনণয় কেরা।
এই মেলখেত (program) আমরা কবল চতুভাগ (quadrant) িবেবচনা না কের বরং,
িব িট কান অে র ওপের িকনা, হেল ধনা ক িদেক না ঋণা ক িদেক, অথবা ানাংকের
মূল িব েত িকনা তাও িবেবচনা করেবা। য কান একিট দ িব র x বা y েটাই
আলাদা আলাদা ভােব ধনা ক বা ঋণা ক বা এই িতন রকম হেত পাের। কােজই
একসােথ িবেবচনা করেল আমরা মাট নয় রকম সমােবশ (combination) পােবা।
১৩৮
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)
5g
cout << " dhonatok y okkher opor " << endl ;
else i f ( y < 0)
cout << " r i n a t o k y okkher opor " << endl ;
in
else // y
cout << " sthananker mul bindu " << endl ;
am
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) দখােনা হেলা। য সংখ া িট যাগান (input) নয়া
হেব, স েলা অব ই -১০০ ও ১০০ এর িভতের হেত হেব। আমরা তাই আেগ পরী া
কের দখেবা। যিদ n1 বা n2 য কানিট −100 এর ছাট বা 100 এর বড় হয়, তাহেল
১৩৯
িট বাতা (error message) দিখেয় িবফল হেয় িনয় ণ ফরত যােব। খয়াল কেরা
আমােদর িক শত েলােক অথবা | | িদেয় যু করেত হেব।
cout << " sonkhya d u t i koto ? " ; / / যাচনা
i n t n1 , n2 ; c i n >> n1 >> n2 ; / / যাগান
int s , n ; / / ( থম পদ + শষ পদ ) আর পদসংখ া
s = n1 + n2 ;
i f ( n1 > n2 )
//
5g থম পদ + শষ পদ।
এবার আমরা জািন কান সমা র গমেণর সংখ া েলার যাগফল হেলা ( থম সংখ া +
শষ সংখ া) * পদসংখ া / 2। সংখ া েটা যাগান নয়ার সময় ব বহারকারী য কানিটেক
আেগ যাগান িদেত পাের, মােন কানটা বড় কানটা ছাট আমরা িনি ত থাকেবা না।
( থম সংখ া + শষ সংখ া) এই যাগফল s বর করেত এেত কান সম া হেব না, তেব
al
পদসংখ া n বর করেত গেল আমােদর জানেত হেব কানটা বড় কানটা ছাট। ধেরা ৭
আর ১৩ িনেজেদর সহ তােদর মেধ কয়টা সংখ া আেছ সটা বর করা যায় ১৩ - ৭ + ১
িহসাব কের, যখােন ১৩ হেলা বড় আর ৭ হেলা ছাট। তা n1 আর n2 এর িনেজেদর সহ
তােদর মােঝ মাট কয়িট সংখ া আেছ তা বর করেত আমােদর জানেত হেব কানিট বড়।
তা আমরা একিট যিদ নাহেল (if else) ব বহার কের দখেবা n1 > n2 িকনা, যিদ হয়
তাহেল পদসংখ া n1 − n2 + 1 আর যিদ না হয় তাহেল পদসংখ া হেব n2 − n1 + 1।
সবেশেষ যাগফল হেলা s ∗ n / 2 আমরা যটা ফলেন (output) দখােবা।
১৪০
েলা ৪ িদেয় িবভাজ হয় না, এ েলার কানিটই অিধবষ নয়। বাঁকী ৫০০ িট সাল ৪ িদেয়
িবভাজ । এেদর মেধ য েলা ১০০ িদেয় িবভাজ নয় যমন ১৯৯৬ এমন ২০িট ছাড়া বাঁকী
৪৮০ িট অিধবষ। আর ওই ২০িট সােলর মেধ য ১৫িট ৪০০ িদেয় িবভাজ নয় স েলা
অিধবষ নয়, আর বাঁকী ৪িট সাল য েলা ৪০০ িদেয় িবভাজ স েলা অিধবষ।
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) জ য রকেমর সাল সবেচেয় বশী স েলা িন-
5g
ণয় করেত সবেচেয় কম সংখ ক শত পরী ণ ব বহার করেত হেব। কােজই আমরা ১৫০০
সাল য েলা ৪ িদেয় িবভাজ নয় স েলােক থম শত পরী া কেরই বর করেত চাই-
বা। উপেরর মেলখ খয়াল কেরা, আমরা তাই কেরিছ। এরপের রেয়েছ য ৪৮০িট বছর
য েলা ৪ িদেয় িবভাজ িক ১০০ িদেয় িবভাজ নয়। আমরা এ েলােক ইবার শত পরী-
া কের বর করেত চাই। একটা শত হে ৪ িদেয় িবভাজ নাহওয়া কােজই থম শেতর
in
else িহসােব থাকেব সটা, আেরকিট শত হেলা ১০০ িদেয় িবভাজ না হওয়া। উপেরর -
মেলখেয়র যিদ নাহেল মইেত (if else ladder) দেখা else if িদেয় এটা করা হেয়েছ।
এরপর থােক ১৫ িট সাল য েলা ১০০ িদেয় িবভাজ িক ৪০০ িদেয় িবভাজ নয় এই
am
১৫ িট সাল, এ েলা িনণয় করা হেয়েছ আেরকিট else if লািগেয় অথাৎ মাট িতনিট শত
পরী ণ শেষ। আর সবেশেষ ৪০০ িদেয় িবভাজ সই সাল েলা এেসেছ সবেশেষর else
িদেয়, এ েলার জ িতনিট শত পরী ণই লেগেছ, কারণ শেষর শত িমথ া হেলই তা
এ েলা িনণীত হেব। তাহেল মাট শত পরী া লাগেলা কত েলা? ১৫০০ * ১ + ৪৮০ *
২ + ১৫ * ৩ + ৫ * ৩ = ২৫২০ িট। তুিম আেরা নানান ভােব চ া কের দখেত পােরা, এর
চেয় কম শত পরী া কের করেত পােরা িকনা! পারেব না!
al
i f ( bosor % 4 ! = 0 | |
( bosor % 100 == 0 && bosor % 400 ! = 0 ) )
cout << " odhiborsho noy " << endl ;
else
cout << " odhiborsho hoy " << endl ;
একই মেলখ আমরা যিদ নাহেল মই (if else ladder) ব বহার না কের িঠক উপেরর -
মেলখেয়র মেতা বুলক সংেযাজক (Boolean connective) ব বহার কের করেত পাির।
বুলক সংেযাজেকর আংিশক মূল ায়ন (partial evaluation) মেন আেছ? অথবা | | -
য কান একিট উপাদান (operand) সিত হেলই অ িট মূল ায়ন ছাড়াই আমরা ফলা-
ফল সত বেল ধের িনেত পাির। আর && এর ে য কান একিট উপাদান (operand)
িমথ া হেলই ফলাফল িমথ া বেল ধের নয়া যায়। কান সাল অিধবষ নয় যখন সালিট ৪
ারা িবভাজ নয় অথবা ১০০ ারা িবভাজ হেলও ৪০০ ারা িবভাজ নয় তখন। যিদর
সােথ শত িহসােব সিটই লাগােনা হেয়েছ দেখা। অ িদেক কান সাল অিধবষ হেত গেল
| | এর ফলাফল িমথ া হেত হেব, তারমােন বাম ও ডােনর উভয় উপাদান (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) ব বহার কেরা।
switch ( mash )
{
5g
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 ;
in
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 ;
am
১৮. কতটা বােজ সই সময় ঘ টায় যাগান (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 ;
১৪২
১৯. এমন একিট মেলখ (program) িলেখা যিট ১-৫ পয ম অ যায়ী পাঁচটা কামল
পানীেয়র (পািন, কাক, াইট, ফানটা, পপিস) নােমর তািলকা দখােব, তারপর -
5g
িমক ন র যাগান (input) িনেয় কামল পানীয়িটর নাম ফলেন (output) দখােব। আর
িমক ন রিট যিদ ১-৫ এর বাইের হয়, তাহেল স সং া একিট িট বাতা (error
message) দখােব। তুিম এই মেলখিট একবার পি ব াপার (switch cases) ব -
বহার কের আবার যিদ নাহেল (if else) ব বহার কের কেরা।
cout " t a l i k a " << endl ;
in
<<
cout << " 1 pani " << endl ;
cout << " 2 coke " << endl ;
cout << " 3 s p r i t e " << endl ;
am
c i n >> posondo ;
উপেরর মেলখেয়র (program) পি ব াপার (switch case) অংশিট যিদ নাহেল (if
else) ব বহার কের িলখেল নীেচর মেতা হেব।
১৪৩
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 ;
২০. একিট সংখ ার পুরক সংখ া িনণয় কেরা। সংখ াট এক অে র হেল তার পুরক সংখ ৯ এর
5g
সােথ িবেয়াগফল, ই অে র হেল ৯৯ এর সােথ িবেয়াগফল, িতন অে র হেল ৯৯৯ এর
সােথ িবেয়াগফল। িতেনর চেয় বশী অে র সংখ া যাগান (input) দওয়া হেব না।
i n t nombor , purok ;
c i n >> nombor ;
in
// িট আেগই সামলােনা হেলা
i f ( nombor < 0 | | nombor > 1000)
am
{
cout << " onakankhito " << endl ;
ret u rn EXIT FAILURE ;
}
২১. এমন একিট মেলখ (program) িলেখা যটা ৫ জন লাক যােদর িমক ১-৫ তােদর ক
কতটা কের পেরাটা খেয়েছ যাগান (input) িনেব। মেলখিট তারপর একজেন সেবা
কয়টা পেরাটা খেয়েছ সটা ফলেন (output) দখােব। আর কান লাক সেবা সংখ ক
পেরাটা খেয়েছ মেলখিট সটাও দখােব, তেব সেবা পেরাটা খাওয়া একািধক ব ি
থাকেল থমজেনর িমক ন র হেলই চলেব, পেরর জনেদর দরকার নাই।
আমরা পাঁচজন লােকর জ িবধােথ পাঁচিট চলক িনেবা p1, p2, p3, p4, p5। তা-
রপর যথাযথ ভােব যাগান যাচনা (input prompt) কের কান লাক কতিট পেরাটা
খেয়েছ সটা যাগান (input) িনেবা। তারপর আমােদর আেরা িট চলক লাগেব: একিট
১৪৪
i n t sorboccho
i f ( sorboccho
{ sorboccho
i f ( sorboccho
{ sorboccho
=
<
=
<
=
p1 ,
p2 )
p2 ;
p3 )
p3 ;
5g
kekheyese = 1 ;
kekheyese = 2 ; }
kekheyese = 3 ; }
in
i f ( sorboccho < p4 )
{ sorboccho = p4 ; kekheyese = 4 ; }
i f ( sorboccho < p5 )
am
{ sorboccho = p5 ; kekheyese = 5 ; }
খয়াল কেরা আমরা > ব বহার কেরিছ >= ব বহার কির নাই। এর কারণ এ পয সেবা
al
যতিট খাওয়া হেয়েছ তার সমান কউ যিদ পেরর কউ খেয়ও থােক, আমরা িক সই লা-
কিটেক ফলেন (output) দখােত চাইনা, বরং আেগর জনেকই দখােত চাই। তুিম যিদ
সেবা পেরাটা খেয়েছ এরকম কেয়ক জন থাকেল তােদর মেধ র শেষর জনেক ফল-
ন (output) দখােত চাও, তাহেল < বদেল <= কের িদেব। আর একিট ব াপার হেলা
অেনক সময় sorboccho আর kekheyese চলক িটর আিদমান ১মজেনর পেরাটা খা-
ওয়া িবেবচনা কের না িদেয় নীেচর মেতা কের বরং আমরা একটা ছাট সংখ া ধের নই,
তারপর ২য়, ৩য়, ৪থ, ৫ম লােকর মেতা ১ম জেনর জ ও একই রকম যিদ নাহেল ব বহার
কির। এেত সব লােকর জ িচ া করাটা একই রকম হয়।
/ / সেবা একটা ছাট মান , ক খেয়েছ সটা জািননা
i n t sorboccho = 0 , kekheyese = 0 ;
১৪৫
২২. একজন লাক াভািবক িনয়ম অ যায়ী স ােহ ৪০ ঘ টা কাজ কের, ৪০ ঘ টার বশী কাজ
করেল অিতির সময়টু র জ াভািবক িনয়েমর চেয় ১.৫ ণ মজুির পায়। কান এক
স ােহ লাকিট কত ঘ টা কাজ কেরেছ আর াভািবক িনয়েম ঘ টা িত মজুির কত তা
যাগান (input) িনেয় ওই স ােহ তার মাট মজুির কত তা ফলেন (output) দখাও।
f l o a t ghontaProti ; / / ঘ টা িত কত হার
f l o a t kotoGhonta ; / / কত ঘ টা কাজ
f l o a t motMojuri ; / / মাট মজুির কত
c i n >> kotoGhonta ;
5g
cout << " koto ghonta k a j : " ;
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 ;
২৩. ধেরা তুিম চার টুকেরা কাগজ িনেয়েছা। তামার ১ম টুকেরােত লখা আেছ ১, ৩, ৫, ৭, ৯,
১১, ১৩, ২য় টুকেরােত আেছ ২, ৩, ৬, ৭, ১০, ১১, ১৪, ১৫, ৩য় টুকেরােত আেছ ৪, ৫,
৬, ৭, ১২, ১৩, ১৪, ১৫, ৪থ টুকেরােত আেছ ৮, ৯, ১০, ১১, ১২, ১৩, ১৪, ১৫। তামার
১৪৬
মেলখ (program) ব বহারকারী মেন মেন একিট সংখ া ধরেব, আর সিট ১ম, ২য়,
৩য়, ৪থ টুকেরার কান কানিটেত আেছ যাগান (input) িদেব, তারপর তামার মেলখ
ব বহারকারী মেন মেন য সংখ ািট ধেরেছ সিট ফলেন (output) দখােব। এিট খুব সহজ
একিট ব াপার। য য টুকেরােত সংখ ািট আেছ ওই টুকেরা েলার থম সংখ া েলা যাগ
করেলই ব বহারকারীর সংখ ািট পাওয়া যােব। যমন ব বহারকারীর সংখ ািট যিদ ১, ৩, ৪
ন র টুকেরােত থােক তাহেল সংখ ািট ১ + ৪ + ৮ = ১৩।
5g
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 ;
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 ;
al
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 ;
১৪৭
িতিট if পরী া করেছ সংখ ািট ওই তােস আেছ িকনা, অথাৎ ব বহারকারীর দয়া উ র
সত িকনা, সত হেল ওই তােসর থম সংখ ািট তা আমরা জািনই, সটা sonkhya
চলেকর সােথ যাগ কের দয়া হেয়েছ। পিরেশেষ ফলন (output) ব বহারকারীর মেন
মেন ধের নয়া সংখ ািট দখােনা হেয়েছ।
• বুলক (Boolean)
• মই (ladder)
• অ াি (nested)
5g • অস িত (contradiction)
• নঞ মধ ম (excluded middle)
১৪৮
অধ ায় ৮
পুনািল পিরগণনা
(Iterative Programming)
5g
আমােদর জীবনটা এমন রামা কর নয় য একদম িতবারই তুিম অিভনব িকছু একটা করেব।
খয়াল কের দখেব তামােক ায়শই একই রকম কাজ বার বার করেত হে । তুিম হয়েতা এেত
একেঘঁেয়িম বাধ করেছা, িক িকছুই করার নই, নাক কান চাখ ব কের তামােক সই একই
কাজ বার বার কের যেত হেব, যত ণ না স েলা শষ হে । পুনািল পিরগণনায় (iterative
in
programing) আমরা িশখেবা কী কের বারবার একই কাজ কের যেত হয়।
িসিপিপ ভাষায় এমন একিট মেলখ (program) রচনা কেরা যিট একিট ধণা ক পূণক যাগান
(input) িনেয় ওই পূণেকর সমান সংখ ক বার ফলেন (output) "cpp" দখায়।
cout << " cpp cpp cpp cpp cpp " << endl ;
al
তামােক যিদ খুবই অ সংখ ক বার যমন মা ৫ বার ফলেন (output) িসিপিপ দখােত
বলা হয়, ব াপারটা িক তামার কােছ খুবই সহজ লাগেব। ফ উপেরর মেতা কের একটা cout
ব বহার কেরই তুিম ৫ বার িসিপিপ ফলেন দখােত পারেব। অথবা তুিম চাইেল িক নীেচর মেতা
কের েত কবার আলাদা আলাদা cout িদেয় একটা কের cpp আলাদা আলাদা কের মাট ৫ বার
ফলন িদেত পােরা। আর তারপর একটা endl দখােলই হেলা।
cout << " cpp " ;
cout << " cpp " ;
cout << " cpp " ; / / cpp এর পের একটা ফাঁকা
cout << " cpp " ;
cout << " cpp " ;
cout << endl ;
১৪৯
অত বশী বার আলাদা আলাদা কের cpp িলখেব? িন য় না! আর ি তীয় সম া হে কত বার
ফলেন cpp দখােত হেব সটা যিদ আমরা ব বহারকারীর কােছ থেক যাগান (input) িনই,
তাহেল সংখ াটা তা মেলখ রচনার সময় জানা থাকেছ না, তরাং ওই ভােব িঠক কত বারই বা
আমরা মেলখেয়র িভতের cpp িলখেবা? ব াপারটার তা কান রাহাই নই!
f o r ( i n t gu n t i = 1 ; gunt i <= 1000 ; ++ gunti )
cout << " cpp " ;
cout << endl ;
আমরা আেগ থম সম ািটর সমাধান দিখ। যিদ আমরা মেলখ (program) লখার সম-
য়ই জািন কতবার cpp দখােত হেব, আর সংখ ািট যিদ বশ বড় হয় তাহেল দেখা আমরা অিত
সংে েপ িঠক উপের দখােনা মেলখেয়র মেতা কত সহেজ ১০০০ বার িসিপিপ দিখেয় ফলেত
পাির! এখন কথা হে উপেরর মা এই িতনিট সাির কী ভােব ১০০০ বার cpp িলখেব?
তামােক খাতা কলেম িলখেত িদেল তুিম িনেজ কী করেব? তুিম হয়েতা ১ থেক ১০০০
পয এক এক কের ধারাবািহকভােব নেত করেব। আর যখনই একটা সংখ া উ ারণ করেব
5g
তখনই তুিম একবার cpp িলখেব। তুিম তা বুি মান মা ষ তাই তুিম জােনা য তামােক ১০০০
এ িগেয় থামেত হেব। িক গণিন (computer) যেহতু বাকা তাই স যটা কের িতবার ১
বািড়েয় পেরর সংখ াটা বেল আর তার সােথ সােথই পরী া কেরও দেখ ১০০০ হেলা কী না।
আসেল তুিম মা ষ িহসােব বুি মান হেলও মেন মেন তুিম িক িতবার সই একই কাজই কেরা,
অথাৎ পরী া কের দেখা ১০০০ হেয় গেলা নােতা, নাহেল ১ যাগ কের পেরর সংখ ায় চেল যাও!
in
উপেরর মেলখ (program) িঠক এই কাজটাই কের।
এবার for( int gunti = 1; gunti<=1000; ++gunti) অংশটু ল কেরা। আমরা
একটা চলক (variable) িনেয়িছ gunti যার আিদ মান (initial value) ১, আমরা ১ থেক ন-
am
ত করেবা, তারপর শত পরী া (condition check) কের দখেবা gunti এখেনা ১০০০
বা ছাট িকনা, আর শত সত হেল gunti এর মান এক বাড়ােবা। তেব এই শত gunti <=
1000 আর হালায়ন (update) ++gunti এই েয়র মেধ আসেল for এর নীেচ য িববৃ-
িত (statement) আেছ cout << "cpp "; সটা িনবাহ করেবা। আর gunti বাড়ােনার পের
আবার শত পরী া করেবা, শত সত হেল gunti আবার বাড়ােবা, ইেয়র মােঝ অিত অব ই
coutএর িববৃিতটা িনবাহ করেবা, এইটা বারবার করেত থাকেবা যত ণ শতটা সত আেছ। শত
al
িমথ া হেয় গেল িববৃিতটাও িনবাহ করেবা না, guntiও বাড়ােবা না, শত পরী ার পরপরই িনয় ণ
(control) চেল যােব ঘূণীর বাইের ধেরা এইে ে যখােন আেছ cout << endl; সখােন।
১৫০
কী চমৎকার না মা িতন সািরর মেলখ (program) কী ভােব বার বার একই কাজ কের
কত বড় একটা মেলখেয়র সমতুল কাজ কের দয়। ঘূণীর (loop) মুল িক এইখােনই।
এই পযােয় তুিম হয়েতা বলেত পােরা আিম ১ থেক ১০০০ বার না েন যিদ ০ থেক ৯৯৯ বার িন
তাহেল িক কাজ হেব। িন য় হেব কারণ ০ থেক ৯৯৯ পয েতা মাট ১০০০টা সংখ াই হয়। কউ
চাইেল ২ থেক ১০০১ পয ও নেত পাের, কারণ তােতও ওই ১০০০টা সংখ াই আেছ। আসেল
এই ে তা কত থেক আর কত ত িগেয় শষ সটা কান ব াপারই না, মুল ব াপার হেলা
মাট কতিট সংখ া আেছ তােদর মেধ ।
f o r ( i n t g u n t i = 1 ; gu n ti <= 1999 ; gu nti += 2 )
cout << " cpp " ;
cout << endl ;
তামােদর মেধ কউ কউ আবার বেল বসেত পােরা নাহ আিম ১ থেক এক এক কের বািড়েয়
১০০০ পয নেবা না, আিম নেবা ১ থেক ই ই কের বািড়েয় ১৯৯৯ পয । তােতও কান
সম া নাই ১, ৩, ৫, ..., ১৯৯৯ পয িক মাট ১০০০িট সংখ াই আেছ। আমরা িঠক উপের দিখ-
5g
য়িছ, এিট কী ভােব করেত হেব। তুিম চাইেল িক ৩ কেরও বাড়ােত পােরা, বা অ িকছু কেরও।
একটা ব াপার দেখা এক কের বাড়ােনার সময় ++gunti না িলেখ আমরা িক চাইেল gunti++
অথবা gunti += 1ও িলখেত পারতাম, একটু ধীর গিতর হেলও কাজ অ যায়ী সব েলা একই।
f o r ( i n t g u n t i = 0 ; gu n ti < 1000 ; ++ gunti )
in
cout << " cpp " ;
cout << endl ;
এবার একটা পূণ থা (custom) আেলাচনা কির। িসিপিপেত আমরা সাধারণ য কান
am
নিত কির ০ থেক। এিটর নানািবধ কারণ আেছ, কারণ েলা আমরা যথা সে পের জান-
বা। তেব মা া কথা বলেত পােরা সংখ া আসেল হয় থেক। তাহেল আমােদর নিত
হেব ০, ১, ২, ..., ৯৯৯ পয । িক এখােন য ১০০০িট সংখ া আেছ সিট বুঝােনার জ আমরা
শেত gunti <= 999 না িলেখ বরং িলখেবা gunti < 1000 যােত চােখ দেখ আমরা সহেজই
বুঝেত পাির য ১০০০ বার ঘূণীটা (loop) চলেব। তাহেল ধের িনেত পােরা আমরা সচরাচর িঠক
উপেরর মেতা কের ০ থেক ১০০০ এর ছাট পয ঘূণী িলখেবা, অ ভােব হয়েতা নয়।
al
তুিম িক চাইেল কত থেক হেব, কতবার ঘূণী চলেব, িত পােক কত কের বৃি হেব,
এসব িবষয় উপেরর মেতা কের চলক (variable) ব বহার কেরও করেত পােরা। আর চলেকর
মান আিদ আেরাপণ (initial assignment) করেত পােরা, কান ভােব িহসাব কের আেরাপণ
করেত পােরা, অথবা নীেচর মেতা কের যাগানও (input) িনেত পােরা। চলেকর মান যিদ যা-
গান নাও তাহেল বুঝেতই পারেছা আমরা আর মেলখ (program) রচনার সময় আেগ থেক
জািননা ঘূণী (loop) িঠক কতবার ঘুরেব, সটা জানা যােব কবল মেলখ িনবাহ (execute)
করার সময়। তরাং সই অেথ চলক ব ব ত এই ঘূ্ণী েলােক িঠক িব ারণ করা যােব না। খয়াল
১৫১
তাহেল সব িমিলেয় আমরা দখলাম জ ঘূণীেত (for loop) চারিট অংশ আেছ: আদ া-
য়ন (initialisation), শত (condition), হালায়ন (update), িববৃিত (statement)। এর
মেধ আদ ায়ন (initialisation), শত (condition), আর হালায়ন (update) থােক ( ) গাল
ব নী (round brackets) যুগেলর মেধ , আর ; িদিত (semicolon) িদেয় পৃথক করা থা-
5g
ক। এছাড়া ব নীর সামেন থােক for আর ব নীর পের থােক িববৃিত (statement)। আদ ায়ন
(initialisation) একবার ঘেট, তারপর শত, িববৃিত, হালায়ন এই িতনিট এই েম বার বার
ঘটেত থােক যত ণ শত সত হয়, আর শত িমথ া হেল ঘূণী (loop) শষ হেয় যায়।
f o r ( আদ ায়ন ; শত ; হালায়ন )
in
িববৃিত
am
এমন একিট মেলখ (program) রচনা কেরা যিট থেম ণীেত ছা সংখ া যাগান (input)
নেব। তারপর িতিট ছাে র গিণেত া ন র যাগান িনেয় ফলেন (output) ছা িটর ফলাফল
পাশ না ফল তা দখােব, যখােন পােশর মান ৫০ বা বশী।
al
১৫২
উপের মেলখেয়র (program) মুল অংশ দখােনা হেলা, আর নীেচ রেয়েছ মেলখিট
সংকলন (compile) কের চালােল (run) কমন যাগান-ফলন (input-output) হেত পাের
তার নমুনা। এখােন আমরা কবল মা িতনজন ছাে র জ মেলখিট চািলেয় ফলন দিখেয়িছ,
তুিম চাইেল আেরা বশী জেনর জে ও চালােত পােরা।
যাগান-ফলন (input-output)
chhatro sonkhya koto ? 3
5g
এবার আমরা মেলখিট (program) িবে ষণ কির। থেম ছা সংখ া কত সটার জ
যাচনা বাতা (prompt message) দিখেয় আমরা sonkhya চলক (variable) ঘাষণা কের
তােত ছা সংখ া যাগান (input) িনেয়িছ। তারপর আমরা জ ঘূণী (for loop) িলেখিছ যটা
in
চলেব suchok চলেকর মান ০ থেক sonkhya এর কম পয অথাৎ মাট sonkhya সংখ ক
বার। খয়াল কেরা িত পােক ঘূণীটায় কবল একটা সরল িববৃিত (simple statement) িনবাহ
(execute) করেলই হেব না, বরং িত পােক আমােদর দরকার অেনক েলা িববৃিত িনবাহ করা।
am
আমরা তাই {} বাঁকা ব নী (curly brackets) ব বহার কের একটা মহ া (block) িনেবা আর
তার িভতের দরকার মেতা যত েলা িববৃিত দরকার তা রাখেবা। এখােন বেল রাখা দরকার য
suchok চলকিট জ ঘূণীর (for loop) যখােন ঘাষণা করা হেয়েছ তােত এিট একিট ানীয়
চলক (local variable) যা কাযকর থাকেব কবল ওই মহ ার (block) িভতের।
মহ ার (block) িভতের আমরা যটা করেবা সটা হল েত ক ছাে র থেম িমক দিখেয়
al
১৫৩
মহ া (block) তরী করার দরকার নাই, করেলও সম া নাই, িক এ েলার একািধক ব বহার
করেল অব ই মহ া (block) তরী কের িনেত হেব। আমরা িক উপেরর মহ ায় িতিনক অণু-
ি য়া (ternery operator) সহ অ কেয়কিট সরল িববৃিত (simple statement) একসােথ
দিখেয়িছ। ঘূণীেত (loop) মহ া (block) ব বহােরর সােথ এটাও বেল রাখা দরকার য মহ ার
িভতের আবারও এক বা একািধক ঘূণী (loop) আমরা চাইেলই িলখেত পাির। তেব আমরা সই
আেলাচনা করেবা অ াি ঘূণী (nested loop) সংেগর সময়।
এমন একিট মেলখ (program) রচনা কেরা যিট একিট সমা র ধারার থম পদ a, সাধারণ
অ র d, ও পদ সংখ া n যাগান (input) িনেয় পদ েলােক নীেচর মেতা কের ফলন (output)
িদেব। খয়াল কেরা পদ েলা যাগ িচ িদেয় আর যাগফল সমান িচ িদেয় দখােনা হেয়েছ।
1 + 3 + 5 + 7 + 9 = 25
5g
আমরা জািন সমা র ধারার থম পদ a, সাধারণ অ র d হেল kতম পদ হল a + (k − 1)d,
আর n পেদর যাগফল হেলা n ∗ (2a + (n − 1)d)/2। তরাং একিট জ ঘূণী (for loop)
আমরা 1 থেক n পয চািলেয় কাজিট খুব সহেজই কের ফলেত পাির।
in
িফিরি ৮.৩: পািটগিণেতর ধারার সম া (Arithmetic Series Problem)
int a , d , n ; / / িতনিট চলক লাগেব
cout << " a d n koto ? " ; / / যাগান যাচনা কেরা
am
তেব উপেরর মেলখেয়র (program) ফলেনর (output) িদেক তাকােল একটা ছাট সম-
া দখেত পােব। একটু খয়াল করেল দখেব ফলেন একদম থম পদিটর সামেনও যাগ িচ
চেল এেসেছ, যিট আসেল চাওয়া হয় িন। এিট সমাধােণর উপায়ও খুব সহজ, একটা যিদ (if)
১৫৪
িঠক উপেরর এই মেলখিট িঠক মেতা ফলন (output) িদেলও এটা আসেল সেবা ম নয়।
কারণ যাগ িচ না দওয়ার ব াপারিট কবল থম পেদর জ , বাঁকী সব েলার জ যাগ দ-
খােত হেব। িক ওই শত পরী ণিট িতবার িতিট পেদর জ করেত হে , কারণ শত পরী-
5g
ািটেতা ঘূণীর িভতের রেয়েছ। আমরা যিদ শত পরী াটা এড়ােত চাই, তাহেল আমােদর বুঝেত
হেব য থম পদ ছাড়া বাঁকী পদ েলা একরকেমর, তােদর সবার সামেন যাগ িচ আেছ, কােজই
কবল তারাই ঘূণীর িভতের থাকেব। আর থম পদিটেক সে ে আলাদা কের ফলেত হেব।
নীেচর মেলখ (program) দেখা শত পরী ণ আর করেত হয় িন, কারণ ঘূণী চেলেছ 2 হেত n
পয । আর থম পদিট ঘূণীরও আেগ দখােনা হেয়েছ।
in
cout << a ; // থম পদিট ঘূণীর বাইের , এর সামেন যাগ নাই
am
যেহতু সমা র ধারার য কান েটা পেদর মেধ ব বধান d, আমরা তাই কবল আেগর পেদর
সােথ d যাগ কেরই পেরর পদ পেয় যেত পাির। তােত িতিট পদ িহসাব করেত কবল একটা
যাগ করেলই চলেব। এে ে আমরা t চলকিটেক ঘূণীর আদ ায়েন (initialisation) ঘাষণা
১৫৫
কের আিদ মান িদেত পাির থমপদিটর মােনর সমান। আর িত পােক আেগ t এর মান d পিরমান
বাড়ােনা হেব তারপর ফলন দওয়া হেব। াভািবক ভােব এই মেলখিট বশী দ হেয়েছ।
এবার একটু িভ আেলাচনা। জ ঘূণীর (loop) আদ ায়েন (initialisation) আমরা চাইেল
, িবিত (comma) িদেয় একািধক চলক ঘাষণা ও আিদ মান িদেত পাির। এই চলক েলা িক
ঘূণীর সােথ য িববৃিত (statement) বা মহ া (block) কবল সখােন ানীয় চলক (local
variable) িহসােব ব বহার করা যায়। কান চলকেক যিদ ঘূণীর িভতের ও বাইের উভয় ে
কান কারেণ দরকার হয়, সই চলকিটেক তাহেল ঘূণীর আেগই ঘাষণা (declare) কের ফলেত
হেব। আমরা স রকম একিট উদাহরণ দিখ নীেচ তেব এে ে আমরা যাগফলিটেক আর n ∗
(2a + (n − 1)d)/2 ব বহার কের করেবা না, বরং এিটেকও ঘূণী িদেয়ই করেবা, যিদও সটা
দ হেব না, ঘূণী ছাড়া িদেয় করেলই বরং দ (efficient) হেব।
int t = a , s = a ; / / থম পদ ও এক পেদর যাগফল।
{
t += d ;
s += t ;
cout << " + " << t ;
5g
f o r ( i n t k = 2 ; k <= n ; ++k ) / / ঘূণী 2 হেত n
িসিপিপ ভাষায় এমন একিট মেলখ (program) িলেখা যিট তামার মাধ িমক পরী ায় ১০ িট
িবষেয়র ন র যাগান (input) িনেব। তুিম যিদ িতিট িবষেয় ৫০ এর বশী কের পেয় থােকা
al
তাহেল তামার গড় ন র দখােব, আর যিদ য কান একিট িবষেয়ও ফল কের থােকা, তাহেল
বাঁকী িবষয় েলার ন র যাগান (input) নয়া বাদ িদেয়ই সরাসির ফলন (output) দখােব
অকৃতকায। এবার িভ একটা অব া িচ া কেরা যখােন তামােক সব েলা িবষেয়র ন র যাগান
িনেতই হেব, একটােত ফল করেল তুিম ফলেন অকৃতকাযও দখােব, তেব গড় ন র দখােব কবল
পাশ করা িবষয় েলার ন র িনেয়। এই নতুন মেলখিট (program) কমন হেব?
১৫৬
motnombor += nombor ;
}
দ সম া িটর থমিটর সমাধান উপের দখােনা হেয়েছ। তমন কিঠন িকছু নয়। একটা
জ ঘূণী (for loop) ব বহার করা হেয়েছ যিদ suchok নামক চলকিটর (variable) মান ০
থেক ১ কের বািড়েয় বািড়েয় ১০ এর কম পয চলেব। ঘূণীর িত পােক বাঁকা ব নীর (curly
5g
brackets) িভতের থেম কততম িবষেয়র ন র যাগান (input) িনেত চাই সটা যাগান যাচনা
(input prompt) করেবা, তারপর nombor নামক চলেক (variable) সিট যাগান িনেবা।
ল কেরা suchok এর মান ০ হেল আমরা িক ০তম িবষেয়র ন র কত তা জানেত চেয়িছ।
অথাৎ আমরা নেত কেরিছ ০ থেক। যাইেহাক nombor চলেক মান যাগান নওয়ার পের
in
আমােদর সটা motnombor চলেকর সােথ যাগ করার কথা, কারণ সবেশেষ আমরা গড় বর
করেত চাই। তেব ে বলা হেয়েছ ৫০ বা বশী হেল গড় বর করেত হেব, ৫০ এর কম হেল আর
যাগান (input) না িনেয় অকৃতকায দখােত হেব। এই অংশটু করেত আমরা যিট কেরিছ তা
হেলা if (nombor < 50) break; এই অংশটু িলেখিছ।
am
আমরা এই যিদ নাহেলেত (if else) suchok চলেকর (variable) মান পরী া করিছ ১০ এর
কম িকনা। যিদ াি (break) হেয় িনয় ণ ঘূণী থেক বর হেয় এেস থােক তাহেল suchok
চলেকর মান অব ই ১০ এর কম হেব, সেবা ৯ হেব। আর যিদ ঘূণীর সব েলা পাক শষ কের
এেস থােক তাহেল অব ই suchok এর মান ১০ বা বশী, কারণ ঘূণী (loop) চলার শতই তা
হেলা suchok চলেকর মান ১০ এর কম হেত হেব। তা if else এ suchok < 10 হেল আমরা
অকৃতকায দিখেয়িছ, আর নাহেল motnombor ক থেম ১০ িদেয় ভাগ কের গড় বর কের
তারপর সটা ফলেন (output) দিখেয়িছ।
একটা িবষয় খয়াল কেরা এখােন গড় ন রিট ভ ক (fractioner) হেব তাই সটা ধারণ
করার জ আমরা float ধরেণর চলক gornombor িনেয়িছ। আর motnomor ক ফ
১০ িদেয় ভাগ করেল আমরা আসেল কান ভ ক পােবা না, বরং কারণ েটা পূণেকর (integer)
ভাগফলও পূণক আমরা জািন। িক একিট পূণক ও একিট ভ েকর ভাগফল আবার একিট ভ ক।
তাই কৗশল িহসােব আমরা 10 না িলেখ িলেখিছ 10.0 যােত ভাগফল আেস ভ ক (fractioner)
িহসােব। আর একিট িবষয় খয়াল কেরা, suchok চলকিটেক আমরা িক for( int suchok =
0; suchok < 10; ++suchok) িলেখ ঘূণীর (loop) িভতের ানীয় চলক (local variable)
িহসােব ঘাষণা কির নাই। আমরা বরং suchok ঘাষণা কেরিছ ঘূণীর (loop) বাইের আর আিদ
১৫৭
মানও (initial value) িদেয়িছ ঘূণীর বাইের। এর কারণ হেলা suchok চলকিটেক যেহতু আমরা
জ ঘূণীর (for loop) বাইের যিদ নাহেলেত (if else) ব বহার করেত চাই, তাই এিটেক ঘূণীর
িভতের ঘাষণা করা যােব না, সে ে ঘূণীর বাইের সিট আর কাযকর থাকেব না বেল। তুিম িক
চাইেল কবল ঘাষণাটা ঘূণীর বাইের কের আিদমান দওয়াটা ঘূণীেতই করেত পারেত। আর একটা
িবষয়ও তাহেল ফাঁক তােল আমরা জানলাম সটা হেলা জ ঘূণীর (for loop) এর আদ ায়ন
(initialisation) অংেশ িকছু না থাকেলও কান সম া নই।
else
{
motnombor += nombor ;
5g
i f ( nombor < 50) f e l l h o i s e = true ;
in
motbishoy += 1 ;
}
}
am
if ( fellhoise )
cout << " o k r i t o k a r j o " << endl ;
else
{
f l o a t gornombor = motnombor / motbishoy ;
al
cout << " gor nombor " << gornombor << endl ;
}
আমােদর যিদ সব েলা িবষেয়র ন র যাগান (input) িনেতই হয়, তাহেল আমরা উপেরর
মেলখেয়র মেতা কের াি (break) ছাড়া িলখেবা। তেব কান একটা িবষেয়র ন র ৫০ এর
কম িছেলা িকনা সটা মেন রাখার জ আমরা এখােন বুলক (boolean) ধরেণর একিট চলক
fellhoise িনেয়িছ। এই fellhoise চলকিটর মান আিদেত false, কারণ তখনও আমরা একটা
িবষয়ও পরী া কির নাই। তারপর ঘূণীর িভতের খয়াল কেরা যিদ নাহেলেত (if else) ন র ৫০
এর কম হেল আমরা fellhoise চলেকর মান কের িদেয়িছ true। একািধক িবষেয়র মান ৫০ এর
কম হেল স েলার িতবােরই fellhoise চলেকর মান true হেব, িক ঘূণীর (loop) িভতের
fellhoise চলেকর মান false হওয়ার কান পথ নাই। কােজই ঘূণীর শেষ fellhoise চলেকর
মান true মােন হেলা এক বা একািধক িবষেয়র ন র ৫০ এর কম, আর fellhoise চলেকর মান
তখনও false থাকা মােন হেলা কান িবষেয়র ন রই ৫০ এর কম িছেলা না। fellhoise ধরেনর
বুলক চলক (boolean variable) য েলা আমরা ঘূণীর িভতের কান দ শত কখেনা সত
হেয়িছেলা িকনা মেন রাখেত ব বহার কির স েলােক বলা হয় পতাকা চলক (flag variable)।
১৫৮
(output) িদেব, যােত ওই ব বসায়ী ন র েলা খির ারেদর খাতার ওপর লাগােত পাের।
{
i f ( nombor % 13 == 0 ) / / ১৩ িদেয় িবভাজ হেল
continue ; / / পেররটােত চেল যাও
এই মেলখ (program) লখা খুবই সহজ। তামার েটা চলক (variable) shuru আর
shesh িনেত হেব। এই েটার মান তুিম ব বসায়ীর কােছ থেক যাগান (input) িনেব। তারপর
তুিম একিট জ ঘূণী (for loop) চালােব যিট nombor চলেকর মান shuru থেক shesh
পয এক এক কের বািড়েয় বািড়েয় যােব। আর ঘূণীর (loop) িভতের তুিম যিদ (if) ব বহার কের
পরী া কের দখেব nombor চলেকর (variable) মান ১৩ ারা িবভাজ িকনা। যিদ nombor
% 13 == 0 শত সত হয় তাহেল আমরা সখােন ওই ন র িডিঙেয় (continue) চেল যােবা
মােন আর িকছু না কের ঘূণীর পেরর পােক চেল যােবা, আর শত িমথ া হেল ওই পাক না িডিঙ-
য় পের যখােন ফলন (output) দওয়া হেয়েছ সটা করেবা। জ ঘূণীর (for loop) পাক
১৫৯
িডিঙেয় (continue) পেরর পােক যাওয়া মােন িঠক যখােন continue; লখা হেয়েছ সখান
থেক িনয় ণ (control) ঘূণীর হালায়ন (update) অংেশ ++nombor করেত চেল যােব, তার
ফেল nombor এর মান ১ বাড়েব, আর তারপর িনয়মা যায়ী এর পের শত পরী ণ (condition
checking), পেরর পােকর িববৃিত িনবাহ (statement execution), এই ভােব চলেত থাক-
ব। জ ঘূণীেত (for loop) িডঙােনার (continue) এর কাজ মূলত এতটু ই।
i n t shuru , shesh ; / / চলক েলার মান যাগান িনেত হেব
}
}
5g
/ / এই খােন আেরা এক গাদা িববৃিত থাকেত পাের।
/ / এক গাদা িববৃিত না থাকেল মহ া {} লাগেব না।
in
উপেরর মেলখ (program) দেখা। য কাজ িডঙােনা (continue) ব বহার কের আম-
রা স কেরিছলাম, সটা িডঙােনা (continue) ছাড়াই করা হেয়েছ। যেহতু ১৩ িদেয় িবভা-
am
জ না হেল আমােদর ন র েলা ফলেন (output) দখােত হেব, আমরা তাই শতটা উে িদ-
য় nombor % 13 != 0 িলেখই কাজিট কের ফলেত পাির। ১৩ ারা িবভাজ হওয়ার ে
তা আমােদর তাহেল আর িকছু করার নাই, তরাং িনয় ণ (control) আপনা আপিনই হালায়ন
(update) অংেশ চেল যােব। তারমােন বলেত গেল িডঙােনা (continue) একটা অদরকারী
িবষয়। তাহেল এইটা আেছই বা কন? একটা িবষয় খয়াল কেরা ১৩ ারা িবভাজ না হেল এই
ে আমােদর কবল একটাই কাজ, ন রটা ফলেন দখােনা। আমােদর এইটােক কান মহ ার
al
(block) িভতের রাখার দরকার নাই, যিদও আমরা উপের আমরা সটা রেখিছ। মহ া (block)
মূলত দরকার যিদ ওইখােন আমােদর এক গাদা িববৃিত িনবাহ (execute) করেত হয়। তা এই
িবশাল এক গাদা িববৃিত ক একটা যিদ (if) এর মহ ার িভতের ঢুিকেয় দওয়ার চেয় িডঙােনা
(continue) ব বহার কের মেলখ (program) িলখেল বুঝেত িবধা হয়।
তুিম দশতলা দালােনর ১ তলা থেক উে ালেক (elevator) কের দশ তলায় উঠেত ও নামেত
চাও। তা উে ালকেক এক তলা হেত আেরক তলায় যাওয়ার জ িতবার আলাদা কের িনেদশ
িদেত হয়। এবার এমন একিট মেলখ (program) রচনা কেরা যিট তামার হেয় উে ালকেক
এেকর পর এক উঠার ও তারপর নামার িনেদশ িদেব।
এই মেলখেয়র (program) উঠার অংশ তা খুবই সহজ। নীেচর মেলখ (program)
দেখা, মূলত জ ঘূণী (for loop) দখেব। ঘূণী tola চলেকর (variable) মান ১ হেত ৯ (বা
১০ এর কম) পয ১ বািড়েয় বািড়েয় চলেব আর িতবাের ফলেন (output) দখােব tola হেত
১৬০
tola + 1 এ উঠেত হেব অথাৎ কান পােক tola চলেকর মান ৪ হেল দখােব ৪ হেত ৫। তলা
৯ হেত ১০ এ উেঠ আর উঠেত হেব না তাই ঘূণী িক tola = 10 এর জ ঘুরেব না।
/ / নামার অংশ
cout << "nama shuru " << endl ;
5g
f o r ( i n t t o l a = 10 ; t o l a > 1 ; −−t o l a )
cout << t o l a << " hote " << t o l a−1 << endl ;
cout << "nama shesh " << endl ;
কােজই এইখােনও আমরা একটা ঘূণী (loop) ব বহার করেবা। এই ঘূণী চলেব tola চলেকর
মান ১০ হেত ২ (বা ১ এর বশী) পয , আর িতবাের tola চলেকর মান এক কমেব, অথাৎ জ
ঘূণীর (for loop) হালায়ন অংেশ ++tola না িলেখ িলখেবা −−tola। ব স হেয় গেলা।
এবার একটা খুচরা িবষয়। এখােন tola চলকিট (variable) আমরা ইবার ঘাষণা কের-
িছ, ই ঘূণীেত (loop) ইবার। যেহতু জ ঘূণীর (for loop) অংেশ চলক েলা ানীয় চলক
(local variable) িহসােব ঘাষণা (declare) করা হেয়েছ, সেহতু চলক িটর কাযকারীতা িক-
al
সংি ঘুণীর িভতেরই শষ। কােজই িতবার ঘািষত চলক আসেল নাম একই হেলও আলাদা
আলাদা চলক। তুিম যিদ কবল একবার চলক ঘাষণা কের কাজ সারেত চাও সটাও করেত পা-
রেব। থম ঘূণীরও (loop) আেগ int tola; িলেখ চলক ঘাষণা একবারই কের ফেলা আর
ঘূণী েটার আদ ায়ন (initialisation) অংেশ int tola = 1; না িলেখ ফ tola = 1; কের
দাও। তাহেল একই tola চলক উভয় ঘূণীেত ব ব ত হেলা।
জ ঘূণীেত (for loop) শত ফাঁকা রাখেল কী ঘেট? জ ঘূণীেত শত ফাঁকা রেখ এমন এক-
িট মেলখ (program) রচনা কেরা যিট দশিট ধনা ক পূণক (positive integer) যাগান
(input) িনেব। যিদ বা ঋণা ক (negative) পূণক যাগান দয়া হয়, সটা উেপ া করেব।
মেলখিট এরপর ধনা ক সংখ া দশিটর যাগফল ফলেন (output) দখােব।
নীেচর মেলখ (program) দেখা। এেত শত ফাঁকা রাখা হেয়েছ। আমরা gunti চলকিটেক
(variable) চাইেল জ ঘূণীেত (for loop) ঘাষণা (declare) করেত পারতাম, িক jogfol
১৬১
চলকিটেক অব ই ঘূণীর বাইেরই ঘাষণা করেত হেব। ঘূণীর (loop) িভতের দেখা যাগান
যাচনা (input prompt) কের ন র যাগান নয়া হেয়েছ। যাগান নয়া ন রিট যিদ বা
ঋণা ক হয় তাহেল পাক িডঙােত হেব তাই continue; দয়া হেয়েছ, আর ধনা ক হেল যাগফল
বাড়েব, আর নিতও বৃি (increment) পােব। নিতর মান বাড়ােনার পেরই আমরা একিট যিদ
নাহেল (if else) লািগেয় পরী া কের দখেত পাির gunti চলেকর মান ১০ হেলা িকনা। যিদ
হেয় থােক তাহেল আমােদর আর ঘূণী (loop) চািলেয় যাওয়া উিচৎ হেব না। আমরা তাই break
; লািগেয় ঘূণীেত াি িদেবা। আর gunti চলেকর (variable) মান ১০ না হেয় থাকেল পের
িনয় ণ (control) জ ঘূণীর (for loop) হালায়ন (update) অংেশ যােব, সখােন তা িকছু
হেব না, কারণ সিট ফাঁকা। তারপর শত (condition) অংেশ যােব, সখােনও ফাঁকা। িক একটা
িবষয় মেন রাখেব ফাঁকা শত মােন সব সময় সত অথাৎ এই ে for ( ; ; ) আর for (
; true ; ) একই কথা। যাই হাক শতা সত হওয়ায় পেরর পাক যথারীিত হেব। তুিম যিদ
কান কারেণ if (gunti >= 0) break; এই শত যু াি এই জ ঘূণীেত না দাও তাহেল
িক ঘূণী থেক বর হেয় যাওয়ার আর কান পথ রইেলা না। ওিদেক ফাঁকা শত তা সবসময় সত
রেয়েছ। এমতাব ায় এই ঘূণী (loop) অসীম সংখ ক বার ঘূরেত থাকেব।
for ( ; ; )
{
5g
i n t gunti = 0 , jogf ol = 0 ;
/ / শত ফাঁকা
in
cout << "nombor koto ? " ;
i n t nombor ; c i n << mombor ;
am
j o g f o l += nombor ; / / যাগফল
++ g un t i ; / / হালায়ন
al
য ঘূণী (loop) অসীম সংখ ক বার ঘুের, আর ঘূণী থেক বর হওয়ার কান েযাগ নাই, এ
রকম ঘূণীেক বলা হয় অসীম ঘূণী (infinite loop)। ফাঁকা শতা ছাড়াও অসীম ঘূণী তরী হেত
পাের, যিদ তামার শত এমন হয় য সটা সবসময় সত , যমন ধেরা gunti == gunti এই
শতিটও সবদা সত , কােজই এটাও অসীম ঘূণী তরী করেব। অসীম ঘূণী তরী হওয়া মােন এই
মেলখ কান িদনই থামেব না। মেলখেত (program) ঘূণী (loop) তরী করেলই আমােদর
তাই অিতির সতক থাকেত হয় যােত সটা কান ভােবই অসীম ঘূণী না হেয় যায়।
১৬২
এমন একিট মেলখ (program) রচনা কেরা যিট দশিট ধনা ক পূণক (positive integer)
যাগান (input) িনেব। যিদ বা ঋণা ক (negative) পূণক যাগান দয়া হয়, সটা উেপ া
করেব। মেলখিট এরপর ধনা ক সংখ া দশিটর যাগফল ফলেন (output) দখােব।
এই মেলখিট লখা একদমই সাজা। এখােন মূলত আমরা দখেত চাই য জ ঘূণীেত
(for loop) আদ ায়ন (initialisation) অংেশর পাশাপািশ হালায়ন (update) অংশও ফাঁকা
রাখা যায়। নীেচর মেলখ (program) দেখা। এখান আমরা েটা চলক (variable) gunti
আর jogfol িনেয়িছ। েটারই আিদ মান (initial value) , কারণ এখন একটা সংখ াও
যাগান (input) নয়া হয় িন, আর তাই যাগফলও এই অব ায় । চলক gunti ক তুিম
চাইেল অব আদ ায়ন (initialisation) অংেশও ঘাষণা কের আিদ মান িদেত পারেত যমন
for ( int gunti = 0; gunti < 10; ) িক চলক jogfol ক অব ই ঘূণীর (loop) বাইের
ঘাষণা করেত হেব, কারণ আমরা ফলন (output) দখােবা তা ঘূণীর বাইের।
i n t gunti = 0 , jog f ol = 0 ;
{
cout << "nombor koto ? " ;
i n t nombor ; c i n << mombor ;
5g
f o r ( ; g u n t i < 10 ; ) / / ফাঁকা হালায়ন
in
i f ( nombor <= 0 ) / / ধনা ক না হেল
continue ; / / পাক িডঙাও
am
j o g f o l += nombor ;
++ g un t i ; / / হালায়ন
}
উপেরর মেলখেয়র জ ঘূণীেত (for loop) আমরা কবল শেতর (condition) অংশিট
রেখিছ, মাট ন র ১০ িট হেলা িকনা তা পরী া করেত। ঘূণীর (loop) িভতের যাগান যাচনা
(input prompt) কের ন রিট যাগান (input) নয়া হেয়েছ। তারপর nombor চলেকর মান
যিদ বা কম হয় তাহেল continue; িদেয় পাক িডঙােত বলা হেয়েছ। ধনা ক সংখ া ছাড়া
অ রকেমর সংখ া আসেল আমরা উেপ া করেত চাই, এ কারেণ এ ব ব া।
আমরা জািন জ ঘূণীেত (for loop) continue; করেল িনয় ণ (control) সরাসির হা-
লায়ন (update) অংেশ চেল যায়। তা আমােদর এই ঘূণীেত হালায়ন অংশেতা ফাঁকা রেখিছ,
কােজই gunti চলেকর মান যা িছেলা তাই থাকেলা। ফেল আবার যাগান যাচনা কের ন র যাগান
নওয়া হেব। যত ণ বা তার কম কান সংখ া যাগান (input) দয়া হে তত ণ এইভােব
চলেত থাকেব gunti চলেকর মান বাড়েব না। এবার ধেরা ধনা ক ন রিট যাগান দয়া হেলা,
তাহেল nombor <= 0 এই শতিট িমথ া হেব, ফেল িনয় ণ (control) আর পাক িডঙােব না,
পেরর সািরেত িগেয় ন রিটেক jogfol এর সােথ যাগ করেব, আর gunti চলেকর (variable)
মানও এক বাড়েব। এই ভােব দশিট ধনা ক সংখ া হেলই কবল gunti চলেকর মান বেড় দশ
হওয়া স র আর তােত ঘূণী (loop) থেক বর হেয় যাওয়া স র, ঋনা ক সংখ া বা িদেয়
১৬৩
শত িমথ া করা স ব হেব না। তাহেল আমরা দখলাম ঘূণীর (loop) হালায়ন অংশেক ফাঁকা রেখ
শত সােপে হালায়ন করেত চাইেল সটা আমরা িববৃিত (statement) অংেশ িনেত পাির।
তেব একটা ব াপার এখােন রণ কিরেয় দয়া দরকার। ধেরা তেক খািতের ািম কের আমরা
কখেনাই ধনা ক সংখ া যাগান (input) না িদেয় কবলই বা ঋণা ক সংখ া যাগান িদেত
থাকলাম। এই অব ায় কী ঘটেব? তাহেল তা gunti চলেকর (variable) মান কখেনা বাড়েব
না, ফেল gunti < 10 শতিট িমথ া হওয়ার কান স াবনা থাকেছ না। এই অব ায় িক জ
ঘূণীিট (for loop) অসীম সংখ ক বার ঘুরেত থাকেব। য ঘূণী (loop) অসীম সংখ ক বার ঘুের,
আর ঘূণী থেক বর হওয়ার কান েযাগ নাই, এ রকম ঘূণীেক বলা হয় অসীম ঘূণী (infinite
loop)। অসীম ঘূণী তরী হওয়া মােন এই মেলখ কান িদনই থামেব না। ঘূণী (loop) তরী
করেলই আমােদর তাই সতক থাকেত হয় যােত সটা কান ভােবই অসীম ঘূণী না হেয় যায়।
যিদও এই মেলখেত (program) দশিট ধনা ক সংখ া যাগান (input) িদেয় িদেয় ঘূণী
থেক বর হওয়ার আমােদর েযাগ আেছ, তেব সটা কবল স ব যিদ যাগান দাতার (user
who is giving the input) সিদ া থােক আর আমরা তার ওপের আ া রাখেত পাির। তুিম
যিদ যাগান দাতার ওপের আ াশীল না হও তাহেল একটা কাজ করেত পােরা। সটা হেলা সেবা
++ chesta ;
j o g f o l += nombor ;
++ g un t i ; / / হালায়ন
}
i f ( g u n t i == 10)
cout << " j o g f o l " << j o g f o l << endl ;
else
cout << " sorboccho chesta shesh " << endl ;
উপেরর এই মেলখেত আমরা chesta নােমর আেরকিট চলক িনেয়িছ যিট িদেয় সবেমাট
কয়বার যাগান (input) দয়া হেলা সটা িহসাব রাখেবা। িতবার ন র যাগান দওয়া মা ই
chesta চলেকর (variable) মান এক বাড়েব, ন রিট ধনা ক, ঋণা ক, যাই হাক, এ
কারেণ এিট িক if (nombor <= 0) continue; এর আেগ দয়া হেয়েছ। আর chesta
১৬৪
চলেকর মান যােত ১৫ হওয়া পয ঘূণী ঘুের তাই আমরা এবার ঘূণীর (loop) শত অংশিট বদেল
িলেখিছ chesta < 15 && gunti < 10। এর মােন হেলা য কান একিট শত ভ হেলই ঘূণী
আর ঘুরেব না, কােজই ১৫ বােরর বশী চ া করা স ব হেব না, আবার ১০ িটর বশী ধনা ক
ন রও যাগান (input) দয়া স ব হেব না। তাহেল একটা ব াপার আমরা দখলাম, ঘূণীর শত
(condition) অংেশ আমরা চাইেল একািধক শত (condition) বুলক সংেযাজক (boolean
connectives) যমন এবং &&, অথবা | |, নয় ! িদেয় সংযু কের িদেত পাির। সবেশেষ দেখা
ঘূণীর (loop) বাইের আমরা যাগফল ফলন (output) িদেয়িছ যিদ gunti চলেকর মান ১০ হেয়
থােক। আর না হেয় থাকেল মােন ১৫ বােরর চ ায়ও ১০ িট ধনা ক সংখ া নয়া স ব হয় নাই
সে ে একটা বাতা (message) দখােনা হেয়েছ য সেবা চ া শষ হেয় গেছ।
এমন একিট মেলখ (program) িলেখা যিট থেক িত পােক ৩ কের বািড়েয় সেবা ১০
f o r ( i n t g u n t i = 0 ; gu n ti < 10 ; ++ gunti )
{
in
i f ( nombor % 7 == 0 ) / / ন র িদেয় াি
break ;
nombor += 3 ;
am
}
cout << nombor << endl ;
াি (break) ব বহার কের এই মেলখিট লখা বশ সহজ। ঘূণী (loop) gunti চলেকর
(variable) মান থেক দেশর কম পয চালাও আর িত পােক nombor চলেকর মান ৭
ারা িবভাজ হেলা িকনা পরী া কের দেখা। ৭ ারা িবভাজ হেল ঘূণীেত াি (break) দাও।
al
আর না হেল nomborএর মান ৩ বাড়াও। তুিম িক চাইেল এই একই কাজ নীেচর মেতা কেরও
করেত পােরা যখােন আমরা ঘূণী (loop) চািলেয়িছ nombor চলক ব বহার কের। ল কেরা
nombor চলেকর মান থেক কের িতবাের ৩ কের বাড়েব, আর ঘূণী চলেব যত ণ
nombor ৭ ারা িবভাজ নয় তত ণ, ৭ ারা িবভাজ হওয়া মা ঘূণী শষ হেয় যােব। িববৃিত
অংেশ দেখা আমরা gunti চলেকর মান ১০ বা বশী হেল ঘূণীেত াি (break) িদেয়িছ, আর
না হেল gunti চলেকর মান এক বাড়েব।
i n t nombor , gu n t i = 0 ; / / ন র িদেয় ঘূণী
f o r ( nombor = 0 ; nombor % 7 ! = 0 ; nombor += 3 )
{
i f ( g u n t i >= 10) / / নিত িদেয় াি
break ;
++ g un t i ;
}
cout << nombor << endl ;
১৬৫
5g
f o r ( g u n t i = 0 , nombor = 0 ;
g un t i < 10 && nombor % 7 ! = 0 ;
++ g un t i , nombor += 3 )
/ / আদ ায়ন
/ / শত
/ / হালায়ন
in
; / / ফাঁকা িববৃিত
cout << nombor << endl ;
তাহেল আমরা দখলাম, জ ঘূণীর (for loop) িববৃিতও (statement) ফাঁকা থাকেত পা-
am
সাধারণত জ ঘূণীর (for loop) চলকিটর (variable) মান আমরা িববৃিতেত (statement)
অথবা হালায়েন (update) পিরবতন কির। িক উভয় অংেশ পিরবতন করেল অব া কী দাঁড়ায়?
f o r ( i n t gu n t i = 0 ; gunt i < 10 ; ++ gunti )
{
cout << gu n t i << " " ;
i f ( g u n t i == 5 )
++ g un t i ;
}
cout << endl ;
উপেরর মেলখেত (program) আমরা জ ঘূণীর (for loop) চলক gunti এর মান
িববৃিত (statement) ও হালায়ন (update) উভয়খােন পিরবতন কেরিছ। হালায়েন িনয়িমত
১৬৬
পিররতন িহসােব এক কের বাড়েব িতবার, আর িববৃিতেত যিদ চলিত মান (current value)
হয় তাহেল এক বাড়েব। এর ফেল কী হেব? খয়াল কেরা gunti এর মান ৫ ছাড়া অ িকছু হেল
কবল হালায়ন অংেশ এক বাড়েব, িক gunti এর মান ৫ হেল, তখন িববৃিতেত if (gunti
== 5) শত সত হওয়ায় সখােন gunti এর মান এক বাড়েব, আবার হালায়েন তা আেরা এক
বাড়েবই। ফেল পেরর পােক যখন gunti চলেকর মান ফলেন (output) আসেব তখন সটা ৬
না হেয় ৭ হেব। কােজই নীেচ যমন দখােনা হেলা আমরা ফলেন ৬ দখেত পােবা না।
0 1 2 3 4 5 7 8 9
5g
িগেয় হেব ৫, ফেল আবার ফলেন ৫ দখােব। কােজই 0 1 2 3 4 5 কের একবার ৫ দখােনার
পের এই জ ঘূণী (for loop) তারপেরর িত পােকই কবল ৫ই দিখেয় যােব। আর এই ঘূণী-
ত (loop) বর হওয়ার কান উপায় নাই। কােজই এিট একিট অসীম ঘূণীেত (infinite loop)
পিরণত হেব। তুিম জােনা আমরা সবসময় চাই অসীম ঘূণী এিড়েয় যেত।
in
f o r ( i n t g u n t i = 0 ; gu n ti < 10 ; ++ gunti )
{
cout << gu n t i << " " ;
am
i f ( g u n t i == 5 )
−−g un t i ;
}
cout << endl ;
al
এমন একিট মেলখ (program) রচনা কেরা যিট ০ থেক ৯ পয িতিট অ েক কথায় িলখ-
ব। আর অ েলােক পরপর অে ই িলখেল য মেলখ হেতা তার সােথ তফাৎটা কমন দাঁড়ায়?
0 1 2 3 4 5 6 7 8 9
অ েলােক উপেরর মেতা কের পরপর অে ই িলখেল ব াপারটা তা খুবই সহজ। এই রকম
মেলখ (program) আমরা নীেচ দখালাম। একটা জ ঘূণী (for loop) চলক (variable)
onkoএর মান ০ থেক ৯ পয এক কের বািড়েয় যােব, আর িত পােক আমরা cout ব বহার
কের onkoটােক দখােবা। এখােন cout জােন কান অ েক কীভােব িলখেত হয়!
f o r ( i n t onko = 0 ; onko <= 9 ; ++okno )
cout << onko << " " ;
cout << endl ;
১৬৭
এবার অ েলােক যিদ অে না িলেখ আমরা কথায় িলিখ, তাহেল কী করেবা? এখােন যেহতু
আমরা ০ থেক ৯ পয অেনকবার কথায় িলখিছ, অেনেক তাই এখােন জ ঘূ্ণী (for loop)
ব বহার করেত উ ু হয়। ফেল তারা নীেচর মেতা কের মেলখ তরী কের। এখােন cout িক
কান অ েক কী ভােব িলখেত হেব তা জােননা, আমােদর তাই একিট পি ব াপার (switch
case) ব বহার কের িতিট অ েক আলাদা আলাদা কের বেল িদেত হেয়েছ।
f o r ( i n t onko = 0 ; onko <= 9 ; ++okno )
{
swtich ( onko )
{
case 0 : cout << " shunyo " ; break ;
case 1 : cout << " ek " ; break ;
case 2 : cout << " dui " ; break ;
case 3 : cout << " t i n " ; break ;
case 4 : cout << " char " ; break ;
5g
case 5 : cout << " panch " ; break ;
case 6 : cout << " soy " ; break ;
case 7 : cout << " shat " ; break ;
case 8 : cout << " aat " ; break ;
case 9 : cout << " noy " ; break ;
in
}
}
cout << endl ;
am
পােকর জ এই রকম আলাদা আলাদা িকছু করেত হয় না। যমন কথায় না দিখেয় অে দখা-
ল িক আমােদর জ ঘূণী ব বহার করেলই চলেতা কারণ cout ব বহােরর কারেণ িতিট অ
দখােনােত য িভ তা সটা আমােদর সরাসির সামলােত হয় না।
cout << " shunyo " ;
cout << " ek " ;
cout << " dui " ;
cout << " tin " ;
cout << " char " ;
cout << " panch " ;
cout << " soy " ;
cout << " shat " ;
cout << " aat " ;
cout << " noy " ;
cout << endl ;
১৬৮
//
5g
/ / ন র যাগান নাও
না হেল
নিত এক বাড়েব
in
j o g f o l += nombor ; // যাগফেলও যাগ হেব
}
}
am
উপেরর মেলখ (program) খয়াল কেরা। এখােন আমরা িকছু ন র যাগান (input)
িনেয় তােদর যাগফল বর করেত চাই। তেব কয়িট ন র যাগান িনেবা আমরা সটা আেগ থেক
জািননা । ব বহারকারী যত েলা ইে ন র যাগান িদেত থাকেব, যখন স আর কান ন র যাগান
al
িদেত চায় না তখন স একটা যাগান িদেয় সটা জানােব। আমরা তারপর কয়িট ন র যাগান
িনেয়িছ আর তােদর যাগফল কত সটা ফলেন (output) দখােবা।
তা এই মেলখিট (program) খুবই সহজ। আমরা একিট জ ঘূণী (for loop) িনেয়িছ,
িক এটােক আমরা কান চলেকর (variable) মান বািড়েয় বা কিমেয় ঘুরােবা না। আমরা মূলত
শতটা ব বহার করেবা ঘূণী (loop) তরীেত। িতনিট চলক (variable) nombor, gunti আর
jogfol নয়া হেয়েছ যােদর আিদমান (initial value) দওয়া হেয়েছ ঘূণীর বাইের। ঘূণীর পের
যেহতু gunti ও jogfol ফলেন (output) দখােনা হেব, তাই ও েলা অব ই ঘূণীর (loop)
বাইের ঘাষণা (declare) করেত হেব। িক nombor চলকিট ঘূণীর িভতের ঘাষণা ও আদ ায়ন
(initialisation) করা যেত পারেতা। যাইেহাক ঘূণীর িভতের ন রিট যাগান িনেয় যিদ না
হয় তাহেল নিত এক বািড়েয় যাগফেলর সােথ ন রিট যাগ করা হেয়েছ।
একটা িবষয় খয়াল কেরা আমােদর ঘূণীেত (loop) শত nombor != 0 অথাৎ nombor
এর মান ছাড়া অ িকছু হেল কবল ঘূণীর িববৃিত (statement) িনবািহত (execute)
হেব। তা থমবার আমরা তা অব ই ঘূণীর িভতের ঢুকেত চাই, িক nombor তা তখন
পয একটাও যাগান (input) নয়া হয় নাই। ঘূণীর িভতের যিদ আমােদর ঢুকেতই হয়, আমােদর
১৬৯
সে ে কান ভােব শত সত কের িদেত হেব, nombor চলকের আিদমান ছাড়া একটা িকছু
িদেয় রাখেত হেব। আমরা nombor এর আিদ মান িদেয়িছ 1, তুিম চাইেল ছাড়া অ য
কান িকছু িদেত পারেত। চলক gunti আর jogfol এর আিদমান তা ই িদেত হেব, সটা
বুঝেতই পারেছা, যেহতু তখনও আমােদর একটাও ন র যাগান নওয়া হয় নাই।
আসেল জ ঘূণীেত (for loop) শত পরী ণ হয় সাধারণত িববৃিতেত (statement) ঢুকার
আেগ, অথচ আমরা এখােন শত পরী া করেত চাই িববৃিত অংেশর পের, কারণ িববৃিতেত আমরা
য ন রিট যাগান িনেবা সটা আমরা পরী া করেত চাই পেরর পােক ঢুকার আেগ। পেরর পােকর
আেগ পরী ণ মােন আেগর পােকর পের আর কী! আর স কারেণ জার কের nombor চলেকর
আিদ মান 1 িদেয় থমবার শত সত বািনেয় আমরা খািনকটা চালািক কেরিছ!
জ ঘূণী (for loop) কত ভােব লখা যায়? এর মেধ িন য় বুেঝ ফেলেছা for ( ; ; ) জ ঘূণীর
ব নীর (brackets) িভতেরর িদিত (semicolon) ; েটা কবল আবি ক। তাহেল আদ ায়ন
িববৃিত
5g
(initialisation), শত (condition), হালায়ন (update) কত ভােব িব াস করা স ব?
f o r ( আদ ায়ন ; শত ; হালায়ন ) আদ ায়ন
f o r ( ; শত ; হালায়ন )
িববৃিত
in
উপের বামপােশ জ ঘূণীর (for loop) সাধারণ অব া দখােনা হেয়েছ, আর ডান পােশ
দখােনা হেয়েছ য চাইেলই আদ ায়ন (initialisation) অংশিট ঘূণীর (loop) বাইের িনেয় যা-
am
ওয়া যায়। তােত ফলাফল একই থাকেব। তেব তফাৎ অ একটুই আেছ সটা হেলা বামপােশর
আদ ায়েন যিদ চলক ঘািষত হয় সিট কবল ঘূণীর জ ানীয় চলক (local variable), তাই
ঘূণীর পের আর ব বহার করা যায় না। িক ডানপােশর আদ ায়েন যিদ চলক ঘািষত (variable
declaration) হয় সটা ঘূণীর (loop) পেরও ব বহার করা যােব। আমরা এর পের থেক আদ া-
য়ন (initialisation) ঘূণীর (loop) িভতেরই হয়েতা িলখেবা, তেব আেরকবার বেলই িদি চলক
ঘাষণার ব াপারিটেত কান সম া না থাকেল তুিম চাইেলই সিট ঘূণীর আেগই িলখেত পারেব।
al
এরপর উপের দেখা আমরা কী ভােব হালায়েনর (update) অংশট যথা ােন না িলেখ িব-
বৃিত (statement) সােথ িদেয় িদেয়িছ। এেত ঘূণীর (loop) ফলাফল একই থাকেব, কারণ িব-
বৃিতর পরপরই তা হালায়ন িনবািহত (execute) হেতা, এখেনা তাই হে । কােজই তুিম চাইেল
য কান সময় এইটা করেত পােরা। আমরা এরপের হালায়ন (update) যথা ােনই রাখেবা, এ
সং া ভদন েলা (variation) আর দখােবা না।
f o r ( আদ ায়ন ; ; হালায়ন ) f o r ( আদ ায়ন ; true ; হালায়ন )
{ {
১৭০
i f ( ! শত ) break ; i f ( ! শত ) break ;
িববৃিত িববৃিত
} }
f o r ( আদ ায়ন ; ; হালায়ন )
{
i f ( ! শত১ ) break ;
5g}
f o r ( আদ ায়ন ; ; হালায়ন )
{
i f ( ! শত১ ) break ;
in
i f ( শত২ ) িববৃিত i f ( ! শত২ ) continue ;
} িববৃিত
}
am
উপের দেখা িববৃিত অংেশ আমরা আেরকিট শত ব বহার কের িববৃিত িনবাহ কেরিছ। তা
আমরা চাইেল এখােন উপেরর ডান পােশর মেতা কের শত২ এর িবপরীত শত িদেয় পাক িডঙােত
(continue) পাির। তােত িববৃিত আর যিদ (if) এর অধীেন থাকেছ না। উদাহরণ েলার শত১ ক
যিদ আমরা িববৃিত অংেশ নািমেয় দই তাহেল আমরা যা পােবা তাও উপের দখােনা হেয়েছ।
f o r ( আদ ায়ন ; ; ) f o r ( আদ ায়ন ; ; )
al
{ {
i f ( ! শত১ ) break ; i f ( ! শত১ ) break ;
i f ( শত২ ) িববৃিত i f ( ! শত২ )
হালায়ন {
} হালায়ন
continue ;
}
িববৃিত
হালায়ন
}
সবেশেষ আমরা উপের একটু দিখ হালায়নটু (update) যিদ িববৃিত (statement) অংেশ
ঢুেক যায় তাহেল াি (break) আর িডঙােনার (continue) সােথ কী িমথি য়া ঘেট। িবেশষ
কের ডানপােশ দেখা শত২ সত না হেল আমােদর থেম হালায়েনর (update) কাজটু করেত
হেব, তারপর আমরা িডঙােত (continue) পারেবা। এর কারণ for(আদ ায়ন; ; ) এখােন যেহতু
১৭১
হালায়ন অংশটু ফাঁকা আর continue করেল াভািবক ভােব জ ঘূণীেত (for loop) হালা-
য়ন অংশটু েতই িনয় ণ (control) চেল যায়, সেহতু হালায়েনর কাজটু আমােদর continue;
এর আেগই সের ফলেত হেব। এ ছাড়া খয়াল কেরা হালায়েনর কাজটু আমরা িববৃিতর পেরও
কেরিছ, সটােতা াভািবক ভােবই হওয়ার কথা।
িসিপিপেত একিট মেলখ (program) িলেখা যিট ব বহারকারীর (user) কােছ থেক িট ধনা-
ক পূণক (positive integer) যাগান (input) িনেয় তােদর গির সাধারণ ণনীয়ক বা গসা
িনণয় করেব। এই মেলখিট তুিম ণ ঘূণী (while loop) ব বহার কের িলখেব।
িফিরি ৮.৭: িট সংখ ার গসা (HCF of Two Numbers)
i n t purnok1 , purnok2 ; / / চলক ঘাষণা
cout << " duto dhonatok purnork : " ; / / যাগান যাচনা
5g
c i n >> purnok1 >> purnok2 ; / / যাগান নয়া
cout << " gosagu : " << purnok2 << endl ; / / ভাজকই গসা
উপের দখােনা মেলখ (program) খয়াল কেরা। আমরা থেম চলক ঘাষণা (variable
declare) কের যাগান যাচনা (input prompt) কের পূণক (integer) িট যাগান (input)
িনেয়িছ। এরপর আমরা যিদ (if) লািগেয় শত পরী া কেরিছ, দেখিছ পূণক িটর য কানিট
বা তার কম িকনা। কারণ বা ঋণা ক সংখ ার জ আমরা গসা িনণয় করেবা না, সে ে
বরং আমরা িট বাতা (error message) দিখেয় মেলখ (program) ব থতার (failure)
সােথ শষ করেবা। এরপের রেয়েছ ঘূ্ণী (loop) িদেয় আমােদর গসা িনণেয়র মুল অংশটু ।
গসা িনণয় করেত গেল আমােদর থেম দ সংখ া িটর একিটেক িদেয় আেরকিটেক
ভাগকের ভাগেশষ বর করেত হয়। ভাগেশষ হওয়া মােন আমােদর আর ভাগ করেত হেব
১৭২
না, আর সে ে ভাজক য পূণকিট সিটই হেলা আমােদর গসা । তা খয়াল কেরা আমরা িক
purnok1 ক purnok2 িদেয় ভাগ কের ভাগেশষ িনেয়িছ vagshesh চলেক। এে ে আমরা
িসিপিপর % অ ি য়া ব বহার কের ভাগেশষ িনণয় কেরিছ। আমরা এখােন একিট নতুন ধরেণর
ঘূণী (loop) ব বহার কেরিছ যিট হেলা ণ ঘূণী (while loop)। এই ণ ঘূণীর শত দয়া হেয়েছ
vagshesh অথাৎ ভাগেশষ যত ণ সত (বা নয়) তত ণ ঘূণী (loop) চলেব। তুিম িক
চাইেল শত িহসােব (vagshesh) না িলেখ (vagshesh != 0) িলখেত পারেত, সটা একই কথা
হেতা। যাইেহাক শতিট সত না হেল অথাৎ vagshesh হেল ঘূণীর বাইের মহ ার (block)
{} পের দেখা আমরা purnok2 ক গসা িহসােব ফলন দিখেয়িছ।
এখন কথা হে ভাগেশষ না হেল আমােদর কী করেত হেব? সটা আমরা মহ ার
(block) িভতের িলেখিছ। আমােদর আেগর ভাজকিট হেব নতুন ভাজ , তাই আমরা থেম িলেখিছ
purnok1 = purnok2;, এেত িক আেগর ভাজ িট হািরেয় গেলা, আমােদর আসেল সিট আর
দরকার নাই। তারপর দেখা purnok2 = vagshesh; িলেখ আমরা ভাগেশষিটেক নতুন ভা-
জক িহসােব িনেয় িনলাম। তুিম িন য় বুঝেত পারেছা কন purnok1 = purnok2; আেগ আর
purnok2 = vagshesh; পের িলখেত হেয়েছ। যিদ উে াটা করা হেতা তাহেল িক purnok2
= vagshesh; এর কারেণ purnok2 যিট িকনা আমােদর নতুন ভাজ হেব সিটর মান হাির-
5g
য় যেতা, ফেল িঠক পরপরই purnok1 = purnok2; করেল আমরা য ভাজ িট পতাম সটা
আসেল vagsheshএরই মান। নতুন ভাজ ও নতুন ভাজক িঠক করার পের দেখা এবার আমরা
আবার ভাগেশষ িনণয় কেরিছ vagshesh = purnok1 % purnok2 িলেখ। এই ভাগেশষিট
হেল আমােদর ঘূণী (loop) থেক বর হেয় যেত হেব, আর না হেল আবারও ঘূণীর
in
(loop) মহ ার (block) িভতের যা আেছ তা করেত হেব। তা এই হেলা আমােদর মেলখ।
তুিম হয়েতা এবার করেত পােরা, আ া আমরা িক এই মেলখ জ ঘূণী (for loop)
িদেয় িলখেত পারতাম। কন নয়? উপের দেখা আমরা একই মেলখ জ ঘূণী (for loop)
ব বহার কের িলেখিছ, মূলত ণ ঘূণীর (while loop) বদেল জ ঘূণীটা (for loop) এখােন
দখােনা হেয়েছ। আদ ায়ন (initialisation) অংেশ আেছ থমবার ভাগেশষ িনণেয়র ব াপারটা,
শত অংেশ (condition) আেছ ভাগেশষ না হওয়ার শত যটা িকনা এখােন vagshesh
!= 0 িলখা হেয়েছ িক কবল vagshesh িলখেলও চলেতা। আর হালায়ন (update) অংেশ
আবার ভাগেশষ িনণেয়র অংশটু িদেয়িছ। জ ঘূণীর (for loop) নানান বাহার আমরা য েলা
দেখিছলাম তুিম স েলা এখােনও িনেজ িনেজ েয়াগ করেত পােরা।
এবার তাহেল করেত পােরা, জ ঘূণী (for loop) িদেয়ই যিদ এেতা র কাজ হয়
তাহেল ণ ঘূণীর (while loop) দরকার কী? সিত বলেত আসেল দরকার নাই। িসিপিপেত
জ ঘূণী (for loop) এতটাই শি শালী য আর কান ঘূণী দরকার নাই। তেব জ ঘূণীটা তবুও
বশীর ভাগ ে ম, গমন, ধারা ইত ািদর ে বশী ব বহার করা হয়, আর ণ ঘূণী ব বহার
করা সাধারণ ে । ণ ঘূণীেত (while loop) ঘূণীর অংশ িহসােব আদ ায়ন (initialisation)
নাই, তাই সরকম িকছু দরকার হেল ওই অংশটু েক রাখেত হেব ঘূণীরও আেগ। ণ ঘূণীেত
১৭৩
(while loop) হালায়ন (update) অংশও আলাদা কের নাই, কােজই সিট চেল যােব িববৃিতর
অংশ িহসােব। এর মােন তামােক অব ই িববৃিতর িভতের হালায়েনর কাজ কের িদেত হেব যােত
ঘূণীটা অসীম ঘূণীেত পিরণত না হয়। একটা িবষয় খয়াল কেরা শত থেমই িমথ া হেল ণ ঘূণী
(while loop) একবারও না ঘুরেত পাের, এটা অব জ ঘূণীর (for loop) জে ও সত ।
এই উভয় ঘূণী থেম শত পরী া কের, শত সত হেল তারপর ঘুরেত যায়। তামােক যিদ তম
একবার কাজ করেতই হয় সটা তাহেল ঘূণীর আেগ বা পের কের ফলেত হেব। গসা িনণেয়র
ে আমােদর যমন কমপে একবার ভাগেশষ করেতই হেব, যিট আমরা ণ ঘূণীেত (while
loop) ঘূণীর আেগই আর জ ঘূণীেত (for loop) আদ ায়েন (initilisation) কের ফেলিছ।
f o r ( আদ ায়ন ; শত ; হালায়ন ) আদ ায়ন
িববৃিত while ( শত )
িববৃিত+হালায়ন
5g
৮.১৫ উ র শেতর কর ঘূণী (Post-condition in Do Loops)
েটা ধনা ক পূণ সংখ ার গসা িনণেয়র মেলখিট (program) তুিম আেরকবার িলেখা, িক
এবার তুিম ণ ঘূণী (while loop) বা জ ঘূণী (for loop) ব বহার না কের তার বদেল ব বহার
in
করেব কর ঘূণী (do loop)। কর ঘূণী হেলা িসিপিপেত তৃতীয় ও শষ কােরর ঘূণী।
আমরা আেগর পােঠই এই মেলখিট (program) আেলাচনা কেরিছ ণ ঘূণী (while
loop) ব বহার কের, এখােন আেগ সিট আেরকবার একটু দেখ নই। purnok1, purnok2
am
চলক েটা তুিম ঘাষণা কের স েলােত ধনা ক সংখ া যাগান (input) িনেব। দরকার হেল
আেগর পাঠ থেক যাগান (input) নয়ার ও তারপর পূণক িট ধনা ক িকনা পরী া করার
ব াপারিট দেখ িনেত পােরা। তাহেল আমরা এবার গসা িনণেয়র মুল অংশটায় যেত পাির।
i n t purnok1 , purnok2 ; / / ধনা ক মান তুিম যাগান িনেব
i n t vagshesh = purnok1 % purnok2 ; / / ভাগেশষ িনণয়
al
cout << " gosagu : " << purnok2 << endl ; / / ভাজকই গসা
উপেরর এই মেলখিটর (program) ঘূণীটােক (loop) যিদ আমরা িব ার কির, মােন ঘূণী
না িলেখ েত ক পােক যা হেতা স েলা যিদ বার বার িলিখ তাহেল কমন হেতা সটা আমরা নীেচ
দখালাম। খয়াল কেরা থম ভাগেশষ িনণয়টা িক উপেরর ঘূণীর বাইের িছেলা, আর তারপর
নতুন ভাজ , নতুন ভাজক, আর আবার ভাগেশষ িনণেয়র িববৃিত েলা (statement) িছেলা ঘূণীর
িভতের, তাই ও েলা নীেচর িব ারেণ বারবার এেসেছ।
vagshesh = purnok1 % purnok2 ; / / ভাগেশষ িনণয়
১৭৪
এখন উপেরর এই িব ারণ দেখ কােরা মেন িক অ রকম কের ঘূণী লখার সাধ জাগেত
পাের। কউ হয়েতা বলেত পাের ঘূণীটা (loop) কন থম ভাগেশষ িনণয়েক বাদ িদেয়
হেয়েছ। ঘূণীটােতা বরং থম ভাগেশষ িনণয় থেকই হেত পারেতা। কথা সত , আর তাইেতা
i n t vagshesh ;
do
5g
আমােদর নতুন ধরেনর একিট ঘূণীর (loop) উ ব হেয়েছ, যিট হেলা কর ঘূণী (do loop)।
উপেরর মেলখ (program) খয়াল কেরা আমরা গসা িনণয় কেরিছ কর ঘূণী (do loop)
ব বহার কের। এখােন থমবার ভাগেশষ িনণয় করা হেয়েছ ঘূণীর (loop) িভতেরই। আর তার-
পর নতুন ভাজ ও নতুন ভাজক িনধারণ করা হেয়েছ। ঘূণীর শত পরী ণ তারও পের while (
vagshesh); যখােন লখা হেয়েছ সখােন। শত যিদ সত হয় তাহেল ঘূণীর পেরর পাক
হেব, অথাৎ িনয় ণ (control) লাফ িদেয় doএর পের য মহ া (block) {} হেয়েছ সখা-
ন চেল যােব। তেব একটা পূণ িবষয় এখােন উে খ করেত হেব এখােন সটা হেলা ফলেন
(output) িক এখন গসা purnok2 হেব না, বরং গসা হেব purnok1। এর কারণ হেলা
মহ ার িভতের vagshesh চলেকর মান হাক বা না হাক আমরা িক ভাজকটােক নতুন
ভাজ িহসােব ধের িনেয়িছ, ফেল purnok2 এর মান এখন purnok1এ আেছ।
তাহেল ণ ঘূণী (while loop) আর কর ঘূণীর (do loop) তফাৎ হেলা আেগরিটেত শত
পরী া পােক ঢুকার আেগ হয়, শত সত হেল পােক ঢুেক, আর পেররিটেত শত পরী া পাক শষ
কের হয়, শত সত হেল পেরর পােক ঢুেক। এর মােন কর ঘূণীর (do loop) থম পাক বাদ িদেল
ওইটা ণ ঘূণী (while loop) হেয় যেত পাের অথবা উে াটা।
১৭৫
এমন একিট মেলখ (program) তরী কেরা যিট ব বহারকারীেক িমক ন র অ যায়ী একিট
াপণ (menu) দখােব যাগ, িবেয়াগ, ণ, ভাগফল, বা ভাগেশষ কলন (calculate) করার
জ । ব বহারকারী যত ন েরর কলন করেত চাইেব তার জ িট পূণক (integer) যাগান
(input) িনেয় িহসাব কের ফলন (output) দখােব। ব বহারকারী যত ণ এেকর পর এক কলন
কের যেত চায় তুিম তত ণ াপণ দিখেয়, যাগান িনেয়, কলন কের যােব।
5g
cout << " 0 . ber hou " << endl ;
cout << " 1 . jog + " << endl ;
cout << " 2 . biyog −" << endl ;
cout << " 3 . gun ∗ " << endl ;
cout << " 4 . v a g f o l / " << endl ;
in
cout << " 5 . vagshesh %" << endl ;
i n t posondo ; / / পছ চলক
am
i f ( posondo == 0 ) / / পছ হেল
break ; / / ঘূণী থেক াি
১৭৬
/ / ফলন দখাও
cout << " f o l a f o l : " << f o l a f o l << endl ;
}
/ / িবদায় স াষণ
cout << "amake abar chalaben " << endl ;
উপেরর মেলখ (program) দেখা, আমরা একটা অসীম ঘূণী (infinite loop) িনেয়িছ
while (true) { } িলেখ তুিম চাইেল িক for ( ; ; ) { } িলেখ এমন িক do { } while
(true); িলেখও অসীম ঘূণী তরী করেত পারেত। অসীম ঘূণী তরী করেলই আমােদর অব ই
ঘূণীর (loop) িভতের কান ভােব ঘূণী থেক াি (break) দওয়ারও ব ব া রাখেত হেব।
যাইেহাক ঘূণীর (loop) িভতের দেখা আমরা থেম কত িমক ন র যাগান (input) িদেল
5g
কী করা হেব সিট দিখেয়িছ, যখােন ১ হেল যাগ, ২ হেল িবেয়াগ, ৩ হেল ণ, ৪ হেল ভাগ-
ফল, ৫ হেল ভাগেশষ, আর ০ হেল বর হেয় যাওয়া আেছ। ব বহারকারীর (user) পছ যাচনা
(prompt) কের posondo চলেক নয়া হেয়েছ। এবার দেখা posondo চলেকর মান ০ হেল
িনয় ণ (control) ঘূণী থেক break িদেয় াি িদেব, তাহেল অসীম ঘূণী (infinite loop)
in
আর হে না। আর posondo এর মান ০ না হেল তারপর আমরা পরী া কের দেখিছ সিট ১
এর কম বা ৫ এর বশী িকনা। যিদ সরকম হয় তাহেল এইরকম উ াপা া পছে র জ আসেল
আমােদর িকছু করার নই, আমরা কলন করেবা কবল ১ হেত ৫ পয িমক ন েরর জ । তাহ-
ল এই রকম ে আমােদর কলন করা বাদ িদেয় সরাসির পেরর পােক চেল যেত হেব, অথাৎ
am
আবার াপণ (menu) দিখেয় পছ যাগান িনেত হেব। আমরা এই কাজিট কেরিছ continue
ব বহার কের পাক িডিঙেয়। এরপের দেখ আমরা একিট পি -ব াপার (switch-case) ব বহার
কের পছ অ যায়ী ফলাফল কলন কেরিছ, তারপর ফলন (output) িদেয়িছ।
ণ ঘূণী (while loop) বা কর ঘূণীেত (do loop) াি (break) দয়া িঠক জ ঘূণীেত
(for loop) াি দয়ার মেতাই। িনয় ণ (control) ঘূণী (loop) থেক বর হেয় ঘূণীর বাইের
al
যা আেছ সখােন চেল যােব। তেব ণ ঘূণী (while loop) বা কর ঘূণীেত (do loop) পাক
িডঙােনার (continue) সােথ জ ঘূণীেত (for loop) পাক িডঙােনার (continue) িকি ত
তফাৎ আেছ। তফাৎটা হেলা continue এর পের জ ঘূণীেত (for loop) িনয় ণ (control)
হালায়ন (update) অংেশ চেল যায়। িক ণ ঘূণী (while loop) বা কর ঘূণীেত (do loop)
এ হালায়ন অংশেতা আলাদা কের নাই। হালায়ন সাধারণত িববৃিতর অংশ িহসােবই করা হয় যমন
িতবার এখােন posondo এর মান যাগান নয়া হেয়েছ।, কােজই িনয় ণ ণ ঘূণী বা কর ঘূণীর
ে সরাসির চেল যায় শত পরী া (condition) অংেশ।
এমন একিট মেলখ (program) িলেখা যিট একিট ধনা ক পূণক (positive integer) যা-
গান (input) িনেয় ১ থেক সই পূণক (integer) পয জাড় সংখ া েলা একিদেক আর িবেজাড়
সংখ া েলা আেরকিদেক যাগ করেব। এই মেলখেত (program) মূলত আমরা ঘূণীর (loop)
িভতের যিদ-নাহেল (if-else) ব বহার না করেত চ া করেবা।
১৭৭
উপেরর মেলখেত (program) আমরা থেম একিট ধনা ক পূণক (positive integer)
5g
যাগান (input) িনেয়িছ, তারপর জাড় সংখ া েলার যাগফেলর জ jorJogfol আর িবেজাড়
সংখ া েলার যাগফেলর জ bijorJogfol চলক (variable) িনেয়িছ। তারপর একিট জ
ঘূণী (for loop) চেলেছ চলক (variable) suchok এর মান ১ থেক পূণেকর মান পয । ঘূণীর
িভতের সূচক িবেজাড় হেল বা (suchok % 2 != 0) শত সত হেল সূচেকর মান bijorJogfol
এর সােথ যাগ হেব আর শত িমথ া হেল jorJogfolএর সােথ যাগ হেব।
in
উপেরর ওই মেলখ (program) আমােদর সিঠক ফলাফল িদেব তেব একটা িবষয় খয়াল
কেরা সূচেকর মান জাড় নািক িবেজাড় এইটা কন আমােদর ঘূণীর (loop) িত পােক (lap)
পরী া করেত হেব? এইটা তা আমরা আসেল আেগ থেক জািনই কান পােক সূচেকর মান জাড়
am
কান পােক সটা িবেজাড়। কােজই ঘূণীর (loop) িভতের য শত পরী ণ সটা আসেল আমােদর
অিতির হেয়েছ বেল মেন হে । এই রকেমর ে আমরা আসেল একটা ঘূূণীর (loop) বদেল
েটা ঘূণী িলেখ ফলেত পাির। নীেচ দেখা আমরা তাই কেরিছ। থম ঘূণীেত ১ থেক কের
িতপােক ২ কের বাড়েব, ফেল কবল িবেজাড় সংখ া েলাই হেব সূচেকর মান, আর ি তীয় ঘূণীেত
২ থেক কের িতপােক ই কের বাড়েব, ফেল কবল জাড় সংখ া েলাই হেব সূচেকর মান।
al
থম ঘূণীেত সূচেকর মান bijorJogfolএর সােথ আর ি তীয় ঘূণীেত সূচেকর মান jorJogfol
এর সােথ যাগ করা হেয়েছ। তা এই প িবভাজেনর ফেল আমােদর আর কান ঘূণীেতই (loop)
শত পরী া করেত হেলা না, অথচ একই ফলাফল পাওয়া গেলা।
cout << " dhonatok purnok " ;
i n t purnok ; c i n >> purnok ;
১৭৮
এবার একই রকেমর আেরকিট ব াপার দেখা নীেচর মেলখেত (program)। এিটেত সূ-
চেকর মান জাড় নািক িবেজাড় সটার ওপর িভি কের যাগ না কের, ঘূণীর (loop) িত পা-
ক একটা কের ন র যাগান (input) নয়া হেয়েছ। যাগান নয়া ন রিট যিদ জাড় হয় তাহেল
jorJogfolএর সােথ আর িবেজাড় হেল bijorJogfolএর সােথ যাগ করা হেয়েছ। এই মেল-
খেয়র (program) ঘূণীর (loop) িভতের থাকা যিদ-নাহেলেক (if else) চাইেলও েটা ঘূণীেত
িবভাজন করা স ব না। কারণ এখােন আমােদর আেগ থেক বুঝার উপায় নই যাগান নয়া ন রিট
জাড় হেব নািক িবেজাড় হেব! কােজই যিদ-নাহেল ঘূণীর িভতেরই থাকেব।
cout << " dhonatok purnok " ;
i n t purnok ; c i n >> purnok ;
}
i f ( nombor % 2 ! = 0 ) / / িবেজাড়
else / / জাড়
j o r J o g f o l += nombor ;
5g
b i j o r J o g f o l += nombor ;
in
cout << j o r J o g f o l << " " << b i j o r J o g f o l << endl ;
তারপর আেরা একিট একইরকম ব াপার দখা যাক। এখােন আমােদরেক purnok চলেকর
am
মান ১০এর কম হেল আমরা সূচেকর মান েলা sotoJogfolএ যাগ করেত চাই, আর purnok
চলেকর মান ১০ বা বশী হেল সূচেকর মান েলা boroJogfol পেত চাই। তা নীেচর ম-
লখেত (program) আমরা একটা ঘূণী (loop) ব বহার কের িলেখিছ, আর ঘূণীর িভতের রেয়-
ছ শত পরী া (purnok < 10)। শত সত হেল sotoJogfolএ যাগ আর শত িমথ া হেল
boroJogfolএ যাগ। এখােনও আমােদর একই রকেমর সম া, শত পরী ণ িক ঘূণীর (loop)
al
cout << sotoJogfol << " " << boroJogfol << endl ;
একটু খয়াল করেলই একটা িবষয় নজের আেস সটা হেলা purnok < 10 শতিট আসেল
কান ভােবই সূচেকর মােনর সােথ স িকত নয়, ফেল এই শত পরী ণ আসেল পােকর ওপর
িনভর কের না। তরাং আমরা চাইেল এই শতিটেক ঘূণীর (loop) বাইের িনেয় যেত পাির।
১৭৯
নীেচর মেলখ (program) খয়াল কেরা আমরা তাই কেরিছ। ঘূণীেত যাওয়ার আেগই আমরা
শত পরী া কেরিছ। শত (purnok < 10) সত হেল আমরা একটা ঘূণীেত sotoJogfol িনণয়
কেরিছ, আর শত িমথ া হেল আেরকিট ঘূণীেত (loop) boroJogfol িনণয় কেরিছ।
i n t purnok ; c i n >> purnok ; / / চলেকর মান যাগান
i n t sotoJogfol = 0 , boroJogfol = 0 ;
cout << sotoJogfol << " " << boroJogfol << endl ;
5g
উপেরর এই মেলখেত (program) শত মা একবার পরী া হেলা, িতপােক একই শত
বারবার পরী া করার ব াপার আর রইেলা না। কােজই আমােদর মেলখ খািনকটা দ হেয়
গেলা, এটা চালােত সময় কম লাগেব, িঠক যটা আমরা করেত চেয়িছলাম।
in
৮.১৮ অ াি াধীন ঘূণী (Nested Independent Loops)
এমন একিট মেলখ (program) িলেখা যিট একিট ই-মা ার ছেকর বগ েলার িমক ন র
am
নীেচর মেতা কের িলখেব। খয়াল কেরা আিড়র (row) ম ১ থেক ৪, িক খািড়র (column)
ম উে া িদেক ৪ থেক ১। এই মেলখ (program) তুিম েটা অ াি াধীন ঘূণী (nested
independent loop) ব বহার কের অথাৎ ঘূণীর িভতের ঘূণী ব বহার কের িলখেব। চাইেল
জ ঘূণী (for loop), ণ ঘূণী (while loop), কর ঘূণী (do loop) ব বহার করেত পােরা।
( 1 , 4) ( 1 , 3) ( 1 , 2) ( 1 , 1)
al
( 2 , 4) ( 2 , 3) ( 2 , 2) ( 2 , 1)
( 3 , 4) ( 3 , 3) ( 3 , 2) ( 3 , 1)
( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1)
তা চেলা আমরা থেম এই মেলখিট (program) জ ঘূণী (for loop) িদেয় িলিখ।
থেম চেলা আমরা থম আিড়র (row) িদেক নজর দই (1,4) (1,3) (1,2) (1,1)। এই
আিড়েত চারিট িমক দখােনা হেয়েছ, িতিট িমেক িট কের সংখ া আেছ, থমিট আিড়
ন র, আর ি তীয়িট খািড় (column) ন র। তা সব েলা িমেকর আিড় ন রই 1, কবল খািড়
ন র বদেল গেছ 4 থেক কের 1 পয , িতবার 1 কের কমেব। কােজই আমরা ঘূণী (loop)
চালােবা কবল খািড়র জ আর আিড়ন রিট েত ক ে সরাসির ফলেন (output) দখােবা।
f o r ( i n t k h a r i = 4 ; k h a r i >= 1 ; −−k h a r i )
cout << " ( " << 1 << " , " << k h a r i << " ) " ;
১৮০
আমােদর য ফলন (output) িদেত বলা হেয়েছ সখােন যেহতু চারিট আিড় (row) আেছ,
সেহতু উপেরর মেলখেয়র (program) মেতা ঘূণী (loop) আমরা চারবার িলখেলই কাি ত
ফলন (output) পেয় যােবা। তেব িতটা ঘূণীেত কবল আিড় ন েরর জায়গায় নীেচর মেতা কের
1এর বদেল 2, 3, 4 িলেখ িনেত হেব। আর িতিট আিড়র পের পেরর আিড়েত ফলন (output)
যাওয়ার জ আমােদর cout << endl; িলখেত হেব।
for ( i n t khari = 4 ; k h a r i >= 1 ; −−k h a r i )
cout << " ( " << 1 << " , " << k h a r i << " ) " ;
cout << endl ;
for ( i n t khari = 4 ; k h a r i >= 1 ; −−k h a r i )
cout << " ( " << 2 << " , " << k h a r i << " ) " ;
cout << endl ;
for ( i n t khari = 4 ; k h a r i >= 1 ; −−k h a r i )
cout << " ( " << 3 << " , " << k h a r i << " ) " ;
cout << endl ;
for ( i n t khari =
cout << " ( "
cout << endl ;
5g
4 ; k h a r i >= 1 ; −−k h a r i )
<< 4 << " , " << k h a r i << " ) " ;
(block) িভতের থাকেব আমােদর আেগর লখা ঘূণীটা যটা খািড়র জ ঘুের। মহ া (block)
ব বহার করেত হেলা কারণ একটা ঘূণী আর একটা cout মাট েটা িববৃিত (statement) িনবাহ
করেত হেব িতিট আিড়র জ । আর খািড়র জে লখা িভতেরর ঘূণীটােত যখােন আিড়র ন র
1, 2, 3, 4 সরাসির িলেখ িদেয়িছলাম, এবার সখােন ari চলক িলেখ িদেলই হেয় গেলা।
f o r ( i n t a r i = 1 ; a r i <= 4 ; ++ a r i )
al
{
f o r ( i n t k h a r i = 4 ; k h a r i >= 1 ; −−k h a r i )
cout << " ( " << a r i << " , " << k h a r i << " ) " ;
cout << endl ;
}
এবার চেলা এই মেলখিটই (program) জ ঘূণী (for loop) ব বহার না কের আমরা
ণ ঘূণী (while loop) ব বহার কের িলেখ ফিল। তেব আিড় ও খািড় সংখ া িনিদ কের ৪
ধের না িনেয় আমরা এখােন ariSonkhya ও khariSonkhya নােম েটা চলক (variable)
ব বহার করেবা, যার মান তুিম চাইেল যাগান (input) িনেত পােরা। জ ঘূণী (for loop) থেক
ণ ঘূণী (while loop) লখা তা তমন কিঠন িকছু নয়। জ ঘূণীর (for loop) আদ ায়ন
(initialisation) অংশটােক ণ ঘূণীর (while loop) আেগ িলেখ ফেলা, আর জ ঘূণীর
হালায়ন (update) অংশটােক ণ ঘূণীর িববৃিত (statement) অংেশর শেষ িদেয় দাও। তুিম
চাইেল একটা ঘূণীেক জ ঘূণী রেখ আেরকটােক ণ ঘূণী কের িদেত পােরা। তা ছাড়া তুিম
চাইেল জ বা ণ ঘূণী বাদ িদেয় কর ঘূণীও (do loop) ব বহার করেত পােরা।
১৮১
i n t ariSonkhya = 4 , khariSonkhya = 4 ;
int ari = 1 ;
while ( a r i <= ariSonkhya )
{
i n t k h a r i = khariSokhya ;
while ( k h a r i >= 1 )
{
cout << " ( " << a r i << " , " << k h a r i << " ) " ;
−−k h a r i ;
}
cout << endl ;
++ a r i ;
}
5g
৮.১৯ অ াি িনভরশীল ঘূণী (Nested Dependent Loop)
in
ঘূণীর (loop) িভতের ঘূণী অথাৎ অ াি ঘূণী (nested loop) ব বহার কের এমন একিট ম-
লখ (program) িলেখা যিট নীেচর মেতা ফলন (output) িদেব। এইে ে িভতেরর ঘূণীিট
বাইেরর ঘূণীর ওপের িনভরশীল হেব: িভতেরর ঘূণীর সূচেকর মান বাইেররিটর সূচেকর মােনর
am
সােথ স িকত হেব। তুিম িতন রকম ঘূণীর (loop) য কানিটই ব বহার করেত পােরা।
( 1 , 1)
( 2 , 2) ( 2 , 1)
( 3 , 3) ( 3 , 2) ( 3 , 1)
( 4 , 4) ( 4 , 3) ( 4 , 3) ( 4 , 1)
al
আমরা থেম নীেচর মেতা কের েটা অ াি াধীন ঘূণী (nested independent loop)
িলেখ ফলেত পাির যটা আমরা িঠক আেগর পােঠই িশেখিছ। আেলাচনার ধারাবািহকতা বুঝার
জ তুিম চাইেল আেগর পাঠিট একটু দেখ িনেত পােরা। এখােন বাইেরর ঘূণী (loop) ৪ বার
চলেব, আর তার িত পােকর জ িভতেরর ঘূণীটাও ৪ বার চলেব।
f o r ( i n t a r i = 1 ; a r i <= 4 ; ++ a r i )
{
f o r ( i n t k h a r i = 4 ; k h a r i >= 1 ; −−k h a r i )
cout << " ( " << a r i << " , " << k h a r i << " ) " ;
cout << endl ;
}
েটা অ াি াধীন ঘূণী (nested independent loop) লখার ফেল আমরা য ফলন
(output) পােবা তা নীেচর বাম পােশর মেতা। খয়াল কের দেখা ছেকর িতিট আিড়েত (row)
িতিট খািড়েতই (column) সংি বেগর িমক ন র লখা হেয়েছ। এখন এটার সােথ আমােদর
এই পােঠ য ফলন (output) চাওয়া হেয়েছ (ডান পােশরিট) তা িমলাও।
১৮২
( 1 , 4) ( 1 , 3) ( 1 , 2) ( 1 , 1) ( 1 , 1)
( 2 , 4) ( 2 , 3) ( 2 , 2) ( 2 , 1) ( 2 , 2) ( 2 , 1)
( 3 , 4) ( 3 , 3) ( 3 , 2) ( 3 , 1) ( 3 , 3) ( 3 , 2) ( 3 , 1)
( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1) ( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1)
এবার একটা ব াপার খয়াল কেরা য ডান পােশর য ফলন (output) চাওয়া হেয়েছ সখােন
ত ক আিড়েত (row) এমন একটা ঘর থেক লখা হেয়েছ যখােন আিড় (row) আর খািড়
(column) সমান, যমন (1,1), (2,2), (3,3), (4,4)। খািড়র িমক আিড়র িমক থেক বড়
হেল সই ঘের িকছু দখােনা হয় নাই। তা এটার জ আমরা আমােদর মেলখেত (program)
কবল িভতেরর ঘূণীিট (loop) িকি ত বদেল িনেবা। িভতেরর ঘূণীিট আেগ িছেলা for ( int
khari = 4; khari >= 1; −−khari), এখন সখােন নীেচর মেতা কের আিদমান 1 এর
বদেল ari িলেখ িদেবা। এর ফেল িভতেরর ঘূণীিট আর াধীন থাকেলা না, কারণ এিট কতবার
ঘুরেব সটা িনভর করেব বাইেরর ঘূণীেত ari এর মান কেতা তার ওপর।
f o r ( i n t a r i = 1 ; a r i <= 4 ; ++ a r i )
{
5g
f o r ( i n t k h a r i = a r i ; k h a r i >= 1 ; −−k h a r i )
cout << " ( " << a r i << " , " << k h a r i << " ) " ;
cout << endl ;
in
}
উপেরর এই মেলখিটর (program) ফেল আমরা য রকম ফলন পােবা সিট নীেচর বাম
পােশর মেতা, িক আমরা য ফলন (output) পেত চাই তা ডান পােশর মেতা।
am
( 1 , 1) ( 1 , 1)
( 2 , 2) ( 2 , 1) ( 2 , 2) ( 2 , 1)
( 3 , 3) ( 3 , 2) ( 3 , 1) ( 3 , 3) ( 3 , 2) ( 3 , 1)
( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1) ( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1)
al
খয়াল কেরা এখনও িঠক হেয় ওেঠ িন। যথাযথ ভােব ফাঁকা িদেলই হেয় যােব। তা ফাঁকা
দওয়ার ে খয়াল কেরা আমরা ১ম আিড়েত ফাঁকা িদেয়িছ ৩িট, ২য়িটেত ২িট, ৩য়িটেত ১িট,
৪থিটেত ০িট। অথাৎ ari এর মান অ যায়ী 4−ari সংখ ক ফাঁকা িদেয়িছ। অথবা বলেত পােরা ৪
থেক গানা ও ফাঁকা িদেত কেরিছ, িক ariর চেয় বড় সংখ া পয ফাঁকা িদেয়িছ, আর সমান
হেল তা ঘেরর ানাংক দখােনা কেরিছ। তাহেল সব িমিলেয় আমরা নীেচর মেলখেয়র
(program) মেতা কের আেরকিট ঘূণী (loop) ব বহার করেত পাির ফাঁকা দওয়ার জ । এই
ঘূণীিটও কত বার ঘুরেব, সটা িক বাইেরর ঘূণীর ওপর িনভর করেব।
/ / িত আিড়র জ একটা কের পাক।
f o r ( i n t a r i = 1 ; a r i <= 4 ; ++ a r i )
{
/ / িত আিড়েত থেম ফাঁকা দওয়ার জ
f o r ( i n t k h a r i = 4 ; k h a r i > a r i ; −−k h a r i )
cout << " " ; / / মালার িভতের ছয়িট ফাঁকা
১৮৩
f o r ( i n t k h a r i = a r i ; k h a r i >= 1 ; −−k h a r i )
cout << " ( " << a r i << " , " << k h a r i << " ) " ;
cout << endl ;
}
তুিম অব চাইেল কবল এই সম ািটর ে িভতেরর ঘূণী িটেক ঘূণী যিদ িমথি য়া
(Loop and If interaction) িবেবচনা কের একটা ঘূণী িদেয়ই সারেত পারেত। কারণ িভতেরর
িট ঘূণী িমিলেয় তা 4 হেত 1 নিত চেল, khariর মান ari হেত বড় হেল ফাঁকা দখােনা হয়
আর না হেল ঘেরর ানা দখােনা হয়। তরাং একটা যিদ-নাহেল (if else) লাগােলই হেব।
f o r ( i n t a r i = 1 ; a r i <= 4 ; ++ a r i )
{
f o r ( i n t k h a r i = 4 ; k h a r i >= 1 ; −−k h a r i )
i f ( khari > ar i )
cout << " ";
}
else
5g
cout << " ( " << a r i << " , " << k h a r i << " ) " ;
cout << endl ;
in
৮.২০ গভীর অ াি ঘূণী (Deeply Nested Loops)
am
ঘূণীর (loop) িভতের ঘূণী তার িভতের ঘূণী ব বহার কের িতনিট সংখ া 1, 2, 3 এর িব াস
(permutation) ফলন (output) দাও। িব াস েলােত একই সংখ া বারবার ব বহার করা
যােব হেল কী করেব, আর একই সংখ া এেকর অিধকবাব ব বহার না করা গেল কী করেব?
f o r ( i n t x = 1 ; x <= 3 ; ++x )
f o r ( i n t y = 1 ; y <= 3 ; ++y )
al
f o r ( i n t z = 1 ; z <= 3 ; ++z )
cout << x << " " << y << " " << z << endl ;
1 1 1 2 1 1 3 1 1
1 1 2 2 1 2 3 1 2
1 1 3 2 1 3 3 1 3
1 2 1 2 2 1 3 2 1
1 2 2 2 2 2 3 2 2
1 2 3 2 2 3 3 2 3
1 3 1 2 3 1 2 3 1
1 3 2 2 3 2 2 3 2
1 3 3 2 3 3 2 3 3
১৮৪
িতনিট এেক এেক বসােত হেব, তরাং আেরকটা ঘূণী লাগেব। আর একই ভােব তৃতীয় ােনর
জে ও আেরকিট ঘূণী িদেয় সংখ া িতনিট এেক এেক বসােত হেব। কােজই সব িমিলেয় আমােদর
ঘূণী লাগেব িতনিট, আর িব াস পাওয়া যােব সবেমাট ২৭ িট। তা এরকম একিট মেলখ আমরা
উপের দখালাম, খুবই সহজ মেলখ। আর ওই মেলখেয়র ফলন (output) কমন হেব সটাও
উপের দখােনা হেয়েছ। তেব ােনর ব বহার বাড়ােনার জ ২৭ িট িব াস নীেচ নীেচ না লেখ
িতন ে (column) দখােনা হেয়েছ, আসেল ও েলা এেকর পর এক নীেচ নীেচ আসেব।
উপেরর মেলখেত (program) িক একই সংখ া এেকর অিধকবার ব বহার করা হেয়েছ।
যিদ সটা করেত না দয়া হয়, তাহেল আমরা যটা করেত পাির তা হেলা যখনই িট সংখ া এক
হেয় যােব তখন আমরা ফলন (output) িদেবা না। অথাৎ x যিদ yএর সমান হয় অথবা x যিদ
zএর সমান হয়, অথবা y যিদ zএর সমান হয় তাহেল ফলন হেব না, আর না হেল ফলন হেব। তার
মােন ফলন দয়া হেব ! (x == y | | x == y | | y == z) শত সত হেল, আর দয়া হেব না
শত িমথ া হেল। বুলক বীজগিণেতর িড মরগ ােনর সূ া যায়ী আমরা এটােক সরলীকরণ করেত
পাির। তাহেল পােবা ! (x == y) && !(x == z) && !(y == z) বা (x != y && x != z &
& y != z)। সবিমিলেয় এমন মেলখ আর তার ফলন হেত পাের নীেচর মেতা।
f o r ( i n t x = 1 ; x <= 3 ; ++x )
5g
f o r ( i n t y = 1 ; y <= 3 ; ++y )
f o r ( i n t z = 1 ; z <= 3 ; ++z )
i f ( x ! = y && x ! = z && y ! = z )
cout << x << " " << y << " " << z << endl ;
in
1 2 3
1 3 2
am
2 1 3
2 3 1
3 1 2
3 2 1
একটা িবষয় খয়াল কেরা উপেরর মেলখেত (program) িতনিট ঘূণীই িক িতনবার কের
al
ঘুরেব, ফেল মাট ২৭ িট পাকই স হেব, তেব এই ২৭িট পােকর মা ৬িটেত ফলন (output)
আসেব, বাঁকী েলােত যিদ-নাহেলর (if else) শত িমথ া হওয়ায় ফলন আসেব না। কথা হে
ওই য ২১িট পাক য েলােত কান ফলন আসেব না, স েলা কমােনা স ব িকনা। িকছুটা তা
স ব। ি তীয় ঘূণীর কথা িবেবচনা কেরা, যখন আমরা জািনই য y এর মান x এর সমান, তখন
তা তৃতীয় ঘূণীিট ঘুিরেয় লাভ নই, আমােদর কান ফলন আসেব না। কােজই আমরা যিদ নাহেল
িমথি য়া (if else interaction) িবেবচনা কের নীেচর মেলখেয়র মেতা কের if (x != y)
ক তৃতীয় ঘূণীর উপের িনেয় আসেত পাির। এই মেলখেয়র ে কান ঘূণী কত বার ঘুরেব?
তুিম িক িনেজ িনেজ স েলা িহসাব করেত পারেব, চ া কের দেখা?
f o r ( i n t x = 1 ; x <= 3 ; ++x ) / / ৩ বার
f o r ( i n t y = 1 ; y <= 3 ; ++y ) / / ৩∗৩ = ৯বার
if (x != y) / / ৩∗১ = ৩ বার িমথ া
f o r ( i n t z = 1 ; z <= 3 ; ++z ) / / ৬∗৩ = ১৮বার
i f ( x ! = z && y ! = z ) / / ৬ বার সত
cout << x << " " << y << " " << z << endl ;
১৮৫
আ া তামােক িতনিট সংখ া না িদেয় বরং চারিট বা পাঁচিট বা আেরা বশী সংখ ার িব-
াস (permutation) ফলন (output) িদেত বলা হয় তুিম কী পারেব তার জে মেলখ
(program) িলখেত? িন য় পারেব, যতিট সংখ া িনেয় িব াস করেত হেব ততিট ঘূণী (loop)
িনেলই হেয় গেলা। এই য ঘূণীর িভতের ঘূণী (loop inside loop), তার িভতের ঘূণী, তার
িভতের আেরা ঘূণী এ েলা হেলা গভীর অ াি ঘূণী (deeply nested loop), যতটা িভতের
একটা ঘূণী ততটা হেলা তার গভীরতা। যমন উপেরর মেলখেত সবেচেয় িভতেরর ঘূণীর গভীর-
তা হেলা ৩, মাঝখােনরটার গভীরতা হেলা ২ আর বাইেররটার গভীরতা হেলা ১। আমরা সাধারণত
খুব বশী গভীরতার অ াি ঘূণী তরী করেত চাই না। যমন আেরা বশী সংখ ার িব াস করেত
গেলই আমরা আর এ রকম গভীর অ াি ঘূণী ব বহার করেবা না, বরং আমরা অ কান প িতর
খাঁজ করেবা। তাছাড়া এরকম গভীর ঘূণী আেরা একটা ে ও অ িবধাজনক। যমন ধেরা তা-
মােক যাগান (input) িনেত হেব কয়টা সংখ ার িব াস করেত চাও। তা সটােতা আেগ থেক
মােন মেলখ লখার সময় জানা স ব না, কােজই মেলখ লখার সময় কত গভীরতা পয ঘূণী
িলখেবা সটাও জানা স ব না, আর তাই এরকম কের মেলখ লখা আসেলই স ব হেব না।
5g
৮.২১ অ াি ঘূণী াসকরণ (Deflating Nested Loops)
ধেরা তামােক এমন একটা মেলখ (program) িলখেত হেব যিট একিদেনর ২৪ ঘ টায় িত
সেকে ড সময় ফলন (output) িদেব ১০:৩৯:৪৬ এই ছাঁেচ। এই মেলখ তামােক অ াি ঘূণী
in
(nested loops) ব বহার না কের কবল একিট ঘূণী (loop) ব বহার কেরই িলখেত হেব।
থেম আমরা অ াি ঘূণী (nested loop) ব বহার কেরই মেলখিট (program) িলিখ।
আমােদর ঘ টা চলেব ০ হেত ২৩ পয , িমিনট চলেব ০ হেত ৫৯ পয , আর সেক ডও চলেব
al
m = s / 60 ; / / িমিনেট পা র
s = s % 60 ; / / অবিশ সেক ড
১৮৬
h = m / 60 ; / / ঘ টায় পা র
m = m % 60 ; / / অবিশ ঘ টা
cout << h << " : " << m << " : " << s << endl ;
}
তুিম িক চাইেল উপেরর মেতা কের িতবার সেক ডেক ৬০ িদেয় ভাগ কের িমিনেট, তারপর
আবার ৬০ িদেয় ভাগ কের ঘ টায় কাশ না কের অ ভােবও করেত পােরা। ধেরা সেক ড ঘূণীর
িত পােক ১ কের বাড়েলা। আর যখন ৬০ সেক ড হেয় গেলা তখন আমরা িমিনেট এক যাগ কের
িদলাম, আর সেক ডেক আবার ০ বািনেয় িদলাম। একই ভােব িমিনট যিদ ৬০ হেয় যায় তাহেল
ঘ টােক এক বািড়েয় িদলাম, আর িমিনটেক ০ বািনেয় িদলাম। আর যখন ঘ টা ২৪ হেয় গেলা
তখন মেলখ শষ কের িদলাম। তা এই রকম মেলখ (program) আমরা নীেচ দখালাম।
int h = 0 , m = 0 , s = 0 ; / / আিদ মান
while ( h < 24)
{
5g
cout << h << " : " << m << " : " << s << endl ;
{
m = 0; / / িমিনট হেব
++h ; / / ঘ টা এক বাড়েব
}
}
}
al
আসেল য কান অ াি ঘূণীেক (nested loop) এই ভােব কবল একটা ঘূণী িদেয়ই িল-
খ ফলা যায়। অ াি ঘূণীেত সূচক েলার মান য েম বদল হেত থােক, উপেরর এই একটা
ঘূণীেতও চলক েলার মান সই একই েমই বদল হেত থােক।
১৮৭
িবেবচনা করিছ, তাহেল বুঝেতই পারেছা পদিট হেব (1 + 2 + . . . + k)। এখােন এই পদিট
িনেজও একটা ধারা। কােজই আমােদর পুেরা ধারািট আসেল ধারার িভতের ধারা, বা অ াি ধারা
(nested series)। যাইেহাক, kতম পদ (1 + 2 + . . . + k) তা আমরা আেরকিট ঘূণী 1
থেক k পয ঘুিরেয় সহেজই িহসাব কের ফলেত পাির। তাহেল সব িমিলেয় দ ধারার জ
আমােদর ঘূণীর িভতের ঘূণী বা অ াি ঘূণী (nested loop) ব বহার করেত হেব।
i n t n = 10 ; / / যাগান িনেত পােরা
int s = 0 ; / / পুেরা ধারার যাগফল
f o r ( i n t k = 1 ; k <= 10 ; ++k )
{
i n t t = 0 ; / / ব নীেত পেদর যাগফল
f o r ( i n t l = 1 ; l <= k ; ++ l )
t += l ; / / ব নীর িভতের যাগফল
s += t ; / / পুেরা ধারার যাগফল
}
cout << s << endl ;
5g
উপেরর মেলখেত (program) েটা অ াি ঘূণী (nested loop) িমিলেয় িঠক কতবার
ঘুরেব? বাইেরর ঘূণীেত kএর মান যখন 1 তখন িভতেরর ঘূণী ঘুরেব 1 বা, বাইেরর ঘূণীেত kএর
মান যখন 2 তখন িভতেরর ঘূণী ঘুরেব 2 বার, এই ভােব বাইেরর ঘূণীেত kএর মান যখন n তখন
in
িভতেরর ঘূণী ঘুরেব n বার। কােজই বাইেরর ঘূণীর সব পাক িমিলেয় িভতেরর ঘূণী ঘুরেব 1 + 2
+ . . . + n = n(n+1)/2 বার। তার মােন nএর মান 10 হেল ই ঘূণী িমেল পাক খােব সবেমাট
10(10+1)/2 = 55 বার। কথা হে এই ধারািটর যাগফল বর করেত আসেলই িক এত পােকর
am
দরকার আেছ? িবেশষ কের ব নীর িভতেরর িতিট পদ কন আলাদা কের আবার নতুন কের
িহসাব করেত হেব? আেগর ব নীর িভতেরর পদ জানা থাকেল তা তার সােথ কবল পেরর পূণক
(integer) যাগ কেরই পেরর ব নীর িভতেরর পদ বর করা স ব।
i n t n = 10 ; / / যাগান িনেত পােরা
i n t s = 0 , t = 0 ; / / ধারা ও পেদর যাগফল
al
f o r ( i n t k = 1 ; k <= 10 ; ++k )
{
t += k ; / / ব নীর িভতের যাগফল
s += t ; / / পুেরা ধারার যাগফল
}
cout << s << endl ;
উপেরর মেলখেত (program) দেখা আমরা েত পদ tএর আিদ মান ধের িনেয়-
িছ। আর ঘূণীর িভতের ঢুেকই tএর সােথ k যাগ কের িদি , যােত ব নীর িভতের থাকা আেগর
পেদ t এর মান যত িছেলা, এই পােক যােত tএর মান তার চেয় যােত k বশী হয়, কারণ পেরর
ব নীর িভতের পেদ তা kটাই অিতির আেছ। তারপর t টােক sএর সােথ যাগ করেলই ধারার
যাগফল হেয় গেলা। তা এই মেলখেত ঘূণী কত বার ঘুরেব? বুঝেতই পারেছা মা 10 বার।
তাহেল আমরা দখলাম দখেত অ াি ঘূণী (nested loop) মেন হেলও অেনক সময় একটা
ঘূণী ব বহার কেরই দ মেলখ (program) রচনা করা যায়। অ াি ঘূণী িলখার সময় সটা
আসেলই অ াি ঘূণী নািক ফ ছ েবশী এ ব াপাের সতক থাকেব কমন!
১৮৮
২. জ ঘূণীেত (for loop) চারিট অংশ আেছ। এ েলা হেলা আদ ায়ন (initialisation),
শত (condition), বৃি (update), িববৃিত (statement)। কান অংশ কখন িনবািহত
হয়, কানিট কতবার িনবািহত হয়, আর কার পের কানিট িনবািহত হয় আেলাচনা কেরা।
৩. সমা র ধারার বতমান পদিটেক ঘূণীর (loop) সূচেকর সােথ স িকত করা বনাম আেগর
পােকর সােথ স িকত করার মেধ পিরগণনায় কী তফাৎ ঘেট আেলাচনা কেরা।
5g
৬. ঘূণীেত (loop) শত ফাঁকা (empty condition) হেল ঘূণী থামেব কী কের?
১০. ঘূণী ও যিদর িমথি য়া (interaction) কী ভােব মেলখেয়র গিতেত ভাব ফেল?
১১. অ াি (nested) একািধক ঘূণীেক কী ভােব একটা ঘূণী ব বহার কেরই সামলােনা যায়?
কবল সমাধান দেখ িনেত পােরা। সমাধান েলা পিরগণনার েলার শেষ আেছ।
১. নীেচর নকশার মেতা নকশা তরী কেরা। এই নকশার কানার িব েলােত + আেছ, এক-
দম বাম আর ডান পােশ আেছ |, আর অ সব েলা হেলা −, িতিট সািরেত − আেছ ২০িট
কের। েত ক সািরর − েলার জ তামােক একিট কের ঘূণী (loop) িলখেত হেব।
+−−−−−−−−−−−−−−−−−−−−+
|−−−−−−−−−−−−−−−−−−−− |
|−−−−−−−−−−−−−−−−−−−− |
+−−−−−−−−−−−−−−−−−−−−+
২. এমন একিট মেলখ (program) রচনা কেরা যিট একিট ধনা ক (positive) পূণক
(integer) যাগান (input) িনেয় সটা মৗিলক (prime) সংখ া িকনা িনণয় করেব।
৩. এমন একিট মেলখ (program) িলেখা যিট েটা ধনা ক পূণক (integer) যাগান
িনেয় তােদর গসা (HCF) ও লসা (LCM) িনণয় কের।
১৮৯
while ( n >= 0 )
5g
/ / তৃতীয় ঘূণী
cout << ( n / = 2 ) << " " ;
cout << endl ;
in
৫. একজন অনিভ মেলখক নীেচর মেলখিট (program) িলেখেছ। মেলখিটর ছাড়ন
(indentation) দেখ যমন মেন হে মেলখিট িঠক তমন ফলন (output) িদে
না। অথাৎ মেলখক চেয়িছেলন ১০ থেক কের িতবার ২ িদেয় ভাগ করেবন আর
am
ভাগফেলর বগ দখােবন। ভাগ করেত িগেয় হেয় গেল থেম যােবন। তরাং তার কা-
ি ত ফলন হে 25 4 1 িক মেলখিট হেত সরকম ফলন আসেছ না। তা তুিম থেম
এই মেলখ যমন আেছ তমন রেখই এর ফলন িনণয় কেরা। আর সে ে ছাড়ন ক-
মন হেব সটাও দখাও। তারপর কাি ত ফলাফল পেত গেল মেলখেত কী পিরবতন
করেত হেব সটাও কের দখাও।
i n t n = 10 ;
al
while ( n > 0 )
n /= 2 ;
cout << n ∗ n << " " ;
cout << endl ;
৬. নীেচর মেলখিট (program) কী করেব বণনা কেরা। তারপর এিটেক এমন ভােব আবার
িলেখা যােত এেত ণ ঘূণীর (while loop) বদেল কেরা ঘূণী (do loop) ব ব ত হয়,
িক সব িমিলেয় মেলখেয়র বিশ একই থােক।
int n ;
cout << " dhonatok sonkhya : " ;
c i n >> n ;
while ( n <= 0 )
{
১৯০
৭. নীেচর মেলখিটর (program) ফলন কী? এিটেক এমন ভােব বদেল লেখা যােত মহ া
(block) ব বহার না কেরই একই ফলাফল পাওয়া যায়। তারপর মেলখিটেক ণ ঘূ্ণী
(while loop) ব বহার না কের জ ঘূণী (for loop) ব বহার কের িলেখা।
int i = 5 ;
while ( i > 0 )
{
i = i + 1;
cout << i << endl ;
}
5g
৮. এমন একিট মেলখ রচনা কেরা যিট একিট ঘূণীর (loop) িভতের ব বহারকারীর কােছ
থেক এেকর পর এক একিট কের পূণক (integer) যাগান িনেব। যাগান নওয়া সংখ ািট
ধনা ক না হেল মেলখ থেক বর হেয় যােব, আর ধনা ক হেল মােনর মা সাের সং-
in
খ ািটর উৎপাদক েলােক পরপর এক সািরেত ফলন (output) িদেব, আর পেরর সংখ া
যাগান িনেত চাইেব। নমুনা যাগান-ফলন (sample input output) িন প:
> 0 utpadok <= 0 shesh
am
sonkhya koto ? 36
utpadok t a l i k a : 36 18 12 9 4 3 2 1
> 0 utpadok <= 0 shesh
sonkhya koto ? −1
kromolekho shesh !
al
৯. এমন একিট মেলখ (program) রচনা কেরা যিট একিট ধনা ক পূণ সংখ া যমন
23154 যাগান (input) িনেয় ফলন িদেব 45132।
১০. এমন একিট মেলখ (program) রচনা কেরা যিট এেক এেক সংখ া যাগান (input)
িনেব যত ণ ধনা ক সংখ া দওয়া হে , অধনা ক সংখ া হেল মেলখ শষ হেব। ম-
লখিটর ফলন (output) হেব যাগান নয়া সংখ া েলার মেধ সবেচেয় বড়িট আর সিট
কত ন ের যাগান দওয়া হেয়িছেলা সই িমক ন রিট।
১২. একিট ধনা ক পূণক n যাগান িনেয় থম n াভািবক সংখ ার (১, ২, ৩, ...) যাগফল ও
ণফল িনণেয়র মেলখ (program) রচনা কেরা। তুিম হয়েতা জােনা থম n াভািবক
১৯১
১৩. নীেচর ধারা েলার থম n পেদর সমি িননয় কেরা। তামার মেলখেত (program)
তুিম n যাগান (input) িহসােব িনেব, আর ধারািটর সমি ফলন (output) িদেব।
x3 x5 x7
ক) ল া পাত ধারা (sine series): sin(x) = x − 3! + 5! − 7! + ...
x2 x6 x4
খ) ল া পাত ধারা (cosine series): cos(x) = 1 − 2! + 4! − 6! + . . .
গ) ভািজত ধারা (harmonic series): Hn = 1 + 12 + 31 + . . . + n1
ঘ) অয়লার সংখ া (Euler number): en = 1 + 1!1 + 2!1 + . . . + (n−1)!
1
১৪. দশটা সংখ া যাগান (input) িনেয় তােদর গড় (mean) ও িমত িবচু িত (standard
deviation) িনণয় কেরা। িমত িবচু িত √
হেলা সংখ া েলার বেগর গড় থেক গেড়র বগ
5g
িবেয়াগ কের িবেয়াগফেলর বগমূল অথাৎ
∑
n
x2
−(
∑
n
x 2
) ।
১৫. একিট ণীেত n সংখ ক িশ াথী আেছ আর তােদর েত েক m সংখ ক িবষেয় পরী া
িদেয়েছ। েত ক ছাে র েত ক িবষেয়র ন র যাগান (input) িনেয় েত ক ছাে র মাট
in
ন র ফলন (output) দাও।
১৬. ০ থেক ৯ পয নামতার সারণী (table) িলখার জ একিট মেলখ রচনা কেরা। সার-
ণীেক র কের সাজােনার জ তামােক এক অে র সংখ া ও ই অে র সংখ া মাথায়
am
রাখেত হেব। এক অে র সংখ ার জ তুিম থেম একিট অিতির ফাঁকা (space) িদেয়
িনেব। তােত সারণীেত আিড় ও খািড় (row and column) িঠক মেতা থাকেব। আর নাম-
তার সারণীেত সবেচেয় বােমর খািড়েত (column) আর উপেরর আিড়েত (row) অব ই
০ থেক ৯ পয সংখ া েলা থাকেব িশেরানাম িহসােব।
১৭. এমন একিট মেলখ (program) রচনা কেরা যিট ৫০ জন ছাে র ন র যাগান (input)
al
১৮. তারকা ব বহার কের নীেচর িবিভ রকম আকৃিত েলা ফলন দাও। িতিট ে তুিম দর-
কার মেতা তুিম পরািমিত (parameter) n যাগান (input) িনেব। পরািমিত মােন হে
সািরর সংখ া বা সািরেত সেবা কয়িট তারা থাকেব বা থাকেব না এ েলা n ওপর িনভর-
শীল। নীেচর িতিট ে nএর মান 5।
∗ ∗ ∗
∗∗ ∗∗ ∗∗ ∗
∗∗ ∗ ∗∗∗ ∗ ∗∗ ∗∗
∗∗ ∗∗ ∗∗ ∗ ∗ ∗∗ ∗∗ ∗∗ ∗
∗∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗∗ ∗∗
১৯২
∗ ∗ ∗
∗∗ ∗∗ ∗∗ ∗
∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗∗
∗∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗
∗∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗∗ ∗∗
∗∗ ∗∗ ∗∗ ∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗
∗∗ ∗ ∗∗∗ ∗ ∗∗ ∗∗
∗∗ ∗∗ ∗∗ ∗
∗ ∗ ∗
1
1 1
1 2 1
5g
তার জ প াসক াল ি ভুজ ফলন (output) দাও। নীেচর প াসক াল ি ভুেজর পরািমিত
৪। তুিম চাইেল উি েয় পাি েয় নানান রকেমর প াসক াল ি ভুজ তরী করেত পােরা।
in
1 3 3 1
1 4 6 4 1
am
২০. এমন একিট মেলখ (program) রচনা কেরা যিট তামার সােথ একিট খলা খলেব।
মেলখিট তামােক মেন মেন ০ থেক ১০২৩ এর মেধ একিট ন র মেন মেন ধরেত
বলেব। আর তারপর মেলখিট তামােক বশ িকছু করেব, এই যমন তামার ধেরন
নওয়া সংখ ািট অমুক সংখ ার চেয় বড় বা সমান নািক ছাট। তুিম মূলত সত না িম-
থ া উ র িদেব। উ র েলার িভি েত মেলখিট বেল িদেব তামার ধের নওয়া সংখ ািট
কেতা? এই খলায় আসেল িতবার অেধক কের পা া কমােত হয়। তাই এটােক ি খ ডন
al
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
১. নীেচর নকশার মেতা নকশা তরী কেরা। এই নকশার কানার িব েলােত + আেছ, এক-
দম বাম আর ডান পােশ আেছ |, আর অ সব েলা হেলা −, িতিট সািরেত − আেছ ২০িট
কের। েত ক সািরর − েলার জ তামােক একিট কের ঘূণী (loop) িলখেত হেব।
+−−−−−−−−−−−−−−−−−−−−+
|−−−−−−−−−−−−−−−−−−−− |
|−−−−−−−−−−−−−−−−−−−− |
+−−−−−−−−−−−−−−−−−−−−+
১৯৩
এই মেলখ (program) রচনা করা খুবই সহজ। আমােদর চারিট সািরর জ চারিট
জ ঘূণী (for loop) লাগেব। েত ক সািরর ও শেষ সংি িবেশষ িচ েলা
িদেত হেব। আর ঘূণী লাগেব মাঝখােনর − িচ বারবার লখার জ ।
cout << " + " ; / / উপের বাম কানা
for ( i n t i = 0 ; i < 20 ; ++ i )
cout <<"−" ; / / থম সাির মাঝ
cout << " + " << endl ; / / উপের ডান কানা
cout << " | " ; / / ি তীয় সাির
for ( i n t i = 0 ; i < 20 ; ++ i )
cout <<"−" ; / / ি তীয় সাির মাঝ
cout << " | " << endl ; / / ি তীয় সাির শষ
cout << " | " ; / / তৃতীয় সাির
for ( i n t i = 0 ; i < 20 ; ++ i )
cout <<"−" ; / / তৃতীয় সাির মাঝ
cout << " | " <<
cout << " + " ;
for ( i n t i = 0 ;
cout <<"−" ;
cout << " + " <<
5g
endl ;
i < 20 ; ++ i )
endl ;
/ / তৃতীয় সাির শষ
/ / নীেচ বাম কানা
(integer) যাগান (input) িনেয় সটা মৗিলক (prime) সংখ া িকনা িনণয় করেব।
এই মেলখিট (program) নানান ভােব করা যেত পাের। আমরা থেম সবেচেয় সহজ-
িট িক সবেচেয় ধীর গিতর উপায়িট দিখ। একিট সংখ া n মৗিলক িকনা সটার পরী া
হেলা একিট ঘূণী (loop) চািলেয় ২ থেক কের n − 1 পয িতিট িদেয় n িবভাজ
িকনা পরী া কের দেখা। যিদ একিট িদেয়ও িবভাজ হয় তাহেল n মৗিলক নয়, আর স-
ে ঘূণী আর চালােনা দরকার নই, াি (break) িদেয় বর হেয় আসেত হেব। আর
al
ঘূণী যিদ শষ পয চেল, মােন ঘূণীর সূচেকর (loop index) মান যিদ n হয়, তাহেল n
মৗিলক। নীেচ মেলখিট (program) দেখা।
১৯৪
f o r ( k = 2 ; k < n ; ++k )
i f ( n % k == 0 )
break ; / / িবভাজ হেল আেগই াি
i f ( k == n ) / / শষ পয ঘূণী চেলেছ
cout << " moulik hoy " << endl ;
else / / আেগই বর হেয় এেসেছ
cout << " moulik noy " << endl ;
একটু খয়াল করেলই বুঝেব কান সংখ া মৗিলক িকনা তার জ আসেল ২ থেক n পয
পরী া করা দরকার নই। আসেল n/2 পয অথবা আেরা ভােলা কের বলেত গেল n এর
বগমূল পয পরী া করেলই চেল। কােজই উপেরর মেলখিট চাইেল আমরা আর একট
দ কের িলখেত পাির। নীেচ আমরা কবল পিরবতন সংি অংশ দখালাম।
i f ( n % k == 0 )
break ; 5g
f o r ( k = 2 ; k < s q r t ( n ) ; ++k ) / / s q a r t ( n ) পয
৩. এমন একিট মেলখ (program) িলেখা যিট েটা ধনা ক পূণক (integer) যাগান
িনেয় তােদর গসা (HCF) ও লসা (LCM) িনণয় কের।
িট সংখ া a ও bএর গসা হেলা এমন একিট সংখ া g যিট ারা a ও b উভয় সংখ া
al
িবভাজ হয়। এই রকম একািধক সংখ া থাকেল সবেচেয় বড়িট হেব গসা । গসা বর
করা হেয় গেল আমরা a ও b এর ণফল ক গসা িদেয় ভাগ কের লসা পেত পাির। তা
এই মেলখ (program) িলখেত আমরা ১ থেক কের িতিট সংখ া িদেয় ভাগ কের
দখেবা a ও b উভয় সংখ া িবভাজ িকনা। যিদ িবভাজ হয় তাহেল ভাজকিট আমােদর
গসা হেত পাের, আর ণফলেক গসা িদেয় ভাগ কের লসা পেত পাির। তেব আমােদর
এখােনই থেম গেল হেব না, কারণ এর চেয় বড় কান সংখ া সাধারণ ভাজক িহসােব
পাওয়া যায় িকনা তা দখেত হেব। তেব একটা িবষয় মেন রাখেত হেব গসা g কখনই a
বা b কানটার চেয়ই বড় হেব না, েটার চেয়ই ছাট হেব।
cout << "nombor d u t i : " ; / / যাগান যাচনা
int a , b; / / চলক িট
c i n >> a >> b ; / / যাগান নওয়া
১৯৫
চাইেল উপেরর মেলখেক আর একটু দ করেত পােরা। যেহতু গসা সংখ া েটার
কানটা থেকই বড় হয়, কােজই আমরা সংখ া েটার ছাটিট থেক ঘূণী (loop)
5g
করেত পাির। আর েটােক ভাগ করা যায় এমন সবেচেয় বড় ভাজকিট যেহতু আমােদর
দরকার, আমরা তাই ঘূণীিট ছাট থেক
মা ঘূণী থেক বর হেয় আসেবা।
কের বড়র িদেক চালােবা, আর থমিট পাওয়া
আেরা এক ভােব যমন মাগত ভােগর মাধ েমও আমরা গসা িনণয় করেত পাির। থেম
একিট সংখ ােক ভাজক আর আেরকিটেক ভাজ ধের িনেয় ভাগেশষ বর করেবা। তারপর
আেগর ভাজকিট হেয় যােব নতুন ভাজ আর ভাগেশষিট নতুন ভাগেশষ। তারপর আবার
ভাগ ও ভাজকিটেক নতুন ভাজ , ভাগেশষেক নতুন ভাজক । এই কের চলেব যত ণ ভাগ-
শষ না হে । আর সই মুহূেতর ভাজকিটই হেব গসা ।
do
{
t = a % b; / / ভাগেশষ িনণয়
১৯৬
g = a , l = p / a ; / / গসা ও লসা
}
/ / থম ঘূণী
১৯৭
অসীম ঘূণী িঠক করেত চাইেল আমরা তৃতীয় ঘূণীর শতিট n >= 0 বদেল n > 0 িলেখ
িদেত পাির। তােত তৃতীয় ঘূণীর কারেণ ফলন আসেব 2 1 0।
i n t n = 10 ;
while ( n > 0 )
n /= 2 ;
উপেরর মেলখিটেত ছাড়ন দেখ মেন হেয় ঘূণীর (loop) পেরর ই সাির ঘূণীর আওতার
in
মেধ । িক গঠনরীিত অ যায়ী আসেল তা হেব না, কারণ এখােন ব ব নী দয়া নই।
ফেল কবল n /= 2টাই ঘূণীর আওতায়। কােজই ঘূণী চলেব িঠকই, িতবার 2 িদেয় ভাগ
হেব, আর হেল ঘূণী থেম যােব। তারপর ঘূণীর বাইের থাকা coutএর কারেণ আমরা
am
i n t n = 10 ;
while ( n > 0 )
n /= 2 ; / / কবল এিট ঘূনীর িভতের
al
i n t n = 10 ;
while ( n > 0 )
{ // মহ া
n /= 2 ; // ঘূনীর িভতের িছেলাই
cout << n ∗ n << " " ; // ঘূণীর িভতের এখন
} // মহ া শষ
cout << endl ;
১৯৮
৬. নীেচর মেলখিট (program) কী করেব বণনা কেরা। তারপর এিটেক এমন ভােব আবার
িলেখা যােত এেত ণ ঘূণীর (while loop) বদেল কেরা ঘূণী (do loop) ব ব ত হয়,
িক সব িমিলেয় মেলখেয়র বিশ একই থােক।
int n ;
cout << " dhonatok sonkhya : " ;
c i n >> n ;
while ( n <= 0 )
{
cout << " dhonatok noy . " << endl ;
cout << " dhonatok sonkhya : " ;
c i n >> n ;
}
5g
উপেরর মেলখিট (program) ধনা ক সংখ া দরকার এরকম যাগান যাচনা (input
prompt) কের nএর মান যাগান (input) িনেব। তারপর n যিদ ধনা ক না হয় তাহেল
ঘূণীর (loop) িভতের ঢুকেব আর বাতা (message) দখােব ধনা ক নয়, আর আবার
যাগান যাচনা কের nএর মান যাগান িনেব। তারপর ঘূনীর িভতের আবার পরী া করেব
অধনা ক িকনা, এবং এই ভােব চলেত থাকেব যত ণ না nএর মান ধনা ক হে । সব
in
িমিলেয় বলা যায়, কমপে একবার যাগান যাচনা িদেয় n এর মান যাগান নওয়া হেব: ঘূ-
ণীর বাইেরর যাগান যাচনা (input prompt) ও যাগান (input) নওয়াটা হেলা সিট।
তরাং আমরা খুব সহেজই কেরা ঘূনী (do loop) ব বহার করেত পাির এখােন।
am
int n ;
do
{
cout << " dhonatok sonkhya : " ;
c i n >> n ;
i f ( n <= 0 )
al
তুিম চাইেল নীেচর মেতা কেরও িলখেত পােরা, যখােন আমরা ধনা ক হেল বরং ঘূণী
(loop) থেক াি (break) িনেবা। আর সে ে অব while(n <= 0) না িলেখ
আমরা কবল while(true) ও িলখেত পাির। আবার চাইেল কেরা ঘূনী (do loop) থেক
ণ ঘূণীেত (while loop) ফরতও যেত পাির, যখােন নীেচর while(true) টােক
সিরেয় িনেয় িগেয় do এর বদেল বিসেয় িদেবা।
int n ;
do
{
cout << " dhonatok sonkhya : " ;
c i n >> n ;
১৯৯
i f ( n > 0 ) break ;
cout << " dhonatok noy . " << endl ;
}
while ( n <= 0 ) ;
৭. নীেচর মেলখিটর (program) ফলন কী? এিটেক এমন ভােব বদেল লেখা যােত মহ া
(block) ব বহার না কেরই একই ফলাফল পাওয়া যায়। তারপর মেলখিটেক ণ ঘূ্ণী
(while loop) ব বহার না কের জ ঘূণী (for loop) ব বহার কের িলেখা।
int i = 5 ;
while ( i > 0 )
{
i = i + 1;
cout << i << endl ;
}
5g
উপেরর মেলখেত (program) ঘূণীর িভতের iএর মান আেগ কমােনা হে তারপর
সটা ফলেন (output) দখােনা হে । কাজিট আমরা ফলেন দখােনার সমেয়ই করেত
পাির পূব বৃি (pre increment) ব বহার কের, যা নীেচর মেলখেত দখােনা হেলা।
in
int i = 5 ;
while ( i > 0 )
cout << −− i << endl ;
am
তুিম চাইেল জ ঘূণী (for loop) ব বহার কের নীেচর মেতা কেরও িলখেত পােরা।
f o r ( i n t i = 5 ; −− i ; )
cout << −− i << endl ;
৮. এমন একিট মেলখ রচনা কেরা যিট একিট ঘূণীর (loop) িভতের ব বহারকারীর কােছ
al
থেক এেকর পর এক একিট কের পূণক (integer) যাগান িনেব। যাগান নওয়া সংখ ািট
ধনা ক না হেল মেলখ থেক বর হেয় যােব, আর ধনা ক হেল মােনর মা সাের সং-
খ ািটর উৎপাদক েলােক পরপর এক সািরেত ফলন (output) িদেব, আর পেরর সংখ া
যাগান িনেত চাইেব। নমুনা যাগান-ফলন (sample input output) িন প:
> 0 utpadok <= 0 shesh
sonkhya koto ? 36
utpadok t a l i k a : 36 18 12 9 4 3 2 1
> 0 utpadok <= 0 shesh
sonkhya koto ? −1
kromolekho shesh !
আমরা এখােন একটা অসীম ঘূণী (infinite loop) িনেবা েত while(true) িলেখ,
তার মােন ঘূণীর িভতের আমােদর অব ই একটা াি (break) িদেত হেব। তা নী-
চর মেলখেত (program) দেখা আমরা ঘূণীর িভতের যথাযথ যাগান যাচনা (input
২০০
prompt) িদেয় সংখ ািট যাগান িনেয়িছ। তারপর সংখ ািট ধনা ক না হেল াি িদেয়িছ,
আর সে ে ঘূণীর বাইের " মেলখ শষ!" বাতা (message) দিখেয়িছ। আর সংখ ািট
ধনা ক হেল আমরা বড় থেক ছাটর িদেক িতিট সংখ া িদেয় দ সংখ ািটেক ভাগ
কেরিছ। ভাগেশষ হওয়া মােন ভাজকিট একিট উৎপাদক, সিট ফলেন (output)
দখােত হেব। তুিম চাইেল এখােন কেরা ঘূণী (do while) ব বহার করেত পারেত, আমরা
সিট তামার িনেজর চ ার ওপের ছেড় িদলাম, চ া কের দেখা।
িফিরি ৮.১২: উৎপাদক তািলকা দখাও (Display List of Factors)
while ( true )
{
cout << "> 0 utpadok <= 0 shesh " << endl ;
i n t ; c i n >> n ; / / যাগান
i f ( n % k == 0 )
cout << " " << k ;
cout << endl ;
5g
cout << " utpadok t a l i k a : " ;
f o r ( i n t k = n ; k > 0 ; −−k )
in
}
cout << " kromolekho shesh ! " << endl ;
am
৯. এমন একিট মেলখ (program) রচনা কেরা যিট একিট ধনা ক পূণ সংখ া যমন
23154 যাগান (input) িনেয় ফলন িদেব 45132।
i n t n , r , t ; / / ন র , উ া , সামিয়ক
cout << "nombor? " ;
c i n >> n ;
al
i f ( n <= 0 )
{
cout << " dhonatok noy " << endl ;
ret ur n EXIT FAILURE ;
}
r = 0; // েত উ া ন র
while ( n > 0 )
{
t = n % 10 ; / / একেকর অ
r = r ∗ 10 + t ; / / উ ার িপেছ
n = n / 10 ; / / অবিশ অংশ
}
২০১
int k = 0 ;
while ( true )
{
//
/ / যাগান যাচনা
/ / যাগান নওয়া
in
i f ( n <= 0 ) break ; / / অধনা ক সংখ া
am
}
}
২০২
যাইেহাক এরপর উপেরর মেলখিট দেখা যাগান যাচনা কের যাগান িনেয় থেম পরী া
কেরেছ ধনা ক িকনা। ধনা ক না হেল ঘূণীেত (loop) াি (break) িদেত হেব আর না
হেল যেহতু আেরকিট ধনা ক সংখ া পাওয়া গেলা তাই িমক ন র এক বাড়েব। এরপর
বতমােনর বড়িট সােথ তুলনা কের যিদ দখা যায় নতুন ন রিট বড়, তাহেল নতুন ন রিটই
হেব বড় আর তার সূচকিট আেরকিট চলেক িনেত হেব। ঘূণীর বাইের কবল বড় সংখ ািট
আর তার সূচক ফলেন (output) যােব।
5g
i n t prothom = 0 , d i t i y o = 1 , tarp or ;
{
f o r ( i n t k = 3 ; k <= n ; ++k )
{
/ / k−তম পদ িহসাব করা হেব
t a r p o r = prothom + d i t i y o ; / / যাগ
prothom = d i t i y o ; / / পেররটার জ ২য়টাই ১ম
al
d i t i y o = t a r p o r ; / / পেররটার জ নতুনটা ২য়
}
/ / নতুন যিট সিট তমk পদ , তরাং ফলন
cout << n << "tom = " << ta rp or << endl ;
}
থেম n চলক ঘাষণা variable declare) কের, তুিম যাগান যাচনা (input prompt)
িদেয় nএর মান যাগান িনেব। তারপর n ধনা ক িকনা পরী া কের দখেব। n ধনা ক
না হেল একিট ঘূণীর (loop) িভতের আবার যাগান িনেত পােরা যত ণ না ধনা ক মান
দওয়া হে ্ এই অংশটু কের দওয়া হেলা না, িনেজর কেরা। আমরা কবল িফেবানাি
পদ েলা িনণেয়র অংশটু দিখ। থম িট পদ ধারণ করার জ আমােদর prothom
আর ditiyo নােম িট আর পেরর পেদর জ tarpor নােম আেরকিট চলক (variable)
আেছ। যিদ nএর মান ১ বা ২ হয় তাহেল আমরা তা থম পদ িট থেক কান প িহসাব
করা ছাড়া সরাসিরই ফলন িদেত পাির। আর যিদ nএর মান 3 বা বশী হয় তাহেল এক-
িট জ ঘূণীেত (for loop) আমরা থেম tarpor পদিট িহসাব করেবা prothom ও
২০৩
১২. একিট ধনা ক পূণক n যাগান িনেয় থম n াভািবক সংখ ার (১, ২, ৩, ...) যাগফল ও
ণফল িনণেয়র মেলখ (program) রচনা কেরা। তুিম হয়েতা জােনা থম n াভািবক
সংখ ার ণফলেক উৎপাদকীয় (factorial) বলা হয়। উৎপাদকীয় খুবই বড় সংখ া হয়
যা intএ নাও ধরেত পাের, কােজই n বড় হেল আমরা উ াপা া ফল পেত পাির।
i n t n ; / / মান তুিম যাগান িনেয় ধনা ক িকনা পরী া করেব।
5g
/ / নীেচর সািরেত যাগফল কন ০ আর ণফল ১?
i n t j o g f o l = 0 , gunfol = 1 ;
f o r ( i n t k = 1 ; k <= n ; ++k )
{
j o g f o l += k ; / / যাগ কেরা
in
gunfol ∗= k ; / / ণ কেরা
}
cout << " j o g f o l = " << j o g f o l << endl ;
am
মান (initial value) িদেয়িছ ০ িক gunfolএর আিদ মান িদেয়িছ ১। কন বলেত পার-
ব? যােগর মােন আেগ থেক ১ থাকেল তা যাগফল সিঠক আসেব না, ১ বশী আসেব,
তাই আিদ মান । আর ণফেলর ে আিদ মান ০ হেল এরপেরর সকল ণফলই তা
০ হেয় যােব, ১ িদেল সিট হেব না। যাগ ও েণর জ আিদ মােনর এই তফাৎ সবসময়
মেন রাখেব। এই মেলখেয়র বাঁকী অংশটু েতা আর ব াখ া করিছ না।
১৩. নীেচর ধারা েলার থম n পেদর সমি িননয় কেরা। তামার মেলখেত (program)
তুিম n যাগান (input) িহসােব িনেব, আর ধারািটর সমি ফলন (output) িদেব।
x3 x5 x7
ক) ল া পাত ধারা (sine series): sin(x) = x − 3! + 5! − 7! + ...
x2 x6x4
খ) ল া পাত ধারা (cosine series): cos(x) = 1 − 2! + 4! − 6! + . . .
গ) ভািজত ধারা (harmonic series): Hn = 1 + 12 + 31 + . . . + n1
ঘ) অয়লার সংখ া (Euler number): en = 1 + 1!1 + 2!1 + . . . + (n−1)!
1
২০৪
3 5 7
এখােন আমরা ধু sin(x) = x − x3! + x5! − x7! + . . . এর মেলখ (program)
দখােবা। বাঁকী েলা তুিম একই রকম কের িনেজ কেরা। আমােদর nএর পাশাপািশ xও
যাগান (input) িনেত হেব। তেব n যখােন ধনা ক পূণক (positive integer) x স-
খােন ভ ক (fractioner)। তারপর আমােদর একিট ঘূণী (loop) িনেত হেব যিট 1 থেক
n পয ঘুরেব, আর িতপােক kতম পদিট িহসাব কের যাগফেলর সােথ যাগ কের িদেব।
k
একটু খয়াল করেল দখেব এখােন kতম পদিট আসেল − (−x) k! । তরাং আমরা পদ িন-
ণেয়র জ একিট ঘূণী (loop) চািলেয় শি (power) (−x)k িনণয় করেবা, আেরকিট
ঘূণী (loop) চািলেয় উৎপাদকীয় (factorial) k! িনণয় করেবা, আর তারপর পদিট যাগ
কের দেবা যাগফেলর সােথ।
int n ; // যাগান নাও
float x ; // যাগান নাও
f l o a t j o g f o l = 0 ; / / যাগফল
f o r ( i n t k = 1 ; k <= n ; ++k )
{
float shokti = 1 ;
5g
/ / (−x ) ˆk
f l o a t utpadokio = 1 ; / / k !
in
for ( i n t p = 1 ; p <= k ; ++p )
{
s h o k t i ∗= (−x ) ; / / শি িনণয়
utpadokio ∗= p ; / / উৎপাদকীয়
am
}
j o g f o l += − s h o k t i / utpadokio ;
}
উপেরর মেলখিট আসেল দ হয় িন। কারণ এেত ঘূণীর িভতের ঘূনী বা অ াি ঘূণী
(nested loop) ব ব ত হেয়েছ। আসেল িভতেরর ঘূণীটা ব বহার না কেরই এই ম-
লখ (program) লখা স ব। একটা ব াপার খয়াল কেরা আেগর পেদর সােথ আমরা
কবল f rac−x2 (2k − 1)(2k − 2) ণ করেলই পেরর পদ পােবা। কােজই আেগর পদ
আেরকটা চলক (variable) ব বহার কের মেন রাখেল পেরর পদ সহেজ বর করা যােব,
এবং কান ঘূণী (loop) না চািলেয়ই তা বর করা স ব হেব।
int n ; // যাগান নাও
float x ; // যাগান নাও
f l o a t j o g f o l = 0 ; / / যাগফল
f l o a t pod = x ;
f o r ( i n t k = 1 ; k <= n ; ++k )
{
j o g f o l += x ;
২০৫
১৪. দশটা সংখ া যাগান (input) িনেয় তােদর গড় (mean) ও িমত িবচু িত (standard
deviation) িনণয় কেরা। িমত িবচু িত √
হেলা সংখ া েলার বেগর গড় থেক গেড়র বগ
∑ ∑
x2 x 2
িবেয়াগ কের িবেয়াগফেলর বগমূল অথাৎ n −( n ) ।
i n t n ; / / কয়িট সংখ া যাগান নাও
/ / নীেচর চলক িট যাগফল ও বেগর যাগফল
f l o a t sumx = 0 , sumx2 = 0
5g
f o r ( i n t k = 0 ; k < n ; ++k )
{
cout << k << "tom pod ? " ; / / যাচনা
f l o a t x ; c i n >> x ; / / যাগান
in
sumx += x ; / / যাগফল িনণয়
sumx2 += x∗x ; / / বেগর যাগফল
}
am
উপেরর মেলখিট (program) খুবই সাধারণ। একিট ঘূণীর িভতের যাগফল ও বেগর
যাগফল বর কের নাও। তারপর ঘূণীর বাইের থেম গড় আর তারপর িমত িবচু িত িনণয়
al
কেরা। এখােন sqrt( ) িবপাতক (function) ব বহার কের বগমূল িনণয় করা হেয়েছ।
কােজই মেলখেয়র েত #include <cmath> িলেখ cmath িশর নিথ (header
file) অ ভু (include) কের িনেত হেব।
১৫. একিট ণীেত n সংখ ক িশ াথী আেছ আর তােদর েত েক m সংখ ক িবষেয় পরী া
িদেয়েছ। েত ক ছাে র েত ক িবষেয়র ন র যাগান (input) িনেয় েত ক ছাে র মাট
ন র ফলন (output) দাও।
i n t m, i n t n ; / / যাগান নাও
/ / েত ক ছাে র জ ঘূণী
f o r ( i n t i = 1 ; i <= n ; ++ i )
{
float jogfol = 0 ;
// েত ক িবষেয়র জ ঘূণী
২০৬
f o r ( i n t j = 1 ; j <= m; ++ j )
{
f l o a t nombor ;
cout << j << " th bishoy ? " ;
cout << nombor ;
j o g f o l += nombor ;
}
cout << "mot nombor = " << j o g f o l ;
cout << endl ;
}
5g
১৬. এক পরী ায় মাট ন র ৯। কােজই একজন ছা ০ হেত ৯ পয য কান ন র পেত
পাের। এমন একিট মেলখ (program) রচনা কেরা যিট এই প ২০ জন ছাে র েত -
কর ন র যাগান (input) িনেয় তােদর ন র তারকা িচ িদেয় আ ভুিমক িচে দখােব।
িতনজন ছাে র জ নমুনা যাগান ও ফলন (input and output) িন প:
in
1tom nombor? 9
1 : ∗ ∗∗ ∗∗ ∗ ∗∗ ∗ ( 9 )
2tom nombor? 5
2 : ∗ ∗∗ ∗∗ ( 5 )
am
3tom nombor? 6
3 : ∗ ∗∗ ∗∗ ∗ ( 6 )
// েত িমক ন র
cout << k << " : " ;
২০৭
১৭. ০ থেক ৯ পয নামতার সারণী (table) িলখার জ একিট মেলখ রচনা কেরা। সার-
ণীেক র কের সাজােনার জ তামােক এক অে র সংখ া ও ই অে র সংখ া মাথায়
রাখেত হেব। এক অে র সংখ ার জ তুিম থেম একিট অিতির ফাঁকা (space) িদেয়
িনেব। তােত সারণীেত আিড় ও খািড় (row and column) িঠক মেতা থাকেব। আর নাম-
তার সারণীেত সবেচেয় বােমর খািড়েত (column) আর উপেরর আিড়েত (row) অব ই
০ থেক ৯ পয সংখ া েলা থাকেব িশেরানাম িহসােব।
এই মেলখিট একটু খুঁিটনািট খয়াল কের িলখেত হেব, যােত সারণীিট আসেলই র
লােগ দখেত। সব থেম সারণীর উপেরর বাম কানা খয়াল কেরা সিট অব ই ফাঁকা
হেব। আর থম সািরেত আসেল সংখ া েলা থাকেব ০ থেক ৯ পয িশেরানাম িহসােব।
ি তীয় সাির থেক মূলত ণফল েলা থাকেব। তেব থেমই থাকেব িশরনাম িহসােব সং-
5g
খ া, আর তারপর ণফল েলা। ণফল দখােনার আেগ অব ই খয়াল করেব ৯ বা ছাট
িকনা, সে ে একটা অিতির ফাঁকা (space) দখােত হেব।
cout << " " ; / / উপের বাম কানা
in
/ / থম সাির হেলা িশর নাম
f o r ( i n t i = 0 ; i <= 9 ; ++ i )
cout << " " << i ; / / ইটা ফাঁকা
am
১৮. এমন একিট মেলখ (program) রচনা কেরা যিট ৫০ জন ছাে র ন র যাগান (input)
২০৮
f o r ( i n t k = 1 ; k <= 50 ; ++k )
{
cout << k << "tom nombor? " ;
i n t nombor ; c i n >> nombor ;
i f ( nombor <= 0 )
cout << " p a l l a r b a i r e " << endl ;
e l s e i f ( nombor <= 10)
++prothom ;
e l s e i f ( nombor <= 20)
++ d i t i y o ;
e l s e i f ( nombor <= 30)
else
++ t r i t i y o ; 5g
in
cout << " p a l l a r b a i r e " << endl ;
}
১৯. তারকা ব বহার কের নীেচর িবিভ রকম আকৃিত েলা ফলন দাও। িতিট ে তুিম দর-
কার মেতা তুিম পরািমিত (parameter) n যাগান (input) িনেব। পরািমিত মােন হে
al
সািরর সংখ া বা সািরেত সেবা কয়িট তারা থাকেব বা থাকেব না এ েলা n ওপর িনভর-
শীল। নীেচর িতিট ে nএর মান 5।
∗ ∗ ∗
∗∗ ∗∗ ∗∗ ∗
∗∗ ∗ ∗∗∗ ∗ ∗∗ ∗∗
∗∗ ∗∗ ∗∗ ∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗
∗∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗∗ ∗∗
∗ ∗ ∗
∗∗ ∗∗ ∗∗ ∗
∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗∗
∗∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗
∗∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗∗ ∗∗
∗∗ ∗∗ ∗∗ ∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗
২০৯
∗∗ ∗ ∗∗∗ ∗ ∗∗ ∗∗
∗∗ ∗∗ ∗∗ ∗
∗ ∗ ∗
)
cout << " ∗ " ;
5g
/ / মাঝখােন তারা আেছ 2 ∗ a r i − 1 সংখ ক
f o r ( i n t k h a r i = 1 ; k h a r i <= 2∗ a r i − 1 ; ++ k h a r i
এখােন ৫ িট সাির আেছ। িতিট সািরেত তারা অ র আেছ ৯িট মােন 2∗5 − 1। আেরা
খয়াল কেরা ১ম সািরেত ও শেষ ফাঁকা আেছ ৪িট কের, ২য় সািরেত ৩িট কের, ৩িট
সািরেত ২িট কের। এসেবর িতিট ে যাগফল পাঁচ মােন ১ + ৪ = ২ + ৩ = ৩ + ২
= ৪ + ১। অথাৎ যততম সাির, ও শেষ ফাঁকার সংখ া ৫ থেক তত িবেয়াগ করেল
পাওয়া যােব। এরপর দেখা তারকার সংখ া হেলা পরপর সািরেত ১, ৩, ৫, ৭, ৯, অথাৎ
যততম সাির তার ি েণর চেয় এক কম সংখ ক তারা আেছ।
∗ −−−−∗−−−−
∗∗∗ −−−∗ ∗ ∗−−−
∗∗ ∗ ∗∗ −−∗∗ ∗ ∗∗−−
∗ ∗∗ ∗ ∗∗ ∗ −∗ ∗∗ ∗ ∗∗ ∗−
∗∗ ∗∗ ∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗ ∗∗ ∗∗
২১০
ি ভুজ নীেচ দখােনা হেলা। থম সািরেত মানিট হেলা 0 C0 , ি তীয় সািরেত মান েলা
হেলা 0 C1 ও 1 C1 , তৃতীয় সািরেত 0 C2 , 1 C2 ও 2 C2 । পরািমিত n যাগান (input) িনেয়
তার জ প াসক াল ি ভুজ ফলন (output) দাও। নীেচর প াসক াল ি ভুেজর পরািমিত
৪। তুিম চাইেল উি েয় পাি েয় নানান রকেমর প াসক াল ি ভুজ তরী করেত পােরা।
1 −−−−1−−−−
1 1 −−−1−1−−−
1 2 1 −−1−2−1−−
1 3 3 1 −1−3−3−1−
1 4 6 4 1 1−4−6−4−1
আমরা আপাতত ধের নই িতিট সংখ ােত একটাই অ থাকেব। বশী অে র সংখ ার
জ তামােক আর একটু ক কের অিতিরি ফাঁকা (space) ব বহার করেত হেব। যা-
ইেহাক নকশার ধাঁচ বুঝার জ আমরা ফাঁকা েলােত সামিয়ক ভােব − বিসেয় িনেয়িছ।
আমােদর এখােন nএর মান ৪। তেব িহসােবর িবধােথ আমরা এখােন গণনা করেবা
০ থেক। কােজই ০তম সািরেত ও শেষ ফাঁকা রেয়েছ ৪িট। ১ম সািরেত ফাঁকা রেয়েছ
৩িট। এইভােব ৪থ সািরেত ফাঁকা
5g
িট। অথাৎ যত ন র সাির ৪ িবেয়াগ তত হেলা
শেষর ফাঁকার সংখ া। আর িত েটা সংখ ার মাঝখােন একটা ফাঁকা আেছ অথবা বলেত
পাের িতিট সািরর থম সংখ ািট ছাড়া পেরর সংখ া েলার সামেন ফাঁকা আেছ।
int n = 4 ; // যাগান িনেত পােরা , ও নয়া যেত পাের
ও
in
/ / িতিট সািরর জ
f o r ( i n t k = 0 ; k <= n ; ++k )
am
{
/ / সািরর েত ফাঁকা
f o r ( i n t i = 0 ; i < n − k ; ++ i )
cout << " " ;
f o r ( i n t i = 0 ; i <= k ; ++ i )
{
/ / িট সংখ ার মধ বতী ফাঁকা
i f ( i > 0)
cout << " " ;
২১১
২১. এমন একিট মেলখ (program) রচনা কেরা যিট তামার সােথ একিট খলা খলেব।
মেলখিট তামােক মেন মেন ০ থেক ১০২৩ এর মেধ একিট ন র মেন মেন ধরেত
বলেব। আর তারপর মেলখিট তামােক বশ িকছু করেব, এই যমন তামার ধেরন
নওয়া সংখ ািট অমুক সংখ ার চেয় বড় বা সমান নািক ছাট। তুিম মূলত সত না িম-
থ া উ র িদেব। উ র েলার িভি েত মেলখিট বেল িদেব তামার ধের নওয়া সংখ ািট
কেতা? এই খলায় আসেল িতবার অেধক কের পা া কমােত হয়। তাই এটােক ি খ ডন
5g
প িত (bisection method) বলা হয়। এই প িতিটেক অেনক সময় িয়ক অ স ান
(binary search) ও বলা হয় অব ।
i n t soto = 0 , boro = 1024 ;
do
{
f l o a t modhyo = ( soto + boro ) / 2 . 0 ;
cout << " sonkhya >= " << modhyo << " ? " ;
i n t u t t o r ; c i n >> u t t o r ;
al
i f ( uttor )
soto = modhyo ;
else
boro = modhyo − 1 ;
cout << soto << " " << boro << endl ;
}
while ( soto < boro ) ;
cout << " sonkhya = " << soto << endl ;
চেলা আমরা উপেরর মেলখিট (program) িবে ষণ কির। আমরা িট সংখ া িনেয়িছ
soto আর boro যখােন আমরা আমােদর পা া রাখেত চাই। আমরা পা া িহসােব ধের
িনলাম ০ আর ১০২৪। তা থমবাের আমরা তাহেল করেবা ধের নওয়া সংখ ািট
অেধক অথাৎ ৫১২ এর চেয় বড় বা সমান িকনা। উ র যিদ াঁ হয় তার মােন ধের নও-
য়া সংখ ািট সবিন ৫১২, কােজই soto ক আমরা বদেল কের ফলেত পাির ৫১২। এেত
২১২
আমােদর পা া অেধক হেয় গেলা। এবার ৫১২ ও ১০২৪ এর মাঝখােনরিট ৭৬৮ িদেয়
একই রকম করেবা। উ র যিদ না হয় তার মােন ধের নওয়া সংখ ািট সেবা ৭৬৭,
কােজই boro ক আমরা বদেল কের ফলেত পাির ৭৬৭। এবােরও পা া অেধক হেয় গ-
লা। এইভােব চলেত থাকেব। উপেরর মেলখ খয়াল কেরা, দেখা এত ণ যা বললাম,
তাই কেরিছ িক না? তাহেল হেয় গেলা আমােদর মজার খলা!
• অসীম (infinite)
• িমথি য়া (interaction)
in
am
al
২১৩
5g
in
am
al
খড২
5g
English (বাংলা)
in
am
al
২১৫
5g
in
am
al
5g
in
am
al
২১৭
5g
in
am
al
২১৮
অধ ায় ৯
5g
কান programmerএর (পিরগণেকর) কােছ িনেজর লখা program ( মেলখ) একদম স া-
নর মেতা। িতল িতল কের সময় িনেয় programmer একিট program গেড় তােল। য
problemএর(সম া) জ program তরী করেত হেব, সটা জানার পের programmer
থেম িচ া ভাবনা কের কী িলখেব, তারপর সটা program লখার যথাযথ িনয়ম মেন িলেখ
in
ফেল, তারপর সটা চািলেয় দেখ িঠক ঠাক কাজ কের িক না। যিদ ভুল িকছু থেক থােক, ভুলটা
বর কের, সটা িঠক কের, তারপর আবার program চািলেয় দেখ। এই চলেত থােক যত ণ না
মন মেতা problemিটর solution পাওয়া যাে । আমরা সারা বইেত পড়েবা programএ কী
am
িলখেবা আমরা, আর যথাযথ ভােব program রচনার িনয়মই বা কী। তেব এইখােন আেলাচনা
করেবা, program ( মেলখ) িলখেবা কাথায় আর সটা চালােবা কী কের।
Computerএ (গণিন) execute (িনবাহ) করার জ আমরা যখন একিট program িলখ-
ত চাই, তখন থেম আমরা সটা edit (স াদনা) কির সাধারণত কান একটা programming
languageএ (পিরগণনা ভাষা)। এই programming language িঠক computerএ exe-
cutable (িনবাহেযাগ ) language নয়, আবার িঠক মা েষর natural languageও ( াভা-
al
িবক ভাষা) নয়, বরং এ েটার মাঝামািঝ িকছু একটা। Programmming languageএ িল-
িখত আমােদর programেক আমরা তাই এরপের compile (সংকলন) কের যে র পােঠাপেযা-
গী machine languageএ (য ভাষায়) পা র কির যােত computer সটা বুঝেত পাের।
তারপর পা িরত programিটেক আমরা execute (িনবাহ) কির।
২১৯
িদেক রেয়েছ িতনিট tab (পাট): options tab (উপা পাট), compilation tab (সংকলন
পাট), execution tab (িনবাহ পাট), আর ডান িদেক রেয়েছ run (চালাও) button।
5g
in
am
আমরা মুলত program writing ও editing করেবা editing areaেত (স াদন খা-
না)। Sample (নমুনা) িহসােব editing areaেত আেগ থেক িকছু থাকেত পাের, তুিম স েলা
মুেছ িদেত পােরা বা তামার programএর জ দরকার মেতা বদেল িনেত পােরা। cpp.sh
al
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" ;
}
২২০
Program editing শষ হেল অথবা মাঝামািঝ অব ােতও পরী া কের দখার জ আম-
রা সাধারণত run buttonএ click (িটপ) করেবা। তােত এক clickএই থেম program
compile (সংকলন) হেব তারপর execution (িনবাহ) হেব। যখন program compile হেত
থাকেব তখন editing areaএর মাঝখােন দখেব "Please Wait Compiling" "অেপ া
কেরা সংকলন হে " লখা আসেব। আর একই সােথ run buttonিট বদেল িগেয় হেয় যােব
cancel button (বািতল বাতাম)। অেনক ে compile হেত সময় লােগ, তুিম যিদ কান
কারেণ compilation cancel করেত চাও তাহেল cancel buttonএ click করেলই হেব।
যখন compile হেত থােক তখন বাম িদেকর tab েলা (পাট) খয়াল করেব, option tabএর
(উপা পাট) বদেল compilation tab (সংকলন পাট) সামেন চেল আসেব। এসময় সময় কান
error ( িট) পাওয়া গেল compile tabএ দখা যােব। আর কান compilation error না
থাকেল Compilation successful message দখা যােব compilation tabএ আর তার-
পর execution tab (িনবাহ পাট) সামেন আসেব। Execution timeএ input and output
( যাগান ও ফলন) execution tabএ চলেব আর cancel buttonিট (বািতল বাতাম) বদেল
হেয় যােব stop button (থামন বাতাম), যােত য কান সময় execution থািমেয় দয়া যায়।
Stop button click করেল অথবা execution শষ হেয় গেল আবার options tab (উপা
5g
পাট) সামেন আসেব আর run button (চালাও বাতাম) িফের আসেব।
in
am
al
Sample programিট আমােদর আপাতত িব ািরত বুঝার দরকার নাই, আমরা পের ব া-
পার েলা িব ািরত িশখেবা। তেব Sample programিট চালােল উপেরর ছিবর মেতা থেম
execution tabএ (িনবাহ পাট) দখােব What is your name? তখন তুিম যিদ তামার নাম
িলেখ দাও gonimia আর তারপর enter (ভুি ) চাপ দাও, তাহেল পেরর সািরেত লখা আসেব
Hello, gonimia! নামটু নওয়ার আেগ What is your name? দখােনােক আমরা বিল
২২১
input prompt ( যাগান যাচনা) আর নাম gonimia দওয়াটােক আমরা বিল input ( যাগান)
দওয়া আর পেরর সািরেত Hello, gonimia! দখােনােক আমরা বিল output (ফলন) দ-
ওয়া। তা তুিম run (চালাও) buttonএ িটপ িদেয় দেখা কী হয়। থেম compilation tab
হেয় execution tabএ (িনবাহ পাট) িগেয় উপের য ভােব বলা হেলা স রকম হয় কী না দেখা।
তামার বাঝার িবধােথ execution tabএ শষ পয কী থাকেব তা নীেচ দখােনা হেলা।
What i s your name? gonimia
Hello , gonimia !
এবার আমরা একটু দিখ compilationএ (সংকলন) error হেল কী ঘেট, আর আমােদর
কী করেত হয়! এটার জ আমরা ইে কের একটা error ( িট) তরী কের দই। যমন ধেরা
std: : string name; লখা রেয়েছ য সািরেত সখােন একদম শষ হেত semicolon (িদিত)
; তুিম মুেছ দাও। আর তারপর run buttonএ (চালাও বাতাম) িটপ দাও। দখেব নীেচর মেতা
কের error message দখােব compilaiton tabএ (সংকলন পাট), আর compilation
tabই সামেন থাকেব, execution tab (িনবাহ পাট) সামেন আসেব না।
5g
in
am
al
Compilation tabএ (সংকলন পােট) য message েলা আসেব তা নীেচ দখােনা হেলা।
ি তীয় সািরেত দেখা 8 : 3 মােন বুঝাে ৮ম সািরেত error আেছ আর ৩য় অ ের, আর errorটা
হেলা ; থাকেত হেব। আসেল ; দরকার আমােদর ৭ম সািরর শেষ। সাধারণত য সািরেত error
আেছ বলা হয়, error সই সাির বা আেগর সািরেত থােক। এখােন ; থাকায় compiler (সংক-
লক) আসেল িঠক ৭ম আর ৮ম সাির িনেয় িকি ত িব াি েত রেয়েছ। Program রচনার সময়
আমরা নানান রকম ভুল িট কির, তুিম program লখার চচা করেত থাকেল এই িট েলার
সােথ পিরিচত হেয় যােব। তখন দখা মা ই বুঝেত পারেব ভুলটু কী আর কী কের সটা িঠক
করেত হেব। যাইেহাক িটটু বুঝেত পারেল আমরা সিট িঠক কের আবার run buttonএ িটপ
িদেবা, আর তখন programিট সফল ভােবই execute হেব।
I n f u n c t i o n ' i n t main ( ) ' :
8 : 3 : e r r o r : expected i n i t i a l i z e r before ' std '
২২২
সবেশেষ আমরা options tab (উপা পাট) সংে েপ আেলাচনা করেবা। সখােন থাকা নানা
option েলার (উপা ) কী কাজ মুলত সটাই জানা আমােদর উে । তেব এ েলা িনেয় আমরা
আপাতত পরী া-িনরী া করেবা না, বরং য রকম অব ায় আেছ স রকম অব ােতই program
( মেলখ) editing (স াদনা), compile (সংকলন) ও execute (িনবাহ) করেবা।
5g
৩. বামেথেক তৃতীয় columnএ আেছ optimisationএর (অ লায়ন) option েলা।
একই program ( মেলখ) compiler (সংকলক) চাইেল এমন ভােব compile (সং-
কলন) করেত পাের য programিট অেনক ত execute (িনবাহ) হেব, আবার সিটই
এমন ভােব compile করেত পাের য programিট অেনক ধীের execute হেব। ত
in
execute হেব এমন compile করেত াভািবক ভােবই বশী সময় লােগ, আর ধীের
execute হেব সরকম compile করেত সময় কম লােগ। এখােন সাধারণত পূণ Full
(-O2) optionিট (উপা ) selected (িনবািচত) থােক।
am
তােত program ( মেলখ) keybaord (চাপিন) থেক input না িনেয় ওইখান থেক
িনেয় িনেব। তামােক আর িতবার input promptএ input িদেত হেব না।
২২৩
আর GDB debugger (আপদনাশক) আেছ। তুিম িলনা বা ম াক user হেল তামার দর-
কারী version নািমেয় installl (সং াপন) করেব। Computerএ (গণিন) কাড কস install
(সং াপন) িবষেয় সাহায পেত চাইেল নীেচর থম িট link হেত video (ছিবও) দখেত পােরা
আর user manual (ব বহার পুি কা) পেত পােরা তৃতীয় link হেত ।
Windows: https://www.youtube.com/watch?v=zOGU8fC3bvU
Linux: https://www.youtube.com/watch?v=3B4hPHZNtNw
User manual: http://www.codeblocks.org/user-manual
5g
file name (নিথর নাম) যমন example.cpp িদেয় তামার নতুন সৃ fileিটেক save (সংর-
ণ) কেরা। Menu ( াপণ ) থেক এসব না কের নীেচর ছিবেত দখােনা icon button েলােত
(মূিত বাতাম) click কেরও তুিম তামার fileৈতরী ও তা নাম িদেয় save করেত পােরা।
in
am
al
২২৪
উপেরর ছিবেত ল কেরা আমরা য program িলেখিছ সটােত আসেল নীেচর code -
লাই িলেখিছ। এিট িঠক online software (হয়মান ম পািত) িহসােব cpp.sh webpage
(জালপাতা) ব বহার কের য program িলেখিছলাম সিটই। কাড কেস sample িহসােব আেগ
থেক এই রকম মেলখ থােক না, তামােক িনেজ এটা িলেখ িনেত হেব। তারপর উপেরর ছিব-
ত দখােনা build+run (বানাও+চালাও) buttonএ click কের তুিম programিট চালােব।
Build+run buttonএ click করেল আসেল থেম তামার লখা program compile (সং-
কলন) হেয় executable (িনবাহেযাগ ) program তরী হয়, আর তারপর সই executable
program আসেল run কের।
/ / 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 ;
5g
std : : cout << "What i s your name? " ;
g e t l i n e ( std : : c i n , name ) ;
std : : cout << " Hello , " << name << " ! \n" ;
in
তা build+run (বানাও+চালাও) buttonএ click িদেল সাধারণত নীেচর ছিবর মেতা কের
একটা অিতির window (জানালা) আসেব। আর তােত লখা থাকেব What is your name
? তখন তুিম যিদ তামার নাম িলেখ দাও gonimia আর তারপর enter (ভুি ) চাপ দাও, তা-
am
হেল পেরর সািরেত দখেব লখা আসেব Hello, gonimia!। নামটু নওয়ার আেগ What is
your name? দখােনােক আমরা বিল input prompt ( যাগান যাচনা) আর নাম gonimia
দওয়াটােক আমরা বিল input ( যাগান) দওয়া আর পেরর সািরেত Hello, gonimia! দখা-
নােক আমরা বিল output (ফলন) দওয়া।
al
তা তুিম Build+Run buttonএ (বানাও+চালাও বাতাম) click কের দেখা কী হয়। উপ-
র য ভােব বলা হেলা স রকম হয় কী না দেখা। তামার বাঝার িবধােথ execution (িনবাহ)
শেষ ওই অিতির windowেত কী থাকেব তা নীেচ দখােনা হেলা।
২২৫
এবার আমরা দখেবা কাড কেস লখা আমােদর programএ যিদ কান ভুল থােক তাহেল
build+run (বানাও+চালাও) buttonএ click িদেল কী ঘটেব? Build+run buttonএ click
দওয়ার আেগ তামােক menu ( াপণ ) থেক Viewএর (দৃি ) অধীেন Logsএ (ঘটচা) িটপ
িদেত বলেবা, অথবা F2 key (চাপিন) চাপেলও একই কাজ হেব। এর ফেল নীেচর ছিবেত দখােনা
build messages tabএর (বানাও বাতা পাট) দখা যােব, যখােন আসেল compilationএ
(সংকলেন) কান error ( িট) থাকেল তা দখােনা হেব। এবার আমরা ইে কের একটা error
( িট) তরী কের দই। যমন ধেরা std: : string name; লখা রেয়েছ য সািরেত সখােন
একদম শষ হেত semicolon (িদিত) ; তুিম মুেছ দাও। আর তারপর build+run buttonএ
(বানাও+চালাও বাতাম) click কেরা। দখেব error message ( িট বাতা) দখােব build
message tabএ (বানাও বাতা পাট)।
5g
in
am
al
Build messages tabএ (বানাও বাতা পাট) য message েলা আসেব তা নীেচ দখােনা
হেলা। ি তীয় সািরেত দেখা 8 মােন বুঝাে ৮ম সািরেত িট আেছ, আর িটটা হেলা ; থাকেত
হেব। আসেল ; দরকার আমােদর ৭ম সািরর শেষ। সাধারণত য সািরেত িট আেছ বলা হয়,
িট সই সাির বা আেগর সািরেত থােক। এখােন ; থাকায় compiler (সংকলক) আসেল িঠক
৭ম আর ৮ম সাির িনেয় িকি ত িব াি েত রেয়েছ। Program রচনার সময় আমরা নানান রকম
ভুল িট কির, তুিম program লখার চচা করেত থাকেল এই িট েলার সােথ পিরিচত হেয়
যােব। তখন দখা মা ই বুঝেত পারেব ভুলটু কী আর কী কের সটা িঠক করেত হেব। যাইেহাক
িটটু বুঝেত পারেল আমরা সিট িঠক কের আবার build+run buttonএ (বানাও+চালাও
বাতাম) িটপ িদেবা, আর তখন program ( মেলখ) সফল ভােবই িনবািহত হেব।
I n f u n c t i o n ' i n t main ( ) ' :
8 : e r r o r : expected i n i t i a l i z e r before ' std '
9 : e r r o r : 'name ' was not declared i n t h i s scope
২২৬
• Executable (িনবাহেযাগ )
• Edit (স াদনা)
5g
• Enter (ভুি )
• Prompt (যাচনা)
• Error ( িট)
• Column ( )
in
• Compile (সংকলন)
• Offline (নয়মান)
• Interaction (িমথি য়া)
• Software (ম , ম পািত)
• Interactive (িমথি য়)
• Webpage (জালপাতা)
• Keyboard (চাপিন)
• Internet (আ জাল)
• None (িকছুনা)
al
২২৭
5g
in
am
al
২২৮
অধ ায় ১০
Program Structure
( মেলখেয়র কাঠােমা)
5g
Computerএ (গণিনেত) executable (িনবাহেযাগ ) এক instructionএর (িনেদশ)
sequenceেক ( ম) program ( মেলখ) বলা হয়। আমরা িসিপিপ (c++) languageএ
program তরী করেবা। Program সাধারণত একিট editor (স াদনা) software (ম )
ব বহার কের তরী করা হয়। আমরা একােজ আপাতত cpp.sh নােমর একিট webpage (জা-
in
লপাতা) ব বহার করেবা। িসিপিপ languageএ তরী programেক থেম একিট compiler
(সংকলক) িদেয় compile (সংকলন) কের computerএ executable code (সংেকত) ত-
রী করা হয়। তারপর সই code run (চালােনা) করেল বা execute (িনবাহ) করেল আমরা
am
২২৯
আমরা monitorএ যা দখােত চাই তা ব quotattion "" িচে র িভতের লখা হেয়েছ। আর
<< িদেয় আমরা "wishing the best" ও endl কথা েলােক cout এর কােছ পাঠাই।
মেন রেখা cout এর statementিট (িববৃিত) ছাড়া আমােদর programএ আেরা অ া
statement য িল আেছ স িল আমােদর লখা ায় সকল programএই থাকেব। আমরা
তাই আপাতত ও েলা একরকম জার কের মেন রাখার চ া করেবা। তারপেরও অব আমরা
নীেচর আেলাচনা থেক সংে েপ জেন নব বাঁকী statement েলার কানটার কাজ কী।
ret ur n 0 ;
}
একটা header file (িশর নিথ) আেছ যটা আমরা আমােদর programএ অ ভু করেত চাই।
ওই header fileএ নানান function (িবপাতক) আেছ য েলা আমরা পের জানেবা ও ব বহার
করেবা। আপাতত জেন নই, ওই fileএ cout আর endl আেছ। মুলত আমােদর programএ
cout আর endl ব বহার করার জ ই আমরা iostream include কেরিছ। এরকম আেরা
header fileএর (িশর নিথ) কথা আমরা পের িব ািরত জানেবা ও অব ই ব বহার করেবা।
using namespace std; আমরা ব বহার কেরিছ কারণ cout আর endl আসেল েটা
al
নাম, আর ওই নাম েটা িসিপিপেত িবদ মান std (standard বা িমত) namespaceএর
(নামাধার) অ গত। িসিপিপেত একই নাম িভ িভ namespaceএর অ গত হেত পাের। তা
কােনা নাম বলেল সিট কান namespace থেক আসেব সিট আমরা আেগই বেল িদি , যমন
আমােদর সকল নাম আসেল std namespace থেক আসেব। Namespace কী আর একটু
ভােলা কের বুঝেত নীেচর paraেত (পিরে দ) ঢাকার ও ব ড়ার গাবতিল িনেয় আেলাচনা পেড়া।
গাবতিল নােম ঢাকায় একিট জায়গা আেছ আবার গাবতিল নােম ব ড়ায় আেরকিট জায়গা
আেছ। তা গাবতিল বলেত গেল আমােদর বলেত হেব 'ব ড়ার গাবতিল' অথবা 'ঢাকার গাবতিল',
কবল গাবতিল বলেল তা বুঝা যােব না কাথাকার গাবতিল। িবক িহসােব আমরা আেগই বেল
িনেত পাির য আমরা এখন ঢাকার কথা আেলাচনা করিছ। তখন কবল গাবতিল বলেলই আমরা
বুঝব এিট ঢাকার গাবতিল। আবার যিদ আেগই বেল নই য এখন থেক আমরা ব ড়ার কথা
আেলাচনা করেবা তাহেল গাবতিল বলেলই আমরা ব ড়ার গাবতিল বুঝব, ঢাকারটা নয়।
উপেরর programএ using namespace std; বেল আমরা আেগই বেল িনেয়িছ য এর-
পর থেক আমরা std namespace িনেয় কাজ করেবা। কােজই পের যখন cout আর endl
ব বহার কেরিছ, তখন আর std এর কথা বলেত হয় িন। িক কউ যিদ তার programএ using
namespace std; না লেখ, তাহেল তােক cout << "wishing the best" << endl;
২৩০
এর বদেল িলখেত হেব std: : cout << "wishing the best" << std::endl; মােন cout
ও endl েটার পূেব std: : লািগেয় িনেত হেব, িঠক যমন গাবতিল বলার আেগ ঢাকা লািগেয় বল-
ত হেব ঢাকার গাবতিল। cout আর endl এর আেগ std: : না িলখেল program সফল ভােব
compile (সংকলন) করা যােব না, নানান error message ( িট বাতা) দখােব। Compile
করার সমেয় দখােনা error েলােক compile-time (সংকলন কালীন) error বলা হয়।
য কান িসিপিপ programএ একিট মুল function (িবপাতক) থােক main যার নাম।
এই main functionএ কান parameter (পরািমিত) থাকেব না, কােজই main( ) এর পের
round bracket েটার মেধ িকছু বলা হয় িন। আর িতিট function চাইেল একিট মান
return কের, main function সাধারণত একিট integer (পূণক) return কের, যা main
লখার আেগ int িহসােব উে খ করা হেয়েছ। Function িনেয় িব ািরত আেলাচনা আমরা
পের করেবা। আপাতত সংে েপ এইটু ই জেন রািখ। তা আমােদর programএ return 0;
statementিট আসেল বলেছ য আমােদর main functionিট return করেব। কার কা-
ছ return করেব? য আমােদর program চালাে তার কােছ। main function 0 return
করা মােন হেলা, এিট সফল ভােব শষ হেয়েছ, কান িট িবচু িত ঘেট িন। কান function
(িবপাতক) থেক 0 ছাড়া অ িকছু return করা িনেয়ও আমরা পের আেলাচনা করেবা।
5g
িসিপিপেত েটা curly bracketএর {} িভতের যা থােক তােক বলা হয় একিট block
(মহ া)। িতিট functionএর (িবপাতক) একিট bdoy (শরীর) থােক যিট blockএর িভত-
র থােক। ল কের দেখা আমােদর main functionএর cout আর return িদেয়
statement িট একিট blockএর িভতের রেয়েছ। আর একিট িবষয় খয়াল কেরা, আমােদর
হওয়া
in
statement েলার শেষ িক একিট কের semicolon (িদিত) ; রেয়েছ। িসিপিপেত বশী-
রভাগ statementএর পেরই আমরা এইরকম semicolon ; িদেয় statement শষ কির।
িঠক বাংলা ভাষায় িতিট বােক র পের দাঁিড় । দয়ার মেতা ব াপার।
am
িসিপিপেত এমন একিট program ( মেলখ) রচনা কেরা যিট run করেল userেক তামার
নাম-ধাম-বৃ া কেয়ক সািরেত string (মালা) আকাের বেল দয়। সােথ number (সংখ া) িহ-
সােব তামার বয়স ও তামার ফলাফেলর িজিপএও বেল দয়।
al
২৩১
ফলন (output)
my name i s goni mia
i am from bogra
i l i v e i n dhaka
i am 20 years old
my r e s u l t gpa 3 . 99
5g
cout << " i am 20 years old " << endl ;
cout << "my r e s u l t gpa 3 . 99 " << endl ;
সবেশেষ একটা িবষয় খয়াল কেরা। আমরা এই programএ return 0; এর বদেল িল-
in
খিছ return EXIT SUCCESS; আর এই EXIT SUCCESS আেছ cstdlib header fileএ
(িশর নিথ)। আমরা তাই #include <cstdlib> িলেখ cstdlib header fileিটও আমােদর
programএ include কেরিছ। মেন রাখেব EXIT SUCCESS এর value আসেল 0 িক 0 তা
একটা number যটা দেখ সরাসির িঠক অ ধাবন করা যায় না আমরা কী বুঝােত চাইিছ, মােন
am
program সফল না িবফল হেয়েছ। আমরা তাই কের EXIT SUCCESS িলখেবা যােত চা-
খ দেখই আমরা বুঝেত পাির ব াপারটা কী। বেল রািখ computerএর (গণিন) জ িক 0 আর
EXIT SUCCESS একই ব াপার কারণ EXIT SUCCESS এর value য 0 ওইটা তা cstdlib
fileএ বলা আেছ, compile করার পের EXIT SUCCESS আসেল 0 হেয় যােব, computer
ওইটা ই দখেত পােব। আমরা 0 এর বদেল EXIT SUCCESS আসেল িলখিছ কবল মা েষর
বুঝার িবধার জ , program পেড় চােখ দেখই যােত সহেজ বুঝা যায় programিট সফল
al
২৩২
ছাড়া অ কউও তামার লখা program পেড় সহেজ বুঝেত পারেব। Comment লখা হয়
মা ষ য ভাষায় কথা বেল সই ভাষায় যমন বাংলায় বা ইংেরজীেত, িসিপিপ languageএও
নয়, machine languageএও নয়, কােজই comment িলখেল অেনক িদন পেরও আমােদর
program বুঝেত িবধা হয়।
i n t main ( )
{
/ / Subt r a c t 20 years from 2015 to get b i r t h y e a r
}
ret ur n EXIT SUCCESS ; 5g
cout << "my b i r t h y e a r " << 2015 − 20 << endl ;
উপেরর program খয়াল কেরা। কিঠন িকছু নয়। আেগর মেতাই iostream আর cstdlib
include (অ ভু ) করা আেছ। তারপর বলা হেয়েছ using namespace std; তারপর main
function (িবপাতক) িহসােব int main() যিটর কান parameter (পরািমিত) নাই কারণ
( ) round bracketএর িভতের িকছু নাই আর যিট একিট integer (পূণক) ফরত দয় কারণ
int বলা আেছ েত। তারপর main functionএর শরীের েটা {} curly bracketএর
al
(বাঁকাব নী) িভতেরর blockএ (মহ া) বলা আেছ cout << "my birthyear " << 2015
− 20 << endl; অথাৎ outputএ my birthyear দিখেয় তারপর 2015 থেক 20 minus
করেল য 1995 পাওয়া যায় তা দখােব। তারপর blockএর িভতের শষ statement (িববৃিত)
আেছ return EXIT SUCCESS; যা আেগর মেতাই বলেছ য আমােদর program ওইখােন
সফল ভােব শেষ হেয় যােব। EXIT SUCCESS িনেয় আমরা আেগর পাঠ িব ািরত আেলাচনা
কেরিছ, ওই পাঠ থেকই দেখ িনেত পােরা, কােজই সটা আবার এখােন আেলাচনা করিছ না।
যাইেহাক, খয়াল কের দেখা ওপের বিণত িবষয় েলা ছাড়াও উপেরর programএ আেরা
িকছু বাক ও সাির দখা যাে যমন থম সািরিটই হল // list of header files needed
for this program. বলেত গেল এই বাক িট আসেল আমােদর programএর অংশ নয়,
অথ াৎ program যখন run করা (চালােনা) হেব তখন এই বােক র কান ভাব থাকেব না।
Program এমন ভােব চলেত থাকেব যােত মেন হেব ওই বাক িট যন ওখােন নাই। এরকেমর
বাক েলােক বলা হয় comment (টীকা)। খয়াল কেরা commentএর বাক িটর একদম সাম-
ন রেয়েছ // অথাৎ সামেনর িদেক হলােনা েটা দাগ। ওই েটা দাগ হেত কের ওই সািরেত
তারপের যাই থাকেব সব িমিলেয় হেব একিট comment। এইরকম comment যেহতু কবল
এক সািরেত সীমাব তাই এেক বলা হয় line comment (সাির টীকা)।
২৩৩
Line comment যিদ সািরর েত লখা হয় তাহেল সাধারণত এিট commentএর িঠক
নীেচ য code (সংেকত) থােক তার জ লখা হয়। যমন দেখা // list of header files
needed for this program এই commentিট একদম সািরর থেক লখা হেয়েছ, এিট
তাই পেরর ই সািরেত #include <iostream> আর #include <cstdlib> কন লখা
হেয়েছ সিট ব াখ া করেছ। Line comment অেনক সময় সািরর শষিদেকও লখা হয়। যমন /
/ we will use the std namespace commentিট লখা হেয়েছ using namespace
std; িদেয় হওয়া সািরর শেষ। সািরর শষ িদেক লখা এইরকম line comment সাধারণত
সািরর থেম য code (সংেকত) লখা হেয়েছ তা ব াখ া করেত ব বহার করা হয়। অেনক সময়
comment িলখা হয় েত /∗ আর শেষ ∗/ িচ িদেয়, যমন return EXIT SUCCESS;
এর সািরেত শেষ লখা হেয়েছ। এইরকম comment একািধক সাির িমিলেয় হেত পাের, তাই
এেদরেক line comment না বেল block comment (মহ া টীকা) বলা হয়। িসিপিপেত
আমরা অিধকাংশ সময় আসেল line commentই ব বহার কির।
তুিম যখন তামার programএ comment িলখেব তখন হয়েতা ইংেরজীেতই comment
িলখেব। অথবা ইংেরজী অ ের বাংলায়ও comment িলখেত পােরা। এখন অেনক compiler
5g
(সংকলক) ও editor (স াদক) ইউিনেকাড (unicode) সংেকত বুঝেত পাের। কােজই চাইেল
comment বাংলায়ও লখা স ব। আমরা এরপর থেক িসিপিপেত লখা সকল programএ
comment বাংলায় িলখেবা, যােত আমরা আমােদর িনেজর ভাষায় সহেজ বুঝেত পাির। এ েলা
যেহতু execute (িনবাহ) হেব না, কােজই খােমাকা কন ক কের ইংেরজীেত িলখেত যােবা!
আর িবেদশী কউ তা আমােদর programএর code দখেব না, কােজই আমরা আমােদর বাংলা
in
ভাষােতই comment িলখেবা। তেব মেন রাখেব িবেদশী কােরা পড়ার স াবনা থাকেল আমােদর
comment সহ সবিকছু ইংেরজী ভাষােতই িলখেত হেব। তাহেল line comment আর block
comment শখা হেলা। এখন থেক program লখার সময় যেথ পিরমােন comment িদেব
কমন? আিমও programএ comment দেবা, যােত তামােদর বুঝেত িবধা হয়।
am
খেব? কখন সািরেত একটু indentation িদেয় িলখেব। একিট program িলেখ এই িবষয় েলা
আেলাচনা কেরা। চেলা আমরা আমােদর wish করার ছাট programিট িদেয়ই আেলাচনা কির।
i n t main ( )
{
cout << " wishing the best " << endl ;
২৩৪
5g
(মহ া) জ য curly bracket } ব বহার হয় তা িদেয় শষ হওয়া statement েলা সাধারণত
compiler িদেয় process করা হেব, preprocessor িদেয় নয়। যাইেহাক, compiler িদেয়
য code েলা ি য়া করা হয় স েলা য িভ িভ সািরেতই িলখেত হেব, বা অেনক ফাঁকা ফাঁকা
(space) কেরই িলখেত হেব এ রকম কান কথা নই। তুিম চাইেল তামার পুেরা programএ
থাকা সকল compilable code এক সািরেত িলখেত পােরা। যমন উপেরর programএর
in
compilable অংশটু আমরা চাইেল নীেচর মেতা টানা এক সািরেত িলখেত পাির।
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
am
উপের যিদও ই সািরেত দখা যাে আমরা আসেল using থেক কের } পয টানা
একসােথ িলেখিছ, িক এখােন পােশর িদেক ােনর তার কারেণ টানা সািরিট ভেঙ ই সাির
হেয় গেছ। তামার editorএ (স াদেক) এ যিদ পােশর িদেক অেনক জায়গা থােক তুিম এক সা-
al
িরেতই িলখেত পারেব। আসেল তম একিট space (ফাঁকা) দয়া বাধ তামুলক হেয় যায় যখন
পরপর েটা শ লখা হয়। যমন using, namespace, std, int, main এইরকম শ পর-
পর েটা থাকেল তামােক কমপে একিট space (ফাঁকা) িদেত হেব। েটা িচ যমন bracket
( ) বা semicolon ; বা আেরা অেনক symbol আেছ, এই েলা পরপর েটা থাকেলও কান
সম া নাই; একািধক symbol কান ফাঁকা না িদেয়ও তুিম একসােথ িলখেত পারেব।
এখন করেত পােরা space দয়া যিদ ব াপার না হয়, তাহেল program িলখেত কন
ফাঁকা দেবা। বশী বশী ফাঁকা আসেল computerএর (গণিন) জ দরকার নই িক দরকার
মা েষর জ । আেগর পােঠর কথা মেন কেরা। আমরা কন comment (টীকা) িলেখিছলাম?
Comment তা আর execute হয় না। আমরা যােত অেনকিদন পের programএর code
(সংেকত) দেখ সহেজ বুঝেত পাির, আমরা তাই comment িলেখিছলাম। তা program যিদ
পুেরাটা একটা ল া সাির হয়, আমােদর মা েষর পে সটা দেখ বুেঝ ওঠা খুবই ক কর হেব।
মুলত আমােদর মা েষর বুঝার িবধােথ আমরা program সািরেত সািরেত ভে ভে িলিখ
বা দরকার মেতা একসােথ িলিখ।
Programএ ফাঁকা দয়ার ব াপারিট রচনা লখার মেতাই, কখন তুিম আলাদা বাক করেব,
কখন তুিম আলাদা para (পিরে দ) করেব, কখন তুিম আলাদা section (অ ে দ) করেব, এই
২৩৫
রকম। কান িবষেয়র সােথ বশী স িকত statement েলা আমরা সাধারণত পরপর সািরেত
কান ফাঁকা (blank line) না িদেয় িলখেবা। আর েটা িবষেয়র সাির েলার মােঝ হয়েতা এক
সাির ফাঁকা িদেয় িলখেবা, আর িবষয় েলার মেধ খুব বশী যাগােযাগ না থাকেল হয়েতা আমরা
ই বা আেরা বশী সাির ফাঁকা িদেয় িলখেবা। তাহেল এখন থেক program লখার সময় দরকার
মেতা ফাঁকা িদেয় িদেয় িলখেব যােত তামার program পড়া সহজ হয়।
সবেচেয় উপের যভােব আমরা program িলেখিছ সখােন আেরা একটা ব াপার খয়াল
কেরা, আমরা cout বা return এর statement েলা লখার আেগ তােদর িনজ িনজ সাির-
ত বশ িকছুটা ফাঁকা িদেয় িলেখিছ, একদম সািরর থেক িলিখ নাই। এিট কন করলাম?
এিট করলাম এ কারেণ য ওই েটা সাির আসেল আমােদর blockএর িভতের আেছ। ল কেরা
blockএর curly bracket েটা কমন দেখই বুঝা যায় য এরা জেন জনার আর blockএর
িভতেরর statement েটা কমন একটু িভতেরর িদেক থাকায় পির ার বুঝা যায় য ওরা আস-
লই ওই blockএর িভতের। তা দরকার মেতা কান statement এরকম সািরর একটু িভত-
রর িদেক থেক লখার ব াপারিটেক বলা হয় indentation (ছাড়ন) দয়া। Program লখার
সময় এখন থেক তামরা অব ই দরকার মেতা indentation িদেয় িলখেব, তাহেল দখেব
program পড়া ও বাঝা কত সহজ হেয় যায়।
5g
এই পযােয় িজে স করেত পােরা, েত ক সািরেত এভােব অত লা কের space চাপেবা ক-
মেন এইটা তা িবরি কর। আসেল তামার keyboard (চাপিনমাঁচায়) একটা tab (ল ) key
আেছ, দেখা ওইটা চাপেল একসােথ ৪টা বা ৮টা space (ফাঁকা) এর সমপিরমান ফাঁকা একবাের
আেস। তা দরকার মেতা একবার বা বার tab চাপেলই হেয় গেলা। কােজই program ল-
খার সময় কখেনাই এই আলেসিম টু করেব না। Indentation দয়া program লখার জ
in
পূণ ব াপার, র দখা যাওয়া আর তাড়াতািড় পড়ার জ দরকারী, Programএ কান
ভুল থাকেল আমরা যখন ভুল বর করেত চাই তখনও খুব খুব দরকারী, বড় বড় program যখন
িলখেব তখন ব াপারটা খািনকটা ঠেক ঠেক িশেখ অিভ তা িদেয় ভােলা কের বুঝেত পারেব।
am
৩. Console (য ালয়) কী? এর input ( যাগান) ও output (ফলন) device েলা কী কী?
৬. িসিপিপেত main function হেত returnএর সময় return 0; না িলেখ তার বদেল
return EXIT SUCCESS; িলখা কন উ ম? ব াখ া কেরা।
২৩৬
১০. Program সফল ভােব শষ হেল main function হেত সাধারণত কত return করা
হয়?
ক) −1 খ) 0 গ) 1 ঘ) িকছুই না
১১. িসিপিপেত block (মহ া) বুঝােনার জ নীেচর কান েলা ব বহার করা হয়?
ক) { } খ) < >
5g
গ) ( ) ঘ) begin end
১২. িসিপিপেত একিট statementএর (িববৃিত) শেষ সাধারণত কান িচ ব বহার করা হয়?
in
ক) . খ) ; গ) : ঘ) ,
ক) ∗/comment∗/ গ) /∗comment∗/
খ) ∗∗comment∗∗ ঘ) { comment }
না বেল মেন হয় তখন কবল সমাধান দেখ িনেত পােরা। সমাধান েলা programmingএর
েলার শেষ আেছ।
১. নীেচর কথা েলা outputএ (ফলন) দখােনার জ িসিপিপেত একিট program িলেখা।
দখেত র লাগার জ তামার programএ দরকার মেতা ফাঁকা ফাঁকা িদেব আর
সহেজ বুঝার জ দরকার মেতা comment (টীকা) িলখেব।
your age i s nine years .
want to l e a r n programming ?
programming i s so easy !
২. িসিপিপেত একিট program রচনা কেরা যিট নীেচর নকশািটর মেতা নকশা তরী কের।
খয়াল কের দেখা নকশািট বাংলা অ 8 এর মেতা। তুিম চাইেল আেরা নানান নকশা,
নানান বণ বা অ িনেজর মেতা কের ভেব িনেয় সইমেতা নকশা তরী করেত পােরা।
যাইেহাক দখেত র লাগার জ তামার programএ দরকার মেতা ফাঁকা ফাঁকা িদেব
আর সহেজ বুঝার জ দরকার মেতা comment (টীকা) িলখেব।
২৩৭
∗∗ ∗∗ ∗
∗ ∗
∗ ∗ ∗
∗ ∗
∗∗ ∗∗ ∗
১. নীেচর কথা েলা outputএ (ফলন) দখােনার জ িসিপিপেত একিট program িলেখা।
দখেত র লাগার জ তামার programএ দরকার মেতা ফাঁকা ফাঁকা িদেব আর
সহেজ বুঝার জ দরকার মেতা comment (টীকা) িলখেব।
5g
your age i s nine years .
want to l e a r n programming ?
programming i s so easy !
in
িফিরি ১০.৫: Inspiring Program (অণুে রণার মেলখ)
#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 এর জ
am
i n t main ( )
{
/ / দরকারী কথা েলা এoutput দখাও
al
cout << " your age i s nine years . " << endl ;
cout << " want to l e a r n programming ? " << endl ;
cout << " programming i s so easy ! " << endl ;
২. িসিপিপেত একিট program রচনা কেরা যিট নীেচর নকশার মেতা নকশা তরী কের।
খয়াল কের দেখা নকশািট বাংলা অ 8 এর মেতা। তুিম চাইেল আেরা নানান নকশা,
নানান বণ বা অ িনেজর মেতা কের ভেব িনেয় সইমেতা নকশা তরী করেত পােরা।
যাইেহাক দখেত র লাগার জ তামার programএ দরকার মেতা ফাঁকা ফাঁকা িদেব
আর সহেজ বুঝার জ দরকার মেতা comment (টীকা) িলখেব।
∗∗ ∗∗ ∗
∗ ∗
২৩৮
∗ ∗ ∗
∗ ∗
∗∗ ∗∗ ∗
এই programিট িক অেনক মজার তাই না। তুিম িক বণমালার িতটা বণ আর ০-৯ দশ-
টা অে র জে ই এরকম নকশা তরী করেত পারেব? রা াঘােট বা িবেয় বািড়েত অেনক
সময় ছাট ছাট বািত িদেয় নানান িকছু লখা হয়, আসেল এই নকশা েলার মেতা কের নক-
শা বািনেয়ই স েলা করা হয়। Computerএর (গণিন) monitorএর (নজির) পদায়ও
অেনক িকছু এভােব দখােনা হয়। আসেল য কান ছিবই এরকম অসংখ িব র সম েয়
তরী, িকছু িব ালােনা, িকছু িব নভােনা। য িব েলা ালােনা স েলা হেলা ∗
আর য েলা নভােনা স েলা ফাঁকা। তা চেলা আমরা programিট দিখ।
i n t main ( )
{
5g
using namespace std ; / / standard namespace ব বহার
in
/ / দরকার মেতা ∗ ও ফাঁকা িদেয় নকশা
cout << " ∗∗ ∗∗ ∗ " << endl ;
cout << " ∗ ∗ " << endl ;
am
২৩৯
• Function (িবপাতক)
• Statement (িববৃিত)
5g • Code (সংেকত)
• Number (সংখ া)
in
• Software (ম ) • Editor (স াদনা)
২৪০
অধ ায় ১১
5g
Variableএর value (মান) বদলােনা যায়, িক constantএর value বদলােনা যায় না। তেব
Programএ data (উপা ) সরাসির (directly) না িলেখ variable বা constant িহসােব
ব বহার করেল একরকেমর indirection (পেরা তা) তরী হয়। ফেল data িঠক কেতা সটা
না ভেব data কীেসর আর তার processing কমন সটা ভেব program তরী সহজ হয়।
in
১১.১ Using Variables (চলেকর ব বহার)
am
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
i n t main ( )
{
cout << " area " << 5 ∗ 3
<< " squared−meter " << endl ;
cout << " perimeter " << 2∗ ( 5+ 3 )
<< " meter " << endl ;
২৪১
উপের আমরা য program ( মেলখ) িলখলাম আমরা িক ওইটা চাই না। ওইখােন সং-
খ া েলা সরাসির ে বিসেয় িহসাব কের output (ফলন) দখােনা হেয়েছ। আমরা চাই -
ফল আর পিরসীমার সূ েলা variableএর (চলক) নাম িদেয় িলখেত আর সূ িলখার আেগ
variable েলার মান িদেয় িদেত। Variable ব বহােরর নানান িবধা আেছ। যমন একিট -
িবধা হেলা ে variableএর নাম থাকায় সূ দেখই সহেজ বুঝা যায় কীেসর সূ , যমন নী-
চর program দেখা। আর একিট িবধা হেলা কউ যিদ বেল ৫ না দঘ হেব ৬, উপেরর
programএ িক ইখােন 5 বদলাইয়া 6 করেত হেব। ছাট একটা programএই যিদ ইখােন
বদলােত হয়, তাহেল বড় একিট programএর কথা িচ া কেরা, সটােত আেরা কত জায়গায় য
বদলােত হেব ইয় া নাই। আমরা এ কারেণ variable ব বহার করেবা।
িফিরি ১১.১: 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 ( )
{
5g
i n t length ; / / এই v a r i a b l e এ থাকেব দঘ ।
i n t width ; / / এই v a r i a b l e এ থাকেব
i n t area ; / / এই v a r i a b l e এ থাকেব
।
ফল।
in
i n t perimeter ; / / এই v a r i a b l e এ থাকেব পিরসীমা।
// ফল বর করার সূ হল দঘ আর ে র ণফল।
area = length ∗ width ;
ফলন (output)
area 15 squared−meter
periment 16 meter
২৪২
5g
মর আেগ এই রকম int িলেখ বুিঝেয়িছ য আমােদর এই variable েলার মান হেব integer,
আমরা কান ভ াংশ ব বহার করেবা না। তুিম যিদ ভ াংশ ব বহার করেত চাও তাহেল তা-
মােক int এর বদেল float িলখেত হেব। float হল একরকেমর ভ াংশ। আমরা ভ ক বা
float িনেয় আেলাচনা পের আেরা িব ািরত করেবা। তেব int এর বদেল float িলখেল আমােদর
in
programএ িক আর কাথাও কান িকছু বদলােত হেব না, িঠক কাজ করেব। আমরা আপাতত
int রেখই এই পােঠর আেলাচনা চালাই।
তা উপেরর programএ আমরা যখন িলখলাম int length; এর মােন হেলা length না-
am
মর আমােদর একটা variable আেছ আর তার মান হেব integer। এইেয int length; িলেখ
এই িবষয় েলা বুঝাইলাম এটােক বলা হয় variable declaration (চলক ঘাষনা)। Variable
declare করেল তারপর থেকই variableিট পরবতী যেকান statementএ (িববৃিত) ব বহার
করা যায়, িক declare করার সােথ সােথ ওইখােন variableএর মান কত সইটা িক আম-
রা জািননা, সাধারনত variableএ তখন একটা উ াপা া মান থােক। এইটা িনেয় আমরা পের
আেরা আেলাচনা করেবা। এই programএ আমরা দখিছ এর পের length = 5; িলেখ অথাৎ
al
= িচ ব বহার কের আমরা length variableএর value assign (মান আেরাপ) কেরিছ 5।
তরাং এরপর থেক length variableএর মান হেব 5। একই ভােব width variableএর
মানও আমরা 3 assign কেরিছ।
এবার খয়াল কেরা, variableএর মান assignment শষ হেল আমরা ফল আর পির-
সীমার সূ েলা িলেখিছ, সখােন িক এবার মান েলা সরাসির িলিখ নাই, তার বদেল variable-
েলা ব বহার কেরিছ। এইখােন িহসাব করার সময় variableএর য মান থাকেব সইটাই আসেল
ব বহার হেব। উপের যিদ length variableএর মান থােক 5 তাহেল 5 ধের িহসাব হেব, আর
যিদ পের length এর মান 5 এর বদেল 6 কের দয়া হয়, তাহেল 6 ব বহার হেব। এই পিরবতন
কবল মান assignmentএর ওইখােন করেলই কাজ হেয় যােব, সারা programএ করেত হেব
না। তেব একটা পূণ িবষয় বিল এখােন length আর width variable িটেত value
assignment িক ফল আর পিরসীমার ে র ব বহােরর আেগই করেত হেব। না করেল
compile করার সময় warning message (সতক বাতা) আসেত পাের, আর program চা-
লােনার সময় উে াপা া ফলও আসেত পাের।
সবেশেষ খয়াল কেরা output (ফলন) দওয়া হেয়েছ যখােন সখােন উ ৃিত িচ "" এর
িভতের যা আেছ তা িক string (মালা)। কােজই ওইটা িক ওইভােবই outputএ এেসেছ এম-
২৪৩
নিক area কথাটাও ব এেসেছ যটা িকনা variableএর নােমর ব একই রকম। িক ""
উ ৃিতর বাইের যখন area লখা হেয়েছ একই সািরেত পেরর িদেক সখােন িক আর area
outputএ আেস িন, এেসেছ সটােক variable ধরেল য মান হওয়ার কথা সই 15। কােজই
এটা মেন রাখেব য variableএর নাম "" উ ৃিতর িভতের string আকাের থাকেল ওইটা আসেল
variableটােক বুঝায় না। নামটা যখন উ ৃিতর বাইের থােক তখন ওইটা একটা নাম হয়, এই-
ে একটা variableএর নাম হয় আর ওইটার মান িনেয় কাজ হয়। একই অব া perimeter
এর ে ও। উ ৃিত িচে র িভতের থাকা perimeter কথািট ব ফলেন এেসেছ িক উ ৃিতর
বাইের থাকা perimeter কথািটর বদেল ওিটেক variable (চলক) ধরেল য মান পাওয়া যােব
তা outputএ (ফলন) এেসেছ।
i n t main ( )
{
i n t r a d i u s = 5 ; / / এিট বৃে র ব াসােধর জ variable
f l o a t const p i = 3 . 1415 ; / / পাইেয়র মান constant
২৪৪
ফলন (output)
area of c i r c l e 78 squared−cm
5g
য়িছ radius নােম যিট হেব int ধরেনর অথাৎ পূণক বা integer। বৃে র ব াসাধ যিদ তা-
মার fractioner হয়, তুিম চাইেল int ব বহার না কের float ব বহার করেত পােরা। আেগর
পােঠর সােথ এই পােঠ একটা িবষয় খয়াল কেরা, আমরা িক ব াসাধ radius variable মান
আলাদা সািরেত না িদেয় যখােন variable declare (চলক ঘাষনা) কেরিছ সখােনই = িচ
in
িদেয় value assign কেরিছ অথাৎ radius এর মান সরাসির 5 হেয় গেছ। এটােক বলা হয়
variableএর initial value assignment (আিদ মান আেরাপণ)। এটা করার েটা িবধা:
একটা হেলা আমােদর ইটা আলাদা সািরেত ইবার িলখেত হেলা না, আেরকটা হেলা েত
variableএ উ াপা া মান থাকার কারেণ programএ ভুল িহসাব করার স াবনা কেম গল।
am
জেন রােখা variable declareএর সােথ সােথ কান মান না িদেয় না িদেলও ওখােন উ া পা-
া একটা মান থােক, কী মান থাকেব আমরা িক কান ভােবই আেগ থেক সটা জািননা, পুরাই
উ াপা া একটা মান হেত পাের সটা। আর ভুল েম ওই variableএ যিদ পের আর value
assign (আেরাপ) করা না হয়, অথবা যিদ assign করার আেগই অ কান িহসােব variable-
িট ব বহার করা হয়, তাহেল স ত কারেণই উ াপা া মানিট কােজ লািগেয় একটা উ াপা া
al
২৪৫
5g
ফেলর programএ আমরা ফেলর জ area নােম একটা variable িনেয়-
িছ, যার type হল int বা পূণক. যিদও আমরা জািন পাইেয়র মান fractioner হওয়ার কারেণ
আমােদর ফলাফল আসেল একিট fractioner হেব। এইটা আমরা মুলত পরী ামুলক করিছ।
তা int নয়ার কারেণ আমরা আমােদর programএর output দখেত পােবা 78 আসেল হও-
in
য়ার কথা 78.5375। এইটা কন হেলা কারণ হেলা থেম 78.5375 িঠক মেতা িভতের িভতের
িহসাব হেয় যােব, িক যখন area variableএর মেধ মানটা assign (আেরাপ) হেব তখন য-
হতু integer বেল fractionটু ঢুকােনা যােব না, তাই ওইটা বাদ পের যােব (truncation)।
আর মান যটা assign হেব সটা হেলা বাঁকী পূণাংশটু বা 78। তা ভ াংশ সহ সিঠক ফল
am
পাওয়ার জ area এর সামেন int না িলেখ float িলেখ দাও তাহেল দখেব িঠক িঠক 78.5375
ই output িহসােব চেল আসেব।
উপেরর আেলাচনায় আমরা িতনটা ব াপার িশখলাম: ১) আমরা variable (চলক) ব বহার
করেবা, না constant ( বক) ব বহার করেবা সটা; তারপর ২) declare করার সােথ সােথ
একটা initial value িদেয় দয়া যােক বলা হয় initial assignment (আিদ মান আেরাপণ),
al
আর ৩) কান variable বা constantএর type কমন হেব, int না float হেব, পূণক না ভ ক
হেব সটা আেগ থেক ধারনা করেত পারেত হেব, আর সই অ যায়ী variable বা constantএর
কার বেল িদেত হেব, না হেল সিঠক ফলাফল নাও পাওয়া যেত পাের, যমন ভ ক 78.5375
এর বদেল পূণক 78 পাওয়া যেত পাের।
এই পােঠ িসিপিপেত একািধক variable আমরা কী ভােব সহেজ declare করেত পাির তা
আেলাচনা করেবা। আমরা আেগ দেখিছ িতিট variable আলাদা আলাদা কের, এমনিক িতিট
আলাদা আলাদা সািরেত ঘাষনা করেত। িবধার জ আমরা চাইেল একািধক variable এক সা-
িরেতই একটা statementএই declare করেত পাির, যিদ তােদর সকেলর data type (উপা
করণ) একই হয়, যমন ওই variable েলার সবই যিদ int ধরেনর হয় অথবা float ধরেনর
হয়। উদাহরণ িদেয় ব াপার েলা পির ার করা যাক। ধেরা length, width, perimeter নােম
আমরা িতনিট variable (চলক) িনলাম, িতনটা variableএর typeই int অথাৎ পূণক।
২৪৬
উপেরর িতনিট variableই যেহতু int ধরেনর, কােজই আমরা ওই িতনিট variableেক
চাইেল একিট statementএই ঘাষনা করেত পাির। সে ে আমােদর int একবার িলখেত
হেব, আর variable েলার নাম একটার পর একটা comman , (িবিত) িদেয় িলখেত হেব।
i n t length , width , perimeter ; / / সব েলাই i n t ধরেনর
5g
িক যিদ perimeter এর মেতা radius টাও float বা ভ ক ধরেনর হেতা তাহেল আমরা
এক statement িদেয়ই েটােক এক সােথ declare করেত পারতাম।
f l o a t r a d i u s , area ; / / ব াসাধ ও ফেলর চলক
in
তাহেল একটা programএই ( মেলখ) যিদ আমরা আয়েতর পিরসীমা আর বৃে র ফল
বর করেত চাই, আমরা দরকারী সব েলা variable নীেচর মেতা কের ঘাষনা করেত পাির,
যখােন int variable েলা একটা statementএ (িববৃিত) থাকেব আর float variable েলা
am
২৪৭
আমরা িক চাইেল আিদমান েলা নীেচর মেতা ঘাষনার সােথ সােথই িদেত পারতাম।
i n t length = 6 , width = 3 , perimeter ;
f l o a t r a d i u s = 5 , area ;
ঘাষনার সােথ সােথ variableএর initial value (আিদমান) assign (আেরাপ) করেল
programএর ( মেলখ) দ তা অ একটু বাড়েত পাের। কারণ ঘাষনার সােথ সােথ আিদমান
না িদেলও একটা উ াপা া মান তা িভতের িভতের দয়াই হয়, পের যখন আমরা আবার মান
দই, তখন আেরকবার দওয়া হেলা, মােন থমবােরই দওয়া হেলা না। আর ঘাষনার সােথ সােথ
আিদমান িদেল, একদম থমবােরই মানিট variableএ দওয়া হেয় গেলা। Constantএর
ে িক আিদ ও একমা মান (initial and only value) ঘাষনার সােথ সােথই িদেত হেব,
পের দয়ার কান েযাগ নাই, compiler (সংকলক) error message ( িট বাতা) দখােব।
কান variable declare করার সােথ সােথ তােত কান initial value না িদেলও য
উ াপা া মান থােক সটা কত তা যিদ জানেতা চাও তেব পরী া কের দখেত পােরা। ধেরা
তামার variable length। এখন ঘাষনার পেরই cout << "length is " << length <
< endl; িলেখ program compile (সংকলন) কের run কের দখেত পােরা। িক িতবার
5g
চালােল য একই মান আসেব তার কান িন য়তা নাই, যিদ আেস সটা নহােয়ত কাকতাল।
আমরা আেগই জািন বৃে র ফল িনণেয়র জ আমােদর পাইেয়র মান দরকার হেব, য-
িট একিট constant ( বক) আর পাইেয়র মান আসেলই ভ ক বা float। িক float হওয়া
সে ও আমরা িক পাইেয়র জ pai নামক variableিটেক radius আর area এর সােথ একই
in
statementএ ঘাষনা করেত পারেবা না। কারণ radius ও area হল variable (চলক) যা-
দর মান পের যতবার ই া বদলােনা যােব আর pai হল constant ( বক) যার মান একবার
দওয়ার পের আর বদলােনা যােব না। পাইেয়র মান তাই আলাদা কের ঘাষনা করেত হেব।
am
উপের যা িলখলাম তােত িক একটা error ( িট) আেছ, compile (সংকলন) করেত গ-
লই error ধরা পড়েব। Errorিট হল আমরা pai declare কেরিছ প ম statementএ, িক-
pai ব বহার কেরিছ চতুথ statementএ area এর সূ িলখেত িগেয়ই। কান variable
declare করার আেগ সটা ব বহার করা যােব না, compiler যখন run কের তখন স এেক
২৪৮
এেক statement েলা উপর থেক নীেচ আর বােম থেক ডােন পড়েত থােক। তা compiler
কান variable বা constant declare করার আেগই যিদ তােদর ব বহারটা পেড় ফেল য-
মন pai, তাহেল স বুঝেত পারেব না pai টা কী িজিনস, এইটা িক variable নািক constant,
এটা িক int ধরেনর নািক float ধরেনর। আমােদর তাই declare অব ই আেগ করেত হেব,
ব বহার করেত হেব পের। তা চেলা নীেচ আমরা পাইেয়র declaration আেগ কির।
i n t length = 6 , width = 3 ;
i n t perimeter = length ∗ width ;
f l o a t const p a i = 3 . 1415 ; / / ঘাষনা আেগ করা হেলা
float radius = 5 ;
f l o a t area = p a i ∗ r a d i u s ∗ r a d i u s ;
5g
পের িলখেবা সই সম াও র হয়। তাহেল পুেরা ব াপারিট দাঁড়াে নীেচর মেতা:
i n t length = 6 , width = 3 , perimeter ;
f l o a t const p a i = 3 . 1415 ;
f l o a t r a d i u s = 5 , area ;
in
perimeter = length ∗ width ;
area = p a i ∗ r a d i u s ∗ r a d i u s ;
am
৪. কখন তুিম variable (চলক) ব বহার না কের constant ( বক) ব বহার করেব?
৭. িসিপিপেত এক সািরেত কখন একািধক variable declare করা যায়? উদাহরণ দখাও।
২৪৯
১০. Constantএ কন initial value assign করেত হয়, িক পের assign করা যায় না?
১১. ফলাফল float (ভ ক) িক int (পূণক) ধরেনর variableএ assign করেল কী ঘেট?
১. এমন একিট program রচনা কেরা যিট িট int ধরেনর, আর একিট float ধরেনর
variable declare কের। Programিট তারপর variable িতনিটর মান যথা েম 10,
15, 12.6 assign কের। পিরেশেষ programিট variable েলার মান পদায় দখায়।
২. ধেরা েটা পূণ সংখ া 89 আর 56। এই িটেক তুিম েটা variableএ িনেব, আর তা-
রপর ইিট variableএ তােদর যাগফল, িবেয়াগফল িনণয় করেব। সবেশেষ সব েলা
5g
varaibleএর মান outputএ দখােব। সব িমিলেয় এমন একিট program িলেখা।
দখেবা। মেন রাখেব সমাধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা
বেল মেন হয়, তখন কবল একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান
দখেব না, িনেজ িনেজ সমাধােনর সবটা চ া আেগ কের দখেব।
১. এমন একিট program রচনা কেরা যিট িট int ধরেনর, আর একিট float ধরেনর
variable declare কের। Programিট তারপর variable িতনিটর মান যথা েম 10,
15, 12.6 assign কের। পিরেশেষ programিট variable েলার মান পদায় দখায়।
i n t main ( )
২৫০
{
i n t i n t v a r 1 , i n t v a r 2 ; / / পূণক িট এক সােথ ঘাষনা
float floatvar ; / / ভ কিট আলাদা ঘাষনা
i n t v a r 1 = 10 , i n t v a r 2 = 15 ; / / মান আেরাপণ
f l o a t v a r = 12 . 6 ; / / মান আেরাপণ
purnok d u t i 10 15
vognok holo 12 . 6 5g
ফলন (output)
in
২. ধেরা েটা পূণ সংখ া 89 আর 56। এই িটেক তুিম েটা variableএ িনেব, আর তা-
রপর ইিট variableএ তােদর যাগফল, িবেয়াগফল িনণয় করেব। সবেশেষ সব েলা
varaibleএর মান outputএ দখােব। সব িমিলেয় এমন একিট program িলেখা।
am
আমরা এই programএ কবল দরকারী অংশটু দখাি । ধের িনি য তুিম দরকা-
রী header file (িশর নিথ) include (অ ভু ) করা, namespace (নামাধার) std
ব বহার, main funciton (িবপাতক) লখা ও মান return করা ইত মেধ ভােলা কের
িশেখ ফেলেছা। তা তুিম যিদ সিত নীেচর লখা program compile কের run কর-
ত চাও, তামােক িক আেগ include, namespace, main, return ওই েলা িলেখ
িনেত হেব, তারপর main functionএর িভতের return এর আেগ তুিম আমােদর নীেচর
al
i n t sum = f i r s t + second ;
i n t d i f f = f i r s t − second ;
২৫১
5g
f l o a t f = 76 , c = 5∗ ( f − 32) / 9 ;
২৫২
অধ ায় ১২
Naming Identifiers
(শনা েকর নামকরণ)
5g
নােম কী আেস যায় কেম পিরচয়। আপনার কাজই িনধারণ কের দেব আপনার পিরচয়। আপনার
নাম পিরচয় হেব আপনার কােজর কারেণই। Program ( মেলখ) িলখেত িগেয় আমরা তাই
variable (চলক), constant ( বক), function (িবপাতক) সহ য কান িকছুর নাম দই
তােদর কী কােজ লাগােনা হেব সটা মাথায় রেখ।
in
১২.১ Well-formed Names ( গিঠত নাম)
am
িসিপিপেত variable ও constantএর ব বহার তুিম ইত মেধ িশেখ ফেলেছা। আর সােথ সা-
থ variableএর নাম কী রকম িদেত হেব সটাও আেগ একটু জেনেছা। এখন আমরা িব ািরত
ভােব িশখব িসিপিপেত কী ভােব variable বা constantএর নাম িদেত হয়, িবেশষ কের না-
মর syntax (গঠনরীিত) কমন অথাৎ নােম কী রকম অ র থাকেত পারেব অথবা পারেব না।
al
আমরা আপাতত কবল main function (িবপাতক) িনেয় কাজ করিছ। িক ভিব েত আমরা
যখন িনেজেদর জ নানান function তরী করেবা, তখন functionএর নামকরেণর জে ও
constant বা variableএর নাম তরীর িনয়ম েলাই কােজ লাগেব। Variable বা constant
বা function যাইেহাক নাম ক বলা হয় identifier (শনা ক)।
িসিপিপেত কান identifierএর (শনা েকর) নােম কবল ১) ইংেরজী বণমালার বড় হা-
তর অ র A-Z, ২) ইংেরজী বণমালার ছাট হােতর অ র a-z, ৩) ইংেরজী অংক 0-9 আর ৪)
underscore (িন দাগ) থাকেত পারেব। তেব identifierএর নােমর থম অ র আবার
অংক 0-9 হেত পারেব না, থম অ র ছাড়া অ য কান অ র িহসােব অংক েলা ব বহার করা
যােব। তরাং বাঝাই যাে থম অ র য কান বণ A-Z বা a-z অথবা underscore (িন -
দাগ) হেত পারেব। আর তারপেরর য কান অ র বণ বা অংক বা underscore হেত পারেব।
িসিপিপেত identifierএর নােমর length ( দঘ ) িনেয় কান িবিধিনেষধ নই তেব program
( মেলখ) compileএ (সংকলন) কী compiler (সংকলক) ব বহার করা হে তার ওপর এটা
িনভর করেত পাের। cpp.sh িদেয় compile করেল কান িবিধ িনেষধ নই, মাইে াসফট c++
িদেয় compile করেল ২০৪৮ অ র পয হেত পাের। যাইেহাক আমরা এখােন syntax অ যায়ী
legal ও illegal িকছু নাম দখেবা।
২৫৩
অৈবধনাম কারণ
12 নােমর সব েলার অ র অংক হেত পারেব না
12cholok নােমর থম অ র অংক হেত পারেব না
amar cholok নােমর মাঝখােন কান ফাঁকা (space) থাকেত পারেব না
ama;cho+k বণ, অংক, িন দাগ ছাড়া অ কান তীক থাকেত পারেব না
Programএ ( মেলখ) অৈবধ নাম ব বহার করেল কী হয়? কের দেখা কী হয়! Compiler
(সংকলক) error message ( িটবাতা) িদেব, আর তামােক নামিট িঠক করেত হেব। তাহেল
এখন থেক তামার programএ নাম দওয়ার সময় নােমর এই গঠনরীিত েলা মেন চলেব।
বধনাম কারণ
p একটাই অ র সিট ছাট হােতর বণ
P একটাই অ র সট বড় হােতর বণ
abc িতনটা অ র সব ছাট হােতর বণ
ABC িতনটা অ র সব বড় হােতর বণ
Abc িতনটা অ র ছাটহােতর বড়হােতর িমশােনা
bAc
a1bc
a1Bc
a bc
abc
5g
িতনটা অ র ছাটহােতর বড়হােতর িমশােনা
িতনটা ছাটহােতর অ র ও একটা অংক, অংকিট
িতনটা ছাটবড় হােতর অ র ও একটা অংক যিট
েত নয়
েত নয়
িতনটা ছাটহােতর অ র ও একিট িন দাগ (underscore)
িতনটা ছাট হােতর অ র ও িতনিট িন দাগ
in
Abc িতনটা ছাটবড় হােতর অ র ও িতনিট িন দাগ
amar cholok ছাটহােতর অ র ও িন দাগ, নামিট অিধক বাধগম
amar Cholok ছাটবড় হােতর অ র ও িন দাগ, অিধক বাধগম
am
িসিপিপেত identifierএর (শনা ক) নাম কমন হেত পাের আর কমন হেত পাের না, আমরা তা
আেগর পােঠ দেখিছ। এই পােঠ আমরা দখেবা নােমর অথেবাধকতা (semantic)। আমরা যখন
কান নাম দেবা, তখন নামিট অব ই অথবহ হওয়া চাই। আমরা আেগর একিট পােঠ অ একটু
আেলাচনা কেরিছ নােমর অথেবাধকতা িনেয়। এখন আেরা িব ািরত আেলাচনা করিছ নাম েলা
কমন হেল ভােলা হয় স স েক। Variable (চলক) বা constant ( বক) বা function
(িবপাতক) নাম সবসময় তার কাজ ও ব বহােরর িদেক খয়াল রেখ অথেবাধক হওয়া উিচৎ।
অথেবাধক না হেল program ( মেলখ) বাঝা আমােদর জ কিঠন হেয় যায়।
অেনেক অিতির আ েহ য ত িনেজর বা ি য় কােরা নােম identifierএর নাম িদেয় থােক
যমন gonimia1, gonimia2, ইত ািদ। তা এই variable েটার একটা যিদ ব াসােধর জ
আেরকটা যিদ ফেলর জ ব বহার করা হয়, তাহেল variableএর নাম থেক মােটও বুঝা
যােব না কান নামিট কী কােজ ব ব ত হে । ব াসােধর জ বরং radius বা bashardho
অথবা িনেদনপে r বা b ব বহার করা যেত পাের। এক অ েরর নাম দয়া অেনেক পছ কের,
কারণ তাড়াতািড় লখা যায়, িক একই আদ া র যু একািধক variable থাকেল তখন মুশিকল
হেয় যায়। সে ে ওই অ েরর সােথ আেরা অ র লািগেয় অথবা সংখ া লািগেয় িতিট নামেক
আলাদা করেত হেব, যােত অ ত বুঝা যায় কান variableিট কী উে ে ব বহার করা হেয়েছ।
২৫৪
আমরা যিদ েটা বৃ িনেয় কাজ কির তাহেল তােদর ব াসােধর জ িট variable হেতই
পাের radius1 আর radius2 তােত কান সম া নাই। ব াপারটা দীপু ন র ২ চলি ে র মেতা,
একজেনর নাম দীপু ন র ১ আর একজন দীপু ন র ২। অথবা কউ চাইেল নাম িদেত পাের
radiusA আর radiusB। এভােব একই ধরেনর কােজ ব বহার হেব এরকম variable অেন-
ক েলা লাগেল আমরা সংখ া লািগেয় বা বণ লািগেয় আলাদা আলাদা নাম তরী কের িনেবা। এর
জ অব array (সাজন) নােম আলাদা একটা ধারণা আেছ, যটা আমরা পের জানেবা। Array
ব বহার কের আমরা সংখ া লািগেয় যত ই া তত েলা একই ধরেনর নাম পাই। অেনেক আলেসিম
কের অথবা কান কারেণ identifierএর (শনা ক) নাম করণ করেত থােক a, b, c, p, q, r
, i , j , k, x, y, z ইত ািদ এেকর পর এক অ র িদেয়। এটা খুবই বােজ অভ াস। এইরকম
identifier মােটও অথেবাধক নয়। এ েলা থেক বুঝার কান উপায় নই কান variableিট
িঠক কী কােজ ব বহার করা হে । সবসময় এরকম নামকরণ থেক ের থাকেব।
এখােন করেত পােরা: নামকরেণ িক সবসময় একটা মা শ ই ব বহার করেবা? এেকর
অিধক শ ব বহার করেবা না? উ র হে অথেবাধক করার জ তুিম দরকার মেতা একািধক
শ অব ই ব বহার করেব, এইটা খুবই ভােলা অভ াস। আর সে ে যােত িতিট শ খুব
সহেজ বাঝা যায় স জ তামার িকছু কৗশল অবল ন করেত হেব। একটা কৗশল হেলা িট
5g
শে র মােঝ একিট underscore (িন দাগ) দওয়া যমন my var। আেরকিট কৗশল হল
িতিট শে র থম অ রিট বড়হােতর দওয়া আর অ েলা ছাট হােতর, যমন MyVar তেব
চাইেল একদম থম শে র থম অ রিট ছাটহােতরও রাখেত পােরা যমন myVar। নীেচর
সারণীেত আমরা িকছু অথেবাধক নােমর উদাহরণ দখেবা।
in
নাম যেথাপযু তার কারণ
sum যাগফেলর জ sum চলেকর ইংেরজী নাম
jogfol যাগফেলর জ jogfol চলেকর বাংলা নাম
am
২৫৫
ছাটহােতর িকছু অ র বড় হােতর এইভােব িলখেত পারেবা িকনা। িবেশষ কের আমরা জািন ইং-
রজীেত আিম ছাট হােতরই িলিখ আর বড় হােতরই িলিখ শ টা আসেল একই থােক, িসিপিপেতও
িক তাই? আমরা বরং উদাহরণ িদেয় ব াপারটা দিখ। ইংেরজীেত ছাট হােতর বড় হােতর অ র
আলাদা হেলও ও েলা কবলই সৗ যবধন মুলক। উপেরর িতনেট ইংেরজী বাক তাই একই।
এবার আমরা িসিপিপ ভাষায় ছাট হােতর বড় হােতর অ েরর ব বহার দিখ। নীেচর নাম -
লার ত েকিট িসিপিপ ভাষায় আলাদা আলাদা নাম িহসােব ধরা হেব।
myvariable , myVariable , MyVariable , m y v a r i a b l e ,
My Variable , myVariable , MyVaRiAbLe
5g
আেরকটােক বুিঝেয় না ফেলা, তােত সব ভজঘট লেগ যােব। তামার programও উ াপা া
ফলাফল িদেব। আবার ধেরা তামার একটাই variable যার নাম myvariable, িক পের তুিম
িলেখেছা myVariable। এই অব ায় compile (সংকলন) করেল তামােক "myVariable is
not declared" এইরকম error message ( িটবাতা) িদেব। তামােক তখন myVariable
এর বদেল myvariable িলেখ িঠক করেত হেব। Program তরীর সময় আমরা ায়শই এই-
in
রকম ভুল কের থািক। আর তখন আমােদর এইভােব িঠক কের িনেত হয়।
উপেরর এই িনয়ম জানার পের তুিম হয়েতা মেন করেব এইটা তা ভােলাই। আমার যিদ ইটা
বৃে র ব াসােধর জ চলক লােগ একটার নাম িদেবা radius আর একটার নাম িদেবা Radius।
am
াঁ, তুিম সটা িদেতই পােরা। িসিপিপ যেহতু ইটােক আলাদা আলাদা variable িহসােব ধের
িনেব, তাই এই েটা হেলা েটা বধ আলাদা নাম। তেব অথেবাধকতার িদক ভেব তুিম হয়েতা
এরকম নাম করণ থেক দূের থাকার চ া করেব। একটা অ র বড় বা ছাটহােতর কবল এই
অ একটুখািন িভ তা িদেয় আসেল তমন বশী অথেবাধক পাথক তরী করা যায় না, ফেল
program ( মেলখ) পড়া কিঠন হয়। আর একটা ব াপার: variableএর নামকরেণ বড়হােতর
ছাটহােতর অ র িমশােত তা পােরাই যমন MyVariable, িক এমন ভােব িমিশও না য
al
পড়াটা খুব কিঠন হেয় যায়, যমন MyVaRiAbLe, এই রকম নাম চট কের পড়া আসেল স ব
না, বরং এইরকম নাম য নাদায়ক। কােজই সবিমিলেয় সহজ ও র নাম িদেব, কমন!
২৫৬
জামাইেক বকেত থােক "তুিম জােনা না আমার ভাই অথাৎ তামার ালেকর নাম লাল"। য
বাসায় ালেকর নাম লাল, সই বাসার কােজর ছেলর নাম লাল হয় কমেন, ালক হেলা
বড় টুম, তার কী এত বড় অস ান করা যায়! আর জামাইেয়র নাম হেলা কােদর। তা বউ আেরা
এক কািঠ বািড়েয় বলেত থােক িঠক আেছ কােজর ছেলর নাম বদেল কােদর রাখা হউক, দিখ
জামাইেয়র কমন লােগ। তারপর জামাইেয়র সামেনই কােজর ছেলেক বেল "এই এখন থেক
তার নাম িদলাম কােদর।" তারপর হঁেড় গলায় ডাকেত থােক "কােদর, এই কােদর, এই িদেক
আয়।" কমন একটা বড়ােছড়া অব া। শষ পয িঠক হয় এক বাসায় ইটা লাল তা হেত
পােরনা, একজেনর নাম বদলােত হেব। আর বাসার বড় টুেমর নাম তা আর বদলােনা যােব না
কান ভােবই, ওটা সংরি ত নাম, কােজই বদলােত হেব কােজর ছেলর নাম। তরাং কােজর
ছেলর নাম দয়া হয় লাল া। তাহেল ালেকর নাম লাল, আর কােজর ছেলর নাম লাল া।
িসিপিপ ভাষায় গঠন কাঠােমা িঠক রাখার জ িকছু িনিদ শ আেছ। আমরা ইত মেধ
এরকম িকছু শ ব বহার কেরিছ। যমন return, int , float। এই শ েলার অথ িসিপিপ
ভাষােত আেগ থেক িনিদ , যমন return মােন যখন function (িবপাতক) শষ হয়, int
আর float হল variableএর মান কমন পূণক বা পূণ সংখ া না ভ ক বা ভ সংখ া এইর-
কম। এই িতনিট ছাড়াও আেরা অেনক েলা এই রকম শ আেছ। এই শ েলা চাইেল আমরা
5g
িনেজরা আমােদর variable (চলক) বা constant ( বক) বা functionএর (িবপাতক) নাম
িহসােব ব বহার করেত পারেবা না। এই েলা হে reserved word (সংরি ত শ )। এই শ -
েলােক অ কথায় key wordও (চািব শ ) বলা হয়। তাহেল তামার মেলখেত তুিম এই প
reserved word বা key word identifierএর (শনা ক) নাম িহসােব ব বহার করেব না।
in
কারণ ও েলা বড় টুম লােলর নােমর মেতা। যিদ একা ই দরকার হয় তাহেল লাল ক -
লাল া বানােনার মেতা িকছু যাগ-িবেয়াগ কের িভ শ বািনেয় ব বহার করেব। যমন return
না ব বহার কের returnValue ব বহার করেল, এইরকম। নীেচ আমরা িসিপিপর reserved
word েলার তািলকা িদি ।
am
২৫৭
• Template (ছাঁচ) সং া শ :
export, template, typename
িনেজ বর করেব।
5g
Conceptual Questions: নীেচ িকছু conceptual রেয়েছ।
৪. অথেবাধক নাম কী? Programএ অথেবাধক নাম ব বহার করা উিচৎ কন?
৬. Reserved ও key word কী? এ েলা কন identifier িহসােব ব বহার করা যায় না?
al
২৫৮
5g
৩. double : Reserved word (সংরি ত শ ), বড় আকােরর ভ েকর জ
৪. time : বধ identifier (শনা ক), িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ
৮. cout : বধ identifier (শনা ক), িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ
১০. part#2 : অৈবধ identifier (শনা ক) কারণ নােম # ব বহার করা যায় না
১১. "char" : অৈবধ identifier (শনা ক) কারণ নােম " ব বহার করা যায় না
al
১৯. Name : বধ identifier (শনা ক), অথেবাধক, কীেসর নাম সটা পির ার নয়
২০. name : বধ identifier (শনা ক), অথেবাধক, কীেসর নাম সটা পির ার নয়
২৫৯
২১. name 1 : বধ identifier (শনা ক), অথেবাধক, কীেসর নাম সটা পির ার নয়
২২. Int : বধ identifier, তেব সংরি ত শ int এর সােথ িব াি দখা িদেত পাের
২৩. INT : বধ identifier, তেব সংরি ত শ int এর সােথ িব াি দখা িদেত পাের
২৯. int : Reserved word (সংরি ত শ ), পূণক উপা ধারেনর জ উপা করণ
5g
৩০. pow : বধ identifier, অথেবাধক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ
৩১. $sum : অৈবধ identifier (শনা ক), নােম $ িচ ব বহার করা যায় না
৩২. numˆ2 : অৈবধ identifier (শনা ক), নােম ˆ িচ ব বহার করা যায় না
in
৩৩. num 1 : অৈবধ identifier (শনা ক), নােম ফাঁকা ব বহার করা যায় না
am
• Structured (সংগিঠত)
• Bit-wise operators (িবট িত অণু-
• Programming (পিরগণনা) ি য়া)
• Structured programming (সং-
গিঠত পিরগণনা) • Data type (উপা করণ)
২৬০
অধ ায় ১৩
5g
Programএ ( মেলখ) data (উপা ) কাথা থেক আেস? হয় আমরা programএর িভতের
সরাসির িলেখ দই, যমনিট আেগর পাঠ েলােত কেরিছ, আর না হয় আমরা data ব বহারকারী-
দর কােছ থেক input ( যাগান) নই। Data input িনেয় সিটেক ধারন করার উে ে আমরা
variableএ (চলক) assign (আেরাপণ) কির যােত ওই data পের কােজ লাগােনা যায়।
in
১৩.১ Data Input (উপা যাগান)
am
িসিপিপেত এমন একিট program িলেখা যিট য কান আয়েতর ফল ও পিরসীমা িন-
ণয় করেত পাের। তামার program তুিম মা একবারই compile (সংকলন) করেত পার-
ব, আর েত ক আলাদা আয়েতর জ তুিম programিট বারবার কবল চালােত পারেব, িক
programএর িভতের দঘ ও বদেল িদেয় বারবার compile করেত পারেব না। তারমােন
তামােক দঘ ও input ( যাগান) িহসােব userএর কােছ থেক িনেত হেব।
উ program লখার আেগ চেলা আমরা িকছু দরকারী আেলাচনা সাির। আমরা যখন কান
al
২৬১
i n t main ( )
{
5g
in
i n t length ; / / আয়েতর দেঘ র জ চলক
c i n >> length ; / / দঘ যাগান িহসােব নওয়া হেব
am
// ফল ও পিরসীমার সূ
i n t area = length ∗ width ;
i n t perimeter = 2∗ ( length + width ) ;
al
// ফল ও পিরসীমা ফলন
cout <<" area i s "<< area << endl ;
cout <<" perimeter i s "<< perimeter << endl ;
যাগান-ফলন (input-output)
13
12
area i s 156
perimeter i s 50
২৬২
উপেরর programএ খয়াল কেরা আমরা দেঘ র জ একিট variable length ঘাষনা
কেরিছ, িক সােথ সােথ তার কান initial value assign (আিদমান আেরাপ) কির নাই। কারণ
আেগই যমন আেলাচনা করলাম, আমরা যখন program িলখিছ তখন আমরা আসেল জািননা য
length এর মান কেতা। আমরা বরং ওইটা userএর কােছ থেক নেবা। আর স কারেণ আমরা
cin >> length; িলেখিছ। এখােন cin হল console in। সাধারণত input device ( যাগান
য ) keyboard (চাপিন) ও mouse (িটপিন) আর output device (ফলন য ) monitor
(নজির) িমিলেয় হল আমােদর console বা য ালয়। তা console in বলেত আমরা এখােন
input device িবেশষ কের keyboard (চাপিন) থেক input ( যাগান) নয়া বুঝাি । তাহেল
cin userএর কােছ থেক keyboardএর মাধ েম সংখ াটা িনেয় সটা length variableএর
িভতের িদেয় িদেব। এেত ওই variableএ একরকেমর value assign হেয় যােব।
Userএর কােছ থেক দঘ নবার পের আমােদর ও িনেত হেব। উপেরর programএ
খয়াল কেরা আমরা দেঘ র মেতা কের ে র জ ও width নােম একটা int ধরেনর variable
ঘাষনা কেরিছ আর তার পেরর সািরেত cin ব বহার কের width এর মান userএর কােছ থেক
নয়ার কথা িলেখিছ। উপেরর programএর বাঁকী অংশটু তা আেগর পােঠর program -
লােত যমন দঘ ও ব বহার কের ফল ও পিরসীমার সূ িলখা হেয়েছ আর তারপের
5g
output (ফলন) দখােনা হেয়েছ িঠক তমনই। আমরা স েলা আর আেলাচনা করিছ না।
এবার আমরা আর একটু আেলাচনা কির উপেরর programিট compile (সংকলন) কের
চালােল কী ঘটেব তা িনেয়। উপেরর programিট চালােল আমরা দখব screenএ (পদা) িকছু
আসেছ না, cursorটা (চটুল) কবল লাফালািফ করেছ। আমরা এই অব ায় দেঘ র মান, ধরা
in
যাক 13 চেপ enter (ভুি ) চাপেবা। িভতের িভতের cin ওই মান িনেয় length variableএর
মেধ রেখ িদেব। Cursorটা (চটুল) তারপরও লাফালািফ করেব। আমরা তখন 12 িদেয় enter
(ভুি ) চাপেবা, cin ওইটা width variableএ রেখ িদেব। তারপর screenএ আমরা output
দখেত পােবা। থম সািরেত থাকেব area is 156 আর পেরর সািরেত perimeter is 50।
am
উপের programএ আমরা চাইেল িকছু সংি করণ করেত পাির। যমন দঘ ও এর
variable িট declare ও input নয়া চার সািরেত না কের আমরা ও েলােক মা ই সািরেত
সারেত পাির। থম সািরেত আমরা variable েটা declare করেবা। আর পেরর সািরেত আমরা
variable েটার input িনেবা। নীেচর programএ এই েলা দখােনা হেলা।
i n t length , width ; / / আয়েতর দেঘ ও ে র জ চলক
al
কউ যিদ চায় তাহেল িক output অংেশও এরকম সংি করণ করেত পাের। যমন -
ফল ও পিরসীমা চাইেল এক সািরেতই output িদেত পাের।
cout << " area and perimeter are " << area << " " <<
perimeter << endl ; / / cout হেত এই পয পুেরাটা আসেল এক
সািরেত
তেব সবিকছু একবার cout িদেয় দওয়ার চেয় আমরা হয়েতা ইবাের িদেত চাইেবা।
২৬৩
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
5g
িফিরি ১৩.২: Program with Input Prompt ( যাগান যাচনার মেলখ)
in
using namespace std ;
i n t main ( )
am
{
i n t length ; / / আয়েতর দেঘ র জ চলক
cout << " length i s ? " ; / / মান যাচনা করা হে
c i n >> length ; / / দঘ যাগান িহসােব নওয়া হেব
// ফল ও পিরসীমার সূ
i n t area = length ∗ width ;
i n t perimeter = 2∗ ( length + width ) ;
২৬৪
যাগান-ফলন (input-output)
length i s ? 13
width i s ? 12
area i s 156
perimeter i s 50
আেগর পােঠর programএ আমরা variableএর মান userএর কােছ থেক নয়ার জ
cin ব বহার কেরিছ। ওই programিট যখন আমরা চালাই তখন দিখ screenএ (পদা) িকছু নাই
আর cursorটা (চটুল) কেনা যেনা লাফালািফ করেছ। সই অব ায় আমরা থেম দেঘ র মান
13 িদেয় enter (ভুি ) চেপিছ। Cursorটা (চটুল) তারপরও লাফালািফ করিছল। আমরা তখন
12 িদেয় enter চেপিছ। তারপর screenএ output এেসিছল থম সািরেত area is 156
আর পেরর সািরেত perimeter is 50। তা এই য cursorটা (চটুল) লাফালািফ করিছল দঘ
ও ে র মান নয়ার জ এইটা আমরা বুঝেত পাির কারণ আমরা িনেজরাই এে ে programিট
তরী write) কেরিছ আর িনেজরাই সটা compile (সংকলন) কের চালাি (run)। আমরা
এে ে জািন য আমােদর programিট থেম দঘ চাে আর সটা দবার পর চাে ।
5g
এবার ভেব দেখা আমােদর লখা program যিদ আমরা ছাড়া অ কউ চালায় (run) তাহেল
স কী ভােব জানেব cursorিট (চটুল) ওই অব ায় কন লাফাে । স িক আসেলই দঘ বা
নয়ার জ অেপ া করেছ নািক িভতের িভতের ঘটনা অ িকছু, স হয়েতা অ িকছু করেছ।
তা ওপেরর সম া সমাধােনর জ আমরা যিট করেবা সিট হেলা আমােদর programএ
in
cin >> length; লখার আেগ আমরা একটা message দখােবা য আমরা দেঘ র মান চাই।
উপেরর program খয়াল কেরা cin >> length; লখার আেগ আমরা cout << "length
is? "; িলেখ আসেল সটাই করেত চাইিছ। এই program যখন চালােনা হেব তখন থেম
am
screenএ length is? দখা যােব। আর cout এর শেষ আমরা যেহতু endl অথাৎ end
line দই নাই, cursorটা (চটুল) সেহতু ওই একই সািরেত লাফাইেত থাকেব, লাফাইেত থাকেব
মুলত cin >> length; এর কারেণ length এর মান নয়ার জ । আমরা তখন length এর
মান িদেয় enter (ভুি ) চাপেবা। তাহেল "চটুল কন লাফায়?" আমরা এই সম ার সমাধান
কের ফললাম কমন! এই য input ( যাগান) নবার আেগ একটা message িদেয় userেক
জানােনা য আমরা কী input চাই, এই ব াপারিটেক বলা হয় input prompt ( যাগান যাচনা)।
al
উপেরর programএ খয়াল কেরা আমরা ে র জে ও একই ভােব input ( যাগান) নবার
আেগ "width is? " message িদেয় input prompt ( যাগান যাচনা) কেরিছ। তাহেল এখন
থেক তামার programএ input নবার আেগ অব ই input prompt করেব, কমন?
উপের programএ আমরা চাইেল িকছু সংি করণ করেত পাির। যমন দঘ ও িট
declare ( ঘাষনা), input prompt ( যাগান যাচনা) করা, ও input ( যাগান) নয়া ছয় সা-
িরেত না কের আমরা ও েলাক মা িতন সািরেত সারেত পাির। থম সািরেত আমরা variable
েটা declare করেবা। আর পেরর সািরেত আমরা input prompt করেবা তারপের সািরেত
variable েটার মান input িনেবা। নীেচ programএ ( মেলখ) এই েলা দখােনা হেলা।
i n t length , width ; / / দেঘ ও ে র জ চলক
cout << " length & width are ? " ; / / একসােথ যাচনা
c i n >> length >> width ; / / দঘ ও যাগান
২৬৫
চাপেত পারেবা, অথবা চাইেল 13 িলেখ enter চেপ তারপর 12 িলেখ আবার enter চাপেত
পারেবা। আর outputএর অংশ আেগর মেতাই হেব, কােজই আমরা সটা আর দখাি না।
length & width are ? 13 12
5g
উপের আমরা েটা variable declare (চলক ঘাষনা) করলাম: একটার নাম amar আর
আেরকটার নাম tomar, েটাই int ধরেনর অথাৎ পূণক, একটােত initial value (আিদমান)
িদেয় িদলাম আর একটােত িদলাম না। আমরা যখন variable declare কির তখন আসেল আম-
রা computerএর (গণিন) memoryেত ( রিন) িকছু জায়গা দখল কির। ধের িনেত পােরা
memory হল একটা রা ার পােশ অেনক েলা একই রকম বাড়ী। কান variable declare
in
করার সময় আমরা আসেল ওই বাড়ী েলার একটা দখল কের সই বাড়ীটার নাম িদেয় দই আমা-
দর variableএর নােম। তামরা িন য় দেখেছা অেনেকরই বাড়ীর নাম থােক যমন "শাি
নীড়"। আমােদর varaible বাড়ী েলার নাম amar ও tomar। তা আমরা যখন উপেরর -
am
টা variable declare করলাম তখন memoryেত ওই রকম েটা জায়গা িনেয় তােদর নাম
িদেয় িদলাম amar আর tomar। এখন কথা হে memoryেত ( রিণ) ওই জায়গায় আমরা
আসেল রাখেবা কী? উ রটােতা সহজ আমরা রাখেবা variableিটর মান। যখন আমরা initial
value িদেয় িদলাম তখন ওই জায়গােত আমােদর দয়া মানটা থাকেব, আর যখন initial value
িদেবা না, তখনও ওই জায়গািটেত আেগ থেক যাই িছল তাই থাকেব।
amar = tomar ;
al
এবার আমরা যিদ উপেরর মেতা কের tomar এর মান amar এ assign কির তাহেল কী
ঘটেব? আসেল উপেরর এই statement (িববৃিত) চালােনার পের amar এর আেগর মান মুেছ
িগেয় সটার নতুন মান হেয় যােব tomar এর মােনর সমান অথাৎ amar এর মানও হেব 5।
এখােন একটা পূণ িবষয় বেল রাখেত হেব য এই য tomar থেক amar এ মান assign
করা হেলা এেত িক tomar এর মােন কান পিরবতন হেব না। অথাৎ tomar এর মান আেগর
মেতা 5-ই থাকেব। Assignmentএ (আেরাপণ) সমান িচে র বােম যা থােক সটােক target
(ল ) আর ডােন যটা থােক সটােক source (উৎস) বলা হয়, কারণ source থেক মান িনেয়
targetএ assign করা হয়। উপেরর assignmentএ amar = িচে র বােম তাই এিট target
আর tomar ডানপােশ তাই এিট source। Assignmentএর ফেল targetএর মান বদেল িক
sourceএর মান বদেল না, একই থােক।
উপেরর program ( মেলখ) আর output (ফলন) ল কেরা। আমরা থেম variable
x declare কের তার initial value (আিদ মান) িদেয়িছ 3, তারপর variable y declare কের
তার initial value িদেয়িছ x+5 অথাৎ 3 + 5 = 8। এই পযােয় output দখােনা হেয়েছ x
আর y েটার মােনরই। Outputএ আমরা দখেত পাি x 3 y 8। তারপর programএ
২৬৬
5g
cout << " x " << x << " y " << y << endl ; / / মান দখাও
ফলন (output)
x 3 y 8
x 24 y 8
x 20 y 8
x 20 y 40
al
সবিমিলেয় একটা িবষয় দখা যাে assignmentএ (আেরাপণ) = িচে র বােমর target
variableএর (ল চলক) মান কবল পিরবতন হয়, আর = িচে র ডােন থাকা variable
(চলক) বা expressionএর (রািশ) এর মান কান পিরবতন হয় না। আেরকিট ব াপার হেলা
কান variableএ পের কান নতুন মান assign না হওয়া পয আেগরবার য মান assign করা
হেয়িছল সটাই থােক।
২৬৭
উপের আমরা কবল variable x আর y declare কের তােদর initial value িহসােব 12
ও 13 িদেয় িদলাম। এখন আমরা এমন িকছু করেবা যােত x আর y মান swap হেয় যায়। থেমই
আমরা একটা চটুল সমাধান কির। তামােদর মেধ যারা ু ধরেনর আর চটপেট তারা সাধারণত
এই সমাধানিট করেত চাইেব। নীেচর িববৃিত েটা ল কেরা: আমরা ফ x এর মেধ সরাসির
13 assign কেরিছ আর y এর মেধ 12 assign কেরিছ। ব স হেয় গল x আর y এর মান অদল-
বদল! আসেল আমরা কী এইেট চেয়িছলাম? এখােন তা variable েটার মেধ একটা থেক
আেরকটােত মান নয়ার মেতা কান ঘটনা ঘেট িন, কােজই কান অদল বদেলর িকছু ঘেট িন!
x = 13 ; / / x এর মান a s s i g n করা হেলা
y = 12 ; / / y এর মান a s s i g n করা হেলা
5g
পয়ালা নয়া। ধেরা সটা কােঠর পয়ালা। এই কােঠর পয়ালািট তুিম একটা থেক আেরকটােত
ঢালাঢািলর কােজ ব বহার করেব। তাহেল এই অিতির কােঠর পয়ালা কােজ লািগেয় কীভােব
তামার কাঁচ আর কাঁসার পয়ালার ফেলর রস অদল-বদল করা যায়, আমরা নীেচ তা দিখ।
in
১. একদম েত কাঁেচর পয়ালায় রেয়েছ আমােদর আঙুেরর রস আর কােঠর পয়ালা খািল।
তরাং কাঁেচর পয়ালা থেক আঙুেরর রস কােঠর পয়ালায় ঢােলা। ফেল কােঠর পয়ালায়
থাকেলা আঙুেরর রস আর কাঁেচর পয়ালা খািল হেয় গেলা।
am
২. কাঁেচর পয়ালা যেহতু এখন খািল আর কাঁসার পয়ালায় আেছ কমলার রস, আমরা তাই
কাঁসার পয়ালার কমলার রস কাঁেচর পয়ালায় ঢালেবা। ফেল কাঁেচর পয়ালায় থাকেলা
কমলার রস আর কাঁসার পয়ালা খািল হেয় গেলা।
৩. কাঁসার পয়ালা যেহতু এখন খািল আর কােঠর পয়লায় আেছ আঙুেরর রস, আমরা তাই
কােঠর পয়ালার আঙুেরর রস কাঁসার পয়ালায় ঢালেবা। ফেল কাঁসার পয়ালায় থাকেলা
al
২৬৮
পয়ালয় ঢালেল যটা থেক ঢালা হেলা সই পয়ালা খািল হেয় যায়। িক variableএর ে z
= x; করেল variable xএর মান variable zএ assign হয় িঠকই, িক variable x িকছুেতই
খািল হয় না, বরং তার য মান িছেলা সটাই থােক। Variableএর মান বদেল যায় কবল যখন
এেত নতুন মান assign করা হয়।
কান variableএর (চলক) l-value (বাম-মান) ও r-value (ডান-মান) বলেত কী বুেঝা? কান
variableএ মান assign করেত গেল আমরা assignment (আেরাপণ) = িচ িদেয় বােম
ও ডােন িকছু িলিখ যমন y = x;। এখােন বােমরিটেক বলা হয় target (ল ) আর ডােনরিট-
ক বলা হয় source (উৎস)। Assignmentএর (আেরাপণ) ফেল ডান পােশর source থ-
ক মান বাম পােশর targetএ assign হয়। কথা হে assignment = িচে র বােম আমরা
কী কী িদেত পারেবা বা পারেবা না, আর ডােনই বা কী কী িদেত পারেবা বা পারেবা না? তাছা-
5g
ড়া একটা variableএর নাম assignment = িচে র বাম বা ডানপােশ িলখেল এই ই ে
variableএর ভুিমকায় আসেল কান তফাৎ হয় িকনা?
এই আেলাচনায় যাওয়ার আেগ আমরা একটু পেরর উ ৃতাংশটু িবেবচনা কির। "ঢাকার মামা
হািলম িবখ াত। চল আমরা মামা হািলম খাই। তুিম খােব এক বািট, আিম খাব এক বািট। আমার
বািটটা পির ার নয়, তামার বািটটা পির ার।" তা এইখােন বািট মােন কখন আসেল হািলম
in
আর কখন আসেল সটা পা ? আমরা বুঝেত পাির "তুিম খােব এক বািট, আিম খাব এক বািট"
এই কথা েলােত বািট বলেত আসেল সিত সিত পা টােক কামেড় কামেড় খাওয়ার কথা বলা
হে না, বরং তুিম এক বািট পিরমান হািলম খােব আর আিম এক বািট পিরমান হািলম খােবা
am
তাই বুঝােনা হে । এক বািট হািলম মােন একটা বািটেত থাকা হািলম। িবষয় েলােক চলক আর
তার মােনর সােথ িমলাও। বািট িঠক যন চলেকর মেতা আর হািলম হল তার মােনর মেতা। আবার
"আমার বািটটা পির ার নয়, তামার বািটটা পির ার।" এই অংেশ বািট মােন আসেল বািট নােমর
পা টা, সই পাে ঢালা হািলম নয় কান ভােবই। তাহেল দখা যাে বািট বলেত কখেনা কখেনা
আসেল পা টােক বুঝােনা হয় আর কখেনা কখেনা পা টােত থাকা হািলমেক বুঝােনা হয়। একই
ভােব variableএর নাম উে খ করেল কখেনা কখেনা variableিটর মানেক বুঝােনা হয়, কখেনা
al
২৬৯
এর জায়গায় লখা হেব না। আমরা দখিছ এখােন variable x আেরাপ = িচে র ডা-
ন রেয়েছ। যখন variable x আসেল তার মানটােক বুঝায় তখন আমরা এটােক বলব
variable r-value (ডান-মান)। Variableএর r-value িদেয় আমরা তাহেল বুঝােবা
variableএর য মান সিটেক, memoryেত থাকা জায়গািটেক নয়।
উপেরর আেলাচনা থেক আমরা একটা িবষয়ই পির ার করেত চেয়িছ সটা হেলা, আেরাপ
= িচে র বােম আমরা কবল এমন িকছু িদেত পারেবা যার জ memoryেত জায়গা দখল করা
আেছ, অথাৎ যার l-value (বাম-মান) আেছ। আর assign িচে র ডান পােশ আমরা এমন িকছু
িদেত পারেবা যার মান আেছ অথাৎ r-value (ডান-মান) আেছ। একটা িবষয় খয়াল কেরা যার
l-value আেছ অথাৎ memoryেত যার জায়গা আেছ তার একটা মানও থাকেবই অথাৎ তার
r-value থাকেবই, যমন য কান variableএর। কথা হে এমন িকছু িক আেছ যার r-value
আেছ িক l-value নাই। উ র ধের িনেত পােরা আেছ। যমন x = 3; এইখােন 3 এর r-value
আেছ িক l-value নাই। কােজই কউ চাইেল 3 = x; িলখেত পারেব না, compile (সংক-
লন) করার সময় error দখােব, বলেব "error: lvalue required as left operand of
assignment"। একই ভােব কউ চাইেল assignment িহসােব y+3 = x;ও িলখেত পারেব
5g
না, একই error ( িট) দখােব, কারণ variable y এর l-value স ব হেলও y + 3 করেল
ওইটা আর variable y থােক না হেয় যায় একটা expressioni (রািশ) যার মান হেব y এর মান
যাগ 3, কােজই সটার কবল মান থােক, তার জ memoryেত কান জায়গা থােক না। বুঝাই
যাে অ িদেক assignment িহসােব x = y + 3; িলখা যােব কারণ y + 3 এর r-value
আেছ অপর িদেক variable x এর l-value আেছ।
in
১৩.৬ Self-Referential Assignment (আ -শরন আেরাপণ)
am
আসেল = িচ িট গিণেত আমরা ব বহার কির েটা সংখ া তুলনা কের যিদ দিখ তারা এেক
অপেরর সমান তাহেল। আমরা তাই ওটােক গিণেত equal (সমান) িচ বেল থািক। িক গণ-
নার জগেত = িচ িটেক সমান িচ িহসােব ব বহার না কের বরং assignment (আেরাপণ) িচ
িহসােব ব বহার করা হয়। কােজই কান programএ আমরা যখন x = x + 1; দিখ তখন আস-
ল ওটা কান ভােবই গিণেতর সমীকরণ নয়, বরং ওইটা গণনার জগেতর assignment। তরাং
গিণেতর জগেত ওইটা কান অথ তরী না করেলও গণনার জগেত ওটার িনিদ অথ আেছ।
আমরা assignment (আেরাপণ) িনেয় আেগই আেলাচনা কেরিছ। ওই assignment -
লার সব েলােত বাম ও ডান উভয় পােশ variable থাকেলও আলাদা আলাদা variable িছল।
আর x = x + 1ও assignment তেব এখােন একই variable assign িচে র বােমও আেছ
ডােনও আেছ। এইরকম assignment যখােন একই variable বােমও আেছ ডােনও আেছ
সটােক আমরা বলেবা self-referential assignment (আ শরন আেরাপণ) অথাৎ যখা-
ন একটা variable িনেজর মােনর জ িনেজরই শরনাপ হয়। Self-referential (আ -
শরণ) assignmentএ ডানপােশ variableিটর r-value (ডান-মান) ব ব ত হয়, আর বাম-
২৭০
5g
দখল করা নই বা এর কান l-value নই। অথাৎ এই 4 কান ভােবই x variableএর জায়গায়
নই, অ কাথাও আেছ। যাইেহাক এমতাব ায় এরপর ঘটেব ি তীয় ঘটনািট অথাৎ এই 4 মানিট
িগেয় লখা হেয় যােব x এর জ বরা জায়গােত। আমরা তাই x এর পুরেনা মান 3 বদেল সখােন
পােবা এর নতুন মান 4। তাহেল x = x + 1; self-referential assignmentএর (আ -শরণ
আেরাপণ) ফেল variableএর মান এক বেড় গেলা।
in
Self-referential assignmentএর আেরা নানান জিটল অব া আেছ যমন x = x ∗
3; বা x = x∗x + x + 1;। এ েলার িতিট ে আেগ ডানপােশর মান িহসাব করা হেব আর
তারপর সই মান বাম পােশ িলেখ দয়া হেব, ফেল variableিটেত নতুন একট মান থাকেব।
am
২. Data (উপা ) কেনা input ( যাগান) িনেত হেব? িবধা-অ িবধা কী কী?
৩. Input prompt ( যাগান যাচনা) কী? Input নয়ার আেগ কন prompt করা উিচৎ?
৬. Assignmentএ = িচে র বােম কন এমন িকছু দয়া যায় না যার কবল r-value আেছ?
২৭১
১. এমন একিট program ( মেলখ) রচনা কেরা যিট একিট পূণক (int) ও একিট ভ ক
(float) input ( যাগান) িনেয় স েলা আবার outputএ (ফলন) দখায়।
২. এমন একিট program ( মেলখ) রচনা কেরা যিট িট ভ ক (float) সংখ া input
( যাগান) িনেয় সংখ া িট ও তােদর যাগফল outputএ ফলন দখায়।
৩. এমন একিট program ( মেলখ) রচনা কেরা যিট িতনিট পূণক (int) input ( যাগান)
িনেয় তােদরেক য েম input নয়া হেয়েছ সই েম আবার উে া েম দখােব। যমন
ভু সংখ া িতনিট যিদ হয় পর পর 2 3 1 তাহল িসধা েম দখােব 2 3 1 আবার তােদর
উ া েম দখােব 1 3 2। খয়াল কেরা আমরা িক মােনর ম বলিছ না।
5g
৪. এমন একিট program ( মেলখ) রচনা কেরা যিট একদম িঠক িঠক নীেচর মেতা input
( যাগান) ও output (ফলন) উৎপ কের। তুিম িক পরী ার ন র েলা input িনেব,
আর আমরা এেককবার চালােনার সময় এক এক রকম সংখ া input িদেবা।
in
program to c a l c u l a t e r e s u l t
− − − − − − − − − − − − − −
number i n f i r s t exam? 90
number i n second exam? 75
am
number i n t h i r d exam? 91
− − − − − − − − − − − − − −
t o t a l number obtained 256
al
ধের িনই তুিম দরকারী header file (িশর নিথ) include করা, namespace
(নামাধার) std ব বহার করা, main functionএর skeleton লখা আর সটার
শেষ return EXIT SUCCESS; িলেখ মান ফরত দয়া ইত মেধ ভােলা কের
িশেখ ফেলেছা। তা তুিম যিদ নীেচ লখা program েলা compile (সংকলন)
কের চালােত (run) চাও, তামােক িক আেগ include, namespace, main,
return এ েলা িলেখ িনেত হেব, তারপর main functionএর িভতের return
এর আেগ তুিম আমােদর নীেচর অংশ েলা িলেখ িনেব। তারপর compile কের
program চালােব। আমরা এখন থেক মাটামুিট এইভােব program দখােবা।
১. এমন একিট program ( মেলখ) রচনা কেরা যিট একিট পূণক (int) ও একিট ভ ক
(float) input ( যাগান) িনেয় স েলা আবার outputএ (ফলন) দখায়।
২৭২
২. এমন একিট program ( মেলখ) রচনা কেরা যিট িট ভ ক (float) সংখ া input
5g
( যাগান) িনেয় সংখ া িট ও তােদর যাগফল outputএ ফলন দখায়।
f l o a t sum = f i r s t + second ;
৩. এমন একিট program ( মেলখ) রচনা কেরা যিট িতনিট পূণক (int) input ( যাগান)
িনেয় তােদরেক য েম input নয়া হেয়েছ সই েম আবার উে া েম দখােব। যমন
ভু সংখ া িতনিট যিদ হয় পর পর 2 3 1 তাহল িসধা েম দখােব 2 3 1 আবার তােদর
উ া েম দখােব 1 3 2। খয়াল কেরা আমরা িক মােনর ম বলিছ না।
cout << " given order " << f i r s t << " " ;
cout << second << " " << t h i r d << endl ;
২৭৩
cout << " reverse order " << t h i r d << " " ;
cout << second << " " << f i r s t << endl ;
৪. এমন একিট program ( মেলখ) রচনা কেরা যিট একদম িঠক িঠক নীেচর মেতা input
( যাগান) ও output (ফলন) উৎপ কের। তুিম িক পরী ার ন র েলা input িনেব,
আর আমরা এেককবার চালােনার সময় এক এক রকম সংখ া input িদেবা।
program to c a l c u l a t e r e s u l t
− − − − − − − − − − − − − −
number i n f i r s t exam? 90
number i n second exam? 75
number i n t h i r d exam? 91
− − − − − − − − − − − − − −
t o t a l number obtained 256
5g
ফলাফল processingএর programিট আমরা নীেচ দখাি ।
i n t sum = f i r s t + second + t h i r d ;
২৭৪
5g
in
am
al
২৭৫
5g
in
am
al
অধ ায় ১৪
Mathematical Processing
(গািণিতক ি য়াকরণ)
5g
Mathematical processingএ expressionএ (রািশ) িবিভ operators (অণুি য়া) ও
functions (িবপাতক) কী ভােব িহসাব করা হয় আমােদর তা জানেত হেব।
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 ;
al
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)
+7 = 7 −7 = −7
+a = 5 −a = −5
+b = −9 −b = 9
২৭৭
কান number (সংখ া), variable (চলক), constant ( বক), function (িবপাতক),
বা expressionএর (রািশ) সামেন positive িচ থাকেল তার য মান সিটই থােক, িক
negative িচ থাকেল তার িচ বদেল যায় অথাৎ আেগ positive থাকেল পের negative
হেয় যায় আর আেগ negative থাকেল পের positive হেয় যায়। Variable ও constant
আেগই জােনা। Function (িবপাতক) হেলা এমন একটা িজিনস য িকছু input ( যাগান) িনেয়
িকছু output (ফলন) দয়। যমন cstdlib নামক header fileএ (িশর নিথ) abs(x) নােম
একটা function আেছ যিট একিট সংখ া input িনেয় তার িচ টু বাদ িদেয় কবল মানটু-
output িহসােব return কের। অথাৎ abs(3) হেলা 3 আবার abs(−3)ও 3। একই ভােব
abs(3.5) হেলা 3.5 আবার abs(−3.5)ও 3.5। expression (রািশ) হল সংখ া, constant,
variable, operator, function িমেল যখন একটা িজিনস তরী হয় যার মান িহসাব করা যায়
যমন 3 + x ∗ abs(y) একিট রািশ যখােন x আর y হল চলক।
5g
িসিপিপেত binary ( িয়ক) operator েলা যাগ +, িবেয়াগ −, ণ ∗, কী ভােব কাজ কের?
যথাযথ program িলেখ উদাহরণ সহ বুিঝেয় দাও। binary operator ( িয়ক অণুি য়ক)
েটা operandএর (উপাদান) ওপর যু হেয় ফলাফল উৎপ কের।
উপেরর program ( মেলখ) খয়াল কেরা। আর তার সােথ নীেচর output (ফলন) িমিল-
য় নাও। ল কেরা আমরা িতনিট কের যাগ, িবেয়াগ, আর ণ কেরিছ। যাগ, িবেয়াগ, বা ণ
আমরা ভােলাই জািন, নতুন কের শখার িকছু নাই। তেব একিট িবষয় খয়াল করেত হেব। সিট
হেলা data type কমন? আর এ কারেণই আমরা িতিট operatorএর (অণুি য়া) জে িত-
নিট কের উদাহরণ িনেয়িছ। িতিট operatorএর উদাহরণ েলার থম সািরেত খয়াল কেরা।
সখােন operand (উপাদান) িহসােব আমরা েটা পূণেকর যাগ, িবেয়াগ বা ণ কেরিছ, যমন
5 + 3, 5 − 3 আর 5 ∗ 3। ফলাফল িহসােব যা পেয়িছ তাও একিট পূণক, যমন 8, 2, আর 15।
এবার িতিট operatorএর জ তৃতীয় সািরেত খয়াল কেরা। সখােন operand (উপাদান)
িহসােব আমরা েটা ভ ক যাগ, িবেয়াগ বা ণ কেরিছ, যমন 5.1 + 3.2, 5.1 − 3.2 আর
২৭৮
5.1 ∗ 3.2। ফলাফল িহসােবও আমরা পেয়িছ একিট ভ ক যমন 8.3, 1.9, আর 16.32। তা-
রপর িতিট operatorএর জ ি তীয় সািরেত খয়াল কেরা। Operand িহসােব একিট ভ ক
ও একিট পূণক যাগ, িবেয়াগ বা ণ করা হেয়েছ যমন 5.1 + 3, 5.1 − 3, আর 5.1 ∗ 3।
আর ফলাফল এেসেছ একিট ভ ক যমন 8.1, 2.1, আর 15.3, য েলার কানিটই পূণক নয়।
Operand েটা একটা ভ ক হওয়ায় ফলাফলও ভ ক হেয় গেছ।
ফলন (output)
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 5g
তাহেল উপেরর আেলাচনা থেক আমরা দখলাম কান operatorএর (অণুি য়া) যিদ িট
in
operandই (উপাদান) একরকম হয় তাহেল ফলাফলও সই রকমই হয়। যমন operand -
টাই int হেল ফলাফলও int; operand েটাই float হেল ফলাফলও float। আর যিদ েটা
operand রকম হয় যমন একিট পূণক বা int আর একিট ভ ক বা float তাহেল ফলাফল
am
হেব ভ ক বা float। গিণেত আমরা জািন পূণক সংখ া েলা একই সােথ ভ কও যমন 3 আসেল
3.0, িক একিট ভ ক িক পূণক নাও হেত পাের যমন 5.1 ভ ক িক এেক পূণক িহসােব লখা
স ব নয়। আর এ কারেণ কান operator (অণুি য়া) েয়ােগর পূেব operand (উপাদান)
েটা রকম হেল থেম পূণকিটেক িভতের িভতের ভ েক পা র কের নয়া হয়, আর তারপর
যাগ, িবেয়াগ বা ণ করা হয় েটােক ভ ক িহসােব িনেয়ই। এই য িভতের িভতের পূণকিট ভ েক
al
পা র করা হয় এটা এক রকেমর type casting (উপা কারা র)। Type casting িনেয়
আমরা পের আেরা িব ািরত জানেবা, আপাতত int থেক floatএ casting মেন রােখা।
২৭৯
ভাগফেলর data type (উপা করণ) কমন হেব সই িনয়ম আসেল যাগ, িবেয়াগ, বা
েণর মেতা একই। যিদ েটা operandই (উপাদান) এক রকেমর হয় তাহেল ফলাফলও হেব
সই রকেমরই। িক operand েটার একিট যিদ হয় পূণক বা int আেরকিট ভ ক বা float
তাহেল ফলাফল হেব একিট ভ ক বা float। এখােনও িভতের িভতের int থেম float এ type
casting ( কারা র) হেয় যােব, ভােগর কাজিট হেব উপা casting হবার পের। Data type
casting ছাড়াও ভােগর ে ভাগেশষ থাকেব িক থাকেব না সটার একটা ব াপার আেছ।
ফলন (output)
13 / 5 = 2
13 . 0 / 5 = 2.6
13 / 5.0 = 2.6
13 . 0 / 5.0 = 2.6
উপেরর output ল কেরা, যিদ ভােগর operand েটার যেকান একিটও ভ ক হয়,
যমন শেষর িতন সাির, তাহেল িক ভাগেশেষর কান ব াপার থােক না, ফেল আমরা সে ে
ধরা পেড় না, কবল চালােনার (run) সময় বা িনবাহ (execute) করার সময় ধরা পেড়, তাই
এেদরেক বলা হয় run-time (চলা-কালীন) বা execution-time (িনবাহ-কালীন) error।
২৮০
5g
লখা অংশও commentএর িভতের রািখ। Program ( মেলখ) লখার সময় আমরা নানান
িকছু পরী া িনরী া কির, এভােব কির, ওভােব কির। তখন য অংশ েলা ওই সময় দরকার নাই,
চাইেল স েলা তা মুেছ ফলা যায়, িক মুেছ ফলেলই তা তামােক পের আবার ক কের িলখ-
ত হেত পাের। এমতাব ায় তুিম যিদ ওই অদরকারী অংশটু েত comment (টীকা) কের দাও,
in
ব স হেয় গেলা। কান ঝােমলা নাই, পের ওই অংশটু আবার দরকার হেলই uncomment
(টীকা তুেল) কের িদেব। কী চমৎকার কৗশল তাই না! আমরা সবাই এিট হরদম ব বহার কির।
এখন থেক এই কৗশল কােজ লাগােব, কমন!
am
ফলন (output)
13 / 5 = 2 13 % 5 = 3
13 / −5 = −2 13 % −5 = 3
−13 / 5 = −2 −13 % 5 = −3
−13 / −5 = 2 −13 % −5 = −3
al
এবাের ভাগেশেষর ফলাফেলর িদেক নজর দই। ভাগফল সহ আেলাচনার িবধার জ উপ-
রর program ( মেলখ) আর outputএ (ফলন) আমরা ভাগেশেষর সােথ সােথ ভাগফলও
দিখেয়িছ। আমরা আেগই আেলাচনা কেরিছ ভাগেশষ করা যায় কবল পূণেকর জ । ভাগ করেল
যা অবেশষ থােক তাই ভাগেশষ। িক পূণক তা ধনা কও (positive) হেত পাের, ঋণা কও
(negative) হেত পাের। আসেল ঋণা ক সংখ ার ভাগেশষ িনেয়ই যেতা জিটলতা সৃি হয়। ঋণা-
ক সংখ ার ভাগেশষ িনেয় নানান রকম িনয়ম আেছ, আমরা এখােন আেলাচনা করিছ cpp.sh এ
য িনয়েম ভাগেশষ হয়, সটা িনেয়। তুিম য compiler (সংকলক) িদেয় program compile
(সংকলন) করেব, জেন িনও সখােন কমন হয়। কােরা কােছ থেক জেন িনেত পােরা। অথবা
িনেজই উপেরর program ( মেলখ) এর মেতা কের program তরী কের চািলেয় দেখ িনেত
পােরা। তমন কিঠন িকছু নয়।
যাইেহাক উপেরর output খয়াল কেরা। সখােন িক কান ভ ক নই, সব েলাই পূণক,
তেব ধনা ক ও ঋণা ক আেছ। খয়াল কেরা ভাগফল ও ভাগেশষ উভয় ে মানটা িঠক পা-
ওয়া যায় িচ িবেবচনা না করেল। যমন চারটা ব াপােরর সব েলােতই িচ বাদ িদেল ভাজক
(divisor) আর ভাজ (dividend) হয় কবল 5 আর 13। 13 ক 5 িদেয় ভাগ করেল ভাগফল হয়
2 আর ভাগেশষ হয় 3। এই পয সব েলা ব াপােরই িঠক আেছ, িক গালমাল বাঁেধ কবল িচ
২৮১
িনেয়, ভাগফল বা ভাগেশষ কখন ধনা ক + হেব আর কখন ঋণা ক − হেব। ভাগফেলর ে
খয়াল কেরা যখনই সংখ া েটার িচ একই রকম তখন ভাগফল ধনা ক যমন থম ও চতুথ
সাির, আর যখনই তারা িবপরীত িচে র তখনই ভাগফল ঋণা ক যমন ি তীয় ও তৃতীয় সাির।
ভাগেশেষর ে িচ িনভর কের ভাজ (dividend) এর ওপর, ভাজেকর ওপর নয়। ভাজ যখ-
নই ধনা ক যমন 13, ভাগেশষ তখন ধনা ক + হেয়েছ। আর ভাজ যখন ঋণা ক যমন −13
তখন ভাগেশষ ঋণা ক − হেয়েছ। ভাগেশেষর িচ 5 বা −5 এর িচে র ওপর িনভর কের নাই।
একটা িবষয় আেগই বেলিছ, ভাগফল ও ভাগেশেষর ে ভাজক যিদ হয় তাহেল তামার
program চালােনার সময় divide by zero বা িদেয় ভাগ নােম error message দিখ-
য় ব হেয় যােব। এই রকম error compileএর (সংকলন) সময় ধরা পেড় না, কবল চালােনার
(run) সময় ধরা পেড়, তাই এেদরেক বলা হয় run-time error (চলা-কালীন িট)।
উপেরর উদাহরণ েলােত আমরা যিদও কবল সংখ াই সরাসির ব বহার কেরিছ, তুিম িক-
চাইেল কান variable (চলক) বা constant ( বক) ব বহার করেত পারেত। তুিম চাইেল
কান expression (রািশ) বা functionও (িবপাতক) ব বহার করেত পারেত। আসেল r-value
(ডান-মান) আেছ এরকম য কান িকছুই এখােন ব বহার করা যেত পাের। এই আেলাচনা েলা
unary operatorএর সময়ই আেলাচনা করা হেয়েছ, তবুও আবার বিল। function (িবপা-
5g
তক) এমন একটা িজিনস য িকছু input ( যাগান) িনেয় িকছু output (ফলন) দয়। যমন
cstdlib নামক header fileএ (িশর নিথ) abs(x) নােম একটা function আেছ যিট এক-
িট সংখ া input িনেয় তার িচ টু বাদ িদেয় কবল মানটু output িহসােব return কের।
অথাৎ abs(3) হেলা 3 আবার abs(−3)ও 3। একই ভােব abs(3.5) হেলা 3.5 আবার abs
in
(−3.5)ও 3.5। expression (রািশ) হল number, constant, variable, operator,
function িমেল যখন একটা িকছু তরী করা হয় যার মান আেছ সিট, যমন 3 + x ∗ abs(
y) একিট expression যখােন x আর y হল variable।
am
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 হল রািশ
al
২৮২
ন থাকেত হেব এমন িকছু যার r-value বা মান আেছ, যমন variable (চলক), constant ( -
বক), function (িবপাতক) বা expression (রািশ)। কথা হে assignmentএর ফেল উৎ-
প হওয়া ফলাফলটা কী? আসেল য মানিট assignmentএর বামপােশর variableএ assign
হয় সই মানিটই assignment operatorএর ফলাফল িহসােবও িবেবচনা করা হয়।
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
তরাং কউ যমন অেনক েলা যাগ পরপর িলখেত পাের x + y + z + 3, িঠক তমিন
am
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
উপেরর উদাহরেণর শষ িতনিট সাির খয়াল কেরা। Variable declareএর পেরর সািরর
statementএ (িববৃিত) x + (y = 3) ; থেম ব নীর িভতের y এর মান 3 assign (আেরাপণ)
হেব আর assignmentএর (আেরাপণ) ফলাফলও হেব 3, যা x এর মান 1 সােথ যাগ হেয়
যাগফল হেব 4। এই 4 হেলা পুেরা রািশিটর মান। এরপেরর statementএ y = x + (z = 4) ;
থেম ব নীর িভতের z এর মান assign হেব 4 আর ফলাফল ও 4, আর তারপর 4 ও x এর মান 1
এর সােথ যাগ হেয় হেব 5 যা িগেয় y চলেক assign হেব। এবাের আিস শষ statementএ z
= 5 + (y = z −3); থেম ব নীর িভতের z − 3 িহসাব হেব, z এর মান িঠক আেগর সািরেত
হেয়েছ 4 সােথ 3 িবেয়াগ হেল হয় 1 যা y এ assign হেব আর assignmentএর ফলাফলও
(result) হেব 1। এরপর সই 1 আর 5 যাগ হেয় ফল হেব 6 যা z এর িভতের assign হেব।
২৮৩
x += 13 ; // এর মােন আসেল x = x + 13 ;
x −= 7; // এর মােন আসেল x = x − 7 ;
y
z
z
∗=
/=
%=
x;
x + y;
abs ( 3 ) ;
//
//
// 5g
এর মােন আসেল y = y ∗ x ;
এর মােন আসেল z = z / ( x + y ) ;
এর মােন আসেল z = z % abs ( 3 ) ;
তাহেল উপেরর উদাহরণ েলা থেক দখা যাে িতিট compund assignment আসেল
in
এক একিট self-referential assignment (আ -শরণ আেরাপন)। এখােন Compound
assignmentএর বাম পােশ য variableিট থােক সিটর মােনর সােথ সংি পািটগিণতীয়
operator যমন যাগ, িবেয়াগ, ণ, ভাগফল, বা ভাগেশষ িহসাব করা হয়, আর তারপর ফলাফ-
am
লিট ওই variableএই assign করা হয়। আসেল compund assignment েলা তরী করা
হেয়েছ program রচনার সময় ক িকি ত কমােনার জ । অেনক সময় assignmentএর বাম
পােশ যিট থাকেব সিট সহজ সরল variable না হেয় অ িকছু হেত পাের যিট হয়েতা খুবই
বড়, সিটর অব ই l-value (বাম-মান) আেছ অথাৎ তার জ memoryেত ( রিণ) জায়গা
দখল করা আেছ। যমন ধেরা নীেচর উদাহরেণ আমরা array (সাজন) ব বহার করিছ, class
( ণী) ব বহার করিছ, এ েলা কী এখনই তা জানেত চেয়া না, আমরা পের িব ািরত কের িশখ-
al
বা ও েলা। খািল খয়াল কেরা থম সািরেত কী ভােব ল া একটা িজিনস assign = িচে র
বাম ও ডান উভয় পােশই আেছ। আর খয়াল কেরা শেষর সািরর statementিট: compund
assignment ব বহার কের ওই একই িবষয় কত চমৎকার কের সংে েপ লখা গেছ।
t h i s−>amarSajonCholok [ suchok ] =
t h i s−>amarSajonCholok [ suchok ] + amarbriddhi ;
তাহেল দখেল তা একই িজিনস assign = িচে র বাম পােশ একবার আবার পর েণই
assign = িচে র ডানপােশও একবার িলখেত হেব, এিট বশ িবরি কর, আর দখেতও কত
িবরি কর লােগ। তারেচেয় compund assignment সংি আর বুঝাটাও সহজ। ফলাফেলর
িহসােব উভয় ে িক আমরা একই ফলাফল পােবা। তেব মেন রেখা program ( মেলখ)
চালােত সময় কম লাগেব নািক বশী লাগেব সইে ে িক compound assignmentএর
কান ভুিমকা নই।
২৮৪
িসিপিপেত লখা programএ ( মেলখ) আমরা ++ বা −− ায়ই দখেত পাই। এই েলা কী?
একটা যাগ বা িবেয়াগ িচ দেখিছ িক েটা যাগ বা িবেয়াগ একসােথ তা আজব ব াপার!
েটা যাগ বা িবেয়াগ এক সােথ দয়ার িবধা-অ িবধা কী? 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 ( মেলখ) খয়াল কেরা। েটা variable (চলক) নয়া হেয়েছ x আর
y। Variable x এর initial value (আিদমান) দয়া হেয়েছ 6, িক y এর initial value দয়া
হয় িন। এরপর ি তীয় আর তৃতীয় statementএ রেয়েছ ++x; আর x++;, খয়াল কেরা উভয়
5g
ে x এর মান এক কের বেড়েছ, এ কারেণ অব ++ ক বলা হয় increment operator
(বৃি অণুি য়ক)। Increment operator ++ variableএর আেগই দয়া হউক আর পেরই
দয়া হউক ফলাফল িক একই। অব increment ++ আেগ ব বহার করেল এিটেক pre-
increment (পূব-বৃি ) আর পের ব বহার করেল post-increment (উ র-বৃি ) বলা হয়।
in
তেব বেল রািখ increment operator (বৃি অণুি য়েকর) সােথ িক এমন িকছু ব ব-
হার করেত হেব যার l-value (বাম-মান) রেয়েছ অথাৎ memoryেত ( রিণ) জায়গা দখল করা
আেছ। Variableএর (চলক) যেহতু l-value আেছ তাই আমরা variable x ব বহার করেত
পারলাম। িক তুিম যিদ চাও ++3 বা 3++ িলখেব যােত 4 পাওয়া যায় অথবা িলখেব (x+3)++
am
বা ++(x+3), তা িলখেত পারেব না, compile (সংকলন) error হেব। Error হওয়ার কারণ 3
number (সংখ া) বা x+3 expressionএর (রািশ) r-value (ডান-মান) তথা value (মান)
আেছ িক তােদর l-value (বাম-মান) তথা memoryেত ( রিণ) জায়গা দখল করা নই। দর-
কার নই তবুও বেল রািখ, তুিম িক ++ এর সােথ variable x এর বদেল constant জাতীয়
িকছু তা এমিনেতই ব বহার করেত পারেব না, কারণ constantএর তা মান বদলােনা যায় না।
al
২৮৫
মান বাড়ােনা পের assignment, আর y = x++; এ আেগ assignment পের মান বাড়ােনা।
আশা করা যায় pre- (পূব-) ও post-increment (উ র-বৃি র) তফাৎ পির ার হেয়েছ।
5g
compile (সংকলন) হেয় যােব, িক x++++ বা ++(x++) চ া কেরা, compile হেব না,
error ( িট) আসেব পেরর বৃি টার জ "l-value required"। তুিম যিদ ফ ++x++; িল-
খা, এটা িক compile হেব না, error দখােব, কারণ হেলা pre- ও post-incrementএর
মেধ post-incrementএর precedence (অ গণ তা) আেগ, ফেল ++x++ আসেল ++(x
++) এর সমতুল। Precedence order (অ গণ তার ম) হেলা কান operator আেগ হেব
in
কানটা পের হেব তার িনয়ম। এ িবষেয় আমরা পের িব ািরত জানেবা।
এবাের আমরা increment ব বহাের programএর গিতর ওপর ভাব িনেয় একটু আেলা-
চনা কির। increment (বৃি ) ++x বা x++ সাধারণত x+=1 বা x=x+1 এর চেয় তগিতর,
am
এর কারণ মুলত একদম য পযােয় x++ বা ++x িবেশষ ভােব িনবািহত হয় িক x+=1 বা x=x+1
সাধারণ যােগর মেতা কের িনবািহত হয়। সাধারণেতা pre-increment (পূব-বৃি ) আর post-
incrementএর (উ র-বৃি ) মেধ পূব-বৃি ত গিতর। কারণ হেলা, post-incrementএর
ফলাফল যেহতু x এর মান বৃি করবার আেগর মান, তাই ওই আেগর মানিট থেম কাথাও
ণ ায়ী (temporarily) ভােব রেখ িদেত হয়, আর x এর মান বৃি টা তারপর ঘেট, আর তার-
al
পর ণ ায়ী ভােব রাখা মানটা ফলাফল িহসােব আেস যিট y = x++; এর ে y এ assign
হয়। িক পূব-বৃি র ে মান বৃি আেগ ঘেট আর ফলাফলটাও সই বৃি া মানই, কােজই
ণ ায়ী ভােব আেগর মান রেখ দওয়ার কান বাঝা (overhead) এখােন নই। মাটকথা
pre-increment সরাসির l-valueএর ওপরই কাজ কের অথাৎ ++x এ সরাসির variable-
টার ওপরই কাজ কের, আর কান ণ ায়ী িকছু দরকার হয় না। এ কারেণ pre-increment
++x; post-increment x++; এর চেয় বশী তগিতর হেয় থােক। কােজই তুিম পারেতা
পে ++x ব বহার করেব, x++ ব বহার করেব না।
Programএ increment ব বহাের এবাের একটা পরামশ দই। Pre-increment ও
post-increment িনেয় অেনক রকম খলা যায়, যমন তুিম চাইেল x = (++x)++ + ++x;
এর মেতা অেনক েলা + িচ িদেয় িকছু একটা িলখেত পােরা। এই রকম জিটল statement-
েলা হয়েতা compile (সংকলন) হেব। এর ফেল ফলাফলও িকছু একটা আসেব, যটা চাইেল
বুঝা স ব, িক বুঝেত গেল মাথা বশ গরম হেয় যায়। আমার পরামশ হেলা এইরকম জিটল
statement পারেতা পে লখেব না। সবসময় এমন ভােব code (সংেকত) িলখেব যােত পের
তুিম বা অ কউ তমন কান ক ছাড়াই তামার code দেখ বুঝেত পাের। মেন রাখেব code
যত জিটল, তার ভুল বর করাও তত কিঠন।
২৮৬
উপেরর পুেরা আেলাচনােত আমরা কবল increment (বৃি ) িনেয় আেলাচনা কেরিছ। আস-
ল decrement ( াস) −− িনেয় আেলাচনাটা একদম একই রকম। আমরা তাই পুনরাবৃি
করেবা না। কবল জেন রােখা decrementএর ( াস) ফেল মান 1 কেম যায়। তাই −−x
বা x−− হেলা x −= 1 বা x = x − 1 এর সমতুল। আমরা −−x ক pre-decrement
(পূব াস) আর x−− ক post-increment (উ র- াস) বিল। Pre-decrementএর তুল-
নায় post-decrementএর precedence (অ গণ তা) বশী। গিতর িদক িবেবচনায় pre-
decrement, post-decrementএর চেয় য়তর।
িসিপিপেত comma operator (িবিত অণুি য়া) কেয়কিট expression (রািশ) ক এক সােথ
পরপর লখায় সাহায কের। Comma (িবিত) operatorএর বামপােশর operandএর (উপা-
দান) মান সব সময় void (নথক) হয় আর উেপি ত হয়। এর অথ হে ডান পােশর operand-
5g
িটর (উপাদান) মানই comma operatorএর (িবিত অণুি য়া) ফলাফল হয়।
একটা উদাহরণ দিখ x = (y=3, y+1); এই statementএর ফেল ব নীর িভতের থেম
commarএর বাম পােশর expression িহসােব y এর মান assign (আেরাপ) হেব 3। যিদও
assignmentএর কারেণ আমরা y এ 3 assignmentএর পাশাপািশ ফলাফলও পাই 3, িক
commaএর (িবিত) কারেণ সই ফলাফল বাদ িগেয় ফলাফল হেয় যােব void (নথক)। যাইেহাক
in
এরপর commaএর (িবিত) ডান পােশর expression িহসােব y+1 এর মান 3+1 বা 4 হেব যিট
আসেল যােগরও + ফলাফল। আর যােগর এই ফলাফল 4 ই শষ পয x varaibleএ assign
হেব। এখােন ব নী দরকার কারণ comma (িবিত) , সাধারণত assignmentএর (আেরাপণ)
am
= পের িহসাব করা হয়। আমরা ব নীর িভতেরর assignmentিট y = 3 commaএর (িবিত)
আেগ করেত চাইেলও ব নীর বাইেরর variable x এ assignmentিট commaএর পের কর-
ত চাই, আর এ কারেণ ব নী জ রী। ব াপারিট আেরা পির ার বুঝেত চাইেল একই িজিনস
ব নী ছাড়া কী হেব দেখা x = y = 3, y + 1;। এখােন েটা assignmentই (আেরাপণ)
commaএর (িবিত) আেগ execute (িনবাহ) হেব। ফেল থেম y এর মান assign হেব 3,
তারপর x এও মান 3ই assign হেব, তারপর y+1 িহসাব হেব 4। এই 4 commaএর ফলাফল
al
২৮৭
5g
তত কবল এ েলার precedence order (অ গণ তার ম) িবেবচনা করেবা। অ া আেরা
operator ও তােদর ম স েক আমরা পের জানেবা।
১. ++ −− ২িট unary operator (এিকক অণুি য়া) post-increment (উ র-বৃি ) ও
post-decrement (উ র- াস) x++, x−− এরা l-valueএর (বাম-মান) ওপের যু
in
হেয় r-value (ডান-মান) ফল দয়। ফেল x++++ বা x−−−− করা যায় না।
২. ++ −− + − ৪িট unary operator (এিকক অণুি য়া) pre-increment (পূব-বৃি )
++x ও pre-decrement (পূব- াস) −−x এরা l-valueএর (বাম-মান) ওপর যু
am
হেয় lef-valueই ফল দয়। ফেল ++++x বা −−−−x করা যায়, আর সেবেচেয় ডােনর
++ বা −− আেগ যু হয়। (pre) unary operator (এিকক অণুি য়া) +x ধনা ক
(positive) −x আর ঋণা ক (negative) এরা r-valueএর (ডান-মান) ওপর যু
হেয় r-valueই দয়। ফেল + + x বা − − x করা স ব, খয়াল কেরা েটা + বা েটা
− এর মেধ ফাঁকা িদেত হেয়েছ না হেল ও েলা বৃি বা াস িহসােব িচি ত হেয় যােব।
al
২৮৮
৬. , comma (িবিত) একিট binary operator ( িয়ক অণুি য়া) যিটর ফলাফল কবল
ডানপােশর operand (উপাদান)। বাম পােশর operandিট িহসাব হয়, িক তার ফলা-
ফল হেব void (নথক)। এই operator একািধক পরপর থাকেল, বাম থেক ডােন এেক
এেক িহসাব হেত থােক। যমন x + 2, y ∗ 3, z / 4 থেম যাগ হেব, তারপর ণ
আর শেষ ভাগ, ফলাফল হেব একদম ডােনর ভাগফলিটই।
েটা একই বা একই েমর operator পরপর থাকেল কান পােশরিট আেগ হেব এইিট
িনধারণ কের দয়ােক বলা হয় associativity (সহেযাজ তা)। যমন x−y−z থাকেল আমােদর
থেম বােমর িবেয়াগ করেত হেব, তারপর ডােনর িবেয়াগ, তাই িবেয়াগ হল left associative
(বাম সহেযাজ ) অথাৎ x − y − z আর (x −y) − z একই। খয়াল কেরা িবেয়াগ িক right
associative (ডান সহেযাজ ) নয় কারণ x − y − z আর x − (y − z) এক নয়। যাগ আবার
বাম ও ডান both associative (উভয় সহেযাজ ) বা সংে েপ associative (সহেযাজ ) কারণ
x + y + z, (x + y) + z ও x + (y + z) একই। সাধারণত both associativeেদর ে
িবধােথ তােদর left-associative িহসােব িবেবচনা করা হয়। উপেরর তািলকায় আেলািচত
operator েলার ে একই রকম operator পরপর থাকেল কান পােশরিট আেগ হেব,
f l o a t x1 , y1 , x2 , y2 ; / / ানা েটা ( x1 , y1 ) , ( x2 , y2 )
২৮৯
উপেরর program খয়াল কেরা। খুবই সাদামাটা। থেম main functionএর বাইের
cmath header file অ ভু করেত হেব বেল দখােনা হেয়েছ। তারপর main functionএর
িভতের িব েটার ভুজ ও কািট ধারণ করার জ চারিট float ধরেনর ভ ক variable (চলক)
5g
নয়া হেয়েছ। এরপর input prompt ( যাগান যাচনা) িদেয় িব েটার ানা input ( যা-
গান) নয়া হেয়েছ। তারপর ভুজ েয়র দূর abs(x1 − x2) বর কের xd নােমর আেরকিট
variableএ নয়া হেয়েছ, একই ভােব কািট েয়র দূর abs(y1 − y2) বর কের yd নােমর
আেরকিট variableএ নয়া হেয়েছ। মেন কের দেখা abs functionিট (িবপাতক) কান সং-
খ ার absolute value (পরম মান) অথাৎ িচ বাদ িদেয় কবল মানটু ফরত দয়। যাইেহাক
in
তারপর xd এর বগ ও yd এর বেগর যাগফল িনেয় তার বগমূল বর করা হেয়েছ sqrt function
ব বহার কের আর রাখা হেয়েছ dd variableএ। সবেশেষ দূর dd variable থেক output
(ফলন) দয়া হেয়েছ। এখােন একটা কথা বেল রািখ sqrt(xd ∗ xd + yd ∗ yd) এর বদেল
am
cmath header file (িশর নিথ) থেকই hypot নােমর functionও (িবপাতক) আমরা ব -
বহার করেত পারতাম। সে ে আমােদর িলখেত হেতা hypot(xd, yd) আর সিট িঠক একই
কাজ করেতা। Function hypot আসেল সমেকাণী ি ভুেজর অিতভুেজর দঘ িনণয় কের, িক
তার সূ আর েটা িব র দূর িনণেয়র সূে র মেধ িমল রেয়েছ।
al
২৯০
ন।
২৯১
২. Unary (এিকক) ও binary ( িয়ক) operation (অণুি য়া) বলেত কী বুেঝা? কেয়কটা
কের unary (এিকক) ও binary ( িয়ক) operationএর (অণুি য়া) নাম বেলা।
al
৩. Type casting (উপা কারা র) কী? Binary operationএ ( িয়ক অণুি য়ায়) কী
ভােব type casting (উপা কারা র) হয়?
৫. Programএ অদরকারী code (সংেকত) মুেছ না িদেয় কীভােব আমরা comment (টী-
কা) ব বহার কের স েলােক অকাযকর কের রাখেত পাির, ব াখ া কেরা।
২৯২
5g
১. একিট arithmetic seriesএর (সমা র ধারা) থম পদ a সাধারণ অ র d হেল n-তম
পদ কেতা? n পেদর সমি ই বা কত? এর জ িসিপিপেত একটা program ( মেলখ)
(program) তরী কেরা যিট a, d, ও n input ( যাগান) িনেব, আর n-তম পদ ও n
পেদর সমি output (ফলন) িদেব। এর জ তুিম সূ ব বহার করেব n-তম পদ =
a + (n − 1) ∗ d আর n পেদর সমি = n ∗ (2a + (n − 1) ∗ d)/2। দ িবিভ ধারার
in
জে এই সূ a আর d বসােল আমরা ওই ধারা েলার জ সরাসির সূ পেত পাির।
পেদর সমি = 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।
al
২. নীেচর মেতা output (ফলন) দয় এরকম একিট program ( মেলখ) তরী কেরা।
Result columnএ তুিম binary operator েলা ( িয়ক অণুি য়া) ব বহার করেব।
x=10 y=5
expr r e s u l t
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 তরী করেব।
২৯৩
৫. এমন একিট program ( মেলখ) রচনা কেরা যিট সেক ড input িনেয় তােক ঘ টা-
িমিনট- সেকে ড পা র কের। এ কােজ তুিম ভাগফল ও ভাগেশষ ব বহার করেব।
৭. এমন একিট program ( মেলখ) রচনা কেরা যিট েটা সময় ঘ টা, িমিনট, সেকে ড
িনেয় সময় িটেক যাগ কের। এ কােজ তুিম যাগ, ভাগফল ও ভাগেশষ ব বহার করেব।
5g
৮. এমন একিট program রচনা কেরা যিট েটা সমীকরণ ax + by = c ও dx + ey = f
এর a, b, c, d, e, f input ( যাগান) িনেয় x ও y এর মান output (ফলন) দয়।
ক) পেড়া (read) x ও y
খ) গেণা (compute) p = x ∗ y
গ) গেণা (compute) s = x + y
ঘ) গেণা (compute) t = s2 + p ∗ (s − x) ∗ (p + y)
al
ঙ) িলেখা (write) t
২৯৪
i n t t = a + ( n − 1 ) ∗ d ; / / n−তম পদ
5g
cout << n << "−th term = " << t << endl ;
i n t s = n ∗ ( 2∗a + ( n − 1 ) ∗d ) / 2 ; / / সমি
cout << n << " term sum = " << s << endl ;
in
যাগান-ফলন (input-output)
f i r s t term ? 1
am
common d i f f ? 1
which term ? 10
10−th term = 10
10 term sum = 55
২. নীেচর মেতা output (ফলন) দয় এরকম একিট program ( মেলখ) তরী কেরা।
al
x=10 y=5
expr r e s u l t
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
cout << " x= " << x << " y= " << y << endl ;
cout << endl ; / / ফাঁকা সাির
২৯৫
৩. এমন একিট program ( মেলখ) রচনা কেরা যিট একিট িতন অে র সংখ ােক উে া
কের যমন 326 হেয় যায় 623। এ কােজ তুিম ভাগফল, ভাগেশষ, ণ, যাগ ও িবেয়াগ
ব বহার করেব। 326 থেক অ েলা আলাদা কের তারপর 623 তরী করেব।
i n t given = 326 ;
i n t r i g h t = given % 10 ; / / ভাগেশষ 6
i n t l e f t = given / 100 ; / / ভাগফল 3
5g
i n t middle = given / 10 % 10 ; / / ফল 2
i n t reverse = l e f t ; // উ া = 3
reverse += middle ∗ 10 ; / / উ া = 23
reverse += r i g h t ∗ 100 ; / / উ া = 623
in
৪. একিট ি ভুেজর িতন বা র দঘ a, b, c input (√যাগান) িনেয় ি ভুজিটর ফল িনণয়
কেরা। তুিম হয়েতা জােনা ি ভুেজর ফল = s(s − a)(s − b)(s − c) যখােন s
am
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 ) ) ; / / ফল
যাগান-ফলন (input-output)
s i d e s a b c : 100 60 90
k h e t r o f o l = 2666
২৯৬
৫. এমন একিট program ( মেলখ) রচনা কেরা যিট সেক ড input িনেয় তােক ঘ টা-
িমিনট- সেকে ড পা র কের। এ কােজ তুিম ভাগফল ও ভাগেশষ ব বহার করেব।
i n t sec = t o t a l s e c % 60 ; / / ফল 25
i n t to talmi n = t o t a l s e c / 60 ; / / ফল 636
i n t min = totalm in % 60 ; / / ফল 36
i n t hour = tot almin / 60 ; / / ফল 10
5g
B = cos−1 ((c2 +a2 −b2 )/(2ca)) ও কাণ A = cos−1 ((b2 +c2 −a2 )/(2bc))।
তামার মেলখেত ি ভুেজর কান েলােক তুিম িড ীেত পা র কের output িদেব।
আমরা cmath header file থেক arccosineএর জ acos functionিটেক (িবপা-
তক) ব বহার করেবা। িক এিট আমােদর রিডয়ােন কাণ ফরত িদেব। রিডয়ান থেক
in
িড ীেত িনেত চাইেল আমােদর 180/pi িদেয় ণ করেত হেব। কথা হে পাই কমেন
পােবা। আমরা pai একটা constant ঘাষণা করেত পাির যার মান িদেয় িদব 3.1416
অথবা আেরা িনখুত মান পেত চাইেল acos(−1) থেকও মান বর কের িনেত পাির।
am
float a , b , c ; / / বা েলা
cout << " s i d e s a b c : " ; / / যাগান যাচনা
c i n >> a >> b >> c ; / / যাগান নওয়া
/ / িড ীেত পা র
f l o a t const p a i = arc co s (−1 ) ; / / িবক হেলা 3 . 1416
C ∗= 180 / p a i ; B ∗= 180 / p a i ; A ∗= 180 / p a i ;
২৯৭
যাগান-ফলন (input-output)
s i d e s a b c : 145 60 90
angles A B C= 149 . 703 12 . 049 18 . 2475
৭. এমন একিট program ( মেলখ) রচনা কেরা যিট েটা সময় ঘ টা, িমিনট, সেকে ড
িনেয় সময় িটেক যাগ কের। এ কােজ তুিম যাগ, ভাগফল ও ভাগেশষ ব বহার করেব।
min = min % 60 ;
5g
m i n i t += sec / 60 ; / / মাট সেক ড 60 এর বশী হেল
sec = sec % 60 ; / / িমিনট হওয়ার পের অবিশ সেক ড
hour += min / 60 ; / / মাট িমিনট 60 এর বশী হেল
/ / ঘ টা হওয়ার পের অবিশ িমিনট
in
৮. এমন একিট program রচনা কেরা যিট েটা সমীকরণ ax + by = c ও dx + ey = f
এর a, b, c, d, e, f input িনেয় x ও y এর মান output দয়। এরকম সহ সমীকরণ
am
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 ) ;
যাগান-ফলন (input-output)
f i r s t equation a b c : 2 1 4
second equation e f g : 1 −1 −1
x = 1 . 33333 y = 1 . 33333
২৯৮
float v = u + a ∗ t ;
f l o a t s = u∗ t + a ∗ t ∗ t / 2 ;
5g
যাগান-ফলন (input-output)
i n i t−speed a c c e l e r a t i o n time : 2 1 4
speed : 6 d i s t a n c e : 16
in
১০. নীেচর pseudocodeএর (ছ -সংেকত) জ একিট program ( মেলখ) তরী কেরা।
am
ক) পেড়া (read) x ও y
খ) গেণা (compute) p = x ∗ y
গ) গেণা (compute) s = x + y
ঘ) গেণা (compute) t = s2 + p ∗ (s − x) ∗ (p + y)
ঙ) িলেখা (write) t
al
int p = x ∗ y ; // ধাপ খ
int s = x + y ; // ধাপ গ
২৯৯
5g
in
am
al
৩০০
অধ ায় ১৫
Conditional Programming
(শতািল পিরগণনা)
5g
আমােদর জীবনটা নাক বরাবর সাজা একটা পথ নয়, িতটা মােড় মােড় এটা শাখায় শাখায়
িবভ । তামােক একটা শাখায় যেত হেব, একসােথ এেকর বশী শাখায় যেত পারেব না। কা-
নটায় যােব তার জ ভাবেত হেব, তামার অব া ও ল িবেবচনা করেত হেব। Conditional
programming (শতািল পিরগণনায়) আমরা শাখায় শাখায় ভাবা িশখেবা, আমােদর সামেনর
in
গমন পথ বাছাই করা িশখেবা, আমরা আমােদর জীবেনর িস া নয়া িশখেবা।
am
৩০১
উপেরর অংশটু কান programএ ( মেলখ) িনেয় compile (সংকলন) কের চািলেয়
(run) দেখা। যিদ 50 এর কম কান ন র input ( যাগান) দাও যমন 45 তাহেল output
(ফলন) দখােব fail । আর যিদ 50 ও 79 এর মােঝর কান ন র input ( যাগান) দাও যমন 65
তাহেল output (ফলন) দখােব pass। আর যিদ 80 বা বশী কান মান input ( যাগান) দাও
যমন 85 তাহেল ই সাির output (ফলন) দখােব: থম সািরেত pass আর পেরর সািরেত
star। নীেচর input-output ( যাগান-ফলন) এই programিট ( মেলখ) িতন বার চািলেয়
বােম, মােঝ, ও ডােন এই িতনিট ব াপার দখােনা হেয়েছ।
যাগান-ফলন (input-output)
number? 45 number? 65 number? 85
fail pass pass
star
5g
পের খয়াল কেরা আমরা িলেখিছ if (number >= 50) অথাৎ যিদ ন র 50 বা তার বশী হয়
তাহেল কী করেত হেব সটা িক তার পরপরই বেলিছ cout << "pass" << endl; অথাৎ
পাশ output (ফলন) দখােত হেব। তারপেরর সাির খয়াল কেরা else মােন হেলা না হেল অথাৎ
ন র যিদ 50 বা তার বশী না হয় মােন 50 এর কম হয়, আমােদর ফল outputএ দখােত হেব
যা বলা হেয়েছ িঠক পেরর সািরেত cout << "fail" << endl;। য কান ন র হয় 50 এর
in
কম হেব না হয় বশী বা সমান হেব, এই েটা ছাড়া আর িভ িকছু হেত পাের না, এমনিক ওই
েটা একসােথও সিত হেত পাের না। কােজই আমােদর programএ ( মেলখ) হয় cout <
< "pass" << endl; না হয় cout << "fail" << endl; execute (িনবাহ) হেব, েটাই
am
একসােথ হেত পারেব না। িঠক যন েটা শাখা তরী হেয় গেলা।
আমরা উপেরর program হেত দখেত পলাম া ন েরর ওপর িভি কের ফলাফল পাশ
না ফল দখােত হেব অথাৎ output (ফলন) দখােনার ওই েটা statementএর মেধ কানটা
িনবািহত হেব সটা আমরা ন র 50 এর কম না বশী বা সমান এই শতিট পরী া কের বাছাই করেত
পারলাম। অেনক programming language (পিরগণনা ভাষা) (number > 50) এর পের
cout << "pass" << endl; এর আেগ then িলখেত হয়, িক c++ এ এটা িলখেত হয় না।
al
এখােন বরং শত number >= 50 এটােক েটা ( ) ব নী িদেয় ব ী করেত হয়। ব নী দয়ার
ব াপারটা মেন রাখেব, কারণ থম থম তুিম এটা িনেয় ায়ই ভুল কের compilation error
(সংকলন িট) পােব, আর তামােক তখন এিট িঠক করেত হেব। ব নী েটা এখােন আেশ পােশর
শতেক পৃথক কের, যা সফল compileএর (সংকলন) জে জ রী।
উপেরর programএ ( মেলখ) খয়াল কেরা পাশ ফল দখােনার if এর পের আেরা একটা
if আেছ যিট িদেয় আমরা া ন রিট star (তারকা) িকনা তা দখাই। এই if এ শত হে (
number >= 80) অথাৎ ন র যিদ 80 বা এর বশী হয় তাহেল output (ফলন) দখােব star।
িক আর একটু সতক ভােব খয়াল কেরা এই শত িমথ া হেল বা পূরণ না হেল কী দখােব সটা
িক নাই। সাজা কথায় এই if এর সােথ কান else ব বহার করা হয় িন। মােন ন র যিদ 80
এর কম হয় তাহেল ফ িকছুই দখােনার দরকার নাই। তাহেল আমরা জানলাম if এর শত পূরণ
হেল আমােদর কী করেত হেব সটা িলখেত হেব, িক শত পূরণ না হেল আমরা দরকার মেতা কী
করেত হেব সটা িলখেবা, অথবা দরকার না হেল িকছুই িলখেবা না।
এবার নীেচ programিট খয়াল কেরা। এখােন আমরা উপেরর পাশ- ফল দখােনা অংশিটই
আবার দিখেয়িছ, তেব একটু িভ ভােব। িভ তাটা হেলা উপের যমন else এর পের সরাসির
cout << "fail" << endl; িলেখিছলাম, এখােন তা না কের else এর পের if (number
৩০২
< 50) িলেখিছ। তামােদর কােছ মেন হেত পাের, এটা তা র, বুঝেত িবধা কারণ িঠক যন
মা েষর ভাষায় আমরা য ভােব বিল যমন যিদ ন র 50 বা বশী হয় output দখাও পাশ নাহেল
যিদ ন র 50 এর কম হয় output দখাও ফল িঠক তার মেতা। কথা সত আমােদর বুঝা িবধা
হয় এ ভােব। িক আমরা এভােব িলখেবা না, কারণ else এর পের ওই if (number < 50)
িলখা আসেল অদরকারী আর স কারেণ তামার program ( মেলখ) খােমাকা slow ( থ) হেয়
যােব। ওই if (number < 50) লখাটা অদরকারী কারণটা আেগই খািনকটা জেনিছ তবুও
আেরকবার বিল else এর শাখায় আসা মােন হেলা number >= 50 এই শতিট িমথ া হেয়েছ।
আর এই শতিট িমথ া হওয়া মােন number < 50 শতিট অব ই সত । কােজই এিট আবার
আর একিট if লািগেয় পরী া করার কান েয়াজন নাই।
i f ( number >= 50) // যিদ পােশর ন র
cout << " pass " << endl ; // পাশ ফলন
e l s e i f ( number < 50) // না হেল
cout << " f a i l " << endl ; // ফল ফলন
তুিম যিদ একা ই মা েষর বুঝার িবধােথ ওই if (number < 50) টা িলখেত চাও, স-
5g
টা commentএর (টীকা) িভতের িলখেত পােরা। নীেচ যমন িলেখ দখালাম। এেত তামার
programও ( মেলখ) ধীর গিতর হেলা না, আবার তামার পে program পড়েতও সহজ
হেয় গেলা। আমরা এ রকমই ায়ই কের থািক। তেব অেনক ে else এর পের ওইরকম
একটা if দওয়া অব াবীও হেয় যায়, এটা আমরা পেরর একটা পােঠই িব ািরত দখেবা।
in
i f ( number >= 50) // যিদ পােশর ন র
cout << " pass " << endl ; // পাশ ফলন
e l s e / / i f ( number < 50) // না হেল
am
দেখই কমন বুঝেত পাির য ওই cout এর সািরিট আসেল তার আেগর সািরর if এর সােথর
শত সত হওয়ার ওপের িনভরশীল। তারপর দেখা পেরর সািরেত থাকা else আবার একটু িভতর
থেক না হেয় if বরাবরই হেয়েছ। এটা িদেয় আমরা বুঝােত চাই এই else টা আসেল
ওই if এর শতটা িমথ া হেল েযাজ হেব। ল া programএ ( মেলখ) যখন অেনক if আর
অেনক else থাকেব তখন কান else কান if এর সােথ তা match (িমলােনা) আমােদর পে
চােখ দেখ কিঠন হেয় যেত পাের। ওই িমলােনার িবধােথ if আর তার সােথর else এক বরাবর
িলখা হয়। সবেশেষ খয়াল কেরা else এর পেরর সািরর cout আবার একটু িভতর থেক লখা,
কারণ এটা execute (িনবাহ) হেব িকনা তা িনভর কের else এর ওপের। একটু িভতর থেক
লখা কের সইটাই বুঝােনা হয়।
৩০৩
cout << " x y x>=y x>y x==y x ! =y x<y x<=y " << endl ;
উপেরর programএ ( মেলখ) থেম আমরা েটা অসমান সংখ ার তুলনা কেরিছ যখা-
ন আেগরিট পেরিট থেক ছাট। তারপের আমরা েটা সমান সংখ ার তুলনা কেরিছ। সবেশেষ
in
আবােরা েটা অসমান সংখ ার তুলনা কেরিছ িক এখােন আেগরিট বড়, পেররিট ছাট। উ
programএর ি েত output (ফলন) কী হেব তা নীেচ দখােনা হেয়েছ।
ফলন (output)
am
এখােন ছয়িট relational operators (অ য়ী অণুি য়া) ব বহার করা হেয়েছ। এ েলা হল
al
৩০৪
কাজ কের। চাইেল একটা ভ ক ও একটা পূণকও ওই operator েলােত এক সােথ ব বহার করা
যায়, আর সে ে পূণকিট (int) থেম ভ েক (float) type cast ( কারা িরত) হেয় যােব,
তারপর তুলনািট হেব েটা ভ ক (float) এর মেধ । ফলাফল অব ই হেব একিট Boolean
(bool) অথাৎ 0 বা 1। Relational operators (অ য়ী অণুি য়া) Boolean (bool) এর
ওপরও কাজ কের। সে ে false আর true ক ফ 0 আর 1 ধের পূণক িহসােব িবেবচনা
করেল তুলনার য ফলাফল আসার কথা তাই আসেব। উপেরর programএ তুিম 3 ও 4 এর
বদেল নানা রকম Boolean (bool) বা পূণক (int) বা ভ ক (float) মান েটা operandই
(উপাদান) একরকম বা েটা ইরকম কের বিসেয় ফলাফল েলা পযেব ণ করেত পােরা।
5g
ারা িবভাজ হয় তাহেল এিট leap year, যমন ১৬০০ ও ২০০০। তা নাহেল অথাৎ বছরিট যিদ
৪০০ িদেয় িবভাজ না হয় িক এিট যিদ ১০০ িদেয় িবভাজ হয় তাহেল এিট leap year নয়,
যমন ১৮০০ ও ১৯০০। তাও নাহেল অথাৎ বছরিট ১০০ ারাও িবভাজ নয় িক যিদ ৪ ারা
িবভাজ তাহেল এিট leap year, যমন ২০১২ বা ২০১৬। তাও নাহেল অথাৎ বছরিট যিদ ৪
ারা িবভাজ না হয় তাহেল এিট leap year নয় অথাৎ সাধারণ বষ যমন ২০১৪ বা ২০১৫। এই
in
কথা েলােক সংে েপ িলখেল দাঁড়ায় "যিদ ৪০০ ারা িবভাজ হয় তাহেল leap year, নাহেল
যিদ ১০০ ারা িবভাজ হয় তাহেল leap year নয়, নাহেল যিদ ৪ ারা িবভাজ হয় তাহেল leap
year, নাহেল leap year নয়।" আমরা এিটেকই programএ িলেখ ফলেবা।
am
এবার আমােদর programএর ( মেলখ) িদেক তাকাই। উপের সংে েপ িঠক য ভােব
leap year িনণয় করার িনয়ম বণনা কেরিছ, আমােদর programএ আমরা যন তাই িলেখিছ।
িমিলেয় নাও। Arithmetical operator েলার (পািটগিণতীয় অণুি য়া) পাঠ থেক মেন কেরা
দেখা % operator আমােদর ভাগেশষ ফলাফল দয়। তা ভাগেশষ যিদ হয় তাহেল আমরা
৩০৫
িবভাজ তা বুঝেত পারেবা, আর ভাগেশষ না হেল অিবভাজ তা। আমরা থেম ৪০০ িদেয়
িবভাজ তা পরী া কেরিছ, না হেল তারপর ১০০ িদেয় িবভাজ তা, তাও নাহেল তারপর ৪ িদেয়
িবভাজ তা পরী া কেরিছ। কমন ব একই রকম কের programিট লখা গেছ!
খয়াল কেরা িবভাজ হওয়া year %400 == 0 আর অিবভাজ হওয়া year %400 != 0
এই েটােতা িবপরীত শত। Programএ ( মেলখ) থম শত ব বহার করেল ওই শত সত
(অথবা িমথ া) হেল যা করেত হেব, একই কাজ ি তীয় শত ব বহার করেল সই শত িমথ া (অথবা
সত ) হেল করেত হেব। হেলা পর র িবপরীত এই েটার মেধ কান শতটা ব বহার করা
িচ ার জ সহজ। তাছাড়া 400 িদেয় িবভাজ তাই বা আেগ কন করেবা, 4 বা 100 িদেয় িবভাজ -
তাও তা আেগ করেত পাির? এসেবর উ র হল ব িত ম ও বশী ব িত ম েলা তাহেলেত রােখা,
আর বাঁদবাকী কম ব িত ম েলা সব রােখা নাহেলেত, তােত িচ া করা সহজ হেয় যায়, মেলখ
(program) তরীও সহজ হয়। যমন ৪০০ িদেয় িবভাজ হেল অিধবষ, এটা অেনক বশী ব -
িত ম, তুলনামুলক অ সংখ ক বছর ৪০০ িদেয় িবভাজ হেব। ১০০ িদেয় িবভাজ হওয়া আর
একটু কম ব িত ম মােন তুলনামুলক ভােব অেনক বছরই ১০০ িদেয় িবভাজ । ৪ িদেয় িবভাজ
হওয়া আেরা কম ব িত ম মােন তুলনামুলক ভােব অেনক বশী সংখ ক বছর ৪ িদেয় িবভাজ ।
আর ৪ িদেয় িবভাজ না হওয়া মাটামুিট সাধারণ ঘটনা ধরা যায়, বাদবাঁকী সব বছরই ৪ িদেয়
5g
অিবভাজ । খয়াল কেরা program ( মেলখ) সভােবই ব িত ম মাথায় রেখই লখা হেয়েছ।
সব চেয় বশী ব িত মী ব াপার সবেচেয় আেগ, সবেচেয় কম ব িত ম সবেচেয় পের।
আমােদর programএ indentation (ছাড়ন) দয়ার ব াপারটা একটু খয়াল কেরা। যিদও
আমরা জািন indentation দয়া না দওয়া অথবা ফাঁকা িদেয় িদেয় লখা বা না লখােত আমা-
in
দর programএর ( মেলখ) ফলাফেল কান পিরবতন হয় না। আমরা কবল মা েষর বাঝার
িবধােথ ও েলা কির। তারপরও খয়াল কেরা আমােদর বুঝার িবধােথ আমরা থেমর if , তা-
রপেরর else if েলা, সবেশেষর else আর তােদর শত সত হেল যা করেত হেব সব িমিলেয় কী
র একটা pattern (ধাঁচ) তরী কেরিছ। এই patternিট একিট মইেয়র মেতা কারণ আমা-
am
দর থম if িদেয় কের শত পরী া করেত করেত নীেচর িদেক নামেত হেব। আর য কান
একিট শত পূরণ হেলই তার জ য কাজিট করেত হেব পােশর িদেক িগেয় সিট করেলই পুেরা
patternিটর কাজই আসেল শষ হেয় যােব। মােন একটা শত সত হেল নীেচর িদেকর আেরা
কান শত আর পরী া করা হেব না, পুেরা patternএর কাজ শষ হেয় যােব। আর িঠক এর পের
য statement (িববৃিত) execute (িনবাহ) হেব সিট হেলা এই পুেরা patternএর বাইের
থাকা কান statement। যমন উপেরর programএ ল কেরা cout << "how lovely!
al
" << endl; হেলা পুেরা patternএর বাইের, তরাং if-lese ladder থেক বর হেয়ই ওইিট
execute হেত করেব।
৩০৬
উপেরর programএ ( মেলখ) দেখা ি তীয় if statementএ (িববৃিত) ১০০ িদেয় িব-
ভাজ তা পরী া করা হেয়েছ িক ৪০০ িদেয় অিবভাজ হওয়ার পের। তা আমরা যিদ year %
400 == 0 িলেখ িবভাজ তা পরী া না কের তার উে াটা year % 400 != 0 িলেখ অিবভাজ তা
পরী া করতাম তাহেল programিট কমন হেতা? তাহেল সালিট য leap year সটা দখােনার
cout চেল যেতা else এর সােথ। নীেচর programএর সােথ িমিলেয় নাও।
5g
i f ( year % 400 ! = 0 ) / / ৪০০ িদেয় অিবভাজ
i f ( year % 100 == 0 ) / / ১০০ িদেয় িবভাজ
cout << " leap year no" << endl ;
e l s e i f ( year % 4 == 0 ) / / ৪ িদেয় িবভাজ
in
cout << " leap year yes " << endl ;
else / / i f ( year % 4 ! = 0 ) ৪ িদেয় িবভাজ নয়
cout << " leap year no" << endl ;
am
তুিম এবার িজে স করেত পােরা, আ া আিম িক একই ভােব ১০০ বা ৪ িদেয় িবভাজ হওয়ার
if েলােকও ১০০ বা ৪ িদেয় অিবভাজ তার if িদেয় িলখেত পারতাম? াঁ অব ই। নীেচর
program ( মেলখ) খয়াল কেরা। আমরা িতিট if এর শতই বদেল এখন অিবভাজ তার
শত িদেয় িদেয়িছ। If-else ladderএ আমরা if এর সােথ থাকা শত িমথ া হেল তার else
al
এর পরপরই একটা if দখেত পতাম। এখােন দেখা উে াটা, if এর শত সত হেল বরং তার
পরপরই আেরকটা if দখা যাে । এটােক আমরা বলেবা nested if-else (অ াি যিদ-নাহেল)
অথাৎ একটা if-elseএর িভতের আেরকটা if-else, তার িভতের আেরকটা!
i f ( year % 400 ! = 0 ) / / ৪০০ িদেয় অিবভাজ
i f ( year % 100 ! = 0 ) / / ১০০ িদেয় অিবভাজ
i f ( year % 4 ! = 0 ) / / ৪ িদেয় অিবভাজ
cout << " leap year no" << endl ;
e l s e / / i f ( year % 4 == 0 ) ৪ িদেয় িবভাজ
cout << " leap year yes " << endl ;
else / / i f ( year % 100 == 0 ) ১০০ িদেয় িবভাজ
cout << " leap year no" << endl ;
else / / i f ( year % 400 == 0 ) ৪০০ িদেয় িবভাজ
cout << " leap year yes " << endl ;
৩০৭
5g
কান শত আেগ, কানটা পের, কানটা মােঝ, কানটােক nested করেব, কানটােক ladderএ
িদেব, চ া কের দখেব, মজাও পােব, িবষয় েলা িশখেবও!
i f ( year % 100 == 0 ) / / ১০০ িদেয় িবভাজ
i f ( year % 400 == 0 ) / / ৪০০ িদেয় িবভাজ
in
cout << " leap year yes " << endl ;
else / / ৪০০ িদেয় অিবভাজ
cout << " leap year no" << endl ;
am
৩০৮
িভতের হেল এবার পরী া কের দখেব ১৩ িদেয় িবভাজ িকনা। ১৩ িদেয় িবভাজ হওয়া মােন
সংরি ত অ ল তরাং খরচ ৩ টাকা, আর ১৩ িদেয় িবভাজ না হেল মােন অসংরি ত এলাকা
হেল খরচ ২ টাকা। নীেচর programএর ( মেলখ) সােথ িমিলেয় দেখা।
i n t zone ; / / অ ল
5g
এই programিট আেরা নানান ভােবই লখা স ব তুিম স েলা িনেজ িনেজ চ া করেব।
তেব আমরা তা কবল এিট সমাধানই িশখিছ না, আমরা িশখেবা dangling else (ঝুল নাহেল)
Patternিট (ধাঁচ) কমন সিট। তা আমােদর সম ার িববরেণ খয়াল কেরা একটা কথা আেছ
তুিম বশীর ভাগ িচিঠই পাঠাও ঢাকায়। আর সখােন অসংরি ত এলাকার সংখ ায় বশী। এ থেক
in
আমরা ধের িনেত পাির য খরচ বশীর ভাগ সময়ই ২ টাকা। কােজই আমরা cost variableিটর
মান েতই ২টাকা initial assignment (আিদ আেরাপণ) কের ফলেত পাির। তারপর শত
পরী া কের যিদ দিখ ঢাকার িভতের আর সংরি ত তাহেল খরচ কের িদেবা ৩ টাকা আর ঢাকার
বাইের হেল কের দেবা ৪ টাকা। নীেচর programিট দেখা। আমরা স রকমিট করার চ া
am
কেরিছ।
i n t cost = 2 ; / / ঢাকার িভতের অসংরি ত
cost = 3 ;
else / / দখেত মেন হয় ঢাকার বাইের
cost = 4 ;
উপেরর অংশটু ব বহার কের কান program ( মেলখ) তরী কের চালােল সিট সিঠক
cost জানােব না। ঢাকার বাইেরর অ ল েলার জ যখােন খরচ ৪টাকা হওয়ার কথা, তা না
হেয় বরং ২টাকাই থাকেব। আর ঢাকার িভতেরর অসংরি ত এলাকার জ যখােন খরচ হও-
য়ার কথা ২টাকা তা না হেয় খরচ ৪টাকা হেব। Program ( মেলখ) চােখ দেখ তা মেন হে
সব িঠক আেছ, তেব কন এই িবপি ! আসেল িবপি বাঁিধেয়েছ else অংশিট। আমরা যভা-
ব indentation (ছাড়ন) িদেয় িলেখিছ তােত মেন হে else অংশটু থম if সােথর অথাৎ
zone <= 100 িমথ া হওয়ার সােথ জিড়ত। িক আসেল তা নয়। িতিট else তার পূেবর িন-
কটতম স ীহীন if এর সােথ জিড়ত। তার মােন এইখােন else িট পেরর if এর সােথ জিড়ত।
অথাৎ zone যিদ 13 িদেয় িবভাজ না হয় তার সােথ জিড়ত।
Nested if-else (অ াি যিদ-নাহেল) আেলাচনায় আমরা দেখিছলাম সবেচেয় িভতেরর
else িঠক সবেচেয় িভতেরর if এর সােথ, মােঝর else িঠক মােঝর if এর সােথ, আর বা-
৩০৯
ইেরর else িঠক বাইেরর if এর সােথ। আসেল কান else কান if এর সােথ যােব এখােন
indentationএর (ছাড়ন) কান ভাবই নই। য else এর জ if িমলােনা দরকার সখান
থেক উপেরর িদেক যেত থাকেল থম য if পাওয়া যােব যার সােথ কান ইত মেধ else দও-
য়া হয় নাই, সই if -ই হেলা আমােদর ওই else এর সােথর if । Indentation (ছাড়ন) কবল
আমােদর চােখর দখার জ , computerএর (গণিন) কােছ এর কান অথ নই। তাহেল সিঠ-
কভােব indentation (ছাড়ন) িদেয় িলখেল আমােদর উপেরর program ( মেলখ) আসেল
নীেচর মেতা হেব। তরাং বুঝেতই পারেছা উ াপা া indentaiton (ছাড়ন) দেখ তুিম ভাবেব
তামার program এরকম কাজ করেব, িক আসেল সটা কাজ করেব িভ রকম। আর ভুলটা
কাথায় তা বর করেত তুিম গলদঘম হেয় যােব!
i n t cost = 2 ; / / ঢাকার িভতের অসংরি ত
এরকেমর সম া যখােন else কার সােথ তা বুঝেত আমােদর ঝােমলা লােগ, সই সম ােক
বলা হয় dangling else (ঝুল নাহেল)। উপেরর সিঠক indentation (ছাড়ন) িদেয় আমরা
in
বুঝেত পারলাম সম া কাথায় িক সমাধান িক আমরা এখেনা জািননা, else িক আসেলই
আমরা বাইেরর if এর zone <= 100 িমথ া হেল কী হেব তার জ িলখেত চাই। উপায় কী?
উপায় খুবই সহজ। িভতেরর if এর জ একটা else লািগেয় দাও, আর সই else এর জ
তা আমােদর িকছু করার নাই। কারণ ওই else এর জ খরচ ২টাকা সটা তা আমরা আেগই
am
initial assignmentএর (আিদ আেরাপণ) সময় িদেয় এেসিছ। িকছু করার নাই বুঝােত আম-
রা সাধারণত empty statement ( িববৃিত) ব বহার কির। আর কান িকছু ছাড়া কবল
semicolor (িদিত) ; িদেয় আমরা empty statement ( িববৃিত) বুঝাই। এবার তাহেল
পির ার হেয় গেলা কান else কান if এর জে ।
i n t cost = 2 ; / / ঢাকার িভতের অসংরি ত
al
৩১০
input িনেব। তারপর থম সংখ ািট 0 হেল পেরর সংখ ািটেক ব াসাধ ধের ফল ও পিরিধ
output িদেব। আর থম সংখ ািট 1 হেল ি তীয় সংখ ািটেক বেগর এক বা র দঘ ধের বগ-
িটর ফল ও পিরসীমা output িদেব। থম সংখ ািট 0 বা 1 ছাড়া অ িকছু হেল দখােব
"unsupported shape" অথাৎ এর জ আমােদর program কাজ করেব না।
i f ( number1 == 0 ) / / যিদ বৃ হয়
{
cout << " area i s : " ;
cout << 3 . 1416 ∗ number2 ∗ number2 ;
cout << " perimeter i s : " ;
cout << 2 ∗ 3 . 1416 ∗ number2 << endl ;
}
e l s e i f number == 1 ) / / যিদ বগ হয়
{
cout << " area i s : " ;
cout << number2 ∗ number2 ;
5g
in
cout << " periment i s : " ;
cout << 4 ∗ number2 << endl ;
}
am
else
cout << " unsupported shape " << endl ;
এই programিট লখা খুবই সহজ। কবল একটাই ঝােমলা আেছ সটা হল if-elseএ (যিদ-
al
i f ( number % 2 == 0 )
{ cout << number << " i s even " << endl ; }
else
{ cout << number << " i s odd" << endl ; }
৩১১
Block (মহ া) তরীর ফেল অেনকসময় dangling elseএর (ঝুল নাহেল) ঝােমলা সহেজ
এড়ােনা স ব হয়। আেগর পােঠর এর িচিঠ পাঠােনার খরচ িনণেয়র সম ািট িবেবচনা কেরা।
সখােন else িট কান if এর তা িনেয় ঝােমলা তরী হেয়িছল আর আমরা empty statement
( িববৃিত) িদেয় সটা সমাধান কেরিছলাম। Empty statement হল ফ ; semicolon
(িদিত) তার আেগ িকছু নই। নীেচর programএ ( মেলখ) আমরা ওই িভতেরর if িটেক একিট
blockএর িভতের ঢুিকেয় িদলাম। ফেল blockএর (মহ া) বাইের থাকা else িট কানভােবই
blockএর িভতেরর if এর সােথ িমলােনা যােব না, কােজই সটা আর dangling থাকেব না।
Block (মহ া) তরী কের চাইেল তার িভতের িক আমরা কান statement একদমই না
in
িদেত পাির অথাৎ কবলই িট বাঁকা ব নী (curly brackets) পরপর { }। সে ে এটাও
একরকেমর empty statement ( িববৃিত) তরী হেব। কােজই empty statement
তরীর েটা উপায় আমরা িশখলাম একটা হেলা কবলই ; semicolon (িদিত) দয়া আেরকিট
am
হেলা { } েটা বাঁকা ব নীর িভতের িকছু না লখা। থমিটর ব বহার আেগ দেখিছ আর নীেচ
ি তীয়িট ব বহার কের dangling else (ঝুল নাহেল) আেরকিট সমাধান দয়া হেলা।
i f ( zone % 13 == 0 ) / / সংরি ত
cost = 3 ;
else // অসংরি ত
{} // িববৃিত
else / / ঢাকার বাইের
cost = 4 ;
তাহেল যখােনই তুিম একটা statement (িববৃিত) িদেত পােরা, সখােনই তুিম আসেল চা-
ইেল একটা statementএর বদেল একটা compund statementও ( যৗিগক িববৃিত) িদেত
পােরা, আবার একটা empty statementও ( িববৃিত) িদেত পােরা। এখন থেক আমরা
যখন statement (িববৃিত) বলেবা তখন তুিম সটা মােন কবল একটা statement বুঝেব
না, বরং দরকার মেতা সটা য compound statementও ( যৗিগক িববৃিত) হেত পাের বা
empty statementও ( িববৃিত) হেত পাের, তা বুেঝ িনেব কমন!
৩১২
f l o a t d = b∗b − 4∗a∗ c ; 5g
//
যাগান যাচনা
যাগান নয়া
// িন ায়ক
in
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 ) ; // ি তীয় সমাধান
am
ি ঘাত সমীকরণ ax2 + bx + c =√0 এর সহগ ও বেকর মান না জেনও আমরা সমাধােনর
সূ বর করেত পাির x = (−b ± b2 − 4ac)/(2a)। এই সূে র বগমূল বর করার জ
আমােদর cmath header file (িশর নিথ) থেক sqrt function ব বহার করেত হেব। বাদ
al
বাঁকী অংশটু সহজ, উপেরর programএ ( মেলখ) দখােনা হেলা। থেম সমীকরণটা দখা-
না হেয়েছ। খয়াল কেরা xˆ2 িদেয় আমরা িক x এর বগ বুিঝেয়িছ। সহগ ও বক েলার মান
input ( যাগান) নয়ার পের আমরা b∗b − 4∗a∗c িনণয় কের variable d ত িনেয়িছ কারণ
এিট ইিট সমাধােনর জ ইবার ব বহার করেত হেব। যাইেহাক ওপেরর অংশটু ব বহার কের
লখা program ( মেলখ) কাজ করেব যিদ সমীকরণটা সহজ সাজা হয়, তােত কান ঝােমলা
না থােক! কী রকেমর ঝােমলা থাকেত পাের, িকছু অ মান করেত পােরা্?
আসেল program ( মেলখ) তরীর সময় আমােদর ধের িনেত হয় য ব বহারকারী সিঠক
input ( যাগান) যমন িদেত পাের তমিন যা ই া তা বিঠক inputও িদেত পাের। এইটা স
ভুল কের করেত পাের, না জেন করেত পাের, ই া কেরও করেত পাের। তামার কাজ ন কের
দয়ার আেরা নানািবধ উে ও থাকেত পাের। তেব আমরা আপাতত ধের িনই ব বহারকারী
ঝােমলা যা করার তা কবল ওই সহগ ও বেকর মান input ( যাগান) দওয়ার মাধ েমই করেব।
আর ওই ঝােমলা েলা করেল যা হেব তা হেলা উপেরর program আমােদর িনয় েণর বাইের
execution-time (িনবাহকালীন) error দিখেয় ব হেয় (abort) যেত পাের। এরকম একটা
error হেলা divide by zero ( িদেয় ভাগ), আর একটা error হেত পাের ঋণা ক সংখ ার
বগমূল বর করা! এই েটা িটই ি ঘাত সমীকরণ সমাধােনর ে ঘটেত পাের।
৩১৩
এই সব ে আমােদর আেগ থেক বুঝেত পারেত হেব য ওই রকম িটপূণ ঘটনা ঘটেব কী
না, যিদ ওইরকম িট সিত ই ঘেট সটা আমােদর ব বহারকারীেক জানােত হেব। আমােদর তরেফ
জানােনাটা াভািবক। িক আমােদর অজাে যিদ িট ঘেট program ( মেলখ) ব হেয় যায়
তাহেল সটা কানভােবই হণেযাগ নয়। সটা একটা বল programmingএর (পিরগণনা)
উদাহরণ। আর আমরা িটটা ঘটবার আেগই ধরেত পারেল সটা ব বহারকারীেক জািনেয় চাই-
ল আমােদর programেক ( মেলখ) তারপেরও িনবাহ করা চািলেয় যেত িদেত পারেবা। তা
আমরা নীেচ ি ঘাত সমীকরণ সমাধােনর পুেরা programিট ( মেলখ) িলখেবা আর তােত সব
রকম িট ধের সটা ব বহার কারীেক জানােনার চ া করেবা। আর যখন িট হে তখন আমরা
return EXIT SUCCESS; না কের return EXIT FAILURE; করেবা।
i n t main ( )
{
5g
// িমত নামাধার
in
float a , b , c ; // সহগ রাখার জ চলক।
৩১৪
Input ( যাগান) নবার পর থেম যিট আমােদর িবেবচনা করেত হেব তা হেলা সমীকরণিট
আসেল ি ঘাত সমীকরণ িকনা? যিদ a হয়, তাহেল সমীকরেণ কান x2 থােক না, এিট হেয়
al
যায় bx + c = 0 যিট একিট একঘাত সমীকরণ। এমন অব ায় আমরা আেরা পরী া কের দখব
bও িকনা। যিদ b হয় তাহেল থােক কবল c = 0, যখােন কান variable (চলক)
নই। কােজই আমােদর error message ( িট বাতা) দিখেয় return EXIT FAILURE;
বেল ফরত যেত হেব। নীেচর input-output ( যাগান-ফলন) খয়াল কেরা, a ও b হওয়ায়
error message ( িট বাতা) িদেয়েছ।
equation ax ˆ2 + bx + c = 0
v al u e s of a b c ? 0 0 3
not a l e g a l equation !
৩১৫
equation ax ˆ2 + bx + c = 0
v al u e s of a b c ? 0 2 1
not a q u a d r a t i c equation !
assuming l i n e a r equation .
s o l u t i o n i s x = −0 . 5
যিদ a না হয় তাহেল এটা একটা বধ ি ঘাত সমীকরণ। তরাং থেম আমরা িন ায়ক
(discriminant) িনণয় কের একটা varaibleএ নেবা। উপেরর programএ খয়াল কেরা
float d = b∗b − 4∗a∗c; িলেখ তাই করা হেয়েছ। এখন িন ায়ক যিদ ঋণা ক (negative)
হয় তাহেল তা বগমূল িনণয় করা স ব না, িক ি ঘাত সমীকরেণর সমাধােনর সূে িন ায়েকর
বগমূল আমােদর দরকার। কােজই িন ায়েকর মান ঋণা ক হেল আমােদর পে সমাধান করা
স ব নয়। একিট error message ( িট বাতা) দিখেয় return EXIT FAILURE; ফরত
যাওয়া উিচৎ। নীেচর input-output ( যাগান-ফলন) খয়াল কেরা, িঠক তাই ঘেটেছ।
equation ax ˆ2 + bx + c = 0
determinant negative !
5g
v al u e s of a b c ? 2 −5 2
no r e a l s o l u t i o n !
Discriminant (িন ায়ক) যিদ ঋণা ক (negative) না হয়, তাহেল এবার দখেত হেব
in
এিট িকনা। কারণ হেল সে ে আমােদর সমাধান িটই হেব, িক সমাধান িট আবার
আলাদা আলাদা না হেয় একই হেব। এইরকম অব ােক বলা হয় সমাপিতত (coincidental)
সমাধান। নীেচর input-outputএ ( যাগান-ফলন) এিট দখােনা হেলা।
am
equation ax ˆ2 + bx + c = 0
v al u e s of a b c ? 1 −2 1
two s o l u t i o n s are the same !
coincidental x = 1
সবেশেষর য অব া সিট হেলা িন ায়ক ঋণা কও নয়, ও নয়, তাহেল সিট ধনা ক
al
(positive)। আর এিটই হেলা সই অব া আমরা যিট ধের িনেয় একদম েত একটা ছাট
program ( মেলখ) দিখেয়িছলাম। কােজই আমরা সই কাজটু কের েটা সমাধান আমা-
দর জানা সূ া যায়ী িনণয় কের ফলন দিখেয় return EXIT SUCCESS; কের মেলখ শষ
করেবা। নীেচর input-outputএ ( যাগান-ফলন) এই অব া দখােনা হেলা।
equation ax ˆ2 + bx + c = 0
v al u e s of a b c ? 2 −5 2
f i r s t s o l u t i o n x1 = 2
second s o l u t i o n x2 = 0 . 5
৩১৬
i f ( number % 7 == 0 | | number % 13 == 0 )
cout << " l u c k l u c k " << endl ;
al
উপেরর programএ ( মেলখ) && হেলা "এবং" আর | | হেলা "অথবা"। তুিম চাইেল
িসিপিপেত && এর বদেল and আর | | এর বদেল or িলখেত পােরা। আর বাংলায় কখেনা কখেনা
আমরা "এবং" এর বদেল "ও" বা "আর" িলখেবা, আর "অথবা" এর বদেল িলখেবা "বা"। যাই
হাক মেন রােখা && এর ফলাফল সত হয় যখন এর পােশর operandই (উপাদান) সত হয়,
আর যেকান একটা িমথ া হেলই ফলাফল িমথ া। অ িদেক | | এর ফলাফল িমথ া হয় যখন এর
পােশর operandই (উপাদান) িমথ া, আর য কান একিট সত হেলই ফলাফল সত । তা
উপেরর program বুঝার চ া কেরা। খুব কিঠন িকছু নয়। সম ািট িঠক যমন কের বাংলায়
বণনা করা হেয়েছ, programএও যন িঠক স রকম কেরই লখা হেয়েছ।
এবার ওই programেক আমরা িকছু উ য়েনর চ া কির। একটা িবষয় খয়াল কেরা িবভাজ
হওয়া বা িবভাজ না হওয়া আমরা বারবার িহসাব কেরিছ। এইটা তা হওয়া উিচৎ নয়। তাছাড়া
ভাগেশষ বর করা অ অেনক operator (অণুি য়া) তুলনায় মাটামুিট সময় সােপ কাজ।
আমােদর তাই একবার ভাগেশষ িহসাব কের সটাই বারবার ব বহার করা উিচৎ। তা সই অ যায়ী
আমরা programএ িকছু পিরবতন করেত পাির। মুলত ভাগেশেষর জ আমােদর েটা পূণক
(integer) varaible িনেত হেব int remain7 = number % 7; আর int remain13
৩১৭
i n t number ;
cout << "number i s ? " ;
c i n >> number ;
5g
bool d i v i s i b l e 7 = number % 7 == 0 ;
bool d i v i s i b l e 1 3 = number % 13 == 0 ;
i f ( d i v i s i b l e 7 && d i v i s i b l e 1 3 )
cout << " mixed l u c k " << endl ;
in
i f ( ! d i v i s i b l e 7 && ! d i v i s i b l e 1 3 )
cout << "no l u c k " << endl ;
am
i f ( d i v i s i b l e 7 && ! d i v i s i b l e 1 3 )
cout << "good l u c k " << endl ;
i f ( d i v i s i b l e 1 3 && ! d i v i s i b l e 7 )
cout << " bad l u c k " << endl ;
al
if ( divisible7 | | divisible13 )
cout << " l u c k l u c k " << endl ;
উপেরর programএ ( মেলখ) খয়াল কেরা divisible7 (বা একই ভােব divisible13)
এর মান সত নািক িমথ া আমরা িক divisible7 == true অথবা divisible7 == 1 িল-
খ কির নাই, যিদও তা করেত পারতাম। আমরা বরং ফ varaibleটা ব বহার কেরিছ কারণ
variableটার মানই তা সরাসির সত বা িমথ া। আবার আলাদা কের == operator (অণুি য়া)
িদেয় সত বা িমথ া পরী া করার দরকার নই। তেব খয়াল কেরা যখন িবভাজ নয় পরী া কর-
ত হেব তখন আমরা ! divisible7 (বা একই ভােব ! divisible13) িলেখ অথাৎ variableএর
নােমর সামেন ! লািগেয় িদেয়িছ। এখােন ! হেলা নয় বা না operator। তুিম চাইেল ! এর বদ-
ল িসিপিপেত not িলখেত পারেত। নয় operator সত েক operand (উপাদান) িহসােব িনেয়
িমথ া ফলাফল দয় আর িমথ ােক operand িহসােব িনেয় সত ফলাফল দয়। আর স কারেণ
divisible7 == false না িলেখ আমরা ! divisible7 িলখেলই আমােদর কাজ হেয় যায়।
৩১৮
একিট সংখ া জাড় না িবেজাড় তা িনণেয়র program রচনা কেরা। তামার programএ তুিম
কান Boolean variable (বুলক চলক) বা relational operator (অ য়ী অণুি য়া) ব বহার
করেত পারেব না। তামােক পূণক মানেকই Boolean িহসােব ব বহার করেত হেব।
i n t number = 41 ; / / তুিম চাইেল input িনেত পােরা।
i f ( number % 2 ! = 0 )
cout << "odd" << endl ;
else
cout << " even " << endl ;
এই programিট ( মেলখ) তুিম চাইেল উপেরর মেতা কের িলখেত পােরা। কান সংখ া
২ িদেয় ভাগ িদেল যিদ ভাগেশষ না হয় তাহেল সংখ ািট িবেজাড়, আর ভাগেশষ হেল
অ
5g
সংখ ািট জাড়। কােজই programিট সহেজই িলেখ ফলা যায়। িক এেত অসমান িনণেয়র
জ একিট operator != ব বহার করেত হে , যিট চাইেল আমরা ব বহার না কেরও কাজ
চালােত পাির। এর কারণ হেলা য কান সময় েক আমরা িমথ া ধের িনেত পাির আর য কান
মানেক, সটা ধনা ক হাক বা ঋণা ক হাক, আমরা সটােক সত ধের িনেত পাির। তােত
আমােদর মানিট আালাদা কির িকনা তা আর পরী া করার দরকার পেড় না। কােজই নীেচর
in
programএর ( মেলখ) মেতা কের != বাদ িদেয় ফ if (number % 2) লখা মােনই
হেলা if (number % 2 != 0) লখা।
i n t number = 41 ; / / তুিম চাইেল যাগান িনেত পােরা।
am
তাহেল এখানকার আেলাচনায় আমরা দখলাম operand (উপাদান) িহসােব হেলা িম-
থ া (false) আর অ যেকান ধনা ক (positive) বা ঋণা ক (negative) পূণক (integer)
বা ভ ক (float) হেলা সত (true)। আর relational operators (অ য়ী অণুি য়া) আেলাচ-
নার সময় জেনিছ ফলাফল (result) িহসােব সবসময় false হেলা 0 এবং true হেলা 1। খয়াল
৩১৯
কেরা operand (উপাদান) িহসােব true 0 ছাড়া য কান িকছু হেলও ফলাফল (result) িহসােব
true কবল 1, false অব উভয় ে ই কবল 0।
5g
ফেলর ে একদম এই প representationই ( মূতায়ন) মেন চেল, তেব operandএর
(উপাদান) ে িকছুটা উদার হেয় 0 ছাড়া যেকান মানেকই true িহসােব ধের নয়, false ধের
নয় যথারীিত কবল 0 ক। Operand ও ফলাফেলর ে true এর এই িভ তা মেন রাখেব।
অেনক সময় এিট িবধাজনক, আবার অেনক সময় এিট অেনক িটর (error) জ েদয়।
Boolean algebraএর (বুলক বীজগিণত) থম য operator (অণুি য়া) তাহেলা নয়,
in
না যটা ! বা not িলেখ কাশ করা হয়। নয় operatorএর operand (উপাদান) ও ফলাফল
(result) নীেচ খয়াল কেরা !true হেলা false আর ! false হেলা true। আমরা এখােন ≡ বা
সমতুল (equivalence) তীক ব বহার কের বুঝােবা য ওই তীেকর বাম ও ডানপাশ সমতুল।
am
ধেরা েটা ! পরপর আেছ যমন ! !true বা ! ! false বা ! !x, তাহেল ফলাফল কী হেব।
এইসব ে আমােদর ডােনর ! আেগ িহসাব করেত হেব, তার ওপর বােমর ! ধের শষ ফলাফল
িহসাব করেত হেব। একারেণ ! হেলা right associative (ডান সহেযাজ )। তা এখােন ডােনর
al
! operator true বা false ক উে িদেব আর বােমর ! সটােক আবার িসধা করেব। তরাং !
!true হেব true, ! ! false হেব false, আর ! !x হেব x। Boolean algebraেত এই িবিধেক
বলা হয় double negation ( েনা ঋণায়ন)। তুিম িক িতন বা বশী সংখ ক ! পরপর থাকেল
কী হেব বর করেত পারেব? অব ই পারেব, িত ইিট ! পর রেক বািতল কের িদেব।
Boolean algebraএর (বুলক বীজগিণত) ি তীয় operator (অণুি য়া) এবং, ও যটা &
& বা and িলেখ কাশ করা হয়। ল কেরা এবং operatorএর ফলাফল (result) সত যখন
উভয় operandই (উপাদান) সত , আর যেকান একিট operand িমথ া হেলই ফলাফল িমথ া।
৩২০
Boolean algebraএর (বুলক বীজগিণত) তৃতীয় operator (অণুি য়া) অথবা, বা যটা
| | বা or িলেখ কাশ করা হয়। ল কেরা অথবা operatorএর ফলাফল (result) িমথ া যখন
উভয় operandই (উপাদান) িমথ া, আর যেকান একিট operand সত হেলই ফলাফল সত ।
বুেঝ ফিল সিট সত না িমথ া তাহেল আমরা এই সরলীকরণ েলা কােজ লাগােত পারেবা।
৩২১
5g
এবার আমরা বশ িকছু equivalence law (সমতুল িবিধ) দখেবা। এই law েলার বামপাশ
আর ডানপাশ সবসময় equivalent। আমরা তাই এ েলা ব বহার কের িবিভ সমেয় আমােদর
logical expression ( যৗি ক রািশ) সরল করার চ া করেবা।
in
নীেচর েটা িবিধ হেলা এবং, অথবার িবিনময় িবিধ (commutative law)। িবিনময় িবিধেত
operatorএর (অণুি য়া) operand েলা পাশ পিরবতন করেলও ফলাফল একই থােক।
am
নীেচর েটা িবিধ হেলা সহেযাজন িবিধ (associative law)। এই িবিধেত একই operator
(অণুি য়া) পরপর থাকেল আমরা য কানিট আেগ মূল ায়ন (evaluate) কের তার ফলাফেলর
সােথ অ operatorএর মূল ায়ন করেত পাির, আর তােত ফলাফল একই হেব।
al
• x | | y | | z ≡ (x | | y) | | z ≡ x | | (y | | z) সহেযাজ
৩২২
নীেচর িবিধ েলা হেলা শাষন িবিধ (absorption law)। থম চারিট িবিধেত খয়াল কেরা
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 শাষন
নীেচর িবিধ েটােত operator েলার operand েটা একই। এবং && ও অথবা | | উভ-
5g
য়র ফলাফল এে ে সবসময় operandিটর মান যা তাই হেব। একিট operandএর িনেজর
সােথ িনেজর ওপর কান operator (অণুি য়া) যু হেল ফলাফল যিদ operandিটই হয়
তাহেল operatorিটর এই ধমেক বলা হয় idempotence (অ ি য়তা)। সব operatorই
িক idempotent নয়, যমন পািটগিণেত সবাব ায় x + x = x সত নয়, কােজই যাগ +
idempotent নয়। Boolean algebraেত এবং && ও অথবা | | উভেয়ই idempotent।
in
• x && x ≡ x অ ি য়তা • x || x ≡ x অ ি য়তা
নীেচর িবিধ েটােত operator েলার (অণুি য়া) operand েটা পর েরর িবপরীত।
am
এবং && এর ফলাফল এে ে সবসময় false হেব, কারণ েটা operandএর মেধ য কান
একিট তা িমথ া হেবই, আর য কান একিট িমথ া হেলই এবং এর ফলাফল িমথ া। তাই এই িব-
িধেক বলা হয় contradiction (অস িত)। আর অথবা | | এর ফলাফল এে ে সবসময় true
হেব, কারণ েটা operandএর মেধ য কান একিট তা সত হেবই, আর য কান একিট সত
হেলই অথবা এর ফলাফল সত । তাই এই িবিধেক বলা হয় excluded middle (নঞ মধ ম)।
al
নীেচর িবিধ েটার নাম De Morgan's Law (িড মরগােনর িবিধ)। এই িবিধ েটা খুবই
পূণ এবং ায়শই Boolean expressionএর সরলীকরেণ ব ব ত হয়। এই িবিধ অণুযায়ী
এবং && এর ফলাফেলর ওপর নয় ! করেল য ফলাফল পাওয়া যায় তা আেগ operand েলার
ওপের নয় ! কের সই ফলাফেলর ওপর অথবা | | চািলেয় পাওয়া ফলাফেলর সমতুল। একই ভােব
অথবা | | এর ফলাফেলর ওপর নয় ! করেল য ফলাফল পাওয়া যায় তা আেগ operand েলার
ওপের নয় ! কের সই ফলাফেলর ওপর এবং && চািলেয় পাওয়া ফলাফেলর সমতুল।
৩২৩
x y
5g
Truth Table (সত ক সারণী)
x && y ! (x && y) !x !y !x || ! y
in
true true true false false false false
true false false true false true true
false true false true true false true
am
উপেরর truth table (সত ক সারণীেত) িতিট row (আিড়) খয়াল কেরা:
২. ি তীয় 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 উভেয়র মান সমান।
৩২৪
উপেরর মেলখেত েটা if এর শত সত হেলই আমােদর একই ফলন দখােত হয়। আমরা
তাই চ া করেত চাই একটা if িদেয় িবষয়টা সামলােত। সটা করা খুবই সহজ যিদ তুিম সম াটা
al
উে া িদক থেক ভােবা। তুিম মারগ লড়াই খলেত পারেব যিদ তুিম ৫ম ণী পেড়া অথবা তুিম
৫ম ণীেত না িক তামার বয়স ১০ বছর হেল। তা এই থেক তুিম খুব সহেজ খলেত পারার
শত িলেখ ফলেত পােরা level == 5 | | level != 5 && age == 10, তাই না!
i f ( level == 5 | | l e v e l ! = 5 && age == 10)
cout << " can pl a y " << endl ;
else / / উপেরর শত সত না হেল
cout << " can ' t p l a y " << endl ;
এখন কথা হে এই য খািনকটা জিটল একটা শত আমরা িলেখ ফললাম, এটােক িক কান
ভােব সরলীকরণ করা যায়? সরলীকরণ করার জ চেলা ধের িনই p ≡ level == 5 আর q ≡
age == 5। তাহেল level != 5 ক লখা যায় !p। ফেল আমােদর শতিট দাঁড়ােলা p | | !p
&& q, আমরা এিটেক Boolean algebra (বুলক বীজগিণত) িদেয় সরল করেবা।
৩২৫
তরাং উপেরর সরেলর ফেল া expression (রািশ) অ যায়ী আমােদর program দাঁ-
ড়ােব িন প, যখােন আমােদর একিট অিতির শত আর মূল ায়ন করেত হে না। আমরা p
এর বদেল level == 5 আর q এর বদেল age == 10 িলখেবা।
i f ( level == 5 | | age == 10)
cout << " can pl a y " << endl ;
else / / উপেরর শত সত না হেল
cout << " can ' t pl a y " << endl ;
একই রকম আেরকিট উদাহরণ দেখা। ধেরা কান একটা programএ ( মেলখ) শত দাঁ-
ড়াে ! (p && (!p | | q)) | | q। এখন কথা হে এিটেক সরল করেল কী দাঁড়ােব।
≡ ! (p && q) | | q
5g
≡ ! ( (p && !p) | | (p && q)) | | q ব টন িবিধ (distribution)
অস িত (contradiction)
≡ !p | | ( !q | | q) সহেযাজন (associative)
am
মান true হেয় গেছ। এর অথ দ শেতর মান কখেনা variable 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 ; / / শত সব সময় িমথ া
৩২৬
else
cout << " something " ;
উভয় পােশর programএই ( মেলখ) এই একই ব াপার ঘটেব। একটা িবষয় উে খ করা দর-
কার: cond1 সত হেল বামপােশ দেখা cond2 পরী ণই দরকার পের না। ডানপােশও আসেল
একই ঘটনা ঘটেব। অথবা | | এর ফলাফল যেহতু য কান একিট operand সত হেলই সত
হয়, সেহতু cond1 সত হেলই cond2 এর মুল ায়ন ছাড়াই | | এর ফলাফল সত হেয় যােব।
এই য ব াপারিট এটােক বলা partial evaluation (আংিশক মুল ায়ন), এেত অদরকারী কাজ
িকছুটা কেম, program ( মেলখ) িকি ত তগিতর হয়।
al
৩২৭
হেলই িমথ া হয়, সেহতু cond1 িমথ া হেলই cond2 এর মুল ায়ন ছাড়াই && এর ফলাফল িম-
থ া হেয় যােব। এই য ব াপারিট এটােক বলা partial evaluation (আংিশক মুল ায়ন), এেত
অদরকারী কাজ িকছুটা কেম, গিত িকছুটা বােড়।
i f ( cond ) i f ( ! cond )
cout << " something " ; cout << " other thi ng
";
else else
cout << " other th in g " ; cout << " something " ;
cout << " be done " << endl ; cout << " be done " <<
endl ;
উপেরর উদাহরেণ বামপােশ cond ব বহার করা হেয়েছ আর ডানপােশ !cond। ফেল শত
সত হেল যা করেত হেব আর িমথ া হেল যা করেত হেব এই েটা ান বদলাবদিল কেরেছ।
i f ( cond1 ) i f ( cond1 | | ! cond2 )
else
cout << " something " ;
e l s e i f ( cond2 )
5g
cout << " other th in g " ;
উপেরর উদাহরেণ লে কের দেখা "something" outputএ (ফলন) যােব যিদ cond1
সত হয় অথবা যিদ cond2 িমথ া হয়, অ কথায় !cond2 সত হয়। আর cond1 িমথ া হেল
am
তারপর cond2ও িমথ া হেল outputএ (ফলন) যােব "other thing"। িঠক এই ব াপারিটই
উভয়পােশর programএ িতফিলত হেয়েছ।
i f ( cond1 ) i f ( ! cond1 | | cond2 )
i f ( cond2 ) cout << " something " ;
cout << " something " ; else
al
উপেরর উদাহরণিট একটু জিটল। বামপােশ খয়াল কেরা "something" outputএ যােব
যিদ cond1 িমথ া হয় অথবা তা না হেল যিদ cond2 সত হয়। কথায় বলেল িঠক তাই-ই ডা-
নপােশও িলখা হেয়েছ। আর একটু বশী গভীের বুঝেত চাইেল ধেরা বামপােশ "something"
outputএ যােব যিদ cond1 && cond2 || !cond1 সত হয়। Boolean algebra িদেয়
সরলীকরণ করেল এিট আসেব !cond1 || cond2, তুিম িনেজ চ া কের দেখা।
bool cond = true ; i f ( cond1 && cond2 )
i f ( ! cond1 ) cout << " something " ;
cond = f a l s e ; else
৩২৮
5g
!cond1 সত হেল আমরা cond ক িমথ া কের িদেয়িছ। একই ভােব cond2 িমথ া হেল অথাৎ
!cond2 সত হেলও আমরা cond ক িমথ া কের িদেয়িছ। তাহেল েটা শেতর য কানিট িমথ া
হেলই cond িমথ া হেয় যােব। িঠক && এর ফলাফেলর মেতা। শেষর if elseএ এবার cond
ব বহার কের output দবার পালা। তেব একটা িবষয় খয়াল কেরা ডানপােশ যমন cond1
িমথ া হেল partial evaluationএর (আংিশক মূল ায়ন) cond2 আর পরী ণই করা হেব না,
in
বামপােশ িক তা হে না। তুিম যিদ এই উ য়ন টু করেত চাও তাহেল তামােক if ( !cond2)
বদেল িলখেত হেব else if ( !cond2)।
bool cond = f a l s e ; i f ( cond1 | | cond2 )
am
else
cout << " other t h i n g " ;
cout << " be done " << endl ;
এই উদাহরণিটও িঠক আেগর উদাহরণিট মেতা, তেব এখােন | | এর জ করা হেয়েছ। অথ-
বার | | ে যেকান একিট operand (উপাদান) সত হেলই ফলাফল সত হয়, আমরা তাই
cond এর আিদ মান ধেরিছ false। আর তারপর শত েটার য কানিট সত হেলই cond ক
সত করা হেয়েছ। তুিম যিদ partial evaluation (আংিশক মূল ায়ন) এখােনও কােজ লাগােত
চাও তাহেল বামপােশ if (cond2) বদেল else if (cond2) িলখেব।
৩২৯
ফল করেব, ২০ জন তারকা সহ পাশ করেব আর বাঁকী ৭০ জন ফ পাশ করেব। তুিম এমন একিট
program ( মেলখ) রচনা কেরা যিট একজন িশ াথীর ছাে র ন র input ( যাগান) িনেয়
ফল, পাশ, বা তারকা সহ পাশ output (ফলন) িদেব। তামার মেলখিট ১০০ জন িশ াথীর
জ ১০০ বার আলাদা আলাদা কের চালােনা (run) হেব। তেব এই ১০০ বার চালােনােত মাট
সময় যােত কম লােগ programটা সটা মাথায় রেখ রচনা করেত হেব।
i f ( number >= 50) // যিদ পােশর ন র
cout << " pass " << endl ; // পাশ ফলন
else // না হেল
cout << " f a i l " << endl ; // ফল ফলন
ধেরা উপেরর মেতা কের তুিম program তরী কেরেছা। য িশ াথী ফল করেলা বা পাশ
করেলা বা তারকা সহ পাশ করেলা, তার জ তা যা output তা দখােতই হেব, সখােন সময়
5g
কম লাগা বশী লাগার ব াপার নাই। সময় কম বা বশী লাগার হেলা তুিম কতবার শত পরী-
া কের কাজটা করেত পারেছা সটােত। যমন ধেরা একজন ফল করা িশ াথীর জ উপেরর
programএ (number >=50) শত পরী া হেব আবার program য ভােব লখা হেয়েছ তা-
ত number >= 80 শতিটও পরী া হেব। শত পরী ার ফলাফল সত হাক আর িমথ া হাক
in
পরী া তা করেতই হেব। ফেল মাট িট শত পরী া হেলা। য িশ াথীিট কবল পাশ করেব
খয়াল কের দেখা তার জে ও িটই শতই পরী া করেত হেব। একই হেব তারকাসহ পােশর
ছাে র জে ও িট শতই পরী া করেত হেব। তরাং উপেরর program িদেয় এই সম ার
সমাধান করেল ১০০ জন িশ াথীর জ মাট শত পরী া হেলা ১০০ * ২ = ২০০ বার।
am
}
else // না হেল
cout << " f a i l " << endl ; // ফল ফলন
এবার একটু ভেব দেখা পাশ বা ফল িনণয় করার জ তা আমােদর একটা শত লাগেবই,
িক যখন আমরা জেন গলাম একজন িশ াথী ফল কেরেছ, তখন তার জে ও কন আমরা
number >= 80 শত পরী া করেবা? সটা তা অদরকারী কাজ হেব। তরাং তারকা দ-
খােনা অংশটু যিদ আমরা পােশর জ য অংশ সখােন একটা block (মহ া) তরী কের সই
blockএর িভতের িনেয় যাই, তাহেল number >= 80 শতিট কবল পাশ করা িশ াথীেদর জ
পরী া হেব। উপেরর program দেখা। তা এই ে পাশ বা ফল িশ াথীর জ কবল ১ টা
শত পরী া হেলা আর তারকা পাওয়া ছাে র জ ২টা তরাং মাট শত পরী ণ হেলা ২০*২ +
(৭০+১০)*১ = ১২০ বার মা । িনি তভােবই এই program আেগরিটর চেয় তাড়াতািড় ১০০
জন িশ াথীর ফলাফল দখােনার কাজ শষ করেব! কমন মজার িবষয় না!
i f ( number >= 80) // যিদ তারকা ন র
{
৩৩০
তুিম হয়েতা ভাবেছা দিখ আেরক ভােব করা যায় িকনা যােত আেরা কম সময় লােগ। য-
মন ধেরা তুিম থেম ৮০ বা বশী িকনা পরী া করেব, তারপর ৫০ এর বশী িকনা পরী া
করেব, অথাৎ উপেরর programএর ( মেলখ) মেতা কের। এখােন খয়াল কেরা তারকা পা-
ওয়া িশ াথীেদর জ শত পরী া করা লাগেব ১বার সিট number >= 80 আর ফ পাশ
বা ফল করা িশ াথীেদর জ ২িট শতই পরী া করা লাগেব। ফেল মাট শত পরী ণ হেব
২০*১ + (৭০+১০)*২ = ১৮০ বার। তরাং উপেরর এই তৃতীয় program আমােদর লখা থম
programএর চেয় একটু তগিতর হেলও ি তীয়িটর চেয় যেথ ধীরগিতর হেব। তুিম আেরা
5g
নানান ভােব চ া কের দখেত পােরা, তেব আমােদর ি তীয় programিটই সবেচেয় তগিতর
হেব, কারণ এেত সবেচেয় কম সংখ ক বার শত পরী া করেত হেয়েছ।
আ া তুিম কী ধরেত পেরেছা কন ি তীয় programিটেত সবেচেয় কম সংখ ক বার শত
পরী া করেত হেব? উ রটা িক খুবই সহজ। আমােদর দখেত হেব সবেচেয় বশী সংখ ক
িশ াথী কান ভােগ পেড়। এে ে ফ পাশ কের সেবা ৭০ জন। আমরা চাইেবা এই ৭০ জেনর
in
জ output (ফলন) যােত কম সংখ ক, এে ে মা একটা শত পরী া কেরই িদেত পাির।
উ া িদেক য ভােগ িশ াথীর সংখ া যত কম তার জ তত বশী শত পরী া করা যেত পাের।
আমােদর তৃতীয় programএ আমরা আসেল এই িনয়ম ভ কেরিছ। কারণ এটােত তারকা পাওয়া
am
২০ জেনর ফলন আমরা দখাই মা ১বার শত পরী া কের, আর পাশ করা ৭০জেনর output
দখাই ২বার শত পরী া কের। আর স কারেণ এিট ি তীয় output থেক ধীরগিতর হেব। তা
এখন থেক if-else িনেয় কাজ করার সময় শতিদেয় সৃি হওয়া ডাল-পালা েলার কানটােত
কত েলা case (ব াপার) আসেত পাের সটা মাথায় রেখ দ program তরী করেব, কমন!
al
Ternary operator ব বহার কের আমরা উপের েটা সংখ ার বড়িট বর করার program
দিখেয়িছ। এখােন থেম ? িচে র আেগ য শত পরী া আেছ সিট মূল ায়ন হেব। শত যিদ
৩৩১
সত হয় তাহেল question ? আর colon দাঁটা : িচে র মােঝ য মানিট আেছ সিট হেব
operatorিটর ফলাফল আর শত যিদ িমথ া হয় তাহেল operatorিটর ফলাফল হেব colon
( দাঁটা) : িচে র পের থাকা অংশটু । তাহেল উপেরর programএ first > second শতিট
সত হেল ফলাফল হেব first অথাৎ বড়িট আর শতিট িমথ া হেল ফলাফল হেব second কারন
এিটই তখন বড় অ িটর চেয়। তরাং আমরা ফলাফল িহসােব first ও second varaible-
িটর মেধ সবসময় বড়িটই পাি । তুিম িন য় এখন েটা সংখ ার মেধ ছাটিট বর করার
program এভােব িলখেত পারেব!
i n t f i r s t , second ; / / চলক িটর মান যাগান িনেত পােরা
int large ; / / বড় মানিট রাখার জ চলক ঘাষণা
তুিম িক চাইেল েটা সংখ ার বড়িট বর করার জ উপেরর মেতা কেরও িলখেত পারেত।
এইে ে variable (চলক) largeএ মান assign (আেরাপণ) আমরা ternary operatorএর
িভতেরই কেরিছ খয়াল কেরা। Assign (আেরাপণ) operatorএর ফলাফল তা assign করা
5g
মানিটই হয়, তরাং এে ে ও ternary operatorএর ফলাফল িহসােব আমরা বড়িটই পােবা,
যিদও large variable মান assign আেগই হেয় িগেয়েছ। তুিম িজে স করেত পােরা এই ে
ternary operatorিটর যটা ফলাফল আসেব সটা আসেল কী কােজ লাগেব। এইখােন আসেল
আমরা ফলাফলিট কােজ লাগাি না। িক তুিম চাইেল int result = first > second ?
in
large = first : large = second; িলখেতই পােরা। সে ে বড় মানিট large চলেকর
মেধ যমন থাকেব তমিন result varaibleএর মেধ ও থাকেব। Ternary operatorএর
ব বহার এভােব বশ সংি ।
am
l a r g e = second ; / / আর তা না হেল
Ternary operatorএর কাজ তা উপেরর মেতা কের if-else িদেয়ও করা যেত পাের।
তাহেল কখন তুিম ternary operator ব বহার করেব কখন if-else ব বহার করেব? অত
সংি ধরেনর বেল ternary operator (িতিনক অণুি য়া) আসেল টুকটাক ছাটখাট িকছুর
জ বশী ব বহার করা হয়। আর if-else হেলা একদম সব জায়গায় ব বহার করার জ , িবেশষ
কের শত সত বা িমথ া হেল যিদ একটা block (মহ া) execute (িনবাহ) করেত হয়।
i n t f i r s t , second , t h i r d ; / / মান যাগান িনেত হেব
তুিম িক ternary operator (িতিনক অণুি য়া) ব বহার কের িতনিট সংখ ার মেধ সবেচেয়
বড়িট বর করেত পারেব। িন য় পারেব, এ আর এমন কিঠন কী? উপেরর programএর মেতা
কের থেম েটার মেধ বড়িট বর করেব। তারপর large এর সােথ thirdিট তুলনা কের যিদ
৩৩২
i n t l a r g e = f i r s t > second ?
( f i r s t > third ? f i r s t : third ) :
( second > t h i r d ? second : t h i r d ) ;
৩৩৩
5g
উপেরর program ( মেলখ) খয়াল কেরা। যমন বলা হেয়েছ তমন কের িট variable
নয়া হেয়েছ: কান অ পাত তা রাখার জ variable ratio আর কত রিডয়ান কান তা রা-
খার জ variable angle। এরপর একটা menu ( াপণ ) দখােনা হেয়েছ, কান সংখ া িদেয়
কান অ পাত বুঝােনা হে সটা ব বহারকারীেক জানােনার জ : 1 িদেল sine (ল া পাত), 2
in
িদেল cosine (ল া পাত), 3 িদেল tangent ( শা পাত)। এরপের অ পাত ও কাণ input
( যাগান) নয়ার জ থেম input prompt ( যাগান যাচনা) কের তারপর input নওয়া হেয়-
ছ। তারপর মুল অংশ যখােন switch case (পি ব াপার) ব বহার কের য অ পাত চাওয়া
am
হেয়েছ সিট দখােনা হেব। Switch-caseএর পের আেছ অ িকছু programএর বাঁকী অংশ।
আমরা কবল switch-case (পি ব াপার) অংেশ নজর দই। যেহতু ratio variable-
িটর (চলক) মান ওপর িনভর করেব আমরা কান অ পাত outputএ (ফলন) দখােবা, আমরা
তাই িলেখিছ switch(ratio) আর তারপর আমােদর একিট block (মহ া) তরী করেত হেব
{ } বাঁকা ব নী (curly brackets) যুগল িদেয়। এবার অ পােতর মান কত হেল কী করেত
হেব তার সবিকছু আমরা রাখেবা blockএর িভতের। খয়াল কেরা ratio এর মান 1, 2, 3 হও-
al
য়ার জ আমােদর িতনিট case (ব াপার) আেছ যমন case 1: case 2: case 3:; খয়াল
কেরা থেম case তারপের ratio variableিটর কান মান সিট তারপর একটা : colon ( দাঁ-
টা)। িতিট caseএর (ব াপার) পের দেখা আমরা cout িদেয় ি েকানিমিতর অ পাত sine,
cosine, tangent ব বহার কের output দিখেয়িছ। তারপর িলেখিছ break; অথাৎ এইখা-
ন switch-caseএর break ( াি ) ঘটেব। এই breakএর ( াি ) কাজ আমরা একটু পেরই
আেলাচনা করিছ। তার আেগ দেখা case 3: এর breakএর ( াি ) পের রেয়েছ default: যিট
হেলা deafult case (অগত া ব াপার) অথাৎ ওপেরর কান case এর সােথই ratio এর মান
না িমলেল default caseিট ঘটেব বেল ধের নয়া হেব। তাহেল ratio এর মান যিদ 1, 2, 3
িভ অ িকছু হয় তাহেল default: default caseিট ঘটেব। যথারীিত সখােন আমরা error
message ( িটবাতা) দিখেয়িছ। এখােন িক break; আেছ শেষ।
Program execution ( মেলখ িনবাহ) করার সময় ধের িনেত পােরা অদৃ বাতােমর
মেতা একটা ব াপার আেছ যটােক বলা হয় control (িনয় ণ)। এই control (িনয় ণ) বা-
তামিট program executionএর েত main functionএর একদম থম সািরেত থােক।
বাতামিট যই সািরেত থােক সই সাির execute (িনবাহ) হয়। আর তারপর control বাতামিট
পেরর সািরেত লাফ দয়, তখন সই সািরিট execute হয়। এভােব control বাতােমর লাফালা-
৩৩৪
িফ ও সই সােথ সংি সািরর িনবাহ এেক এেক চলেত থােক। If-else (যিদ-নাহেল) আেলাচনা
করার সময় আমরা বেলিছলাম শত সত হেল িকছু কাজ হয় আবার শত িমথ া হেল অ িকছু কাজ
হয়। িঠক যন েটা শাখা (branch) তরী হয়। শেতর ওপর িনভর কের control বাতামিট
আসেল হয় এই শাখায় নাহয় ওই শাখায় িগেয় লাফ িদেয় বেস। Control য শাখায় বেস সই
শাখা িনবািহত হয়, অ শাখা িনবািহত হয় না। Control (িনয় ণ) বাতাম এরপর if-elseএর
(যিদ নাহেল) পেরর অংেশ চেল যায়।
Switch-caseএর (পি -ব াপার) ে বলেতা control switch(ratio) এর পের লাফ
িদেয় কান সািরেত িগেয় বসেব? যিদ ratio এর মান হয় 1 তাহেল িগেয় বসেব case 1: এর
সািরেত, 2 হেল িগেয় বসেব case 2: এর সািরেত, আর 3 হেল বসেব case 3: এর সািরেত, আর
িতনেটর কানটাই না হেল িগেয় বসেব default: এর সািরেত। Control switch(ratio) হেত
লাফ িদেয় িগেয় সংি caseএ (ব াপার) বসার পের সািরর পর সাির এেক এেক যেত থাকেব
যত ণনা একিট break; ( াি ) পাে । অথাৎ break ( াি ) পাওয়ার আেগ পয ত কিট
সািরই এেকর পর এক execute (িনবাহ) হেত থাকেব। আর break; পাওয়ার পেরই control
আর একিট লাফ িদেয় switch-caseএর (পি -ব াপার) blockএর বাইের চেল যােব। Break
না িদেল কী ঘটেব আমরা সটা পরবতীেত আেলাচনা করেবা। তেব বেল রািখ িতিট caseএর
ব াপার)
in
Nested switch case (অ াি পি ব াপার) ব বহার কের এমন একিট program ( মেলখ)
রচনা কেরা, যিট থেম menu ( াপণ ) দিখেয় জানেত চােব আমরা বেগর িহসাব করেত চাই,
am
নািক বৃে র িহসাব করেত চাই। সিট input ( যাগান) নবার পের আমােদর পছ বগ হেল
programিট input িনেব দঘ আর কী দখেত চাই ফল নািক পিরসীমা তা, আর সই
অ যায়ী output (ফলন) দখােব। আর আমােদর পছ বৃ হেল মেলখিট ব াসাধ input
িনেব আর িনেব ফল নািক পিরিধ দখেত চাই তা, আর স অ যায়ী output িদেব।
নীেচর program ( মেলখ) খয়াল কেরা। থেম আকৃিতর menu ( াপণ ) দখােনা হেয়-
ছ। তারপর shape variable declare (চলক ঘাষণা) কের input prompt ( যাগান যাচনা)
al
কের input ( যাগান) নয়া হেয়েছ। এরপর shape variableএর মােনর ওপর switch (পি )
যােত িতনিট case (ব াপার) আেছ। Variable shape এর মান 1 হেল case 1: বগ, 2 হেল
case 2: বৃ , আর অ িকছু হেল অগত া ব াপাের default: িটবাতা দখােনা হেয়েছ।
৩৩৫
{
case 1 : / / বাইেরর পি বগ হেল
/ / কী পছ তা দখােনা হেব
cout << " choice square " << endl ;
c i n >> soutput ;
/ / িভতেরর পি
5g
cout << " output : " ; / / যাগান যাচনা
/ / যাগান নওয়া
৩৩৬
/ / কী চাই াপণ
cout << " 1 output area " << endl ;
cout << " 2 output perimeter " << endl ;
/ / িভতেরর পি
{
case 1 :
5g
যিট আেরকিট পি র িভতের
switch ( coutput ) / / কী চাই পি
/ / িভতেরর পি ফল হেল
in
cout << " area : " ;
cout << 3 . 1416 ∗ r a d i u s ∗ r a d i u s ;
cout << endl ;
break ;
am
৩৩৭
// বাইেরর পি রও বাইের
cout << "how l o v e l y ! " << endl ;
যখন shape এর মান 1 অথাৎ বগ বেছ নয়া হেয়েছ তখন থেম outputএ (ফলন) দ-
খােনা হেয়েছ য বগ পছ করা হেয়েছ। তারপর variable length declare ( ঘাষনা) কের
input prompt ( যাগান যাচনা) কের input ( যাগান) নওয়া হেয়েছ। তারপর squareএর কী
জানেত চাই তার জ আেরকিট menu ( াপণ ) দখােনা হেয়েছ, যখােন ফল নািক পির-
সীমা চাই সটা দখােনা হেয়েছ। ব বহারকারীর পছ যাগান নয়ার জ এখােনও soutput
নােম একিট variable declare কের input prompt কের মান input নয়া হেয়েছ। তার-
পর variable keechai এর মােনর ওপর িনভর কের আেরকিট switch case (পি ব াপার)
ব বহার কের ফল বা পিরসীমা outputএ (ফলন) দখােনা হেয়েছ। এই switch caseিট
(পি ব াপার) আেগর switch caseএর িভতের, আর তাই এই িভতেররিটেক বলা হেব nested
switch case (অ াি পি ব াপার)।
যখন shape এর মান 2 অথাৎ বৃ বেছ নয়া হেয়েছ তখন থেম outputএ (ফলন) দ-
খােনা হেয়েছ য বৃ পছ করা হেয়েছ। তারপর variable radius declare ( ঘাষনা) কের
5g
input prompt ( যাগান যাচনা) কের input ( যাগান) নওয়া হেয়েছ। তারপর বৃে র কী জা-
নেত চাই তার জ আেরকিট menu ( াপণ ) দখােনা হেয়েছ, যখােন ফল নািক পিরিধ
চাই সটা দখােনা হেয়েছ। ব বহারকারীর পছ input নয়ার জ এখােনও coutput নােম
একিট variable declare কের input prompt কের মান input নয়া হেয়েছ। বেগর -
ব ব ত variable soutput থেক িভ একিট নাম নয়ার জ ই মুলত নাম দওয়া হেয়েছ
in
coutput। এই েটা variableই বাইেরর switch-caseএর য block (মহ া) তার িভতের।
একই blockএ েটা variableএর (চলক) নাম একই হেত পাের না। আর স কারেণ নােমর এই
িভ তা, যিদও তােদর উে এখােন একই রকম। যাইেহাক, variable coutput এর মােনর
am
ওপর িনভর কের এরপর আেরকিট switch case ব বহার কের ফল বা পিরিধ outputএ
(ফলন) দখােনা হেয়েছ। এই switch caseিট (পি ব াপার) বেগর switch-caseএর মেতাই
বাইেরর switch caseিটর িভতের, তাই এিটও একিট nested (অ াি ) switch case।
এই পযােয় িজে স করেত পােরা, break; পাওয়া মা control (িনয় ণ) সই switch
case (পি ব াপার) থেক বর হেয় আেস বেল আমরা জািন, তা িভতেরর switch case
থেক break; পেল কাথায় যাে ? উ র হে িভতেরর switch case থেক বর হেয় যখােন
al
আসেব সটা িক বাইেরর switchএর block। িভতেরর switch থেক বর হেয় কাথায় আসেব
সটা বুঝার জ বেগর switch caseএর বাইের cout << " square output ends" <<
endl; আর বৃে র switch caseএর বাইের cout << "circle output ends" << endl;
লখা হেয়েছ। আর বাইেরর switch caseএর বাইের লখা হেয়েছ cout << "how lovely
!" << endl;। মেন রাখেব break পেল িভতেরর এক েরর switch থেক বর হেয় িনয় ণ
িঠক বাইেরর রিটেত যােব।
৩৩৮
১৫টায় আেস তাহেল তােক কবল িবকােলর না া খাওয়ােত হেব। এই সময় েলা িভ অ কান
সমেয় যিদ স আেস তাহেল তােক িকছুই খাওয়ােনার দরকার নাই।
switch ( vartime )
{
case 10 :
case 11 :
cout << " morning b r e a k f a s t " << endl ;
case 12 :
case 13 :
cout << " midday lunch " << endl ;
case 14 :
case 15 :
cout << " afternoon snacks " << endl ;
}
5g
উপেরর programএ আমরা break ( াি ) ছাড়া switch case (পি ব াপার) িলেখ
program ( মেলখ) তরী কেরিছ। এখােন variable vartime এ আমরা অিতিথর আসার
সময় রাখেবা, সটা input ( যাগান) নয়া হেয় থাকেত পাের, বা কান ভােবা assigned (আেরা-
িপত) হেয় থাকেত পাের। সাধারণত switchএ (পি ) য ব াপারটার সােথ িমেল যায় সখান থ-
in
ক statement েলা (িববৃিত) িনবািহত হেত কের আর break ( াি ) পাওয়া পয চেল।
আর একবার কান ব াপােরর সােথ িমেল গেল পের আর কান ব াপােরর সােথ িমলােনার চ া
করাও হয় না, বরং break না পাওয়া পয মাগত statement েলা িনবািহত হেত থােক।
খয়াল কেরা উপেরর programএ ( মেলখ) সময় যিদ ১০টা হয়, িঠক সখােন িকছু না থা-
am
কেলও পরপর য statement েলা আেছ স েলা এেক এেক িনবািহত হেব, ফেল morning
breakfast, midday lunch, afternoon snacks সব েলা এেক এেক outputএ আসেত
থাকেব। সময় যিদ ১১টা হয় তাহেলও একই ঘটনা ঘটেব। সময় যিদ ১২ টা হয়, তাহেল morning
breakfast outputএ আসেব না, িক midday lunch ও afternoon snacks এেক এেক
আসেত থাকেব। পেরর সময় েলার জে ও একই রকেমর কথাবাতা েযাজ ।
al
আর একটা িবষয় খয়াল কেরা, উপেরর switchএ (পি ) আমরা default case default
: দই নাই। ফেল সময় যিদ তািলকায় না থােক তাহেল সিট কান caseএর (ব াপার) সােথই
িমলেব না, আর এেত outputএ (ফলন) িকছুই আসেব না। আসেল switchএ (পি ) default
(অগত া) ব াপার িদেতই হেব এমন কান কথা নই, দরকার না লাগেল িদেব না।
switch ( number )
{
case 4 :
case 0 :
case 2 :
cout << " even " << endl ;
break ;
case 1 :
case 5 :
case 3 :
cout << "odd" << endl ;
৩৩৯
break ;
}
এবার িকছু : switchএ কী case েলা মােনর মা সােরই থাকেত হেব? মান েলা কী
ধারাবািহকভােব পরপর সংখ া হেত হেব? উভয় ে র উ র হে "না"। কােজই িঠক উপেরর
উদাহরেণর মেতা তুিম দরকার মেতা case েলা পরপর না হেলও বা উে াপা া েম হেলও
িলখেত পারেব। আবার দেখা িকছু caseএ (ব াপার) break ( াি ) নাই, আবার িকছু ব াপাের
আেছ। মাট কথা যখােন break দয়া দরকার সখােন break; না দরকার হেল নাই।
আেরা িকছু : switchএ (পি ) case েলা (ব াপার) কী পূণক (integer) ছাড়া ভ ক
(fractioner) হেত পারেব? আর switch() এ variable (চলক) ছাড়া অ িকছু ব বহার
করা যােব? তুিম কান ভ ক (fractioner) case িহসােব ব বহার কের দখেত পােরা, তােত
compileএ (সংকলন) error message ( িট বাতা) দখােব, তার মােন হেলা পারেব না।
আর switch(number) এখােন switch এ য কবল variable হেত হেব তা নয়, য কান
রািশ যিট পূণক ফলাফল দয় সিটই তুিম ব বহার করেত পােরা, যমন নীেচর উদাহরণ দেখা,
আমরা ২ িদেয় ভাগেশেষর ওপর switch ব বহার করিছ। ভাগেশষ ০ হেলা জাড়, আর ১ হেল
িবেজাড়।
switch ( number % 2 )
{ 5g
case 0 : cout << " even " << endl ; break ;
in
case 1 : cout << "odd" << endl ; break ;
}
Switchএ অব তুিম একই case ইবার ব বহার করেত পারেব না, যমন case 1: িলেখ
am
একই switchএর িভতের পের আবার case 1: িলখেত পারেব না। তেব switchএর িভতের
nested (অ াি ) switch থাকেল সখােন case 1: থাকেতই পাের।
Switch case (পি ব াপার) ব বহার না কের if else (যিদ নাহেল) ব বহার করেলই তা হয়।
তাহেল switch case কাথায় ব বহার করেবা, আর কাথায় if else ব বহার করেবা?
switch ( number )
{
case −2 :
case −1 :
cout << " negative " << endl ;
break ;
case 0 :
cout << " zero " << endl ;
break ;
case 1 :
case 2 :
৩৪০
উপেরর উদাহরণিট দেখা। এখােন আমরা একিট ন র positive (ধনা ক), negative
(ঋণা ক), নািক zero ( ) িনণয় করেত চাই। আমরা যিদ আেগ থেক জািন য ন রিট কবল
−2, −1, 0, 1, 2 এই পাঁচিট িনিদ সংখ ার একিট হেত পারেব, অ আর িকছু নয়, এ েলার
বাইের নয়, কবল তাহেলই আমরা উপেরর মেতা কের switch case (পি ব াপার) ব বহার
করেত পারেবা। আবার চাইেল আমরা নীেচর মেতা কের সমতুল আেরকিট programও িলখেত
পারেবা, যখােন আমরা switch case ব বহার না কের if else (যিদ নাহেল) ব বহার করেবা।
যিদ না হেল ব বহার কের অব আেরা নানা ভােবই এিট করা স ব, এিট কবল একটা উদাহরণ।
i f ( number == −2 | | number == −1 )
cout << " negative " << endl ;
e l s e i f ( number == 1 | | number == 2 )
cout << " p o s i t i v e " << endl ;
e l s e / / i f ( number == 0 )
cout << " zero " << endl ;
5g
িক আমােদর ন রিট যিদ উপেরর ওই পাঁচিট সংখ ার বাইের অিনিদ সংখ ক ন র েলার
একিট হয়, অথবা অেনক অেনক বশী সংখ েকর একিট হয়, তাহেল িঠক switch ব বহার কের
in
আমরা সামলােত পারেবা না। কারণ এ সব ে number of cases (ব াপােরর সংখ া) হেব
অেনক বশী বা অসংখ । আর একিট ব াপার হেলা switchএ case েলা মুলত মান সমান ==
হেল কী হেব তার ওপর িভি কের তরী, অ কান ধরেনর তুলনা যমন বড় >, ছাট < ইত ািদ
am
ব বহার করা যায় না। ফেল switch (পি ) সাধারণত ব বহার করা হয় অ িকছু সংখ ক ও
িনিদ সংখ ক ব াপােরর ে , আর এ সব ে program পড়া সহজ হেয় যায়। অ া
সকল ে সাধারণত if else (যিদ নাহেল) ব বহার করা হয় কারণ if elseএর সােথ য কান
শত বা connectives &&, | | , ! ব বহার কের আেরা জিটল শত ব বহার করা যায়।
i f ( number < 0 )
al
৩৪১
িফিরি ১৫.৭: 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>
i n t main ( void )
{
float radius ;
f l o a t const two = 2 . 0 ;
5g //
//
ানীয় চলক
ানীয় বক
in
cout << " r a d i u s : " ; c i n >> r a d i u s ;
i f ( r a d i u s < lowerLimit )
am
{
cout << " l e s s than lower l i m i t " << endl ;
ret ur n EXIT FAILURE ;
}
৩৪২
variable ব বহােরর পূেব অব ই এেত value assign কের িনেত হেব। Local variable ও
constant declare করার পর থেক ওই blockএর িভতের য কান খােন ব বহার করা যায়,
এমনিক subblock বা subsubblock িভতেরও ব বহার করা যায়।
i n t main ( )
{
cout << myvar << endl ; / / ব াপীয় চলেকর মান 2
}
i n t myvar = 5 ;
অেনক সময় একিট local ( ানীয়) variable বা constantএ নাম একিট global (ব া-
পীয়) variable বা constantএর নােমর সােথ িমেল যেত পাের। থম কথা িতিট varaible
বা constantএর নাম পুেরা program জুেড় unique (একক) হওয়া উিচৎ, িক িবধার
িবচাের অেনক সময় সটা করা স ব হয় না। এমতাব ায় কী কের বুঝেবা ব ব ত variable
বা constantিট global না local? উপেরর program ( মেলখ) খয়াল কেরা, সখােন
al
myvar নাম বারবার ব বহার কের অেন েলা variable declare করা হেয়েছ, যার একিট সকল
blockএর (মহ া) বাইের তাই global (ব াপীয়) আর অ েলা কান না কান blockএর িভত-
র তাই local variable। এখন myvar নােমর variableেক নানান খােন outputএ (ফলন)
দখােনা হেয়েছ। কথা হে নাম যেহতু একই, তা আমরা নামিট িদেয় কখন কান variableিট-
ক বুঝেবা, কখন কান মানই বা outputএ দখেত পােবা?
খয়াল কের দেখা যখােন global variableিট declare করা হেয়েছ আর মান দওয়া
হেয়েছ 2 তারপর থেক এিটর কাযকারীতা বলবৎ আেছ, blockএর বাইের তা অব ই আেছ
যমন একদম নীেচ যখােন int yourvar = myvar; লখা হেয়েছ। আবার blockএর (মহ া)
িভতের local variable ঘাষণার আেগ পয এিটর কাযকারীতা রেয়েছ ফেল আমরা global
variableিটর মানিটই অথাৎ 2ই দখেত পােবা। তারপর blockএর িভতের যখন একই নাম
িদেয় একিট variable ঘাষনা করা হেয়েছ আর মান দওয়া হেয়েছ 3, তখন myvar নােমর
সােথ local এই variableিটর কাযকারীতা বলবৎ হেয়েছ, আর তা জাির আেছ block শষ
হওয়া পয , তাছাড়া subblockএর িভতের একই নােমর আেরকিট variable ঘাষণার আেগ
পয ও তা জাির আেছ। Programএ ( মেলখ) comment েলা (টীকা) খয়াল কেরা। কাথায়
কান মান outputএ আসেব তা িদেয় আমরা বুঝার চ া করিছ, কাথায় কান variableিটর
৩৪৩
কাযকারীতা বলবৎ আেছ। তাহেল কান নাম কান variableিটেক বুঝাই, সটার জ আমােদর
দখেত হেব একই blockএর িভতের ওই নােমর কান variable আেছ িকনা? যিদ থােক সই
variableিট কাযকর আেছ। আর একই blockএর িভতের যিদ না থােক, তাহেল আমরা িঠক
বাইেরর blockিট দখেবা, সখােন একই নােম কান variable আেছ িকনা? যিদ থােক সটা
বলবৎ হেব আর তাও না থাকেল তার িঠক বাইের আেরা কান block আেছ িকনা তা দখেবা।
i n t number ;
c i n >> number ;
5g
িসিপিপেত if else (যিদ নাহেল) লখার সময় যিদ { } বাঁকা ব নী যুগল ব বহার কের কান
block (মহ া) তরী করা হয়, তাহেল সই blockএর িভতের ঘািষত য কান variable বা
constant তা local variable বা constant হেব। আমরা সটা আর আলাদা কের দখা-
ত চাই না। তেব উপেরর program খয়াল কেরা if ( int remainder = number % 3)
িলেখও আমরা remainder নােম একিট variable ঘাষণা কেরিছ। এই remainder নােমর
in
variableও একিট local variable ( ানীয় চলক) িহসােব পিরগিণত হয়, আর এটা কাযকর থা-
ক কবল যখােন লখা হেয়েছ সখান থেক হেয় ওই if else ladder (মই) বা nesting
(অ াি ) যত ণ শষ না হে তত ণ পয , এর বাইের কান কাযকারীতা থাকেব না, ফেল ব -
am
তুিম িক switch blockিটর িভতের চাইেল আেরা local variable ( ানীয় চলক) ঘাষণা ও
ব বহার করেতই পারেত। Constantএর ে ও একইরকম আেলাচনা েযাজ ।
i n t number ;
c i n >> number ;
৩৪৪
২. যিদ if এর সােথর শত িমথ া হেল সংি নাহেলেত else িগেয় আবারও শেতর িবপরীত
5g
শতিট সত িকনা পরী া করা দরকার নই। ব াখ া কেরা।
৩. যিদ নাহেল (if else) িদেয় program ( মেলখ) িলখেত indentation (ছাড়ন) দয়া
পূণ কন? কার জ পূণ মা েষর জ নািক computerএর (গণিন) জ ?
in
৪. Relational operators (অ য়ী অণুি য়া) কী? এ েলা কী ধরেনর ফলাফল দয়? িস-
িপিপেত থাকা কেয়কিট relational operatorএর উদাহরণ দাও।
am
৫. If else ladderএ (যিদ নাহেল মই) শত েলা কী ভােব সাজােব, যিদ িচ ার িবধা িবেব-
চনা কেরা অথবা programএর দ তা িবেবচনা কেরা?
৬. Nested if else (অ াি যিদ নাহেল) ও if else ladder (যিদ নাহেল মই) একটা থেক
আেরকিটেত পা র স ব, উদাহরণ সহ ব াখ া কেরা।
al
৭. Dangling else (ঝুল নাহেল) সম ািট কী? এিটর সমাধান কী কী ভােব করা যেত
পাের, উদাহরণ িদেয় আেলাচনা কেরা।
১১. Boolean conditionএর (বুলক শত) partial evaluation কী ভােব কাজ কের?
১২. একািধক global variable (ব াপীয় চলক) ও local variableএর ( ানীয় চলক) নাম
একই হেল কানটা কাযকর তা কী ভােব িনধািরত হয়?
৩৪৫
১. নীেচর programএর ( মেলখ) 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 <<
cout <<
cout << 5g
( n && 4 ) << endl ;
( n | | 4 ) << endl ;
( ! n ) << endl ;
in
২. নীেচর programএ ( মেলখ) িকছু syntactical (গঠনগত) ভুল আেছ। ভুলটা কাথায়
বেল তুিম মেন কেরা? ভুলটা এমন ভােব িঠক কেরা যােত এিটর indentation (ছাড়ন)
দেখ যা করেত চাওয়া হেয়িছল বেল মেন হয়, programিট ( মেলখ) semantically
am
i f ( x >= y )
sum += x ;
cout << " x l a r g e " << endl ;
al
else
sum += y ;
cout << " y l a r g e " << endl ;
৩৪৬
i f ( income < 0 )
5g
in
cout << " loan w i l l i n c r e a s e . " << endl ;
e l s e i f ( income >= 0 && income < 1200)
cout << " below poverty l i m i t . " << endl ;
e l s e i f ( income >= 1200 && income < 2500)
am
৭. যিদ িভ িভ বার চালােনার সময় ০, ১৫, বা ৭ input ( যাগান) দয়া হয় তাহেল নী-
al
i f ( n < 10)
cout << " l e s s than 10 . " << endl ;
else i f ( n > 5)
cout << " l a r g e r than 5 . " << endl ;
else
cout << " out of range ! " << endl ;
৩৪৭
i f ( n < 10)
i f ( n > 0)
cout << " p o s i t i v e . " << endl ;
else
cout << " . " << endl ;
৯. িতনিট সংখ া input ( যাগান) িনেয় কানিট বড়, কানিট ছাট outputএ দখাও।
5g
১০. িতনিট সংখ া input ( যাগান) িনেয় তােদর মেধ মােঝরিট outputএ (ফলন) দখাও।
১১. িতনিট সংখ া input ( যাগান) িনেয় তােদরেক উধ েম সািজেয় output (ফলন) দাও।
১২. গিণেত া ন র input ( যাগান) িনেয় সটা থেক letter grade (বণ মান) output
in
দাও। ধেরা ৯০ বা বশী হেল A, ৮০ বা বশী হেল B, ৭০ বা বশী হেল C, ৬০ বা বশী
হেল D, ৫০ বা বশী হেল E, আর তারও কম হেল F letter grade পাওয়া যায়।
১৩. একিট ি মাি ক (two dimensional) িব র ানা দওয়া আেছ, িব িট চারিট চতু-
am
১৫. তামােক -১০০ ও ১০০ এর মেধ িট সংখ া input ( যাগান) িহসােব দওয়া হেব, তুিম
al
১৬. একিট দ বষ leap year িক না তা িনণেয়র programিট তুিম if-else ladder (যিদ-
নাহেল মই) ব বহার কের িলখেব। তেব programিট রচনা করার সময় তামােক মেন
রাখেত হেব য এিট ১ থেক ২০০০ সাল পয িতিট সােলর জ চালােনা হেব। কােজই
তুিম ladderএর শত েলা এমন ভােব সাজােব যােত program ততম হয়।
১৭. বাংলা বছেরর কততম মাস তা input ( যাগান) িনেয় সই মােসর নাম ও ওই মােস কত িদন
তা outputএ (ফলন) দখাও। একােজ switch case (পি ব াপার) ব বহার কেরা।
১৮. কতটা বােজ সই সময় ঘ টায় input ( যাগান) িনেয় মাঝরাত (১-২), ভাত (৩-৬), সকাল
(৭-১১), পুর (১২-১৪), িবকাল (১৫-১৭), স া (১৮-১৯), রাত (২০-২৮) outputএ
দখাও। একােজ switch case (পি ব াপার) ব বহার কেরা।
১৯. এমন একিট program ( মেলখ) িলেখা যিট ১-৫ পয ম অ যায়ী পাঁচটা কামল
পানীেয়র (পািন, কাক, াইট, ফানটা, পপিস) নােমর তািলকা দখােব, তারপর িমক
ন র input ( যাগান) িনেয় কামল পানীয়িটর নাম outputএ (ফলন) দখােব। আর
৩৪৮
িমক ন রিট যিদ ১-৫ এর বাইের হয়, তাহেল স সং া একিট error message ( িট
বাতা) দখােব। তুিম এই programিট একবার switch case (পি ব াপার) ব বহার
কের আবার if else (যিদ নাহেল) ব বহার কের কেরা।
২০. একিট সংখ ার পুরক সংখ া িনণয় কেরা। সংখ াট এক অে র হেল তার পুরক সংখ ৯ এর
সােথ িবেয়াগফল, ই অে র হেল ৯৯ এর সােথ িবেয়াগফল, িতন অে র হেল ৯৯৯ এর
সােথ িবেয়াগফল। িতেনর চেয় বশী অে র সংখ া input ( যাগান) দওয়া হেব না।
২১. এমন একিট program ( মেলখ) িলেখা যটা ৫ জন লাক যােদর িমক ১-৫ তােদর
ক কতটা কের পেরাটা খেয়েছ input ( যাগান) িনেব। Programিট তারপর একজ-
ন সেবা কয়টা পেরাটা খেয়েছ সটা outuputএ (ফলন) দখােব। আর কান লাক
সেবা সংখ ক পেরাটা খেয়েছ programিট সটাও দখােব, তেব সেবা পেরাটা খাও-
য়া একািধক ব ি থাকেল কবল থমজেনর িমক ন র হেলই চলেব।
২২. একজন লাক াভািবক িনয়ম অ যায়ী স ােহ ৪০ ঘ টা কাজ কের, ৪০ ঘ টার বশী কাজ
করেল অিতির সময়টু র জ াভািবক িনয়েমর চেয় ১.৫ ণ মজুির পায়। কান এক
5g
স ােহ লাকিট কত ঘ টা কাজ কেরেছ আর াভািবক িনয়েম ঘ টা িত মজুির কত তা
input ( যাগান) িনেয় ওই স ােহ তার মাট মজুির কত তা outputএ (ফলন) দখাও।
২৩. ধেরা তুিম চার টুকেরা কাগজ িনেয়েছা। তামার ১ম টুকেরােত লখা আেছ ১, ৩, ৫, ৭, ৯,
১১, ১৩, ২য় টুকেরােত আেছ ২, ৩, ৬, ৭, ১০, ১১, ১৪, ১৫, ৩য় টুকেরােত আেছ ৪, ৫,
in
৬, ৭, ১২, ১৩, ১৪, ১৫, ৪থ টুকেরােত আেছ ৮, ৯, ১০, ১১, ১২, ১৩, ১৪, ১৫। তামার
program ( মেলখ) ব বহারকারী মেন মেন একিট সংখ া ধরেব, আর সিট ১ম, ২য়, ৩য়,
৪থ টুকেরার কান কানিটেত আেছ input ( যাগান) িদেব, তারপর তামার program
am
ব বহারকারী মেন মেন য সংখ ািট ধেরেছ সিট outputএ (ফলন) দখােব। এিট খুব
সহজ একিট ব াপার। য য টুকেরােত সংখ ািট আেছ ওই টুকেরা েলার থম সংখ া েলা
যাগ করেলই ব বহারকারীর সংখ ািট পাওয়া যােব। যমন ব বহারকারীর সংখ ািট যিদ ১,
৩, ৪ ন র টুকেরােত থােক তাহেল সংখ ািট ১ + ৪ + ৮ = ১৩।
al
১. নীেচর programএর ( মেলখ) output (ফলন) কী তা থেম খাতা কলেম িনণয় কেরা,
আর তারপর computerএ চািলেয় তার সােথ িমলাও।
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 ;
৩৪৯
4 // আেরাপণ হেব 4
1 // মান আসেলই তা 4
1 // কােজই 3 এর বশী
0 // 4 এর সমান , কম তা নয়
0 // আেরাপন হেব 0
1 // মান 0 এর সমান , সত
0 // মান তা 0 , বশী তা নয়
0 // 0 হেলা িমথ া তাই ফলাফল িমথ া
1 // 4 যেহতু সত , তাই ফলাফল সত
1 // 0 িনেজ িমথ া তাই ! 0 সত
5g
২. নীেচর programএ ( মেলখ) িকছু syntactical (গঠনগত) ভুল আেছ। ভুলটা কাথায়
বেল তুিম মেন কেরা? ভুলটা এমন ভােব িঠক কেরা যােত এিটর indentation (ছাড়ন)
দেখ যা করেত চাওয়া হেয়িছল বেল মেন হয়, programিট ( মেলখ) semantically
(অথেবাধকতায়) যন একদম তাই কের।
in
i f ( x >= y )
sum += x ;
cout << " x l a r g e " << endl ;
else
am
sum += y ;
cout << " y l a r g e " << endl ;
৩৫০
i n t found = 0 , count = 5 ;
i f ( ! found | | ++count == 0 )
5g
৪. নীেচর program ( মেলখ) চালােল কী output (ফলন) পাওয়া যােব?
in
cout << " danger " << endl ;
cout << " count = " << count << endl ;
am
danger
count = 5
৩৫১
c i n >> income ;
i f ( income < 0 )
cout << " loan w i l l i n c r e a s e . " << endl ;
e l s e i f ( income >= 0 && income < 1200)
al
অদরকারী শত েলা ছাড়া program ( মেলখ) কমন হেব তা নীেচ দখােনা হেলা। যিদ
income < 0 এই শত িমথ া হয়, তাহেল অব ই income >=0 সত হেব। কােজই
if else ladderএ (যিদ নাহেল মই) elseএর সােথ য যিদ থাকেব সখােন income
>=0 আবার লখার কান দরকার নই। Control (িনয় ণ) ওইখােন যাওয়া মােন ওই
শত অব ই সত আর এবং (and) && operatorএর (অণুি য়া) একিট operand
(উপাদান) সত হেল ফলাফল কবল ি তীয় operandএর ওপর িনভর কের। তরাং
আমরা সরলীকরণ কের কবল && এর ি তীয় operandিটেকই িলখেবা। এই একই ভােব
income >= 1200 আর income >= 2500 লখার কান দরকার নাই।
f l o a t income ;
৩৫২
i f ( income < 0 )
cout << " loan w i l l i n c r e a s e . " << endl ;
e l s e i f ( income < 1200) / / >= 0 দরকার নই
cout << " below poverty l i m i t . " << endl ;
e l s e i f ( income < 2500) / / >= 1200 দরকার নই
cout << " s l i g h t l y wel l−o f f . " << endl ;
else / / >= 2500 দরকার নই
cout << " s u f f i c i e n t l y we ll−o f f . " << endl ;
৭. যিদ িভ িভ বার চালােনার সময় ০, ১৫, বা ৭ input ( যাগান) দয়া হয় তাহেল নী-
চর programএর ( মেলখ) output (ফলন) কান বাের কী হেব । কত input িদেল
outputএ "out of range!" আসেব?
int n ;
cout << "number i s : " ;
c i n >> n ;
5g
in
i f ( n < 10)
cout << " l e s s than 10 . " << endl ;
else i f ( n > 5)
am
Input ( যাগান) িহসােব 0, 15, 7 িদেল, উপেরর program কী output (ফলন) দেব
তা নীেচ ৩ ে দখােনা হেলা। এই program n এর কান মােনর জ ই out of
al
range! ফলন িদেব না, িনয় ণ (control) কান অব ােতই সংি িববৃিতেত যােব না।
তরাং else cout << "out of range!" << endl; অংশটু পুেরাপুির অদরকারী
আর স কারেণ মুেছ দয়া যায়, তােত programএর বিশে কান ভাব পড়েব না।
number i s : 0 number i s : 15 number i s : 7
l e s s than 10 . l a r g e r than 5 . l e s s than 10 .
৩৫৩
5g
িক িসিপিপ ভাষায় indentation বা ফাঁকা দয়া না দয়া computerএর (গণিন) জ
কান ব াপার নয়। আর dangling elseএর (ঝুল নাহেল) আেলাচনা থেক আমরা জািন
এই else িট তার িনকটতম পূববতী এমন একিট if এর সােথ সংি য if এর সােথ আর
কান else জুেড় দয়া হয় িন। কােজই, সই িহসােব িঠক উপের যমনিট দখােনা হেলা,
সভােব এই else িট ি তীয় if এর শত n > 0 িমথ া হেল কাযকর হেব।
in
positive . not output .
am
{
i f ( n > 0)
cout << " p o s i t i v e . " << endl ;
}
else
cout << " . " << endl ;
৯. িতনিট সংখ া input ( যাগান) িনেয় কানিট বড়, কানিট ছাট outputএ দখাও।
৩৫৪
িফিরি ১৫.৮: Small and Big of Three Numbers (িতনিট সংখ ার বড়- ছাট)
int a , b , c ; / / চাইেল ভ কও িনেত পােরা
cout << " three numbers are ? " ;
c i n >> a >> b >> c ; / / যাগান নাও
5g
cout << " l a r g e " << l a r g e << " " ;
cout << " s m a l l " << s m a l l << endl ;
িলখেত পােরা। থেম ধের নাও তামার সংখ া একটাই কােজই aই বড়, আবার aই ছাট।
এরপর তােদর সােথ b ক তুলনা কেরা। আর শেষ তােদর সােথ c ক তুলনা কেরা।
i n t l a r g e = a , s m a l l = a ; / / ধের নই a−ই বড় ও ছাট
i f ( large < b) / / b যিদ তার চেয়ও বড় হয়
large = b;
al
১০. িতনিট সংখ া input ( যাগান) িনেয় তােদর মেধ মােঝরিট output দখাও।
িফিরি ১৫.৯: Median of Three Numbers (িতনিট সংখ ার মধ ক)
/ / ধেরা চলক িতনিট a , b , c ঘাষণা কের যাগান নয়া হেয়েছ
৩৫৫
উপেরর মেলখেত থেম a ও b তুলনা করা হেয়েছ। তারপর c তােদর বড়িটর চেয় বড়
িকনা, নাহেল ছাটিটর চেয় ছাট িকনা পরী া করা হেয়েছ, আর তাও না হেল সিট উভেয়র
মাঝামািঝ। এভােব িতনিট সংখ ার ম জানা হেয় গেল মােঝরিট outputএ (ফলন)
5g
দখােনা হেয়েছ। এিট nesting (অ াি ) ও ladderএর (মই) চমৎকার উদাহরণ।
১১. িতনিট সংখ া input ( যাগান) িনেয় তােদরেক উধ েম সািজেয় output (ফলন) দাও।
িফিরি ১৫.১০: Three Numbers in Ascending Order (িতনিট সংখ ার উধ ম)
in
/ / ধেরা চলক িতনিট a , b , c ঘাষণা কের যাগান নয়া হেয়েছ
i f (a > b) // ম হেলা a > b
if (c > a) // ম হেলা c > a > b
am
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
al
উপেরর মেলখেত থেম a ও b তুলনা করা হেয়েছ। তারপর c তােদর বড়িটর চেয়
বড় িকনা, নাহেল ছাটিটর চেয় ছাট িকনা পরী া করা হেয়েছ, আর তাও না হেল সিট
উভেয়র মাঝামািঝ। এভােব িতনিট সংখ ার ম জানা হেয় গেল তােদর মােনর উধ েম
(ascending order) outputএ (ফলন) দখােনা হেয়েছ। এিট if elseএর (যিদ নাহ-
ল) nesting (অ াি ) ও ladderএর (মই) এক সােথ ব বহােরর চমৎকার উদাহরণ।
১২. গিণেত া ন র input ( যাগান) িনেয় সটা থেক letter grade (বণ মান) output
দাও। ধেরা ৯০ বা বশী হেল A, ৮০ বা বশী হেল B, ৭০ বা বশী হেল C, ৬০ বা বশী
হেল D, ৫০ বা বশী হেল E, আর তারও কম হেল F letter grade পাওয়া যায়।
৩৫৬
5g
F " << endl ;
উপেরর program switch case (পি ব াপার) িদেয় করা স ব নয়, কারন এখােন
>= তুলনা ব বহার করেত হেব। Switch case কবল সমান == তুলনায় ব বহার করা
in
যায়।
১৩. একিট ি মাি ক (two dimensional) িব র ানা দওয়া আেছ, িব িট চারিট চতু-
ভােগর (quadrant) িঠক কানিটেত পড়েব িনণয় কেরা।
am
i f ( x > 0)
i f ( y > 0)
cout << " f i r s t quadrant " << endl ;
else i f ( y < 0)
cout << " fourth quadrant " << endl ;
else // y
cout << "on p o s i t i v e x a x i s " << endl ;
else i f ( x < 0)
৩৫৭
i f ( y > 0)
cout << " second quadrant " << endl ;
else i f ( y < 0)
cout << " t h i r d quadrant " << endl ;
else
cout << "on negative x a x i s " << endl ;
else // x
i f ( y > 0)
cout << "on p o s i t i v e y a x i s " << endl ;
else i f ( y < 0)
cout << "on negative y a x i s " << endl ;
else // y
cout << " coordinate o r i g i n " << endl ;
5g
১৪. একিট গমণ ১, ২, ৩, ..., ৯, ১১, ২২, ৩৩, ..., ৯৯ এর ১ম পদ ১, আর ১৮ তম পদ ৯৯।
কততম পদ দখােত হেব তা input ( যাগান) িনেয় পদিট outputএ (ফলন) দখাও।
cout << " which term : " << endl ;
i n t n ; c i n << n ;
in
i f ( n < 0)
cout << " out of range " << endl ;
e l s e i f ( n <= 9 ) / / এক অে র সংখ া
am
১৫. তামােক -১০০ ও ১০০ এর মেধ িট সংখ া input ( যাগান) িহসােব দওয়া হেব, তুিম
ওই িট সংখ া সহ তােদর মােঝর সকল সংখ ার যাগফল outputএ (ফলন) দখাও।
নীেচর সংি program ( মেলখ) দখােনা হেলা। য সংখ া িট input ( যাগান) নয়া
হেব, স েলা অব ই -১০০ ও ১০০ এর িভতের হেত হেব। আমরা তাই আেগ পরী া
কের দখেবা। যিদ n1 বা n2 য কানিট −100 এর ছাট বা 100 এর বড় হয়, তাহেল
error message ( িট বাতা) দিখেয় িবফল হেয় control ফরত যােব। খয়াল কেরা
আমােদর িক শত েলােক অথবা | | িদেয় যু করেত হেব।
cout << "two number are ? " ; / / যাচনা
i n t n1 , n2 ; c i n >> n1 >> n2 ; / / যাগান
৩৫৮
int s , n ; / / ( থম পদ + শষ পদ ) আর পদসংখ া
s = n1 + n2 ; // থম পদ + শষ পদ।
5g
এবার আমরা জািন কান সমা র গমেণর সংখ া েলার যাগফল হেলা ( থম সংখ া +
শষ সংখ া) * পদসংখ া / 2। সংখ া েটা যাগান নয়ার সময় ব বহারকারী য কানিটেক
আেগ input িদেত পাের, মােন কানটা বড় কানটা ছাট আমরা িনি ত থাকেবা না।
( থম সংখ া + শষ সংখ া) এই যাগফল s বর করেত এেত কান সম া হেব না, তেব
in
পদসংখ া n বর করেত গেল আমােদর জানেত হেব কানটা বড় কানটা ছাট। ধেরা ৭
আর ১৩ িনেজেদর সহ তােদর মেধ কয়টা সংখ া আেছ সটা বর করা যায় ১৩ - ৭ + ১
িহসাব কের, যখােন ১৩ হেলা বড় আর ৭ হেলা ছাট। তা n1 আর n2 এর িনেজেদর সহ
তােদর মােঝ মাট কয়িট সংখ া আেছ তা বর করেত আমােদর জানেত হেব কানিট বড়।
am
তা আমরা একিট যিদ নাহেল (if else) ব বহার কের দখেবা n1 > n2 িকনা, যিদ হয়
তাহেল পদসংখ া n1 − n2 + 1 আর যিদ না হয় তাহেল পদসংখ া হেব n2 − n1 + 1।
সবেশেষ যাগফল হেলা s ∗ n / 2 আমরা যটা outputএ (ফলন) দখােবা।
মেন রাখেত হেব য এিট ১ থেক ২০০০ সাল পয িতিট সােলর জ চালােনা হেব।
কােজই তুিম ladderএর শত েলা এমন ভােব সাজােব যােত program ততম হয়।
যিদ ১ থেক ২০০০ সাল পয িতিট সােলর জ চালােনা হয় তাহেল আমরা থেম
েত ক রকেমর সােলর িহসাব কির। মাটামুিট িত চারিট সােলর িতনিট অিধবষ নয়,
একিট অিধবষ। কােজই সবেচেয় বশী সংখ ক ২০০০ / ৪ * ৩ = ১৫০০ িট সাল আেছ য
েলা ৪ িদেয় িবভাজ হয় না, এ েলার কানিটই অিধবষ নয়। বাঁকী ৫০০ িট সাল ৪ িদেয়
িবভাজ । এেদর মেধ য েলা ১০০ িদেয় িবভাজ নয় যমন ১৯৯৬ এমন ২০িট ছাড়া বাঁকী
৪৮০ িট অিধবষ। আর ওই ২০িট সােলর মেধ য ১৫িট ৪০০ িদেয় িবভাজ নয় স েলা
অিধবষ নয়, আর বাঁকী ৪িট সাল য েলা ৪০০ িদেয় িবভাজ স েলা অিধবষ।
i f ( year % 4 ! = 0) / / ৪ িদেয় িবভাজ নয়
cout << " leap year no" << endl ;
e l s e i f ( year % 100 ! = 0 ) / / ১০০ িদেয় িবভাজ নয়
cout << " leap year yes " << endl ;
e l s e i f ( year % 400 ! = 0 ) / / ৪০০ িদেয় িবভাজ নয়
৩৫৯
ততম গিতর programএর ( মেলখ) জ য রকেমর সাল সবেচেয় বশী স েলা িন-
ণয় করেত সবেচেয় কম সংখ ক শত পরী ণ ব বহার করেত হেব। কােজই আমরা ১৫০০
সাল য েলা ৪ িদেয় িবভাজ নয় স েলােক থম শত পরী া কেরই বর করেত চাই-
বা। উপেরর program খয়াল কেরা, আমরা তাই কেরিছ। এরপের রেয়েছ য ৪৮০িট
বছর য েলা ৪ িদেয় িবভাজ িক ১০০ িদেয় িবভাজ নয়। আমরা এ েলােক ইবার শত
পরী া কের বর করেত চাই। একটা শত হে ৪ িদেয় িবভাজ নাহওয়া কােজই থম
শেতর else িহসােব থাকেব সটা, আেরকিট শত হেলা ১০০ িদেয় িবভাজ না হওয়া। উপ-
রর programএর if else ladderএ (যিদ নাহেল মই) দেখা else if িদেয় এটা করা
হেয়েছ। এরপর থােক ১৫ িট সাল য েলা ১০০ িদেয় িবভাজ িক ৪০০ িদেয় িবভাজ নয়
এই ১৫ িট সাল, এ েলা িনণয় করা হেয়েছ আেরকিট else if লািগেয় অথাৎ মাট িতনিট
শত পরী ণ শেষ। আর সবেশেষ ৪০০ িদেয় িবভাজ সই সাল েলা এেসেছ সবেশেষর
5g
else িদেয়, এ েলার জ িতনিট শত পরী ণই লেগেছ, কারণ শেষর শত িমথ া হেলই
তা এ েলা িনণীত হেব। তাহেল মাট শত পরী া লাগেলা কত েলা? ১৫০০ * ১ + ৪৮০
* ২ + ১৫ * ৩ + ৫ * ৩ = ২৫২০ িট। তুিম আেরা নানান ভােব চ া কের দখেত পােরা,
এর চেয় কম শত পরী া কের করেত পােরা িকনা! পারেব না!
in
i f ( year % 4 ! = 0 | |
( year % 100 == 0 && year % 400 ! = 0 ) )
cout << " leap year no" << endl ;
am
else
cout << " leap year yes " << endl ;
একই program আমরা if else ladder (যিদ নাহেল মই) ব বহার না কের িঠক উপ-
রর programএর মেতা Boolean connectives (বুলক সংেযাজক) ব বহার কের
করেত পাির। Boolean connectivesএর আংিশক মূল ায়ন (partial evaluation)
al
১৭. বাংলা বছেরর কততম মাস তা input ( যাগান) িনেয় সই মােসর নাম ও ওই মােস কত িদন
তা outputএ (ফলন) দখাও। একােজ switch case (পি ব াপার) ব বহার কেরা।
৩৬০
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 ;
}
5g
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 ;
in
১৮. কতটা বােজ সই সময় ঘ টায় input ( যাগান) িনেয় মাঝরাত (০-২), ভাত (৩-৬), সকাল
(৭-১১), পুর (১২-১৪), িবকাল (১৫-১৭), স া (১৮-১৯), রাত (২০-২৪) ফলেন দ-
am
switch ( vartime )
{
al
৩৬১
১৯. এমন একিট program ( মেলখ) িলেখা যিট ১-৫ পয ম অ যায়ী পাঁচটা কামল
পানীেয়র (পািন, কাক, াইট, ফানটা, পপিস) নােমর তািলকা দখােব, তারপর িমক
ন র input ( যাগান) িনেয় কামল পানীয়িটর নাম outputএ (ফলন) দখােব। আর
িমক ন রিট যিদ ১-৫ এর বাইের হয়, তাহেল স সং া একিট error message ( িট
বাতা) দখােব। তুিম এই programিট একবার switch case (পি ব াপার) ব বহার
কের আবার if else (যিদ নাহেল) ব বহার কের কেরা।
cout << " l i s t " << endl ;
cout << " 1 water " << endl ;
cout << " 2 coke " << endl ;
cout << " 3 s p r i t e " << endl ;
cout << " 4 fanta " << endl ;
cout
cout
<<
<< endl ;
5g
" 5 pepsi " << endl ;
{
case 1 : cout << " water " << 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 ;
al
উপেরর programএর ( মেলখ) switch case (পি ব াপার) অংশিট if else (যিদ
নাহেল) ব বহার কের িলখেল নীেচর মেতা হেব।
i f ( choice == 1 )
cout << " water " << endl ;
e l s e i f ( choice == 2 )
cout << " coke " << endl ;
e l s e i f ( choice == 3 )
cout << " s p r i t e " << endl ;
e l s e i f ( choice == 4 )
cout << " fanta " << endl ;
e l s e i f ( choice == 5 )
cout << " pepsi " << endl ;
৩৬২
else
cout << " water " << endl ;
২০. একিট সংখ ার পুরক সংখ া িনণয় কেরা। সংখ ািট এক অে র হেল তার পুরক সংখ ৯ এর
সােথ িবেয়াগফল, ই অে র হেল ৯৯ এর সােথ িবেয়াগফল, িতন অে র হেল ৯৯৯ এর
সােথ িবেয়াগফল। িতেনর চেয় বশী অে র সংখ া input ( যাগান) দওয়া হেব না।
i n t number , complement ;
c i n >> number ;
২১. এমন একিট program ( মেলখ) িলেখা যটা ৫ জন লাক যােদর িমক ১-৫ তােদর
ক কতটা কের পেরাটা খেয়েছ input ( যাগান) িনেব। Programিট তারপর একজেন
সেবা কয়টা পেরাটা খেয়েছ সটা outputএ (ফলন) দখােব। আর কান লাক সেবা
al
সংখ ক পেরাটা খেয়েছ programিট সটাও দখােব, তেব সেবা পেরাটা খাওয়া একা-
িধক ব ি থাকেল থমজেনর িমক ন র হেলই চলেব, পেরর জনেদর দরকার নাই।
আমরা পাঁচজন লােকর জ িবধােথ পাঁচিট variable িনেবা p1, p2, p3, p4, p5।
তারপর যথাযথ ভােব input prompt ( যাগান যাচনা) কের কান লাক কতিট পেরাটা
খেয়েছ সটা input ( যাগান) িনেবা। তারপর আমােদর আেরা িট variable লাগেব:
একিট হেলা maximum সেবা কতিট পেরাটা খেয়েছ আর একিট হেলা person ক
খেয়েছ সেবা িট। তারপর আমরা একজন একজন কের লাক িবেবচনা করেবা। েত
মা একজন লাক ধের িনেল সই সেবা পেরাটা খেয়েছ, কােজই maximum = p1
, person = 1 initial value িহসােব assign করা হেয়েছ। এর পেরর িতিট ব ি র
জ আমরা পরী া কের দখেবা স এ পয maximum এর মান যত তার চেয় বশী
পেরাটা খেয়েছ িকনা। যিদ খেয় থােক তাহেল maximum এর মান বদেল যােব আর
ক খেয়েছ সটাও বদেল যােব। এরকম program ( মেলখ) নীেচ দেখা।
৩৬৩
i n t maximum = p1 , person = 1 ;
i f ( maximum < p2 )
{ maximum = p2 ; person = 2 ; }
i f ( maximum < p3 )
{ maximum = p3 ; person = 3 ; }
i f ( maximum < p4 )
{ maximum = p4 ; person = 4 ; }
i f ( maximum < p5 )
{ maximum = p5 ; person = 5 ; }
5g
cout << " porota " << maximum << endl ;
cout << " person " << person << endl ;
খয়াল কেরা আমরা > ব বহার কেরিছ >= ব বহার কির নাই। এর কারণ এ পয সেবা
যতিট খাওয়া হেয়েছ তার সমান কউ যিদ পেরর কউ খেয়ও থােক, আমরা িক সই
in
লাকিটেক outputএ (ফলন) দখােত চাইনা, বরং আেগর জনেকই দখােত চাই। তুিম
যিদ সেবা পেরাটা খেয়েছ এরকম কেয়ক জন থাকেল তােদর মেধ র শেষর জনেক
outputএ (ফলন) দখােত চাও, তাহেল < বদেল <= কের িদেব। আর একিট ব াপার
am
হেলা অেনক সময় maximum আর person variable িটর initial value ১মজেনর
পেরাটা খাওয়া িবেবচনা কের না িদেয় নীেচর মেতা কের বরং আমরা একটা ছাট সংখ া
ধের নই, তারপর ২য়, ৩য়, ৪থ, ৫ম লােকর মেতা ১ম জেনর জ ও একই রকম যিদ
নাহেল ব বহার কির। এেত সব লােকর জ িচ া করাটা একই রকম হয়।
/ / সেবা একটা ছাট মান , ক খেয়েছ সটা জািননা
al
i n t maximum = 0 , person = 0 ;
২২. একজন লাক াভািবক িনয়ম অ যায়ী স ােহ ৪০ ঘ টা কাজ কের, ৪০ ঘ টার বশী কাজ
করেল অিতির সময়টু র জ াভািবক িনয়েমর চেয় ১.৫ ণ মজুির পায়। কান এক
স ােহ লাকিট কত ঘ টা কাজ কেরেছ আর াভািবক িনয়েম ঘ টা িত মজুির কত তা
input ( যাগান) িনেয় ওই স ােহ তার মাট মজুির কত তা outputএ (ফলন) দখাও।
৩৬৪
f l o a t hourlyRate ; / / ঘ টা িত কত হার
f l o a t totalHour ; / / কত ঘ টা কাজ
f l o a t totalWage ; / / মাট মজুির কত
i f ( totalHour <= n a t L i m i t )
totalWage = totalHour ∗ hourlyRate ;
e l s e / / অিতির সময় কাজ হেয়েছ
{
/ / াভািবক মজুির ৪০ ঘ টার
f l o a t natWage = n a t L i m i t ∗ hourlyRate ;
/ / অিতির ঘ টা বর করেত হেব
5g
f l o a t extraHour = totalHour − n a t L i m i t ;
/ / অিতির সমেয়র মজুিরর হার
f l o a t extraHourRate = hourlyRate ∗ extraRate ;
in
/ / অিতির সমেয় মজুির
f l o a t extraWage = extraHour ∗ extraHourRate ;
/ / মাট মজুির েটার যাগফল
totalWage = natWage + extraWage ;
am
২৩. ধেরা তুিম চার টুকেরা কাগজ িনেয়েছা। তামার ১ম টুকেরােত লখা আেছ ১, ৩, ৫, ৭, ৯,
al
১১, ১৩, ২য় টুকেরােত আেছ ২, ৩, ৬, ৭, ১০, ১১, ১৪, ১৫, ৩য় টুকেরােত আেছ ৪, ৫,
৬, ৭, ১২, ১৩, ১৪, ১৫, ৪থ টুকেরােত আেছ ৮, ৯, ১০, ১১, ১২, ১৩, ১৪, ১৫। তামার
program ( মেলখ) ব বহারকারী মেন মেন একিট সংখ া ধরেব, আর সিট ১ম, ২য়,
৩য়, ৪থ টুকেরার কান কানিটেত আেছ input ( যাগান) িদেব, তারপর তামার মেলখ
ব বহারকারী মেন মেন য সংখ ািট ধেরেছ সিট outputএ (ফলন) দখােব। এিট খুব
সহজ একিট ব াপার। য য টুকেরােত সংখ ািট আেছ ওই টুকেরা েলার থম সংখ া েলা
যাগ করেলই ব বহারকারীর সংখ ািট পাওয়া যােব। যমন ব বহারকারীর সংখ ািট যিদ ১,
৩, ৪ ন র টুকেরােত থােক তাহেল সংখ ািট ১ + ৪ + ৮ = ১৩।
৩৬৫
cout << " answer to the questions below " << endl ;
cout << " press 1 i f yes , 0 i f no" << endl ;
i n t number = 0 ;
if
if
( card1 )
( card2 )
5g
number
number
+=
+=
1;
2;
in
if ( card3 ) number += 3;
if ( card4 ) number += 4;
am
cout << " your number " << number << endl ;
উপেরর program ( মেলখ) দেখা। থেম কাগেজর টুকেরা বা তাস েলােত কী কী সং-
খ া লখা আেছ তা দখােনা হেয়েছ। এরপর বলা হেয়েছ পেরর দখােনার েলার উ র
া হেল ১ আর না হেল ০ িদেয় িদেত। আমরা চারিট variable িনেয়িছ। আর উ র -
লা ওই variable েলােত আেছ। ে যমন বলা হেয়েছ য তাস েলােত ব বহারকারীর
al
মেন মেন ধের নয়া সংখ ািট আেছ সই তাস েলার থম সংখ া েলা িনেয় আমােদর যাগ
করেত হেব। আমরা েত সংখ ািট ধের িনেয়িছ int number = 0; িলেখ। এরপর
দেখা িতিট if পরী া করেছ সংখ ািট ওই তােস আেছ িকনা, অথাৎ ব বহারকারীর দয়া
উ র সত িকনা, সত হেল ওই তােসর থম সংখ ািট তা আমরা জািনই, সটা number
variableএর সােথ যাগ কের দয়া হেয়েছ। পিরেশেষ output (ফলন) ব বহারকারীর
মেন মেন ধের নয়া সংখ ািট দখােনা হেয়েছ।
৩৬৬
• associative (সহেযাজ )
• simplification (সরল)
• precedence (অ গণ তা)
5g
• break ( াি )
• default (অগত া)
• global (ব াপীয়)
in
• order ( ম) • local ( ানীয়)
৩৬৭
5g
in
am
al
অধ ায় ১৬
Iterative Programming
(পুনািল পিরগণনা)
5g
আমােদর জীবনটা এমন রামা কর নয় য একদম িতবারই তুিম অিভনব িকছু একটা করেব।
খয়াল কের দখেব তামােক ায়শই একই রকম কাজ বার বার করেত হে । তুিম হয়েতা এেত
একেঘঁেয়িম বাধ করেছা, িক িকছু করার নই তামার নাক কান চাখ ব কের সই একই কাজ
বার বার কের যেত হেব, যত ণ না স েলা শষ হে । Iterative programming-এ (পু-
in
নািল পিরগণনায়) আমরা িশখেবা কী কের বারবার একই কাজ কের যেত হয়।
িসিপিপ ভাষায় এমন একিট program ( মেলখ) রচনা কেরা যিট একিট positive integer
(ধণা ক পূণক) input ( যাগান) িনেয় ওই সংখ ক বার output-এ (ফলন) "cpp" দখায়।
cout << " cpp cpp cpp cpp cpp " << endl ;
al
তামােক যিদ খুবই অ সংখ ক বার যমন মা ৫ বার outputএ (ফলেন) িসিপিপ দখােত
বলা হয়, ব াপারটা িক তামার কােছ খুবই সহজ লাগেব। ফ উপেরর মেতা কের একটা cout
ব বহার কেরই তুিম ৫ বার িসিপিপ outputএ দখােত পারেব। অথবা তুিম চাইেল িক নীেচর
মেতা কের েত কবার আলাদা আলাদা cout িদেয় একটা কের িসিপিপ আলাদা আলাদা কের
মাট ৫ বার output িদেত পােরা। আর তারপর একটা endl দখােলই হেলা।
cout << " cpp " ;
cout << " cpp " ;
cout << " cpp " ; / / cpp এর পের একটা space
cout << " cpp " ;
cout << " cpp " ;
cout << endl ;
৩৬৯
বশী বার আলাদা কের cpp িলখেব? িন য় না! আর ি তীয় সম া হে কত বার outputএ
cpp দখােত হেব সটা যিদ আমরা userএর (ব বহারকারী) কােছ থেক input ( যাগান) িনই,
তাহেল সংখ াটা তা program লখার সময় জানা থাকেছ না, তরাং ওই ভােব িঠক কত বারই
বা আমরা programএর িভতের cpp িলখেবা? ব াপারটার তা কান রাহাই নই!
f o r ( i n t count = 1 ; count <= 1000 ; ++count )
cout << " cpp " ;
cout << endl ;
আমরা আেগ থম সম ািটর সমাধান দিখ। যিদ আমরা program ( মেলখ) লখার সম-
য়ই জািন কতবার cpp দখােত হেব, আর সিট যিদ অেনক বশী বার হয় তাহেল দেখা আমরা
সংে েপ িঠক উপের দখােনা programএর মেতা কত সহেজই ১০০০ বার িসিপিপ দিখেয়
ফলেত পাির! কথা হে মা এই িতনিট সাির কী ভােব ১০০০ বার cpp িলখেব?
তামােক খাতা কলেম িলখেত িদেল তুিম িনেজ কী করেব? তুিম হয়েতা ১ থেক ১০০০
পয এক এক কের ধারাবািহকভােব নেত করেব। আর যখনই একটা সংখ া উ ারণ করেব
তখনই তুিম একবার cpp িলখেব। তুিম তা বুি মান মা ষ তাই তুিম জােনা য তামােক ১০০০
5g
এ িগেয় থামেত হেব। িক computer (গণিন) যেহতু বাকা তাই স যটা কের িতবার ১
বািড়েয় পেরর সংখ াটা বেল আর তার সােথ সােথই পরী া কেরও দেখ ১০০০ হেলা কী না।
আসেল তুিম মা ষ িহসােব বুি মান হেলও মেন মেন তুিম িক িতবার সই একই কাজই কেরা,
অথাৎ পরী া কের দেখা ১০০০ হেয় গেলা নােতা, নাহেল ১ যাগ কের পেরর সংখ ায় চেল যাও!
in
উপেরর program ( মেলখ) িঠক এই কাজটাই কের।
এবার for( int count = 1; count<=1000; ++count) অংশটু ল কেরা। আম-
রা একটা variable (চলক) িনেয়িছ count যার initial value (আিদ মান) ১, আমরা ১ থেক
নেত করেবা, তারপর condition check (শত পরী া) কের দখেবা count এখেনা
am
করেবা না, countও বাড়ােবা না, control (িনয় ণ) চেল যােব loopএর বাইের ধেরা এইে ে
যখােন আেছ cout << endl; সখােন।
i n t count = 1 ; / / এিট f o r এর ১ম অংশ মা একবার
৩৭০
কী চমৎকার না মা িতন সািরর program ( মেলখ) কী ভােব বার বার একই কাজ কের কত
বড় একটা programএর সমতুল কাজ কের দয়। Loop-এর (ঘূণীর) মুল িক এইখােনই।
এই পযােয় তুিম হয়েতা বলেত পােরা আিম ১ থেক ১০০০ বার না েন যিদ ০ থেক ৯৯৯ বার িন
তাহেল িক কাজ হেব। িন য় হেব কারণ ০ থেক ৯৯৯ পয েতা মাট ১০০০টা সংখ াই হয়। কউ
চাইেল ২ থেক ১০০১ পয ও নেত পাের, কারণ তােতও ওই ১০০০টা সংখ াই আেছ। আসেল
এই ে তা কত থেক আর কত ত িগেয় শষ সটা কান ব াপারই না, মুল ব াপার হেলা
মাট কতিট সংখ া আেছ তােদর মেধ ।
f o r ( i n t count = 1 ; count <= 1999 ; count += 2 )
cout << " cpp " ;
cout << endl ;
তামােদর মেধ কউ কউ আবার বেল বসেত পােরা নাহ আিম ১ থেক এক এক কের বািড়েয়
১০০০ পয নেবা না, আিম নেবা ১ থেক ই ই কের বািড়েয় ১৯৯৯ পয । তােতও কান
সম া নাই ১, ৩, ৫, ..., ১৯৯৯ পয িক মাট ১০০০িট সংখ াই আেছ। আমরা িঠক উপের দিখ-
5g
য়িছ, এিট কী ভােব করেত হেব। তুিম চাইেল িক ৩ কেরও বাড়ােত পােরা, বা অ িকছু কেরও।
একটা ব াপার দেখা এক কের বাড়ােনার সময় ++count না িলেখ আমরা িক চাইেল count++
অথবা count += 1ও িলখেত পারতাম, একটু ধীর গিতর হেলও কাজ অ যায়ী সব েলা একই।
f o r ( i n t count = 0 ; count < 1000 ; ++count )
in
cout << " cpp " ;
cout << endl ;
এবার একটা পূণ থা (custom) আেলাচনা কির। িসিপিপেত আমরা সাধারণ য কান
am
নিত কির ০ থেক। এিটর নানািবধ কারণ আেছ, কারণ েলা আমরা যথা সে পের জান-
বা। তেব মা া কথা বলেত পােরা সংখ া আসেল হয় থেক। তাহেল আমােদর নিত
হেব ০, ১, ২, ..., ৯৯৯ পয । িক এখােন য ১০০০িট সংখ া আেছ সিট বুঝােনার জ আমরা
শেত count <= 999 না িলেখ বরং িলখেবা count < 1000 যােত চােখ দেখ আমরা সহেজই
বুঝেত পাির য ১০০০ বার loop (ঘূণীটা) চলেব। তাহেল ধের িনেত পােরা আমরা সচরাচর িঠক
উপেরর মেতা কের ০ থেক ১০০০ এর ছাট পয loop িলখেবা, অ ভােব হয়েতা নয়।
al
তুিম িক চাইেল কত থেক হেব, কতবার loop চলেব, িত পােক কত কের বৃি হেব,
এসব িবষয় উপেরর মেতা কের variable (চলক) ব বহার কেরও করেত পােরা। আর variable
এর value initial assignment (আিদ আেরাপণ) করেত পােরা, কান ভােব িহসাব কের
assign করেত পােরা, অথবা নীেচর মেতা কের inputও ( যাগান) িনেত পােরা। Variableএর
মান যিদ input নাও তাহেল বুঝেতই পারেছা আমরা আর program ( মেলখ) রচনার সময়
আেগ থেক জািননা loop (ঘূণী) িঠক কতবার ঘুরেব, সটা জানা যােব ধু program execute
(িনবাহ) করার সময়। তরাং সই অেথ variable ব ব ত এই loop েলােক িঠক িব ারণ করা
৩৭১
যােব না। খয়াল কেরেছা আমরা িক এই আেলাচনার মাধ েম এই পােঠর র িদেক আেলািচত
আমােদর ি তীয় সম ািটর সমাধান পেয় গলাম। কমন চমৎকার ব াপার তাই না!
িফিরি ১৬.১: Repeatedly Display the Same (বারবার একই িজিনস দখােনা)
i n t totalcount ;
cout << "how many times ? " ;
c i n >> t o t a l c o u n t ;
f o r ( i n t count = 0 ; count < t o t a l c o u n t ; ++count )
cout << " cpp " ;
cout << endl ;
তাহেল িমিলেয় সব আমরা দখলাম for loop এ (জ ঘূণীেত) মাট চারিট অংশ আেছ:
initialisation (আদ ায়ন), condition (শত), update (হালায়ন), statement (িববৃিত)।
এর মেধ initialisation (আদ ায়ন), condition (শত), আর update (হালায়ন) থােক ( )
round bracket ( গাল ব নী) যুগেলর মেধ , আর ; semicolon (িদিত) িদেয় পৃথক করা
5g
থােক। এছাড়া bracketএর সামেন থােক for আর bracketএর পের থােক statement (িব-
বৃিত)। Initialisation একবার ঘেট, তারপর condition, statement, update এই িতনিট
এই েম বার বার ঘটেত থােক যত ণ condition সত হয়, আর condition িমথ া হেল loop
(ঘূণী) শষ হেয় যায়।
in
f o r ( i n i t i a l i s a t i o n ; c o n d i t i o n ; update )
statement
am
এমন একিট program ( মেলখ) রচনা কেরা যিট থেম ণীেত ছা সংখ া input ( যাগান)
নেব। তারপর িতিট ছাে র গিণেত া ন র input িনেয় outputএ (ফলন) ছা িটর ফলাফল
পাশ না ফল তা দখােব, যখােন পােশর মান ৫০ বা বশী।
al
িফিরি ১৬.২: Pass Fail in Mathematics Class ( ণীেত গিণেতর পাশ ফল)
cout << " student count ? " ;
i n t count ; c i n >> count ;
৩৭২
উপের programএর ( মেলখ) মুল অংশ দখােনা হেলা, আর নীেচ রেয়েছ programিট
compile (সংকলন) কের run করেল (চালােল) কমন input-output ( যাগান-ফলন) হেত
পাের তার নমুনা। এখােন আমরা কবল মা িতনজন ছাে র জ programিট চািলেয় output
দিখেয়িছ, তুিম চাইেল আেরা বশী জেনর জে ও run করেত পােরা।
যাগান-ফলন (input-output)
student count ? 3
s e r i a l 1 marks obtained ? 80
r e s u l t : pass
s e r i a l 2 marks obtained ? 35
result : f a i l
s e r i a l 3 marks obtained ? 50
r e s u l t : pass
5g
এবার আমরা programিট ( মেলখ) িবে ষণ কির। থেম ছা সংখ া কত সটার জ
prompt message (যাচনা বাতা) দিখেয় আমরা count variable (চলক) ঘাষণা কের
in
তােত ছা সংখ া input ( যাগান) িনেয়িছ। তারপর আমরা for loop (জ ঘূণী) িলেখিছ যটা
চলেব index variableএর মান ০ থেক count এর কম পয অথাৎ মাট count সংখ ক
বার। খয়াল কেরা িত পােক loopটায় কবল একটা simple statement (সরল িববৃিত)
execute (িনবাহ) করেলই হেব না, বরং আমােদর দরকার অেনক েলা statement execute
am
করা। আমরা তাই {} curly bracket (বাঁকা ব নী) ব বহার কের একটা block (মহ া) িনেবা
আর তার িভতের যত েলা statement (িববৃিত) দরকার তা রাখেবা। এখােন বেল রািখ য,
index variableিট for loopএর (জ ঘূণী) যখােন ঘাষণা করা হেয়েছ তােত এিট একিট
local variable ( ানীয় চলক) যা কাযকর থাকেব কবল ওই blockএর (মহ া) িভতের।
Blockএর (মহ া) িভতের আমরা যটা করেবা সটা হেলা েত ক ছাে র থেম serial
al
৩৭৩
য কান একটা ব বহার করেল block (মহ া) তরী করার দরকার নাই, করেলও সম া নাই,
িক এ েলার একািধক ব বহার করেল অব ই block (মহ া) তরী কের িনেত হেব। আম-
রা িক উপেরর blockএ ternary operator (িতিনক অণুি য়া) সহ অ কেয়কিট simple
statement (সরল িববৃিত) একসােথ দিখেয়িছ। Loopএ (ঘূণী) block (মহ া) ব বহােরর সা-
থ এটাও বেল রাখা দরকার য blockএর িভতের আবারও এক বা একািধক loop (ঘূণী) আমরা
চাইেলই িলখেত পাির। তেব আমরা সই আেলাচনা করেবা nested loop (অ াি ঘূণী) সংেগ।
5g
আমরা জািন arithmetic seriesএর থম পদ a, common difference d হেল kতম
পদ হল a + (k − 1)d, আর n পেদর যাগফল হেলা n ∗ (2a + (n − 1)d)/2। তরাং একিট
for loop (জ ঘূণী) আমরা 1 থেক n পয চািলেয় কাজিট খুব সহেজই কের ফলেত পাির।
in
িফিরি ১৬.৩: Arithmetic Series Problem (পািটগিণেতর ধারার সম া)
int a , d , n ; / / িতনিট v a r i a b l e
cout << " a d n value ? " ; / / input prompt
am
তেব উপেরর program ( মেলখ) output (ফলন) িদেক তাকােল একটা ছাট সম া
দখেত পােব। একটু খয়াল করেল দখেব outputএ একদম থম পদিটর সামেনও যাগ িচ
চেল এেসেছ, যিট আসেল চাওয়া হয় িন। এিট সমাধােণর উপায়ও খুব সহজ, একটা যিদ (if)
৩৭৪
িঠক উপেরর এই programিট িঠক মেতা output (ফলন) িদেলও এটা আসেল সেবা ম
নয়। কারণ যাগ িচ না দওয়ার ব াপারিট কবল থম পেদর জ , বাঁকী সব েলার জ যাগ
দখােত হেব। িক ওই condition checking িতবার িতিট পেদর জ করেত হে , কারণ
5g
condition checkingেতা loopএর িভতের রেয়েছ। আমরা যিদ condition checkingটা
এড়ােত চাই, তাহেল আমােদর বুঝেত হেব য থম পদ ছাড়া বাঁকী পদ েলা একরকেমর, তা-
দর সবার সামেন যাগ িচ আেছ, কােজই কবল তারাই loopএর িভতের থাকেব। আর থম
পদিটেক সে ে আলাদা কের ফলেত হেব। নীেচর program ( মেলখ) দেখা condition
checking আর করেত হয় িন, কারণ loop চেলেছ 2 হেত n পয । আর থম পদিট loopএরও
in
আেগ দখােনা হেয়েছ।
cout << a ; // থম পদিট এরloop বাইের , এর সামেন যাগ নাই
am
যেহতু arithmetic seriesএর (সমা র ধারার) য কান েটা পেদর মেধ difference
d, আমরা তাই কবল আেগর পেদর সােথ d যাগ কেরই পেরর পদ পেয় যেত পাির। তােত
িতিট পদ িহসাব করেত কবল একটা যাগ করেলই চলেব। এে ে আমরা t variableিটেক
৩৭৫
loopএর initialisationএ (আদ ায়েন) declare কের initial value িদেত পাির থমপদিটর
মােনর সমান। আর িত পােক আেগ t এর মান d পিরমান বাড়ােনা হেব তারপর output দওয়া
হেব। াভািবক ভােব এই programিট বশী efficient হেয়েছ।
এবার একটু িভ আেলাচনা। For loop (ঘূণী) initialisationএ (আদ ায়ন) আমরা চাইেল
, comma (িবিত) িদেয় একািধক variable declare ও initial value িদেত পাির। এই
variable েলা িক loopএর সােথ য statement (িববৃিত) বা block (মহ া) কবল সখােন
local variable ( ানীয় চলক) িহসােব ব বহার করা যায়। কান variableেক যিদ loopএর
িভতের ও বাইের উভয় ে কান কারেণ দরকার হয়, সই variableিটেক তাহেল loopএর
আেগই ঘাষণা কের ফলেত হেব। আমরা স রকম একিট উদাহরণ দিখ নীেচ তেব এে ে
আমরা যাগফলিটেক আর n ∗ (2a + (n − 1)d)/2 ব বহার কের করেবা না, বরং এিটেকও
loop িদেয়ই করেবা, যিদও সটা efficient হেব না, loop ছাড়া িদেয়ই বরং দ হেব।
int t = a , s = a ; / / থম পদ ও এক পেদর যাগফল।
t += d ;
s += t ;
5g
f o r ( i n t k = 2 ; k <= n ; ++k ) / / Loop 2 হেত n
{
/ / আেগর মােনর সােথ d যাগ
/ / যাগফেলর সােথ এই পদ
in
যাগ
cout << " + " << t ; / / ফাঁকা ও যাগ িচ
}
am
িসিপিপ ভাষায় এমন একিট program ( মেলখ) িলেখা যিট তামার মাধ িমক পরী ায় ১০ িট
িবষেয়র ন র input ( যাগান) িনেব। তুিম যিদ িতিট িবষেয় ৫০ এর বশী কের পেয় থােকা
তাহেল তামার গড় ন র দখােব, আর যিদ য কান একিট িবষেয়ও ফল কের থােকা, তাহেল
বাঁকী িবষয় েলার ন র input ( যাগান) নয়া বাদ িদেয়ই সরাসির output (ফলন) দখােব
অকৃতকায। এবার িভ একটা অব া িচ া কেরা যখােন তামােক সব েলা িবষেয়র ন র input
িনেতই হেব, একটােত ফল করেল তুিম outputএ অকৃতকাযও দখােব, তেব গড় ন র দখােব
কবল পাশ করা িবষয় েলার ন র িনেয়। এই নতুন programিট ( মেলখ) কমন হেব?
িফিরি ১৬.৪: Pass Fail in Ten Subjects (দশ িবষেয়র পাশ ফল িনণয়)
i n t totalMarks = 0 , index = 0 ; / / i n i t i a l value
৩৭৬
totalMarks += marks ;
}
দ সম া িটর থমিটর সমাধান উপের দখােনা হেয়েছ। তমন কিঠন িকছু নয়। একটা
5g
for loop (জ ঘূণী) ব বহার করা হেয়েছ যিদ index নামক variableিটর (চলক) মান ০ থেক
১ কের বািড়েয় বািড়েয় ১০ এর কম পয চলেব। Loopএর িত পােক curly brackets (বাঁকা
ব নীর) িভতের থেম কততম িবষেয়র ন র input ( যাগান) িনেত চাই সটা input prompt
( যাগান যাচনা) করেবা, তারপর marks নামক variableএ (চলক) সিট input িনেবা। ল
in
কেরা index এর মান ০ হেল আমরা িক ০তম িবষেয়র ন র কত তা জানেত চেয়িছ। অথাৎ
আমরা নেত কেরিছ ০ থেক। যাইেহাক marks চলেক মান input নওয়ার পের আমােদর
সটা totalMarks চলেকর সােথ যাগ করার কথা, কারণ সবেশেষ আমরা গড় বর করেত চাই।
তেব ে বলা হেয়েছ ৫০ বা বশী হেল গড় বর করেত হেব, ৫০ এর কম হেল আর input
am
( যাগান) না িনেয় অকৃতকায দখােত হেব। এই অংশটু করেত আমরা যিট কেরিছ তা হেলা
if (marks < 50) break; এই অংশটু িলেখিছ।
আমরা switch-case (পি -ব াপার) আেলাচনা করার সময় breakএর ( াি ) ব বহার
দেখিছলাম। এখােনও breakএর ( াি ) কাজ ায় একই। Break ( াি ) পাওয়া মা ই ওই
break য loopএর (ঘূণী) িভতের, control (িনয় ণ) সই loop থেক বর হেয় তারপেরর
al
৩৭৭
index variableিটেক আমরা িক for( int index = 0; index < 10; ++index) িলেখ
loopএর (ঘূণী) িভতের local variable ( ানীয় চলক) িহসােব declare কির নাই। আমরা
বরং index declare কেরিছ loop (ঘূণী) বাইের আর initial valueও (আিদ মান) িদেয়িছ
loopএর বাইের। এর কারণ হেলা index variableিটেক যেহতু আমরা for loopএর (জ
ঘূণী) বাইের if elseএ (যিদ নাহেল) ব বহার করেত চাই, তাই এিটেক loopএর িভতের declare
করা যােব না, সে ে loopএর বাইের সিট আর কাযকর থাকেব না বেল। তুিম িক চাইেল ক-
বল declarationটা loopএর বাইের কের initial value দওয়াটা loopএই করেত পারেত।
আর একটা িবষয়ও তাহেল ফাঁক তােল আমরা জানলাম সটা হেলা for loopএর (জ ঘূণী) এর
initialisation (আদ ায়ন) অংেশ িকছু না থাকেলও কান সম া নই।
i n t totalMarks = 0 , t o t a l S u b j e c t s = 0 , index ;
bool f a i l e d = f a l s e ; / / i n i t i a l value
5g
cout << index << " th s u b j e c t marks ? " ;
i n t marks ; c i n >> marks ;
}
}
if ( failed )
cout << " f a i l e d " << endl ;
else
al
{
f l o a t averageMarks = totalMarks / t o t a l S u b j e c t s ;
cout << " average marks " << averageMarks << endl ;
}
আমােদর যিদ সব েলা িবষেয়র ন র input ( যাগান) িনেতই হয়, তাহেল আমরা উপেরর
programএর মেতা কের break ( াি ) ছাড়া িলখেবা। তেব কান একটা িবষেয়র ন র ৫০ এর
কম িছেলা িকনা সটা মেন রাখার জ আমরা এখােন boolean (বুলক) ধরেণর একিট variable
failed িনেয়িছ। এই failed variableিটর মান initially false, কারণ তখনও আমরা একটা
িবষয়ও পরী া কির নাই। তারপর loopএর িভতের খয়াল কেরা if elseএ (যিদ নাহেল) ন র
৫০ এর কম হেল আমরা failed variableএর মান কের িদেয়িছ true। একািধক িবষেয়র মান
৫০ এর কম হেল স েলার িতবােরই failed variableএর মান true হেব, িক loopএর
(ঘূণী) িভতের failed variableএর মান false হওয়ার কান পথ নাই। কােজই loopএর শেষ
failed variableএর মান true মােন হেলা এক বা একািধক িবষেয়র ন র ৫০ এর কম, আর
failed variableএর মান তখনও false থাকা মােন হেলা কান িবষেয়র ন রই ৫০ এর কম
৩৭৮
িছেলা না। failed ধরেনর boolean variable (বুলক চলক) য েলা আমরা loopএর িভতের
কান দ শত কখেনা সত হেয়িছেলা িকনা মেন রাখেত ব বহার কির স েলােক বলা হয় flag
variable (পতাকা চলক)।
উপেরর programএ আমরা totalMarks িহসাব কেরিছ কবল marks variableএর
মান ৫০ বা বশী হেল, আর এরকম িবষয় কয়িট সটাও মেন রাখার জ mtotalSubjects না-
মর আেরকিট variable িনেয় সটার মান িতবার ১ কের বািড়েয়িছ। ল কেরা totalMarks
ও totalSubjects variable িটর declaration ( ঘাষণা) ও initial value (আিদমান)
দয়া হেয়েছ loopএর (ঘূণী) আেগ। এখােন index variableিট আমরা declare কের-
িছ loopএর (ঘূণী) বাইের, িক এবার initial value িদেয়িছ loopএর (ঘূণী) initialisation
(আদ ায়ন) অংেশই। তামার ই ামেতা ও দরকারমেতা তুিম নানাভােবই এ েলা করেত পােরা।
এই পাঠ শষ কির আেরকিট িবষয় িদেয়। ল কেরা totalSubjects িদেয় আমরা যখােন
totalMarks ক ভাগ কেরিছ, সখােন totalSubjects িকনা পরী া কির নাই। তুিম জা-
না িদেয় ভাগ করেল divide by zero বা িদেয় ভাগ বেল একিট িট (error) দখা
দয়। আমােদর mtotalSubjects এর মান পরী া করা দরকার হয় নাই, কারণ সটা হও-
য়া স ব যিদ ১০টা িবষেয়র সব েলােতই ন র ৫০ এর কম হয়। িক একটা িবষেয়ও যিদ ন র
5g
৫০ এর কম হয় তাহেল তা failed সত হেয় যােব আর failed (অকৃতকায) outputএ (ফলন)
আসেব, গড় ন র নয়। কােজই কান িট আসার েযাগই তরী হেব না এখােন।
in
১৬.৫ Continue in Loops (ঘূণীেত পাক িডঙােনা)
এক ব বসায়ী তার খির ারেদর িহসাব সংর েণর জে একটা কের খাতা ন র িদেয় দয়। তেব
am
সং ার জিনত কারেণ স মেন কের কান খির ােরর খাতা ন র যিদ ১৩ বা এর িণতক হয়,
তাহেল সই খির ার তার জে িতর কারণ হেব, হয়েতা বাঁকী িনেব অথবা বাঁকী িনেয় পির-
শাধ করেব না। এখন তামােক এমন একিট program ( মেলখ) িলখেত হেব যটা রন র
আর শেষর ন র input ( যাগান) িনেয় ১৩ িদেয় িবভাজ ন র েলা বাদ িদেয় অ ন র েলা
output (ফলন) িদেব, যােত ওই ব বসায়ী ন র েলা খির ারেদর খাতার ওপর লাগােত পাের।
al
এই program ( মেলখ) লখা খুবই সহজ। তামার েটা variable (চলক) begin আর
end িনেত হেব। এই েটার মান তুিম ব বসায়ীর কােছ থেক input ( যাগান) িনেব। তারপর তু-
িম একিট for loop (জ ঘূণী) চালােব যিট number variableএর মান begin থেক end
পয এক এক কের বািড়েয় বািড়েয় যােব। আর loopএর (ঘূণী) িভতের তুিম if (যিদ) ব বহার
৩৭৯
কের পরী া কের দখেব number variableএর মান ১৩ ারা িবভাজ িকনা। যিদ number
% 13 == 0 শত সত হয় তাহেল আমরা সখােন ওই ন র continue (িডিঙেয়) কের চেল যােবা
মােন আর িকছু না কের loopএর পেরর পােক চেল যােবা, আর শত িমথ া হেল ওই পাক না িডিঙ-
য় পের যখােন output (ফলন) দওয়া হেয়েছ সটা করেবা। For loopএর (জ ঘূণী) পাক
continue (িডিঙেয়) পেরর পােক যাওয়া মােন িঠক যখােন continue; লখা হেয়েছ সখান
থেক control (িনয় ণ) loopএর update (হালায়ন) অংেশ ++number করেত চেল যােব,
ফেল number এর মান ১ বাড়েব, আর তারপর িনয়মা যায়ী এর পের condition checking
(শত পরী ণ), পেরর পােকর statement execution (িববৃিত িনবাহ), এই ভােব চলেত থা-
কেব। For loopএ (জ ঘূণী) continue (িডঙােনার) কাজ মুলত এতটু ই।
i n t begin , end ; / / েলার v a r i a b l e মান যাগান িনেত হেব
f o r ( i n t number = begin ; number <= end ; ++number )
{
/ / এই খােন এক গাদা কাজ থাকেত পাের , তাই block নয়া হেয়েছ
{
5g
i f ( number % 13 ! = 0 ) / / ১৩ িদেয় িবভাজ না হেল
উপেরর program ( মেলখ) দেখা। য কাজ আমরা continue (িডঙােনা) ব বহার কের
স কেরিছলাম, সটা continue ছাড়াই করা হেয়েছ। যেহতু ১৩ িদেয় িবভাজ না হেল আমা-
দর ন র েলা output (ফলেন) দখােত হেব, আমরা তাই শতটা উে িদেয় number % 13
!= 0 িলেখই কাজিট কের ফলেত পাির। ১৩ ারা িবভাজ হওয়ার ে তা আমােদর তাহেল
আর িকছু করার নাই, তরাং control (িনয় ণ) আপনা আপিনই update (হালায়ন) অংেশ
al
চেল যােব। তারমােন বলেত গেল continue (িডঙােনা) একটা অদরকারী িবষয়। তাহেল এই-
টা আেছই বা কন? একটা িবষয় খয়াল কেরা ১৩ ারা িবভাজ না হেল এই ে আমােদর
কবল একটাই কাজ, ন রটা outputএ দখােনা। আমােদর এইটােক কান blockএর (মহ া)
িভতের রাখার দরকার নাই, যিদও আমরা উপের আমরা সটা রেখিছ। Block মুলত দরকার যিদ
ওইখােন আমােদর এক গাদা statement execute (িনবাহ) করেত হয়। তা এই িবশাল এক
গাদা statement (িববৃিত) ক একটা if (যিদ) এর blockএর িভতের ঢুিকেয় দওয়ার চেয়
continue (িডঙােনা) ব বহার কের program ( মেলখ) িলখেল বুঝেত িবধা হয়।
তুিম দশতলা দালােনর ১ তলা থেক elevatorএ (উে ালক) কের দশ তলায় উঠেত ও নামেত
চাও। তা elevatorেক এক তলা হেত আেরক তলায় যাওয়ার জ িতবার আলাদা কের িনেদশ
িদেত হয়। এবার এমন একিট program ( মেলখ) রচনা কেরা যিট তামার হেয় elevatorেক
এেকর পর এক উঠার ও তারপর নামার িনেদশ িদেব।
৩৮০
/ / নামার অংশ
5g
in
cout << " going down" << endl ;
f o r ( i n t l e v e l = 10 ; l e v e l > 1 ; −−l e v e l )
cout << l e v e l << " l e v e l " << l e v e l−1 << endl ;
am
এবার আসা যাক programএর পেরর অংেশ। এখােন ১০ থেক নামা , থেম ১০ থেক
al
৩৮১
For loopএ (জ ঘূণী) condition ফাঁকা রাখেল কী ঘেট? For loopএ শত ফাঁকা রেখ
এমন একিট program রচনা কেরা যিট দশিট ধনা ক পূণক (positive integer) input
( যাগান) িনেব। যিদ বা ঋণা ক (negative) integer input দয়া হয়, সটা উেপ া
করেব। Programিট এরপর ধনা ক সংখ া দশিটর যাগফল outputএ (ফলন) দখােব।
i n t index = 0 , sum = 0 ;
for ( ; ; ) / / শত ফাঁকা
{
cout << " input number ? " ;
i n t number ; c i n >> number ;
sum += number ;
++index ;
5g
/ / পাক িডঙাও
/ / যাগফল
/ / হালায়ন
in
/ / নীেচর শত যু break না িদেল i n f i n i t e loop হেব
i f ( index >= 10) / / শত এখােন
break ; / / break i n loop
am
উপেরর program দেখা। এেত শত ফাঁকা রাখা হেয়েছ। আমরা index variableিট-
ক (চলক) চাইেল for loopএ (জ ঘূণী) declare ( ঘাষণা) করেত পারতাম, িক sum
al
৩৮২
য loop (ঘূণী) অসীম সংখ ক বার ঘুের, আর loop থেক বর হওয়ার কান েযাগ নাই, এ
রকম loopেক বলা হয় infinite loop (অসীম ঘূণী)। ফাঁকা শতা ছাড়াও infinite loop তরী
হেত পাের, যিদ তামার শত এমন হয় য সটা সবসময় সত , যমন ধেরা index == index এই
শতিটও সবদা সত , কােজই এটাও infinite loop তরী করেব। Infinite loop তরী হওয়া
মােন এই program কান িদনই থামেব না। Programএ loop (ঘূণী) তরী করেলই আমােদর
তাই অিতির সতক থাকেত হয় যােত সটা কান ভােবই infinite loop না হেয় যায়।
এমন একিট program ( মেলখ) রচনা কেরা যিট দশিট positive integer (ধনা ক পূণক)
input ( যাগান) িনেব। যিদ zero বা negative (ঋণা ক) পূণক input দয়া হয়, সটা উেপ া
করেব। Programিট এরপর positive সংখ া দশিটর যাগফল outputএ (ফলন) দখােব।
এই programিট লখা একদমই সাজা। এখােন মুলত আমরা দখেত চাই য for loopএ
5g
(জ ঘূণী) initialisation (আদ ায়ন) অংেশর পাশাপািশ update (হালায়ন) অংশও ফাঁকা
রাখা যায়। নীেচর program ( মেলখ) দেখা। এখান আমরা েটা variable (চলক) count
আর sum িনেয়িছ। েটারই initial value (আিদ মান)
( যাগান) নয়া হয় িন, আর তাই যাগফলও এই অব ায়
, কারণ এখন একটা সংখ াও input
। Variable count ক তুিম চা-
in
ইেল অব initialisation অংেশও ঘাষণা কের initial value িদেত পারেত যমন for (
int count = 0; count < 10; ) িক variable sum ক অব ই loopএর (ঘূণী) বাইের
declare করেত হেব, কারণ আমরা output (ফলন) দখােবা তা loopএর বাইের।
am
i n t count = 0 , sum = 0 ;
sum += number ;
++count ; / / হালায়ন
}
উপেরর programএ for loopএ (জ ঘূণী) আমরা কবল condition (শত) অংশ-
িট রেখিছ, মাট ন র ১০ িট হেলা িকনা তা পরী া করেত। Loopএর (ঘূণী) িভতের input
prompt ( যাগান যাচনা) কের ন রিট input ( যাগান) নয়া হেয়েছ। তারপর দেখা number
variableএর মান যিদ বা কম হয় তাহেল continue; িদেয় পাক িডঙােত বলা হেয়েছ।
ধনা ক সংখ া ছাড়া অ রকেমর সংখ া আসেল আমরা উেপ া করেত চাই, এ কারেণ এ ব ব া।
৩৮৩
আমরা জািন for loopএ (জ ঘূণী) continue; করেল control সরাসির update (হা-
লায়ন) অংেশ চেল যায়। তা আমােদর এই loopএ update অংশেতা ফাঁকা রেখিছ, কােজই
count variableএর মান যা িছেলা তাই থাকেলা। ফেল আবার input prompt কের ন র
input নওয়া হেব। যত ণ বা তার কম কান সংখ া input ( যাগান) দয়া হে তত-
ণ এইভােব চলেত থাকেব count variableএর মান বাড়েব না। এবার ধেরা positive ন -
রিট input দয়া হেলা, তাহেল number <= 0 এই শতিট িমথ া হেব, ফেল control (িন-
য় ণ) আর পাক িডঙােব না, পেরর সািরেত িগেয় ন রিটেক sum এর সােথ যাগ করেব, আর
count variableএর (চলক) মানও এক বাড়েব। এই ভােব দশিট ধনা ক সংখ া হেলই কবল
count variableএর মান বেড় দশ হওয়া স র আর তােত loop (ঘূণী) থেক বর হেয় যাও-
য়া স র, negative সংখ া বা িদেয় শত িমথ া করা স ব হেব না। তাহেল আমরা দখলাম
loopএর (ঘূণী) update অংশেক ফাঁকা রেখ শত সােপে update করেত চাইেল সটা আমরা
statement (িববৃিত) অংেশ িনেত পাির।
তেব একটা ব াপার এখােন রণ করা দরকার। ধেরা ািম কের আমরা কখেনাই positive
সংখ া input ( যাগান) না িদেয় কবলই বা negative সংখ া input িদেত থাকলাম।
এই অব ায় কী ঘটেব? তাহেল তা count variableএর (চলক) মান কখেনা বাড়েব না, ফেল
5g
count < 10 শতিট িমথ া হওয়ার কান স াবনা থাকেছ না। এই অব ায় িক for loopিট
(জ ঘূণী) অসীম সংখ ক বার ঘুরেত থাকেব। য loop (ঘূণী) অসীম সংখ ক বার ঘুের, আর
loop থেক বর হওয়ার কান েযাগ নাই, এ রকম loopেক বলা হয় infinite loop (অসীম
ঘূণী)। Infinite loop তরী হওয়া মােন এই program কান িদনই থামেব না। Loop (ঘূণী)
in
িলখেলই আমােদর তাই সতক থাকেত হয় যােত সটা কান ভােবই inifinite loop না হেয় যায়।
যিদও এই programএ ( মেলখ) দশিট ধনা ক সংখ া input ( যাগান) িদেয় িদেয় loop
থেক বর হওয়ার আমােদর েযাগ আেছ, তেব সটা কবল স ব যিদ input দাতার (user
am
who is giving the input) সিদ া থােক আর আমরা তার ওপের আ া রাখেত পাির। তুিম
যিদ input দাতার ওপের আ াশীল না হও তাহেল একটা কাজ করেত পােরা। সটা হেলা সেবা
কত বার তুিম input ( যাগান) চাইেব সটা িনিদ কের িদেত পােরা। যমন ১০ িট সংখ া input
নয়ার জ ধেরা আমরা ধের িনলাম য সেবা ১৫ বার input দয়া আমরা মেন নেবা। িনতা
যিদ ভুল কের ঋণা ক বা কউ দয়, সই রকম ভুল আমরা এে ে ৫ বােরর বশী হেত
িদেবা না। তাহেল আমরা নীেচর মেতা কের program ( মেলখ) িলখেত পাির।
al
++attempt ;
sumber += number ;
++count ; / / হালায়ন
}
৩৮৪
i f ( count == 10)
cout << "sum " << sum << endl ;
else
cout << "max attempts f i n i s h e d " << endl ;
উপেরর এই programএ আমরা attemp নােমর আেরকিট variable িনেয়িছ যিট িদেয়
সবেমাট কয়বার input ( যাগান) দয়া হেলা সটা িহসাব রাখেবা। িতবার ন র input দ-
ওয়া মা ই attempt variableএর (চলক) মান এক বাড়েব, ন রিট ধনা ক, ঋণা ক,
যাই হাক, এ কারেণ এিট িক if (number <= 0) continue; এর আেগ দয়া হেয়েছ। আর
attempt variableএর মান যােত ১৫ হওয়া পয loop ঘুের তাই আমরা এবার loopএর
(ঘূণী) শত অংশিট বদেল িলেখিছ attempt < 15 && number < 10। এর মােন হেলা য
কান একিট শত ভ হেলই loop আর ঘুরেব না, কােজই ১৫ বােরর বশী চ া করা স ব হেব
না, আবার ১০ িটর বশী ধনা ক ন রও input ( যাগান) দয়া স ব হেব না। তাহেল একটা ব া-
পার আমরা দখলাম, loopএর condition (শত) অংেশ আমরা চাইেল একািধক condition
5g
boolean connectives (বুলক সংেযাজক) যমন and &&, or | |, not ! িদেয় সংযু কের
িদেত পাির। সবেশেষ দেখা loopএর (ঘূণী) বাইের আমরা যাগফল output (ফলন) িদেয়িছ
যিদ count variableএর মান ১০ হেয় থােক। আর না হেয় থাকেল মােন ১৫ বােরর চ ায়ও
১০ িট ধনা ক সংখ া নয়া স ব হয় নাই সে ে একটা message (বাতা) দখােনা হেয়েছ য
সেবা চ া শষ হেয় গেছ।
in
১৬.৯ For Loop Empty Statement (জ ঘূণীেত ফাঁকা িববৃিত)
am
এমন একিট program ( মেলখ) িলেখা যিট থেক িত পােক ৩ কের বািড়েয় সেবা ১০
ধাপ সামেন যােব, আর এই ভােব যিদ এমন কান সংখ া পায় যিট ৭ ারা িবভাজ তাহেল থেম
যােব। আমরা এই েপ পাওয়া সবেশষ সংখ ািট output জানেত চাই।
i n t number = 0 ; / / count িদেয় loop
al
৩৮৫
শষ হেয় যােব। Statement অংেশ দেখা আমরা count variableএর মান ১০ বা বশী হেল
loopএ break ( াি ) িদেয়িছ, আর না হেল count variableএর মান এক বাড়েব।
তাহেল উপেরর িট programএ আমরা একবার একটা variableেক (চলক) loopএ (ঘূ-
ণী) আর অ variableিটেক break ( াি ) এ ব বহার কেরিছ, আর আেরকবার িঠক উে াটা
5g
কেরিছ। আমরা িক চাইেল উভয় variableেক loopএ ব বহার করেত পাির না। অব ই পাির।
নীেচর program ( মেলখ) খয়াল কেরা। এখেনা number ও count েটা variableেকই
loopএ ব বহার করিছ। Initialisation (আদ ায়ন) অংেশ েটার মানই হেয়েছ
আমরা comma (িবিত) , ব বহার কেরিছ এখােন। Condition (শত) অংেশ আমরা েটা শত
থেক,
িদেয়িছ এবং && িদেয় জাড়া িদেয় যােত loop তত ণ চেল যত ণ উভয় শত সত হয়। য কান
in
একিট শত িমথ া হেলই loop শষ হেয় যােব। আর শত িট হেলা count < 10 ও number
% 7 == 0, থম শতিট সেবা দশ ধােপর জ আর ি তীয় শতিট ৭ ারা িবভাজ না হওয়া
পয । আর loopএর (ঘূণী) update (হালায়ন) অংেশ দেখা আমরা count আর number
am
েটােকই বািড়েয়িছ, একটােক এক কের, আেরকটােক িতন কের। তা এ সেবর ফেল আমােদর
statement (িববৃিত) অংেশ িক আর িকছুই করার থাকেছ না। আমরা তাই statement অংেশ
একটা empty statement (ফাঁকা িববৃিত) িদেয়িছ কবল একটা semicolon (িদিত) ব বহার
কের। তুিম চাইেল {} ফাঁকা blockও ব বহার করেত পােরা।
i n t number , count ;
al
f o r ( count = 0 , number = 0 ; //
initialisation
count < 10 && number % 7 ! = 0 ; / / condition
++count , number += 3 ) / / update
; / / empty
statement
cout << number << endl ;
তাহেল আমরা দখলাম, for loopএর (জ ঘূণী) statement (িববৃিত) ফাঁকা থাকেত
পাের। আর initialisation (আদ ায়ন) ও update (হালায়ন) অংেশ একািধক variable ব -
বহার করা যােব, উপেরা increment বা decrement য কবল এক কের করেত হেব তাও
না, বরং অ য কান পিরমান increment বা decrement করা যােব। এছাড়া condition
(শত) অংেশও দরকার মেতা একািধক শত boolean connectives (বুলক সংেযাজক) যমন
এবং && অথবা | | িদেয় জাড়া দওয়া যােব।
৩৮৬
সাধারণত for loopএর (জ ঘূণী) variableিটর (চলক) মান আমরা হয় statementএ (িব-
বৃিত) অথবা updateএ (হালায়ন) পিরবতন কির। িক উভয় অংেশ পিরবতন করেল কী হেব?
f o r ( i n t index = 0 ; index < 10 ; ++index )
{
cout << index << " " ;
i f ( index == 5 )
++index ;
}
cout << endl ;
5g
Updateএ িনয়িমত পিররতন িহসােব এক কের বাড়েব িতবার, আর statementএ (িববৃ-
িত) যিদ current value (চলিত মান) হয় তাহেল এক বাড়েব। এর ফেল কী হেব? খয়াল কেরা
index এর মান ৫ ছাড়া অ িকছু হেল কবল update অংেশ এক বাড়েব, িক index এর মান
৫ হেল, তখন statementএ if (index == 5) শত সত হওয়ায় সখােন index এর মান
এক বাড়েব, আবার updateএ তা আেরা এক বাড়েবই। ফেল পেরর পােক যখন index চল-
in
কর মান outputএ (ফলন) আসেব তখন সটা ৬ না হেয় ৭ হেব। কােজই নীেচ যমন দখােনা
হেলা আমরা outputএ ৬ দখেত পােবা না।
am
0 1 2 3 4 5 7 8 9
৩৮৭
এমন একিট program রচনা কেরা যিট ০ থেক ৯ পয িতিট অ েক কথায় িলখেব। আর
অ েলােক পরপর অে ই িলখেল য program হেতা তার সােথ তফাৎটা কমন দাঁড়ায়?
0 1 2 3 4 5 6 7 8 9
অ েলােক উপেরর মেতা কের পরপর অে ই িলখেল ব াপারটা তা খুবই সহজ। এই রকম
program ( মেলখ) আমরা নীেচ দখালাম। একটা for loop (জ ঘূণী) variable (চলক)
digitএর মান ০ থেক ৯ পয এক কের বািড়েয় যােব, আর িত পােক আমরা cout ব বহার
কের digitটােক দখােবা। এখােন cout জােন কান অ েক কীভােব িলখেত হয়!
f o r ( i n t d i g i t = 0 ; d i g i t <= 9 ; ++ d i g i t )
cout << d i g i t << " " ;
cout << endl ;
5g
এবার অ েলােক যিদ অে না িলেখ আমরা কথায় িলিখ, তাহেল কী করেবা? এখােন যেহতু
আমরা ০ থেক ৯ পয অেনকবার কথায় িলখিছ, অেনেক তাই এখােন for loop (জ ঘূ্ণী)
ব বহার করেত উ ু হয়। ফেল তারা নীেচর মেতা কের program তরী কের। এখােন cout
িক কান অ েক কী ভােব িলখেত হেব তা জােননা, আমােদর তাই একিট switch case (পি
ব াপার) ব বহার কের িতিট অ েক আলাদা আলাদা কের বেল িদেত হেয়েছ।
in
f o r ( i n t d i g i t = 0 ; d i g i t <= 9 ; ++ d i g i t )
{
swtich ( d i g i t )
am
{
case 0 : cout << " shunyo " ; break ;
case 1 : cout << " ek " ; break ;
case 2 : cout << " dui " ; break ;
case 3 : cout << " t i n " ; break ;
case 4 : cout << " char " ; break ;
al
৩৮৮
দখােল িক আমােদর for loop ব বহার করেলই চলেতা কারণ cout ব বহােরর কারেণ িতিট
অ দখােনােত য িভ তা সটা আমােদর সরাসির সামলােত হয় না।
cout << " shunyo " ;
cout << " ek " ;
cout << " dui " ;
cout << " tin " ;
cout << " char " ;
cout << " panch " ;
cout << " soy " ;
cout << " shat " ;
cout << " aat " ;
cout << " noy " ;
cout << endl ;
িসিপিপ ছাড়া অ া ভাষায় for loop (জ ঘূণী) কবল order ( ম), progression
( গমণ), series (ধারা) এসেবই ব বহার করা যায়। তেব িসিপিপর for loop আসেল অেনক
শি শালী, এটােক য কান রকম loop তরীেত ব বহার করা যায়। ব ত িসিপিপেত for loop
(জ ঘূণী) িদেয়ই সকল রকেমর loop তরী করা যায়, কােজই অ কান loop দরকার হয় না,
যিদও িসিপিপেত আেরা িট loop (ঘূণী) আেছ, য েলা আমরা পেরর পাঠ েলােত দখেবা।
al
cout << " count " << count << " " ;
cout << "sum " << sum << endl ;
৩৮৯
উপেরর programএ ( মেলখ) খয়াল কেরা। এখােন আমরা িকছু ন র input ( যাগান)
িনেয় তােদর যাগফল বর করেত চাই। তেব কয়িট ন র input িনেবা আমরা সটা আেগ থেক
জািননা । ব বহারকারী যত েলা ইে ন র input িদেত থাকেব, যখন স আর কান ন র input
িদেত চায় না তখন স একটা input িদেয় সটা জানােব। আমরা তারপর কয়িট ন র input
িনেয়িছ আর তােদর যাগফল কত সটা outputএ (ফলন) দখােবা।
তা এই programিট ( মেলখ) খুবই সহজ। আমরা একিট for loop (জ ঘূণী) িনেয়িছ,
িক এটােক আমরা কান variableএর (চলক) মান বািড়েয় বা কিমেয় ঘুরােবা না। আমরা মুলত
শতটা ব বহার করেবা loop (ঘূণী) তরীেত। িতনিট variable (চলক) number, count আর
sum নয়া হেয়েছ যােদর আিদমান (initial value) দওয়া হেয়েছ ঘূণীর বাইের। ঘূণীর পের
যেহতু count ও sum ফলেন (output) দখােনা হেব, তাই ও েলা অব ই ঘূণীর (loop)
বাইের ঘাষণা (declare) করেত হেব। িক number চলকিট ঘূণীর িভতের ঘাষণা ও আদ ায়ন
(initialisation) করা যেত পারেতা। যাইেহাক ঘূণীর িভতের ন রিট যাগান িনেয় যিদ না
হয় তাহেল নিত এক বািড়েয় যাগফেলর সােথ ন রিট যাগ করা হেয়েছ।
একটা িবষয় খয়াল কেরা আমােদর ঘূণীেত (loop) শত number != 0 অথাৎ number
এর মান
5g
ছাড়া অ িকছু হেল কবল ঘূণীর িববৃিত (statement) িনবািহত (execute)
হেব। তা থমবার আমরা তা অব ই ঘূণীর িভতের ঢুকেত চাই, িক number তা তখন
পয একটাও যাগান (input) নয়া হয় নাই। ঘূণীর িভতের যিদ আমােদর ঢুকেতই হয়, আমােদর
সে ে কান ভােব শত সত কের িদেত হেব, number চলকের আিদমান
িদেয় রাখেত হেব। আমরা number এর আিদ মান িদেয়িছ 1, তুিম চাইেল
ছাড়া একটা িকছু
ছাড়া অ য
in
কান িকছু িদেত পারেত। চলক count আর sum এর আিদমান তা ই িদেত হেব, সটা
বুঝেতই পারেছা, যেহতু তখনও আমােদর একটাও ন র যাগান নওয়া হয় নাই।
আসেল জ ঘূণীেত (for loop) শত পরী ণ হয় সাধারণত িববৃিতেত (statement) ঢুকার
am
আেগ, অথচ আমরা এখােন শত পরী া করেত চাই িববৃিত অংেশর পের, কারণ িববৃিতেত আমরা
য ন রিট যাগান িনেবা সটা আমরা পরী া করেত চাই পেরর পােক ঢুকার আেগ। পেরর পােকর
আেগ পরী ণ মােন আেগর পােকর পের আর কী! আর স কারেণ জার কের number চলেকর
আিদ মান 1 িদেয় থমবার শত সত বািনেয় আমরা খািনকটা চালািক কেরিছ!
al
For loop (জ ঘূণী) কত ভােব লখা যায়? এর মেধ িন য় বুেঝ ফেলেছা for loopএর for
( ; ; ) bracketsএর (ব নী) িভতেরর semicolon (িদিত) ; েটা কবল আবি ক। তাহেল
initialisation (আদ ায়ন), condition (শত), update (হালায়ন) কত ভােব িব াস করা
স ব?
f o r ( আদ ায়ন ; শত ; হালায়ন ) আদ ায়ন
িববৃিত f o r ( ; শত ; হালায়ন )
িববৃিত
উপের বামপােশ for loopএর (জ ঘূণী) সাধারণ অব া দখােনা হেয়েছ, আর ডান পােশ
দখােনা হেয়েছ য চাইেলই initialisation (আদ ায়ন) অংশিট loopএর (ঘূণী) বাইের িনেয়
যাওয়া যায়। তােত ফলাফল একই থাকেব। তেব তফাৎ অ একটুই আেছ সটা হেলা বামপােশর
initialisationএ যিদ variable declare করা সিট কবল loopএর জ local variable
৩৯০
( ানীয় চলক), তাই loopএর পের আর ব বহার করা যায় না। িক ডানপােশর initialisationএ
যিদ variable declare (চলক ঘাষণা) করা হয় সটা loopএর (ঘূণী) পেরও ব বহার করা যা-
ব। আমরা এর পের থেক initialisation (আদ ায়ন) loopএর (ঘূণী) িভতেরই হয়েতা িলখেবা,
তেব আেরকবার বেলই িদি variable declare করার ব াপারিটেত কান সম া না থাকেল
তুিম চাইেলই সিট loopএর আেগই িলখেত পারেব। তরাং initialisation কাথায় থাকেলা
স িবষেয় িভ তা এখােনর পের আর দখােবা না।
f o r ( আদ ায়ন ; শত ; হালায়ন ) f o r ( আদ ায়ন ; শত ; )
িববৃিত {
িববৃিত
হালায়ন
}
এরপর উপের দেখা আমরা কী ভােব update (হালায়ন) অংশট যথা ােন না িলেখ তার
বদেল statementএর (িববৃিত) সােথ িদেয় িদেয়িছ। এেত loopএর (ঘূণী) ফলাফল একই থাক-
5g
ব, কারণ িববৃিতর পরপরই তা update execute (িনবািহত) হেতা, এখেনা তাই হে । কােজই
তুিম চাইেল য কান সময় এইটা করেত পােরা। আমরা এরপের update (হালায়ন) যথা ােনই
রাখেবা, এ সং া variation েলা ( ভদন) আর দখােবা না।
f o r ( আদ ায়ন ; ; হালায়ন ) f o r ( আদ ায়ন ; true ; হালায়ন )
in
{ {
i f ( ! শত ) break ; i f ( ! শত ) break ;
িববৃিত িববৃিত
} }
am
এবার আমরা condition (শত) অংেশর িভ তা দখেবা। উপের দেখা আমরা শতিটেক
statement (িববৃিত) অংেশ িনেয় িগেয়িছ। ফেল condition অংেশ বাম পােশর মেতা হয় ফাঁকা
রাখা হেব, না হয় ডানপােশর মেতা true িলেখ দওয়া হেব। েটা মুলত একই কথা কারণ ফাঁকা
শত মােন সত । Condition যখন statement অংেশ গেছ তখন দেখা আমরা ! লািগেয়
উে া শত িদেয় loopএ (ঘূণী) break ( াি ) িদেয়িছ যােত শত িমথ া হেলই loop থেক
al
control (িনয় ণ) বর হেয় যায়। তরাং এই variation েলা ( ভদন) for loopএর (জ
ঘূণী) সাধারণ অব ার সমাথক।
f o r ( আদ ায়ন ; শত১ ; হালায়ন ) f o r ( আদ ায়ন ; শত১ ; হালায়ন )
{ {
i f ( শত২ ) i f ( ! শত২ ) continue ;
িববৃিত িববৃিত
} }
৩৯১
উপের দেখা statement অংেশ আমরা আেরকিট শত ব বহার কের statement (িববৃিত)
execute কেরিছ। তা আমরা চাইেল এখােন উপেরর ডান পােশর মেতা কের শত২ এর িবপরীত
শত িদেয় পাক continue (িডঙােত) পাির। তােত statement আর if (যিদ) এর অধীেন থাকেছ
না। উদাহরণ েলার শত১ ক যিদ আমরা statement অংেশ নািমেয় দই তাহেল আমরা যা
পােবা তাও উপের দখােনা হেয়েছ।
f o r ( আদ ায়ন ; ; ) f o r ( আদ ায়ন ; ; )
{ {
i f ( ! শত১ ) break ; i f ( ! শত১ ) break ;
i f ( শত২ ) িববৃিত i f ( ! শত২ )
হালায়ন {
} হালায়ন
continue ;
}
িববৃিত
5g }
হালায়ন
সবেশেষ আমরা উপের একটু দিখ update (হালায়ন) যিদ statement (িববৃিত) অংেশ
ঢুেক যায় তাহেল break ( াি ) আর continue (িডঙােনা) এর সােথ কী িমথি য়া ঘেট। িবেশষ
in
কের ডানপােশ দেখা শত২ সত না হেল আমােদর থেম updateএর (হালায়ন) কাজটু করেত
হেব, তারপর আমরা continue করেত (িডঙােত) পারেবা। এর কারণ for(আদ ায়ন; ; ) এখােন
যেহতু update অংশটু ফাঁকা আর continue করেল াভািবক ভােব for loopএ (জ ঘূণী)
am
update অংশটু েতই control (িনয় ণ) চেল যায়, সেহতু updateএর কাজটু আমােদর
continue; এর আেগই সের ফলেত হেব। এ ছাড়া খয়াল কেরা updateএর কাজটু আমরা
statementএর পেরও কেরিছ, সটােতা াভািবক ভােবই হওয়ার কথা।
িসিপিপেত একিট program ( মেলখ) িলেখা যিট userএর (ব বহারকারী) কােছ থেক িট
positive integer (ধনা ক পূণক) input ( যাগান) িনেয় তােদর গির সাধারণ ণনীয়ক বা
গসা িনণয় করেব। এই programিট তুিম while loop ( ণ ঘূণী) ব বহার কের িলখেব।
নীেচ দখােনা program খয়াল কেরা। আমরা থেম variable declare (চলক ঘাষণা)
কের input prompt ( যাগান যাচনা) কের integer (পূণক) িট input ( যাগান) িনেয়িছ।
এরপর আমরা if (যিদ) লািগেয় শত পরী া কেরিছ, দেখিছ integer িটর য কানিট বা
তার কম িকনা। কারণ বা negative সংখ ার জ আমরা গসা িনণয় করেবা না, সে ে
বরং আমরা error message ( িট বাতা) দিখেয় program ব থতার (failure) সােথ শষ
করেবা। এরপের রেয়েছ loop (ঘূ্ণী) িদেয় আমােদর গসা িনণেয়র মুল অংশটু ।
৩৯২
re t ur n EXIT SUCCESS ;
5g / / ভাজকই গসা
in
গসা িনণয় করেত গেল আমােদর থেম দ সংখ া িটর একিটেক িদেয় আেরকিটেক
ভাগকের ভাগেশষ বর করেত হয়। ভাগেশষ হওয়া মােন আমােদর আর ভাগ করেত হেব
না, আর সে ে ভাজক য পূণকিট সিটই হেলা আমােদর গসা । তা খয়াল কেরা আমরা
am
0) িলখেত পারেত। যাইেহাক শতিট সত না হেল অথাৎ remainder হেল loopএর বাইের
blockএর (মহ া) {} পের দেখা আমরা integer2 ক গসা িহসােব output দিখেয়িছ।
এখন কথা হে ভাগেশষ না হেল আমােদর কী করেত হেব? সটা আমরা blockএর
(মহ া) িভতের িলেখিছ। আমােদর আেগর ভাজকিট হেব নতুন ভাজ , তাই আমরা থেম িলেখ-
িছ integer1 = integer2;, এেত িক আেগর ভাজ িট হািরেয় গেলা, আমােদর আসেল স-
িট আর দরকার নাই। তারপর দেখা integer2 = remainder; িলেখ আমরা ভাগেশষিটেক
নতুন ভাজক িহসােব িনেয় িনলাম। তুিম িন য় বুঝেত পারেছা কন integer1 = integer2;
আেগ আর integer2 = remainder; পের িলখেত হেয়েছ। যিদ উে াটা করা হেতা তাহেল
িক integer2 = remainder; এর কারেণ integer2 যিট িকনা আমােদর নতুন ভাজ হেব
সিটর মান হািরেয় যেতা, ফেল িঠক পরপরই integer1 = integer2; করেল আমরা য ভা-
জ িট পতাম সটা আসেল remainderএরই মান। নতুন ভাজ ও নতুন ভাজক িঠক করার পের
দেখা এবার আমরা আবার ভাগেশষ িনণয় কেরিছ remainder = integer1 % integer2
িলেখ। এই ভাগেশষিট হেল আমােদর loop (ঘূণী) থেক বর হেয় যেত হেব, আর না
হেল আবারও loopএর (ঘূণী) blockএর (মহ া) িভতের যা আেছ তা করেত হেব।
তুিম হয়েতা এবার করেত পােরা, আ া আমরা িক এই program for loop (জ ঘূণী)
৩৯৩
িদেয় িলখেত পারতাম। কন নয়? নীেচ দেখা আমরা একই program for loop (জ ঘূণী)
ব বহার কের িলেখিছ, মুলত while loopএর ( ণ ঘূণী) বদেল for loopটা (জ ঘূণী) এখােন
দখােনা হেয়েছ। Initialisation (আদ ায়ন) অংেশ আেছ থমবার ভাগেশষ িনণেয়র ব াপারটা,
Condition (শত) অংেশ আেছ ভাগেশষ না হওয়ার শত যটা িকনা এখােন remainder
!= 0 িলখা হেয়েছ িক কবল remainder িলখেলও চলেতা। আর update (হালায়ন) অংেশ
আবার ভাগেশষ িনণেয়র অংশটু িদেয়িছ। For loopএর (জ ঘূণী) নানান বাহার আমরা য
েলা দেখিছলাম তুিম স েলা এখােনও িনেজ িনেজ েয়াগ করেত পােরা।
f o r ( i n t remainder = integer1 % integer2 ; / / আদ ায়ন
remainder ! = 0 ; / / শত
remainder = integer1 % integer2 ) / / হালায়ন
{
inte ge r1 = integer2 ; / / ভাজকই হেব নতুন ভাজ
inte ge r2 = remainder ; / / ভাগেশষ হেব নতুন ভাজক
}
এবার তাহেল
5g
করেত পােরা, for loop (জ ঘূণী) িদেয়ই যিদ এেতা র কাজ হয়
তাহেল while loopএর ( ণ ঘূণী) দরকার কী? সিত বলেত আসেল দরকার নাই। িসিপিপেত
for loop (জ ঘূণী) এতটাই শি শালী য আর কান loop দরকার নাই। তেব for loop-
টা তবুও বশীর ভাগ ে ম, গমন, ধারা ইত ািদর ে বশী ব বহার করা হয়, আর
in
while loop ব বহার করা সাধারণ ে । While loopএ ( ণ ঘূণী) loopএর (ঘূণী) অংশ
িহসােব initialisation (আদ ায়ন) নাই, তাই সরকম িকছু দরকার হেল ওই অংশটু েক রা-
খেত হেব loopএরও আেগ। While loopএ ( ণ ঘূণী) update (হালায়ন) অংশও আলাদা
am
কের নাই, কােজই সিট চেল যােব statementএর অংশ িহসােব। এর মােন তামােক অব ই
statementএর িভতের updateএর কাজ কের িদেত হেব যােত loopটা infinite loopএ
পিরণত না হয়। একটা িবষয় খয়াল কেরা শত থেমই িমথ া হেল while loop ( ণ ঘূণী) এক-
বারও না ঘুরেত পাের, এটা অব for loopএর (জ ঘূণী) জে ও সত । এই উভয় loop
থেম শত পরী া কের, শত সত হেল তারপর ঘুরেত যায়। তামােক যিদ তম একবার কাজ
করেতই হয় সটা তাহেল loop আেগ বা পের কের ফলেত হেব। গসা িনণেয়র ে আমােদর
al
যমন কমপে একবার ভাগেশষ করেতই হেব, যিট আমরা while loopএ ( ণ ঘূণী) loopএর
আেগই আর for loopএ (জ ঘূণী) initialisationএ (আদ ায়ন) কের ফেলিছ।
for ( i n i t i a l i s a t i o n ; initialisation
c o n d i t i o n ; update ) while ( c o n d i t i o n )
statement statement+update
েটা positive integerএর গসা িনণেয়র programিট ( মেলখ) তুিম আেরকবার িলেখা,
িক এবার তুিম while loop ( ণ ঘূণী) বা for loop (জ ঘূণী) ব বহার না কের তার বদেল
ব বহার করেব do loop (কেরা ঘূণী)। Do loop হেলা িসিপিপেত তৃতীয় ও শষ কােরর loop।
আমরা আেগর পােঠই এই programিট আেলাচনা কেরিছ ণ while loop (ঘূণী) ব ব-
হার কের, এখােন তাই আেগ সিটই আেরকবার একটু দেখ নই। েটা variable integer1,
৩৯৪
integer2 তুিম ঘাষণা কের স েলােত positive integer input ( যাগান) িনেব। দরকার
হেল আেগর পাঠ থেক input ( যাগান) নয়ার ও তারপর integer িট positive িকনা পরী া
করার ব াপারিট দেখ িনেত পােরা। তাহেল আমরা এবার গসা িনণেয়র মুল অংশটায় যেত পাির।
i n t in te ge r1 , int eg er2 ; / / ধনা ক মান তুিম input িনেব
i n t remainder = int eg er 1 % integer2 ; / / ভাগেশষ িনণয়
while ( remainder ) / / ভাগেশষ না হেল
{
inte ger 1 = in te ger 2 ; / / ভাজকই হেব নতুন ভাজ
inte ger 2 = remainder ; / / ভাগেশষ হেব নতুন ভাজক
remainder = int eg er1 % integer2 ; / / আবার ভাগেশষ
}
cout << "HCF : " << int eger2 << endl ; / / ভাজকই গসা
5g
উপেরর এই programিটর ( মেলখ) loopটােক (ঘূণী) যিদ আমরা িব ার কির, মােন loop
না িলেখ েত ক পােক যা হেতা স েলা যিদ বার বার িলিখ তাহেল কমন হেতা সটা আমরা নীেচ
দখালাম। খয়াল কেরা থম ভাগেশষ িনণয়টা িক উপেরর loopএর বাইের িছেলা, আর তার-
পর নতুন ভাজ , নতুন ভাজক, আর আবার ভাগেশষ িনণেয়র statement েলা (িববৃিত) িছেলা
loopএর িভতের, তাই ও েলা নীেচর িব ারেণ বারবার এেসেছ।
in
remainder = int eg er1 % integer2 ; / / ভাগেশষ িনণয়
integ er 1 = in te ger 2 ; / / ভাজকই হেব নতুন ভাজ
am
এখন উপেরর এই িব ারণ দেখ কােরা মেন িক অ রকম কের loop লখার সাধ জাগেত
পাের। কউ হয়েতা বলেত পাের loopটা (ঘূণী) কন থম ভাগেশষ িনণয়েক বাদ িদেয় হেয়-
ছ। Loopটােতা বরং থম ভাগেশষ িনণয় থেকই হেত পারেতা। কথা সত , আর তাইেতা
আমােদর নতুন ধরেনর একিট loopএর (ঘূণী) উ ব হেয়েছ, যিট হেলা do loop (কেরা ঘূণী)।
নীেচর programএ ( মেলখ) দেখা আমরা গসা িনণয় কেরিছ do loop (কেরা ঘূণী) ব -
বহার কের। এখােন থমবার ভাগেশষ িনণয় করা হেয়েছ loopএর (ঘূণী) িভতেরই। আর তারপর
নতুন ভাজ ও নতুন ভাজক িনধারণ করা হেয়েছ। Loopএর শত পরী ণ তারও পের while (
remainder); যখােন লখা হেয়েছ সখােন। শত যিদ সত হয় তাহেল loopএর পেরর পাক
হেব, অথাৎ control (িনয় ণ) লাফ িদেয় doএর পের য block (মহ া) {} হেয়-
ছ সখােন চেল যােব। তেব একটা পূণ িবষয় এখােন উে খ করেত হেব এখােন সটা হেলা
outputএ (ফলন) িক এখন গসা integer2 হেব না, বরং গসা হেব integer1। এর কারণ
৩৯৫
হেলা blockএর িভতের remainder variableএর মান হাক বা না হাক আমরা িক ভা-
জকটােক নতুন ভাজ িহসােব ধের িনেয়িছ, ফেল integer2 এর মান এখন integer1এ আেছ।
i n t inte ge r1 , integer2 ; / / ধনা ক মান তুিম যাগান িনেব
i n t remainder ; / / এই v a r i a b l e বাইেরই ঘাষণা করেত হেব !
do
{
remainder = integer1 % integer2 ; / / ভাগেশষ িনণয়
inte ge r1 = integer2 ; / / ভাজকই হেব নতুন ভাজ
inte ge r2 = remainder ; / / ভাগেশষ হেব নতুন ভাজক
}
while ( remainder ) ;
5g
তাহেল while loop ( ণ ঘূণী) আর (do loop) কেরা ঘূণীর তফাৎ হেলা আেগরিটেত শত
পরী া পােক ঢুকার আেগ হয়, শত সত হেল পােক ঢুেক, আর পেররিটেত শত পরী া পাক শষ
কের হয়, শত সত হেল পেরর পােক ঢুেক। এর মােন do loopএর (কেরা ঘূণী) থম পাক বাদ
িদেল ওইটা while loop ( ণ ঘূণী) হেয় যেত পাের অথবা উে াটা।
in
১৬.১৬ Break and Continue Again (আবার াি ও িডঙােনা)
am
এমন একিট program ( মেলখ) তরী কেরা যিট ব বহারকারীেক serial অ যায়ী একিট
menu ( াপণ ) দখােব যাগ, িবেয়াগ, ণ, ভাগফল, বা ভাগেশষ কলন (calculate) করার
জ । ব বহারকারী যত ন েরর কলন করেত চাইেব তার জ িট integer (পূণক) inupt ( যা-
গান) িনেয় িহসাব কের output (ফলন) দখােব। ব বহারকারী যত ণ এেকর পর এক কলন কের
যেত চায় তুিম তত ণ menu দিখেয়, input িনেয়, কলন কের যােব।
al
i n t choice ; / / পছ variable
৩৯৬
i f ( choice == 0 ) / / পছ হেল
break ; / / break from loop
/ / output দখাও
cout << " r e s u l t : " << r e s u l t << endl ;
}
/ / িবদায় স াষণ
al
উপেরর program ( মেলখ) দেখা, আমরা একটা infinite loop িনেয়িছ while (true
) { } িলেখ তুিম চাইেল িক for ( ; ; ) { } িলেখ এমন িক do { } while(true); িলেখও
infinite loop তরী করেত পারেত। Infinite loop তরী করেল আমােদর অব ই loopএর
িভতের কান ভােব loop থেক break ( াি ) দওয়ারও ব ব া রাখেত হেব।
যাইেহাক loopএর (ঘূণী) িভতের দেখা আমরা থেম কত serial ন র input ( যাগান)
িদেল কী করা হেব সিট দিখেয়িছ, যখােন ১ হেল যাগ, ২ হেল িবেয়াগ, ৩ হেল ণ, ৪ হেল
ভাগফল, ৫ হেল ভাগেশষ, আর ০ হেল বর হেয় যাওয়া আেছ। Userএর (ব বহারকারী) পছ
prompt (যাচনা) কের choice variableএ নয়া হেয়েছ। এবার দেখা choiceএর মান ০
হেল control (িনয় ণ) loop থেক break িদেয় বর হেব, তাহেল infinite loop (অসীম
ঘূণী) আর হে না। আর choice এর মান ০ না হেল তারপর আমরা পরী া কের দেখিছ সিট ১
এর কম বা ৫ এর বশী িকনা। যিদ সরকম হয় তাহেল এইরকম উ াপা া পছে র জ আসেল
আমােদর িকছু করার নই, আমরা কলন করেবা কবল ১ হেত ৫ পয serial ন েরর জ । তা-
৩৯৭
হেল এই রকম ে আমােদর কলন করা বাদ িদেয় সরাসির পেরর পােক চেল যেত হেব, অথাৎ
আবার menu ( াপণ ) দিখেয় পছ input িনেত হেব। আমরা এই কাজিট কেরিছ continue
ব বহার কের পাক িডিঙেয়। এরপের দেখ আমরা একিট switch-case (পি -ব াপার) ব বহার
কের পছ অ যায়ী ফলাফল কলন কেরিছ, তারপর output (ফলন) িদেয়িছ।
While loop ( ণ ঘূণী) বা do loopএ (কেরা ঘূণী) break ( াি ) দয়া িঠক for loopএ
(জ ঘূণী) break দয়ার মেতাই। Control (িনয় ণ) loop (ঘূণী) থেক বর হেয় loopএর বা-
ইের যা আেছ সখােন চেল যােব। তেব while loop ( ণ ঘূণী) বা do loopএ (কেরা ঘূণী) পাক
continueএর (িডঙােনা) সােথ for loopএ (জ ঘূণী) পাক continueএর (িডঙােনা) িকি ত
তফাৎ আেছ। তফাৎটা হেলা continue এর পের for loopএ (জ ঘূণী) control (িনয় ণ)
update (হালায়ন) অংেশ চেল যায়। িক while loop ( ণ ঘূণী) বা do loopএ (কেরা ঘূণী)
এ update অংশেতা আলাদা কের নাই। Update সাধারণত statementএর অংশ িহসােবই
করা হয় যমন িতবার এখােন choice এর মান input নয়া হেয়েছ।, কােজই control while
বা do loopএর ে সরাসির চেল যায় condition checking (শত) অংেশ।
5g
১৬.১৭ Loop and If Interaction (ঘূণী যিদ িমথি য়া)
এমন একিট program ( মেলখ) িলেখা যিট একিট positive integer (ধনা ক পূণক)
input ( যাগান) িনেয় ১ থেক সই integer (পূণক) পয জাড় সংখ া েলা একিদেক আর িব-
in
জাড় সংখ া েলা আেরকিদেক যাগ করেব। এই programএ ( মেলখ) মুলত আমরা loopএর
(ঘূণী) িভতের if-else (যিদ-নাহেল) ব বহার না করেত চ া করেবা।
cout << " p o s i t i v e i n t e g e r " ;
am
i n t i n t e g e r ; c i n >> i n t e g e r ;
i n t evenSum = 0 , oddSum = 0 ;
f o r ( i n t index = 1 ; index <= i n t e g e r ; ++index )
{
i f ( index % 2 ! = 0 ) / / িবেজাড়
al
oddSum += index ;
else / / জাড়
evenSum += index ;
}
cout << evenSum << " " << oddSum << endl ;
উপেরর programএ ( মেলখ) আমরা থেম একিট positive integer (ধনা ক পূণক)
input ( যাগান) িনেয়িছ, তারপর জাড় সংখ া েলার যাগফেলর জ evenSum আর িবেজাড়
সংখ া েলার যাগফেলর জ oddSum চলক (variable) িনেয়িছ। তারপর একিট for loop
(জ ঘূণী) চেলেছ variable index এর মান ১ থেক integerএর মান পয । Loopএর
িভতের index িবেজাড় হেল বা (index % 2 != 0) শত সত হেল indexএর মান oddSum
এর সােথ যাগ হেব আর শত িমথ া হেল evenSumএর সােথ যাগ হেব।
উপেরর ওই program ( মেলখ) আমােদর সিঠক ফলাফল িদেব তেব একটা িবষয় খয়াল
কেরা indexএর মান জাড় নািক িবেজাড় এইটা কন আমােদর loopএর (ঘূণী) িত পােক (lap)
৩৯৮
পরী া করেত হেব? এইটা তা আমরা আসেল আেগ থেক জািনই কান পােক indexএর মান
জাড় কান পােক সটা িবেজাড়। কােজই loopএর (ঘূণী) িভতের য শত পরী ণ সটা আসেল
আমােদর অিতির হেয়েছ বেল মেন হে । এই রকেমর ে আমরা আসেল একটা loopএর
(ঘূূণী) বদেল েটা loop িলেখ ফলেত পাির। নীেচ দেখা আমরা তাই কেরিছ। থম loopএ ১
থেক কের িতপােক ২ কের বাড়েব, ফেল কবল িবেজাড় সংখ া েলাই হেব indexএর মান,
আর ি তীয় loopএ ২ থেক কের িতপােক ই কের বাড়েব, ফেল কবল জাড় সংখ া েলাই
হেব indexএর মান। থম loopএ indexএর মান oddSumএর সােথ আর ি তীয় loopএ
indexএর মান evenSumএর সােথ যাগ করা হেয়েছ। তা এই প িবভাজেনর ফেল আমােদর
আর কান loopএই (ঘূণী) শত পরী া করেত হেলা না, অথচ একই ফলাফল পাওয়া গেলা।
cout << " p o s i t i v e i n t e g e r " ;
i n t i n t e g e r ; c i n >> i n t e g e r ;
i n t evenSum = 0 , oddSum = 0 ;
f o r ( i n t index = 1 ; index <= i n t e g e r ; index += 2 )
oddSum += index ;
5g
f o r ( i n t index = 2 ; index <= i n t e g e r ; index += 2 )
evenSum += index ;
in
cout << evenSum << " " << oddSum << endl ;
এবার একই রকেমর আেরকিট ব াপার দেখা নীেচর programএ ( মেলখ)। এইখােন
indexএর মান জাড় নািক িবেজাড় সটার ওপর িভি কের যাগ না কের, loopএর (ঘূণী) -
am
িত পােক একটা কের ন র input ( যাগান) নয়া হেয়েছ। Input নয়া ন রিট যিদ জাড় হয়
তাহেল evenSumএর সােথ আর িবেজাড় হেল oddSumএর সােথ যাগ করা হেয়েছ। এই
programএ ( মেলখ) loopএর (ঘূণী) িভতের থাকা if-else (যিদ-নাহেল) চাইেলও েটা
loopএ িবভাজন করা স ব না। কারণ এখােন আমােদর আেগ থেক বুঝার উপায় নই input
নয়া ন রিট জাড় হেব নািক িবেজাড় হেব! কােজই if-else loopএর িভতেরই থাকেব।
al
i n t evenSum = 0 , oddSum = 0 ;
f o r ( i n t index = 1 ; index <= i n t e g e r ; ++index )
{
i n t number ; c i n >> number ; / / যাগান
i f ( number % 2 ! = 0 ) / / িবেজাড়
oddSum += number ;
else / / জাড়
evenSum += number ;
}
cout << evenSum << " " << oddSum << endl ;
৩৯৯
তারপর আেরা একিট একইরকম ব াপার দখা যাক। এখােন আমােদরেক integer (পূণক)
variableএর মান ১০এর কম হেল আমরা indexএর মান েলা smallSumএ যাগ করেত চাই,
আর integer variableএর মান ১০ বা বশী হেল indexএর মান েলা largeSumএ পেত
চাই। তা নীেচর programএ ( মেলখ) আমরা একটা loop (ঘূণী) ব বহার কের িলেখিছ, আর
loopএর িভতের রেয়েছ শত পরী া (integer < 10)। শত সত হেল smallSumএ যাগ
আর শত িমথ া হেল largeSumএ যাগ। এখােনও আমােদর একই রকেমর সম া, শত পরী ণ
িক loopএর (ঘূণী) িভতের দরকার আেছ? নািক এটােক loopএর বাইের নয়া স ব?
িনভর কের না। তরাং আমরা চাইেল এই শতিটেক loopএর (ঘূণী) বাইের িনেয় যেত পাির।
নীেচর program ( মেলখ) খয়াল কেরা আমরা তাই কেরিছ। Loopএ যাওয়ার আেগই আমরা
শত পরী া কেরিছ। শত (integer < 10) সত হেল আমরা একটা loopএ smallSum িনণয়
কেরিছ, আর শত িমথ া হেল আেরকিট loopএ (ঘূণী) largeSum িনণয় কেরিছ।
i n t smallSum = 0 , largeSum = 0 ;
i f ( i n t e g e r < 10)
f o r ( i n t index = 1 ; index <= i n t e g e r ; ++index )
smallSum += index ;
else
f o r ( i n t index = 1 ; index <= i n t e g e r ; ++index )
largeSum += index ;
cout << smallSum << " " << largeSum << endl ;
৪০০
এমন একিট program ( মেলখ) িলেখা যিট একিট ই-মা ার ছেকর বগ েলার িমক ন র
নীেচর মেতা কের িলখেব। খয়াল কেরা row (আিড়) িমক ১ থেক ৪, িক column (খািড়)
িমক উে া িদেক ৪ থেক ১। এই program তুিম েটা nested independent loop
(অ াি াধীন ঘূণী) ব বহার কের অথাৎ loopএর িভতের loop ব বহার কের িলখেব। চাইেল
for loop (জ ঘূণী), while loop ( ণ ঘূণী), do loop (কেরা ঘূণী) ব বহার করেত পােরা।
( 1 , 4) ( 1 , 3) ( 1 , 2) ( 1 , 1)
( 2 , 4) ( 2 , 3) ( 2 , 2) ( 2 , 1)
( 3 , 4) ( 3 , 3) ( 3 , 2) ( 3 , 1)
( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1)
তা চেলা আমরা থেম এই programিট ( মেলখ) for loop (জ ঘূণী) িদেয় িলিখ।
থেম চেলা আমরা থম rowএর (আিড়) িদেক নজর দই (1,4) (1,3) (1,2) (1,1)। এই
( 1 , 4) ( 1 , 3) ( 1 , 2) ( 1 , 1)
আমােদর য output (ফলন) িদেত বলা হেয়েছ সখােন যেহতু চারিট row (আিড়) আেছ,
সেহতু উপেরর programএর ( মেলখ) মেতা loop (ঘূণী) আমরা চারবার িলখেলই কাি ত
output (ফলন) পেয় যােবা। তেব িতটা loopএ কবল row ন েরর জায়গায় নীেচর মেতা
al
কের 1এর বদেল 2, 3, 4 িলেখ িনেত হেব। আর িতিট rowএর পের পেরর rowেত output
(ফলন) যাওয়ার জ আমােদর cout << endl; িলখেত হেব।
for ( i n t col = 4 ; col >= 1 ; −−c o l )
cout << " ( " << 1 << " , " << c o l << " ) " ;
cout << endl ;
for ( i n t col = 4 ; col >= 1 ; −−c o l )
cout << " ( " << 2 << " , " << c o l << " ) " ;
cout << endl ;
for ( i n t col = 4 ; col >= 1 ; −−c o l )
cout << " ( " << 3 << " , " << c o l << " ) " ;
cout << endl ;
for ( i n t col = 4 ; col >= 1 ; −−c o l )
cout << " ( " << 4 << " , " << c o l << " ) " ;
cout << endl ;
৪০১
}
cout << endl ;
5g
এবার চেলা এই programিটই ( মেলখিট) for loop (জ ঘূণী) ব বহার না কের আমরা
in
while loop ( ণ ঘূণী) ব বহার কের িলেখ ফিল। তেব row ও col সংখ া িনিদ কের ৪ ধের
না িনেয় আমরা এখােন rowCount ও colCount নােম েটা variable (চলক) ব বহার কর-
বা, যার মান তুিম চাইেল input ( যাগান) িনেত পােরা। For loop (জ ঘূণী) থেক while
am
loop ( ণ ঘূণী) লখা তা তমন কিঠন িকছু নয়। For loopএর (জ ঘূণী) initialisation
(আদ ায়ন) অংশটােক while loopএর ( ণ ঘূণী) আেগ িলেখ ফেলা, আর জ loopএর (ঘূ-
ণী) update (হালায়ন) অংশটােক while loopএর statement (িববৃিত) অংেশর শেষ িদেয়
দাও। তুিম চাইেল একটা loopেক for loop রেখ আেরকটােক while loop কের িদেত পােরা।
তা ছাড়া তুিম চাইেল for বা while loop বাদ িদেয় do loopও ব বহার করেত পােরা।
al
i n t rowCount = 4 , colCount = 4 ;
i n t row = 1 ;
while ( row <= rowCount )
{
i n t c o l = colCount ;
while ( c o l >= 1 )
{
cout << " ( " << row << " , " << c o l << " ) " ;
−−c o l ;
}
cout << endl ;
++row ;
}
৪০২
Loopএর (ঘূণী) িভতের loop অথাৎ nested loop (অ াি ঘূণী) ব বহার কের এমন এক-
িট program ( মেলখ) িলেখা যিট নীেচর মেতা output (ফলন) িদেব। এইে ে িভতেরর
loopিট বাইেরর loopএর ওপের িনভরশীল হেব: িভতেরর loopএর indexএর ( চক) মান
বাইেররিটর indexএর মােনর সােথ স িকত হেব। তুিম িতন রকম loopএর (ঘূণী) য কানিটই
ব বহার করেত পােরা।
( 1 , 1)
( 2 , 2) ( 2 , 1)
( 3 , 3) ( 3 , 2) ( 3 , 1)
( 4 , 4) ( 4 , 3) ( 4 , 3) ( 4 , 1)
আমরা থেম নীেচর মেতা কের েটা nested independent loop (অ াি াধীন ঘূণী)
িলেখ ফলেত পাির যটা আমরা িঠক আেগর পােঠই িশেখিছ। আেলাচনার ধারাবািহকতা বুঝার
েটা nested independent loop (অ াি াধীন ঘূণী) লখার ফেল আমরা য output
(ফলন) পােবা তা নীেচর বাম পােশর মেতা। খয়াল কের দেখা ছেকর িতিট rowেত (আিড়)
িতিট columnএ (খািড়) সংি ঘেরর িমক ন র লখা হেয়েছ। এখন এটার সােথ আমােদর
এই পােঠ য output (ফলন) চাওয়া হেয়েছ (ডান পােশরিট) তা িমলাও।
al
( 1 , 4) ( 1 , 3) ( 1 , 2) ( 1 , 1) ( 1 , 1)
( 2 , 4) ( 2 , 3) ( 2 , 2) ( 2 , 1) ( 2 , 2) ( 2 , 1)
( 3 , 4) ( 3 , 3) ( 3 , 2) ( 3 , 1) ( 3 , 3) ( 3 , 2) ( 3 , 1)
( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1) ( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1)
এবার একটা ব াপার খয়াল কেরা য ডান পােশর য output (ফলন) চাওয়া হেয়েছ সখা-
ন ত ক rowেত (আিড়) এমন একটা ঘর থেক লখা হেয়েছ যখােন row (আিড়) আর
column (খািড়) সমান, যমন (1,1), (2,2), (3,3), (4,4)। Columnএর িমক rowএর -
িমক থেক বড় হেল সই ঘের িকছু দখােনা হয় নাই। এটার জ আমরা আমােদর programএ
( মেলখ) কবল িভতেরর loopিট (ঘূণী) িকি ত বদেল িনেবা। িভতেরর loopিট আেগ িছেলা
for ( int col = 4; col >= 1; −−col), এখন সখােন নীেচর মেতা কের আিদমান 1 এর
বদেল row িলেখ িদেবা। এর ফেল িভতেরর loopিট আর াধীন থাকেলা না, কারণ এিট কতবার
ঘুরেব সটা িনভর করেব বাইেরর loopএ row এর মান কেতা তার ওপর।
f o r ( i n t row = 1 ; row <= 4 ; ++row )
{
৪০৩
উপেরর এই programিটর ( মেলখ) ফেল আমরা য রকম output পােবা সিট নীেচর
বাম পােশর মেতা, িক আমরা য output (ফলন) পেত চাই তা ডান পােশর মেতা।
( 1 , 1) ( 1 , 1)
( 2 , 2) ( 2 , 1) ( 2 , 2) ( 2 , 1)
( 3 , 3) ( 3 , 2) ( 3 , 1) ( 3 , 3) ( 3 , 2) ( 3 , 1)
( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1) ( 4 , 4) ( 4 , 3) ( 4 , 2) ( 4 , 1)
খয়াল কেরা এখনও িঠক হেয় ওেঠ িন। যথাযথ ভােব ফাঁকা িদেলই হেয় যােব। তা ফাঁ-
কা দওয়ার ে খয়াল কেরা আমরা ১ম rowেত ফাঁকা িদেয়িছ ৩িট, ২য়িটেত ২িট, ৩য়িটেত
১িট, ৪থিটেত ০িট। অথাৎ row এর মান অ যায়ী 4−row সংখ ক ফাঁকা িদেয়িছ। অথবা বলেত
পােরা ৪ থেক গানা ও ফাঁকা িদেত
5g
কেরিছ, িক rowর চেয় বড় সংখ া পয ফাঁকা িদেয়-
িছ, আর সমান হেল তা ঘেরর ানাংক দখােনা কেরিছ। তাহেল সব িমিলেয় আমরা নীেচর
programএর ( মেলখ) মেতা কের আেরকিট loop (ঘূণী) ব বহার করেত পাির ফাঁকা দওয়ার
জ । এই loopিটও কত বার ঘুরেব, সটা িক বাইেরর loopএর ওপর িনভর করেব।
in
/ / িত এরrow জ একটা কের পাক।
f o r ( i n t row = 1 ; row <= 4 ; ++row )
{
am
cout << " ( " << row << " , " << c o l << " ) " ;
cout << endl ;
}
৪০৪
Loopএর (ঘূণী) িভতের loop তার িভতের loop ব বহার কের িতনিট সংখ া 1, 2, 3 এর
িব াস (permutation) output (ফলন) দাও। িব াস েলােত একই সংখ া বারবার ব বহার
করা যােব হেল কী করেব, আর একই সংখ া এেকর অিধকবাব ব বহার না করা গেল কী করেব?
f o r ( i n t x = 1 ; x <= 3 ; ++x )
f o r ( i n t y = 1 ; y <= 3 ; ++y )
f o r ( i n t z = 1 ; z <= 3 ; ++z )
cout << x << " " << y << " " << z << endl ;
1
1
1
1
1
1
1
2
1
2
3
1
2
2
2
2
1
1
1
2
1
2
3
1
5g 3
3
3
3
1
1
1
2
1
2
3
1
in
1 2 2 2 2 2 3 2 2
1 2 3 2 2 3 3 2 3
1 3 1 2 3 1 2 3 1
am
1 3 2 2 3 2 2 3 2
1 3 3 2 3 3 2 3 3
ােনর জে ও আেরকিট loop িদেয় সংখ া িতনিট এেক এেক বসােত হেব। কােজই সব িমিলেয়
আমােদর loop লাগেব িতনিট, আর িব াস পাওয়া যােব সবেমাট ২৭ িট। তা এরকম একিট
program আমরা উপের দখালাম, খুবই সহজ program। আর ওই programএর output
(ফলন) কমন হেব সটাও উপের দখােনা হেয়েছ। তেব ােনর ব বহার বাড়ােনার জ ২৭ িট
িব াস নীেচ নীেচ না লেখ িতন ে (column) দখােনা হেয়েছ, আসেল ও েলা এেকর পর
এক নীেচ নীেচ আসেব।
উপেরর programএ ( মেলখ) িক একই সংখ া এেকর অিধকবার ব বহার করা হেয়েছ।
যিদ সটা করেত না দয়া হয়, তাহেল আমরা যটা করেত পাির তা হেলা যখনই িট সংখ া এক
হেয় যােব তখন আমরা output (ফলন) িদেবা না। অথাৎ x যিদ yএর সমান হয় অথবা x যিদ z
এর সমান হয়, অথবা y যিদ zএর সমান হয় তাহেল output হেব না, আর না হেল output হেব।
তার মােন output দয়া হেব ! (x == y | | x == y | | y == z) শত সত হেল, আর দয়া
হেব না শত িমথ া হেল। বুলক বীজগিণেতর িড মরগ ােনর সূ া যায়ী আমরা এটােক সরলীকরণ
করেত পাির। তাহেল পােবা ! (x == y) && !(x == z) && !(y == z) বা (x != y && x !
= z && y != z)। সবিমিলেয় এমন program আর তার output হেত পাের নীেচর মেতা।
f o r ( i n t x = 1 ; x <= 3 ; ++x )
৪০৫
f o r ( i n t y = 1 ; y <= 3 ; ++y )
f o r ( i n t z = 1 ; z <= 3 ; ++z )
i f ( x ! = y && x ! = z && y ! = z )
cout << x << " " << y << " " << z << endl ;
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
একটা িবষয় খয়াল কেরা উপেরর programএ ( মেলখ) িতনিট loopই িক িতনবার কের
ঘুরেব, ফেল মাট ২৭ িট পাকই স হেব, তেব এই ২৭িট পােকর মা ৬িটেত output (ফলন)
5g
আসেব, বাঁকী েলােত if-elseএর (যিদ-নাহেল) শত িমথ া হওয়ায় output আসেব না। কথা
হে ওই য ২১িট পাক য েলােত কান output আসেব না, স েলা কমােনা স ব িকনা। িকছু-
টা তা স ব। ি তীয় loopএর কথা িবেবচনা কেরা, যখন আমরা জািনই য y এর মান x এর সমান,
তখন তা তৃতীয় loopিট ঘুিরেয় লাভ নই, আমােদর কান output আসেব না। কােজই আমরা
if else interaction (যিদ নাহেল িমথি য়া) িবেবচনা কের নীেচর programএর ( মেলখ)
in
মেতা কের if (x != y) ক তৃতীয় loopএর উপের িনেয় আসেত পাির। এই programএর
ে কান loop কত বার ঘুরেব? তুিম িক িনেজ িনেজ স েলা িহসাব করেত পারেব?
am
আ া তামােক িতনিট সংখ া না িদেয় বরং চারিট বা পাঁচিট বা আেরা বশী সংখ ার িব াস
(permutation) output (ফলন) িদেত বলা হয় তুিম কী পারেব তার জে program ( ম-
লখ) িলখেত? িন য় পারেব, যতিট সংখ া িনেয় িব াস করেত হেব তত েলা loop (ঘূণী) িনেলই
হেয় গেলা। এই য loop inside loop (ঘূণীর িভতের ঘূণী), তার িভতের loop, তার িভতের
আেরা loop এ েলা হেলা deeply nested loop (গভীর অ াি ঘূণী), যতটা িভতের একটা
loop ততটা হেলা তার গভীরতা। যমন উপেরর programএ সবেচেয় িভতেরর loopএর গভী-
রতা হেলা ৩, মাঝখােনরটার গভীরতা হেলা ২ আর বাইেররটার গভীরতা হেলা ১। আমরা সাধারণত
খুব বশী গভীরতার nested loop তরী করেত চাই না। যমন আেরা বশী সংখ ার িব াস কর-
ত গেলই আমরা আর এ রকম deeply nested loop ব বহার করেবা না, বরং আমরা অ
কান প িতর খাঁজ করেবা। তাছাড়া এরকম deep loop আেরা একটা ে ও অ িবধাজনক।
যমন ধেরা তামােক input ( যাগান) িনেত হেব কয়টা সংখ ার িব াস করেত চাও। তা সটা-
তা আেগ থেক মােন program লখার সময় জানা স ব না, কােজই program লখার সময়
কত গভীরতা পয loop িলখেবা সটাও জানা স ব না, আর তাই এরকম কের program লখা
আসেলই স ব হেব না।
৪০৬
ধেরা তামােক এমন একটা program ( মেলখ) িলখেত হেব যিট একিদেনর ২৪ ঘ টায় িত
সেকে ড সময় output (ফলন) িদেব ১০:৩৯:৪৬ এই ছাঁেচ। এই program তামােক nested
loop (অ াি ঘূণী) ব বহার না কের কবল একিট loop (ঘূণী) ব বহার কেরই িলখেত হেব।
থেম আমরা nested loop (অ াি ঘূণী) ব বহার কেরই programিট ( মেলখ) িলিখ।
আমােদর ঘ টা চলেব ০ হেত ২৩ পয , িমিনট চলেব ০ হেত ৫৯ পয , আর সেক ডও চল-
ব ০ হেত ৫৯ পয । তরাং ৩ depthএর nested loop হেলই আমােদর চলেব। উপেরর
5g
programএ দেখা িতনিট loop একটার িভতের আেরকটা িলেখ আমরা তা কেরিছ।
এবার আমরা nested loop (অ াি ঘূণী) ব বহার না কের একটা loop ব বহার কের
programিট ( মেলখ) লখার চ া করেবা। সারািদেন আমােদর মাট সেক ড আেছ কতিট?
২৪ * ৬০ * ৬০ = ৮৬৪০০িট। তাহেল আমােদর একিট loop চালােত হেব ৮৬৪০০ বার। আর
in
িতবাের সেক ডেক ৬০ িদেয় ভাগ কের িমিনেট আর িমিনটেক ৬০ িদেয় ভাগ কের ঘ টায় কাশ
করেত হেব। তারপর অবিশ সেক ড, অবিশ িমিনট, ও কত ঘ টা হেলা তা outputএ দখােত
হেব। ভাগফল / আর ভাগেশষ % ব বহার কের আমরা এই program নীেচর মেতা কের িলখেবা।
am
m = s / 60 ; / / িমিনেট পা র
s = s % 60 ; / / অবিশ সেক ড
al
h = m / 60 ; / / ঘ টায় পা র
m = m % 60 ; / / অবিশ ঘ টা
cout << h << " : " << m << " : " << s << endl ;
}
তুিম িক চাইেল উপেরর মেতা কের িতবার সেক ডেক ৬০ িদেয় ভাগ কের িমিনেট, তার-
পর আবার ৬০ িদেয় ভাগ কের ঘ টায় কাশ না কের অ ভােবও করেত পােরা। ধেরা সেক ড
loopএর িত পােক ১ কের বাড়েলা। আর যখন ৬০ সেক ড হেয় গেলা তখন আমরা িমিনেট
এক যাগ কের িদলাম, আর সেক ডেক আবার ০ বািনেয় িদলাম। একই ভােব িমিনট যিদ ৬০
হেয় যায় তাহেল ঘ টােক এক বািড়েয় িদলাম, আর িমিনটেক ০ বািনেয় িদলাম। আর যখন ঘ টা
২৪ হেয় গেলা তখন program শষ কের িদলাম। তা এই রকম program ( মেলখ) আমরা
নীেচ দখালাম।
int h = 0 , m = 0 , s = 0 ; / / আিদ মান
৪০৭
5g
আসেল য কান nested loopেক (অ াি ঘূণী) এই ভােব কবল একটা loop িদেয়ই িলেখ
ফলা যায়। Nested loopএ indexএর ( চক) মান েলা য েম বদল হেত থােক, উপেরর
এই একটা loopএও variable েলার মান সই একই েমই বদল হেত থােক।
in
১৬.২২ Nested Loop in Disguise (ছ েবেশর অ াি ঘূ্ণী)
n পয ঘুরেব। এবার ব নীর িভতেরর িতিট পেদর িদেক তাকাই। ধরা যাক আমরা kতম পদ
িবেবচনা করিছ, তাহেল বুঝেতই পারেছা পদিট হেব (1 + 2 + . . . + k)। এখােন এই পদিট
িনেজও একটা ধারা। কােজই আমােদর পুেরা ধারািট আসেল ধারার িভতের ধারা, বা nested
series (অ াি ধারা)। যাইেহাক, kতম পদ (1 + 2 + . . . + k) তা আমরা আেরকিট loop
1 থেক k পয ঘুিরেয় সহেজই িহসাব কের ফলেত পাির। তাহেল সব িমিলেয় দ ধারার জ
আমােদর loop inside loop বা nested loop (অ াি ঘূণী) ব বহার করেত হেব।
i n t n = 10 ; // input িনেত পােরা
int s = 0 ; // পুেরা ধারার যাগফল
for ( i n t k = 1 ; k <= 10 ; ++k )
{
int t = 0 ; / / ব নীেত পেদর যাগফল
for ( i n t l = 1 ; l <= k ; ++ l )
t += l ; // ব নীর িভতের যাগফল
s += t ; // পুেরা ধারার যাগফল
}
৪০৮
উপেরর programএ ( মেলখ) েটা nested loop (অ াি ঘূণী) িমিলেয় িঠক কতবার
ঘুরেব? বাইেরর loopএ kএর মান যখন 1 তখন িভতেরর loop ঘুরেব 1 বা, বাইেরর loopএ
kএর মান যখন 2 তখন িভতেরর loop ঘুরেব 2 বার, এই ভােব বাইেরর loopএ kএর মান যখন
n তখন িভতেরর loop ঘুরেব n বার। কােজই বাইেরর loopএর সব পাক িমিলেয় িভতেরর loop
ঘুরেব 1 + 2+ . . . + n = n(n+1)/2 বার। তার মােন nএর মান 10 হেল ই loop িমেল পাক
খােব সবেমাট 10(10+1)/2 = 55 বার। কথা হে এই ধারািটর যাগফল বর করেত আসেলই
িক এত পােকর দরকার আেছ? িবেশষ কের ব নীর িভতেরর িতিট পদ কন আলাদা কের আবার
নতুন কের িহসাব করেত হেব? আেগর ব নীর িভতেরর পদ জানা থাকেল তা তার সােথ কবল
পেরর integer (পূণক) যাগ কেরই পেরর ব নীর িভতেরর পদ বর করা স ব।
i n t n = 10 ; / / input িনেত পােরা
i n t s = 0 , t = 0 ; / / ধারা ও পেদর যাগফল
f o r ( i n t k = 1 ; k <= 10 ; ++k )
{
}
t += k ;
s += t ;
/ / ব নীর িভতের যাগফল
িভতের পেদ তা kটাই অিতির আেছ। তারপর t টােক sএর সােথ যাগ করেলই ধারার যাগফল
হেয় গেলা। তা এই programএ loop কত বার ঘুরেব? বুঝেতই পারেছা মা 10 বার।
তাহেল আমরা দখলাম দখেত nested loop (অ াি ঘূণী) মেন হেলও অেনক সময় একটা
loop ব বহার কেরই দ program ( মেলখ) রচনা করা যায়। Nested loop িলখার সময়
সটা আসেলই nested loop নািক ফ ছ েবশী এ ব াপাের সতক থাকেব কমন!
al
২. For loopএ (জ ঘূণী) চারিট অংশ আেছ। এ েলা হেলা initialisation (আদ ায়ন),
condition (শত), update (বৃি ), statement (িববৃিত)। কান অংশ কখন কতবার
execute হয়, কার পের কানিট execute হয় আেলাচনা কেরা।
৩. সমা র ধারার বতমান পদিটেক loopএর (ঘূণী) indexএর সােথ স িকত করা বনাম
আেগর পােকর সােথ স িকত করার মেধ কী তফাৎ ঘেট আেলাচনা কেরা।
৪০৯
৬. Loopএ (ঘূণী) empty condition (শত ফাঁকা) হেল loop থামেব কী কের?
৮. For loopেক (জ ঘূণী) কী ভােব সাধারণ (general) loop িহসােব ব বহার করা যায়?
5g
১. নীেচর নকশার মেতা নকশা তরী কেরা। এই নকশার কানার িব েলােত + আেছ, এক-
দম বাম আর ডান পােশ আেছ |, আর অ সব েলা হেলা −, িতিট সািরেত − আেছ ২০িট
কের। েত ক সািরর − েলার জ তামােক একিট কের loop (ঘূণী) িলখেত হেব।
+−−−−−−−−−−−−−−−−−−−−+
in
|−−−−−−−−−−−−−−−−−−−− |
|−−−−−−−−−−−−−−−−−−−− |
+−−−−−−−−−−−−−−−−−−−−+
am
এই program ( মেলখ) রচনা করা খুবই সহজ। আমােদর চারিট সািরর জ চারিট
for loop (জ ঘূণী) লাগেব। েত ক সািরর ও শেষ সংি িবেশষ িচ েলা
িদেত হেব। আর loop লাগেব মাঝখােনর − িচ বারবার লখার জ ।
cout << " + " ; / / উপের বাম কানা
for ( i n t i = 0 ; i < 20 ; ++ i )
al
৪১০
২. এমন একিট program ( মেলখ) রচনা কেরা যিট একিট ধনা ক (positive) পূণক
(integer) input ( যাগান) িনেয় সটা মৗিলক (prime) সংখ া িকনা িনণয় করেব।
এই programিট ( মেলখ) নানান ভােব করা যেত পাের। আমরা থেম সবেচেয় সহজ-
িট িক সবেচেয় ধীর গিতর উপায়িট দিখ। একিট সংখ া n মৗিলক িকনা সটার পরী া
হেলা একিট loop (ঘূণী) চািলেয় ২ থেক কের n − 1 পয িতিট িদেয় n িবভাজ
িকনা পরী া কের দেখা। যিদ একিট িদেয়ও িবভাজ হয় তাহেল n মৗিলক নয়, আর স-
ে loop আর চালােনা দরকার নই, break ( াি ) িদেয় বর হেয় আসেত হেব। আর
loop যিদ শষ পয চেল, মােন loop indexএর (ঘূণীর সূচক) মান যিদ n হয়, তাহেল
n মৗিলক। নীেচ programিট ( মেলখ) দেখা।
i f ( n <= 0 )
{
cout << " negative " << endl ;
ret ur n EXIT FAILURE ;
5g
/ / ঋণা ক িকনা পরী া
in
}
f o r ( k = 2 ; k < n ; ++k )
i f ( n % k == 0 )
break ; / / িবভাজ হেল আেগই াি
i f ( k == n ) / / শষ পয ঘূণী চেলেছ
cout << " prime yes " << endl ;
al
একটু খয়াল করেলই বুঝেব কান সংখ া মৗিলক িকনা তার জ আসেল ২ থেক n পয
পরী া করা দরকার নই। আসেল n/2 পয অথবা আেরা ভােলা কের বলেত গেল n
এর বগমূল পয পরী া করেলই চেল। কােজই উপেরর programিট চাইেল আমরা আর
একট দ কের িলখেত পাির। নীেচ আমরা কবল পিরবতন সংি অংশ দখালাম।
৪১১
৩. এমন একিট program ( মেলখ) িলেখা যিট েটা ধনা ক পূণক (integer) input
িনেয় তােদর গসা (HCF) ও লসা (LCM) িনণয় কের।
িট সংখ া a ও bএর গসা হেলা এমন একিট সংখ া g যিট ারা a ও b উভয় সংখ া
িবভাজ হয়। এই রকম একািধক সংখ া থাকেল সবেচেয় বড়িট হেব গসা । গসা বর
করা হেয় গেল আমরা a ও b এর ণফল ক গসা িদেয় ভাগ কের লসা পেত পাির। তা
এই program ( মেলখ) িলখেত আমরা ১ থেক কের িতিট সংখ া িদেয় ভাগ কের
দখেবা a ও b উভয় সংখ া িবভাজ িকনা। যিদ িবভাজ হয় তাহেল ভাজকিট আমােদর
গসা হেত পাের, আর ণফলেক গসা িদেয় ভাগ কের লসা পেত পাির। তেব আমােদর
এখােনই থেম গেল হেব না, কারণ এর চেয় বড় কান সংখ া সাধারণ ভাজক িহসােব
পাওয়া যায় িকনা তা দখেত হেব। তেব একটা িবষয় মেন রাখেত হেব গসা g কখনই a
বা b কানটার চেয়ই বড় হেব না, েটার চেয়ই ছাট হেব।
int a , b;
c i n >> a >> b ; 5g
cout << "two numbers ? " ; / / যাগান যাচনা
/ / চলক িট
/ / যাগান নওয়া
in
i f ( a < 0 | | b < 0) / / ঋণা ক িকনা?
{
cout << " negative " << endl ;
ret u rn EXIT FAILURE ;
am
চাইেল উপেরর programেক আর একটু দ করেত পােরা। যেহতু গসা সংখ া েটার
কানটা থেকই বড় হয়, কােজই আমরা সংখ া েটার ছাটিট থেক loop (ঘূণী)
করেত পাির। আর েটােক ভাগ করা যায় এমন সবেচেয় বড় ভাজকিট যেহতু আমােদর
দরকার, আমরা তাই loopিট ছাট থেক কের বড়র িদেক চালােবা, আর থমিট
পাওয়া মা loop থেক বর হেয় আসেবা।
/ / চলক ঘাষণা , input ও negative checking এখােন কেরা
int p = a ∗ b , h , l ; / / ণফল , গসা ও লসা
৪১২
আেরা এক ভােব যমন মাগত ভােগর মাধ েমও আমরা গসা িনণয় করেত পাির। থেম
একিট সংখ ােক ভাজক আর আেরকিটেক ভাজ ধের িনেয় ভাগেশষ বর করেবা। তারপর
আেগর ভাজকিট হেয় যােব নতুন ভাজ আর ভাগেশষিট নতুন ভাগেশষ। তারপর আবার
ভাগ ও ভাজকিটেক নতুন ভাজ , ভাগেশষেক নতুন ভাজক । এই কের চলেব যত ণ ভাগ-
শষ না হে । আর সই মুহূেতর ভাজকিটই হেব গসা ।
int p = a ∗ b; 5g
িফিরি ১৬.১১: Determining HCF and LCM (গসা ও লসা িনণয়)
int t , h , l ; / / সামিয়ক , গসা , লসা
/ / ণফল
in
do
{
t = a % b; / / ভাগেশষ িনণয়
a = b; / / আেগর ভাজক হেব নতুন ভাজ
am
h = a , l = p / a ; / / গসা ও লসা
al
৪১৩
বার
5g করেল আমরা outputএ পােবা 2 1 0 িক একবার
হওয়ার পের তারপর িতবার 2 িদেয় ভাগ করেলও nএর মান ই থাকেব। কােজই
loopএর (ঘূণী) শত কখেনা িমথ া হেব না। কােজই আমরা এেকর পর এক অসীম সংখ ক
পেত থাকেবা। অথাৎ এিট একিট infinite loop (অসীম ঘূণী) হেয় যােব।
9 4 1 0 −1
in
0 1 2 3 4 4
2 1 0 0 0 0 ....
am
Infinite loop িঠক করেত চাইেল আমরা তৃতীয় loopএর শতিট n >= 0 বদেল n > 0
িলেখ িদেত পাির। তােত তৃতীয় loopএর কারেণ output আসেব 2 1 0।
করেবন আর ভাগফেলর বগ দখােবন। ভাগ করেত িগেয় হেয় গেল থেম যােবন।
তরাং তার কাি ত output হে 25 4 1 িক programিট হেত সরকম output
আসেছ না। তা তুিম থেম এই program যমন আেছ তমন রেখই এর output িন-
ণয় কেরা। আর সে ে indentation কমন হেব সটাও দখাও। তারপর কাি ত
ফলাফল পেত গেল programএ কী পিরবতন করেত হেব সটাও কের দখাও।
i n t n = 10 ;
while ( n > 0 )
n /= 2 ;
cout << n ∗ n << " " ;
cout << endl ;
উপেরর programিটেত indentation দেখ মেন হেয় loopএর (ঘূণী) পেরর ই সা-
ির loopএর আওতার মেধ । িক গঠনরীিত অ যায়ী আসেল তা হেব না, কারণ এখােন
ব ব নী দয়া নই। ফেল কবল n /= 2টাই loopএর আওতায়। কােজই loop চলেব
৪১৪
িঠকই, িতবার 2 িদেয় ভাগ হেব, আর হেল loop থেম যােব। তারপর loopএর বা-
ইের থাকা coutএর কারেণ আমরা 0এর বগ 0ই outputএ পােবা। ফেল output হেব
কবল 0। আর এই ে indentationএর িবষয়িট িঠকঠাক করেল program দখেত
হেব নীেচর মেতা্।
i n t n = 10 ;
while ( n > 0 )
n /= 2 ; / / কবল এিট ঘূনীর িভতের
cout << n ∗ n << " " ; / / ছাড়ন িঠক করা হেলা
cout << endl ;
৬. নীেচর programিট ( মেলখ) কী করেব বণনা কেরা। তারপর এিটেক এমন ভােব আবার
িলেখা যােত এেত while loopএর ( ণ ঘূণী) বদেল do loop (কেরা ঘূণী) ব ব ত হয়,
িক সব িমিলেয় programএর বিশ একই থােক।
int n ;
cout << " p o s i t i v e number : " ;
al
c i n >> n ;
while ( n <= 0 )
{
cout << " Not p o s i t i v e . " << endl ;
cout << " p o s i t i v e number : " ;
c i n >> n ;
}
উপেরর programিট ( মেলখ) ধনা ক সংখ া দরকার এরকম input prompt ( যা-
গান যাচনা) কের nএর মান input ( যাগান) িনেব। তারপর n যিদ ধনা ক না হয় তাহেল
loopএর (ঘূণী) িভতের ঢুকেব আর message (বাতা) দখােব ধনা ক নয়, আর আবার
input prompt কের nএর মান input িনেব। তারপর loopএর িভতের আবার পরী া
করেব অধনা ক িকনা, এবং এই ভােব চলেত থাকেব যত ণ না nএর মান ধনা ক হে ।
সব িমিলেয় বলা যায়, কমপে একবার input prompt িদেয় n এর মান input নওয়া
৪১৫
হেব: loopএর বাইেরর input prompt ( যাগান যাচনা) ও input ( যাগান) নওয়া-
টা হেলা সিট। তরাং আমরা খুব সহেজই do loop (কেরা ঘূনী) ব বহার করেত পাির
এখােন।
int n ;
do
{
cout << " p o s i t i v e number : " ;
c i n >> n ;
i f ( n <= 0 )
cout << " not p o s i t i v e . " << endl ;
}
while ( n <= 0 ) ;
তুিম চাইেল নীেচর মেতা কেরও িলখেত পােরা, যখােন আমরা ধনা ক হেল বরং loop (ঘূ-
5g
ণী) থেক break ( াি ) িনেবা। আর সে ে অব while(n <= 0) না িলেখ আমরা
কবল while(true) ও িলখেত পাির। আবার চাইেল do loop (কেরা ঘূনী) থেক while
loopএ ( ণ ঘূণী) ফরতও যেত পাির, যখােন নীেচর while(true) টােক সিরেয় িনেয়
িগেয় do এর বদেল বিসেয় িদেবা।
in
int n ;
do
{
am
৭. নীেচর programিটর ( মেলখ) output কী? এিটেক এমন ভােব বদেল লেখা যােত
block (মহ া) ব বহার না কেরই একই ফলাফল পাওয়া যায়। তারপর programিটেক
while loop ( ণ ঘূ্ণী) ব বহার না কের for loop (জ ঘূণী) ব বহার কের িলেখা।
int i = 5 ;
while ( i > 0 )
{
i = i + 1;
cout << i << endl ;
}
উপেরর programএ ( মেলখ) loopএর িভতের iএর মান আেগ কমােনা হে তারপর
সটা outputএ (ফলন) দখােনা হে । কাজিট আমরা outputএ দখােনার সমেয়ই
করেত পাির pre-increment (পূব বৃি ) ব বহার কের, যা নীেচ দখােনা হেলা।
৪১৬
int i = 5 ;
while ( i > 0 )
cout << −− i << endl ;
তুিম চাইেল for loop (জ ঘূণী) ব বহার কের নীেচর মেতা কেরও িলখেত পােরা।
f o r ( i n t i = 5 ; −− i ; )
cout << −− i << endl ;
৮. এমন একিট program রচনা কেরা যিট একিট loopএর (ঘূণী) িভতের ব বহারকারীর
কােছ থেক এেকর পর এক একিট কের পূণক (integer) input িনেব। Input নওয়া
সংখ ািট ধনা ক না হেল program থেক বর হেয় যােব, আর ধনা ক হেল মােনর -
মা সাের সংখ ািটর উৎপাদক েলােক পরপর এক সািরেত output (ফলন) িদেব, আর
পেরর সংখ া input িনেত চাইেব। Sample input-output ( যাগান-ফলন) িন প:
> 0 f a c t o r s <= 0 ends
number i s ? 36
5g
f a c t o r l i s t : 36 18 12 9 4 3 2 1
> 0 f a c t o r s <= 0 ends
number i s ? −1
in
program f i n i s h e d !
আমরা এখােন একটা infinite loop (অসীম ঘূণী) িনেবা েত while(true) িলেখ,
am
outputএ (ফলন) দখােত হেব। তুিম চাইেল এখােন do while (কেরা ঘূণী) ব বহার
করেত পারেত, আমরা সিট তামার িনেজর চ ার ওপের ছেড় িদলাম, চ া কের দেখা।
৪১৭
৯. এমন একিট program ( মেলখ) রচনা কেরা যিট একিট ধনা ক পূণ সংখ া যমন
23154 input ( যাগান) িনেয় output িদেব 45132।
i n t n , r , t ; / / ন র , উ া , সামিয়ক
cout << "number? " ;
c i n >> n ;
i f ( n <= 0 )
{
cout << " not p o s i t i v e " << endl ;
ret u rn EXIT FAILURE ;
}
r = 0; //
while ( n > 0 )
{
t = n % 10 ;
5g
েত উ া ন র
/ / একেকর অ
in
r = r ∗ 10 + t ; / / উ ার িপেছ
n = n / 10 ; / / অবিশ অংশ
}
am
িনেল। এখন rএ যা আেছ তার িপছেন ওই অ িট লাগােত হেল rএর মানেক আেগ ১০ িদেয়
ণ কের িনেত হেব কারণ এ েলা ত বােমর িদেক এক ঘর সের যােব, আর তােত ডােনর
য ানিট ফাঁকা হেলা সখােন ওই অ িট বিসেয় িদেত হেব, অথাৎ যাগ করেত হেব।
Loopএর পেরর পােকর জে n হেব আেগর পােকর একেকর অ ছাড়া বাঁকী অংশ, আর
সিট পাওয়া যােব ১০ িদেয় n ক ভাগ কের।
১০. এমন একিট program ( মেলখ) রচনা কেরা যিট এেক এেক সংখ া input ( যাগান)
িনেব যত ণ ধনা ক সংখ া দওয়া হে , অধনা ক সংখ া হেল program শষ হেব।
Programিটর output (ফলন) হেব input নয়া সংখ া েলার মেধ সবেচেয় বড়িট আর
সিট কত ন ের input দওয়া হেয়িছেলা সই িমক ন রিট।
i n t l a r g e = 0 , index = 0 ; / / েত েটাই
৪১৮
}
5g
cout << " l a r g e = " << l a r g e << endl ;
cout << " index = " << index << endl ;
in
উপেরর programিটর ( মেলখ) েত আমরা বড় সংখ া িহসােব আিদেত ধের িনেয়িছ
, যিট input দওয়া য কান ধনা ক সংখ ার চেয় ছাট হেব। অেনক েলা সংখ ার
মেধ সবেচেয় বড় সংখ ািট বর করেত চাইেল আমরা সাধারণত েত ছাট একটা সং-
am
খ ােক ফলাফল িহসােব ধের নই। যােত সটার চেয় তুলনা কের কের আেরা বড় আেরা
বড় সংখ া পাওয়া যায়। তুিম যিদ অেনক েলা সংখ ার মেধ সবেচেয় ছাট সংখ ািট বর
করেত চাও তাহেল তামােক েত বড় একটা সংখ ােক ফলাফল িহসােব ধের িনেত হেব।
যাইেহাক এরপর উপেরর programিট দেখা input prompt কের input িনেয় থেম
পরী া কেরেছ ধনা ক িকনা। ধনা ক না হেল loopএ (ঘূণী) break ( াি ) িদেত হেব
আর না হেল যেহতু আেরকিট ধনা ক সংখ া পাওয়া গেলা তাই িমক ন র এক বাড়েব।
al
এরপর বতমােনর বড়িট সােথ তুলনা কের যিদ দখা যায় নতুন ন রিট বড়, তাহেল নতুন
ন রিটই হেব বড় আর তার indexিট আেরকিট variableএ িনেত হেব। Loopএর বাইের
কবল বড় সংখ ািট আর তার index outputএ (ফলেন) যােব।
৪১৯
5g
থেম n variable declare (চলক ঘাষণা) কের, তুিম input prompt ( যাগান যাচ-
না) িদেয় nএর মান input িনেব। তারপর n ধনা ক িকনা পরী া কের দখেব। n ধনা ক
in
না হেল একিট loopএর (ঘূণী) িভতের আবার input িনেত পােরা যত ণ না ধনা ক মান
দওয়া হে ্ এই অংশটু কের দওয়া হেলা না, িনেজর কেরা। আমরা কবল িফেবানা-
ি পদ েলা িনণেয়র অংশটু দিখ। থম িট পদ ধারণ করার জ আমােদর first
আর second নােম িট আর পেরর পেদর জ next নােম আেরকিট variable (চলক)
am
পাির। তা next িহসাব করার পের এখন আমােদর থম পদিট হেব আেগ যিট ি তীয়
পদ িছেলা সিট, আর ি তীয় পদিট হেব next পদিট। এবং তারফেলই পেরর পােক first
ও second যাগ করেল আমরা তারওপেরর পদিট পােবা। Loop (ঘূণী) চলেব এখােন
৩ থেক n হওয়া পয । খয়াল কেরা kএর মান যত আমরা loopএর (ঘূণী) blockএর
িভতের তততম পদিট িহসাব করিছ, আর তারপেরর পদিটর জ িত িনি ।
১২. একিট ধনা ক পূণক n input িনেয় থম n াভািবক সংখ ার (১, ২, ৩, ...) যাগফল ও
ণফল িনণেয়র program ( মেলখ) রচনা কেরা। তুিম হয়েতা জােনা থম n াভািবক
সংখ ার ণফলেক factorial (উৎপাদকীয়) বলা হয়। Factorial খুবই বড় সংখ া হয়
যা intএ নাও ধরেত পাের, কােজই n বড় হেল আমরা উ াপা া ফল পেত পাির।
i n t n ; / / মান তুিম যাগান িনেয় ধনা ক িকনা পরী া করেব।
৪২০
{
sum += k ; // যাগ কেরা
product ∗= k ; / / ণ কেরা
}
cout << "sum = " << sum << endl ;
cout << " product = " << product << endl ;
ব াখ া করিছ না।
5g
valueএর এই তফাৎ সবসময় মেন রাখেব। এই programএর বাঁকী অংশটু েতা আর
১৩. নীেচর ধারা েলার থম n পেদর সমি িননয় কেরা। তামার programএ ( মেলখ)
তুিম n input ( যাগান) িহসােব িনেব, আর ধারািটর সমি output (ফলন) িদেব।
in
x3 x5 x7
ক) Sine series (ল া পাত ধারা): sin(x) = x − 3! + 5! − 7! + ...
x2 x6 x4
খ) Cosine series (ল া পাত ধারা): cos(x) = 1 − 2! + 4! − 6! + . . .
am
দখােবা। বাঁকী েলা তুিম একই রকম কের িনেজ কেরা। আমােদর nএর পাশাপািশ xও
input ( যাগান) িনেত হেব। তেব n যখােন ধনা ক পূণক (positive integer) x স-
খােন ভ ক (fractioner)। তারপর আমােদর একিট loop (ঘূণী) িনেত হেব যিট 1 থেক
n পয ঘুরেব, আর িতপােক kতম পদিট িহসাব কের যাগফেলর সােথ যাগ কের িদেব।
k
একটু খয়াল করেল দখেব এখােন kতম পদিট আসেল − (−x) k! । তরাং আমরা পদ িন-
ণেয়র জ একিট loop (ঘূণী) চািলেয় power (শি ) (−x)k িনণয় করেবা, আেরকিট
loop (ঘূণী) চািলেয় factorial (উৎপাদকীয়) k! িনণয় করেবা, আর তারপর পদিট যাগ
কের দেবা যাগফেলর সােথ।
int n ; // যাগান নাও
float x ; // যাগান নাও
f l o a t sum = 0 ; / / যাগফল
f o r ( i n t k = 1 ; k <= n ; ++k )
{
৪২১
f l o a t power = 1 ; / / (−x ) ˆk
float factorial = 1 ; / / k !
f o r ( i n t p = 1 ; p <= k ; ++p )
{
power ∗= (−x ) ; / / শি িনণয়
f a c t o r i a l ∗= p ; / / উৎপাদকীয়
}
sum += − power / f a c t o r i a l ;
}
উপেরর programিট আসেল খুব একটা দ হয় িন। কারণ এেত loopএর িভতের loop
বা nested loop (অ াি ঘূণী) ব ব ত হেয়েছ। আসেল িভতেরর loopটা ব বহার না
5g
কেরই এই program ( মেলখ) লখা স ব। একটা ব াপার খয়াল কেরা আেগর পেদর
সােথ আমরা কবল f rac−x2 (2k − 1)(2k − 2) ণ করেলই পেরর পদ পােবা। কা-
জই আেগর পদ আেরকটা variableএ (চলক) ব বহার কের মেন রাখেল পেরর পদ সহ-
জ বর করা যােব, এবং কান loop (ঘূণী) না চািলেয়ই তা বর করা স ব হেব।
in
int n ; // যাগান নাও
float x ; // যাগান নাও
am
f l o a t sum = 0 ; / / যাগফল
f l o a t term = x ;
f o r ( i n t k = 1 ; k <= n ; ++k )
{
sum += x ;
al
১৪. দশটা সংখ া input ( যাগান) িনেয় তােদর গড় (mean) ও িমত িবচু িত (standard
deviation) িনণয় কেরা। িমত িবচু িত √হেলা সংখ া েলার বেগর গড় থেক গেড়র বগ
∑ ∑
x2 x 2
িবেয়াগ কের িবেয়াগফেলর বগমূল অথাৎ n −( n ) ।
i n t n ; / / কয়িট সংখ া যাগান নাও
৪২২
f o r ( i n t k = 0 ; k < n ; ++k )
{
cout << k << "tom pod ? " ; / / যাচনা
f l o a t x ; c i n >> x ; / / যাগান
5g
েত #include <cmath> িলেখ cmath
header file (িশর নিথ) include (অ ভু ) কের িনেত হেব।
১৫. একিট ণীেত n সংখ ক িশ াথী আেছ আর তােদর েত েক m সংখ ক িবষেয় পরী া
in
িদেয়েছ। েত ক ছাে র েত ক িবষেয়র ন র input ( যাগান) িনেয় েত ক ছাে র মাট
ন র output (ফলন) দাও।
i n t m, i n t n ; / / যাগান নাও
am
/ / েত ক ছাে র জ ঘূণী
f o r ( i n t i = 1 ; i <= n ; ++ i )
{
f l o a t sum = 0 ;
al
/ / েত ক িবষেয়র জ ঘূণী
f o r ( i n t j = 1 ; j <= m; ++ j )
{
f l o a t mark ;
cout << j << " th s u b j e c t ? " ;
cout << mark ;
sum += mark ;
}
cout << " t o t a l marks = " << sum ;
cout << endl ;
}
৪২৩
১৬. তারকা ব বহার কের নীেচর িবিভ রকম আকৃিত েলা output দাও। িতিট ে তুিম
দরকার মেতা তুিম parameter (পরািমিত) n input ( যাগান) িনেব। Parameter
মােন হে সািরর সংখ া বা সািরেত সেবা কয়িট তারা থাকেব বা থাকেব না এ েলা n
ওপর িনভরশীল। নীেচর িতিট ে nএর মান 5।
∗ ∗ ∗
∗∗ ∗∗ ∗∗ ∗
∗∗ ∗ ∗∗∗ ∗ ∗∗ ∗∗
∗∗ ∗∗ ∗∗ ∗ ∗ ∗∗ ∗∗ ∗∗ ∗
∗∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗∗ ∗∗
∗ ∗ ∗
∗∗ ∗∗ ∗∗ ∗
∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗∗
∗∗ ∗∗
∗∗ ∗∗ ∗
∗∗ ∗∗
∗∗ ∗
∗∗
∗ ∗∗ ∗
5g
∗ ∗∗ ∗ ∗
∗∗ ∗ ∗
∗∗∗
∗∗
∗∗ ∗∗ ∗∗ ∗
∗ ∗∗ ∗∗ ∗∗ ∗∗
∗∗ ∗∗ ∗∗ ∗
∗ ∗∗ ∗∗
∗∗ ∗
in
∗ ∗ ∗
এখােন কবল উপেরর ডানপােশরিট কের িদেবা। বাঁকী েলা তুিম িনেজ করেব।
int n = 5 ; / / যাগান িনেত পােরা
৪২৪
হেব, outputএর সময় আমরা ফাঁকাই িলখেবা − নয়। মেন রাখেব এখােন আমােদর
parameter ৫। এখােন ৫ িট সাির আেছ। িতিট সািরেত তারা অ র আেছ ৯িট মা-
ন 2∗5 − 1। আেরা খয়াল কেরা ১ম সািরেত ও শেষ ফাঁকা আেছ ৪িট কের, ২য়
সািরেত ৩িট কের, ৩িট সািরেত ২িট কের। এসেবর িতিট ে যাগফল পাঁচ মােন ১ +
৪ = ২ + ৩ = ৩ + ২ = ৪ + ১। অথাৎ যততম সাির, ও শেষ ফাঁকার সংখ া ৫ থেক
তত িবেয়াগ করেল পাওয়া যােব। এরপর দেখা তারকার সংখ া হেলা পরপর সািরেত ১,
৩, ৫, ৭, ৯, অথাৎ যততম সাির তার ি েণর চেয় এক কম সংখ ক তারা আেছ।
∗ −−−−∗−−−−
∗ ∗∗ −−−∗ ∗∗−−−
∗∗ ∗∗ ∗ −−∗∗ ∗∗ ∗−−
∗ ∗∗ ∗∗ ∗ ∗ −∗ ∗∗ ∗∗ ∗ ∗−
∗∗ ∗∗ ∗∗ ∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗ ∗∗
5g
পাের। এমন একিট program ( মেলখ) রচনা কেরা যিট এই প ২০ জন ছাে র েত -
কর ন র input ( যাগান) িনেয় তােদর ন র তারকা িচ িদেয় আ ভুিমক িচে দখােব।
িতনজন ছাে র জ নমুনা input ও output ( যাগান ও ফলন) িন প:
1th mark ? 9
in
1 : ∗ ∗∗ ∗∗ ∗ ∗∗ ∗ ( 9 )
2th mark ? 5
2 : ∗ ∗∗ ∗∗ ( 5 )
3th mark ? 6
am
3 : ∗ ∗∗ ∗∗ ∗ ( 6 )
f o r ( i n t k = 1 ; k <= 20 ; ++k )
{
/ / যাচনা কের ন র যাগান
cout << k << " th mark ? " ;
i n t mark ; c i n >> mark ;
// েত িমক ন র
cout << k << " : " ;
৪২৫
১৮. ০ থেক ৯ পয নামতার সারণী (table) িলখার জ একিট program রচনা কেরা।
সারণীেক র কের সাজােনার জ তামােক এক অে র সংখ া ও ই অে র সংখ া
মাথায় রাখেত হেব। এক অে র সংখ ার জ তুিম থেম একিট অিতির ফাঁকা (space)
িদেয় িনেব। তােত সারণীেত row and column (আিড় ও খািড়) িঠক মেতা থাকেব।
আর নামতার সারণীেত সবেচেয় বােমর columnএ (খািড়) আর উপেরর rowেত (আিড়)
অব ই ০ থেক ৯ পয সংখ া েলা থাকেব heading িহসােব।
এই programিট একটু খুঁিটনািট খয়াল কের িলখেত হেব, যােত সারণীিট আসেলই র
লােগ দখেত। সব থেম সারণীর উপেরর বাম কানা খয়াল কেরা সিট অব ই ফাঁকা
হেব। আর থম সািরেত আসেল সংখ া েলা থাকেব ০ থেক ৯ পয heading িহসােব।
ি তীয় সাির থেক মূলত ণফল েলা থাকেব। তেব থেমই থাকেব heading িহসােব
সংখ া, আর তারপর ণফল েলা। ণফল দখােনার আেগ অব ই খয়াল করেব ৯ বা
১৯. এমন একিট program ( মেলখ) রচনা কেরা যিট ৫০ জন ছাে র ন র input ( যাগান)
িনেব, আর output িদেব কান পা ায় কতজন ছাে র ন র পেড়েছ তা। িত ১০ ন েরর
৪২৬
f o r ( i n t k = 1 ; k <= 50 ; ++k )
{
cout << k << " th mark ? " ;
i n t mark ; c i n >> mark ;
i f ( mark <= 0 )
cout << " p a l l a r b a i r e " << endl ;
e l s e i f ( mark <= 10)
++ f i r s t ;
e l s e i f ( mark <= 20)
else
++second ;
e l s e i f ( mark <= 30)
++ t h i r d ;
5g
cout << " p a l l a r b a i r e " << endl ;
in
}
আমরা আপাতত ধের নই িতিট সংখ ােত একটাই অ থাকেব। বশী অে র সংখ ার
জ তামােক আর একটু ক কের অিতিরি ফাঁকা (space) ব বহার করেত হেব। যা-
ইেহাক নকশার ধাঁচ বুঝার জ আমরা ফাঁকা েলােত সামিয়ক ভােব − বিসেয় িনেয়িছ।
আমােদর এখােন nএর মান ৪। তেব িহসােবর িবধােথ আমরা এখােন গণনা করেবা
৪২৭
০ থেক। কােজই ০তম সািরেত ও শেষ ফাঁকা রেয়েছ ৪িট। ১ম সািরেত ফাঁকা রেয়েছ
৩িট। এইভােব ৪থ সািরেত ফাঁকা িট। অথাৎ যত ন র সাির ৪ িবেয়াগ তত হেলা ও
শেষর ফাঁকার সংখ া। আর িত েটা সংখ ার মাঝখােন একটা ফাঁকা আেছ অথবা বলেত
পাের িতিট সািরর থম সংখ ািট ছাড়া পেরর সংখ া েলার সামেন ফাঁকা আেছ।
int n = 4 ; // যাগান িনেত পােরা , ও নয়া যেত পাের
/ / িতিট সািরর জ
f o r ( i n t k = 0 ; k <= n ; ++k )
{
/ / সািরর েত ফাঁকা
f o r ( i n t i = 0 ; i < n − k ; ++ i )
cout << " " ;
5g
f o r ( i n t i = 0 ; i <= k ; ++ i )
{
/ / িট সংখ ার মধ বতী ফাঁকা
i f ( i > 0)
cout << " " ;
in
/ / এবার সংখ ািট C ( k , i ) িননয়
i n t product = 1 ;
am
f o r ( i n t j = 1 ; j <= i ; ++ j )
product = product ∗ ( k − j + 1 ) / j ;
/ / উপেরর সািরেত product ∗= ( k − j + 1 ) / j ;
/ / িলখেল িঠক মেতা ফলন আসেব না ,
/ / কারণ পূণেকর ভাগ সম া করেব
al
২১. এমন একিট program ( মেলখ) রচনা কেরা যিট তামার সােথ একিট খলা খলেব।
Programিট তামােক মেন মেন ০ থেক ১০২৩ এর মেধ একিট ন র মেন মেন ধরেত
বলেব। আর তারপর programিট তামােক বশ িকছু করেব, এই যমন তামার
ধেরন নওয়া সংখ ািট অমুক সংখ ার চেয় বড় বা সমান নািক ছাট। তুিম মূলত সত
না িমথ া উ র িদেব। উ র েলার িভি েত programিট বেল িদেব তামার ধের নওয়া
সংখ ািট কেতা? এই খলায় আসেল িতবার অেধক কের পা া কমােত হয়। তাই এটােক
৪২৮
cout << " assume a number i n your mind " << endl ;
cout << " the number should be 0−−1023 " << endl ;
cout << "now answer the questions below " << endl
;
cout << " r e p l y 1 i f true , 0 i f f a l s e " << endl ;
do
{
f l o a t mid = ( low + high ) / 2 . 0 ;
cout << "number >= " << mid << " ? " ;
i f ( answer )
low = mid ;
else
5g
i n t answer ; c i n >> answer ;
in
high = mid − 1 ;
cout << low << " " << high << endl ;
}
am
চেলা আমরা উপেরর programিট ( মেলখ) িবে ষণ কির। আমরা িট সংখ া িনেয়িছ
low আর high যখােন আমরা আমােদর পা া রাখেত চাই। আমরা পা া িহসােব ধের িন-
লাম ০ আর ১০২৪। তা থমবাের আমরা তাহেল করেবা ধের নওয়া সংখ ািট অেধক
al
অথাৎ ৫১২ এর চেয় বড় বা সমান িকনা। উ র যিদ াঁ হয় তার মােন ধের নওয়া সংখ া-
িট সবিন ৫১২, কােজই low ক আমরা বদেল কের ফলেত পাির ৫১২। এেত আমােদর
পা া অেধক হেয় গেলা। এবার ৫১২ ও ১০২৪ এর মাঝখােনরিট ৭৬৮ িদেয় একই রকম
করেবা। উ র যিদ না হয় তার মােন ধের নওয়া সংখ ািট সেবা ৭৬৭, কােজই high
ক আমরা বদেল কের ফলেত পাির ৭৬৭। এবােরও পা া অেধক হেয় গেলা। এইভােব
চলেত থাকেব। উপেরর program খয়াল কেরা, দেখা এত ণ যা বললাম, তাই কেরিছ
িক না? তাহেল হেয় গেলা আমােদর মজার খলা!
৪২৯
5g
in
am
al
৪৩০