Professional Documents
Culture Documents
C Programming Bangla Book PDF
C Programming Bangla Book PDF
িসিপিপ পিরগণনা
c++ programming
ক
৫.৫ আেরাপেণর বাম ও ডান (Assignment Left and Right) . . . . . . . ৪৭
৫.৬ আ -শরন আেরাপণ (Self-Referential Assignment) . . . . . . . . ৪৮
৫.৭ অ শীলনী সম া (Exercise Problems) . . . . . . . . . . . . . . . ৪৯
৫.৮ গণনা পিরভাষা (Computing Terminologies) . . . . . . . . . . . . ৫২
খ
িফিরি তািলকা
গ
৭.২ অিধবষ িনণয় (Leap Year Determination) . . . . . . . . . . . . . ৮১
৭.৩ ি ঘাত সমীকরণ সমাধান (Solving Quadratic Equations) . . . . . . ৯০
৭.৪ সৗভাগ ও ভােগ র সংখ া (Lucky & Unlucky Numbers) . . . . . . ৯৩
৭.৫ াপণ সহ ি েকাণিমিত (Trigonometry with Menu) . . . . . . . . ১০৯
৭.৬ অ াি পি িদেয় াপণ (Menu with Nested Switch) . . . . . . . ১১১
৭.৭ ানীয় ও ব াপীয় চলকের ব বহার (Using Local & Global Variables) . ১১৭
৭.৮ িতনিট সংখ ার বড়- ছাট (Small and Big of Three Numbers) . . . . ১৩০
৭.৯ িতনিট সংখ ার মধ ক (Median of Three Numbers) . . . . . . . . . ১৩১
৭.১০ িতনিট সংখ ার উধ ম (Three Numbers in Ascending Order) . . . ১৩১
৭.১১ ন র হেত বণমান (Letter Grades from Numbers) . . . . . . . . . ১৩২
৭.১২ িব র চতুভাগ িনণয় (Quadrant of a Point) . . . . . . . . . . . . . ১৩২
৭.১৩ বাংলা মােসর নাম (Bengali Month Names) . . . . . . . . . . . . . ১৩৬
৭.১৪ পাঁচিট সংখ ার বৃহ ম (Largest of Five Numbers) . . . . . . . . . ১৩৯
৭.১৫ স ােহর মজুির িহসাব (Weekly Wage Calculation) . . . . . . . . . ১৪০
ঘ
অধ ায় ১
মেলখ িবকাশ
(Developing Programs)
১
১.১. হয়মান স াদনা সংকলন (Online Editing Compilation)
উপেরর ছিবর নীেচ ডানিদেক দেখা চালাও বাতাম (run button) রেয়েছ। মেলখ স া-
দনা শষ হেল অথবা মাঝামািঝ অব ােতও পরী া কের দখার জ আমরা চালাও বাতােম
িটপ (click) িদেবা। তােত এক িটেপই থেম মেলখ সংকলন (compile) হেব তারপর িনবাহ
(execution) হেব। যখন মেলখ সংকলন হেত থাকেব তখন স াদন খানার মাঝ বরাবর দখ-
ব "অেপ া কেরা সংকলন হে " Please Wait Compiling লখা আসেব। আর একই সােথ
চালাও বাতামিটও বদেল িগেয় হেয় যােব বািতল বাতাম (cancel button)। অেনক সময় সং-
কলন হেত সময় লােগ তুিম যিদ কান কারেণ সংকলন বািতল করেত চাও তাহেল বািতল বাতােম
চাপ িদেলই হেব। যখন সংকলন হেত থােক তখন বাম িদেকর পাট েলা (tabs) খয়াল করেব,
ভদক পােটর (options tab) বদেল সংকলন পাট (compilation tab) সামেন চেল আসেব।
সংকলেনর সময় কান িট (error) পাওয়া গেল সংকলন পােট দখা যােব। আর কান সংক-
লন িট না থাকেল সংকলন সফল Compilation successful বাতা দখা যােব সংকলন পােট
আর তারপর িনবাহ পাট (execution tab) সামেন আসেব। িনবাহ চলাকালীন সমেয় যাগান
ও ফলন (input and output) িনবাহ পােট চলেব আর বািতল বাতামিট (cancel button)
বদেল হেয় যােব থামন বাতাম (stop button), যােত য কান সময় িনবাহ থািমেয় দয়া যায়।
থামন বাতাম চাপেল অথবা িনবাহ শষ হেয় গেল আবার ভদক পাট (option tab) সামেন
আসেব আর চালাও বাতাম (run button) িফের আসেব।
আমরা আপাতত ভদক পােট (options tab) কান পিরবতন না কের একিট মেলখ স া-
দনা (editing) ও িনবাহ (execution) করেবা। আেগই বেলিছ cpp.sh জালপাতায় গেলই
২
১.১. হয়মান স াদনা সংকলন (Online Editing Compilation)
একটা উদাহরণ মেলখ (program) সখােন আেগ থেকই থােক। সাধারণত নীেচ দখােনা -
মেলখিটই সখােন থােক। এই মেলখিট আমােদর আপাতত িব ািরত বুঝার দরকার নাই, আমরা
পের স েলা িব ািরত িশখেবা। তেব এই মেলখিট না থাকেল তুিম িনেজ সটা ব ওইখােন
িলেখ িনেত পােরা। সংে েপ বিল এই মেলখিট থেম িনবাহ পােট (execution tab) দখা-
ব What is your name? তখন তুিম যিদ তামার নাম িলেখ দাও gonimia আর তারপর
ভুি (enter) চাপ দাও, তাহেল পেরর সািরেত দখেব লখা আসেব Hello, gonimia!। না-
মটু নওয়ার আেগ What is your name? দখােনােক আমরা বিল যাগান যাচনা (input
prompt) আর নাম gonimia দওয়াটােক আমরা বিল যাগান (input) দওয়া আর পেরর
সািরেত Hello, gonimia! দখােনােক আমরা বিল ফলন (output) দওয়া।
/ / Example program
#i n c l u d e <iostream>
#i n c l u d e <s t r i n g>
i n t main ( )
{
std : : s t r i n g name ;
std : : cout << "What i s your name? " ;
g e t l i n e ( std : : c i n , name ) ;
std : : cout << " Hello , " << name << " ! \n" ;
}
তা তুিম চালাও বাতােম (run button) িটপ িদেয় দেখা কী হয়। থেম সংকলন পাট হেয়
িনবাহ পােট (execution tab) িগেয় উপের য ভােব বলা হেলা স রকম হয় কী না দেখা।
তামার বাঝার িবধােথ নীেচ িনবাহ পােট শষ পয কী থাকেব তা নীেচ দখােনা হেলা।
What i s your name? gonimia
Hello , gonimia !
এবার আমরা একটু দিখ সংকলেন িট হেল কী ঘেট, আর আমােদর কী করেত হয়! এটার
জ আমরা ইে কের একটা িট (error) তরী কের দই। যমন ধেরা std: : string name;
লখা রেয়েছ য সািরেত সখােন একদম শষ হেত িদিত (semicolon) ; তুিম মুেছ দাও। আর
তারপর চালাও বাতােম (run button) িটপ দাও। দখেব নীেচর মেতা কের িট বাতা দখােব
সংকলন পােট (compilatin tab), আর সংকলন পাটই সামেন থাকেব িনবাহ পাট (execution
tab) সামেন আসেব না। ি তীয় সািরেত দেখা 9 : 3 মােন বুঝাে ৯ম সািরেত িট আেছ আর
৩য় অ ের, আর িটটা হেলা ; থাকেত হেব। আসেল ; দরকার আমােদর ৮ম সািরর শেষ।
সাধারণত য সািরেত িট আেছ বলা হয়, িট সই সাির বা আেগর সািরেত থােক। এখােন ;
থাকায় সংকলক (compiler) আসেল িঠক ৮ম আর ৯ম সাির িনেয় িকি ত িব াি েত রেয়েছ।
মেলখ রচনার সময় আমরা নানান রকম ভুল িট কির, তুিম মেলখ লখার চচা করেত থাকেল
এই িট েলার সােথ পিরিচত হেয় যােব। তখন দখা মা ই বুঝেত পারেব ভুলটু কী আর কী কের
সটা িঠক করেত হেব। যাইেহাক িটটু বুঝেত পারেল আমরা সিট িঠক কের আবার বাতােম
চালাও চাপ িদেবা, আর তখন সফল ভােবই িনবািহত হেব।
I n f u n c t i o n ' i n t main ( ) ' :
9 : 3 : e r r o r : expected ' ; ' before ' g e t l i n e '
৩
১.২. নয়মান স াদনা সংকলন (Offline Editing Compilation)
সবেশেষ আমরা ভদক পাট (options tab) সংে েপ আেলাচনা করেবা। সখােন থাকা
নানা ভদন (option) েলার কী কাজ মুলত সটাই জানা উে । তেব এ েলা িনেয় আমরা
আপাতত পরী া িনরী া করেবা না, বরং যা আেছ স রকম অব ােতই মেলখ (program)
স াদনা (editing), সংকলন (compile) ও িনবাহ (execute) করেবা।
১. সবেচেয় বােমর ে (column) দেখা িমত (standard) ভদন েলা রেয়েছ। িসিপিপ
ভাষার নানান সং রণ রেয়েছ, তুিম চাইেল আেগর সং রণ ব বহার করেত পােরা, সাধার-
ণত এখােন c++14 সং রণ িনবাচন করা থােক।
২. বাম থেক ি তীয় ে আেছ সতকবাতার ভদন েলা, অথাৎ সংকলন (compile) করার
সময় কতটা খুঁিট নািট িট ধরেব সংকলক (compiler) সটা এখােন বেল দয়া হয়।
সাধারণত এখােন সব Many (-Wall) ভদন িনবািচত থােক।
৪. সবেচেয় ডােনর ে আেছ িমত যাগান (standard input) ভদন সমুহ। সাধারণত
এখােন িমথি য়ক (interactive) ভদন িনবািচত থােক যার অথ চাপিন (keyboard)
ব বহার কের যাগান (input) দওয়া যােব। তামার মেলখেত কান যাগান না থাকেল
তুিম িকছুনা (none) ভদন িনবাচন করেত পােরা। অথবা তুিম যিদ আেগই যাগান িদ-
য় রাখেত চাও তাহেল পাঠিনক (text) ভদন িনবাচন কের ওইখােন থাকা নীেচর বাে
আেগ থেক তামার যাগান েলা িদেয় রাখেত পােরা। তােত মেলখ (program) চাপিন
(keyboard) থেক যাগান না িনেয় ওইখান থেক িনেয় িনেব।
http://www.codeblocks.org/downloads
http://www.codeblocks.org/user-manual
https://www.youtube.com/watch?v=zOGU8fC3bvU
৪
১.২. নয়মান স াদনা সংকলন (Offline Editing Compilation)
https://www.youtube.com/watch?v=3B4hPHZNtNw
৫
অধ ায় ২
মেলখেয়র কাঠােমা
(Program Structure)
৭
২.১. েভ া বাতার মেলখ (Wishing Program)
ret ur n 0 ;
}
ফলন (output)
shuvessa nin
৮
২.২. নাম-ধাম-বৃ াে র মেলখ (Detailing Program)
বলেত হেব ঢাকার গাবতিল। cout আর endl এর আেগ std: : না িলখেল মেলখ সফল ভােব
সংকলন (compile) করা যােব না, নানান িট (error) বাতা (message) দখােব। সংকলন
সমেয় দখােনা িটবাতা েলােক সংকলন কালীন (compile-time) িট বলা হয়।
য কান িসিপিপ মেলখেত একিট মুল িবপাতক (function) থােক main যার নাম। এই
main িবপাতেকর কান পরািমিত (parameter) থাকেব না, কােজই main( ) এর পের গাল
ব নী েটার মেধ িকছু বলা হয় িন। আর িতিট িবপাতক চাইেল একিট মান ফরত দয়, main
িবপাতক সাধারণত একিট পূণক (integer) ফরত দয়, যা main লখার আেগ int িহসােব
উে খ করা হেয়েছ। িবপাতক িনেয় িব ািরত আেলাচনা আমরা পের করেবা। আপাতত সংে েপ
এইটু ই জেন রািখ। তা আমােদর মেলখেত return 0; িববৃিতিট আসেল বলেছ য আমােদর
main িবপাতকিট ফরত পাঠােব। কার কােছ ফরত পাঠােব? য আমােদর মেলখ চালাে
তার কােছ। main িবপাতক 0 পাঠােনা মােন হেলা, এিট সফল ভােব শষ হেয়েছ, কান িট
িবচু িত ঘেট িন। 0 ছাড়া অ িকছু ফরত পাঠােনা িনেয়ও আমরা পের আেলাচনা করেবা।
িসিপিপেত েটা বাঁকা ব িনর {} িভতের যা থােক তােক বলা হয় একিট মহ া (block)।
িতিট িবপাতেকর একিট শরীর (body) থােক যিট মহ ার িভতের থােক। ল কের দেখা
আমােদর main িবপাতেকর cout আর return িদেয় হওয়া িববৃিত িট একিট মহ ার
িভতের রেয়েছ। আর একিট িবষয় খয়াল কেরা, আমােদর িববৃিত েলার শেষ িক একিট কের
িদিত (semicolon) ; রেয়েছ। িসিপিপেত বশীরভাগ িববৃিতর পেরই আমরা এইরকম িদিত ;
িদেয় িববৃিত শষ কির। িঠক বাংলা ভাষায় িতিট বােক র পের দাঁিড় । দয়ার মেতা ব াপার।
সব িমিলেয় এই হল আমােদর থম মেলখ, যটা ব বহারকারীেক েভ া জানােব।
িসিপিপেত এমন একিট মেলখ (program) রচনা কেরা যিট চালােল ব বহারকারীেক তা-
মার নাম-ধাম-বৃ া কেয়ক সািরেত মালা (string) আকাের বেল দয়। সােথ সংখ া (number)
িহসােব তামার বয়স ও তামার ফলাফেলর িজিপএও বেল দয়।
i n t main ( )
{
cout << " amar nam goni mia " << endl ;
cout << " amar b a r i bogra " << endl ;
cout << " ami t h a k i dhakai " << endl ;
cout << " amar boyos " << 20 << " bosor " << endl ;
cout << " amar r e s u l t gpa " << 3 . 99 << endl ;
৯
২.৩. মেলখেত টীকা িলখন (Writing Program Comments)
ফলন (output)
amar nam goni mia
amar b a r i bogra
ami t h a k i dhakai
amar boyos 20 bosor
amar r e s u l t gpa 3 . 99
সবেশেষ একটা িবষয় খয়াল কেরা। আমরা এই মেলখেত return 0; এর বদেল িলেখিছ
return EXIT SUCCESS; আর এই EXIT SUCCESS আেছ cstdlib িশর নিথেত (header
file)। আমরা তাই #include <cstdlib> িলেখ cstdlib িশর নিথিটও আমােদর মেলখেত
অ ভু কেরিছ। মেন রাখেব EXIT SUCCESS এর মান আসেল 0 িক 0 তা একটা সংখ া
যটা দেখ সরাসির িঠক অ ধাবন করা যায় না আমরা কী বুঝােত চাইিছ, মােন মেলখ সফল
না িবফল হেয়েছ। আমরা তাই কের EXIT SUCCESS িলখেবা যােত চােখ দেখই আমরা
বুঝেত পাির ব াপারটা কী। বেল রািখ গণিনর (computer) জ িক 0 আর EXIT SUCCESS
একই ব াপার কারণ EXIT SUCCESS এর মান য 0 ওইটা তা cstdlib নিথেত বলা আেছ,
সংকলন করার পের EXIT SUCCESS আসেল 0 হেয় যােব, গণিন ওইটা ই দখেত পােব।
আমরা 0 এর বদেল EXIT SUCCESS আসেল িলখিছ কবল মা েষর বুঝার িবধার জ , -
মেলখ পেড় চােখ দেখই যােত সহেজ বুঝা যায় মেলখিট সফল না িবফল ভােব শষ হে ,
সটাই আমােদর উে । তাহেল এখন থেক মেলখেয়র main িবপাতেক return 0; না িল-
খ return EXIT SUCCESS; িলখেব আর cstdlib িশর নিথও অ ভু কের নেব!
তা তামরা এখন থেক কেয়ক সািরেত িকছু দখােনার মেলখ রচনা করেত চাইেল এই
মেলখেয়র মেতা কের রচনা করেব। দরকার মেতা সংখ া (number) ও মালা (string) িম ণ
কেরও িক যা দখােত চাও তা দখােত পারেব। চ া কের দেখা কমন?
১০
২.৩. মেলখেত টীকা িলখন (Writing Program Comments)
বাংলায় বা ইংেরজীেত, িসিপিপ ভাষায়ও নয়, যে র ভাষায়ও নয়, কােজই টীকা িলখেল অেনক িদন
পেরও আমােদর মেলখ বুঝেত িবধা হয়।
#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 ( )
{
/ / Su bt r ac t 20 years from 2015 to get b i r t h y e a r
cout << " amar jonmoshal " << 2015 − 20 << endl ;
ফলন (output)
amar jonmoshal 1995
উপেরর মেলখ খয়াল কেরা। কিঠন িকছু নয়। আেগর মেতাই iostream আর cstdlib
অ ভু (include) করা আেছ। তারপর বলা হেয়েছ using namespace std; তারপর মুল
িবপাতক (function) িহসােব int main() যিটর কান পরািমিত (parameter) নাই কারণ
( ) গাল ব নীর িভতের িকছু নাই আর যিট একিট পূণক (integer) ফরত দয় কারণ int বলা
আেছ েত। তারপর মুল িবপাতেকর শরীের েটা {} বাঁকাব নীর িভতেরর মহ ায় (block)
বলা আেছ cout << "amar jonomoshal " << 2015 − 20 << endl; অথাৎ ফলেন
amar jonomoshal দিখেয় তারপর 2015 থেক 20 িবেয়াগ করেল য 1995 পাওয়া যায় তা
দখােব। তারপর মহ ার িভতের শষ িববৃিত (statement) আেছ return EXIT SUCCESS;
যা আেগর মেতাই বলেছ য আমােদর মেলখ ওইখােন সফল ভােব শেষ হেয় বর হেয় যােব।
EXIT SUCCESS িনেয় আমরা আেগর পােঠ িব ািরত আেলাচনা কেরিছ, ওই পাঠ থেকই দেখ
িনেত পােরা, কােজই সটা আবার এখােন আেলাচনা করিছ না।
যাইেহাক, খয়াল কের দেখা ওপের বিণত িবষয় েলা ছাড়াও উপেরর মেলখেত আেরা
িকছু বাক ও সাির দখা যাে যমন থম সািরিটই হল // list of header files needed
for this ।program এই বাক িট আসেল আমােদর মেলখেয়র অংশ নয়, অথ াৎ মেলখ
যখন চালােনা (run) হেব তখন এই বােক র কান ভাব থাকেব না। মেলখ এমন ভােব চলেত
থাকেব যােত মেন হেব ওই বাক িট যন ওখােন নাই। এরকেমর বাক েলােক বলা হয় টীকা
(comment)। খয়াল কেরা টীকার বাক িটর একদম সামেন রেয়েছ // অথাৎ সামেনর িদেক
হলােনা েটা দাগ। ওই েটা দাগ হেত কের ওই সািরেত তারপের যাই থাকেব সব িমিলেয়
হেব একিট টীকা। এইরকম টীকা যেহতু কবল এক সািরেত সীমাব তাই এেক বলা হয় সাির
টীকা (line comment)। িসিপিপ ভাষায় অিধকাংশ সময়ই সাির টীকা ব বহার করা হয়।
১১
২.৪. মেলখেত ফাঁকা দওয়া (Spacing and Indentation)
সাির টীকা যিদ সািরর একদম েত লখা হয় তাহেল সাধারণত এিট টীকার িঠক নীেচ য
সংেকত (code) থােক তার জ লখা হয়। যমন // list of header files needed for
this program এই টীকািট একদম সািরর থেক লখা হেয়েছ, এিট তাই পেরর ই সা-
িরেত #include <iostream> আর #include <cstdlib> কন লখা হেয়েছ সিট ব াখ া
করেছ। সাির টীকা অেনক সময় সািরর শষ িদেকও লখা হয়। যমন // we will use the
std namespace টীকািট লখা হেয়েছ using namespace std; িদেয় হওয়া সািরর
শেষ। সািরর শষ িদেক লখা এইরকম সাির টীকা সাধারণত সািরর থেম য সংেকত (code)
লখা হেয়েছ তা ব াখ া করেত ব বহার করা হয়। অেনক সময় টীকা িলখা হয় েত /∗ আর শ-
ষ ∗/ িচ িদেয়, যমন return EXIT SUCCESS; এর সািরেত শেষ লখা হেয়েছ। এইরকম
টীকা একািধক সাির িমিলেয় হেত পাের, তাই এেদরেক সাির টীকা না বেল মহ া টীকা (block
comment) বলা হয়। িসিপিপেত আমরা অিধকাংশ সময় আসেল সাির টীকাই ব বহার কির।
তুিম যখন তামার মেলখেত টীকা িলখেব তখন হয়েতা ইংেরজীেতই টীকা িলখেব। অথবা
ইংেরজী অ ের বাংলায়ও টীকা িলখেত পােরা। আজকাল অেনক সংকলক (comiler) ও স াদক
(editor) ইউিনেকাড (unicode) সংেকত বুঝেত পাের। কােজই টীকা বাংলায়ও লখা স ব।
আমরা এরপর থেক িসিপিপেত লখা সকল মেলখেত টীকা বাংলায় িলখেবা, যােত আমরা আমা-
দর িনেজর ভাষায় সহেজ বুঝেত পাির। এ েলা যেহতু িনবাহ execution) হেব না, কােজই
খােমাকা কন ক কের ইংেরজীেত িলখেত যােবা! আর িবেদশী কউ তা আমােদর মেলখেয়র
সংেকত দখেব না, কােজই আমরা আমােদর বাংলা ভাষােতই টীকা িলখেবা। তেব মেন রাখেব িব-
দশী কােরা পড়ার স াবনা থাকেল আমােদর টীকা সহ সবিকছু ইংেরজী ভাষােতই িলখেত হেব।
তাহেল সাির টীকা আর মহ া টীকা শখা হেলা। এখন থেক মেলখ লখার সময় যেথ পিরমােন
টীকা িদেব কমন? আিমও মেলখ েলােত টীকা দেবা, যােত তামােদর বুঝেত িবধা হয়।
i n t main ( )
{
cout << " shuvessa nin " << endl ;
ret ur n EXIT SUCCESS ;
}
১২
২.৪. মেলখেত ফাঁকা দওয়া (Spacing and Indentation)
সাির টীকা (line comment) িলখেত পােরা যােত বুঝা যায় ওই সািরর র িদেক তুিম আসেল
কী করেত চেয়েছা। তামার মেলখেত লখা কাটাকািট িচ # িদেয় হওয়া সাির েলা সা-
ধারণত সংকলক (compiler) িদেয় ি য়া করা হয় না। আলাদা একিট ম (software) যার
নাম পুব- ি য়ক (preprocessor) সটা িদেয় সংকলন করারও আেগ এই েলা ি য়া করা
হয়, কাজটা বশীর ভাগ সমেয় অব সংকলকই কিরেয় নয়। পূব- ি য়ক (preprocessor)
িবষেয় িব ািরত আেলাচনা আমরা পের করেবা।
#i n c l u d e <iostream> / / যাগান ফলন াত িশর নিথ অ ভু হল
উপের যিদও ই সািরেত দখা যাে আমরা আসেল using থেক কের } পয টানা
একসােথ িলেখিছ, িক এখােন পােশর িদেক ােনর তার কারেণ টানা সািরিট ভেঙ ই সাির
হেয় গেছ। তামার স াদেক (editor) এ যিদ পােশর িদেক অেনক জায়গা থােক তুিম এক
সািরেতই িলখেত পারেব। আসেল তম একিট ফাঁকা (space) দয়া বাধ তামুলক হেয় যায়
যখন পরপর েটা শ লখা হয়। যমন using, namespace, std, int, main এইরকম শ
পরপর েটা থাকেল তামােক কমপে একিট ফাঁকা (space) িদেত হেব। েটা িচ যমন ব নী
( ) বা িদিত ; বা আেরা অেনক তীক আেছ, এই েলা পরপর েটা থাকেলও কান সম া নাই।
অথ াৎ একািধক তীক কান ফাঁকা না িদেয়ও তুিম একসােথ িলখেত পারেব।
এখন করেত পােরা ফাঁকা দয়া যিদ ব াপার না হয়, তাহেল মেলখ িলখেত কন ফাঁকা
দেবা। বশী বশী ফাঁকা আসেল গণিনর (computer) জ দরকার নই িক দরকার মা েষর
জ । আেগর পােঠর কথা মেন কেরা। আমরা কন টীকা (comment) িলেখিছলাম? টীকা তা
আর িনবািহত হয় না। আমরা যােত অেনকিদন পের মেলখেয়র সংেকত (code) দেখ সহেজ
বুঝেত পাির, আমরা তাই টীকা িলেখিছলাম। তা মেলখ যিদ পুেরাটা একটা ল া সাির হয়,
আমােদর মা েষর পে সটা দেখ বুেঝ ওঠা খুবই ক কর হেব। মুলত আমােদর মা েষর বুঝার
িবধােথ আমরা মেলখ সািরেত সািরেত ভে ভে িলিখ বা দরকার মেতা একসােথ িলিখ।
মেলখেত ফাঁকা দয়ার ব াপারিট বাংলায় বা ইংেরজীেত রচনা লখার মেতাই, কখন তুিম
আলাদা বাক করেব, কখন তুিম আলাদা পিরে দ (para) করেব, কখন তুিম আলাদা অ ে দ
(section) করেব, এই রকম। কান িবষেয়র সােথ বশী স িকত িববৃিত েলা আমরা সাধারণত
পরপর সািরেত কান ফাঁকা (blank line) না িদেয় িলখেবা। আর েটা িবষেয়র সাির েলার মােঝ
হয়েতা এক সাির ফাঁকা িদেয় িলখেবা, আর িবষয় েলার মেধ খুব বশী যাগােযাগ না থাকেল
হয়েতা আমরা ই বা আেরা বশী সাির ফাঁকা িদেয় িলখেবা। তাহেল এখন থেক মেলখ লখার
সময় দরকার মেতা ফাঁকা িদেয় িদেয় িলখেব যােত তামার মেলখ পড়া সহজ হয়।
১৩
২.৫. অ শীলনী সম া (Exercise Problems)
সবেচেয় উপের যভােব আমরা মেলখ িলেখিছ সখােন আেরা একটা ব াপার খয়াল কেরা,
আমরা cout বা return এর িববৃিত েলা লখার আেগ তােদর িনজ িনজ সািরেত বশ িকছুটা
ফাঁকা িদেয় িলেখিছ, একদম সািরর থেক িলিখ নাই। এিট কন করলাম? এিট করলাম এ
কারেণ য ওই েটা সাির আসেল আমােদর মহ ার িভতের আেছ। ল কেরা মহ ার বাঁকা ব নী
েটা কমন দেখই বুঝা যায় য এরা জেন জনার। আর মহ ার িভতেরর িববৃিত েটা কমন
একটু িভতেরর িদেক থাকায় পির ার বুঝা যায় য ওরা আসেলই ওই মহ ার িভতের। তা দরকার
মেতা কান িববৃিত এরকম সািরর একটু িভতেরর িদেক থেক লখার ব াপারিটেক বলা হয় ছাড়ন
দয়া (indentation)। মেলখ লখার সময় এখন থেক তামরা অব ই দরকার মেতা ছাড়ন
িদেয় িলখেব, তাহেল দখেব মেলখ পড়া ও বাঝা কত সহজ হেয় যায়।
এই পযােয় িজে স করেত পােরা, েত ক সািরেত এভােব অত লা কের ফাঁকা চাপেবা কম-
ন এইটা তা িবরি কর। আসেল তামার চাপিনমাঁচায় (keyboard) একটা ল (tab) চাপিন
আেছ, দেখা ওইটা চাপেল একসােথ ৪টা বা ৮টা ফাঁকা (space) এর সমপিরমান ফাঁকা একবাের
আেস। তা দরকার মেতা একবার বা বার ল চাপেলই হেয় গেলা। কােজই মেলখ লখার
সময় কখেনাই এই আলেসিম টু করেব না। ছাড়ন দয়া মেলখ লখার জ পূণ ব াপার,
র দখা যাওয়া আর তাড়াতািড় পড়ার জ দরকারী, মেলখেত কান ভুল থাকেল আমরা
যখন ভুল বর করেত চাই তখনও খুব খুব দরকারী, বড় বড় মেলখ যখন িলখেব তখন ব াপারটা
খািনকটা ঠেক ঠেক িশেখ অিভ তা িদেয় ভােলা কের বুঝেত পারেব।
২. িসিপিপ ভাষায় মেলখ তরী হেত সটার ফলাফল দখা পয কী কী ঘটনা ঘেট?
৪. িসিপিপেত িশরনিথ (header file) বলেত কী বুেঝা? আমােদর মেলখ েলােত িশর
নিথ iostream ও cstdlib আমরা কন ব বহার কেরিছ?
৬. িসিপিপেত main িবপাতক হেত ফরেতর সময় return 0; না িলেখ তার বদেল return
EXIT SUCCESS; িলখা কন উ ম? ব াখ া কেরা।
৭. মেলখেত ছাড়ন দয়া (indentation) মােন কী? ছাড়ন দয়ার পে -িবপে যুি
িলখ। মেলখ কন বশ ফাঁকা ফাঁকা কের িলখা উিচৎ?
৮. মেলখেত টীকা (comment) লখা কী? মেলখেত টীকা (comment) িলখার কেয়-
কিট কারণ ব াখ া কেরা? সাির (line) টীকা ও মহ া (block) টীকা কী?
১৪
২.৫. অ শীলনী সম া (Exercise Problems)
১০. মেলখ সফল ভােব শষ হেল main িবপাতক হেত সাধারণত কত ফরত পাঠােনা হয়?
ক) −1 খ) 0 গ) 1 ঘ) িকছুই না
১১. িসিপিপেত মহ া (block) বুঝােনার জ নীেচর কান েলা ব বহার করা হয়?
১২. িসিপিপেত একিট িববৃিতর (statement) শেষ সাধারণত কান িচ ব বহার করা হয়?
ক) . খ) ; গ) : ঘ) ,
১. নীেচর কথা েলা ফলেন (output) দখােনার জ িসিপিপেত একিট মেলখ িলেখা।
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
tomar boyosh noy bosor .
porigonona s h i k h t e chao ?
porigonona k i sohoj na !
২. িসিপিপেত একিট মেলখ রচনা কেরা যিট নীেচর নকশািটর মেতা নকশা তরী কের।
খয়াল কের দেখা নকশািট বাংলা অ 8 এর মেতা। তুিম চাইেল আেরা নানান নকশা,
নানান বণ বা অ িনেজর মেতা কের ভেব িনেয় সইমেতা নকশা তরী করেত পােরা।
যাইেহাক দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব
আর সহেজ বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
∗∗ ∗∗ ∗
∗ ∗
∗ ∗ ∗
∗ ∗
∗∗ ∗∗ ∗
১৫
২.৫. অ শীলনী সম া (Exercise Problems)
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন যােত
একটু সাহায কবল পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
১. নীেচর কথা েলা ফলেন (output) দখােনার জ িসিপিপেত একিট মেলখ িলেখা।
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
tomar boyosh noy bosor .
porigonona s h i k h t e chao ?
porigonona k i sohoj na !
i n t main ( )
{
/ / দরকারী কথা েলা ফলেন দখাও
cout << " tomar boyosh noy bosor . " << endl ;
cout << " porigonona s h i k h t e chao ? " << endl ;
cout << " porigonona k i sohoj na ! " << endl ;
২. িসিপিপেত একিট মেলখ রচনা কেরা যিট নীেচর নকশার মেতা নকশা তরী কের। খ-
য়াল কের দেখা নকশািট বাংলা অ 8 এর মেতা। তুিম চাইেল আেরা নানান নকশা, নানান
বণ বা অ িনেজর মেতা কের ভেব িনেয় সইমেতা নকশা তরী করেত পােরা। যাইেহাক
দখেত র লাগার জ তামার মেলখেত দরকার মেতা ফাঁকা ফাঁকা িদেব আর সহেজ
বুঝার জ দরকার মেতা টীকা (comment) িলখেব।
∗∗ ∗∗ ∗
∗ ∗
∗ ∗ ∗
∗ ∗
∗∗ ∗∗ ∗
এই মেলখিট িক অেনক মজার তাই না। তুিম িক বণমালার িতটা বণ আর ০-৯ দশটা
অে র জে ই এরকম নকশা তরী করেত পারেব? রা াঘােট বা িবেয় বািড়েত অেনক সময়
ছাট ছাট বািত িদেয় নানান িকছু লখা হয়, আসেল এই নকশা েলার মেতা কের নকশা
বািনেয়ই স েলা করা হয়। গণিনেত (computer) এর নজিরর (monitor) পদায়ও
১৬
২.৬. গণনা পিরভাষা (Computing Terminologies)
অেনক িকছু এভােব দখােনা হয়। আসেল য কান ছিবই এরকম অসংখ িব র সম েয়
তরী, িকছু িব ালােনা, িকছু িব নভােনা। য িব েলা ালােনা স েলা হেলা ∗
আর য েলা নভােনা স েলা ফাঁকা। তা চেলা আমরা মেলখিট দিখ।
i n t main ( )
{
/ / দরকার মেতা ∗ ও ফাঁকা িদেয় নকশা
cout << " ∗∗ ∗∗ ∗ " << endl ;
cout << " ∗ ∗ " << endl ;
cout << " ∗ ∗ ∗ " << endl ;
cout << " ∗ ∗ " << endl ;
cout << " ∗∗ ∗∗ ∗ " << endl ;
১৭
২.৬. গণনা পিরভাষা (Computing Terminologies)
১৮
অধ ায় ৩
চলক ও বক
(Variables and Constants)
চলেকর (variable) মান (value) বদলােনা যায় িক বেকর (constant) মান বদলােনা যায়
না। মেলখেত উপা (data) সরাসির (directly) না িলেখ চলক বা বেকর মাধ েম ব বহার
করেল একরকেমর পেরা তা (indirection) তরী হয়। ফেল উপা িঠক কেতা সটা না ভেব
উপা িট কীেসর আর তার ি য়াকরণ কমন সটা ভেব মেলখ তরী সহজ হেয় যায়।
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 ;
১৯
৩.১. চলেকর ব বহার (Using Variables)
উপের আমরা য মেলখ িলখলাম আমরা িক ওইটা চাই না। ওইখােন সংখ া েলা সরাসির
ে বিসেয় িহসাব কের ফলন (output) দখােনা হেয়েছ। আমরা চাই ফল আর পিরসীমার
েলা চলেকর নাম িদেয় িলখেত আর িলখার আেগ চলক েলার মান িদেয় িদেত। চলক
ব বহােরর নানান িবধা আেছ। যমন একিট িবধা হেলা ে চলেকর নাম থাকায় দেখই
সহেজ বুঝা যায় কীেসর , যমন নীেচর মেলখ দেখা। আর একিট িবধা হেলা কউ যিদ
বেল ৫ না দঘ হেব ৬, উপেরর মেলখেত িক ইখােন 5 বদলাইয়া 6 করেত হেব। ছাট
একটা মেলখেতই যিদ ইখােন বদলােত হয়, তাহেল বড় একিট মেলখেয়র কথা িচ া কেরা,
সটােত আেরা কত জায়গায় য বদলােত হেব ইয় া নাই। আমরা এ কারেণ চলক ব বহার করেবা।
িফিরি ৩.১: মেলখেত চলেকর ব বহার (Variables in Programs)
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
i n t main ( )
{
i n t doirgho ; / / এই চলেক থাকেব বেগর দঘ ।
i n t prostho ; / / এই চলেক থাকেব বেগর ।
i n t k h e t r o f o l ; / / এই চলেক থাকেব বেগর ফল।
i n t porishima ; / / এই চলেক থাকেব বেগর পিরসীমা।
// ফল বর করার হল দঘ আর ে র ণফল।
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
২০
৩.১. চলেকর ব বহার (Using Variables)
২১
৩.২. বেকর ব বহার (Using Constants)
না। নামটা যখন উ ৃিতর বাইের থােক তখন ওইটা একটা নাম হয়, এইে ে একটা চলেকর নাম
হয় আর ওইটার মান িনেয় কাজ হয়। একই অব া porishima এর ে ও। উ ৃিত িচে র
িভতের থাকা porishima কথািট ব ফলেন এেসেছ িক উ ৃিতর বাইের থাকা porishima
কথািটর বদেল ওিটেক চলক ধরেল য মান পাওয়া যােব তা ফলেন এেসেছ।
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
২২
৩.২. বেকর ব বহার (Using Constants)
২৩
৩.৩. চলক ঘাষনা (Variable Declarations)
উপেরর মেলখ ল কেরা। চলক আর বেকর মেধ তফাৎ হেলা চলেকর (variable)
মান ঘাষনার সময় একবার আেরাপ করা যায়, আর তারপেরও যতবার ই া ততবার নতুন নতুন
মান আেরাপ (assign) করা যায়। িক বেক (constant) একটা মান কবল ঘাষনা করার
সময় বেল দওয়া যায়, মেলখেত পের আর কাথাও ওই বেকর মান বদেল নতুন মান আেরাপ
(assign) করা যায় না। যিদ কেরা তাহেল সংকলক (compiler) িট বাতা (error message)
দখােব। তা আমরা যেহতু জািন য পাইেয়র মান সবসময় বক, এটার মান আমােদর কখেনা
বদল হেব না, আমরা তাই এটােক চলক িহসােব ঘাষনা না কের বক িহসােব ঘাষনা করেবা।
আশা করা যায় চলক আর বেকর পাথক পির ার হেয়েছ। এবার দেখা আমােদর বৃে র
ফেলর মেলখেত আমরা ফেলর জ khetrofol নােম একটা চলক িনেয়িছ, যার -
করণ হল int বা পূণক. যিদও আমরা জািন পাইেয়র মান ভ ক হওয়ার কারেণ আমােদর ফলাফল
আসেল একিট ভ ক হেব। এইটা আমরা মুলত পরী ামুলক করিছ। তা int নয়ার কারেণ আমরা
আমােদর মেলখেয়র ফলন দখেত পােবা 78 আসেল হওয়ার কথা 78.5375। এইটা কন হেলা
কারণ হেলা থেম 78.5375 িঠক মেতা িভতের িভতের িহসাব হেয় যােব, িক যখন khetrofol
চলেকর মেধ মানটা আেরাপ (assign) হেব তখন যেহতু পূণ সংখ া বেল ভ াংশটু ঢুকােনা যা-
ব না, তাই ওইটা বাদ পের যােব (truncation)। আর মান যটা আেরাপ হেব সটা হেলা বাঁকী
পূণাংশটু বা 78। তা ভ াংশ সহ সিঠক ফল পাওয়ার জ khetrofol এর সামেন int না
িলেখ float িলেখ দাও তাহেল দখেব িঠক িঠক 78.5375 ই ফলন িহসােব চেল আসেব।
উপেরর আেলাচনায় আমরা িতনটা ব াপার িশখলাম: ১) আমরা চলক (variable) না বক
(constant) ব বহার করেবা সটা; তারপর ২) ঘাষনা করার সােথ সােথ একটা আিদ মান িদেয়
দয়া যােক বলা হয় আিদ মান আেরাপণ (initial assignment), আর ৩) কান চলক বা বেকর
করণ কমন হেব, int না float হেব, পূণক না ভ ক হেব সটা আেগ থেক ধারনা করেত
পারেত হেব, আর সই অ যায়ী চলক বা বেকর কার বেল িদেত হেব, না হেল সিঠক ফলাফল
নাও পাওয়া যেত পাের, যমন 78.5375 এর বদেল 78 পাওয়া যেত পাের।
উপেরর িতনিট চলকই যেহতু int ধরেনর, কােজই আমরা ওই িতনিট চলকেক চাইেল একিট
িববৃিতেতই (statement) ঘাষনা করেত পাির। সে ে আমােদর int একবার িলখেত হেব,
আর চলক েলার নাম একটার পর একটা িবিত , (comma) িদেয় িলখেত হেব।
i n t doirgho , prostho , porishima ; / / সব েলাই i n t ধরেনর
২৪
৩.৪. আিদমান আেরাপণ (Initial Assignment)
আমরা িক চাইেল আিদমান েলা নীেচর মেতা ঘাষনার সােথ সােথই িদেত পারতাম।
i n t doirgho = 6 , prostho = 3 , porishima ;
f l o a t bashardho = 5 , k h e t r o f o l ;
২৫
৩.৪. আিদমান আেরাপণ (Initial Assignment)
কান চলক ঘাষনার সােথ সােথ তােত কান আিদমান না িদেলও য উ াপা া মান থােক
সটা কত তা যিদ জানেতা চাও তেব পরী া কের দখেত পােরা। ধেরা তামার চলক doirgho।
এখন ঘাষনার পেরই cout << "doirgho holo " << doirgho << endl; িলেখ ম-
লখ সংকলন (compile) কের চািলেয় (run) দখেত পােরা। িক মেন রাখেব িতবার চালােল
য একই মান আসেব তার কান িন য়তা নাই, যিদ আেস সটা নহােয়ত কাকতাল।
আমরা আেগই জািন বৃে র ফল িনণেয়র জ আমােদর পাইেয়র মান দরকার হেব, যিট
একিট বক (constant) আর পাইেয়র মান আসেলই ভ ক বা float। িক float হওয়া সে ও
আমরা িক পাইেয়র জ pai নামক চলকিটেক bashardho আর khetrofol এর সােথ একই
িববৃিতেত ঘাষনা করেত পারেবা না। কারণ bashardho ও khetrofol হল চলক (variable)
যােদর মান পের যতবার ই া বদলােনা যােব আর pai হল বক (constant) যার মান একবার
দওয়ার পের আর বদলােনা যােব না। পাইেয়র মান তাই আলাদা কের ঘাষনা করেত হেব।
i n t doirgho = 6 , prostho = 3 , porishima ;
f l o a t bashardho = 5 , k h e t r o f o l ;
f l o a t const p a i = 3 . 1415 ; / / পাইেয়র মােনর জ বক
আমােদর যিদ একািধক float constant থােক স েলােক আবার এক িববৃিতেতই ঘা-
ষনা করেত পারেবা, যমন পাই আর িজ এর মান ঘাষনা করিছ নীেচ। তামরা জােনা িজ হল
মাধ াকষেনর রেণর মান, যা িনিদ ােন মাটামুিট একটা বক।
f l o a t const p a i = 3 . 1415 , g = 9 . 81 ;
২৬
৩.৫. অ শীলনী সম া (Exercise Problems)
২. মেলখেত (program) চলক ঘাষনা বলেত কী বুঝ, যথাযথ উদাহরণ িদেয় দখাও।
৫. িসিপিপেত কী ভােব চলক ও বক ঘাষনা করেত হয়। যথাযথ উদাহরণ িদেয় দখাও।
৬. িসিপিপেত কী ভােব পূণক ও ভ ক ধরেনর চলক ঘাষনা করেত হয় উদাহরণ িদেয় দখাও।
৭. িসিপিপেত এক সািরেত কখন একািধক চলক ঘাষনা করা যায়? উদাহরণ িদেয় দখাও।
১০. বেক (constant) কন আিদমান আেরাপ করেত হয়, িক পের আেরাপ করা যায় না?
১১. ফলাফল ভ ক (float) িক int ধরেনর পূণক চলেক আেরাপ করেল কী ঘেট?
১. এমন একিট মেলখ রচনা কেরা যিট িট পূণক int ধরেনর, আর একিট ভ ক float
ধরেনর চলক ঘাষনা কের। মেলখিট তারপর চলক িতনিটর মান যথা েম 10, 15, 12.6
আেরাপণ কের। পিরেশেষ মেলখিট চলক েলার মান পদায় দখায়।
২৭
৩.৫. অ শীলনী সম া (Exercise Problems)
২. ধেরা েটা পূণ সংখ া 89 আর 56। এই িটেক তুিম েটা চলেক িনেব, আর তারপর ইিট
চলেক তােদর যাগফল, িবেয়াগফল িনণয় করেব। সবেশেষ সব েলা চলেকর মান ফলেন
দখােব। সব িমিলেয় একিট মেলখ রচনা কেরা।
৩. যিদ তাপমা া সলিসয়ােস c িড ী হয় আর ফােরনহাইেট হয় f িড ী, তাহেল আমরা
িলখেত পাির f = 9c/5+32। ধেরা তাপমা া 30 িড ী সলিসয়াস, তাহেল ফােরনহাইেট
এিট কত হেব? তামার মেলখেত তুিম ভ ক float ধরেনর চলক ব বহার করেব।
৪. যিদ তাপমা া ফােরনহাইেট হয় f িড ী আর সলিসয়ােস হয় c িড ী, তাহেল আমরা
িলখেত পাির c = 5(f − 32)/9। ধেরা তাপমা া 76 িড ী ফােরনহাইট, তাহেল
সলিসয়ােস এিট কত হেব? তামার মেলখেত তুিম ভ ক float ধরেনর চলক ব বহার
করেব।
৫. ধেরা একটা কাজ করেত তামার 7 ঘ টা 15 িমিনট 39 সেক ড লেগেছ। এই সময়েক
সেকে ড পা র কেরা। তামার মেলখেত তুিম 60 সেকে ড এক িমিনট আর 60 িমিনেট
এক ঘ টা এই িট িবষয় বুঝােনার জ েটা বক ব বহার করেব।
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
১. এমন একিট মেলখ রচনা কেরা যিট িট পূণক int ধরেনর, আর একিট ভ ক float
ধরেনর চলক ঘাষনা কের। মেলখিট তারপর চলক িতনিটর মান যথা েম 10, 15, 12.6
আেরাপণ কের। পিরেশেষ মেলখিট চলক েলার মান পদায় দখায়।
িফিরি ৩.৩: চলক ঘাষনার মেলখ (Program Declaring Variables)
#i n c l u d e <iostream>
#i n c l u d e <c s t d l i b>
i n t main ( )
{
i n t purnok1 , purnok2 ; / / পূণক িট এক সােথ ঘাষনা
f l o a t vognok ; / / ভ কিট আলাদা ঘাষনা
২৮
৩.৫. অ শীলনী সম া (Exercise Problems)
ফলন (output)
purnok d u t i 10 15
vognok holo 12 . 6
২. ধেরা েটা পূণ সংখ া 89 আর 56। এই িটেক তুিম েটা চলেক িনেব, আর তারপর ইিট
চলেক তােদর যাগফল, িবেয়াগফল িনণয় করেব। সবেশেষ সব েলা চলেকর মান ফলেন
দখােব। সব িমিলেয় একিট মেলখ রচনা কেরা।
আমরা এই মেলখেত কবল দরকারী অংশটু দখাি । ধের িনি য তুিম দরকারী
িশর নিথ (header) অ ভু করা, নামাধার std ব বহার, main িবপাতক লখা ও মান
ফরত দয়া ইত মেধ ভােলা কের িশেখ ফেলেছা। তা তুিম যিদ সিত নীেচর লখা -
মেলখাংশ সংকলন কের চালােত চাও, তামােক িক আেগ include, namespace,
main, return ওই েলা িলেখ িনেত হেব, তারপর main িবপাতেকর িভতের return
এর আেগ তুিম আমােদর নীেচর অংশ েলা িলেখ িনেব। তারপর সংকলন কের মেলখ
চালােব।
িফিরি ৩.৪: পািটগিণেতর অণুি য়ার মেলখ (Arithmetic Program)
i n t prothom = 89 , d i t i y o = 56 ;
i n t j o g f o l = prothom + d i t i y o ;
i n t b i y o g f o l = prothom − d i t i y o ;
২৯
৩.৬. গণনা পিরভাষা (Computing Terminologies)
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 ;
৩০
অধ ায় ৪
নােম কী আেস যায় কেম পিরচয়। আপনার কাজই িনধারণ কের দেব আপনার পিরচয়। আপনার
নাম পিরচয় হেব আপনার কােজর কারেণই। মেলখ (program) িলখেত িগেয় আমরা তাই
চলক (variable), বক (constant), িবপাতক (function) সহ য কান িকছুর নাম দই
তােদর কী কােজ লাগােনা হেব সটা মাথায় রেখ।
িসিপিপেত চলক ও বেকর ব বহার তুিম ইত মেধ িশেখ ফেলেছা। আর চলেকর নাম কী রকম
িদেত হেব সটাও আেগ একটু জেনেছা। এখন আমরা িব ািরত ভােব িশখব িসিপিপেত কী ভা-
ব চলক বা বেকর নাম িদেত হয়, িবেশষ কের নােমর গঠনরীিত (syntax) কমন অথাৎ না-
ম কী রকম অ র থাকেত পারেব অথবা পারেব না। আমরা আপাতত কবল main িবপাতক
(function) িনেয় কাজ করিছ। িক ভিব েত আমরা যখন িনেজেদর জ নানান িবপাতক তরী
করেবা, তখন িবপাতেকর নামকরেণর জে ও চলক বা বেকর নাম তরীর িনয়ম েলাই কােজ
লাগেব। চলক বা বক বা িবপাতক যাইেহাক নাম ক বলা হয় শনা ক (identifier)।
িসিপিপেত কান শনা েকর (identifier) নােম কবল ১) ইংেরজী বণমালার বড় হােতর
অ র A-Z, ২) ইংেরজী বণমালার ছাট হােতর অ র a-z, ৩) ইংেরজী অংক 0-9 আর ৪) িন দাগ
(underscore) থাকেত পারেব। তেব শনা েকর নােমর থম অ র আবার অংক 0-9 হেত
পারেব না, থম অ র ছাড়া অ য কান অ র িহসােব অংক েলা ব বহার করা যােব। তরাং
বাঝাই যাে থম অ র য কান বণ A-Z বা a-z অথবা িন দাগ (underscore) হেত পা-
রেব। আর তারপেরর য কান অ র বণ বা অংক বা িন দাগ হেত পারেব। িসিপিপেত শনা েকর
নােমর দঘ িনেয় কান িবিধিনেষধ নই তেব মেলখ (program) সংকলেন (compile) কী
সংকলক ব বহার করা হে তার ওপর এটা িনভর করেত পাের। cpp.sh িদেয় সংকলন করেল
কান িবিধ িনেষধ নই, মাইে াসফট c++ িদেয় সংকলন করেল ২০৪৮ অ র পয হেত পাের।
যাইেহাক আমরা এখােন গঠনরীিত অ যায়ী বধ ও অৈবধ িকছু নাম দখেবা।
৩১
৪.২. অথেবাধক নাম (Meaningful Names)
অৈবধনাম কারণ
12 নােমর সব েলার অ র অংক হেত পারেব না
12cholok নােমর থম অ র অংক হেত পারেব না
amar cholok নােমর মাঝখােন কান ফাঁকা (space) থাকেত পারেব না
ama;cho+k বণ, অংক, িন দাগ ছাড়া অ কান তীক থাকেত পারেব না
মেলখেত (program) অৈবধনাম ব বহার করেল কী হয়? কের দেখা কী হয়! সংকলক
(compiler) িটবাতা (error message) িদেব, আর তামােক নামিট িঠক করেত হেব। তাহ-
ল এখন থেক তামার মেলখেত নাম দওয়ার সময় নােমর এই গঠনরীিত েলা মেন চলেব।
বধনাম কারণ
p একটাই অ র সিট ছাট হােতর বণ
P একটাই অ র সট বড় হােতর বণ
abc িতনটা অ র সব ছাট হােতর বণ
ABC িতনটা অ র সব বড় হােতর বণ
Abc িতনটা অ র ছাটহােতর বড়হােতর িমশােনা
bAc িতনটা অ র ছাটহােতর বড়হােতর িমশােনা
a1bc িতনটা ছাটহােতর অ র ও একটা অংক, অংকিট েত নয়
a1Bc িতনটা ছাটবড় হােতর অ র ও একটা অংক যিট েত নয়
a bc িতনটা ছাটহােতর অ র ও একিট িন দাগ
abc িতনটা ছাট হােতর অ র ও িতনিট িন দাগ
Abc িতনটা ছাটবড় হােতর অ র ও িতনিট িন দাগ
amar cholok ছাটহােতর অ র ও িন দাগ, নামিট অিধক বাধগম
amar Cholok ছাটবড় হােতর অ র ও িন দাগ, অিধক বাধগম
amarCholok123 ছাটবড় হােতর অ র, িন দাগ, ও অংক যিট েত নয়
amar125cholok ছাটহােতর অ র ও অংক, অংকিট েত নয়।
৩২
৪.৩. িলিপ সংেবদনশীলতা (Case Sensitivity)
আমরা যিদ েটা বৃ িনেয় কাজ কির তাহেল তােদর ব াসােধর জ িট চলক হেতই পাের
bashardho1 আর bashardho2 তােত কান সম া নাই। ব াপারটা দীপু ন র ২ চলি ে র
মেতা, একজেনর নাম দীপু ন র ১ আর একজন দীপু ন র ২। অথবা কউ চাইেল নাম িদেত
পাের bashardhoA আর bashardhoB। এভােব একই ধরেনর কােজ ব বহার হেব এরকম
অেনক েলা চলক লাগেল আমরা সংখ া লািগেয় বা বণ লািগেয় আলাদা আলাদা নাম তরী কের
িনেবা। এর জ অব সাজন (array) নােম আলাদা একটা ধারণা আেছ, যটা আমরা পের
জানেবা। সাজন ব বহার কের আমরা সংখ া লািগেয় যত ই া তত েলা একই ধরেনর নাম পাই।
অেনেক অিতির অলস হেয় অথবা য কান কারেণ শনা েকর নাম করণ করেত থােক a, b, c
, p, q, r , i , j , k, x, y, z ইত ািদ এেকর পর এক অ র িদেয়। এটা একটা খুবই বােজ
অভ াস। এইরকম শনা ক মােটও অথেবাধক নয়। এ েলা থেক বুঝার কান উপায় নই কান
চলকিট িঠক কী কােজ ব বহার করা হে । সবসময় এরকম নামকরণ থেক ের থাকেব।
এখােন করেত পােরা: নামকরেণ িক সবসময় একটা মা শ ই ব বহার করেবা? এেকর
অিধক শ ব বহার করেবা না? উ র হে অথেবাধক করার জ তুিম দরকার মেতা একািধক
শ অব ই ব বহার করেব, এইটা খুবই ভােলা অভ াস। আর সে ে যােত িতিট শ খুব
সহেজ বাঝা যায় স জ তামার িকছু কৗশল অবল ন করেত হেব। একটা কৗশল হেলা িট
শে র মােঝ একিট িন দাগ দওয়া যমন amar cholok। আেরকিট কৗশল হল িতিট শে র
থম অ রিট বড়হােতর দওয়া আর অ েলা ছাট হােতর, যমন AmarCholok তেব চাইেল
একদম থম শে র থম অ রিট ছাটহােতরও রাখেত পােরা যমন amarCholok। নীেচর
সারণীেত আমরা িকছু অথেবাধক নােমর উদাহরণ দখেবা।
নাম যেথাপযু তার কারণ
sum যাগফেলর জ sum চলেকর ইংেরজী নাম
jogfol যাগফেলর জ jogfol চলেকর বাংলা নাম
bijor songkhar jogfol িন দাগ িদেয় অথেবাধক শ আলাদা হেয়েছ
odd number sum িন দাগ িদেয় অথেবাধক শ আলাদা হেয়েছ
Bijor Shongkhar Jogfol িন দাগ িদেয় আলাদা, বড়হােতর আদ া র
BijorShongkharJogfol বড়হােতর থম অ র িদেয় আলাদা আলাদা
bijorShongkharJogfol এিট অেনক চিলত ও অেনেকরই পছে র
৩৩
৪.৪. সংরি ত ও চািব শ (Reserved & Key Words)
ছাটহােতর িকছু অ র বড় হােতর এইভােব িলখেত পারেবা িকনা। িবেশষ কের আমরা জািন ইং-
রজীেত আিম ছাট হােতরই িলিখ আর বড় হােতরই িলিখ শ টা আসেল একই থােক, িসিপিপেতও
িক তাই? আমরা বরং উদাহরণ িদেয় ব াপারটা দিখ। ইংেরজীেত ছাট হােতর বড় হােতর অ র
আলাদা হেলও ও েলা কবলই সৗ যবধন মুলক। উপেরর িতনেট ইংেরজী বাক তাই একই।
এবার আমরা িসিপিপ ভাষায় ছাট হােতর বড় হােতর অ েরর ব বহার দিখ। নীেচর নাম -
লার ত েকিট িসিপিপ ভাষায় আলাদা আলাদা নাম িহসােব ধরা হেব।
amarcholok , amarCholok , AmarCholok , amar cholok ,
Amar Cholok , amarChoLok , AmarChOlOk
িসিপিপেত উপেরর একটা নাম িদেয় য চলক বা বক বা িবপাতকেক বুঝােনা হেব অ নাম
িদেয় ওইটােক বুঝােনা যােব না, বরং অ একটা বুঝােনা হেয় যােব। মাট কথা েটা নােমর একটা
অ েরও যিদ এিদক সিদক থােক তাহেল নাম েটা আসেল আলাদা। েটােক একই িজিনেসর নাম
িহসােব ধের নয়া যােব না। তরাং মেলখ (program) লখার সময় খয়াল রাখেব যােত একটা
চলকেক বুঝােত িগেয় কবল বড়হােতর ছাটহােতর বেণর িভ তার কারেণ আেরকটােক বুিঝেয় না
ফেলা, তােত সব ভজঘট লেগ যােব। তামার মেলখও উ াপা া ফলাফল িদেব। আবার ধেরা
তামার একটাই চলক যার নাম amarcholok, িক পের তুিম িলেখেছা amarCholok। এই
অব ায় সংকলন (compile) করেল তামােক "amarCholok is not declared" এইরকম
িটবাতা (error message) িদেব। তামােক তখন amarCholok এর বদেল amarcholok
িলেখ িঠক করেত হেব। মেলখ তরীর সময় আমরা ায়শই এইরকম ভুল কের থািক।
উপেরর এই িনয়ম জানার পের তুিম হয়েতা মেন করেব এইটা তা ভােলাই। আমার যিদ
ইটা বৃে র ব াসােধর জ চলক লােগ একটার নাম িদেবা bashardho আর একটার নাম িদেবা
Bashardho। াঁ, তুিম সটা িদেতই পােরা। িসিপিপ যেহতু ইটােক আলাদা আলাদা চলক
িহসােব ধের িনেব, তাই এই েটা হেলা েটা বধ আলাদা নাম। তেব অথেবাধকতার িদক ভেব
তুিম হয়েতা এরকম নাম করণ থেক দূের থাকার চ া করেব। একটা অ র বড় বা ছাটহােতর
কবল এই অ একটুখািন িভ তা িদেয় আসেল তমন বশী অথেবাধক পাথক তরী করা যায় না,
ফেল মেলখ (program) পড়া কিঠন হয়। আর একটা ব াপার: চলেকর নামকরেণ বড়হােতর
ছাটহােতর অ র িমশােত তা পােরাই যমন AmarCholok, িক এমন ভােব িমিশও না য
পড়াটা খুব কিঠন হেয় যায়, যমন AmArChOlOk, এই রকম নাম চট কের পড়া আসেল স ব
না, বরং এইরকম নাম য নাদায়ক। কােজই সবিমিলেয় সহজ ও র নাম িদেব, কমন!
৩৪
৪.৪. সংরি ত ও চািব শ (Reserved & Key Words)
নাম লাল, সই বাসার কােজর ছেলর নাম লাল হয় কমেন, ালক হেলা বড় টুম, তার
কী এত বড় অস ান করা যায়! আর জামাইেয়র নাম হেলা কােদর। তা বউ আেরা এক কািঠ
বািড়েয় বলেত থােক িঠক আেছ কােজর ছেলর নাম বদেল কােদর রাখা হউক, দিখ জামাইেয়র
কমন লােগ। তারপর জামাইেয়র সামেনই কােজর ছেলেক বেল "এই এখন থেক তার নাম
িদলাম কােদর।" তারপর হঁেড় গলায় ডাকেত থােক "কােদর, এই কােদর, এই িদেক আয়।"
কমন একটা বড়ােছড়া অব া। শষ পয িঠক হয় এক বাসায় ইটা লাল তা হেত পােরনা,
একজেনর নাম বদলােত হেব। আর বাসার বড় টুেমর নাম তা আর বদলােনা যােব না কান
ভােবই, ওটা সংরি ত নাম, কােজই বদলােত হেব কােজর ছেলর নাম। তরাং কােজর ছেলর
নাম দয়া হয় লাল া। তাহেল ালেকর নাম লাল, আর কােজর ছেলর নাম লাল া।
িসিপিপ ভাষায় গঠন কাঠােমা িঠক রাখার জ িকছু িনিদ শ আেছ। আমরা ইত মেধ
এরকম িকছু শ ব বহার কেরিছ। যমন return, int , float। এই শ েলার অথ িসিপিপ
ভাষােত আেগ থেক িনিদ , যমন return মােন যখন িবপাতক (function) শষ হয়, int আর
float হল চলেকর মান কমন পূণক বা পূণ সংখ া না ভ ক বা ভ সংখ া এইরকম। এই িতনিট
ছাড়াও আেরা অেনক েলা এই রকম শ আেছ। এই শ েলা চাইেল আমরা িনেজরা আমােদর
চলক বা বক বা িবপাতেকর নাম িহসােব ব বহার করেত পারেবা না। এই েলা হে সংরি ত
শ (reserved word)। এই শ েলােক অ কথায় চািব শ ও (key word) বলা হয়।
তাহেল তামার মেলখেত তুিম এই প সংরি ত শ বা চািব শ শনা েকর (identifier) নাম
িহসােব ব বহার করেব না। কারণ ও েলা বড় টুম লােলর নােমর মেতা। যিদ একা ই দরকার
হয় তাহেল লাল ক লাল া বানােনার মেতা িকছু যাগ-িবেয়াগ কের িভ শ বািনেয় ব বহার
করেব। যমন return না ব বহার কের returnValue ব বহার করেল, এইরকম। নীেচ আমরা
িসিপিপর সংরি ত শ েলার তািলকা িদি ।
• ছাঁচ (template) সং া শ :
export, template, typename
৩৫
৪.৫. অ শীলনী সম া (Exercise Problems)
৪. অথেবাধক নাম কী? মেলখেত অথেবাধক নাম ব বহার করা উিচৎ কন?
৬. সংরি ত ও চািব শ কী? এ েলা কন শনা ক িহসােব ব বহার করা যায় না?
৩৬
৪.৫. অ শীলনী সম া (Exercise Problems)
১১. "char" : অৈবধ শনা ক কারণ নােম " ব বহার করা যায় না
১৫. 9xyz : অৈবধ শনা ক, নােমর েত অ থাকেত পাের না, পের থাকেত পাের
২২. Int : বধ শনা ক, তেব সংরি ত শ int এর সােথ িব াি দখা িদেত পাের
৩৭
৪.৬. গণনা পিরভাষা (Computing Terminologies)
২৩. INT : বধ শনা ক, তেব সংরি ত শ int এর সােথ িব াি দখা িদেত পাের
২৮. printf : বধ শনা ক, অথেবাধক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ
৩০. pow : বধ শনা ক, অথেবাধক, িক ভাষালেয় (library) িবদ মান, তাই পিরত াজ
৩৮
অধ ায় ৫
যাগান ও আেরাপণ
(Input and Assignment)
মেলখেত (program) উপা (data) কাথা থেক আেস? হয় আমরা মেলখেয়র িভতের
সরাসির িলেখ দই, যমনিট আেগর পাঠ েলােত কেরিছ, আর না হয় আমরা উপা ব বহারকারী-
দর কােছ থেক যাগান (input) নই। উপা যাগান িনেয় সিটেক ধারন করার উে ে আমরা
চলেক (variable) আেরাপণ (assign) কির যােত ওই উপা পের কােজ লাগােনা যায়।
৩৯
৫.১. উপা যাগান (Data Input)
i n t main ( )
{
i n t doirgho ; / / আয়েতর দেঘ র জ চলক
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 ) ;
// ফল ও পিরসীমা ফলন
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
৪০
৫.১. উপা যাগান (Data Input)
উপেরর মেলখেত খয়াল কেরা আমরা দেঘ র জ একিট চলক doirgho ঘাষনা কের-
িছ, িক সােথ সােথ তার কান আিদমান আেরাপ (initial value assign) কির নাই। কারণ
আেগই যমন আেলাচনা করলাম, আমরা যখন মেলখ িলখিছ তখন আমরা আসেল জািননা য
doirgho এর মান কেতা। আমরা বরং ওইটা ব বহারকারীর কােছ থেক নেবা। আর স কার-
ণ আমরা cin >> doirgho; িলেখিছ। এখােন cin হল console in। সাধারণত যাগান য
(input device) চাপিন (keyboard) ও িটপিন (mouse) আর ফলন য (output device)
নজির (monitor) িমিলেয় হল আমােদর console বা য ালয়। তা console in বলেত আম-
রা এখােন যাগান য িবেশষ কের চাপিন (keyboard) থেক যাগান (input) নয়া বুঝাি ।
তাহেল cin ব বহারকারীর কােছ থেক চাপিনর মাধ েম সংখ াটা িনেয় সটা doirgho চলেকর
িভতের িদেয় িদেব। এেত ওই চলেক একরকেমর মান আেরাপণ (value assign) হেয় যােব।
ব বহারকারীর কােছ থেক দঘ নবার পের আমােদর ও িনেত হেব। উপেরর মেলখেত
খয়াল কেরা আমরা দেঘ র মেতা কেরই ে র জ ও prostho নােম একটা int ধরেনর চলক
ঘাষনা কেরিছ আর তার পেরর সািরেত cin ব বহার কের prostho এর মান ব বহারকারীর কােছ
থেক নয়ার কথা িলেখিছ। উপেরর মেলখেয়র বাঁকী অংশটু তা আেগর পােঠর মেলখ -
লােত যমন দঘ ও ব বহার কের ফল ও পিরসীমার িলখা হেয়েছ আর তারপের
ফলন (output) দখােনা হেয়েছ িঠক তমনই। আমরা স েলা আর আেলাচনা করিছ না।
এবার আমরা আর একটু আেলাচনা কির উপেরর মেলখিট সংকলন (compile) কের চা-
লােল কী ঘটেব তা িনেয়। উপেরর মেলখিট চালােল আমরা দখব পদায় (screen) িকছু আসেছ
না, চটুলটা (cursor) কবল লাফালািফ করেছ। আমরা এই অব ায় দেঘ র মান, ধরা যাক 13
চেপ ভুি (enter) চাপেবা। িভতের িভতের cin ওই মান িনেয় doirgho চলেকর মেধ রেখ
িদেব। চটুলটা (cursor) তারপরও লাফালািফ করেব। আমরা তখন 12 িদেয় ভুি (enter) চা-
পেবা, cin ওইটা prostho চলেক রেখ িদেব। তারপর পদায় আমরা ফলন দখেত পােবা। থম
সািরেত থাকেব khetrofol holo 156 আর পেরর সািরেত porishima holo 50।
উপের মেলখেত আমরা চাইেল িকছু সংি করণ করেত পাির। যমন দঘ ও ঘাষনা
(declaration) ও যাগান (input) নয়া চার সািরেত না কের আমরা ও েলােক মা ই সািরেত
সারেত পাির। থম সািরেত আমরা চলক েটা ঘাষনা করেবা। আর পেরর সািরেত আমরা চলক
েটার যাগান িনেবা। নীেচর মেলখাংেশ (program segment) এই েলা দখােনা হেলা।
i n t doirgho , prostho ; / / আয়েতর দেঘ ও ে র জ চলক
c i n >> doirgho >> prostho ; / / দঘ ও যাগান নওয়া হেব
কউ যিদ চায় তাহেল িক ফলন অংেশও এরকম সংি করণ করেত পাের। যমন ফল
ও পিরসীমা চাইেল এক সািরেতই ফলন িদেত পাের।
cout << " k h e t r o f o l ar porishima holo " << k h e t r o f o l
<< " " << porishima << endl ; / / cout হেত এই পয
পুেরাটা আসেল এক সািরেত
তেব সবিকছু একবার cout িদেয় দওয়ার চেয় আমরা হয়েতা ইবাের িদেত চাইেবা।
৪১
৫.২. যাগান যাচনা (Input Prompt)
i n t main ( )
{
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 Prompt)
যাগান-ফলন (input-output)
doirgho koto ? 13
prostho koto ? 12
k h e t r o f o l holo 156
porishima holo 50
আেগর পােঠর মেলখেত আমরা চলেকর মান ব বহারকারীর কােছ থেক নয়ার জ cin
ব বহার কেরিছ। ওই মেলখিট যখন আমরা চালাই তখন দিখ পদায় (screen) িকছু নাই
আর চটুলটা (cursor) কেনা যেনা লাফালািফ করেছ। সই অব ায় আমরা থেম দেঘ র মান
13 িদেয় ভুি (enter) চেপিছ। চটুলটা তারপরও লাফালািফ করিছল। আমরা তখন 12 িদেয়
ভুি চেপিছ। তারপর পদায় ফলন এেসিছল থম সািরেত khetrofol holo 156 আর পেরর
সািরেত porishima holo 50। তা এই য চটুলটা (cursor) লাফালািফ করিছল দঘ ও ে র
মান নয়ার জ এইটা আমরা বুঝেত পাির কারণ আমরা িনেজরাই এে ে মেলখিট তরী
write) কেরিছ আর িনেজরাই সটা সংকলন (compile) কের চালাি (run)। আমরা এে ে
জািন য আমােদর মেলখিট থেম দঘ চাে আর সটা দবার পর চাে । এবার ভেব
দেখা আমােদর লখা মেলখ যিদ আমরা ছাড়া অ কউ চালায় (run) তাহেল স কী ভােব
জানেব চটুলিট (cursor) ওই অব ায় কন লাফাে । স িক আসেলই দঘ বা নয়ার জ
অেপ া করেছ নািক িভতের িভতের ঘটনা অ িকছু, স হয়েতা অ িকছু করেছ।
তা ওপেরর সম া সমাধােনর জ আমরা যিট করেবা সিট হেলা আমােদর মেলখেত
cin >> doirgho; লখার আেগ আমরা একটা বাতা দখােবা য আমরা দেঘ র মান চাই।
উপেরর মেলখ খয়াল কেরা cin >> doirgho; লখার আেগ আমরা cout << "doirgho
koto? "; িলেখ আসেল সটাই করেত চাইিছ। এই মেলখ যখন চালােনা হেব তখন থেম পদায়
doirgho koto? দখা যােব। আর cout এর শেষ আমরা যেহতু endl অথাৎ end line দই
নাই, চটুলটা (cursor) সেহতু ওই একই সািরেত লাফাইেত থাকেব, লাফাইেত থাকেব মুলত
cin >> doirgho; এর কারেণ doirgho এর মান নয়ার জ । আমরা তখন doirgho এর
মান িদেয় ভুি (enter) চাপেবা। তাহেল "চটুল কন লাফায়?" আমরা এই সম ার সমাধান
কের ফললাম কমন! এই য যাগান (input) নবার আেগ একটা বাতা িদেয় ব বহারকারীেক
জানােনা য আমরা কী যাগান চাই, এই ব াপারিটেক বলা হয় যাগান যাচনা (input prompt)।
উপেরর মেলখেত খয়াল কেরা আমরা ে র জে ও একই ভােব যাগান (input) নবার আেগ
"prostho koto? " বাতা িদেয় যাগান যাচনা (input prompt) কেরিছ। তাহেল এখন থেক
তামার মেলখেত যাগান নবার আেগ অব ই যাগান যাচনা করেব, কমন?
উপের মেলখেত আমরা চাইেল িকছু সংি করণ করেত পাির। যমন দঘ ও ঘাষনা
(declaration), যাগান যাচনা (input prompt) করা, ও যাগান (input) নয়া ছয় সািরেত
না কের আমরা ও েলাক মা িতন সািরেত সারেত পাির। থম সািরেত আমরা চলক েটা ঘাষনা
করেবা। আর পেরর সািরেত আমরা যাগান যাচনা করেবা তারপের সািরেত চলক েটার মান
যাগান িনেবা। নীেচ মেলখাংেশ (program segment) এই েলা দখােনা হেলা।
i n t doirgho , prostho ; / / দেঘ ও ে র জ চলক
cout << " doirgho o prostho koto ? " ; / / একসােথ যাচনা
c i n >> doirgho >> prostho ; / / দঘ ও যাগান
৪৩
৫.৩. মান আেরাপণ (Value Assignment)
পারেবা, অথবা চাইেল 13 িলেখ ভুি চেপ তারপর 12 িলেখ আবার ভুি চাপেত পারেবা। আর
ফলেনর অংশ আেগর মেতাই হেব, কােজই আমরা সটা আর দখাি না।
doirgho o prostho koto ? 13 12
উপের আমরা েটা চলক ঘাষনা (variable declare) করলাম: একটার নাম amar আর
আেরকটার নাম tomar, েটাই int ধরেনর অথাৎ পূণক, একটােত আিদমান (initial value)
িদেয় িদলাম আর একটােত িদলাম না। আমরা যখন চলক ঘাষনা কির তখন আসেল আমরা গণিনর
(computer) রিনেত (memory) িকছু জায়গা দখল কির। ধের িনেত পােরা রিন হল একটা
রা ার পােশ অেনক েলা একই রকম বাড়ী। কান চলক ঘাষনা করার সময় আমরা আসেল ওই
বাড়ী েলার একটা দখল কের সই বাড়ীটার নাম িদেয় দই আমােদর চলেকর নােম। তামরা
িন য় দেখেছা অেনেকরই বাড়ীর নাম থােক যমন "শাি নীড়"। আমােদর চলক বাড়ী েলার
নাম amar ও tomar। তা আমরা যখন উপেরর েটা চলক ঘাষনা করলাম তখন রিনেত ওই
রকম েটা জায়গা িনেয় তােদর নাম িদেয় িদলাম amar আর tomar। এখন কথা হে রিণেত
(memory) ওই জায়গায় আমরা আসেল রাখেবা কী? উ রটােতা সহজ আমরা রাখেবা চলকিটর
মান। যখন আমরা আিদমান িদেয় িদলাম তখন ওই জায়গােত আমােদর দয়া মানটা থাকেব, আর
যখন আিদমান িদেবা না, তখনও ওই জায়গািটেত আেগ থেক যাই িছল তাই থাকেব।
amar = tomar ;
এবার আমরা যিদ উপেরর মেতা কের tomar এর মান amar এ আেরাপ কির তাহেল কী
ঘটেব? আসেল উপেরর এই িববৃিত (statement) চালােনার পের amar এর আেগর মান মুেছ
িগেয় সটার নতুন মান হেয় যােব tomar এর মােনর সমান অথাৎ amar এর মানও হেব 5। এখা-
ন একটা পূণ িবষয় বেল রাখেত হেব য এই য tomar থেক amar এ মান আেরাপ করা
হেলা এেত িক tomar এর মােন কান পিরবতন হেব না। অথাৎ tomar এর মান আেগর মেতা
5-ই থাকেব। আেরাপেণ (assignment) সমান িচে র বােম যা থােক সটােক ল (target)
আর ডােন যটা থােক সটােক (source) বলা হয়, কারণ উৎস থেক মান িনেয় লে আেরাপ
করা হয়। উপেরর আেরাপেণ amar = িচে র বােম তাই এিট ল আর tomar ডানপােশ তাই
এিট উৎস। আেরাপেণর ফেল লে র মান বদেল িক উৎেসর মান বদেল না, একই থােক।
উপেরর মেলখাংশ (program segment) আর ফলনাংশ (output segment) ল
কেরা। আমরা থেম চলক x ঘাষনা কের তার আিদ মান (initial value) িদেয়িছ 3, তারপর
চলক y ঘাষনা কের তার আিদমান িদেয়িছ x+5 অথাৎ 3 + 5 = 8। এই পযােয় ফলন দখােনা
হেয়েছ x আর y েটার মােনরই। ফলনাংেশ আমরা দখেত পাি x 3 y 8। তারপর মেলখাং-
শ আমরা িলেখিছ x = y ∗ 3; ফেল x এর মান হেব এখন 8 ∗ 3 = 24, আর y এর মান িক
একই থাকেব, কারণ y এর মান আমরা কবল ব বহার কেরিছ, y এ তা কান মান আেরাপ কির
৪৪
৫.৪. মান অদল-বদল (Value Swapping)
সবিমিলেয় একটা িবষয় দখা যাে আেরাপেণ = িচে র বােম থাকা ল চলেকর (target
variable) মান কবল পিরবতন হয়, আর = িচে র ডােন থাকা চলক (variable) বা রািশর
(expression) এর মান কান পিরবতন হয় না। আেরকিট ব াপার হেলা কান চলেক পের কান
নতুন মান আেরাপ না হওয়া পয আেগরবার য মান আেরাপ করা হেয়িছল সটাই থােক।
উপের আমরা কবল চলক x আর y ঘাষনা কের তােদর আিদমান িহসােব 12 ও 13 িদেয়
িদলাম। এখন আমরা এমন িকছু করেবা যােত x আর y মান অদল-বদল হেয় যায়। থেমই আমরা
৪৫
৫.৪. মান অদল-বদল (Value Swapping)
একটা চটুল সমাধান কির। তামােদর মেধ যারা ু ধরেনর আর চটপেট তারা সাধারণত এই
সমাধানিট করেত চাইেব। নীেচর িববৃিত েটা ল কেরা: আমরা ফ x এর মেধ সরাসির 13
আেরাপ কেরিছ আর y এর মেধ 12 আেরাপ কেরিছ। ব স হেয় গল x আর y এর মান অদল-বদল!
আসেল আমরা কী এইেট চেয়িছলাম? এখােন তা চলক েটার মেধ একটা থেক আেরকটােত
মান নয়ার মেতা কান ঘটনা ঘেট িন, কােজই কান অদল বদেলর িকছু ঘেট িন!
x = 13 ; / / x এর মান আেরাপ করা হেলা
y = 12 ; / / y এর মান আেরাপ করা হেলা
২. কাঁেচর পয়ালা যেহতু এখন খািল আর কাঁসার পয়ালায় আেছ কমলার রস, আমরা তাই
কাঁসার পয়ালার কমলার রস কাঁেচর পয়ালায় ঢালেবা। ফেল কাঁেচর পয়ালায় থাকেলা
কমলার রস আর কাঁসার পয়ালা খািল হেয় গেলা।
৩. কাঁসার পয়ালা যেহতু এখন খািল আর কােঠর পয়লায় আেছ আঙুেরর রস, আমরা তাই
কােঠর পয়ালার আঙুেরর রস কাঁসার পয়ালায় ঢালেবা। ফেল কাঁসার পয়ালায় থাকেলা
আঙুেরর রস আর কােঠর পয়ালা খািল হেয় গেলা।
তা উপেরর িতনিট িববৃিত চালােলই আমােদর x আর y চলক েটার মান অদল-বদল হেয়
গেলা। খয়াল কেরেছা চলেকর নাম যখন আমরা আেরাপ িচে র ডােন িলেখিছ তখন আসেল
আমরা চলকিটর ডান-মান বুিঝেয়িছ, আর যখন বােম িলেখিছ তখন বাম-মান বুিঝেয়িছ। তেব প-
য়ালা আর ফেলর রেসর অদল বদেলর সােথ চলক আর মােনর অদল-বদেলর িক িকছুটা তফাৎ
আেছ। তফাৎটা হেলা ফেলর রস এক পয়ালা থেক আেরক পয়ালয় ঢালেল যটা থেক ঢালা
হেলা সই পয়ালা খািল হেয় যায়। িক চলেকর ে z = x; করেল চলক x এর মান চলক z
৪৬
৫.৫. আেরাপেণর বাম ও ডান (Assignment Left and Right)
এ আেরাপ হয় িঠকই, িক চলক x িকছুেতই খািল হয় না, বরং তার য মান িছেলা সটাই থােক।
চলেকর মান বদেল যায় কবল যখন এেত নতুন মান আেরাপ করা হয়।
x = 3; এখােন চলক x বলেত আমরা আসেল চলক x এর জ রিনেত (memory) নয়া জা-
য়গাটু বুিঝ যখােন মান 3 ক রাখা হেব। এখােন কান ভােবই চলক x এ আেগ থেক
িবদ মান মানেক বুঝােনা হে না। খয়াল কেরা এখােন চলক x আেরাপ = িচে র বাম পা-
শ আেছ। যখন চলক x আসেল রিনেত বরা কৃত জায়গােক বুঝায় তখন এটােক আমরা
ফ চলক না বেল আেরা কের বলেবা চলেকর বাম-মান (l-value)। তাহেল মেন
রেখা চলেকর বাম মান িদেয় আমরা বুঝােবা চলেকর জ রিনেত নয়া জায়গাটু ।
y = x; এখােন চলক y বলেত আমরা চলক y এর জ রিনেত বরা পাওয়া জায়গাটু েক বুিঝ।
আর চলক y আেরাপ = িচে র বােম আেছ তাই এখােন চলক y এর বাম-মান ব ব ত
হেয়েছ। তেব চলক x বলেত এখােন আমরা কবল তার মানটােক বুিঝ। খয়াল কেরা চলক
x এর মানটাইেতা চলক y এর রিনর জায়গাটােত জমা হেব, চলক x এর জ বরা
জায়গােতা আর িগেয় চলক y এর জায়গায় লখা হেব না। আমরা দখিছ এখােন চলক x
আেরাপ = িচে র ডােন রেয়েছ। যখন চলক x আসেল তার মানটােক বুঝায় তখন আমরা
এটােক বলব চলেকর ডান-মান (r-value)। চলেকর ডান মান িদেয় আমরা তাহেল বুঝােবা
চলেকর য মান সিটেক, রিণেত থাকা জায়গািটেক নয়।
উপেরর আেলাচনা থেক আমরা একটা িবষয়ই পির ার করেত চেয়িছ সটা হেলা, আেরাপ
= িচে র বােম আমরা কবল এমন িকছু িদেত পারেবা যার জ রিনেত জায়গা দখল করা আেছ,
৪৭
৫.৬. আ -শরন আেরাপণ (Self-Referential Assignment)
অথাৎ যার বাম-মান (l-value) আেছ। আর আেরাপ িচে র ডান পােশ আমরা এমন িকছু িদেত
পারেবা যার মান আেছ অথাৎ ডান-মান (r-value) আেছ। একটা িবষয় খয়াল কেরা যার বাম-
মান আেছ অথাৎ রিনেত যার জায়গা আেছ তার একটা মানও থাকেবই অথাৎ তার ডান-মান
থাকেবই, যমন য কান চলেকর। কথা হে এমন িকছু িক আেছ যার ডান মান আেছ িক বাম
মান নাই। উ র ধের িনেত পােরা আেছ। যমন x = 3; এইখােন 3 এর ডান মান আেছ িক বাম
মান নাই। কােজই কউ চাইেল 3 = x; িলখেত পারেব না, সংকলন (compile) করার সময়
িট দখােব বলেব "error: lvalue required as left operand of assignment"।
একই ভােব কউ চাইেল আেরাপণ িহসােব y+3 = x;ও িলখেত পারেব না, একই িট (error)
দখােব, কারণ চলক y এর বাম মান স ব হেলও y + 3 করেল ওইটা আর চলক y থােক না হেয়
যায় একটা রািশ যার মান হেব y এর মান যাগ 3, কােজই সটার কবল মান থােক, তার জ
রিনেত কান জায়গা থােক না। বুঝাই যাে অ িদেক আেরাপণ িহসােব x = y + 3; িলখা
যােব কারণ y + 3 এর ডান-মান আেছ অপর িদেক চলক x এর বাম-মান আেছ।
আসেল = িচ িট গিণেত আমরা ব বহার কির েটা সংখ া তুলনা কের যিদ দিখ তারা এেক
অপেরর সমান তাহেল। আমরা তাই ওটােক গিণেত সমান (equal) িচ বেল থািক। িক গণনার
জগেত = িচ িটেক সমান িচ িহসােব ব বহার না কের বরং আেরাপণ (assignment) িচ
িহসােব ব বহার করা হয়। কােজই কান মেলখেত আমরা যখন x = x + 1; দিখ তখন আসেল
ওটা কান ভােবই গিণেতর সমীকরণ নয়, বরং ওইটা গণনার জগেতর আেরাপণ। তরাং গিণেতর
জগেত ওইটা কান অথ তরী না করেলও গণনার জগেত ওটার িনিদ অথ আেছ।
আমরা আেরাপণ (assignment) িনেয় আেগই আেলাচনা কেরিছ। ওই আেরাপণ েলার সব-
েলােত বাম আর ডান উভয় পােশ চলক থাকেলও আলাদা আলাদা চলক িছল। আর x = x + 1ও
আেরাপণ তেব এখােন একই চলক আেরাপ িচে র বােমও আেছ ডােনও আেছ। এইরকম আেরা-
পণ যখােন একই চলক বােমও আেছ ডােনও আেছ সটােক আমরা বলেবা আ শরন আেরাপণ
(self-referential assignment) অথাৎ যখােন একটা চলক িনেজর মােনর জ িনেজরই
শরনাপ হয়। আ শরণ আেরাপেণ ডানপােশ চলকিটর ডান-মান (r-value) ব ব ত হয়, আর
বামপােশ চলকিটর বাম-মান (l-value) ব ব ত হয়। এই রকম আেরাপেণ আসেল কী ঘেট?
int x = 3 ; / / চলক x এ আিদ মান আেরাপ করা হেলা
x = x + 1; / / এখােন আ −শরণ আেরাপণ করা হে
cout << x << endl ; / / চলক x এর মান ফলন দওয়া হে
এই রকম আেরাপণ বুঝেত গেল আমরা x = x + 1; িববৃিতিটেক ইিট ঘটনায় িবভ কের
িনেত পাির। একটা ঘটনা হল ডান পােশ x + 1 িহসাব করা অথাৎ x+1 এর মান বা আেরা পির-
ার কের বলেল ডান-মান িহসাব করা। আর অ ঘটনাটা হল বাম পােশ x এর বাম-মােন অথাৎ
৪৮
৫.৭. অ শীলনী সম া (Exercise Problems)
রিনেত (memory) x এর জ বরা করা জায়গায় ডান পাশ থেক পাওয়া মানিট িলেখ দ-
ওয়া। তা এই েটা ঘটনার থমিট আেগ ঘটেব আর ি তীয়িট পের ঘটেব। উপের আমরা x এর
আিদ মান িনেয়িছ 3। এরপর যখন x= x+1; িনবািহত (execute) হেব তখন থম ঘটনািট ঘটেব
আেগ অথাৎ x + 1 মান িহসাব হেব। x এর মান যেহতু এই অব ায় 3 তাই x + 1 হেব 4। মেন
কের দেখা এই 4 এর িক কবল ডান-মান আেছ এর জ রিনেত কান জায়গা দখল করা নই
বা এর কান বাম-মান নই। অথাৎ এই 4 কান ভােবই x চলেকর জায়গায় নই, অ কাথাও
আেছ। যাইেহাক এমতাব ায় এরপর ঘটেব ি তীয় ঘটনািট অথাৎ এই 4 মানিট িগেয় লখা হেয়
যােব x এর জ বরা জায়গােত। আমরা তাই x এর পুরেনা মান 3 বদেল সখােন পােবা এর
নতুন মান 4। তাহেল x = x + 1; আ -শরন আেরাপেণর ফেল চলেকর মান এক বেড় গেলা।
আ শরন আেরাপেণর আেরা নানারকম জিটল অব া আেছ যমন x = x ∗ 3; বা x = x∗
x + x + 1;। এ েলার িতিট ে আেগ ডানপােশর মান িহসাব করা হেব আর তারপর সই
মান বাম পােশ িলেখ দয়া হেব, ফেল চলকিটেত নতুন একট মান থাকেব।
১. এমন একিট মেলখ (program) রচনা কেরা যিট একিট পূণক (int) ও একিট ভ ক
(float) যাগান (input) িনেয় স েলা আবার ফলেন (output) দখায়।
২. এমন একিট মেলখ (program) রচনা কেরা যিট িট ভ ক (float) সংখ া যাগান
(input) িনেয় সংখ া িট ও তােদর যাগফল ফলেন (output) দখায়।
৩. এমন একিট মেলখ (program) রচনা কেরা যিট িতনিট পূণক (int) যাগান (input)
িনেয় তােদরেক য েম যাগান নয়া হেয়েছ সই েম আবার উে া েম দখােব। যমন
ভু সংখ া িতনিট যিদ হয় পর পর 2 3 1 তাহল িসধা েম দখােব 2 3 1 আবার তােদর
উ া েম দখােব 1 3 2। খয়াল কেরা আমরা িক মােনর ম বলিছ না।
৪৯
৫.৭. অ শীলনী সম া (Exercise Problems)
৪. এমন একিট মেলখ (program) রচনা কেরা যিট একদম িঠক িঠক নীেচর মেতা যাগান
(input) ও ফলন (output) উৎপ কের। তুিম িক পরী ার ন র েলা যাগান িনেব,
আর আমরা এেককবার চালােনার সময় এক এক রকম সংখ া যাগান িদেবা।
f o l a f o l n i r n o y e r kromolekho
− − − − − − − − − − − − − −
prothom p o r i k k h a i koto ? 90
d i t i y o p o r i k k h a i koto ? 75
t r i t i y o p o r i k k h a i koto ? 91
− − − − − − − − − − − − − −
shorbo mot number holo 256
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
আমরা ধের িনি য তুিম দরকারী িশর নিথ (header) অ ভু করা, নামাধার
(namespace) std ব বহার করা, main িবপাতেকর কংকাল লখা আর সটার
শেষ return EXIT SUCCESS; িলেখ মান ফরত দয়া ইত মেধ ভােলা কের
িশেখ ফেলেছা। তা তুিম যিদ নীেচ লখা মেলখাংশ েলা সংকলন (compile)
কের চালােত (run) চাও, তামােক িক আেগ include, namespace, main,
return এ েলা িলেখ িনেত হেব, তারপর main িবপাতেকর িভতের return এর
আেগ তুিম আমােদর নীেচর অংশ েলা িলেখ িনেব। তারপর সংকলন কের মেলখ
চালােব। আমরা এখন থেক মাটামুিট এইভােব মেলখাংশ দখােবা।
১. এমন একিট মেলখ (program) রচনা কেরা যিট একিট পূণক (int) ও একিট ভ ক
(float) যাগান (input) িনেয় স েলা আবার ফলেন (output) দখায়।
cout << " puronok holo " << purnok << endl ;
cout << " vognok holo " << vognok << endl ;
২. এমন একিট মেলখ (program) রচনা কেরা যিট িট ভ ক (float) সংখ া যাগান
(input) িনেয় সংখ া িট ও তােদর যাগফল ফলেন (output) দখায়।
৫০
৫.৭. অ শীলনী সম া (Exercise Problems)
f l o a t j o g f o l = prothom + d i t i y o ;
৩. এমন একিট মেলখ (program) রচনা কেরা যিট িতনিট পূণক (int) যাগান (input)
িনেয় তােদরেক য েম যাগান নয়া হেয়েছ সই েম আবার উে া েম দখােব। যমন
ভু সংখ া িতনিট যিদ হয় পর পর 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
৫১
৫.৮. গণনা পিরভাষা (Computing Terminologies)
i n t f o l a f o l = prothom + d i t i y o + t r i t i y o ;
৫২
অধ ায় ৬
গািণিতক ি য়াকরণ
(Mathematical Processing)
৫৩
৬.২. িয়ক অণুি য়া (Binary Operators)
িসিপিপেত িয়ক (binary) অণুি য়ক েলা যাগ +, িবেয়াগ −, ণ ∗, কী ভােব কাজ কের?
যথাযথ মেলখ িলেখ উদাহরণ সহ বুিঝেয় দাও। িয়ক অণুি য়ক (operator) েটা উপাদােনর
(operand) ওপর যু হেয় ফলাফল উৎপ কের।
উপেরর মেলখাংশ (program segment) খয়াল কেরা। আর তার সােথ নীেচর ফল-
নাংশ (output segment) িমিলেয় নাও। ল কেরা আমরা িতনিট কের যাগ, িবেয়াগ, আর
ণ কেরিছ। যাগ, িবেয়াগ, বা ণ আমরা ভােলাই জািন, নতুন কের শখার িকছু নাই। তেব এক-
িট িবষয় খয়াল করেত হেব। সিট হেলা উপাে র ধরণ কমন? আর এ কারেণই আমরা িতিট
অণুি য়ার (operator) জে িতনিট কের উদাহরণ িনেয়িছ। িতিট অণুি য়ার উদাহরণ েলার
থম সািরেত খয়াল কেরা। সখােন উপাদান (operand) িহসােব আমরা েটা পূণেকর যাগ,
িবেয়াগ বা ণ কেরিছ, যমন 5 + 3, 5 − 3 আর 5 ∗ 3। ফলাফল িহসােব যা পেয়িছ তাও
একিট পূণক, যমন 8, 2, আর 15। এবার িতিট অণুি য়ার জ তৃতীয় সািরেত খয়াল কেরা।
সখােন উপাদান (operand) িহসােব আমরা েটা ভ ক যাগ, িবেয়াগ বা ণ কেরিছ, যমন 5.
1 + 3.2, 5.1 − 3.2 আর 5.1 ∗ 3.2। ফলাফল িহসােবও আমরা পেয়িছ একিট ভ ক যমন
৫৪
৬.৩. ভাগফল ও ভাগেশষ (Division and Remainder)
8.3, 1.9, আর 16.32। তারপর িতিট অণুি য়ার জ ি তীয় সািরেত খয়াল কেরা। উপাদান
িহসােব একিট ভ ক ও একিট পূণক যাগ, িবেয়াগ বা ণ করা হেয়েছ যমন 5.1 + 3, 5.1 −
3, আর 5.1 ∗ 3। আর ফলাফল এেসেছ একিট ভ ক যমন 8.1, 2.1, আর 15.3, য েলার
কানিটই পূণক নয়। উপাদান েটা একটা ভ ক হওয়ায় ফলাফলও ভ ক হেয় গেছ।
ফলনাংশ (output segment)
5 + 3 = 8
5.1 + 3 = 8.1
5.1 + 3.2 = 8.3
5 − 3 = 2
5.1 − 3 = 2.1
5.1 − 3.2 = 1.9
5 ∗ 3 = 15
5 . 1 ∗ 3 = 15 . 3
5 . 1 ∗ 3 . 2 = 16 . 32
তাহেল উপেরর আেলাচনা থেক আমরা দখলাম কান অণুি য়ার (operator) যিদ িট
উপাদানই (operand) একরকম হয় তাহেল ফলাফলও সই রকমই হয়। যমন উপাদান েটাই
int হেল ফলাফলও int; উপাদান েটাই float হেল ফলাফলও float। আর যিদ েটা উপাদান
রকম হয় যমন একিট পূণক বা int আর একিট ভ ক বা float তাহেল ফলাফল হেব ভ ক বা
float। গিণেত আমরা জািন পূণক সংখ া েলা একই সােথ ভ কও যমন 3 আসেল 3.0, িক
একিট ভ ক িক পূণক নাও হেত পাের যমন 5.1 ভ ক িক এেক পূণক িহসােব লখা স ব নয়।
আর এ কারেণ কান অণুি য়া (operator) েয়ােগর পূেব উপাদান (operand) েটা রকম
হেল থেম পূণকিটেক িভতের িভতের ভ েক পা র কের নয়া হয়, আর তারপর যাগ, িবেয়াগ
বা ণ করা হয় েটােক ভ ক িহসােব িনেয়ই। এই য িভতের িভতের পূণকিট ভ েক পা র করা
হয় এটা এক রকেমর উপা কারা র (type casting)। উপা কারা র িনেয় আমরা পের
আেরা িব ািরত জানেবা, আপাতত পূণক থেক ভ েক কারা র মেন রােখা।
ভাগফেলর উপা করণ (data type) কমন হেব সই িনয়ম আসেল যাগ, িবেয়াগ, বা
েণর মেতা একই। যিদ েটা উপাদানই (operand) এক রকেমর হয় তাহেল ফলাফলও হেব
৫৫
৬.৩. ভাগফল ও ভাগেশষ (Division and Remainder)
উপেরর ফলনাংশ ল কেরা, যিদ ভােগর উপাদান েটার যেকান একিটও ভ ক হয়, যমন
শেষর িতন সাির, তাহেল িক ভাগেশেষর কান ব াপার থােক না, ফেল আমরা সে ে ভাগফল
পাই 2.6। িক ভােগর ে যিদ েটা উপাদানই পূণক হয়, যমন থম সাির তাহেল ভাগিট
িক একটু আলাদা। যমন 13 / 5 করেল আমরা ফলাফল পাই 2 কারণ আমরা জািন এে ে
3 অবিশ থােক। ভােগর ে আেরা একিট পূণ িবষয় আেছ তা হেলা উপাদােনর পূণক -
লা ধনা ক না ঋণা ক। কারণ ঋণা ক সংখ ার ভাগ একটু িবটেকেল হেত পাের। সব িমিলেয়
পূণ সংখ ার ভাগ আেরা িব ািরত কের আমরা ভাগেশেষর সােথ িমিলেয় নীেচ আেলাচনা করেবা।
তেব একটা কথা মেন রাখেব ভােগর ে যিদ ভাজক হয় যমন 13 / 0 তাহেল তামার
মেলখ চালােনার (run) সময় divide by zero বা িদেয় ভাগ নােম িটবাতা (error
message) দিখেয় ব হেয় যােব। এই রকম িট সংকলেনর (compile) সময় ধরা পেড় না,
কবল চালােনার (run) সময় বা িনবাহ (execute) করার সময় ধরা পেড়, তাই এেদরেক বলা
হয় চলা-কালীন (run-time) বা িনবাহ-কালীন (execution-time) িট।
িফিরি ৬.৪: পািটগিণেতর ভাগেশষ অণুি য়া (Arithmetic Remainder Operation)
cout << " 13 / 5 = " << 13 / 5 << " ";
cout << " 13 % 5 = " << 13 % 5 << endl ;
৫৬
৬.৩. ভাগফল ও ভাগেশষ (Division and Remainder)
হেয় যায়। কােজই এমন িকছু আমােদর মেলখেত (program) িলখেল সংকলন (compile)
করার সময় িট (error) আসেব। নীেচর মেলখাংেশর শেষর িতনিট সাির দখেত পােরা য-
েলা টীকা িহসােব রাখা আেছ। ওই েলা টীকা না কের সামেনর // হলােনা দাগ েটা তুেল িদেল
মেলখেয়র অংশ হেয় যােব, আর তখন সংকলন করেল িট আসেব, কের দখেত পােরা।
একটা িবষয় খয়াল কেরেছা, এখােন আমরা িক টীকার (comment) হলােনা // িচ
েটার একরকেমর অপব বহার কেরিছ। উপেরর মেলখাংেশর শষ িতনিট সাির আসেল কান
ভােবই কৃত টীকা নয়। ও েলােতা বাংলায় বা ইংেরজীেত লখা নয়, ও েলা িসিপিপেত লখা
আর টীকা িচ তুেল িনেলই ও েলা মেলখেয়র অংশ হেয় যােব সহেজই। তবু কন এখােন আম-
রা ও েলােক টীকার িভতের রাখলাম? এটা আসেল একটা খুবই উপকারী কৗশল। টীকার িভতের
রাখেল যেহতু সটা মেলখেয়র িঠক অংশ থােক না, সংকলন হয় না, কান িট আসার ব াপার
নাই, আমরা তাই মােঝ মােঝ িকছু িকছু িসিপিপেত লখা অংশও টীকার িভতের রািখ। মেলখ
(program) লখার সময় আমরা নানান িকছু পরী া িনরী া কির, এভােব কির, ওভােব কির।
তখন য অংশ েলা ওই সময় দরকার নাই, চাইেল স েলা তা মুেছ ফলা যায়, িক মুেছ ফল-
লই তা তামােক পের আবার ক কের িলখেত হেত পাের। এমতাব ায় তুিম যিদ ওই অদরকারী
অংশটু েত টীকা িদেয় (commenting) দাও, ব স হেয় গেলা। কান ঝােমলা নাই, পের ওই
অংশটু আবার দরকার হেলই টীকা তুেল (uncomment) িনেব। কী চমৎকার কৗশল তাই না!
আমরা সবাই এিট হরদম ব বহার কির। এখন থেক এই কৗশল কােজ লাগােব, কমন!
এবাের ভাগেশেষর ফলাফেলর িদেক নজর দই। ভাগফল সহ আেলাচনার িবধার জ উপ-
রর মেলখাংশ (program segment) আর ফলনাংেশ (output segment) আমরা ভা-
গেশেষর সােথ সােথ ভাগফলও দিখেয়িছ। আমরা আেগই আেলাচনা কেরিছ ভাগেশষ করা যায়
কবল পূণেকর জ । ভাগ করেল যা অবেশষ থােক তাই ভাগেশষ। িক পূণক তা ধনা কও
(positive) হেত পাের, ঋণা কও (negative) হেত পাের। আসেল ঋণা ক সংখ ার ভাগেশষ
িনেয়ই যেতা জিটলতা সৃি হয়। ঋণা ক সংখ ার ভাগেশষ িনেয় নানান রকম িনয়ম আেছ, আম-
রা এখােন আেলাচনা করিছ cpp.sh এ য িনয়েম ভাগেশষ হয়, সটা িনেয়। তুিম য সংকলক
(compiler) িদেয় মেলখ সংকলন (compile) করেব, জেন িনও সখােন কমন হয়। কােরা
কােছ থেক জেন িনেত পােরা। অথবা িনেজই উপেরর মেলখাংশ (program segment) এর
মেতা কের মেলখ তরী কের চািলেয় দেখ িনেত পােরা। তমন কিঠন িকছু নয়।
যাইেহাক উপেরর ফলনাংশ খয়াল কেরা। সখােন িক কান ভ ক নই, সব েলাই পূণক,
তেব ধনা ক ও ঋণা ক আেছ। খয়াল কেরা ভাগফল ও ভাগেশষ উভয় ে কবল মানটা
পাওয়া যায় িচ িবেবচনা না করেল। যমন চারটা ব াপােরর সব েলােতই িচ বাদ িদেল ভাজক
(divisor) আর ভাজ (dividend) হয় কবল 5 আর 13। 13 ক 5 িদেয় ভাগ করেল ভাগফল হয়
2 আর ভাগেশষ হয় 3। এই পয সব েলা ব াপােরই িঠক আেছ, িক গালমাল বাঁেধ কবল িচ
িনেয়, ভাগফল বা ভাগেশষ কখন ধনা ক + হেব আর কখন ঋণা ক − হেব। ভাগফেলর ে
খয়াল কেরা যখনই সংখ া েটার িচ একই রকম তখন ভাগফল ধনা ক যমন থম ও চতুথ
সাির, আর যখনই তারা িবপরীত িচে র তখনই ভাগফল ঋণা ক যমন ি তীয় ও তৃতীয় সাির।
ভাগেশেষর ে িচ িনভর কের ভাজ (dividend) এর ওপর, ভাজেকর ওপর নয়। ভাজ
যখনই ধনা ক যমন 13, ভাগেশষ তখন ধনা ক + হেয়েছ। আর ভাজ যখন ঋণা ক যমন
৫৭
৬.৪. আেরাপণ অণুি য়া (Assignment Operator)
−13 তখন ভাগেশষ ঋণা ক − হেয়েছ। ভাগেশেষর িচ 5 বা −5 এর িচে র ওপর িনভর কের
নাই। একটা িবষয় আেগই বেলিছ, ভাগফল ও ভাগেশেষর ে ভাজক যিদ হয় তাহেল
তামার মেলখক চালােনার সময় divide by zero বা িদেয় ভাগ নােম িটবাতা দিখেয়
ব হেয় যােব। এই রকম িট সংকলেনর (compile) সময় ধরা পেড় না, কবল চালােনার (run)
সময় ধরা পেড়, তাই এেদরেক বলা হয় চলা-কালীন িট (run-time error)।
উপেরর উদাহরণ েলােত আমরা যিদও কবল সংখ াই সরাসির ব বহার কেরিছ, তুিম িক
চাইেল কান চলক (variable) বা বক (constant) ব বহার করেত পারেত। তুিম চাইেল কান
রািশ (expression) বা িবপাতক (function) ও ব বহার করেত পারেত। আসেল ডান-মান
(rvalue) আেছ এরকম য কান িকছুই এখােন ব বহার করা যেত পাের। এই আেলাচনা েলা
এিকক অণুি য়ার সময়ই আেলাচনা করা হেয়েছ, তবুও আবার বিল। িবপাতক (function) এমন
একটা িজিনস য িকছু যাগান (input) িনেয় িকছু ফলন (output) দয়। যমন cstdlib নামক
িশর নিথেত (header file) abs(x) নােম একটা িবপাতক আেছ যিট একিট সংখ া যাগান
িনেয় তার িচ টু বাদ িদেয় কবল মানটু ফলন িহসােব ফরত দয়। অথাৎ abs(3) হেলা
3 আবার abs(−3)ও 3। একই ভােব abs(3.5) হেলা 3.5 আবার abs(−3.5)ও 3.5। রািশ
(expression) হল সংখ া, বক, চলক, অণুি য়ক, িবপাতক িমেল যখন একটা িকছু তরী করা
হয় যার মান আেছ সিট, যমন 3 + x ∗ abs(y) একিট রািশ যখােন x আর y হল চলক।
i n t a = 4 , b = −3 ;
i n t const c = 5 ;
a + 3, c / b, b ∗ c; / / চলক , বক , সংখ া
a = c % abs ( b ) ; / / abs ( b ) হল িবপাতক
a = a − ( b ∗ c) ; / / b ∗ c হল রািশ
৫৮
৬.৫. যৗিগক আেরাপণ (Compound Assignment)
তরাং কউ যমন অেনক েলা যাগ পরপর িলখেত পাের x + y + z + 3, িঠক তমিন
চাইেলই কউ অেনক েলা আেরাপণও পরপর িলখেত পাের যমন z = y = x = w। তেব কান
ব নী নাই ধের িনেল, যােগর ে সাধারণত সবেচেয় বােমর যাগিট থেক হেয় যাগ েলা
পরপর বাম থেক ডােন এেক এেক হেত থােক। আর আেরাপেণর (assignment) এর ে
সবেচেয় ডােন আেরাপণ হেত কের আেরাপণ েলা ডান থেক বােম এেক এেক হেত থােক।
int x = 1 , y = 2 ; z = 3 ; / / আিদ মান আেরাপণ
x + ( y = 3) ; / / y হেলা 3 , ফলাফল 1 + 3 বা 4
y = x + ( z = 4 ) ; / / z হেলা 4 , y হেলা 1 + 4 বা 5
z = 5 + ( y = z −3 ) ; / / y হেলা 4 − 3 বা 1 , z হেলা 5 + 1
উপেরর উদাহরেণর শষ িতনিট সাির খয়াল কেরা। চলক ঘাষনার পেরর সািরর িববৃিতেত
(statement) x + (y = 3) ; থেম ব নীর িভতের y এর মান 3 আেরাপণ (assign) হেব
আর আেরাপেণর (assignment) ফলাফলও হেব 3, যা x এর মান 1 সােথ যাগ হেয় যাগফল
হেব 4। এই 4 হেলা পুেরা রািশিটর মান। এরপেরর িববৃিতেত y = x + (z = 4) ; থেম ব নীর
িভতের z এর মান আেরাপ হেব 4 আর ফলাফল ও 4, আর তারপর 4 ও x এর মান 1 এর সােথ
যাগ হেয় হেব 5 যা িগেয় y চলেক আেরািপত হেব। এবাের আিস শষ িববৃিতেত z = 5 + (y
= z −3); থেম ব নীর িভতের z − 3 িহসাব হেব, z এর মান িঠক আেগর সািরেত হেয়েছ 4
সােথ 3 িবেয়াগ হেল হয় 1 যা y এ আেরািপত হেব আর আেরাপেণর ফলাফলও (result) হেব 1।
এরপর সই 1 আর 5 যাগ হেয় ফল হেব 6 যা z এর িভতের আেরািপত হেব।
৫৯
৬.৬. াস ও বৃি অণুি য়া (Increment and Decrement)
x += 13 ; // এর মােন আসেল x = x + 13 ;
x −= 7; // এর মােন আসেল x = x − 7 ;
y ∗= x; // এর মােন আসেল y = y ∗ x ;
z /= x + y; // এর মােন আসেল z = z / ( x + y ) ;
z %= abs ( 3 ) ; // এর মােন আসেল z = z % abs ( 3 ) ;
তাহেল উপেরর উদাহরণ েলা থেক দখা যাে িতিট যৗিগক আেরাপণ আসেল এক এক-
িট আ -শরণ আেরাপন (self-referential assignment)। যৗিগক আেরাপেণর বাম পােশ
য চলকিট থােক সিটর মােনর সােথ সংি পািটগিণতীয় অণুি য়া যমন যাগ, িবেয়াগ, ণ,
ভাগফল, বা ভাগেশষ িহসাব করা হয়, আর তারপর ফলাফলিট ওই চলকিটেতই আেরাপ করা হয়।
আসেল যৗিগক আেরাপণ েলা মেলখ রচনার সময় ক ফ িকি ত কমােনার জ তরী করা
হেয়েছ। অেনক সময় আেরাপেনর বাম পােশ যিট থাকেব সিট সহজ সরল চলক না হেয় অ িকছু
হেত পাের যিট হয়েতা খুবই বড়, সিটর অব ই বাম-মান (l-value) আেছ অথাৎ তার জ র-
িণেত (memory) জায়গা দখল করা আেছ। যমন ধেরা নীেচর উদাহরেণ আমরা সাজন (array)
ব বহার করিছ, ণী (class) ব বহার করিছ, এ েলা কী এখনই তা জানেত চেয়া না, আমরা পের
িব ািরত কের িশখেবা ও েলা। খািল খয়াল কেরা থম সািরেত কী ভােব ল া একটা িজিনস
আেরাপ = িচে র বাম ও ডান উভয় পােশই আেছ। আর খয়াল কেরা শেষর সািরর িববৃিতিট:
যৗিগক আেরাপণ ব বহার কের ওই একই িবষয় কত চমৎকার কের সংে েপ লখা গেছ।
t h i s−>amarSajonCholok [ suchok ] =
t h i s−>amarSajonCholok [ suchok ] + amarbriddhi ;
তাহেল দখেল তা একই িজিনস আেরাপ = িচে র বাম পােশ একবার আবার পর েণই
আেরাপ = িচে র ডানপােশও একবার িলখেত হেব, এিট বশ িবরি কর, আর দখেতও কত
িবরি কর লােগ। তারেচেয় যৗিগক আেরাপণ সংি আর বুঝাটাও সহজ। ফলাফেলর িহসােব
উভয় ে িক আমরা একই ফলাফল পােবা। তেব মেন রেখা মেলখ (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 segment) খয়াল কেরা। েটা চলক (variable) নয়া
হেয়েছ x আর y। চলক x এর আিদমান (initial value) দয়া হেয়েছ 6, িক y এর আিদ মান দ-
৬০
৬.৬. াস ও বৃি অণুি য়া (Increment and Decrement)
য়া হয় িন। এরপর ি তীয় আর তৃতীয় িববৃিতেত রেয়েছ ++x; আর x++;, খয়াল কেরা উভয় ে
x এর মান এক কের বেড়েছ, এ কারেণ অব ++ ক বলা হয় বৃি অণুি য়ক (increment
operator)। বৃি অণুি য়ক ++ চলেকর আেগই দয়া হউক আর পেরই দয়া হউক ফলাফল িক-
একই। অব বৃি ++ আেগ ব বহার করেল এিটেক পূব-বৃি (pre-increment) আর পের
ব বহার করেল এিটেক উ র-বৃি (post-increment) বলা হয়।
তেব বেল রািখ বৃি অণুি য়েকর (increment operator) সােথ িক এমন িকছু ব ব-
হার করেত হেব যার বাম-মান (l-value) রেয়েছ অথাৎ রিণেত (memory) জায়গা দখল করা
আেছ। চলেকর (variable) যেহতু বাম-মান আেছ তাই আমরা চলক x ব বহার করেত পার-
লাম। িক তুিম যিদ চাও ++3 বা 3++ িলখেব যােত 4 পাওয়া যায় অথবা িলখেব (x+3)++ বা
++(x+3), তা িলখেত পারেব না, সংকলন (compile) িট হেব। িট হওয়ার কারণ 3 সংখ া
(number) বা x+3 রািশর (expression) ডান-মান (r-value) তথা মান (value) আেছ িক-
তােদর বাম-মান (l-value) তথা রিণেত (memory) জায়গা দখল করা নই। দরকার নই
তবুও বেল রািখ, তুিম িক ++ এর সােথ চলক x এর বদেল বক (constant) জাতীয় িকছু তা
এমিনেতই ব বহার করেত পারেব না, কারণ বেকর তা মান বদলােনা যায় না।
যাইেহাক ++ আেগই দই আর পেরই দই ++x বা x++ আসেল x+=1; অথাৎ x = x+1;
এর সমতুল এবং সংি প বলেত পােরা। ল কেরা বৃি েত ++ য 1 বৃি ঘেট সই ব াপারটা
িক উ থােক। ফেল ++ কবল একটা উপাদােনর (operand) ওপর যু হয় বেল মেন হয়।
আর তাই ++ ক একিট এিকক (unary) অণুি য়ক (operator) বলা হয়। কথা হে এই এিকক
অণুি য়ার ফলাফলটা কী? ফলাফল তা আমরা আেগই দেখিছ, মান এক বেড় যাওয়া। সটা
িঠক, িক তাছাড়াও বৃি অণুি য়ার (increment operator) ফলাফেল িকছু পূণ িবষয়
আেছ য কারেণ পূব-বৃি (pre-increment) আর উ র-বৃি (post-increment) আলাদা।
পূব-বৃি (pre-increment) আর উ র বৃি (post-increment) য আলাদা তা পির ার
হেব উপেরর মেলখাংেশর (program segment) শেষর সাির েটা দখেল। যখন y = +
+x; করা হেয়েছ তখন x এর মান আেগ বেড় হেয়েছ 9 আর তারপর xএর সই বেড় যাওয়া মান
9ই y এ আেরািপত (assign) হেয়েছ। িক যখন y = x++; তখন িক খয়াল কেরা আেগ x
এর মান y এ আেরািপত হেয়েছ ফেল y হেয়েছ 9 আর তারপর x এর মান বেড়েছ 1 ফেল হেয়েছ
10। আ া y = ++x; আর y = x++; এ েটােক যিদ আমরা বৃি ++ ব বহার না কের িলখতাম
তাহেল কমন হেতা? আমােদর অব ই েটা কের িববৃিত িলখেত হেতা। নীেচ ল কেরা y = +
+x; এ আেগ মান বাড়ােনা পের আেরাপণ, আর y = x++; এ আেগ আেরাপণ পের মান বাড়ােনা।
আশা করা যায় পূব-বৃি (pre-) ও উ র-বৃি র (post-increment) তফাৎ পির ার হেয়েছ।
x = x + 1; // y= ++x ; এ x এর মান বৃি আেগ ঘটেব
y = x; // y= ++x ; এ y ত x এর মান আেরাপন পের
৬১
৬.৭. িবিত অণুি য়া (Comma Operator)
া কেরা, সংকলন (compile) হেয় যােব, িক x++++ বা ++(x++) চ া কেরা, সংকলন হেব
না, িট (error) আসেব পেরর বৃি টার জ "l-value required"। তুিম যিদ ফ ++x++;
িলেখা, এটা িক সংকলন হেব না, িট দখােব, কারণ হেলা পূব ও উ র বৃি র মেধ উ র বৃি র
অ গণ তা (precedence) আেগ, ফেল ++x++ আসেল ++(x++) এর সমতুল। অ গণ তার
েমর (precedence order) িনয়ম েলা আমরা পেরর এক পােঠ িব ািরত জানেবা।
এবাের আমরা বৃি ব বহাের মেলখেয়র গিতর ওপর ভাব িনেয় একটু আেলাচনা কির।
বৃি (increment) ++x বা x++ সাধারণত x+=1 বা x=x+1 এর চেয় তগিতর, এর কারণ
মুলত একদম য পযােয় x++ বা ++x িবেশষ ভােব িনবািহত হয় িক x+=1 বা x=x+1 সাধারণ
যােগর মেতা কের িনবািহত হয়। সাধারণেতা পূব-বৃি (pre-increment) আর উ র-বৃি র
(post-increment) মেধ পূব-বৃি ত গিতর। কারণ হেলা, উ র-বৃি র ফলাফল যেহতু x এর
মান বৃি করবার আেগর মান, তাই ওই আেগর মানিট থেম কাথাও ণ ায়ী (temporarily)
ভােব রেখ িদেত হয়, আর x এর মান বৃি টা তারপর ঘেট, আর তারপর ণ ায়ী ভােব রাখা মানটা
ফলাফল িহসােব আেস যিট y = x++; এর ে y এ আেরািপত হয়। িক পূব-বৃি র ে মান
বৃি আেগ ঘেট আর ফলাফলটাও সই বৃি া মানই, কােজই ণ ায়ী ভােব আেগর মান রেখ
দওয়ার কান বাঝা (overhead) এখােন নই। মাটকথা পূব-বৃি সরাসির বাম-মােনর ওপরই
কাজ কের অথাৎ ++x এ সরাসির চলকটার ওপরই কাজ কের, আর কান ণ ায়ী িকছু দরকার
হয় না। এ কারেণ পূব-বৃি ++x; উ র-বৃি x++; এর চেয় বশী তগিতর হেয় থােক। কােজই
তুিম পারেতা পে ++x ব বহার করেব, x++ ব বহার করেব না।
মেলখেত বৃি ব বহাের এবাের একটা পরামশ দই। পূব-বৃি ও উ র-বৃি িনেয় অেনক
রকম খলা যায়, যমন তুিম চাইেল x = (++x)++ + ++x; এর মেতা অেনক েলা + িচ িদেয়
িকছু একটা িলখেত পােরা। এই রকম জিটল িববৃিত েলা হয়েতা সংকলন (compile) হেব। এর
ফেল ফলাফলও িকছু একটা আসেব, যটা চাইেল বুঝা স ব, িক বুঝেত গেল মাথা বশ গরম
হেয় যায়। আমার পরামশ হেলা এইরকম জিটল িববৃিত পারেতা পে লখেব না। সবসময় এমন
ভােব সংেকত (code) িলখেব যােত পের তুিম বা অ কউ তমন কান ক ছাড়াই তামার
সংেকত দেখ বুঝেত পাের। মেন রাখেব সংেকত যত জিটল, তার ভুল বর করাও তত কিঠন।
উপেরর পুেরা আেলাচনােত আমরা কবল বৃি (increment) িনেয় আেলাচনা কেরিছ। আস-
ল াস (decrement) −− িনেয় আেলাচনাটা একদম একই রকম। আমরা তাই পুনরাবৃি কর-
বা না। কবল জেন রােখা ােসর (decrement) ফেল মান 1 কেম যায়। তাই −−x বা x−−
হেলা x −= 1 বা x = x − 1 এর সমতুল। আমরা −−x ক পূব াস (pre-decrement) আর
x−− ক উ র- াস (post-decrement) বিল। পূব- ােসর তুলনায় উ র- ােসর অ গণ তা
(precedence) বশী। গিতর িদক িবেবচনায় পূব- াস, উ র- ােসর চেয় য়তর।
৬২
৬.৮. অ গণ তার ম (Precedence Order)
ফলাফল বাদ িগেয় ফলাফল হেয় যােব নথক (void)। যাইেহাক এরপর িবিতর (comma) ডান
পােশর রািশ িহসােব y+1 এর মান 3+1 বা 4 হবপ যিট আসেল যােগরও + ফলাফল। আর
যােগর এই ফলাফল 4 ই শষ পয x চলেক আেরািপত হেব। এখােন ব নী দরকার কারণ িবিত
(comma) , সাধারণত আেরাপণ (assignment) = এর পের িহসাব করা হয়। আমরা ব নীর
িভতেরর আেরাপণিট y = 3 িবিতর (comma) আেগ করেত চাইেলও ব নীর বাইেরর চলক x এ
আেরাপণিট িবিতর পের করেত চাই, আর এ কারেণ ব নী জ রী। ব াপারিট আেরা পির ার বুঝেত
চাইেল একই িজিনস ব নী ছাড়া কী হেব দেখা x = y = 3, y + 1;। এখােন েটা আেরাপণই
(assignment) িবিতর (comma) আেগ িনবািহত (execute) হেব। ফেল থেম y এর মান
আেরািপত হেব 3, তারপর x এও মান 3ই আেরািপত হেব, তারপর y+1 িহসাব হেব 4। এই 4
িবিতর ফলাফল হেলও সিট িক এখােন িকছুেত আেরািপত হয় িন।
িবিত (comma) অণু্ি য়া (operator) িহসােব ব বহার হেলও এর আেরা নানান ব বহার
আেছ িসিপিপেত। যমন একািধক চলক (variable) একসােথ ঘাষণা (declare) করেত আমরা
িবিত (comma) িদেয় িলিখ int x, y, z = 3; িবিতর (comma) এই রকম ব বহার আসেল
অণুি য়া িহসােব নয়, বরং তািলকার পৃথকী (separator) িহসােব ব বহার। আমরা যখন পের
ম-ঘূণী (for-loop) ও পরািমিত (parameter) িনেয় আেলাচনা করেবা তখনও তািলকা পৃথকী
(list separator) িহসােব িবিতর (comma) ব বহার দখেত পােবা।
৬৩
৬.৮. অ গণ তার ম (Precedence Order)
৬. , িবিত (comma) একিট িয়ক অণুি য়া (binary operator) যিটর ফলাফল কবল
ডানপােশর উপাদান (operand)। বাম পােশর উপাদানিট িহসাব হয়, িক তার ফলাফল
হেব নথক (void)। এই অণুি য়া একািধক পরপর থাকেল, বাম থেক ডােন এেক এেক
িহসাব হেত থােক। যমন x + 2, y ∗ 3, z / 4 থেম যাগ হেব, তারপর ণ আর
শেষ ভাগ, ফলাফল হেব একদম ডােনর ভাগফলিটই।
েটা একই বা একই েমর অণুি য়া পরপর থাকেল কান পােশরিট আেগ হেব এইিট িন-
ধারণ কের দয়ােক বলা হয় সহেযাজ তা (associativity)। যমন x−y−z থাকেল আমােদর
থেম বােমর িবেয়াগ করেত হেব, তারপর ডােনর িবেয়াগ, কােজই িবেয়াগ হল বাম সহেযাজ
(left associative) অথাৎ x − y − z আর (x −y) − z একই। খয়াল কেরা িবেয়াগ িক
ডান সহেযাজ (right associative) নয় কারণ x − y − z আর x − (y − z) এক নয়। যাগ
আবার বাম ও ডান উভয় সহেযাজ কারণ x + y + z, (x + y) + z ও x + (y + z) একই।
সাধারণত উভয় সহেযাজ েদর ে িবধােথ তােদর বাম-সহেযাজ িহসােব িবেবচনা করা হয়।
উপেরর তািলকায় আেলািচত অণুি য়া েলার ে একই রকম অণুি য়া পরপর থাকেল কান
পােশরিট আেগ হেব, সটাও িক আেলাচনা করা হেয়েছ। সখান থেক বুঝেতা পােরা কান অণু-
ি য়া বাম সহেযাজ (left associative), আর কানিট ডান সহেযাজ (right associative)?
সেবেশেষ একটা পূণ িবষয় মেন রাখেব ব নী ( ) এর শি িক সবেচেয় বশী। য
কান ােন কান রকেমর ি ধা থাকেল সখােন ব নী ব বহার কের ি ধা পির ার করেব। অণু-
ি য়া েলার (operator) অ গণ তার ম (precedence order) ব বহার কের নানা রকম
জিটল জিটল িববৃিত ও রািশ (statement and expression) তরী করা যায়, য েলা ম
৬৪
৬.৯. গািণিতক সম া (Mathematical Problems)
িবেবচনায় িনেয় বুঝেত গেল মাথা গরম হেয় যেত পাের, ভুল হেল বর করা কিঠন হেয় যােব।
কােজই আমার পরামশ হে তামার িববৃিত বা রািশ অব ই সহেজ পাঠেযাগ হেত হেব, আর
এ কােজ যত দরকার ব নী ব বহার করেব। যমন ধেরা x += y − z এর চেয় x += (y − z)
বুঝা আমােদর জ বশী সহজ, কারণ এেত একদম পির ার িবেয়াগ আেগ হেব।
f l o a t x1 , y1 , x2 , y2 ; / / ানা েটা ( x1 , y1 ) , ( x2 , y2 )
উপেরর মেলখ খয়াল কেরা। খুবই সাদামাটা। থেম main িবপাতেকর বাইের cmath
িশর নিথ অ ভু করেত হেব বেল দখােনা হেয়েছ। তারপর main িবপাতেকর িভতের িব
েটার ভুজ ও কািট ধারণ করার জ চারিট float ধরেনর ভ ক চলক (variable) নয়া হেয়-
ছ। এরপর যাগান যাচনা (input prompt) িদেয় িব েটার ানা যাগান (input) নয়া
হেয়েছ। তারপর ভুজ েয়র দূর abs(x1 − x2) বর কের xd নােমর আেরকিট চলেক নয়া
হেয়েছ, একই ভােব কািট েয়র দূর abs(y1 − y2) বর কের yd নােমর আেরকিট চলেক ন-
য়া হেয়েছ। মেন কের দেখা abs িবপাতকিট (function) কান সংখ ার পরম মান (absolute
value) অথাৎ িচ বাদ িদেয় কবল মানটু ফরত দয়। যাইেহাক তারপর xd এর বগ ও yd
এর বেগর যাগফল িনেয় তার বগমূল বর করা হেয়েছ sqrt িবপাতক ব বহার কের আর রাখা
৬৫
৬.১০. িশর নিথ cmath (Header File cmath)
হেয়েছ dd চলেক। সবেশেষ দূর dd চলক থেক ফলন (output) দয়া হেয়েছ। এখােন একটা
কথা বেল রািখ sqrt(xd ∗ xd + yd ∗ yd) এর বদেল cmath িশর নিথ (header file) থ-
কই hypot নােমর িবপাতকও (function) আমরা ব বহার করেত পারতাম। সে ে আমােদর
িলখেত হেতা hypot(xd, yd) আর সিট িঠক একই কাজ করেতা।
৬৬
৬.১০. িশর নিথ cmath (Header File cmath)
৬৭
৬.১১. অ শীলনী সম া (Exercise Problems)
৩. উপা কারা র (type casting) কী? িয়ক অণুি য়ায় (binary operation) কী
ভােব উপা কারা র (type casting) হয়?
৫. মেলখেত অদরকারী সংেকতাংশ (code segment) মুেছ না িদেয় কীভােব আমরা টীকা
(comment) ব বহার কের স েলােক অকাযকর কের রাখেত পাির, ব াখ া কেরা।
৭. আেরাপণ অণুি য়ার (assignment operator) ফলাফল িঠক কী? যৗিগক আেরাপণ
(compound assignment) বলেত কী বুেঝা? কেয়কিট উদাহরণ দাও।
৬৮
৬.১১. অ শীলনী সম া (Exercise Problems)
২. নীেচর মেতা ফলন (output) দয় এরকম একিট মেলখ (program) তরী কেরা।
ফেলর িটেত তুিম িয়ক অণুি য়া েলা (binary operator) ব বহার করেব।
x=10 y=5
rashi fol
x=y+3 x= 8
x=y−2 x= 3
x=y∗5 x= 25
x=x / y x= 2
x=x%y x= 0
৩. এমন একিট মেলখ (program) রচনা কেরা যিট একিট িতন অে র সংখ ােক উে া
কের যমন 326 হেয় যায় 623। এ কােজ তুিম ভাগফল, ভাগেশষ, ণ, যাগ ও িবেয়াগ
ব বহার করেব। 326 থেক অ েলা আলাদা কের তারপর 623 তরী করেব।
৫. এমন একিট মেলখ (program) রচনা কেরা যিট সেক ড যাগান িনেয় তােক ঘ টা-
িমিনট- সেকে ড পা র কের। এ কােজ তুিম ভাগফল ও ভাগেশষ ব বহার করেব।
৭. এমন একিট মেলখ (program) রচনা কেরা যিট েটা সময় ঘ টা, িমিনট, সেকে ড
িনেয় সময় িটেক যাগ কের। এ কােজ তুিম যাগ, ভাগফল ও ভাগেশষ ব বহার করেব।
৬৯
৬.১১. অ শীলনী সম া (Exercise Problems)
ক) পেড়া (read) x ও y
খ) গেণা (compute) p = x ∗ y
গ) গেণা (compute) s = x + y
ঘ) গেণা (compute) t = s2 + p ∗ (s − x) ∗ (p + y)
ঙ) িলেখা (write) t
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
i n t t = a + ( n − 1 ) ∗ d ; / / n−তম পদ
cout << n << "−tom pod = " << t << endl ;
i n t s = n ∗ ( 2∗a + ( n − 1 ) ∗d ) / 2 ; / / সমি
cout << n << " poder somosti = " << s << endl ;
৭০
৬.১১. অ শীলনী সম া (Exercise Problems)
২. নীেচর মেতা ফলন (output) দয় এরকম একিট মেলখ (program) তরী কেরা।
x=10 y=5
rashi fol
x=y+3 x= 8
x=y−2 x= 3
x=y∗5 x= 25
x=x / y x= 2
x=x%y x= 0
cout << " x= " << x << " y= " << y << endl ;
cout << endl ; / / ফাঁকা সাির
cout << " r a s h i "<< " f o l " << endl ;
cout << " x=y+3 " << " x= " << y+3 << endl ;
cout << " x=y−2 " << " x= " << y−2 << endl ;
cout << " x=y∗5 " << " x= " << y∗5 << endl ;
cout << " x=x / y " << " x= " << x / y << endl ;
cout << " x=x%y " << " x= " << x%y << endl ;
৩. এমন একিট মেলখ (program) রচনা কেরা যিট একিট িতন অে র সংখ ােক উে া
কের যমন 326 হেয় যায় 623। এ কােজ তুিম ভাগফল, ভাগেশষ, ণ, যাগ ও িবেয়াগ
ব বহার করেব। 326 থেক অ েলা আলাদা কের তারপর 623 তরী করেব।
i n t s o j a = 326 ;
i n t daner = s o j a % 10 ; / / ভাগেশষ 6
i n t bamer = s o j a / 100 ; / / ভাগফল 3
i n t majher = s o j a / 10 % 10 ; / / ফল 2
i n t u l t a = bamer ; // উ া = 3
u l t a += majher ∗ 10 ; / / উ া = 23
u l t a += daner ∗ 100 ; / / উ া = 623
৭১
৬.১১. অ শীলনী সম া (Exercise Problems)
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 ) ) ; / / ফল
৫. এমন একিট মেলখ (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
৭২
৬.১১. অ শীলনী সম া (Exercise Problems)
কমেন পােবা। আমরা pai একটা বক ঘাষণা করেত পাির যার মান িদেয় িদব 3.1416
অথবা আেরা িনখুত মান পেত চাইেল acos(−1) থেকও মান বর কের িনেত পাির।
িফিরি ৬.১০: ি ভুেজর বা হেত কাণ (Triangle's Angles From Sides)
/ / main িবপাতেকর বাইের
#i n c l u d e <cmath>
/ / িড ীেত পা র
f l o a t const p a i = a r c co s (−1 ) ; / / িবক হেলা 3 . 1416
C ∗= 180 / p a i ; B ∗= 180 / p a i ; A ∗= 180 / p a i ;
৭. এমন একিট মেলখ (program) রচনা কেরা যিট েটা সময় ঘ টা, িমিনট, সেকে ড
িনেয় সময় িটেক যাগ কের। এ কােজ তুিম যাগ, ভাগফল ও ভাগেশষ ব বহার করেব।
িফিরি ৬.১১: িট সমেয়র যাগ (Adding Two Times)
i n t ghonta1 , minit1 , sekend1 ; / / ১ম সময় যাগান িনেব
i n t ghonta2 , minit2 , sekend2 ; / / ২য় সময় যাগান িনেব
৭৩
৬.১১. অ শীলনী সম া (Exercise Problems)
৮. এমন একিট মেলখ রচনা কেরা যিট েটা সমীকরণ ax+by = c ও dx+ey = f এর
a, b, c, d, e, f যাগান িনেয় x ও y এর মান ফলন দয়। এরকম সহ সমীকরণ সমাধােনর
সূ হল x = (ce − bf )/(ae − bd) আর y = (af − cd)/(ae − bd)।
িফিরি ৬.১২: সহ সমীকরণ সমাধান (Simultaneous Equations)
float a , b , c , d , e , f ;
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 ) ;
float v = u + a ∗ t ;
f l o a t s = u∗ t + a ∗ t ∗ t / 2 ;
৭৪
৬.১২. গণনা পিরভাষা (Computing Terminologies)
ক) পেড়া (read) x ও y
খ) গেণা (compute) p = x ∗ y
গ) গেণা (compute) s = x + y
ঘ) গেণা (compute) t = s2 + p ∗ (s − x) ∗ (p + y)
ঙ) িলেখা (write) t
৭৫
অধ ায় ৭
শতািল পিরগণনা
(Conditional Programming)
আমােদর জীবনটা নাক বরাবর সাজা একটা পথ নয়, িতটা মােড় মােড় এটা শাখায় শাখায়
িবভ । তামােক একটা শাখায় যেত হেব, একসােথ এেকর বশী শাখায় যেত পারেব না। কা-
নটায় যােব তার জ ভাবেত হেব, তামার অব া ও ল িবেবচনা করেত হেব। শতািল পিরগণনায়
(conditional programming) আমরা শাখায় শাখায় ভাবা িশখেবা, আমােদর সামেনর গমন
পথ বাছাই করা িশখেবা, আমরা আমােদর জীবেনর িস া নয়া িশখেবা।
৭৭
৭.১. যিদ তাহেল নাহেল (If Then Else)
উপেরর অংশটু কান মেলখেত (program) িনেয় সংকলন (compile) কের চািল-
য় (run) দেখা। যিদ 50 এর কম কান ন র যাগান (input) দাও যমন 45 তাহেল ফলন
(output) দখােব fell । আর যিদ 50 ও 79 এর মােঝর কান ন র যাগান (input) দাও য-
মন 65 তাহেল ফলন (output) দখােব pash। আর যিদ 80 বা বশী কান মান যাগান (input)
দাও যমন 85 তাহেল ই সাির ফলন (output) দখােব: থম সািরেত pash আর পেরর সাির-
ত taroka। নীেচর যাগান-ফলনাংেশ (input-output segment) মেলখিট (program)
িতন বার চািলেয় বােম, মােঝ, ও ডােন এই িতনিট ব াপার দখােনা হেয়েছ।
যাগান-ফলনাংশ (input-output segment)
nombor? 45 nombor? 65 nombor? 85
fell pash pash
taroka
৭৮
৭.২. অ য়ী অণুি য়া (Relational Operators)
< 50) িলেখিছ। তামােদর কােছ মেন হেত পাের, এটা তা র, বুঝেত িবধা কারণ িঠক যন
মা েষর ভাষায় আমরা য ভােব বিল যমন যিদ ন র 50 বা বশী হয় ফলন দখাও পাশ নাহেল
যিদ ন র 50 এর কম হয় ফলন দখাও ফল িঠক তার মেতা। কথা সত আমােদর বুঝা িবধা হয়
এ ভােব। িক আমরা এভােব িলখেবা না, কারণ else এর পের ওই if (nobmor < 50) িলখা
আসেল অদরকারী আর স কারেণ তামার মেলখ (program) খােমাকা থ (slow) হেয়
যােব। ওই if (nobmor < 50) লখাটা অদরকারী কারণটা আেগই খািনকটা জেনিছ তবুও
আেরকবার বিল else এর শাখায় আসা মােন হেলা nombor >= 50 এই শতিট িমথ া হেয়েছ।
আর এই শতিট িমথ া হওয়া মােন nombor < 50 শতিট অব ই সত । কােজই এিট আবার
আর একিট if লািগেয় পরী া করার কান েয়াজন নাই।
i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
e l s e i f ( nombor < 50) // না হেল
cout << " f e l l " << endl ; // ফল ফলন
তুিম যিদ একা ই মা েষর বুঝার িবধােথ ওই if (nobmor < 50) টা িলখেত চাও, সটা
টীকার (comment) িভতের িলখেত পােরা। নীেচ যমন িলেখ দখালাম। এেত তামার মেল-
খও (program) ধীর গিতর হেলা না, আবার তামার পে মেলখ পড়েতও সহজ হেয় গেলা।
আমরা এ রকমই ায়ই কের থািক। তেব অেনক ে else এর পের ওইরকম একটা if দওয়া
অব াবীও হেয় যায়, এটা আমরা পেরর একটা পােঠই িব ািরত দখেবা।
i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
e l s e / / i f ( nombor < 50) // না হেল
cout << " f e l l " << endl ; // ফল ফলন
এই আেলাচনার শষ কির আেরকটা ব াপার িদেয়, সটা হেলা ছাড়ন দয়া (indentation)।
ছাড়ন িনেয় আেগ একবার আমরা আেলাচনা কেরিছলাম। খয়াল কেরা আমরা if (nombor
>=50) এর পের এই শত সত হেল য cout << "pash" << endl; টা িনবাহ (execute)
করেত হেব সটা পেরর সািরেত একটু িভতের থেক িলখেত কেরিছ। এটা করেল গণিনর
(computer) জ িক কান লাভ বা িত নই, িক আমরা সহেজ চােখ দেখই কমন বুঝেত
পাির য ওই cout এর সািরিট আসেল তার আেগর সািরর if এর সােথর শত সত হওয়ার ওপের
িনভরশীল। তারপর দেখা পেরর সািরেত থাকা else আবার একটু িভতর থেক না হেয় if
বরাবরই হেয়েছ। এটা িদেয় আমরা বুঝােত চাই এই else টা আসেল ওই if এর শতটা িমথ া
হেল েযাজ হেব। ল া মেলখেত যখন অেনক if আর অেনক else থাকেব তখন কান else
কান if এর সােথ তা িমলােনা (match) আমােদর পে চােখ দেখ কিঠন হেয় যেত পাের।
ওই িমলােনার িবধােথ if আর তার সােথর else এক বরাবর িলখা হয়। সবেশেষ খয়াল কেরা
else এর পেরর সািরর cout আবার একটু িভতর থেক লখা, কারণ এটা িনবাহ হেব িকনা তা
িনভর কের else এর ওপের। একটু িভতর থেক লখা কের সইটাই বুঝােনা হয়।
৭৯
৭.২. অ য়ী অণুি য়া (Relational Operators)
উপেরর মেলখাংেশ (program segment) থেম আমরা েটা অসমান সংখ ার তুলনা
কেরিছ যখােন আেগরিট পেরিট থেক ছাট। তারপের আমরা েটা সমান সংখ ার তুলনা কেরিছ।
সবেশেষ আবােরা েটা অসমান সংখ ার তুলনা কেরিছ িক এখােন আেগরিট বড়, পেররিট ছাট।
উ মােলখাংেশর ি েত ফলন (output) কী হেব তা নীেচ দখােনা হেয়েছ।
৮০
৭.৩. যিদ-নাহেল মই (If-Else Ladder)
উপেরর মেলখাংেশ যিদও কবল পূণক (integer) ব বহার করা হেয়েছ, অ য়ী অণুি -
য়া েলা (relational operators) আসেল ভ েকর (fractioner) সােথও একই ভােব কাজ
কের। চাইেল একটা ভ ক ও একটা পূণকও ওই অণুি য়া েলােত এক সােথ ব বহার করা যায়,
আর সে ে পূণকিট (int) থেম ভ েক (float) কারা িরত (type cast) হেয় যােব, তা-
রপর তুলনািট হেব েটা ভ ক (float) এর মেধ । ফলাফল অব ই হেব একিট বুলক (bool)
অথাৎ 0 বা 1। অ য়ী অণুি য়া েলা (relational operators) বুলক (bool) এর ওপরও কাজ
কের। সে ে false আর true ক ফ 0 আর 1 ধের পূণক িহসােব িবেবচনা করেল তুলনার
য ফলাফল আসার কথা তাই আসেব। উপেরর মেলখাংেশ তুিম 3 ও 4 এর বদেল নানা রকম
বুলক (bool) বা পূণক (int) বা ভ ক (float) মান েটা উপাদানই (operand) একরকম বা
েটা ইরকম কের বিসেয় ফলাফল েলা পযেব ণ করেত পােরা।
৮১
৭.৪. অ াি যিদ-নাহেল (Nested If-Else)
মেন কেরা দেখা % অণুি য়া আমােদর ভাগেশষ ফলাফল দয়। তা ভাগেশষ যিদ হয় তাহেল
আমরা িবভাজ তা বুঝেত পারেবা, আর ভাগেশষ না হেল অিবভাজ তা। আমরা থেম ৪০০
িদেয় িবভাজ তা পরী া কেরিছ, না হেল তারপর ১০০ িদেয় িবভাজ তা, তাও নাহেল তারপর ৪
িদেয় িবভাজ তা পরী া কেরিছ। কমন ব একই রকম কের মেলখিট লখা গেছ!
খয়াল কেরা িবভাজ হওয়া bosor %400 == 0 আর অিবভাজ হওয়া bosor %400 !=
0 এই েটােতা িবপরীত শত। মেলখেত (program) থম শত ব বহার করেল ওই শত সত
(অথবা িমথ া) হেল যা করেত হেব, একই কাজ ি তীয় শত ব বহার করেল সই শত িমথ া (অথবা
সত ) হেল করেত হেব। হেলা পর র িবপরীত এই েটার মেধ কান শতটা ব বহার করা
িবধাজনক। তাছাড়া 400 িদেয় িবভাজ তাই বা আেগ কন করেবা, 4 বা 100 িদেয় িবভাজ তাও
তা আেগ করেত পাির? এসেবর উ র হল ব িত ম ও বশী ব িত ম েলা তাহেলেত রােখা,
আর বাঁদবাকী কম ব িত ম েলা সব রােখা নাহেলেত, তােত িচ া করা সহজ হেয় যায়, মেলখ
(program) তরীও সহজ হয়। যমন ৪০০ িদেয় িবভাজ হেল অিধবষ, এটা অেনক বশী ব -
িত ম, তুলনামুলক অ সংখ ক বছর ৪০০ িদেয় িবভাজ হেব। ১০০ িদেয় িবভাজ হওয়া আর
একটু কম ব িত ম মােন তুলনামুলক ভােব অেনক বছরই ১০০ িদেয় িবভাজ । ৪ িদেয় িবভাজ
হওয়া আেরা কম ব িত ম মােন তুলনামুলক ভােব অেনক বশী সংখ ক বছর ৪ িদেয় িবভাজ ।
আর ৪ িদেয় িবভাজ না হওয়া মাটামুিট সাধারণ ঘটনা ধরা যায়, বাদবাঁকী সব বছরই ৪ িদেয়
অিবভাজ । খয়াল কেরা মেলখ (program) সভােবই ব িত ম মাথায় রেখই লখা হেয়েছ।
সব চেয় বশী ব িত মী ব াপার সবেচেয় আেগ, সবেচেয় কম ব িত ম সবেচেয় পের।
আমােদর মেলখেত ছাড়ন (indentation) দয়ার ব াপারটা একটু খয়াল কেরা। যিদও
আমরা জািন ছাড়ন দয়া না দওয়া অথবা ফাঁকা িদেয় িদেয় লখা বা না লখােত মেলখেয়র
(program) ফলাফেল কান পিরবতন হয় না। আমরা কবল মা েষর বাঝার িবধােথ ও েলা
কির। তারপরও খয়াল কেরা আমােদর বুঝার িবধােথ আমরা থেমর if , তারপেরর else if
েলা, সবেশেষর else আর তােদর শত সত হেল যা করেত হেব সব িমিলেয় কী র একটা ধাঁচ
(pattern) তরী কেরিছ। এই ধাঁচিট একিট মইেয়র মেতা কারণ আমােদর থম if িদেয়
কের শত পরী া করেত করেত নীেচর িদেক নামেত হেব। আর য কান একিট শত পূরণ হেলই
তার জ য কাজিট করেত হেব পােশর িদেক িগেয় সিট করেলই পুেরা ধাঁচিটর কাজই আসেল
শষ হেয় যােব। মােন একটা শত সত হেল নীেচর িদেকর আেরা কান শত আর পরী া করা হেব
না, পুেরা ধাঁেচর কাজ শষ হেয় যােব। আর িঠক এর পের য িববৃিত (statement) িনবািহত
(execute) হেব সিট হেলা এই পুেরা ধাঁেচর বাইের থাকা কান িববৃিত। যমন উপেরর মেলখ-
ত ল কেরা cout << "kee chomotkar!" << endl; হেলা পুেরা ধাঁেচর বাইের, তরাং
যিদ-নাহেল মই থেক বর হেয়ই ওইিট িনবািহত হেত করেব।
৮২
৭.৪. অ াি যিদ-নাহেল (Nested If-Else)
তুিম এবার িজে স করেত পােরা, আ া আিম িক একই ভােব ১০০ বা ৪ িদেয় িবভাজ হওয়ার
if েলােকও ১০০ বা ৪ িদেয় অিবভাজ তার if িদেয় িলখেত পারতাম? াঁ অব ই। নীেচর
মেলখাংশ (program segment) খয়াল কেরা। আমরা িতিট if এর শতই বদেল এখন
অিবভাজ তার শত িদেয় িদেয়িছ। যিদ-নাহেলর মইেত আমরা if এর সােথ থাকা শত িমথ া হেল
তার else এর পরপরই একটা if দখেত পতাম। এখােন দেখা উে াটা, if এর শত সত হেল
বরং তার পরপরই আেরকটা if দখা যাে । এটােক আমরা বলেবা অ াি যিদ-নাহেল (nested
if-else) অথাৎ একটা যিদ-নাহেলর িভতের আেরকটা যিদ-নাহেল, তার িভতের আেরকটা!
i f ( bosor % 400 ! = 0 ) / / ৪০০ িদেয় অিবভাজ
i f ( bosor % 100 ! = 0 ) / / ১০০ িদেয় অিবভাজ
i f ( bosor % 4 ! = 0 ) / / ৪ িদেয় অিবভাজ
cout << " odhiborsho noy " << endl ;
e l s e / / i f ( bosor % 4 == 0 ) ৪ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
else / / i f ( bosor % 100 == 0 ) ১০০ িদেয় িবভাজ
cout << " odhiborsho noy " << endl ;
else / / i f ( bosor % 400 == 0 ) ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
৮৩
৭.৫. ঝুল নাহেল (Dangling Else)
৮৪
৭.৫. ঝুল নাহেল (Dangling Else)
সংরি ত অ ল তরাং খরচ ৩ টাকা, আর ১৩ িদেয় িবভাজ না হেল মােন অসংরি ত এলাকা
হেল খরচ ২ টাকা। নীেচর মেলখাংেশর (program segment) সােথ িমিলেয় দেখা।
i n t onchol ;
এই মেলখিট আেরা নানান ভােবই লখা স ব তুিম স েলা িনেজ িনেজ চ া করেব। তেব
আমরা তা কবল এিট সমাধানই িশখিছ না, আমরা িশখেবা ঝুল নাহেল (dangling else)
ধাঁচিট কমন সিট। তা আমােদর সম ার িববরেণ খয়াল কেরা একটা কথা আেছ তুিম বশীর
ভাগ িচিঠই পাঠাও ঢাকায়। আর সখােন অসংরি ত এলাকার সংখ ায় বশী। এ থেক আমরা ধের
িনেত পাির য খরচ বশীর ভাগ সময়ই ২ টাকা। কােজই আমরা khoroch চলকিটর মান েতই
২টাকা আিদ আেরাপণ (initial assignment) কের ফলেত পাির। তারপর শত পরী া কের
যিদ দিখ ঢাকার িভতের আর সংরি ত তাহেল খরচ কের িদেবা ৩ টাকা আর ঢাকার বাইের হেল
কের দেবা ৪ টাকা। নীেচর মেলখাংশিট দেখা। আমরা স রকমিট করার চ া কেরিছ।
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত
উপেরর অংশটু ব বহার কের কান মেলখ (program) তরী কের চালােল সিট সিঠক
khoroch জানােব না। ঢাকার বাইেরর অ ল েলার জ যখােন খরচ ৪টাকা হওয়ার কথা,
তা না হেয় বরং ২টাকাই থাকেব। আর ঢাকার িভতেরর অসংরি ত এলাকার জ যখােন খরচ
হওয়ার কথা ২টাকা তা না হেয় খরচ ৪টাকা হেব। মেলখ (program) চােখ দেখ তা মেন
হে সব িঠক আেছ, তেব কন এই িবপি ! আসেল িবপি বাঁিধেয়েছ else অংশিট। আমরা
যভােব ছাড়ন (indentation) িদেয় িলেখিছ তােত মেন হে else অংশটু থম if সােথর
অথাৎ onchol <= 100 িমথ া হওয়ার সােথ জিড়ত। িক আসেল তা নয়। িতিট else তার
পূেবর িনকটতম স ীহীন if এর সােথ জিড়ত। তার মােন এইখােন else িট পেরর if এর সােথ
জিড়ত। অথাৎ onchol যিদ 13 িদেয় িবভাজ না হয় তার সােথ জিড়ত।
অ াি যিদ-নাহেল (nested if-else) আেলাচনায় আমরা দেখিছলাম সবেচেয় িভতেরর
else িঠক সবেচেয় িভতেরর if এর সােথ, মােঝর else িঠক মােঝর if এর সােথ, আর বাইেরর
else িঠক বাইেরর if এর সােথ। আসেল কান else কান if এর সােথ যােব এখােন ছাড়েনর
(indentation) কান ভাবই নই। য else এর জ if িমলােনা দরকার সখান থেক উপ-
৮৫
৭.৬. যৗিগক িববৃিত (Compound Statement)
রর িদেক যেত থাকেল থম য if পাওয়া যােব যার সােথ কান ইত মেধ else দওয়া হয়
নাই, সই if -ই হেলা আমােদর ওই else এর সােথর if । ছাড়ন কবল আমােদর চােখর দখার
জ , গণিনর (computer) কােছ এর কান অথ নই। তাহেল সিঠকভােব ছাড়ন িদেয় িলখেল
আমােদর উপেরর মেলখ আসেল নীেচর মেতা হেব। তরাং বুঝেতই পারেছা উ াপা া ছাড়ন
(indentation) দেখ তুিম ভাবেব তামার মেলখ এরকম কাজ করেব, িক আসেল সটা কাজ
করেব িভ রকম। আর ভুলটা কাথায় তা বর করেত তুিম গলদঘম হেয় যােব!
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত
এরকেমর সম া যখােন else কার সােথ তা বুঝেত আমােদর ঝােমলা লােগ, সই সম ােক
বলা হয় ঝুল নাহেল (dangling else)। উপেরর সিঠক ছাড়ন (indentation) িদেয় আমরা
বুঝেত পারলাম সম া কাথায় িক সমাধান িক আমরা এখেনা জািননা, else িক আসেলই
আমরা বাইেরর if এর onchol <= 100 িমথ া হেল কী হেব তার জ িলখেত চাই। উপায় কী?
উপায় খুবই সহজ। িভতেরর if এর জ একটা else লািগেয় দাও, আর সই else এর জ
তা আমােদর িকছু করার নাই। কারণ ওই else এর জ খরচ ২টাকা সটা তা আমরা আেগই
আিদমান আেরাপেণর সময় িদেয় এেসিছ। িকছু করার নাই বুঝােত আমরা সাধারণত িববৃিত
(empty statement) ব বহার কির। আর কান িকছু ছাড়া কবল িদিত (semicolon) ; িদেয়
আমরা িববৃিত বুঝাই। এবার তাহেল পির ার হেয় গেলা কান else কান if এর জে ।
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত
যৗিগক িববৃিত (compound statement) বলেত কী বুেঝা? যৗিগক িববৃিত ও যিদ-নাহেল (if-
else) ব বহার কের একিট মেলখ (program) িলেখা যিট থেম িট সংখ া যাগান (input)
িনেব। তারপর থম সংখ ািট 0 হেল পেরর সংখ ািটেক ব াসাধ ধের ফল ও পিরিধ ফলন
(output) িদেব। আর থম সংখ ািট 1 হেল ি তীয় সংখ ািটেক বেগর এক বা র দঘ ধের বগিটর
ফল ও পিরসীমা ফলন (output) িদেব। থম সংখ ািট 0 বা 1 ছাড়া অ িকছু হেল দখােব
"osomorthito akriti" অথাৎ এর জ আমােদর মেলখ কাজ করেব না।
৮৬
৭.৬. যৗিগক িববৃিত (Compound Statement)
i f ( nombor1 == 0 ) / / যিদ বৃ হয়
{
cout << " k h e t r o f o l holo : " ;
cout << 3 . 1416 ∗ nombor2 ∗ nombor2 ;
cout << " p o r i d h i holo : " ;
cout << 2 ∗ 3 . 1416 ∗ nombor2 ;
cout << endl ;
}
e l s e i f nombor == 1 ) / / যিদ বগ হয়
{
cout << " k h e t r o f o l holo : " ;
cout << nombor2 ∗ nombor2 ;
cout << " porishima holo : " ;
cout << 4 ∗ nombor2 ;
cout << endl ;
}
else
cout << " osomorthito a k r i t i " << endl ;
এই মেলখিট লখা খুবই সহজ। কবল একটাই ঝােমলা আেছ সটা হল যিদ-নাহেলেত (if-
else) শত সত হাক বা িমথ া হাক আমােদর একটা িববৃিতর (statement) বদেল এক
িববৃিত িনবাহ (execute) করেত হেব। এর আেগর সব উদাহরেণ আমরা দেখিছ যিদ-নাহেল (if-
else) শত সত বা িমথ া হেল কবল একটা মা িববৃিত (statement) িনবাহ করেত। তা ঝােম-
লাটার সমাধানও আসেল সহজ। এক িববৃিতেক { } বাঁকা ব নীর (curly brackets) িভতের
ঢুিকেয় িদেলই হেলা। এর আেগ আমরা জেনিছলাম েটা বাঁকা ব নীর (curly brackets) { }
িদেয় আমরা একটা মহ া (block) তরী কির। তা বাঁকা ব নীর িভতের থাকা এক িববৃিতেক
আমরা বিল যৗিগক িববৃিত (compound statement)।
যৗিগক িববৃিত (compound statement) হেলই য তার িভতের একািধক িববৃিত থাকেত
হেব এমন কথা নই। মহ া তরী কের কবল একটা িববৃিতও তার িভতের িলখেত পােরা।
i f ( nombor % 2 == 0 )
{ cout << nombor << " holo j o r " << endl ; }
else
{ cout << nombor << " holo b e j o r " << endl ; }
৮৭
৭.৭. িট শনা করণ (Error Detection)
মহ া (block) তরীর ফেল অেনকসময় ঝুল নাহেলর (dangling else) ঝােমলা সহেজ
এড়ােনা স ব হয়। পাঠ ৭.৫ এর িচিঠ পাঠােনার খরচ িনণেয়র সম ািট িবেবচনা কেরা। স-
খােন else িট কান if এর তা িনেয় ঝােমলা তরী হেয়িছল আর আমরা িববৃিত (empty
statement) িদেয় সটা সমাধান কেরিছলাম। িববৃিত হল ফ ; িদিত (semicolon) তার
আেগ িকছু নই। নীেচর মেলখাংেশ (program segment) আমরা ওই িভতেরর if িটেক
একিট মহ ার (block) িভতের ঢুিকেয় িদলাম। তরাং মহ ার বাইের থাকা else িট কানভােবই
মহ ার িভতেরর if এর সােথ িমলােনা স ব হেব না, কােজই সটা আর ঝুল থাকেব না।
i n t khoroch = 2 ; / / ঢাকার িভতের অসংরি ত
i f ( onchol <= 100) / / ঢাকার িভতের
{
i f ( onchol % 13 == 0 ) / / সংরি ত
khoroch = 3 ;
}
else / / ঢাকার বাইের
khoroch = 4 ;
মহ া (block) তরী কের চাইেল তার িভতের িক আমরা কান িববৃিত একদমই না িদেত
পাির অথাৎ কবলই িট বাঁকা ব নী (curly brackets) পরপর { }। সে ে এটাও একর-
কেমর িববৃিত (empty statement) তরী হেব। কােজই িববৃিত তরীর েটা উপায়
আমরা িশখলাম একটা হেলা কবলই ; িদিত (semicolon) দয়া আেরকিট হেলা { } েটা বাঁ-
কা ব নীর (curly brackets) িভতের িকছু না লখা। থমিটর ব বহার আেগ দেখিছ আর নীেচ
ি তীয়িট ব বহার কের ঝুল (dangling else) এর আেরকিট সমাধান দয়া হেলা।
i n t khoroch = 2 ; // ঢাকার িভতের অসংরি ত
তাহেল যখােনই তুিম একটা িববৃিত (statement) িদেত পােরা, সখােনই তুিম আসেল চা-
ইেল একটা িববৃিতর বদেল একটা যৗিগক িববৃিতও (compound statement) িদেত পােরা,
আবার একটা িববৃিতও (empty statement) িদেত পােরা। এখন থেক আমরা যখন িব-
বৃিত বলেবা তখন তুিম সটা মােন কবল একটা িববৃিত বুঝেব না, বরং দরকার মেতা সটা য
যৗিগক িববৃিতও হেত পাের বা িববৃিতও হেত পাের, তা বুেঝ িনেব কমন!
৮৮
৭.৭. িট শনা করণ (Error Detection)
ি ঘাত সমীকরণ ax2 + bx + c = 0√এর সহগ ও বেকর মান না জেনও আমরা সমা-
ধােনর সূ বর করেত পাির x = (−b ± b2 − 4ac)/(2a)। এই সূে র বগমূল বর করার
জ আমােদর cmath িশর নিথ (header file) থেক sqrt িবপাতক ব বহার করেত হেব।
বাদ বাঁকী অংশটু সহজ, উপেরর মেলখাংেশ (program segment) দখােনা হেলা। থেম
সমীকরণটা দখােনা হেয়েছ। খয়াল কেরা xˆ2 িদেয় আমরা িক x এর বগ বুিঝেয়িছ। সহগ ও
বক েলার মান যাগান (input) নয়ার পের আমরা b∗b − 4∗a∗c িনণয় কের চলক d ত
িনেয়িছ কারণ এিট ইিট সমাধােনর জ ইবার ব বহার করেত হেব। যাইেহাক ওপেরর অংশটু
ব বহার কের লখা মেলখ (program) কাজ করেব যিদ সমীকরণটা সহজ সাজা হয়, তােত
কান ঝােমলা না থােক! কী রকেমর ঝােমলা থাকেত পাের, িকছু অ মান করেত পােরা্?
আসেল মেলখ (program) তরীর সময় আমােদর ধের িনেত হয় য ব বহারকারী সিঠক
যাগান (input) যমন িদেত পাের তমিন যা ই া তা বিঠক যাগানও িদেত পাের। এইটা স
ভুল কের করেত পাের, না জেন করেত পাের, ই া কেরও করেত পাের। তামার কাজ ন কের
দয়ার আেরা নানািবধ উে ও থাকেত পাের। তেব আমরা আপাতত ধের িনই ব বহারকারী
ঝােমলা যা করার তা কবল ওই সহগ ও বেকর মান যাগান (input) দওয়ার মাধ েমই করেব।
আর ওই ঝােমলা েলা করেল যা হেব তা হেলা উপেরর মেলখাংশ আমােদর িনয় েণর বাইের
িনবাহকালীন (execution-time) িট দিখেয় ব হেয় (abort) যেত পাের। এরকম একটা
িট হেলা িদেয় ভাগ (divide by zero), আর একটা িট হেত পাের ঋণা ক সংখ ার
বগমূল বর করা! এই েটা িটই ি ঘাত সমীকরণ সমাধােনর ে ঘটেত পাের।
এই সব ে আমােদর আেগ থেক বুঝেত পারেত হেব য ওই রকম িটপূণ ঘটনা ঘটেব কী
না, যিদ ওইরকম িট সিত ই ঘেট সটা আমােদর ব বহারকারীেক জানােত হেব। আমােদর তর-
ফ জানােনাটা াভািবক। িক আমােদর অজাে যিদ িট ঘেট মেলখ (program) ব হেয়
যায় তাহেল সটা কানভােবই হণেযাগ নয়। সটা একটা বল পিরগণনার (programming)
উদাহরণ। আর আমরা িটটা ঘটবার আেগই ধরেত পারেল সটা ব বহারকারীেক জািনেয় চাই-
৮৯
৭.৭. িট শনা করণ (Error Detection)
ল আমােদর মেলখেক (program) তারপেরও িনবাহ করা চািলেয় যেত িদেত পারেবা। তা
আমরা নীেচ ি ঘাত সমীকরণ সমাধােনর পুেরা মেলখিট (program) িলখেবা আর তােত সব
রকম িট ধের সটা ব বহার কারীেক জানােনার চ া করেবা। আর যখন িট হে তখন আমরা
return EXIT SUCCESS; না কের return EXIT FAILURE; করেবা।
i n t main ( )
{
float a , b , c ; // সহগ রাখার জ চলক।
৯০
৭.৭. িট শনা করণ (Error Detection)
যাগান (input) নবার পর থেম যিট আমােদর িবেবচনা করেত হেব তা হেলা সমীকরণিট
আসেল ি ঘাত সমীকরণ িকনা? যিদ a হয়, তাহেল সমীকরেণ কান x2 থােক না, এিট হেয়
যায় bx + c = 0 যিট একিট একঘাত সমীকরণ। এমন অব ায় আমরা আেরা পরী া কের দখব
bও িকনা। যিদ b হয় তাহেল থােক কবল c = 0, যখােন কান চলক (variable)
নই। কােজই আমােদর িট বাতা দিখেয় return EXIT FAILURE; বেল ফরত যেত হেব।
নীেচর যাগান-ফলন (input-output) খয়াল কেরা, a ও b হওয়ায় িট বাতা িদেয়েছ।
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 0 0 3
boidho somikoron noi !
৯১
৭.৮. বুলক সংেযাজক (Boolean Connectives)
যিদ a না হয় তাহেল এটা একটা বধ ি ঘাত সমীকরণ। তরাং থেম আমরা িন ায়ক
(discriminant) িনণয় কের একটা চলেক নেবা। উপেরর মেলখেত খয়াল কেরা float
d = b∗b − 4∗a∗c; িলেখ তাই করা হেয়েছ। এখন িন ায়ক যিদ ঋণা ক (negative) হয়
তাহেল তা বগমূল িনণয় করা স ব না, িক ি ঘাত সমীকরেণর সমাধােনর সূে িন ায়েকর
বগমূল আমােদর দরকার। কােজই িন ায়েকর মান ঋণা ক হেল আমােদর পে সমাধান করা
স ব নয়। একিট িট বাতা (error message) দিখেয় return EXIT FAILURE; ফরত
যাওয়া উিচৎ। নীেচর যাগান-ফলন (input-output) খয়াল কেরা, িঠক তাই ঘেটেছ।
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 2 −5 2
nischayok r i n a t o k !
bastob somadhan n a i !
িন ায়ক (discriminant) যিদ ঋণা ক (negative) না হয়, তাহেল এবার দখেত হেব
এিট িকনা। কারণ হেল সে ে আমােদর সমাধান িটই হেব, িক সমাধান িট আবার
আলাদা আলাদা না হেয় একই হেব। এইরকম অব ােক বলা হয় সমাপিতত (coincidental)
সমাধান। নীেচর যাগান-ফলেন (input-output) এিট দখােনা হেলা।
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 1 −2 1
duto somadhan ashole ekoi !
somapotito x = 1
সবেশেষর য অব া সিট হেলা িন ায়ক ঋণা কও নয়, ও নয়, তাহেল সিট ধনা ক
(positive)। আর এিটই হেলা সই অব া আমরা যিট ধের িনেয় একদম েত একটা ছাট
মেলখাংশ (program segment) দিখেয়িছলাম। কােজই আমরা সই কাজটু কের েটা
সমাধান আমােদর জানা সূ া যায়ী িনণয় কের ফলন দিখেয় return EXIT SUCCESS; কের
মেলখ শষ করেবা। নীেচর যাগান-ফলেন (input-output) এই অব া দখােনা হেলা।
somikoron ax ˆ2 + bx + c = 0
a b c er man koto ? 2 −5 2
prothom somadhan x1 = 2
d i t i y o somadhan x2 = 0 . 5
৯২
৭.৮. বুলক সংেযাজক (Boolean Connectives)
সংখ া", যিদ ৭ ারাও িবভাজ না হয় আবার ১৩ ারাও িবভাজ না হয় তাহেল ফলন িদেব "অভাগ
সংখ া", যিদ কবল ৭ ারা িবভাজ হয় িক ১৩ ারা িবভাজ নয় তাহেল ফলন িদেব " সৗভাগ
সংখ া", আর যিদ কবল ১৩ ারা িবভাজ হয় িক ৭ ারা নয় তাহেল ফলন িদেব " ভাগ সংখ া"।
যিদ সংখ ািট ৭ বা ১৩ য কান একিট বা উভয়িট ারা িবভাজ হয় তাহেল ফলন িদেব "ভাগ
সংখ া"। একিট সংখ া একই সােথ উপেরর এক বা একািধক ভােগ পড়েতই পাের।
i f ( sonkhya % 7 == 0 | | sonkhya % 13 == 0 )
cout << " vaggo sonkhya " << endl ;
৯৩
৭.৯. বুলক, পূণক, ভ ক (Boolean, Integer, Float)
bool b i v a j y o 7 = sonkhya % 7 == 0 ;
bool b i v a j y o 1 3 = sonkhya % 13 == 0 ;
i f ( b i v a j y o 7 && b i v a j y o 1 3 )
cout << " missrovaggo sonkhya " << endl ;
i f ( ! b i v a j y o 7 && ! b i v a j y o 1 3 )
cout << " ovaggo sonkhya " << endl ;
i f ( b i v a j y o 7 && ! b i v a j y o 1 3 )
cout << " souvaggo sonkhya " << endl ;
i f ( b i v a j y o 1 3 && ! b i v a j y o 7 )
cout << " durvaggo sonkhya " << endl ;
i f ( bivajyo7 | | bivajyo13 )
cout << " vaggo sonkhya " << endl ;
উপেরর মেলখাংেশ (program segment) খয়াল কেরা bivajyo7 (বা একই ভােব
bivajyo13) এর মান সত নািক িমথ া আমরা িক bivajyo7 == true অথবা bivajyo7 =
= 1 িলেখ কির নাই, যিদও তা করেত পারতাম। আমরা বরং ফ চলকটা ব বহার কেরিছ কারণ
চলকটার মানই তা সরাসির সত বা িমথ া। আবার আলাদা কের == অণুি য়া (operator) িদেয়
সত বা িমথ া পরী া করার দরকার নই। তেব খয়াল কেরা যখন িবভাজ নয় পরী া করেত হেব
তখন আমরা !bivajyo7 (বা একই ভােব !bivajyou13) িলেখ অথাৎ চলেকর নােমর সামেন
! লািগেয় িদেয়িছ। এখােন ! হেলা নয় বা না অণুি য়া। তুিম চাইেল ! এর বদেল িসিপিপেত not
িলখেত পারেত। নয় অণুি য়া সত েক উপাদান (operand) িহসােব িনেয় িমথ া ফলাফল দয়
আর িমথ ােক উপাদান িহসােব িনেয় সত ফলাফল দয়। আর স কারেণ bivajyo7 == false
না িলেখ আমরা !bivajyo7 িলখেলই আমােদর কাজ হেয় যায়।
একিট সংখ া জাড় না িবেজাড় তা িনণেয়র মেলখ (program) রচনা কেরা। তামার মেলখ-
ত তুিম কান বুলক চলক (boolean variable) বা অ য়ী অণুি য়া (relational operator)
ব বহার করেত পারেব না। তামােক পূণক মানেকই বুলক িহসােব ব বহার করেত হেব।
৯৪
৭.৯. বুলক, পূণক, ভ ক (Boolean, Integer, Float)
i f ( sonkhya % 2 ! = 0 )
cout << " be jo r " << endl ;
else
cout << " j o r " << endl ;
এই মেলখিট (program) তুিম চাইেল উপেরর মেতা কের িলখেত পােরা। কান সংখ া
২ িদেয় ভাগ িদেল যিদ ভাগেশষ না হয় তাহেল সংখ ািট িবেজাড়, আর ভাগেশষ হেল
সংখ ািট জাড়। কােজই মেলখিট সহেজই িলেখ ফলা যায়। িক এেত অসমান িনণেয়র জ
একিট অণুি য়া != ব বহার করেত হে , যিট চাইেল আমরা ব বহার না কেরও কাজ চালােত
পাির। এর কারণ হেলা য কান সময় েক আমরা িমথ া ধের িনেত পাির আর য কান অ -
মানেক, সটা ধনা ক হাক বা ঋণা ক হাক, আমরা সটােক সত ধের িনেত পাির। তােত
আমােদর মানিট আালাদা কির িকনা তা আর পরী া করার দরকার পেড় না। কােজই নীেচর
মেলখাংেশর (program segment) মেতা কের != বাদ িদেয় ফ if (sonkhya % 2)
লখা মােনই হেলা if (sonkhya % 2 != 0) লখা।
তাহেল এখানকার আেলাচনায় আমরা দখলাম উপাদান (operand) িহসােব হেলা িম-
থ া (false) আর অ যেকান ধনা ক (positive) বা ঋণা ক (negative) পূণক (integer)
বা ভ ক (float) হেলা সত (true)। আর অ য়ী অণুি য়া (relational operators) আেলাচ-
নার সময় জেনিছ ফলাফল (result) িহসােব সবসময় false হেলা 0 এবং true হেলা 1। খয়াল
কেরা উপাদান (operand) িহসােব true 0 ছাড়া য কান িকছু হেলও ফলাফল (result) িহসােব
true কবল 1, false অব উভয় ে ই কবল 0।
৯৫
৭.১০. বুলক বীজগিণত (Boolean Algebra)
ধেরা েটা ! পরপর আেছ যমন ! !true বা ! ! false বা ! !x, তাহেল ফলাফল কী হেব।
এইসব ে আমােদর ডােনর ! আেগ িহসাব করেত হেব, তার ওপর বােমর ! ধের শষ ফলাফল
িহসাব করেত হেব। একারেণ ! হেলা ডান সহেযাজ (right associative)। তা এখােন ডােনর
! অণুি য়া true বা false ক উে িদেব আর বােমর ! সটােক আবার িসধা করেব। তরাং
! !true হেব true, ! ! false হেব false, আর ! !x হেব x। বুলক বীজগিণেত এই িনয়মেক বলা
হয় েনা ঋণায়ন (double negation)। তুিম িক িতন বা বশী সংখ ক ! পরপর থাকেল কী
হেব বর করেত পারেব? অব ই পারেব, িত ইিট ! পর রেক বািতল কের িদেব।
বুলক বীজগিণেতর (boolean algebra) ি তীয় অণুি য়া (operator) এবং, ও যটা &&
বা and িলেখ কাশ করা হয়। ল কেরা এবং অণুি য়ার ফলাফল (result) সত যখন উভয়
উপাদানই (operand) সত , আর যেকান একিট উপাদান িমথ া হেলই ফলাফল িমথ া।
একিট উপাদান সত বা িমথ া ধের িনেল এবং && অণুি য়ার জে আমরা বশ িকছু সর-
লীকরণ কের ফলেত পাির য েলােক আমরা সেত র সরল (true simplification) ও িমথ ার
সরল (false simplification) বলেবা। কান একিট উপাদান আমরা যিদ আেগই বুেঝ ফিল
সিট সত না িমথ া তাহেল আমরা এই সরলীকরণ েলা কােজ লাগােত পারেবা।
৯৬
৭.১০. বুলক বীজগিণত (Boolean Algebra)
একিট উপাদান সত বা িমথ া ধের িনেল অথবা | | অণুি য়ার জে আমরা বশ িকছু সর-
লীকরণ কের ফলেত পাির য েলােক আমরা সেত র সরল (true simplification) ও িমথ ার
সরল (false simplification) বলেবা। কান একিট উপাদান আমরা যিদ আেগই বুেঝ ফিল
সিট সত না িমথ া তাহেল আমরা এই সরলীকরণ েলা কােজ লাগােত পারেবা।
৯৭
৭.১১. বুলক সমতুল (Boolean Equivalence)
নীেচর েটা িনয়ম হেলা সহেযাজেনর িনয়ম (associative rule)। এই িনয়েম একই অণু-
ি য়া (operator) পরপর থাকেল আমরা য কানিট আেগ মূল ায়ন (evaluate) কের তার
ফলাফেলর সােথ অ অণুি য়ার মূল ায়ন করেত পাির, আর তােত ফলাফল একই হেব।
• x | | y | | z ≡ (x | | y) | | z ≡ x | | (y | | z) সহেযাজ
নীেচর িনয়ম েলা হেলা শাষন িনয়ম (absorption rule)। থম চারিট িনয়েম খয়াল
কেরা x যিদ true হয় তাহেল x | | y বা y | | x এর মানও true আর ফেল && এর ফলাফলও
true। আবার x যিদ false হয় তাহেল && এর ফলাফল অব ই false। তাহেল বামিদেকর
রািশ েলার মান সবসময় x এর মান যা তাই। একই ভােব শেষর চারিট িনয়েম খয়াল কেরা x
যিদ false হয় তাহেল x && y বা y && x এর মানও false। আবার x যিদ true হয় তাহেল
| | এর ফলাফল অব ই true। তাহেল বামিদেকর রািশ েলার মান সব সময় x এর মান যা তাই।
কােজই এই িনয়ম েলা তামাকের বুলক রািশেক কত সহজ ও ছাট কের ফেল!
নীেচর িনয়ম েটােত অণুি য়া েলার (operator) উপাদান েটা একই। এবং && ও অথবা
| | উভেয়র ফলাফল এে ে সবসময় উপাদানিটর মান যা তাই হেব। একিট উপাদােনর িনেজর
৯৮
৭.১২. সত ক সারণী (Truth Table)
সােথ িনেজর ওপর কান অণুি য়া (operator) যু হেল ফলাফল যিদ উপাদানিটই হয় তাহেল
অণুি য়ািটর এই ধমেক বলা হয় অ ি য়তা (idempotence)। সব অণুি য়াই িক অ ি য়
নয়, যমন পািটগিণেত সবাব ায় x + x = x সত নয়, কােজই যাগ + অ ি য় নয়। বুলক
বীজগিণেত এবং && ও অথবা | | উভেয়ই অ ি য় (idempotent)।
v
নীেচর িনয়ম েটােত অণুি য়া েলার (operator) উপাদান েটা পর েরর িবপরীত। এবং
&& এর ফলাফল এে ে সবসময় false হেব, কারণ েটা উপাদােনর মেধ য কান একিট তা
িমথ া হেবই, আর য কান একিট িমথ া হেলই এবং এর ফলাফল িমথ া। তাই এই িনয়মেক বলা
হয় অস িত (contradiction)। আর অথবা | | এর ফলাফল এে ে সবসময় true হেব, কারণ
েটা উপাদােনর মেধ য কান একিট তা সত হেবই, আর য কান একিট সত হেলই অথবা
এর ফলাফল সত । তাই এই িনয়মেক বলা হয় নঞ মধ ম (excluded middle)।
নীেচর িনয়ম েটার নাম িড মরগােনর িনয়ম (De Morgan's Law)। এই িনয়ম েটা খুবই
পূণ এবং ায়শই বুলক রািশর সরলীকরেণ ব ব ত হয়। এই িনয়ম অণুযায়ী এবং && এর
ফলাফেলর ওপর নয় ! করেল য ফলাফল পাওয়া যায় তা আেগ উপাদান েলার ওপের নয় ! কের
সই ফলাফেলর ওপর অথবা | | চািলেয় পাওয়া ফলাফেলর সমতুল। একই ভােব অথবা | | এর
ফলাফেলর ওপর নয় ! করেল য ফলাফল পাওয়া যায় তা আেগ উপাদান েলার ওপের নয় ! কের
সই ফলাফেলর ওপর এবং && চািলেয় পাওয়া ফলাফেলর সমতুল।
৯৯
৭.১৩. বুলক সরলীকরণ (Boolean Simplification)
চাই। যমন ! (x && y) মূল ায়ন করেত গেল আমােদর x && y আেগ মূল ায়ন করেত হেব,
তমিন ভােব !x | | !y মূল ায়ন করেত গেল !x ও !y মূল ায়ন করেত হেব।
২. ি তীয় আিড়েত (row) x,y যথা েম true, false, ফেল x && y হেলা false আর ! (
x && y) হেলা true। তারপর !x ও !y হেব যথা েম false ও true, ফেল !x | | !y
হেলা true। তরাং ! (x && y) আর !x | | !y এর মান সমান।
৩. তৃতীয় আিড়েত (row) x,y যথা েম false , true, ফেল x && y হেলা false আর ! (
x && y) হেলা true। তারপর !x ও !y হেব যথা েম true ও false, ফেল !x | | !y
হেলা true। তরাং ! (x && y) আর !x | | !y এর মান সমান।
৪. চতুথ আিড়েত (row) x ও y উভেয়র মানই false। তরাং x && y ও false, ফেল !
(x && y) হেব true। তারপর !x আর !y উভয়ই হেলা true, ফেল !x | | !y হেলা
true। কােজই ! (x && y) আর !x | | !y উভেয়র মান সমান।
১০০
৭.১৩. বুলক সরলীকরণ (Boolean Simplification)
াসি ক অংশটু দিখ। থেম if shreni == 5) িদেয় পরী া করা হেলা প ম ণী িকনা,
হেল ফলন (output) হেব "khelte parbe"। আর প ম ণী যিদ না হয় িক বয়স যিদ ১০
বছর হয় সটা পরী া করার জ আমােদর লাগেব if (shreni != 5 && boyosh == 10)
যিট আমরা আেগর if এর else এর সােথ লািগেয় িদেবা। আর সবেশেষ কান if এর শতই সত
না হেল আমরা ফলন (output) দখােবা "khelte parbena"। একটা পূণ িবষয় খয়াল
কেরা, বাংলা ভাষায় যটা "িক " সটা িসিপিপেত িগেয় হেয় যাে "এবং" &&।
i f ( s h r e n i == 5 )
cout << " khelte parbe " << endl ;
e l s e i f ( s h r e n i ! = 5 && boyosh == 10)
cout << " khelte parbe " << endl ;
e l s e / / উপেরর কানিটই না হেল
cout << " khelte parbena " << endl ;
উপেরর মেলখাংেশ েটা if এর শত সত হেলই আমােদর একই ফলন দখােত হয়। আমরা
তাই চ া করেত চাই একটা if িদেয় িবষয়টা সামলােত। সটা করা খুবই সহজ যিদ তুিম সম াটা
উে া িদক থেক ভােবা। তুিম মারগ লড়াই খলেত পারেব যিদ তুিম ৫ম ণী পেড়া অথবা তুিম
৫ম ণীেত না িক তামার বয়স ১০ বছর হেল। তা এই থেক তুিম খুব সহেজ খলেত পারার
শত িলেখ ফলেত পােরা shreni == 5 | | shreni != 5 && boyosh == 10, তাই না!
i f ( s h r e n i == 5 | | s h r e n i ! = 5 && boyosh == 10)
cout << " khelte parbe " << endl ;
e l s e / / উপেরর শত সত না হেল
cout << " khelte parbena " << endl ;
এখন কথা হে এই য খািনকটা জিটল একটা শত আমরা িলেখ ফললাম, এটােক িক কান
ভােব সরলীকরণ করা যায়? সরলীকরণ করার জ চেলা ধের িনই p ≡ shreni == 5 আর q
≡ boyosh == 5। তাহেল shreni != 5 ক লখা যায় !p। ফেল আমােদর শতিট দাঁড়ােলা
p | | !p && q, আমরা এিটেক বুলক বীজগিণত (boolean algebra) িদেয় সরল করেবা।
১০১
৭.১৪. মই, অ াি , সংেযাজক (Ladder, Nesting, Connectives)
একই রকম আেরকিট উদাহরণ দেখা। ধেরা কান একটা মেলখেত (program) শত
দাঁড়াে ! (p && (!p | | q)) | | q। এখন কথা হে এিটেক সরল করেল কী দাঁড়ােব।
! (p && (!p | | q)) | | q দ শত যা সরল করেত হেব
≡ ! ( (p && !p) | | (p && q)) | | q ব টন িনয়ম (distribution)
≡ ! (false | | (p && q)) | | q অস িত (contradiction)
≡ ! (p && q) | | q িমথ ার সরল (false simplification)
≡ ( !p | | !q) | | q িড মরগান (De Morgan)
≡ !p | | ( !q | | q) সহেযাজন (associative)
≡ !p | | true নঞ মধ ম (excluded middle)
≡ true সেত র সরল (true simplification)
উপেরর সরলীকরেণর ফেল আমরা if ( ! (p && (!p | | q)) | | q) না িলেখ কবল if
(true) িলখেত পারেবা। িক একটা িবষয় দেখেছা, সরলীকরেণর ফলাফল একদম একটা বক
মান true হেয় গেছ। এর অথ দ শেতর মান কখেনা চলক p বা q এর ওপর িনভর কেরনা।
তরাং আমােদর আেদৗ কান if লাগােনার দরকার নাই। কারণ শত সত হেল যিট করেত হেতা
শত সবসময় সত হওয়ায় তুিম সিট এখন শত পরী ণ ছাড়াই করেব।
/ / i f ( true ) / / শত লখার দরকার নাই , টীকায় আটেক িদেয়িছ
cout << " kee moja " << endl ; / / কবল এিট িলখেলই হেব
তুিম এবার িজে স করেত পােরা সরলীকরেণর ফেল যিদ false আেস তাহেল কী হেব?
সিত ই তা কী হেব? সে ে আমােদর িলখেত হেব if (false) তাই না! িক সটা মােন তা
শত সব সময় িমথ া, শতিটর সত হওয়ার কান স াবনা নই। আর সে ে শত সত হেল যা
করার কথা িছেলা সটা কখেনাই করেত হেব না। ফেল তুিম এই if (false) আর তারপর শত
সত হেল যা করেত তার সব মেলখ (program) থেক মুেছ িদেত িদেত পােরা।
/ / i f ( f a l s e ) / / শত লখার দরকার নাই , টীকায় আটেক িদেয়িছ
/ / cout << " kee moja " << endl ; / / শত সব সময় িমথ া
১০২
৭.১৪. মই, অ াি , সংেযাজক (Ladder, Nesting, Connectives)
উপেরর উদাহরেণ বামপােশ shorto ব বহার করা হেয়েছ আর ডানপােশ !shorto। ফেল
শত সত হেল যা করেত হেব আর িমথ া হেল যা করেত হেব এই েটা ান বদলাবদিল কেরেছ।
১০৩
৭.১৪. মই, অ াি , সংেযাজক (Ladder, Nesting, Connectives)
উপেরর উদাহরেণ খয়াল কের দেখা "kisu ekta" ফলেন (output) যােব যিদ shorto1
সত হয় অথবা যিদ shorto2 িমথ া হয়, অ কথায় !shorto2 সত হয়। আর shorto1
িমথ া হেল তারপর shorto2ও িমথ া হেল ফলেন (output) যােব "onno kisu"। িঠক এই
ব াপারিটই উভয়পােশর মেলখাংেশ (program segment) িতফিলত হেয়েছ।
i f ( shorto1 ) i f ( ! shorto1 | | shorto2 )
i f ( shorto2 ) cout << " k i s u ekta " ;
cout << " k i s u ekta " ; else
else cout << " onno k i s u " ;
cout << " onno k i s u " ; cout << " koro " << endl ;
else
cout << " k i s u ekta " ;
cout << " koro " << endl ;
উপেরর উদাহরণিট একটু জিটল। বামপােশ খয়াল কেরা "kisu ekta" ফলেন (output)
যােব যিদ shorto1 িমথ া হয় অথবা তা না হেল যিদ shorto2 সত হয়। কথায় বলেল িঠক
তাই-ই ডানপােশও িলখা হেয়েছ। আর একটু বশী গভীের বুঝেত চাইেল ধেরা বামপােশ "kisu
ekta" ফলেন যােব যিদ shorto1 && shorto2 || !shorto1 সত হয়। বুলক বীজগিণত িদ-
য় সরলীকরণ করেল এিট আসেব !shorto1 || shorto2, তুিম িনেজ চ া কের দেখা।
bool shorto = true ; i f ( shorto1 && shorto2 )
i f ( ! shorto1 ) cout << " k i s u ekta " ;
shorto = f a l s e ; else
i f ( ! shorto2 ) cout << " onno k i s u " ;
shorto = f a l s e ; cout << " koro " << endl ;
i f ( shorto )
cout << " k i s u ekta " ;
else
cout << "onno k i s u " ;
cout << " koro " << endl ;
১০৪
৭.১৫. যিদ-নাহেল অ লায়ন (If-Else Optimisation)
হয়। তাই আমরা েত shorto এর মান িনেয়িছ true, এরপর shorto1 িমথ া হেল অথাৎ
!shorto1 সত হেল আমরা shorto ক িমথ া কের িদেয়িছ। একই ভােব shorto2 িমথ া হেল
অথাৎ !shorto2 সত হেলও আমরা shorto ক িমথ া কের িদেয়িছ। তাহেল েটা শেতর য
কানিট িমথ া হেলই shorto িমথ া হেয় যােব। িঠক && এর ফলাফেলর মেতা। শেষর if else
এ এবার shorto ব বহার কের ফলন দবার পালা। তেব একটা িবষয় খয়াল কেরা ডানপােশ য-
মন shorto1 িমথ া হেল আংিশক মূল ায়েনর কারেণ (partial evaluation) shorto2 আর
পরী ণই করা হেব না, বামপােশ িক তা হে না। তুিম যিদ এই উ য়ন টু করেত চাও তাহেল
তামােক if ( !shorto2) বদেল িলখেত হেব else if ( !shorto2)।
bool shorto = f a l s e ; i f ( shorto1 | | shorto2 )
i f ( shorto1 ) cout << " k i s u ekta " ;
shorto = true ; else
i f ( shorto2 ) cout << " onno k i s u " ;
shorto = true ; cout << " koro " << endl ;
i f ( shorto )
cout << " k i s u ekta " ;
else
cout << "onno k i s u " ;
cout << " koro " << endl ;
এই উদাহরণিটও িঠক আেগর উদাহরণিট মেতা, তেব এখােন | | এর জ করা হেয়েছ। অথ-
বার | | ে যেকান একিট উপাদান (operand) সত হেলই ফলাফল সত হয়, আমরা তাই
shorto এর আিদ মান ধেরিছ false। আর তারপর শত েটার য কানিট সত হেলই shorto
ক সত করা হেয়েছ। তুিম যিদ আংিশক মূল ায়ন (partial evaluation) এখােনও কােজ লা-
গােত চাও তাহেল বামপােশ if (shorto2) বদেল else if (shorto2) িলখেব।
ধেরা তামার ইশ েল গিণত পরী ায় ৫০ বা বশী পেল পাশ, না হেল ফল। আর ৮০ বা বশী
পেল তারকা িনেয় পাশ। তামার ণীেত ১০০ জন িশ াথী আেছ, যােদর মেধ মাটামুিট ১০ জন
ফল করেব, ২০ জন তারকা সহ পাশ করেব আর বাঁকী ৭০ জন ফ পাশ করেব। তুিম এমন একিট
মেলখ (program) রচনা কেরা যিট একজন িশ াথীর ছাে র ন র যাগান (input) িনেয়
ফল, পাশ, বা তারকা সহ পাশ ফলন (output) িদেব। তামার মেলখিট ১০০ জন িশ াথীর
জ ১০০ বার আলাদা আলাদা কের চালােনা (run) হেব। তেব এই ১০০ বার চালােনােত মাট
সময় যােত কম লােগ মেলখটা সটা মাথায় রেখ রচনা করেত হেব।
i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
else // না হেল
cout << " f e l l " << endl ; // ফল ফলন
১০৫
৭.১৫. যিদ-নাহেল অ লায়ন (If-Else Optimisation)
ধেরা উপেরর মেতা কের তুিম মেলখ তরী কেরেছা। য িশ াথী ফল করেলা বা পাশ
করেলা বা তারকা সহ পাশ করেলা, তার জ তা যা ফলন তা দখােতই হেব, সখােন সময় কম
লাগা বশী লাগার ব াপার নাই। সময় কম বা বশী লাগার হেলা তুিম কতবার শত পরী া কের
কাজটা করেত পারেছা সটােত। যমন ধেরা একজন ফল করা িশ াথীর জ উপেরর মেলখেত
(nombor >=50) শত পরী া হেব আবার মেলখ য ভােব লখা হেয়েছ তােত nombor
>= 80 শতিটও পরী া হেব। শত পরী ার ফলাফল সত হাক আর িমথ া হাক পরী া তা
করেতই হেব। ফেল মাট িট শত পরী া হেলা। য িশ াথীিট কবল পাশ করেব খয়াল কের
দেখা তার জে ও িটই শতই পরী া করেত হেব। একই হেব তারকাসহ পােশর ছাে র জে ও
িট শতই পরী া করেত হেব। তরাং উপেরর মেলখ িদেয় এই সম ার সমাধান করেল ১০০
জন িশ াথীর জ মাট শত পরী া হেলা ১০০ * ২ = ২০০ বার।
i f ( nombor >= 50) // যিদ পােশর ন র
{
cout << " pash " << endl ; // পাশ ফলন
i f ( nombor >= 80) / / যিদ তারকা ন র
cout << " taroka " << endl ; / / তারকা ফলন
}
else // না হেল
cout << " f e l l " << endl ; // ফল ফলন
এবার একটু ভেব দেখা পাশ বা ফল িনণয় করার জ তা আমােদর একটা শত লাগেবই,
িক যখন আমরা জেন গলাম একজন িশ াথী ফল কেরেছ, তখন তার জে ও কন আমরা
nombor >= 80 শত পরী া করেবা? সটা তা অদরকারী কাজ হেব। তরাং তারকা দখা-
না অংশটু যিদ আমরা পােশর জ য অংশ সখােন একটা মহ া (block) তরী কের সই
মহ ার িভতের িনেয় যাই, তাহেল nombor >= 80 শতিট কবল পাশ করা িশ াথীেদর জ
পরী া হেব। উপেরর মেলখাংশ দেখা। তা এই ে পাশ বা ফল িশ াথীর জ কবল ১
টা শত পরী া হেলা আর তারকা পাওয়া ছাে র জ ২টা তরাং মাট শত পরী ণ হেলা ২০*২
+ (৭০+১০)*১ = ১২০ বার মা । িনি তভােবই এই মেলখ আেগরিটর চেয় তাড়াতািড় ১০০
জন িশ াথীর ফলাফল দখােনার কাজ শষ করেব! কমন মজার িবষয় না!
i f ( nombor >= 80) // যিদ তারকা ন র
{
cout << " pash " << endl ; // পাশ ফলন
cout << " taroka " << endl ; // তারকা ফলন
}
e l s e i f ( nombor >= 50) // যিদ পােশর ন র
cout << " pash " << endl ; // পাশ ফলন
else // না হেল
cout << " f e l l " << endl ; // ফল ফলন
তুিম হয়েতা ভাবেছা দিখ আেরক ভােব করা যায় িকনা যােত আেরা কম সময় লােগ। যমন
ধেরা তুিম থেম ৮০ বা বশী িকনা পরী া করেব, তারপর ৫০ এর বশী িকনা পরী া করেব,
অথাৎ উপেরর মেলখাংেশর (program segment) মেতা কের। এখােন খয়াল কেরা তারকা
পাওয়া িশ াথীেদর জ শত পরী া করা লাগেব ১বার সিট nombor >= 80 আর ফ পাশ
বা ফল করা িশ াথীেদর জ ২িট শতই পরী া করা লাগেব। ফেল মাট শত পরী ণ হেব ২০*১
১০৬
৭.১৬. িতিনক অণুি য়া (Ternary Operator)
িতিনক অণুি য়া ব বহার কের আমরা উপের েটা সংখ ার বড়িট বর করার মেলখাংশ
দিখেয়িছ। এখােন থেম ? িচে র আেগ য শত পরী া আেছ সিট মূল ায়ন হেব। শত যিদ
সত হয় তাহেল ? আর দাঁটা : িচে র মােঝ য মানিট আেছ সিট হেব অণুি য়ািটর ফলাফল
আর শত যিদ িমথ া হয় তাহেল অণুি য়ািটর ফলাফল হেব দাঁটা : িচে র পের থাকা অংশটু ।
তাহেল উপেরর মেলখাংেশ prothom > ditiyo শতিট সত হেল ফলাফল হেব prothom
অথাৎ বড়িট আর শতিট িমথ া হেল ফলাফল হেব ditiyo কারন এিটই তখন বড় অ িটর চেয়।
তরাং আমরা ফলাফল িহসােব prothom ও ditiyo চলক িটর মেধ সবসময় বড়িটই পাি ।
তুিম িন য় এখন েটা সংখ ার মেধ ছাটিট বর করার মেলখাংশ এভােব িলখেত পারেব!
i n t prothom , d i t i y o ; / / চলক িটর মান যাগান িনেত পােরা
i n t boro ; / / বড় মানিট রাখার জ চলক ঘাষণা
১০৭
৭.১৬. িতিনক অণুি য়া (Ternary Operator)
তুিম িক চাইেল েটা সংখ ার বড়িট বর করার জ উপেরর মেতা কেরও িলখেত পারেত।
এইে ে চলক (variable) boro ত মান আেরাপণ (assign) আমরা িতিনক অণুি য়ার িভ-
তেরই কেরিছ খয়াল কেরা। আেরাপণ (assign) অণুি য়ার ফলাফল (result) তা আেরািপত
মানিটই হয়, তরাং এে ে ও িতিনক অণুি য়ার ফলাফল িহসােব আমরা বড়িটই পােবা, যিদও
boro চলেক মান আেরাপণ আেগই হেয় িগেয়েছ। তুিম িজে স করেত পােরা এই ে িত-
িনক অণুি য়ািটর যটা ফলাফল আসেব সটা আসেল কী কােজ লাগেব। এইখােন আসেল আমরা
ফলাফলিট কােজ লাগাি না। িক তুিম চাইেল int fol = prothom > ditiyo ? boro =
prothom : boro = ditiyo; িলখেতই পােরা। সে ে বড় মানিট boro চলেকর মেধ যমন
থাকেব তমিন fol চলেকর মেধ ও থাকেব। িতিনক অণুি য়ার ব বহার এভােব বশ সংি ।
i n t prothom , d i t i y o ; / / চলক িটর মান যাগান িনেত পােরা
i n t boro ; / / বড় মানিট রাখার জ চলক ঘাষণা
িতিনক অণুি য়ার কাজ তা উপেরর মেতা কের যিদ-নাহেল িদেয়ও করা যেত পাের। তাহেল
কখন তুিম িতিনক অণুি য়া ব বহার করেব কখন যিদ-নাহেল ব বহার করেব? অত সংি
ধরেনর বেল িতিনক অণুি য়া (ternary) আসেল টুকটাক ছাটখাট িকছুর জ বশী ব বহার
করা হয়। আর যিদ-নাহেল হেলা একদম সব জায়গায় ব বহার করার জ , িবেশষ কের শত সত
বা িমথ া হেল যিদ একটা মহ া (block) িনবাহ (execute) করেত হয়।
i n t prothom , d i t i y o , t r i t i y o ; / / মান যাগান িনেত হেব
তুিম িক িতিনক অণুি য়া (ternary operator) ব বহার কের িতনিট সংখ ার মেধ সব-
চেয় বড়িট বর করেত পারেব। িন য় পারেব, এ আর এমন কিঠন কী? উপেরর মেলখাংেশর
মেতা কের থেম েটার মেধ বড়িট বর করেব। তারপর boro এর সােথ tritiyo িট তুলনা
কের যিদ boroিটই বড় হয় তাহেল ফলাফল boro আর যিদ tritiyo িট বড় হয় তাহেল ফলা-
ফল tritiyo িট। িক আমরা আসেল এই রকম আলাদা েটা িতিনক অণুি য়া চাি না। আম-
রা বরং একটা িতিনক অণুি য়ােক আেরকিট িতিনক অণুি য়ার মেধ ঢুিকেয় িদেবা, আর যােক
বলব অ াি (nested) িতিনক অণুি য়া। নীেচর মেলখাংশ খয়াল কেরা, আমরা একটু ছা-
ড়ন (indentation) িদেয় িলেখিছ। থেম prothom ও ditiyo তুলনা করা হেয়েছ। শত সত
হওয়া মােন prothom বড় যিটেক tritiyo এর সােথ তুলনা করা হেয়েছ। আর শত িমথ া হও-
য়া মােন ditiyo বড়, কােজই এিটেক tritiyo এর সােথ তুলনা করা হেয়েছ। িতিনক অণুি য়া
ব বহার কেরই আেরা নানান ভােব এিট করা স ব, তুিম িনেজ িনেজ চ া কের দেখা।
i n t prothom , d i t i y o , t r i t i y o ; / / মান যাগান িনেত হেব
১০৮
৭.১৭. পি ব াপার (Switch Cases)
cout << " kee chomotkar ! " << endl ; / / পি র বাইের অ িকছু
১০৯
৭.১৭. পি ব াপার (Switch Cases)
উপেরর মেলখাংশ (program segment) খয়াল কেরা। যমন বলা হেয়েছ তমন কের
িট চলক নয়া হেয়েছ: কান অ পাত তা রাখার জ চলক onupat আর কত রিডয়ান কান
তা রাখার জ চলক kone। এরপর একটা াপণ (menu) দখােনা হেয়েছ, কান সংখ া িদেয়
কান অ পাত বুঝােনা হে সটা ব বহারকারীেক জানােনার জ : 1 িদেল ল া পাত (sine), 2
িদেল ল া পাত (cosine), 3 িদেল শা পাত (tangent)। এরপের অ পাত ও কাণ যাগান
(input) নয়ার জ থেম যাগান যাচনা (input prompt) কের তারপর যাগান নওয়া হেয়-
ছ। তারপর মুল অংশ যখােন পি ব াপার (switch case) ব বহার কের য অ পাত চাওয়া
হেয়েছ সিট দখােনা হেব। পি -ব াপােরর পের আেছ অ িকছু মেলখাংেশর বাঁকী অংশ।
আমরা কবল পি ব াপার (switch case) অংেশ নজর দই। যেহতু onupat চলকিটর
(variable) মান ওপর িনভর করেব আমরা কান অ পাত ফলেন (output) দখােবা, আম-
রা তাই িলেখিছ switch(onupat) আর তারপর আমােদর একিট মহ া (block) তরী করেত
হেব { } বাঁকা ব নী (curly brackets) যুগল িদেয়। এবার অ পােতর মান কত হেল কী কর-
ত হেব তার সবিকছু আমরা রাখেবা মহ ার িভতের। খয়াল কেরা onupat এর মান 1, 2, 3
হওয়ার জ আমােদর িতনিট ব াপার (case) আেছ যমন case 1: case 2: case 3:; খ-
য়াল কেরা থেম case তারপের onupat চলকিটর কান মান সিট তারপর একটা : দাঁটা
(colon)। িতিট ব াপােরর (case) পের দেখা আমরা cout িদেয় ি েকানিমিতর অ পাত
sine, cosine, tangent ব বহার কের ফলন দিখেয়িছ। তারপর িলেখিছ break; অথাৎ এই-
খােন পি -ব াপােরর াি (break) ঘটেব। এই াি েয়র (break) কাজ আমরা একটু পেরই
আেলাচনা করিছ। তার আেগ দেখা case 3: এর াি েয়র (break) পের রেয়েছ default:
যিট হেলা অগত া ব াপার অথাৎ ওপেরর কান case এর সােথই onupat এর মান না িমলেল
অগত া ব াপারিট ঘটেব বেল ধের নয়া হেব। তাহেল onupat এর মান যিদ 1, 2, 3 িভ অ
িকছু হয় তাহেল default: অগত া ব াপারিট ঘটেব। যথারীিত সখােন আমরা িটবাতা (error
message) দিখেয়িছ। এখােন িক break; আেছ শেষ।
মেলখ িনবাহ (program execution) করার সময় ধের িনেত পােরা অদৃ বাতােমর
মেতা একটা ব াপার আেছ যটােক বলা হয় িনয় ণ (control)। এই িনয় ণ বাতামিট মেলখ
িনবােহর েত main িবপাতেকর একদম থম সািরেত থােক। বাতামিট যই সািরেত থােক
সই সাির িনবািহত (executed) হয়। আর তারপর িনয় ণ বাতামিট পেরর সািরেত লাফ দয়,
তখন সই সািরিট িনবািহত হয়। এভােব িনয় ণ বাতােমর লাফালািফ ও সই সােথ সংি সািরর
িনবাহ এেক এেক চলেত থােক। যিদ-নাহেল (if-else) আেলাচনা করার সময় আমরা বেলিছলাম
শত সত হেল িকছু কাজ হয় আবার শত িমথ া হেল অ িকছু কাজ হয়। িঠক যন েটা শাখা
(branch) তরী হয়। শেতর ওপর িনভর কের িনয় ণ বাতামিট আসেল হয় এই শাখায় নাহয়
ওই শাখায় িগেয় লাফ িদেয় বেস। িনয় ণ য শাখায় বেস সই শাখা িনবািহত হয়, অ শাখা
িনবািহত হয় না। িনয় ণ বাতাম এরপর if-else এর পেরর অংেশ চেল যায়।
পি -ব াপােরর (switch-case) ে বলেতা িনয় ণ switch(onupat) এর পের লাফ
িদেয় কান সািরেত িগেয় বসেব? যিদ onupat এর মান হয় 1 তাহেল িগেয় বসেব case 1: এর
সািরেত, 2 হেল িগেয় বসেব case 2: এর সািরেত, আর 3 হেল বসেব case 3: এর সািরেত,
আর িতনেটর কানটাই না হেল িগেয় বসেব default: এর সািরেত। িনয় ন switch(onupat
) হেত লাফ িদেয় িগেয় সংি ব াপাের (case) বসার পের সািরর পর সাির এেক এেক যেত
থাকেব যত ণনা একিট break; পাে । অথাৎ break পাওয়ার আেগ পয ত কিট সািরই
এেকর পর এক িনবািহত হেত থাকেব। আর break; পাওয়ার পেরই িনয় ণ আর একিট লাফ
িদেয় পি -ব াপােরর (switch-case) মহ ার বাইের চেল যােব। াি না িদেল কী ঘটেব আমরা
সটা পরবতীেত আেলাচনা করেবা। তেব বেল রািখ িতিট ব াপােরর (case) শেষ আসেল াি
(break) দয়াটা আসেলই খুব পূণ, আর আমরা আবার না দয়ার ভুলটা ায়ই কির।
১১০
৭.১৮. অ াি পি ব াপার (Nested Switch Cases)
১১১
৭.১৮. অ াি পি ব াপার (Nested Switch Cases)
/ / কী চাই াপণ
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 ;
১১২
৭.১৮. অ াি পি ব াপার (Nested Switch Cases)
// বাইেরর পি রও বাইের
cout << " kee chomotkar ! " << endl ;
যখন akriti এর মান 1 অথাৎ বগ বেছ নয়া হেয়েছ তখন থেম ফলেন (output) দখােনা
হেয়েছ য বগ পছ করা হেয়েছ। তারপর চলক doirgho ঘাষনা (declare) কের যাগান
যাচনা (input prompt) কের যাগান (input) নওয়া হেয়েছ। তারপর বেগর কী জানেত চাই
তার জ আেরকিট াপণ (menu) দখােনা হেয়েছ, যখােন ফল নািক পিরসীমা চাই সটা
দখােনা হেয়েছ। ব বহারকারীর পছ যাগান নয়ার জ এখােনও keechai নােম একিট চলক
ঘাষনা কের যাগান যাচনা কের মান যাগান নয়া হেয়েছ। তারপর চলক keechai এর মােনর
ওপর িনভর কের আেরকিট পি ব াপার (switch case) ব বহার কের ফল বা পিরসীমা
ফলেন (output) দখােনা হেয়েছ। এই পি ব াপারিট আেগর পি -ব াপােরর িভতের, আর
তাই এই িভতেররিটেক বলা হেব অ াি পি ব াপার (nested switch case)।
যখন akriti এর মান 2 অথাৎ বৃ বেছ নয়া হেয়েছ তখন থেম ফলেন (output) দ-
খােনা হেয়েছ য বৃ পছ করা হেয়েছ। তারপর চলক bashardho ঘাষনা (declare) কের
যাগান যাচনা (input prompt) কের যাগান (input) নওয়া হেয়েছ। তারপর বৃে র কী জান-
ত চাই তার জ আেরকিট াপণ (menu) দখােনা হেয়েছ, যখােন ফল নািক পিরিধ চাই
সটা দখােনা হেয়েছ। ব বহারকারীর পছ যাগান নয়ার জ এখােনও chaokee নােম এক-
িট চলক ঘাষনা কের যাগান যাচনা কের মান যাগান নয়া হেয়েছ। বেগর ে ব ব ত চলক
keechai থেক িভ একিট নাম নয়ার জ ই মুলত নাম দওয়া হেয়েছ chaokee। এই েটা
১১৩
৭.১৯. পি ব াপার াি (Switch Cases Breaks)
১১৪
৭.১৯. পি ব াপার াি (Switch Cases Breaks)
খয়াল কেরা উপেরর মেলখাংেশ (program segment) সময় যিদ ১০টা হয়, িঠক স-
খােন িকছু না থাকেলও পরপর য িববৃিত েলা আেছ স েলা এেক এেক িনবািহত হেব, ফেল যমন
sokaler nasta, dupurer khabar, bikaler nasta সব েলা এেক এেক ফলেন আসেত
থাকেব। সময় যিদ ১১টা হয় তাহেলও একই ঘটনা ঘটেব। সময় যিদ ১২ টা হয়, তাহেল sokaler
nasta ফলেন আসেব না, িক dupurer khabar ও bikaler nasta এেক এেক আসেত
থাকেব। পেরর সময় েলার জে ও একই রকেমর কথাবাতা েযাজ ।
আর একটা িবষয় খয়াল কেরা, উপেরর পি েত (switch) আমরা অগত া ব াপার default
: দই নাই। ফেল সময় যিদ তািলকায় না থােক তাহেল সিট কান ব াপােরর (case) সােথই
িমলেব না, আর এেত ফলেন (output) িকছুই আসেব না। আসেল পি েত (switch) অগত া
(default) ব াপার িদেতই হেব এমন কান কথা নই, দরকার না লাগেল িদেব না।
switch ( nombor )
{
case 4 :
case 0 :
case 2 :
cout << " j o r " << endl ;
break ;
case 1 :
case 5 :
case 3 :
cout << " b e j o r " << endl ;
break ;
}
এবার িকছু : পি েত কী ব াপার েলা মােনর মা সােরই থাকেত হেব? মান েলা কী
ধারাবািহকভােব পরপর সংখ া হেত হেব? উভয় ে র উ র হে "না"। কােজই িঠক উপেরর
উদাহরেণর মেতা তুিম দরকার মেতা ব াপার েলা (case) পরপর না হেলও বা উে াপা া েম
হেলও িলখেত পারেব। আবার দেখা িকছু ব াপাের (case) াি (break) নাই, আবার িকছু
ব াপাের আেছ। মাট কথা যখােন াি দয়া দরকার সখােন break; না দরকার হেল নাই।
আেরা িকছু : পি েত (switch) ব াপার েলা (case) কী পূণক (integer) ছাড়া ভ ক
(fractioner) হেত পারেব? আর switch() এ চলক (variable) ছাড়া অ িকছু ব বহার করা
যােব? তুিম কান ভ ক (fractioner) ব াপার িহসােব ব বহার কের দখেত পােরা, তােত সং-
কলেন (compile) িট বাতা (error message) দখােব, তার মােন হেলা পারেব না। আর
switch(nombor) এখােন switch এ য কবল চলক হেত হেব তা নয়, য কান রািশ যিট
পূণক ফলাফল দয় সিটই তুিম ব বহার করেত পােরা, যমন নীেচর উদাহরণ দেখা, আমরা ২
িদেয় ভাগেশেষর ওপর পি ব বহার করিছ। ভাগেশষ ০ হেলা জাড়, আর ১ হেল িবেজাড়।
switch ( nombor % 2 )
{
case 0 : cout << " j o r " << endl ; break ;
case 1 : cout << " b e j or " << endl ; break ;
}
১১৫
৭.২০. পি ব াপার যিদ-নাহেল (Swtich Cases If Else)
পি েত অব তুিম একই ব বহার ইবার ব বহার করেত পারেব না, যমন case 1: িল-
খ একই পি র িভতের পের আবার case 1: িলখেত পারেব না। তেব পি র িভতের অ াি
(nested) পি থাকেল সখােন case 1: থাকেতই পাের।
case 0 :
cout << " shunyo " << endl ;
break ;
case 1 :
case 2 :
cout << " dhonatok " << endl ;
break ;
}
উপেরর উদাহরণিট খয়াল কেরা। এখােন আমরা একিট ন র ধনা ক (positive), ঋণা ক
(negative), নািক (zero) িনণয় করেত চাই। আমরা যিদ আেগ থেক জািন য ন রিট ক-
বল −2, −1, 0, 1, 2 এই পাঁচিট িনিদ সংখ ার একিট হেত পারেব, অ আর িকছু নয়, এ েলার
বাইের নয়, কবল তাহেলই আমরা উপেরর মেতা কের পি ব াপার (switch case) ব বহার
করেত পারেবা। আবার চাইেল আমরা নীেচর মেতা কের সমতুল আেরকিট মেলখাংশও িলখেত
পারেবা, যখােন আমরা পি ব াপার ব বহার না কের যিদ নাহেল (if else) ব বহার করেবা। যিদ
না হেল ব বহার কের অব আেরা নানা ভােবই এিট করা স ব, এিট কবল একটা উদাহরণ।
i f ( nombor == −2 | | nombor == −1 )
cout << " r i n a t o k " << endl ;
e l s e i f ( nombor == 1 | | nombor == 2 )
cout << " dhonatok " << endl ;
e l s e / / i f ( nombor == 0 )
cout << " shunyo " << endl ;
িক আমােদর ন রিট যিদ উপেরর ওই পাঁচিট সংখ ার বাইের অিনিদ সংখ ক ন র েলার
একিট হয়, অথবা অেনক অেনক বশী সংখ েকর একিট হয়, তাহেল িঠক পি ব বহার কের আমরা
সামলােত পারেবা না। কারণ এ সব ে ব াপােরর সংখ া (number of cases) হেব অেনক
বশী বা অসংখ । আর একিট ব াপার হেলা পি েত ব াপার েলা মুলত মান সমান == হেল কী
১১৬
৭.২১. ব াপীয় ও ানীয় চলক (Global & Local Variables)
হেব তার ওপর িভি কের তরী, অ কান ধরেনর তুলনা যমন বড় >, ছাট < ইত ািদ ব বহার
করা যায় না। ফেল পি (switch) সাধারণত ব বহার করা হয় অ িকছু সংখ ক ও িনিদ
সংখ ক ব াপােরর ে , আর এ সব ে মেলখ পড়া সহজ হেয় যায়। অ া সকল ে
সাধারণত যিদ নাহেল (if else) ব বহার করা হয় কারণ যিদ নাহেলর সােথ য কান শত বা
সংেযাজক (connectives) &&, | | , ! ব বহার কের আেরা জিটল শত ব বহার করা যায়।
i f ( nombor < 0 )
cout << " r i n a t o k " << endl ;
e l s e i f ( nombor > 0 )
cout << " dhonatok " << endl ;
e l s e / / i f ( nombor == 0 )
cout << " shunyo " << endl ;
িফিরি ৭.৭: ানীয় ও ব াপীয় চলকের ব বহার (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 )
{
f l o a t bashardho ; // ানীয় চলক
f l o a t const two = 2 . 0 ; // ানীয় বক
১১৭
৭.২১. ব াপীয় ও ানীয় চলক (Global & Local Variables)
i n t main ( )
{
cout << cholok << endl ; / / ব াপীয় চলেকর মান 2
১১৮
৭.২১. ব াপীয় ও ানীয় চলক (Global & Local Variables)
অেনক সময় একিট ানীয় (local) চলক বা বেক নাম একিট ব াপীয় (global) চলক বা
বেকর নােমর সােথ িমেল যেত পাের। থম কথা িতিট চলক বা বেকর নাম পুেরা মেলখ
জুেড় একক (unique) হওয়া উিচৎ, িক িবধার িবচাের অেনক সময় সটা করা স ব হয় না।
এমতাব ায় কী কের বুঝেবা ব ব ত চলক বা বকিট ব াপীয় না ানীয়? উপেরর মেলখাংশ
(program segment) খয়াল কেরা, সখােন cholok নাম বারবার ব বহার কের অেন েলা
চলক ঘাষণা করা হেয়েছ, যার একিট সকল মহ ার (block) বাইের তাই ব াপীয় (global) আর
অ েলা কান না কান মহ ার িভতের তাই ানীয় চলক। এখন cholok নােমর চলকেক নানান
খােন ফলেন (output) দখােনা হেয়েছ। কথা হে নাম যেহতু একই, তা আমরা নামিট িদেয়
কখন কান চলকিটেক বুঝেবা, কখন কান মানই বা ফলেন দখেত পােবা?
খয়াল কের দেখা যখােন ব াপীয় চলকিট ঘাষনা করা হেয়েছ আর মান দওয়া হেয়েছ 2
তারপর থেক এিটর কাযকারীতা বলবৎ আেছ, মহ ার বাইের তা অব ই আেছ যমন একদম
নীেচ যখােন int kisuekta = cholok; লখা হেয়েছ। আবার মহ ার (block) িভতের া-
নীয় চলক ঘাষণার আেগ পয এিটর কাযকারীতা রেয়েছ ফেল আমরা ব াপীয় চলকিটর মানিটই
অথাৎ 2ই দখেত পােবা। তারপর মহ ার িভতের যখন একই নাম িদেয় একিট চলক ঘাষনা করা
হেয়েছ আর মান দওয়া হেয়েছ 3, তখন cholok নােমর সােথ ানীয় এই চলকিটর কাযকারীতা
বলবৎ হেয়েছ, আর তা জাির আেছ মহ া শষ হওয়া পয , তাছাড়া উপমহ ার িভতের একই না-
মর আেরকিট চলক ঘাষণার আেগ পয ও তা জাির আেছ। মেলখেত (program) টীকা েলা
(comment) খয়াল কেরা। কাথায় কান মান ফলেন আসেব তা িদেয় আমরা বুঝার চ া কর-
িছ, কাথায় কান চলকিটর কাযকারীতা বলবৎ আেছ। তাহেল কান নাম কান চলকিটেক বুঝাই,
সটার জ আমােদর দখেত হেব একই মহ ার িভতের ওই নােমর কান চলক আেছ িকনা? যিদ
থােক সই চলকিট কাযকর আেছ। আর একই মহ ার িভতের যিদ না থােক, তাহেল আমরা িঠক
বাইেরর মহ ািট দখেবা, সখােন একই নােম কান চলক আেছ িকনা? যিদ থােক সটা বলবৎ
হেব আর তাও না থাকেল তার িঠক বাইের আেরা কান মহ া আেছ িকনা তা দখেবা।
i n t nombor ;
c i n >> nombor ;
িসিপিপেত যিদ নাহেল (if else) লখার সময় যিদ { } বাঁকা ব নী যুগল ব বহার কের কান
মহ া (block) তরী করা হয়, তাহেল সই মহ ার িভতের ঘািষত য কান চলক বা বক
তা ানীয় চলক বা বক হেব। আমরা সটা আর আলাদা কের দখােত চাই না। তেব উপেরর
মেলখাংশ খয়াল কেরা if ( int vagshesh = nombor % 3) িলেখও আমরা vagshesh
নােম একিট চলক ঘাষণা কেরিছ। এই vagshesh নােমর চলকিটও একিট ানীয় চলক (local
variable) িহসােব পিরগিণত হয়, আর এটা কাযকর থােক কবল যখােন লখা হেয়েছ সখান
থেক হেয় ওই if else মই (ladder) বা অ াি (nesting) যত ণ শষ না হে তত ণ
পয , এর বাইের কান কাযকারীতা থাকেব না, ফেল ব বহার করেল িটবাতা পােব।
যিদ নাহেল (if else) এর ে ঘািষত ানীয় (local) চলকিটর মেতা আমরা পি ব া-
পােরর (switch cases) ে ও একই ভােব ানীয় চলক ঘাষণা করেত পাির। নীেচর মেল-
খাংেশ (program segment) খয়াল কেরা switch ( int vagshesh = nombor % 3)
িলেখ আমরা একিট ানীয় চলক vagshesh ঘাষণা কেরিছ। এই চলকিটর কাযকারীতাও কবল
১১৯
৭.২২. অ শীলনী সম া (Exercise Problems)
২. যিদ if এর সােথর শত িমথ া হেল সংি নাহেলেত else িগেয় আবার ও শেতর িবপরীত
শতিট সত িকনা পরী া করা দরকার নই। ব াখ া কেরা।
৩. যিদ নাহেল (if else) িদেয় মেলখ (program) িলখেত ছাড়ন (indentation) দয়া
পূণ কন? কার জ পূণ মা েষর জ নািক গণিনর (computer) জ ?
৫. যিদ নাহেল মইেত (if else ladder) শত েলা কী ভােব সাজােব, যিদ িচ ার িবধা িব-
বচনা কেরা অথবা মেলখেয়র দ তা িবেবচনা কেরা?
৬. অ াি যিদ নাহেল (nested if else) ও যিদ নাহেল মই (if else ladder) একটা থেক
আেরকিটেত পা র স ব, উদাহরণ সহ ব াখ া কেরা।
৭. ঝুল নাহেল (dangling else) সম ািট কী? এিটর সমাধান কী কী ভােব করা যেত
পাের, উদাহরণ িদেয় আেলাচনা কেরা।
১২০
৭.২২. অ শীলনী সম া (Exercise Problems)
১১. বুলক শেতর (boolean condition) আংিশক মূল ায়ন কী ও কী ভােব কাজ কের?
১২. একািধক ব াপীয় চলক (global variable ও ানীয় চলেকর (local variable) নাম
একই হেল কানটা কাযকর তা কী ভােব িনধািরত হয়?
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 ;
১২১
৭.২২. অ শীলনী সম া (Exercise Problems)
int n , k = 5 ;
n = ( 100 % k ? k + 1 : k − 1 ) ;
cout << "n = " << n << " k = " << k << 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 ;
৭. যিদ িভ িভ বার চালােনার সময় ০, ১৫, বা ৭ যাগান (input) দয়া হয় তাহেল নী-
চর মেলখাংেশর (program segment) ফলন (output) কান বাের কী হেব । কত
যাগান িদেল ফলেন "biroktikor!" আসেব?
১২২
৭.২২. অ শীলনী সম া (Exercise Problems)
int n ;
cout << "nombor koto : " ;
c i n >> n ;
i f ( n < 10)
cout << " 10 er choto . " << endl ;
else i f ( n > 5)
cout << " 5 er boro . " << endl ;
else
cout << " b i r o k t i k o r ! " << endl ;
৯. িতনিট সংখ া যাগান (input) িনেয় কানিট বড়, কানিট ছাট ফলেন (output) দখাও।
১০. িতনিট সংখ া যাগান (input) িনেয় তােদর মেধ মােঝরিট ফলেন (output) দখাও।
১১. িতনিট সংখ া যাগান (input) িনেয় তােদরেক উধ েম সািজেয় ফলন (output) দাও।
১২. গিণেত া ন র যাগান (input) িনেয় সটা থেক বণ মান (letter grade) ফলন
দাও। ধেরা ৯০ বা বশী হেল A, ৮০ বা বশী হেল B, ৭০ বা বশী হেল C, ৬০ বা বশী
হেল D, ৫০ বা বশী হেল E, আর তারও কম হেল F বণ মান পাওয়া যায়।
১৩. একিট ি মাি ক (two dimensional) িব র ানা দওয়া আেছ, িব িট চারিট চতু-
ভােগর (quadrant) িঠক কানিটেত পড়েব িনণয় কেরা।
১৫. তামােক -১০০ ও ১০০ এর মেধ িট সংখ া যাগান (input) িহসােব দওয়া হেব, তুিম
ওই িট সংখ া সহ তােদর মােঝর সকল সংখ ার যাগফল ফলেন (output) দখাও।
১২৩
৭.২২. অ শীলনী সম া (Exercise Problems)
পিরগণনা সমাধান: এবার আমরা পিরগণনার সম া েলার সমাধান দখেবা। মেন রাখেব সমা-
ধান েলা দয়া হেয়েছ তুিম যিদ একা ই িনেজ িনেজ করেত পারেছানা বেল মেন হয়, তখন কবল
একটু সাহায যােত পেত পােরা তাই। কােজই পারতপে সমাধান দখেব না।
১২৪
৭.২২. অ শীলনী সম া (Exercise Problems)
4 // আেরাপণ হেব 4
1 // মান আসেলই তা 4
1 // কােজই 3 এর বশী
0 // 4 এর সমান , কম তা নয়
0 // আেরাপন হেব 0
1 // মান 0 এর সমান , সত
0 // মান তা 0 , বশী তা নয়
0 // 0 হেলা িমথ া তাই ফলাফল িমথ া
1 // 4 যেহতু সত , তাই ফলাফল সত
1 // 0 িনেজ িমথ া তাই ! 0 সত
উপেরর মেলখাংেশ ছাড়ন দেখ মেন হয় যিদর শত সত হেল বা িমথ া হেল উভয় -
িঠক তােদর পেরর ই সািরেত থাকা িববৃিত েলা িনবািহত (executed) হেব। িক
একািধক িববৃিত যিদ িনবাহ করেত হয় সে ে আমােদর নীেচর মেলখাংেশর মেতা কের
বাঁকা ব নী িদেয় যৗিগক িববৃিত (compound statement) বািনেয় িনেত হেব। বাঁ-
কা ব নী না দয়ায় উপেরর মেলখিট সংকলন (compile) করেত গেল িট দখােব।
১২৫
৭.২২. অ শীলনী সম া (Exercise Problems)
িট টা হল সংি if সােপে else টা িঠক জায়গায় নাই। যিদ else টা cout << "
x boro" << endl; এর আেগ থােক তাহেল গঠনগত (syntactically) ভােব হয়,
িক তােত অব আমরা যা করেত চাই তা হেতা না।
i f ( x >= y )
{
j o g f o l += x ;
cout << " x boro " << endl ;
}
else
{
j o g f o l += y ;
cout << " y boro " << endl ;
}
১২৬
৭.২২. অ শীলনী সম া (Exercise Problems)
i f ( uparjon < 0 )
cout << " tomar dena aro barbe . " << endl ;
e l s e i f ( uparjon >= 0 && uparjon < 1200)
cout << " tumi d a r i d r o shimar niche . " << endl ;
e l s e i f ( uparjon >= 1200 && uparjon < 2500)
cout << " tumi k i n c h i t socchol aso . " << endl ;
e l s e i f ( uparjon >= 2500)
cout << " tumi j o t h e s t o socchol . " << endl ;
১২৭
৭.২২. অ শীলনী সম া (Exercise Problems)
i f ( uparjon < 0 )
cout << " tomar dena aro barbe . " << endl ;
e l s e i f ( uparjon < 1200) / / >= 0 দরকার নই
cout << " tumi d a r i d r o shimar niche . " << endl ;
e l s e i f ( uparjon < 2500) / / >= 1200 দরকার নই
cout << " tumi k i n c h i t socchol aso . " << endl ;
else / / >= 2500 দরকার নই
cout << " tumi j o t h e s t o socchol . " << endl ;
৭. যিদ িভ িভ বার চালােনার সময় ০, ১৫, বা ৭ যাগান (input) দয়া হয় তাহেল নী-
চর মেলখাংেশর (program segment) ফলন (output) কান বাের কী হেব । কত
যাগান িদেল ফলেন "biroktikor!" আসেব?
int n ;
cout << "nombor koto : " ;
c i n >> n ;
i f ( n < 10)
cout << " 10 er choto . " << endl ;
else i f ( n > 5)
cout << " 5 er boro . " << endl ;
else
cout << " b i r o k t i k o r ! " << endl ;
যাগান (input) িহসােব 0, 15, 7 িদেল, উপেরর মেলখাংশ কী ফলন (output) দেব
তা নীেচ ৩ ে দখােনা হেলা। এই মেলখাংশ n এর কান মােনর জ ই biroktikor
! ফলন িদেব না, িনয় ণ (control) কান অব ােতই সংি িববৃিতেত যােব না। তরাং
else cout << "biroktikor!" << endl; অংশটু পুেরাপুির অদরকারী আর স কা-
রেণ মুেছ দয়া যায়, তােত মেলখেয়র বিশে কান ভাব পড়েব না।
nombor koto : 0 nombor koto : 15 nombor koto : 7
10 er choto . 5 er boro . 10 er choto .
১২৮
৭.২২. অ শীলনী সম া (Exercise Problems)
১২৯
৭.২২. অ শীলনী সম া (Exercise Problems)
৯. িতনিট সংখ া যাগান (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 ; / / যাগান নাও
cout << " boro " << boro << " " ;
cout << " soto " << soto << endl ;
১৩০
৭.২২. অ শীলনী সম া (Exercise Problems)
১০. িতনিট সংখ া যাগান (input) িনেয় তােদর মেধ মােঝরিট ফলেন (output) দখাও।
উপেরর মেলখেত থেম a ও b তুলনা করা হেয়েছ। তারপর c তােদর বড়িটর চেয় বড়
িকনা, নাহেল ছাটিটর চেয় ছাট িকনা পরী া করা হেয়েছ, আর তাও না হেল সিট উভ-
য়র মাঝামািঝ। এভােব িতনিট সংখ ার ম জানা হেয় গেল মােঝরিট ফলেন (output)
দখােনা হেয়েছ। এিট অ াি (nesting) ও মইেয়র (ladder) চমৎকার উদাহরণ।
১১. িতনিট সংখ া যাগান (input) িনেয় তােদরেক উধ েম সািজেয় ফলন (output) দাও।
১৩১
৭.২২. অ শীলনী সম া (Exercise Problems)
উপেরর মেলখেত থেম a ও b তুলনা করা হেয়েছ। তারপর c তােদর বড়িটর চেয়
বড় িকনা, নাহেল ছাটিটর চেয় ছাট িকনা পরী া করা হেয়েছ, আর তাও না হেল সিট
উভেয়র মাঝামািঝ। এভােব িতনিট সংখ ার ম জানা হেয় গেল তােদর মােনর উধ েম
(ascending order) ফলেন (output) দখােনা হেয়েছ। এিট যিদ নাহেলর (if else)
অ াি (nesting) ও মইেয়র (ladder) এক সােথ ব বহােরর চমৎকার উদাহরণ।
১২. গিণেত া ন র যাগান (input) িনেয় সটা থেক বণ মান (letter grade) ফলন
দাও। ধেরা ৯০ বা বশী হেল A, ৮০ বা বশী হেল B, ৭০ বা বশী হেল C, ৬০ বা বশী
হেল D, ৫০ বা বশী হেল E, আর তারও কম হেল F বণ মান পাওয়া যায়।
উপেরর মেলখ পি ব াপার (switch cases) িদেয় করা স ব নয়, কারন এখােন >=
তুলনা ব বহার করেত হেব। পি ব াপার কবল সমান == তুলনায় ব বহার করা যায়।
১৩. একিট ি মাি ক (two dimensional) িব র ানা দওয়া আেছ, িব িট চারিট চতু-
ভােগর (quadrant) িঠক কানিটেত পড়েব িনণয় কেরা।
এই মেলখেত (program) আমরা কবল চতুভাগ (quadrant) িবেবচনা না কের বরং,
িব িট কান অে র ওপের িকনা, হেল ধনা ক িদেক না ঋণা ক িদেক, অথবা ানাংকের
মূল িব েত িকনা তাও িবেবচনা করেবা। য কান একিট দ িব র x বা y েটাই
আলাদা আলাদা ভােব ধনা ক বা ঋণা ক বা এই িতন রকম হেত পাের। কােজই
একসােথ িবেবচনা করেল আমরা মাট নয় রকম সমােবশ (combination) পােবা।
১৩২
৭.২২. অ শীলনী সম া (Exercise Problems)
i f ( x > 0)
i f ( y > 0)
cout << " prothom choturvag " << endl ;
else i f ( y < 0)
cout << " choturtho choturvag " << endl ;
else // y
cout << " dhonatok x okkher opor " << endl ;
else i f ( x < 0)
i f ( y > 0)
cout << " d i t i y o choturvag " << endl ;
else i f ( y < 0)
cout << " t r i t i y o choturvag " << endl ;
else
cout << " r i n a t o k x okkher opor " << endl ;
else // x
i f ( y > 0)
cout << " dhonatok y okkher opor " << endl ;
else i f ( y < 0)
cout << " r i n a t o k y okkher opor " << endl ;
else // y
cout << " sthananker mul bindu " << endl ;
i f ( n < 0)
cout << " p a l l a r b a i r e " << endl ;
e l s e i f ( n <= 9 ) / / এক অে র সংখ া
cout << n << endl ;
e l s e i f ( n <= 18) / / ই অে র সংখ া
cout << ( ( n−9 ) ∗ 11) << endl ;
else
cout << " p a l l a r b a i r e " << endl ;
১৫. তামােক -১০০ ও ১০০ এর মেধ িট সংখ া যাগান (input) িহসােব দওয়া হেব, তুিম
ওই িট সংখ া সহ তােদর মােঝর সকল সংখ ার যাগফল ফলেন (output) দখাও।
নীেচর সংি মেলখাংশ (program segment) দখােনা হেলা। য সংখ া িট যা-
গান (input) নয়া হেব, স েলা অব ই -১০০ ও ১০০ এর িভতের হেত হেব। আমরা
তাই আেগ পরী া কের দখেবা। যিদ n1 বা n2 য কানিট −100 এর ছাট বা 100 এর
১৩৩
৭.২২. অ শীলনী সম া (Exercise Problems)
বড় হয়, তাহেল িট বাতা (error message) দিখেয় িবফল হেয় িনয় ণ ফরত যােব।
খয়াল কেরা আমােদর িক শত েলােক অথবা | | িদেয় যু করেত হেব।
cout << " sonkhya d u t i koto ? " ; / / যাচনা
i n t n1 , n2 ; c i n >> n1 >> n2 ; / / যাগান
int s , n ; / / ( থম পদ + শষ পদ ) আর পদসংখ া
s = n1 + n2 ; // থম পদ + শষ পদ।
এবার আমরা জািন কান সমা র গমেণর সংখ া েলার যাগফল হেলা ( থম সংখ া +
শষ সংখ া) * পদসংখ া / 2। সংখ া েটা যাগান নয়ার সময় ব বহারকারী য কানিটেক
আেগ যাগান িদেত পাের, মােন কানটা বড় কানটা ছাট আমরা িনি ত থাকেবা না।
( থম সংখ া + শষ সংখ া) এই যাগফল s বর করেত এেত কান সম া হেব না, তেব
পদসংখ া n বর করেত গেল আমােদর জানেত হেব কানটা বড় কানটা ছাট। ধেরা ৭
আর ১৩ িনেজেদর সহ তােদর মেধ কয়টা সংখ া আেছ সটা বর করা যায় ১৩ - ৭ + ১
িহসাব কের, যখােন ১৩ হেলা বড় আর ৭ হেলা ছাট। তা n1 আর n2 এর িনেজেদর সহ
তােদর মােঝ মাট কয়িট সংখ া আেছ তা বর করেত আমােদর জানেত হেব কানিট বড়।
তা আমরা একিট যিদ নাহেল (if else) ব বহার কের দখেবা n1 > n2 িকনা, যিদ হয়
তাহেল পদসংখ া n1 − n2 + 1 আর যিদ না হয় তাহেল পদসংখ া হেব n2 − n1 + 1।
সবেশেষ যাগফল হেলা s ∗ n / 2 আমরা যটা ফলেন (output) দখােবা।
১৩৪
৭.২২. অ শীলনী সম া (Exercise Problems)
েলা ৪ িদেয় িবভাজ হয় না, এ েলার কানিটই অিধবষ নয়। বাঁকী ৫০০ িট সাল ৪ িদেয়
িবভাজ । এেদর মেধ য েলা ১০০ িদেয় িবভাজ নয় যমন ১৯৯৬ এমন ২০িট ছাড়া বাঁকী
৪৮০ িট অিধবষ। আর ওই ২০িট সােলর মেধ য ১৫িট ৪০০ িদেয় িবভাজ নয় স েলা
অিধবষ নয়, আর বাঁকী ৪িট সাল য েলা ৪০০ িদেয় িবভাজ স েলা অিধবষ।
i f ( bosor % 4 ! = 0 ) / / ৪ িদেয় িবভাজ নয়
cout << " odhiborsho noy " << endl ;
e l s e i f ( bosor % 100 ! = 0 ) / / ১০০ িদেয় িবভাজ নয়
cout << " odhiborsho hoy " << endl ;
e l s e i f ( bosor % 400 ! = 0 ) / / ৪০০ িদেয় িবভাজ নয়
cout << " odhiborsho noy " << endl ;
e l s e / / i f ( bosor % 400 = 0 ) ৪০০ িদেয় িবভাজ
cout << " odhiborsho hoy " << endl ;
ততম গিতর মেলখেয়র (program) জ য রকেমর সাল সবেচেয় বশী স েলা িন-
ণয় করেত সবেচেয় কম সংখ ক শত পরী ণ ব বহার করেত হেব। কােজই আমরা ১৫০০
সাল য েলা ৪ িদেয় িবভাজ নয় স েলােক থম শত পরী া কেরই বর করেত চাই-
বা। উপেরর েলখাংশ খয়াল কেরা, আমরা তাই কেরিছ। এরপের রেয়েছ য ৪৮০িট
বছর য েলা ৪ িদেয় িবভাজ িক ১০০ িদেয় িবভাজ নয়। আমরা এ েলােক ইবার শত
পরী া কের বর করেত চাই। একটা শত হে ৪ িদেয় িবভাজ নাহওয়া কােজই থম
শেতর else িহসােব থাকেব সটা, আেরকিট শত হেলা ১০০ িদেয় িবভাজ না হওয়া। উপ-
রর মেলখাংেশর যিদ নাহেল মইেত (if else ladder) দেখা else if িদেয় এটা করা
হেয়েছ। এরপর থােক ১৫ িট সাল য েলা ১০০ িদেয় িবভাজ িক ৪০০ িদেয় িবভাজ নয়
এই ১৫ িট সাল, এ েলা িনণয় করা হেয়েছ আেরকিট else if লািগেয় অথাৎ মাট িতনিট
শত পরী ণ শেষ। আর সবেশেষ ৪০০ িদেয় িবভাজ সই সাল েলা এেসেছ সবেশেষর
else িদেয়, এ েলার জ িতনিট শত পরী ণই লেগেছ, কারণ শেষর শত িমথ া হেলই
তা এ েলা িনণীত হেব। তাহেল মাট শত পরী া লাগেলা কত েলা? ১৫০০ * ১ + ৪৮০
* ২ + ১৫ * ৩ + ৫ * ৩ = ২৫২০ িট। তুিম আেরা নানান ভােব চ া কের দখেত পােরা,
এর চেয় কম শত পরী া কের করেত পােরা িকনা! পারেব না!
i f ( bosor % 4 ! = 0 | |
( bosor % 100 == 0 && bosor % 400 ! = 0 ) )
cout << " odhiborsho noy " << endl ;
else
cout << " odhiborsho hoy " << endl ;
একই মেলখ আমরা যিদ নাহেল মই (if else ladder) ব বহার না কের িঠক উপেরর
মেলখাংেশর মেতা বুলক সংেযাজক (boolean connectives) ব বহার কের করেত
পাির। বুলক সংেযাজেকর আংিশক মূল ায়েনর (partial evaluation) মেন আেছ? অথ-
বা | | ে য কান একিট উপাদান (operand) সিত হেলই অ িট মূল ায়ন ছাড়াই
আমরা ফলাফল সত বেল ধের িনেত পাির। আর && এর ে য কান একিট উপাদান
(operand) িমথ া হেলই ফলাফল িমথ া বেল ধের নয়া যায়। কান সাল অিধবষ নয়
যখন সালিট ৪ ারা িবভাজ নয় অথবা ১০০ ারা িবভাজ হেলও ৪০০ ারা িবভাজ নয়
তখন। যিদর সােথ শত িহসােব সিটই লাগােনা হেয়েছ দেখা। অ িদেক কান সাল অিধ-
বষ হেত গেল | | এর ফলাফল িমথ া হেত হেব, তারমােন বাম ও ডােনর উভয় উপাদান
১৩৫
৭.২২. অ শীলনী সম া (Exercise Problems)
(operand) িমথ া হেত হেব অথাৎ bosor % 4 == 0 এবং (bosor % 100 == 0 &
& bosor % 400 != 0) িমথ া হেত হেব। এখােন bosor % 4 == 0 িমথ া হওয়া মােন
বছরিট ৪ ারা িবভাজ হওয়া আর (bosor % 100 == 0 && bosor % 400 != 0)
িমথ া হেত গেল && এর পােশর যেকান একিট িমথ া হেলই হেব। তা (bosor %
100 == 0 িমথ া হওয়া মােন বছরিট ১০০ ারা িবভাজ না হওয়া আর bosor % 400 !
= 0 িমথ া হওয়া মােন ৪০০ িদেয় িবভাজ হওয়া।
১৭. বাংলা বছেরর কততম মাস তা যাগান (input) িনেয় সই মােসর নাম ও ওই মােস কত িদন
তা ফলেন (output) দখাও। একােজ পি ব াপার (switch cases) ব বহার কেরা।
switch ( mash )
{
case 1 : cout << " boishakh 31 " << endl ; break ;
case 2 : cout << " j o i s t h o 31 " << endl ; break ;
case 3 : cout << " ashar 31 " << endl ; break ;
case 4 : cout << " shrabon 31 " << endl ; break ;
case 5 : cout << " vadro 31 " << endl ; break ;
case 6 : cout << " a r s h i n 30 " << endl ; break ;
case 7 : cout << " k a r t i k 30 " << endl ; break ;
case 8 : cout << " ogrohayon 30 " << endl ; break ;
case 9 : cout << " poush 30 " << endl ; break ;
case 10 : cout << "magh 30 " << endl ; break ;
case 11 : cout << " falgun 30 " << endl ; break ;
case 12 : cout << " c h o i t r o 30 " << endl ; break ;
d e f a u l t : cout << " ojana mash" << endl ; break ;
}
১৮. কতটা বােজ সই সময় ঘ টায় যাগান (input) িনেয় মাঝরাত (০-২), ভাত (৩-৬), সকাল
(৭-১১), পুর (১২-১৪), িবকাল (১৫-১৭), স া (১৮-১৯), রাত (২০-২৪) ফলেন দ-
খাও। একােজ পি ব াপার (switch cases) ব বহার কেরা।
i n t somoy ; c i n >> somoy ; / / যাচনা করেত পােরা
switch ( somoy )
{
case 0 : case 1 : case 2 :
cout << " majhrat " << endl ; break ;
case 3 : case 4 : case 5 : case 6 :
cout << " provat " << endl ; break ;
case 7 : case 8 : case 9 : case 10 : case 11 :
cout << " shokal " << endl ; break ;
১৩৬
৭.২২. অ শীলনী সম া (Exercise Problems)
১৯. এমন একিট মেলখ (program) িলেখা যিট ১-৫ পয ম অ যায়ী পাঁচটা কামল
পানীেয়র (পািন, কাক, াইট, ফানটা, পপিস) নােমর তািলকা দখােব, তারপর -
িমক ন র যাগান (input) িনেয় কামল পানীয়িটর নাম ফলেন (output) দখােব। আর
িমক ন রিট যিদ ১-৫ এর বাইের হয়, তাহেল স সং া একিট িট বাতা (error
message) দখােব। তুিম এই মেলখিট একবার পি ব াপার (switch cases) ব -
বহার কের আবার যিদ নাহেল (if else) ব বহার কের কেরা।
cout << " t a l i k a " << endl ;
cout << " 1 pani " << endl ;
cout << " 2 coke " << endl ;
cout << " 3 s p r i t e " << endl ;
cout << " 4 fanta " << endl ;
cout << " 5 pepsi " << endl ;
cout << endl ;
১৩৭
৭.২২. অ শীলনী সম া (Exercise Problems)
i f ( posondo == 1 )
cout << " pani " << endl ;
e l s e i f ( posondo == 2 )
cout << " coke " << endl ;
e l s e i f ( posondo == 3 )
cout << " s p r i t e " << endl ;
e l s e i f ( posondo == 4 )
cout << " fanta " << endl ;
e l s e i f ( posondo == 5 )
cout << " pepsi " << endl ;
else
cout << " ojana " << endl ;
২০. একিট সংখ ার পুরক সংখ া িনণয় কেরা। সংখ াট এক অে র হেল তার পুরক সংখ ৯ এর
সােথ িবেয়াগফল, ই অে র হেল ৯৯ এর সােথ িবেয়াগফল, িতন অে র হেল ৯৯৯ এর
সােথ িবেয়াগফল। িতেনর চেয় বশী অে র সংখ া যাগান (input) দওয়া হেব না।
i n t nombor , purok ;
c i n >> nombor ;
২১. এমন একিট মেলখ (program) িলেখা যটা ৫ জন লাক যােদর িমক ১-৫ তােদর ক
কতটা কের পেরাটা খেয়েছ যাগান (input) িনেব। মেলখিট তারপর একজেন সেবা
কয়টা পেরাটা খেয়েছ সটা ফলেন (output) দখােব। আর কান লাক সেবা সংখ ক
পেরাটা খেয়েছ মেলখিট সটাও দখােব, তেব সেবা পেরাটা খাওয়া একািধক ব ি
থাকেল থমজেনর িমক ন র হেলই চলেব, পেরর জনেদর দরকার নাই।
আমরা পাঁচজন লােকর জ িবধােথ পাঁচিট চলক িনেবা p1, p2, p3, p4, p5। তা-
রপর যথাযথ ভােব যাগান যাচনা (input prompt) কের কান লাক কতিট পেরাটা
খেয়েছ সটা যাগান (input) িনেবা। তারপর আমােদর আেরা িট চলক লাগেব: একিট
১৩৮
৭.২২. অ শীলনী সম া (Exercise Problems)
i n t sorboccho = p1 , kekheyese = 1 ;
i f ( sorboccho < p2 )
{ sorboccho = p2 ; kekheyese = 2 ; }
i f ( sorboccho < p3 )
{ sorboccho = p3 ; kekheyese = 3 ; }
i f ( sorboccho < p4 )
{ sorboccho = p4 ; kekheyese = 4 ; }
i f ( sorboccho < p5 )
{ sorboccho = p5 ; kekheyese = 5 ; }
খয়াল কেরা আমরা > ব বহার কেরিছ >= ব বহার কির নাই। এর কারণ এ পয সেবা
যতিট খাওয়া হেয়েছ তার সমান কউ যিদ পেরর কউ খেয়ও থােক, আমরা িক সই লা-
কিটেক ফলেন (output) দখােত চাইনা, বরং আেগর জনেকই দখােত চাই। তুিম যিদ
সেবা পেরাটা খেয়েছ এরকম কেয়ক জন থাকেল তােদর মেধ র শেষর জনেক ফল-
ন (output) দখােত চাও, তাহেল < বদেল <= কের িদেব। আর একিট ব াপার হেলা
অেনক সময় sorboccho আর kekheyese চলক িটর আিদমান ১মজেনর পেরাটা খা-
ওয়া িবেবচনা কের না িদেয় নীেচর মেতা কের বরং আমরা একটা ছাট সংখ া ধের নই,
তারপর ২য়, ৩য়, ৪থ, ৫ম লােকর মেতা ১ম জেনর জ ও একই রকম যিদ নাহেল ব বহার
কির। এেত সব লােকর জ িচ া করাটা একই রকম হয়।
/ / সেবা একটা ছাট মান , ক খেয়েছ সটা জািননা
i n t sorboccho = 0 , kekheyese = 0 ;
১৩৯
৭.২২. অ শীলনী সম া (Exercise Problems)
২২. একজন লাক াভািবক িনয়ম অ যায়ী স ােহ ৪০ ঘ টা কাজ কের, ৪০ ঘ টার বশী কাজ
করেল অিতির সময়টু র জ াভািবক িনয়েমর চেয় ১.৫ ণ মজুির পায়। কান এক
স ােহ লাকিট কত ঘ টা কাজ কেরেছ আর াভািবক িনয়েম ঘ টা িত মজুির কত তা
যাগান (input) িনেয় ওই স ােহ তার মাট মজুির কত তা ফলেন (output) দখাও।
f l o a t ghontaProti ; / / ঘ টা িত কত হার
f l o a t kotoGhonta ; / / কত ঘ টা কাজ
f l o a t motMojuri ; / / মাট মজুির কত
২৩. ধেরা তুিম চার টুকেরা কাগজ িনেয়েছা। তামার ১ম টুকেরােত লখা আেছ ১, ৩, ৫, ৭, ৯,
১১, ১৩, ২য় টুকেরােত আেছ ২, ৩, ৬, ৭, ১০, ১১, ১৪, ১৫, ৩য় টুকেরােত আেছ ৪, ৫,
৬, ৭, ১২, ১৩, ১৪, ১৫, ৪থ টুকেরােত আেছ ৮, ৯, ১০, ১১, ১২, ১৩, ১৪, ১৫। তামার
১৪০
৭.২২. অ শীলনী সম া (Exercise Problems)
মেলখ (program) ব বহারকারী মেন মেন একিট সংখ া ধরেব, আর সিট ১ম, ২য়,
৩য়, ৪থ টুকেরার কান কানিটেত আেছ যাগান (input) িদেব, তারপর তামার মেলখ
ব বহারকারী মেন মেন য সংখ ািট ধেরেছ সিট ফলেন (output) দখােব। এিট খুব সহজ
একিট ব াপার। য য টুকেরােত সংখ ািট আেছ ওই টুকেরা েলার থম সংখ া েলা যাগ
করেলই ব বহারকারীর সংখ ািট পাওয়া যােব। যমন ব বহারকারীর সংখ ািট যিদ ১, ৩, ৪
ন র টুকেরােত থােক তাহেল সংখ ািট ১ + ৪ + ৮ = ১৩।
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 ;
১৪১
৭.২৩. গণনা পিরভাষা (Computing Terminologies)
এরপর দেখা িতিট if পরী া করেছ সংখ ািট ওই তােস আেছ িকনা, অথাৎ ব বহারকা-
রীর দয়া উ র সত িকনা, সত হেল ওই তােসর থম সংখ ািট তা আমরা জািনই, সটা
sonkhya চলেকর সােথ যাগ কের দয়া হেয়েছ। পিরেশেষ ফলন (output) ব বহার-
কারীর মেন মেন ধের নয়া সংখ ািট দখােনা হেয়েছ।
১৪২