সাদনায়ঃ যাবােয়র আহেমদ খান কি aউটার...
TRANSCRIPT
- 0 -
বাংলা ভাষায় রিচত িস া ািমং স িকত ই-বক
স াদনায়ঃ যাবােয়র আহেমদ খান
কি উটার িব ান ও েকৗশলী িবভাগ
এিশয়ান ইউিনভািসিট অফ বাংলােদশ
- 1 -
বাংলা ভাষায় িস া ািমং িনেয় খব বিশ বই রিচত হয়িন িক এর রেয়েছ ব াপক চািহদা এই
চািহদার কথা িবেবচনা কের এই বইিট রিচত হল এই ই-বক িট তােদর জন যারা এেকবাের
থম থেক া ািমং করেত চায় এই বইেয়র অধ ায় েলা টকিটউনস
(httpwwwtechtunescombd) ও httpwwwacmsolverorg থেক সংগহীত িকছটা
সংেশাধন পিরমাজন ও সিবন াস কের বইিট রিচত হল বািণিজ ক উে েশ নয় া ািমং
শখা সহজ করাই এই বইিটর ল কান কার যাগােযাগ করেত ই- মইল ক ন এই
িঠকানায় zobayermcgmailcom অথবা িভিজট ক ন httpmuktobanglaweeblycom এই
ওেয়বসাইেট
যাবােয়র আহেমদ খান
উ রা ঢাকা ২৮ জানয়ারী ২০১২
- 2 -
অধ ায় ১
া াম ও া ািমং িক
কি উটােরর মাধ েম কান সমস া সমাধােনর জন েয়াজনীয় িনেদশমালার সমি েক া াম (program) বলা হয় আর এই ধারা বণনা বা া াম রচনার প িত বা কৗশলেক া াম প িত বা া ািমং (programming) বলা হয় অন কথায় কান সমস া অ সমেয় এবং সহেজ সমাধােনর উে েশ স াদােনর অন েম িনেদশাবলী সাজােনার কৗশলেক া ািমং বলা হয়
া ািমং ভাষা িক
কি উটােরর মাধ েম কান সমস া সমাধান তথা া াম রচনার জন ব ব ত শ বণ অংক
িচ ভিতর সম েনয় গিঠত রীিতনীিতেক া ািমং ভাষা (Programming Language) বলা হয় িবিভ ধরেনর া াম রচনার জন িবিভ ধরেনর া াম ভাষা ব ব ত হয় পিথবীেত কািট কািট মানষ অেনক ধরেনর ভাষা ব বহার কের িক কি উটার এই সব ভাষা বােঝ না তাই
কি উটার তার িনজ বাধগম ভাষায় িনেদশ দােনর লে িনিদ িনয়ম অনযায়ী শ বন সংেকত এবং এ েলার িবন ােসর িনিদ িনয়ম িমিলেয় একসে বলা হয় া ািমং ভাষা
জনি য় কেয়কিট া াম ভাষা
উ তর ভাষায় া াম লখার জন ইংেরজী শ ও ইংেরজী বাক ব ব ত হয়
িনেচ কেয়কিট া াম ভাষার নাম দওয়া হল
বিসকঃ- বিসক কি উটার া ােমর একিট জনি য় ভাষা বিসক (BASIC) শ িট
Beginnerrsquos All Purpose Symbolic Instruction Codes ndash এর সংি প ১৯৬৪ সােল য রাে র ডাটমাউথ কেলেজর ইজন অধ াপক জন িজ কিমিন এবং টমাস কাটজ ছা -ছা ীেদর সহেজ
া াম িশখােনার উে েশ এ ভাষা উ াবন কেরন ১৯৭৮ সােল আেমিরকান ন াশনাল া াড বিসেকর একিট া াড িত প িনধারন কের যার ফেল এ ভাষার ততর সার ঘেট
িকউেবিসকঃ- িকউেবিসক বিসেকর একিট উপভাষা এিট উ াবন কেরেছ য রাে র
মাইে াসফট কা ািন QBASIC শ িট এেসেছ QUICK BASIC থেক এ ভাষার া ােম লাইন ন র িদেত হয় না িকউেবিসেক মন ব বহার কের কাজ করা যায় মনেত া াম স াদন ভল িনণয় ও ি করণ একসােথ একািধক ফাইল ও উইে া ব বহার করা যায় এছাড়াও িকউেবিসেকর অেনক সিবধা আেছ
- 3 -
িভজয়াল বিসকঃ- িভজয়াল বিসক একিট া াম ডেভলপেম প ােকজ বতমান
িকউেবিসেকর পিরবেত িভজয়াল বিসেকর ব বহার সাবজনীন ত এবং সহজ া াম উ য়েনর সিবধা থাকায় দ ও অদ সব নীর া ামারেদর কােছ এই ভাষা বশ জনি য়
এ লগলঃ- এ ালগল (ALGOL)- এলগিরদিমক ল াং েয়জ (Algorithmic Language) সংি প ১৯৫৮ সােল সব কি উটার ব বহারেযাগ সাবজনীন ভাষা উ াবেনর চ ার ফেল ইউেরােপ এ ভাষার উ ব হয় ইউেরােপর বাইের এর িব ার তমন নই
ফর ানঃ- ইংেরজী FROTRAN শ িটর পণ প Formula Translation গািণিতক উপােয় ব ািনক ও েকৗশিলক সমস া সমাধােনর জন এ ভাষা অত উপেযাগী ১৯৫৭ সােল আইিবএম কা ানী এ ভাষা চাল কের অেনক েলা ভাসেনর মাধ েম িববিতত হেয ফর ান
একিট শি শালী উ তর ভাষা িহসােব িবকিশত হেয়েছ
কাবলঃ- ইংেরজী COBOL শ িটর পণ প Common Business Oriented Language িহসাব ও
িহসােবর খিতয়ান বতেনর খিতয়ান বতেনর িহসাব এবং এ ধরেনর প িতগত িহসা সংর েণর জন কাবল চাল হেয়েছ ১৯৮৫ সােল য রাে র িতর া িবভাগ বািণিজ ক েয়ােগর উপেযাগী সাবজনীন ভাষা উ াবেনর জেন কমিপউটার তকারী ব বহারকারী ও িব িবদ ালেয়র িশ কেদর সমে েয় একিট কিমিট গঠন কের এ কিমিটর উ ািবত ভাষা কাবল
া াড িহসােব িনধািরত হেয়েছ
প াে লঃ- প াে ল সাধারেনর ব বহার উপেযাগী উ তর ভাষা এলগল-৬০ ভাষা অবল েন এ ভাষা উ াবন করা হয় গত শতাি র স র দশেকর িদেক সইজারল াে র জিরেখর টকিনক াল ইউিনভারিসিটেত িনকলাস ইরথ এ ভাষা উ াবন কেরন বতমােন প াে ল অত জনি য়
উ তর ভাষা িহেসেব পিরিচত
িসঃ- ডিনস িরিচ ১৯৭০ সােল বল ল াবেরটিরেত িস ভাষার উ াবন কেরন থেম িপিডিপ-১১ এ ইউিন অপােরিটং িসে েমর িনয় েন এ ভাষার েয়াগ হেয়িছল বতমােন অত
শি শালী এবং জনি য় উ তর ভাষা িহেসেব িস পিরিচত বতমােন িবিভ ধরেনর কমিপউটাের এবং িবিভ অপােরিটং িসে েমর িনয় েন িস ব াপকভােব ব ব ত হয়
িস++- িস++ একিট ব ল ব ব ত অবেজ অিরেযে ড া াম ভাষা ১৯৮০ সােল য রাে র এিট এ িট বল ল াবেরটিরেত জন াউস প এ ভাষা উ াবন কেরন থেম এর নাম িছল িস উইথ াস পরবতীেত আরও নতন নতন িকছ বিশ ও সিবধা যাগ কের ১৯৮৩ সােল নাম
করন করা হয় িস ++ িস++ এ িস এর সকল বিশ ও সিবধা সহ অিতির আরও িকছ সিবধা আেছ এজন িস++ ক িস এর বিধত সং রন বা সপারেসট বলা হয়
- 4 -
জাভাঃ- জাভা একিট শি শালী আধিনক া াম ভাষা ১৯৯১ সােলর শেষর িদেক জমস
গসিলং এর নতে একদল িবেশষ কতক জাভা ভাষার সচনা কের থেম এর নাম িছল ওক পরবতীেত ১৯৯৪ সােল এর নাম করন করা হয় জাভা জাভা অেনকটা িস++ এর মত তেব িস++ এর তলনায় এ ভাষা সহজ িনরাপদ াটফম অিনভরশীল ই ারেনেটর জন ব বহািরক সফটওয়ার উ য়েন এ ভাষার ব বহার অতলনীয়
দাম কেম আসার ফেল কমিপউটােরর েয়াগ ও ব বহার মাগত বাড়েছ া াম রচনার জন সাধারনত উ তর ভাষা জনি য় কমিপউটার সর ােমর দাম কমেলও া াম রচনা ও া াম পিরচালনার ব য় মাগত বাড়েছ বতমান যগ িডিজটাল যগ তাই িডিজটাল বাংলােদশ গড়েত হেল কমিপউটােরর ব বহার এবং এর া াম ভাষার শখার কান িবক নই
--------------------------------------------------------------------------------------------------------------------
- 5 -
অধ ায় ২
কন িস িশখেবন
িস হল অপােরিটং িসে ম লখার জন সবেচেয় বশী ব ব ত া ািমং ভাষা ইউিন িস ভাষায় লখা থম অপােরিটং িসে ম উ রকােলর মাইে াসফট উইে াস ম াক ও এস এ
িলনা সব েলাই িস ািমং ভাষায় লখা িস ধ অপােরিটং িসে েমর ভাষাই নয়
বতমানকােল জনি য় ায় সকল া িমং ভাষার রণা িস া িমং ভাষা কতপে পাল
িপএইচিপ পাইথন িব েত কটা ভাষাই িস ত লখা ধ ন আপিন িনশ ইটািলয়ান বা পতিগজ ভাষা িশখেত চাে ন তার আেগ ল ািটন শখা িক আপনার কােজ আসেব
নািক না যেহত ল ািটন ভাষা থেকই এসকল ভাষার উৎপি িস শখা আপনােক িস ভাষায় তির করা পেরা া িমং ভাষার পিরবারেক বঝেত সাহায করেব ndash আপনােক দেব াধীনতা মািটন িরিটর তিরকত BCPL থেক াগািমং ভাষা খেক B াগািমং ভাষা ডেভেলাপ করা হয় এবং সখান থেক ১৯৭০ সােল আেমিরকার বল ল াবেরটিরেত ডিনস িরিট নামক াগামার এই C ভাষািট ডেভেলাপ কেরন ১৯৮৩ সােল আেমিরকার National Standard Ins স সমেয়
চিলত Unix C এর জেন মান (Standard) িনধারণ কের দন C াগিমং এর ে অেনক েলা পথ রেযেছ যমন ANSI C Borland C Turbo C Microsoft C etc এ েলার মেধ ১ম িট হেলা Standard এবং বািকরা এই Standard অনসরণ কের আবার এরা েত েক এক একিট Compiler Compiler হেলা এমন একিট াগাম যা Source Code ক Object Code এ Convert কের বশিকছ ধােপ এই Compile স হয়-
1 Source Code 2 Syntax Analyzer 3 Semantic Analyzer 4 Intermediate Code Generator 5 Code Optimizer 6 Code Generator 7 Object Code
কন িস এবং কন এেস িল ভাষা নয়
এেস িল ভাষা আপনােক গিত এবং িসে েমর উপর সেবা িনয় ণ দান করেলও বহনেযাগ নয় িস িঠক এই যায়গাটােতই আলাদা এিট যমন িসে েমর উপর যেথ িনয় ন দয় তমিন বহনেযাগ ও
- 6 -
বইঃ
এই বইটা ছাড়াও কাম ামান িনটেনর বাংলা একটা বই আেছ ldquoসবার জন িসrdquo তািমম শাহিরয়ার সবীন এর ও একিট বাংলা বই আেছ আর ইংেরিজর জন হেল ldquoherbert schildtrdquo এর ldquoteach yourself crdquo িস শখার জন খব ভাল একটা বই C াগািমং িশখেত আ হী নতন
ব বহারকারীেদর জেন দরকারী বইেয়র তািলকাসমহ
01 Schaumsrsquos Outline of Programming wtih C By Byron Gotteried 02 Teach Yourself C By Herbert Schildt 03 Turbo CC++ The Complete Reference By Herbert Schildt
Schaums Series আেরকটা িকনেত পােরন Herbert Schildt Teach Yourself C হাবাড িশে র বইেয় িত চ া াের অনশীলনীেত চর এ ারসাইজ আেছ স েলার সমাধানও দওয়া আেছ বইেয়র পছেন এিট খবই সাহায করেব আপনােক
এছাড়া httpacmuvaesproblemset চ া ক ন উদাহরণ আর অনশীলনী াকিটস কের িশেখ ফলন িস
--------------------------------------------------------------------------------------
- 7 -
অধ ায় ৩
সব া ামই িকছ না িকছ া াম িনেয় কাজ কের া ােম ব বহােরর জন ডটােক থেম মমিরেত সংর ণ করা হয় এবং েয়াজেন মমির থেক ডটা উে ালন কের কােজ লাগােনা
হয় িন পযােয়র ভাষায় মমিরেত ডটা রাখার জন সরাসির িবট বাইট এবং মমির এ াে স ব বহার করা হয় যা বড় বড় া ােমর জন অত জিটল এবং ক কর কারণ ল ল এ াে েসর মেধ কখন কান এ াে েস কান ডটা রাখা হল তা মেন রাখা অস ব এই অসিবধা দর করার জন এবং া ামেক সহজ করার লে উ পযােয়র ভাষায় িবট বাইট এর পিরবেত ভিরেয়বল ব বহার করা হয়
ভিরেয়বলঃ ভিরেয়বল হল মমিরর লােকশেনর নাম বা িঠকানা া ােম যখন কান ডটা িনেয় কাজ করা হয় াথিমক ভােব স েলা কমিপউটােরর যােম অব ান কের পরবতী সমেয়
স েলা পন ার বা পনব বহােরর জন ঐ নাম বা িঠকানা জানা েয়াজন হয় সতরাং া ােম ডটা িনেয় কাজ করার সময় িতিট ডটার জন একিট ভিরেয়বল ব বহার করােত হয় ভিরেয়বল ব বহার না কের ও া ােম িবিভ ধরেনর ডটা যমন ক াের ার ি ং পনসংখ া
ভ াংশ তথা দশিমক সংখ া সােয়ি িফকসংখ া তখা এ েপােনি য়াল সংখ া িনেয় কাজ করা যায়
ডটা টাইপ ও মিডফায়ারঃ িস ভাষায় ভিরেয়বল ব বহার কের ডটা সংর েণর জন ভিরেয়বল ঘাষণার সময় ডটার ধরন অনযায়ী উপয ডটা টাইপ ও ঘাষণা করেত হয় এ প ব ব ত
চারিট মৗিলক বা িব ইন ডটা টাইপ হলঃ char integer float double চারিট মৗিলক ডটা এর জন ঘািষত ভিরেয়বেলর জন সংরি ত মমির পিরসর ডটার কিত এবং ধারণ
মতার একটা সীমাব তা রেয়েছ যমনঃ একিট char টাইপ ভিরেয়বেলর জন ৮ িবট বা ১ বাইট জায়গা সংর ণ কের যােত ০ থেক ১২৭ মানিবিশ মাট ১২৮িট ব াের ােরর য কান একিট মান রাথা যায়
এছাড়াও িস ত আরও ৪িট মিডফায়ার আেছ
স েলা হলঃ- singed unsigned short long
সাধারনত char টাইপ ভিরেয়বেলর জন singed ও unsigned মিডফায়ার এবং টাইপ
ভিরেয়বেলর জন singed unsigned short ও long মিডফায়ার float ও double টাইপ ভিরেয়বেলর জন short এবং long মিডফায়ার ব ব ত হয়
এসব ডটার িবট ও মােনর র জানা খব জ রী
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 1 -
বাংলা ভাষায় িস া ািমং িনেয় খব বিশ বই রিচত হয়িন িক এর রেয়েছ ব াপক চািহদা এই
চািহদার কথা িবেবচনা কের এই বইিট রিচত হল এই ই-বক িট তােদর জন যারা এেকবাের
থম থেক া ািমং করেত চায় এই বইেয়র অধ ায় েলা টকিটউনস
(httpwwwtechtunescombd) ও httpwwwacmsolverorg থেক সংগহীত িকছটা
সংেশাধন পিরমাজন ও সিবন াস কের বইিট রিচত হল বািণিজ ক উে েশ নয় া ািমং
শখা সহজ করাই এই বইিটর ল কান কার যাগােযাগ করেত ই- মইল ক ন এই
িঠকানায় zobayermcgmailcom অথবা িভিজট ক ন httpmuktobanglaweeblycom এই
ওেয়বসাইেট
যাবােয়র আহেমদ খান
উ রা ঢাকা ২৮ জানয়ারী ২০১২
- 2 -
অধ ায় ১
া াম ও া ািমং িক
কি উটােরর মাধ েম কান সমস া সমাধােনর জন েয়াজনীয় িনেদশমালার সমি েক া াম (program) বলা হয় আর এই ধারা বণনা বা া াম রচনার প িত বা কৗশলেক া াম প িত বা া ািমং (programming) বলা হয় অন কথায় কান সমস া অ সমেয় এবং সহেজ সমাধােনর উে েশ স াদােনর অন েম িনেদশাবলী সাজােনার কৗশলেক া ািমং বলা হয়
া ািমং ভাষা িক
কি উটােরর মাধ েম কান সমস া সমাধান তথা া াম রচনার জন ব ব ত শ বণ অংক
িচ ভিতর সম েনয় গিঠত রীিতনীিতেক া ািমং ভাষা (Programming Language) বলা হয় িবিভ ধরেনর া াম রচনার জন িবিভ ধরেনর া াম ভাষা ব ব ত হয় পিথবীেত কািট কািট মানষ অেনক ধরেনর ভাষা ব বহার কের িক কি উটার এই সব ভাষা বােঝ না তাই
কি উটার তার িনজ বাধগম ভাষায় িনেদশ দােনর লে িনিদ িনয়ম অনযায়ী শ বন সংেকত এবং এ েলার িবন ােসর িনিদ িনয়ম িমিলেয় একসে বলা হয় া ািমং ভাষা
জনি য় কেয়কিট া াম ভাষা
উ তর ভাষায় া াম লখার জন ইংেরজী শ ও ইংেরজী বাক ব ব ত হয়
িনেচ কেয়কিট া াম ভাষার নাম দওয়া হল
বিসকঃ- বিসক কি উটার া ােমর একিট জনি য় ভাষা বিসক (BASIC) শ িট
Beginnerrsquos All Purpose Symbolic Instruction Codes ndash এর সংি প ১৯৬৪ সােল য রাে র ডাটমাউথ কেলেজর ইজন অধ াপক জন িজ কিমিন এবং টমাস কাটজ ছা -ছা ীেদর সহেজ
া াম িশখােনার উে েশ এ ভাষা উ াবন কেরন ১৯৭৮ সােল আেমিরকান ন াশনাল া াড বিসেকর একিট া াড িত প িনধারন কের যার ফেল এ ভাষার ততর সার ঘেট
িকউেবিসকঃ- িকউেবিসক বিসেকর একিট উপভাষা এিট উ াবন কেরেছ য রাে র
মাইে াসফট কা ািন QBASIC শ িট এেসেছ QUICK BASIC থেক এ ভাষার া ােম লাইন ন র িদেত হয় না িকউেবিসেক মন ব বহার কের কাজ করা যায় মনেত া াম স াদন ভল িনণয় ও ি করণ একসােথ একািধক ফাইল ও উইে া ব বহার করা যায় এছাড়াও িকউেবিসেকর অেনক সিবধা আেছ
- 3 -
িভজয়াল বিসকঃ- িভজয়াল বিসক একিট া াম ডেভলপেম প ােকজ বতমান
িকউেবিসেকর পিরবেত িভজয়াল বিসেকর ব বহার সাবজনীন ত এবং সহজ া াম উ য়েনর সিবধা থাকায় দ ও অদ সব নীর া ামারেদর কােছ এই ভাষা বশ জনি য়
এ লগলঃ- এ ালগল (ALGOL)- এলগিরদিমক ল াং েয়জ (Algorithmic Language) সংি প ১৯৫৮ সােল সব কি উটার ব বহারেযাগ সাবজনীন ভাষা উ াবেনর চ ার ফেল ইউেরােপ এ ভাষার উ ব হয় ইউেরােপর বাইের এর িব ার তমন নই
ফর ানঃ- ইংেরজী FROTRAN শ িটর পণ প Formula Translation গািণিতক উপােয় ব ািনক ও েকৗশিলক সমস া সমাধােনর জন এ ভাষা অত উপেযাগী ১৯৫৭ সােল আইিবএম কা ানী এ ভাষা চাল কের অেনক েলা ভাসেনর মাধ েম িববিতত হেয ফর ান
একিট শি শালী উ তর ভাষা িহসােব িবকিশত হেয়েছ
কাবলঃ- ইংেরজী COBOL শ িটর পণ প Common Business Oriented Language িহসাব ও
িহসােবর খিতয়ান বতেনর খিতয়ান বতেনর িহসাব এবং এ ধরেনর প িতগত িহসা সংর েণর জন কাবল চাল হেয়েছ ১৯৮৫ সােল য রাে র িতর া িবভাগ বািণিজ ক েয়ােগর উপেযাগী সাবজনীন ভাষা উ াবেনর জেন কমিপউটার তকারী ব বহারকারী ও িব িবদ ালেয়র িশ কেদর সমে েয় একিট কিমিট গঠন কের এ কিমিটর উ ািবত ভাষা কাবল
া াড িহসােব িনধািরত হেয়েছ
প াে লঃ- প াে ল সাধারেনর ব বহার উপেযাগী উ তর ভাষা এলগল-৬০ ভাষা অবল েন এ ভাষা উ াবন করা হয় গত শতাি র স র দশেকর িদেক সইজারল াে র জিরেখর টকিনক াল ইউিনভারিসিটেত িনকলাস ইরথ এ ভাষা উ াবন কেরন বতমােন প াে ল অত জনি য়
উ তর ভাষা িহেসেব পিরিচত
িসঃ- ডিনস িরিচ ১৯৭০ সােল বল ল াবেরটিরেত িস ভাষার উ াবন কেরন থেম িপিডিপ-১১ এ ইউিন অপােরিটং িসে েমর িনয় েন এ ভাষার েয়াগ হেয়িছল বতমােন অত
শি শালী এবং জনি য় উ তর ভাষা িহেসেব িস পিরিচত বতমােন িবিভ ধরেনর কমিপউটাের এবং িবিভ অপােরিটং িসে েমর িনয় েন িস ব াপকভােব ব ব ত হয়
িস++- িস++ একিট ব ল ব ব ত অবেজ অিরেযে ড া াম ভাষা ১৯৮০ সােল য রাে র এিট এ িট বল ল াবেরটিরেত জন াউস প এ ভাষা উ াবন কেরন থেম এর নাম িছল িস উইথ াস পরবতীেত আরও নতন নতন িকছ বিশ ও সিবধা যাগ কের ১৯৮৩ সােল নাম
করন করা হয় িস ++ িস++ এ িস এর সকল বিশ ও সিবধা সহ অিতির আরও িকছ সিবধা আেছ এজন িস++ ক িস এর বিধত সং রন বা সপারেসট বলা হয়
- 4 -
জাভাঃ- জাভা একিট শি শালী আধিনক া াম ভাষা ১৯৯১ সােলর শেষর িদেক জমস
গসিলং এর নতে একদল িবেশষ কতক জাভা ভাষার সচনা কের থেম এর নাম িছল ওক পরবতীেত ১৯৯৪ সােল এর নাম করন করা হয় জাভা জাভা অেনকটা িস++ এর মত তেব িস++ এর তলনায় এ ভাষা সহজ িনরাপদ াটফম অিনভরশীল ই ারেনেটর জন ব বহািরক সফটওয়ার উ য়েন এ ভাষার ব বহার অতলনীয়
দাম কেম আসার ফেল কমিপউটােরর েয়াগ ও ব বহার মাগত বাড়েছ া াম রচনার জন সাধারনত উ তর ভাষা জনি য় কমিপউটার সর ােমর দাম কমেলও া াম রচনা ও া াম পিরচালনার ব য় মাগত বাড়েছ বতমান যগ িডিজটাল যগ তাই িডিজটাল বাংলােদশ গড়েত হেল কমিপউটােরর ব বহার এবং এর া াম ভাষার শখার কান িবক নই
--------------------------------------------------------------------------------------------------------------------
- 5 -
অধ ায় ২
কন িস িশখেবন
িস হল অপােরিটং িসে ম লখার জন সবেচেয় বশী ব ব ত া ািমং ভাষা ইউিন িস ভাষায় লখা থম অপােরিটং িসে ম উ রকােলর মাইে াসফট উইে াস ম াক ও এস এ
িলনা সব েলাই িস ািমং ভাষায় লখা িস ধ অপােরিটং িসে েমর ভাষাই নয়
বতমানকােল জনি য় ায় সকল া িমং ভাষার রণা িস া িমং ভাষা কতপে পাল
িপএইচিপ পাইথন িব েত কটা ভাষাই িস ত লখা ধ ন আপিন িনশ ইটািলয়ান বা পতিগজ ভাষা িশখেত চাে ন তার আেগ ল ািটন শখা িক আপনার কােজ আসেব
নািক না যেহত ল ািটন ভাষা থেকই এসকল ভাষার উৎপি িস শখা আপনােক িস ভাষায় তির করা পেরা া িমং ভাষার পিরবারেক বঝেত সাহায করেব ndash আপনােক দেব াধীনতা মািটন িরিটর তিরকত BCPL থেক াগািমং ভাষা খেক B াগািমং ভাষা ডেভেলাপ করা হয় এবং সখান থেক ১৯৭০ সােল আেমিরকার বল ল াবেরটিরেত ডিনস িরিট নামক াগামার এই C ভাষািট ডেভেলাপ কেরন ১৯৮৩ সােল আেমিরকার National Standard Ins স সমেয়
চিলত Unix C এর জেন মান (Standard) িনধারণ কের দন C াগিমং এর ে অেনক েলা পথ রেযেছ যমন ANSI C Borland C Turbo C Microsoft C etc এ েলার মেধ ১ম িট হেলা Standard এবং বািকরা এই Standard অনসরণ কের আবার এরা েত েক এক একিট Compiler Compiler হেলা এমন একিট াগাম যা Source Code ক Object Code এ Convert কের বশিকছ ধােপ এই Compile স হয়-
1 Source Code 2 Syntax Analyzer 3 Semantic Analyzer 4 Intermediate Code Generator 5 Code Optimizer 6 Code Generator 7 Object Code
কন িস এবং কন এেস িল ভাষা নয়
এেস িল ভাষা আপনােক গিত এবং িসে েমর উপর সেবা িনয় ণ দান করেলও বহনেযাগ নয় িস িঠক এই যায়গাটােতই আলাদা এিট যমন িসে েমর উপর যেথ িনয় ন দয় তমিন বহনেযাগ ও
- 6 -
বইঃ
এই বইটা ছাড়াও কাম ামান িনটেনর বাংলা একটা বই আেছ ldquoসবার জন িসrdquo তািমম শাহিরয়ার সবীন এর ও একিট বাংলা বই আেছ আর ইংেরিজর জন হেল ldquoherbert schildtrdquo এর ldquoteach yourself crdquo িস শখার জন খব ভাল একটা বই C াগািমং িশখেত আ হী নতন
ব বহারকারীেদর জেন দরকারী বইেয়র তািলকাসমহ
01 Schaumsrsquos Outline of Programming wtih C By Byron Gotteried 02 Teach Yourself C By Herbert Schildt 03 Turbo CC++ The Complete Reference By Herbert Schildt
Schaums Series আেরকটা িকনেত পােরন Herbert Schildt Teach Yourself C হাবাড িশে র বইেয় িত চ া াের অনশীলনীেত চর এ ারসাইজ আেছ স েলার সমাধানও দওয়া আেছ বইেয়র পছেন এিট খবই সাহায করেব আপনােক
এছাড়া httpacmuvaesproblemset চ া ক ন উদাহরণ আর অনশীলনী াকিটস কের িশেখ ফলন িস
--------------------------------------------------------------------------------------
- 7 -
অধ ায় ৩
সব া ামই িকছ না িকছ া াম িনেয় কাজ কের া ােম ব বহােরর জন ডটােক থেম মমিরেত সংর ণ করা হয় এবং েয়াজেন মমির থেক ডটা উে ালন কের কােজ লাগােনা
হয় িন পযােয়র ভাষায় মমিরেত ডটা রাখার জন সরাসির িবট বাইট এবং মমির এ াে স ব বহার করা হয় যা বড় বড় া ােমর জন অত জিটল এবং ক কর কারণ ল ল এ াে েসর মেধ কখন কান এ াে েস কান ডটা রাখা হল তা মেন রাখা অস ব এই অসিবধা দর করার জন এবং া ামেক সহজ করার লে উ পযােয়র ভাষায় িবট বাইট এর পিরবেত ভিরেয়বল ব বহার করা হয়
ভিরেয়বলঃ ভিরেয়বল হল মমিরর লােকশেনর নাম বা িঠকানা া ােম যখন কান ডটা িনেয় কাজ করা হয় াথিমক ভােব স েলা কমিপউটােরর যােম অব ান কের পরবতী সমেয়
স েলা পন ার বা পনব বহােরর জন ঐ নাম বা িঠকানা জানা েয়াজন হয় সতরাং া ােম ডটা িনেয় কাজ করার সময় িতিট ডটার জন একিট ভিরেয়বল ব বহার করােত হয় ভিরেয়বল ব বহার না কের ও া ােম িবিভ ধরেনর ডটা যমন ক াের ার ি ং পনসংখ া
ভ াংশ তথা দশিমক সংখ া সােয়ি িফকসংখ া তখা এ েপােনি য়াল সংখ া িনেয় কাজ করা যায়
ডটা টাইপ ও মিডফায়ারঃ িস ভাষায় ভিরেয়বল ব বহার কের ডটা সংর েণর জন ভিরেয়বল ঘাষণার সময় ডটার ধরন অনযায়ী উপয ডটা টাইপ ও ঘাষণা করেত হয় এ প ব ব ত
চারিট মৗিলক বা িব ইন ডটা টাইপ হলঃ char integer float double চারিট মৗিলক ডটা এর জন ঘািষত ভিরেয়বেলর জন সংরি ত মমির পিরসর ডটার কিত এবং ধারণ
মতার একটা সীমাব তা রেয়েছ যমনঃ একিট char টাইপ ভিরেয়বেলর জন ৮ িবট বা ১ বাইট জায়গা সংর ণ কের যােত ০ থেক ১২৭ মানিবিশ মাট ১২৮িট ব াের ােরর য কান একিট মান রাথা যায়
এছাড়াও িস ত আরও ৪িট মিডফায়ার আেছ
স েলা হলঃ- singed unsigned short long
সাধারনত char টাইপ ভিরেয়বেলর জন singed ও unsigned মিডফায়ার এবং টাইপ
ভিরেয়বেলর জন singed unsigned short ও long মিডফায়ার float ও double টাইপ ভিরেয়বেলর জন short এবং long মিডফায়ার ব ব ত হয়
এসব ডটার িবট ও মােনর র জানা খব জ রী
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 2 -
অধ ায় ১
া াম ও া ািমং িক
কি উটােরর মাধ েম কান সমস া সমাধােনর জন েয়াজনীয় িনেদশমালার সমি েক া াম (program) বলা হয় আর এই ধারা বণনা বা া াম রচনার প িত বা কৗশলেক া াম প িত বা া ািমং (programming) বলা হয় অন কথায় কান সমস া অ সমেয় এবং সহেজ সমাধােনর উে েশ স াদােনর অন েম িনেদশাবলী সাজােনার কৗশলেক া ািমং বলা হয়
া ািমং ভাষা িক
কি উটােরর মাধ েম কান সমস া সমাধান তথা া াম রচনার জন ব ব ত শ বণ অংক
িচ ভিতর সম েনয় গিঠত রীিতনীিতেক া ািমং ভাষা (Programming Language) বলা হয় িবিভ ধরেনর া াম রচনার জন িবিভ ধরেনর া াম ভাষা ব ব ত হয় পিথবীেত কািট কািট মানষ অেনক ধরেনর ভাষা ব বহার কের িক কি উটার এই সব ভাষা বােঝ না তাই
কি উটার তার িনজ বাধগম ভাষায় িনেদশ দােনর লে িনিদ িনয়ম অনযায়ী শ বন সংেকত এবং এ েলার িবন ােসর িনিদ িনয়ম িমিলেয় একসে বলা হয় া ািমং ভাষা
জনি য় কেয়কিট া াম ভাষা
উ তর ভাষায় া াম লখার জন ইংেরজী শ ও ইংেরজী বাক ব ব ত হয়
িনেচ কেয়কিট া াম ভাষার নাম দওয়া হল
বিসকঃ- বিসক কি উটার া ােমর একিট জনি য় ভাষা বিসক (BASIC) শ িট
Beginnerrsquos All Purpose Symbolic Instruction Codes ndash এর সংি প ১৯৬৪ সােল য রাে র ডাটমাউথ কেলেজর ইজন অধ াপক জন িজ কিমিন এবং টমাস কাটজ ছা -ছা ীেদর সহেজ
া াম িশখােনার উে েশ এ ভাষা উ াবন কেরন ১৯৭৮ সােল আেমিরকান ন াশনাল া াড বিসেকর একিট া াড িত প িনধারন কের যার ফেল এ ভাষার ততর সার ঘেট
িকউেবিসকঃ- িকউেবিসক বিসেকর একিট উপভাষা এিট উ াবন কেরেছ য রাে র
মাইে াসফট কা ািন QBASIC শ িট এেসেছ QUICK BASIC থেক এ ভাষার া ােম লাইন ন র িদেত হয় না িকউেবিসেক মন ব বহার কের কাজ করা যায় মনেত া াম স াদন ভল িনণয় ও ি করণ একসােথ একািধক ফাইল ও উইে া ব বহার করা যায় এছাড়াও িকউেবিসেকর অেনক সিবধা আেছ
- 3 -
িভজয়াল বিসকঃ- িভজয়াল বিসক একিট া াম ডেভলপেম প ােকজ বতমান
িকউেবিসেকর পিরবেত িভজয়াল বিসেকর ব বহার সাবজনীন ত এবং সহজ া াম উ য়েনর সিবধা থাকায় দ ও অদ সব নীর া ামারেদর কােছ এই ভাষা বশ জনি য়
এ লগলঃ- এ ালগল (ALGOL)- এলগিরদিমক ল াং েয়জ (Algorithmic Language) সংি প ১৯৫৮ সােল সব কি উটার ব বহারেযাগ সাবজনীন ভাষা উ াবেনর চ ার ফেল ইউেরােপ এ ভাষার উ ব হয় ইউেরােপর বাইের এর িব ার তমন নই
ফর ানঃ- ইংেরজী FROTRAN শ িটর পণ প Formula Translation গািণিতক উপােয় ব ািনক ও েকৗশিলক সমস া সমাধােনর জন এ ভাষা অত উপেযাগী ১৯৫৭ সােল আইিবএম কা ানী এ ভাষা চাল কের অেনক েলা ভাসেনর মাধ েম িববিতত হেয ফর ান
একিট শি শালী উ তর ভাষা িহসােব িবকিশত হেয়েছ
কাবলঃ- ইংেরজী COBOL শ িটর পণ প Common Business Oriented Language িহসাব ও
িহসােবর খিতয়ান বতেনর খিতয়ান বতেনর িহসাব এবং এ ধরেনর প িতগত িহসা সংর েণর জন কাবল চাল হেয়েছ ১৯৮৫ সােল য রাে র িতর া িবভাগ বািণিজ ক েয়ােগর উপেযাগী সাবজনীন ভাষা উ াবেনর জেন কমিপউটার তকারী ব বহারকারী ও িব িবদ ালেয়র িশ কেদর সমে েয় একিট কিমিট গঠন কের এ কিমিটর উ ািবত ভাষা কাবল
া াড িহসােব িনধািরত হেয়েছ
প াে লঃ- প াে ল সাধারেনর ব বহার উপেযাগী উ তর ভাষা এলগল-৬০ ভাষা অবল েন এ ভাষা উ াবন করা হয় গত শতাি র স র দশেকর িদেক সইজারল াে র জিরেখর টকিনক াল ইউিনভারিসিটেত িনকলাস ইরথ এ ভাষা উ াবন কেরন বতমােন প াে ল অত জনি য়
উ তর ভাষা িহেসেব পিরিচত
িসঃ- ডিনস িরিচ ১৯৭০ সােল বল ল াবেরটিরেত িস ভাষার উ াবন কেরন থেম িপিডিপ-১১ এ ইউিন অপােরিটং িসে েমর িনয় েন এ ভাষার েয়াগ হেয়িছল বতমােন অত
শি শালী এবং জনি য় উ তর ভাষা িহেসেব িস পিরিচত বতমােন িবিভ ধরেনর কমিপউটাের এবং িবিভ অপােরিটং িসে েমর িনয় েন িস ব াপকভােব ব ব ত হয়
িস++- িস++ একিট ব ল ব ব ত অবেজ অিরেযে ড া াম ভাষা ১৯৮০ সােল য রাে র এিট এ িট বল ল াবেরটিরেত জন াউস প এ ভাষা উ াবন কেরন থেম এর নাম িছল িস উইথ াস পরবতীেত আরও নতন নতন িকছ বিশ ও সিবধা যাগ কের ১৯৮৩ সােল নাম
করন করা হয় িস ++ িস++ এ িস এর সকল বিশ ও সিবধা সহ অিতির আরও িকছ সিবধা আেছ এজন িস++ ক িস এর বিধত সং রন বা সপারেসট বলা হয়
- 4 -
জাভাঃ- জাভা একিট শি শালী আধিনক া াম ভাষা ১৯৯১ সােলর শেষর িদেক জমস
গসিলং এর নতে একদল িবেশষ কতক জাভা ভাষার সচনা কের থেম এর নাম িছল ওক পরবতীেত ১৯৯৪ সােল এর নাম করন করা হয় জাভা জাভা অেনকটা িস++ এর মত তেব িস++ এর তলনায় এ ভাষা সহজ িনরাপদ াটফম অিনভরশীল ই ারেনেটর জন ব বহািরক সফটওয়ার উ য়েন এ ভাষার ব বহার অতলনীয়
দাম কেম আসার ফেল কমিপউটােরর েয়াগ ও ব বহার মাগত বাড়েছ া াম রচনার জন সাধারনত উ তর ভাষা জনি য় কমিপউটার সর ােমর দাম কমেলও া াম রচনা ও া াম পিরচালনার ব য় মাগত বাড়েছ বতমান যগ িডিজটাল যগ তাই িডিজটাল বাংলােদশ গড়েত হেল কমিপউটােরর ব বহার এবং এর া াম ভাষার শখার কান িবক নই
--------------------------------------------------------------------------------------------------------------------
- 5 -
অধ ায় ২
কন িস িশখেবন
িস হল অপােরিটং িসে ম লখার জন সবেচেয় বশী ব ব ত া ািমং ভাষা ইউিন িস ভাষায় লখা থম অপােরিটং িসে ম উ রকােলর মাইে াসফট উইে াস ম াক ও এস এ
িলনা সব েলাই িস ািমং ভাষায় লখা িস ধ অপােরিটং িসে েমর ভাষাই নয়
বতমানকােল জনি য় ায় সকল া িমং ভাষার রণা িস া িমং ভাষা কতপে পাল
িপএইচিপ পাইথন িব েত কটা ভাষাই িস ত লখা ধ ন আপিন িনশ ইটািলয়ান বা পতিগজ ভাষা িশখেত চাে ন তার আেগ ল ািটন শখা িক আপনার কােজ আসেব
নািক না যেহত ল ািটন ভাষা থেকই এসকল ভাষার উৎপি িস শখা আপনােক িস ভাষায় তির করা পেরা া িমং ভাষার পিরবারেক বঝেত সাহায করেব ndash আপনােক দেব াধীনতা মািটন িরিটর তিরকত BCPL থেক াগািমং ভাষা খেক B াগািমং ভাষা ডেভেলাপ করা হয় এবং সখান থেক ১৯৭০ সােল আেমিরকার বল ল াবেরটিরেত ডিনস িরিট নামক াগামার এই C ভাষািট ডেভেলাপ কেরন ১৯৮৩ সােল আেমিরকার National Standard Ins স সমেয়
চিলত Unix C এর জেন মান (Standard) িনধারণ কের দন C াগিমং এর ে অেনক েলা পথ রেযেছ যমন ANSI C Borland C Turbo C Microsoft C etc এ েলার মেধ ১ম িট হেলা Standard এবং বািকরা এই Standard অনসরণ কের আবার এরা েত েক এক একিট Compiler Compiler হেলা এমন একিট াগাম যা Source Code ক Object Code এ Convert কের বশিকছ ধােপ এই Compile স হয়-
1 Source Code 2 Syntax Analyzer 3 Semantic Analyzer 4 Intermediate Code Generator 5 Code Optimizer 6 Code Generator 7 Object Code
কন িস এবং কন এেস িল ভাষা নয়
এেস িল ভাষা আপনােক গিত এবং িসে েমর উপর সেবা িনয় ণ দান করেলও বহনেযাগ নয় িস িঠক এই যায়গাটােতই আলাদা এিট যমন িসে েমর উপর যেথ িনয় ন দয় তমিন বহনেযাগ ও
- 6 -
বইঃ
এই বইটা ছাড়াও কাম ামান িনটেনর বাংলা একটা বই আেছ ldquoসবার জন িসrdquo তািমম শাহিরয়ার সবীন এর ও একিট বাংলা বই আেছ আর ইংেরিজর জন হেল ldquoherbert schildtrdquo এর ldquoteach yourself crdquo িস শখার জন খব ভাল একটা বই C াগািমং িশখেত আ হী নতন
ব বহারকারীেদর জেন দরকারী বইেয়র তািলকাসমহ
01 Schaumsrsquos Outline of Programming wtih C By Byron Gotteried 02 Teach Yourself C By Herbert Schildt 03 Turbo CC++ The Complete Reference By Herbert Schildt
Schaums Series আেরকটা িকনেত পােরন Herbert Schildt Teach Yourself C হাবাড িশে র বইেয় িত চ া াের অনশীলনীেত চর এ ারসাইজ আেছ স েলার সমাধানও দওয়া আেছ বইেয়র পছেন এিট খবই সাহায করেব আপনােক
এছাড়া httpacmuvaesproblemset চ া ক ন উদাহরণ আর অনশীলনী াকিটস কের িশেখ ফলন িস
--------------------------------------------------------------------------------------
- 7 -
অধ ায় ৩
সব া ামই িকছ না িকছ া াম িনেয় কাজ কের া ােম ব বহােরর জন ডটােক থেম মমিরেত সংর ণ করা হয় এবং েয়াজেন মমির থেক ডটা উে ালন কের কােজ লাগােনা
হয় িন পযােয়র ভাষায় মমিরেত ডটা রাখার জন সরাসির িবট বাইট এবং মমির এ াে স ব বহার করা হয় যা বড় বড় া ােমর জন অত জিটল এবং ক কর কারণ ল ল এ াে েসর মেধ কখন কান এ াে েস কান ডটা রাখা হল তা মেন রাখা অস ব এই অসিবধা দর করার জন এবং া ামেক সহজ করার লে উ পযােয়র ভাষায় িবট বাইট এর পিরবেত ভিরেয়বল ব বহার করা হয়
ভিরেয়বলঃ ভিরেয়বল হল মমিরর লােকশেনর নাম বা িঠকানা া ােম যখন কান ডটা িনেয় কাজ করা হয় াথিমক ভােব স েলা কমিপউটােরর যােম অব ান কের পরবতী সমেয়
স েলা পন ার বা পনব বহােরর জন ঐ নাম বা িঠকানা জানা েয়াজন হয় সতরাং া ােম ডটা িনেয় কাজ করার সময় িতিট ডটার জন একিট ভিরেয়বল ব বহার করােত হয় ভিরেয়বল ব বহার না কের ও া ােম িবিভ ধরেনর ডটা যমন ক াের ার ি ং পনসংখ া
ভ াংশ তথা দশিমক সংখ া সােয়ি িফকসংখ া তখা এ েপােনি য়াল সংখ া িনেয় কাজ করা যায়
ডটা টাইপ ও মিডফায়ারঃ িস ভাষায় ভিরেয়বল ব বহার কের ডটা সংর েণর জন ভিরেয়বল ঘাষণার সময় ডটার ধরন অনযায়ী উপয ডটা টাইপ ও ঘাষণা করেত হয় এ প ব ব ত
চারিট মৗিলক বা িব ইন ডটা টাইপ হলঃ char integer float double চারিট মৗিলক ডটা এর জন ঘািষত ভিরেয়বেলর জন সংরি ত মমির পিরসর ডটার কিত এবং ধারণ
মতার একটা সীমাব তা রেয়েছ যমনঃ একিট char টাইপ ভিরেয়বেলর জন ৮ িবট বা ১ বাইট জায়গা সংর ণ কের যােত ০ থেক ১২৭ মানিবিশ মাট ১২৮িট ব াের ােরর য কান একিট মান রাথা যায়
এছাড়াও িস ত আরও ৪িট মিডফায়ার আেছ
স েলা হলঃ- singed unsigned short long
সাধারনত char টাইপ ভিরেয়বেলর জন singed ও unsigned মিডফায়ার এবং টাইপ
ভিরেয়বেলর জন singed unsigned short ও long মিডফায়ার float ও double টাইপ ভিরেয়বেলর জন short এবং long মিডফায়ার ব ব ত হয়
এসব ডটার িবট ও মােনর র জানা খব জ রী
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 3 -
িভজয়াল বিসকঃ- িভজয়াল বিসক একিট া াম ডেভলপেম প ােকজ বতমান
িকউেবিসেকর পিরবেত িভজয়াল বিসেকর ব বহার সাবজনীন ত এবং সহজ া াম উ য়েনর সিবধা থাকায় দ ও অদ সব নীর া ামারেদর কােছ এই ভাষা বশ জনি য়
এ লগলঃ- এ ালগল (ALGOL)- এলগিরদিমক ল াং েয়জ (Algorithmic Language) সংি প ১৯৫৮ সােল সব কি উটার ব বহারেযাগ সাবজনীন ভাষা উ াবেনর চ ার ফেল ইউেরােপ এ ভাষার উ ব হয় ইউেরােপর বাইের এর িব ার তমন নই
ফর ানঃ- ইংেরজী FROTRAN শ িটর পণ প Formula Translation গািণিতক উপােয় ব ািনক ও েকৗশিলক সমস া সমাধােনর জন এ ভাষা অত উপেযাগী ১৯৫৭ সােল আইিবএম কা ানী এ ভাষা চাল কের অেনক েলা ভাসেনর মাধ েম িববিতত হেয ফর ান
একিট শি শালী উ তর ভাষা িহসােব িবকিশত হেয়েছ
কাবলঃ- ইংেরজী COBOL শ িটর পণ প Common Business Oriented Language িহসাব ও
িহসােবর খিতয়ান বতেনর খিতয়ান বতেনর িহসাব এবং এ ধরেনর প িতগত িহসা সংর েণর জন কাবল চাল হেয়েছ ১৯৮৫ সােল য রাে র িতর া িবভাগ বািণিজ ক েয়ােগর উপেযাগী সাবজনীন ভাষা উ াবেনর জেন কমিপউটার তকারী ব বহারকারী ও িব িবদ ালেয়র িশ কেদর সমে েয় একিট কিমিট গঠন কের এ কিমিটর উ ািবত ভাষা কাবল
া াড িহসােব িনধািরত হেয়েছ
প াে লঃ- প াে ল সাধারেনর ব বহার উপেযাগী উ তর ভাষা এলগল-৬০ ভাষা অবল েন এ ভাষা উ াবন করা হয় গত শতাি র স র দশেকর িদেক সইজারল াে র জিরেখর টকিনক াল ইউিনভারিসিটেত িনকলাস ইরথ এ ভাষা উ াবন কেরন বতমােন প াে ল অত জনি য়
উ তর ভাষা িহেসেব পিরিচত
িসঃ- ডিনস িরিচ ১৯৭০ সােল বল ল াবেরটিরেত িস ভাষার উ াবন কেরন থেম িপিডিপ-১১ এ ইউিন অপােরিটং িসে েমর িনয় েন এ ভাষার েয়াগ হেয়িছল বতমােন অত
শি শালী এবং জনি য় উ তর ভাষা িহেসেব িস পিরিচত বতমােন িবিভ ধরেনর কমিপউটাের এবং িবিভ অপােরিটং িসে েমর িনয় েন িস ব াপকভােব ব ব ত হয়
িস++- িস++ একিট ব ল ব ব ত অবেজ অিরেযে ড া াম ভাষা ১৯৮০ সােল য রাে র এিট এ িট বল ল াবেরটিরেত জন াউস প এ ভাষা উ াবন কেরন থেম এর নাম িছল িস উইথ াস পরবতীেত আরও নতন নতন িকছ বিশ ও সিবধা যাগ কের ১৯৮৩ সােল নাম
করন করা হয় িস ++ িস++ এ িস এর সকল বিশ ও সিবধা সহ অিতির আরও িকছ সিবধা আেছ এজন িস++ ক িস এর বিধত সং রন বা সপারেসট বলা হয়
- 4 -
জাভাঃ- জাভা একিট শি শালী আধিনক া াম ভাষা ১৯৯১ সােলর শেষর িদেক জমস
গসিলং এর নতে একদল িবেশষ কতক জাভা ভাষার সচনা কের থেম এর নাম িছল ওক পরবতীেত ১৯৯৪ সােল এর নাম করন করা হয় জাভা জাভা অেনকটা িস++ এর মত তেব িস++ এর তলনায় এ ভাষা সহজ িনরাপদ াটফম অিনভরশীল ই ারেনেটর জন ব বহািরক সফটওয়ার উ য়েন এ ভাষার ব বহার অতলনীয়
দাম কেম আসার ফেল কমিপউটােরর েয়াগ ও ব বহার মাগত বাড়েছ া াম রচনার জন সাধারনত উ তর ভাষা জনি য় কমিপউটার সর ােমর দাম কমেলও া াম রচনা ও া াম পিরচালনার ব য় মাগত বাড়েছ বতমান যগ িডিজটাল যগ তাই িডিজটাল বাংলােদশ গড়েত হেল কমিপউটােরর ব বহার এবং এর া াম ভাষার শখার কান িবক নই
--------------------------------------------------------------------------------------------------------------------
- 5 -
অধ ায় ২
কন িস িশখেবন
িস হল অপােরিটং িসে ম লখার জন সবেচেয় বশী ব ব ত া ািমং ভাষা ইউিন িস ভাষায় লখা থম অপােরিটং িসে ম উ রকােলর মাইে াসফট উইে াস ম াক ও এস এ
িলনা সব েলাই িস ািমং ভাষায় লখা িস ধ অপােরিটং িসে েমর ভাষাই নয়
বতমানকােল জনি য় ায় সকল া িমং ভাষার রণা িস া িমং ভাষা কতপে পাল
িপএইচিপ পাইথন িব েত কটা ভাষাই িস ত লখা ধ ন আপিন িনশ ইটািলয়ান বা পতিগজ ভাষা িশখেত চাে ন তার আেগ ল ািটন শখা িক আপনার কােজ আসেব
নািক না যেহত ল ািটন ভাষা থেকই এসকল ভাষার উৎপি িস শখা আপনােক িস ভাষায় তির করা পেরা া িমং ভাষার পিরবারেক বঝেত সাহায করেব ndash আপনােক দেব াধীনতা মািটন িরিটর তিরকত BCPL থেক াগািমং ভাষা খেক B াগািমং ভাষা ডেভেলাপ করা হয় এবং সখান থেক ১৯৭০ সােল আেমিরকার বল ল াবেরটিরেত ডিনস িরিট নামক াগামার এই C ভাষািট ডেভেলাপ কেরন ১৯৮৩ সােল আেমিরকার National Standard Ins স সমেয়
চিলত Unix C এর জেন মান (Standard) িনধারণ কের দন C াগিমং এর ে অেনক েলা পথ রেযেছ যমন ANSI C Borland C Turbo C Microsoft C etc এ েলার মেধ ১ম িট হেলা Standard এবং বািকরা এই Standard অনসরণ কের আবার এরা েত েক এক একিট Compiler Compiler হেলা এমন একিট াগাম যা Source Code ক Object Code এ Convert কের বশিকছ ধােপ এই Compile স হয়-
1 Source Code 2 Syntax Analyzer 3 Semantic Analyzer 4 Intermediate Code Generator 5 Code Optimizer 6 Code Generator 7 Object Code
কন িস এবং কন এেস িল ভাষা নয়
এেস িল ভাষা আপনােক গিত এবং িসে েমর উপর সেবা িনয় ণ দান করেলও বহনেযাগ নয় িস িঠক এই যায়গাটােতই আলাদা এিট যমন িসে েমর উপর যেথ িনয় ন দয় তমিন বহনেযাগ ও
- 6 -
বইঃ
এই বইটা ছাড়াও কাম ামান িনটেনর বাংলা একটা বই আেছ ldquoসবার জন িসrdquo তািমম শাহিরয়ার সবীন এর ও একিট বাংলা বই আেছ আর ইংেরিজর জন হেল ldquoherbert schildtrdquo এর ldquoteach yourself crdquo িস শখার জন খব ভাল একটা বই C াগািমং িশখেত আ হী নতন
ব বহারকারীেদর জেন দরকারী বইেয়র তািলকাসমহ
01 Schaumsrsquos Outline of Programming wtih C By Byron Gotteried 02 Teach Yourself C By Herbert Schildt 03 Turbo CC++ The Complete Reference By Herbert Schildt
Schaums Series আেরকটা িকনেত পােরন Herbert Schildt Teach Yourself C হাবাড িশে র বইেয় িত চ া াের অনশীলনীেত চর এ ারসাইজ আেছ স েলার সমাধানও দওয়া আেছ বইেয়র পছেন এিট খবই সাহায করেব আপনােক
এছাড়া httpacmuvaesproblemset চ া ক ন উদাহরণ আর অনশীলনী াকিটস কের িশেখ ফলন িস
--------------------------------------------------------------------------------------
- 7 -
অধ ায় ৩
সব া ামই িকছ না িকছ া াম িনেয় কাজ কের া ােম ব বহােরর জন ডটােক থেম মমিরেত সংর ণ করা হয় এবং েয়াজেন মমির থেক ডটা উে ালন কের কােজ লাগােনা
হয় িন পযােয়র ভাষায় মমিরেত ডটা রাখার জন সরাসির িবট বাইট এবং মমির এ াে স ব বহার করা হয় যা বড় বড় া ােমর জন অত জিটল এবং ক কর কারণ ল ল এ াে েসর মেধ কখন কান এ াে েস কান ডটা রাখা হল তা মেন রাখা অস ব এই অসিবধা দর করার জন এবং া ামেক সহজ করার লে উ পযােয়র ভাষায় িবট বাইট এর পিরবেত ভিরেয়বল ব বহার করা হয়
ভিরেয়বলঃ ভিরেয়বল হল মমিরর লােকশেনর নাম বা িঠকানা া ােম যখন কান ডটা িনেয় কাজ করা হয় াথিমক ভােব স েলা কমিপউটােরর যােম অব ান কের পরবতী সমেয়
স েলা পন ার বা পনব বহােরর জন ঐ নাম বা িঠকানা জানা েয়াজন হয় সতরাং া ােম ডটা িনেয় কাজ করার সময় িতিট ডটার জন একিট ভিরেয়বল ব বহার করােত হয় ভিরেয়বল ব বহার না কের ও া ােম িবিভ ধরেনর ডটা যমন ক াের ার ি ং পনসংখ া
ভ াংশ তথা দশিমক সংখ া সােয়ি িফকসংখ া তখা এ েপােনি য়াল সংখ া িনেয় কাজ করা যায়
ডটা টাইপ ও মিডফায়ারঃ িস ভাষায় ভিরেয়বল ব বহার কের ডটা সংর েণর জন ভিরেয়বল ঘাষণার সময় ডটার ধরন অনযায়ী উপয ডটা টাইপ ও ঘাষণা করেত হয় এ প ব ব ত
চারিট মৗিলক বা িব ইন ডটা টাইপ হলঃ char integer float double চারিট মৗিলক ডটা এর জন ঘািষত ভিরেয়বেলর জন সংরি ত মমির পিরসর ডটার কিত এবং ধারণ
মতার একটা সীমাব তা রেয়েছ যমনঃ একিট char টাইপ ভিরেয়বেলর জন ৮ িবট বা ১ বাইট জায়গা সংর ণ কের যােত ০ থেক ১২৭ মানিবিশ মাট ১২৮িট ব াের ােরর য কান একিট মান রাথা যায়
এছাড়াও িস ত আরও ৪িট মিডফায়ার আেছ
স েলা হলঃ- singed unsigned short long
সাধারনত char টাইপ ভিরেয়বেলর জন singed ও unsigned মিডফায়ার এবং টাইপ
ভিরেয়বেলর জন singed unsigned short ও long মিডফায়ার float ও double টাইপ ভিরেয়বেলর জন short এবং long মিডফায়ার ব ব ত হয়
এসব ডটার িবট ও মােনর র জানা খব জ রী
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 4 -
জাভাঃ- জাভা একিট শি শালী আধিনক া াম ভাষা ১৯৯১ সােলর শেষর িদেক জমস
গসিলং এর নতে একদল িবেশষ কতক জাভা ভাষার সচনা কের থেম এর নাম িছল ওক পরবতীেত ১৯৯৪ সােল এর নাম করন করা হয় জাভা জাভা অেনকটা িস++ এর মত তেব িস++ এর তলনায় এ ভাষা সহজ িনরাপদ াটফম অিনভরশীল ই ারেনেটর জন ব বহািরক সফটওয়ার উ য়েন এ ভাষার ব বহার অতলনীয়
দাম কেম আসার ফেল কমিপউটােরর েয়াগ ও ব বহার মাগত বাড়েছ া াম রচনার জন সাধারনত উ তর ভাষা জনি য় কমিপউটার সর ােমর দাম কমেলও া াম রচনা ও া াম পিরচালনার ব য় মাগত বাড়েছ বতমান যগ িডিজটাল যগ তাই িডিজটাল বাংলােদশ গড়েত হেল কমিপউটােরর ব বহার এবং এর া াম ভাষার শখার কান িবক নই
--------------------------------------------------------------------------------------------------------------------
- 5 -
অধ ায় ২
কন িস িশখেবন
িস হল অপােরিটং িসে ম লখার জন সবেচেয় বশী ব ব ত া ািমং ভাষা ইউিন িস ভাষায় লখা থম অপােরিটং িসে ম উ রকােলর মাইে াসফট উইে াস ম াক ও এস এ
িলনা সব েলাই িস ািমং ভাষায় লখা িস ধ অপােরিটং িসে েমর ভাষাই নয়
বতমানকােল জনি য় ায় সকল া িমং ভাষার রণা িস া িমং ভাষা কতপে পাল
িপএইচিপ পাইথন িব েত কটা ভাষাই িস ত লখা ধ ন আপিন িনশ ইটািলয়ান বা পতিগজ ভাষা িশখেত চাে ন তার আেগ ল ািটন শখা িক আপনার কােজ আসেব
নািক না যেহত ল ািটন ভাষা থেকই এসকল ভাষার উৎপি িস শখা আপনােক িস ভাষায় তির করা পেরা া িমং ভাষার পিরবারেক বঝেত সাহায করেব ndash আপনােক দেব াধীনতা মািটন িরিটর তিরকত BCPL থেক াগািমং ভাষা খেক B াগািমং ভাষা ডেভেলাপ করা হয় এবং সখান থেক ১৯৭০ সােল আেমিরকার বল ল াবেরটিরেত ডিনস িরিট নামক াগামার এই C ভাষািট ডেভেলাপ কেরন ১৯৮৩ সােল আেমিরকার National Standard Ins স সমেয়
চিলত Unix C এর জেন মান (Standard) িনধারণ কের দন C াগিমং এর ে অেনক েলা পথ রেযেছ যমন ANSI C Borland C Turbo C Microsoft C etc এ েলার মেধ ১ম িট হেলা Standard এবং বািকরা এই Standard অনসরণ কের আবার এরা েত েক এক একিট Compiler Compiler হেলা এমন একিট াগাম যা Source Code ক Object Code এ Convert কের বশিকছ ধােপ এই Compile স হয়-
1 Source Code 2 Syntax Analyzer 3 Semantic Analyzer 4 Intermediate Code Generator 5 Code Optimizer 6 Code Generator 7 Object Code
কন িস এবং কন এেস িল ভাষা নয়
এেস িল ভাষা আপনােক গিত এবং িসে েমর উপর সেবা িনয় ণ দান করেলও বহনেযাগ নয় িস িঠক এই যায়গাটােতই আলাদা এিট যমন িসে েমর উপর যেথ িনয় ন দয় তমিন বহনেযাগ ও
- 6 -
বইঃ
এই বইটা ছাড়াও কাম ামান িনটেনর বাংলা একটা বই আেছ ldquoসবার জন িসrdquo তািমম শাহিরয়ার সবীন এর ও একিট বাংলা বই আেছ আর ইংেরিজর জন হেল ldquoherbert schildtrdquo এর ldquoteach yourself crdquo িস শখার জন খব ভাল একটা বই C াগািমং িশখেত আ হী নতন
ব বহারকারীেদর জেন দরকারী বইেয়র তািলকাসমহ
01 Schaumsrsquos Outline of Programming wtih C By Byron Gotteried 02 Teach Yourself C By Herbert Schildt 03 Turbo CC++ The Complete Reference By Herbert Schildt
Schaums Series আেরকটা িকনেত পােরন Herbert Schildt Teach Yourself C হাবাড িশে র বইেয় িত চ া াের অনশীলনীেত চর এ ারসাইজ আেছ স েলার সমাধানও দওয়া আেছ বইেয়র পছেন এিট খবই সাহায করেব আপনােক
এছাড়া httpacmuvaesproblemset চ া ক ন উদাহরণ আর অনশীলনী াকিটস কের িশেখ ফলন িস
--------------------------------------------------------------------------------------
- 7 -
অধ ায় ৩
সব া ামই িকছ না িকছ া াম িনেয় কাজ কের া ােম ব বহােরর জন ডটােক থেম মমিরেত সংর ণ করা হয় এবং েয়াজেন মমির থেক ডটা উে ালন কের কােজ লাগােনা
হয় িন পযােয়র ভাষায় মমিরেত ডটা রাখার জন সরাসির িবট বাইট এবং মমির এ াে স ব বহার করা হয় যা বড় বড় া ােমর জন অত জিটল এবং ক কর কারণ ল ল এ াে েসর মেধ কখন কান এ াে েস কান ডটা রাখা হল তা মেন রাখা অস ব এই অসিবধা দর করার জন এবং া ামেক সহজ করার লে উ পযােয়র ভাষায় িবট বাইট এর পিরবেত ভিরেয়বল ব বহার করা হয়
ভিরেয়বলঃ ভিরেয়বল হল মমিরর লােকশেনর নাম বা িঠকানা া ােম যখন কান ডটা িনেয় কাজ করা হয় াথিমক ভােব স েলা কমিপউটােরর যােম অব ান কের পরবতী সমেয়
স েলা পন ার বা পনব বহােরর জন ঐ নাম বা িঠকানা জানা েয়াজন হয় সতরাং া ােম ডটা িনেয় কাজ করার সময় িতিট ডটার জন একিট ভিরেয়বল ব বহার করােত হয় ভিরেয়বল ব বহার না কের ও া ােম িবিভ ধরেনর ডটা যমন ক াের ার ি ং পনসংখ া
ভ াংশ তথা দশিমক সংখ া সােয়ি িফকসংখ া তখা এ েপােনি য়াল সংখ া িনেয় কাজ করা যায়
ডটা টাইপ ও মিডফায়ারঃ িস ভাষায় ভিরেয়বল ব বহার কের ডটা সংর েণর জন ভিরেয়বল ঘাষণার সময় ডটার ধরন অনযায়ী উপয ডটা টাইপ ও ঘাষণা করেত হয় এ প ব ব ত
চারিট মৗিলক বা িব ইন ডটা টাইপ হলঃ char integer float double চারিট মৗিলক ডটা এর জন ঘািষত ভিরেয়বেলর জন সংরি ত মমির পিরসর ডটার কিত এবং ধারণ
মতার একটা সীমাব তা রেয়েছ যমনঃ একিট char টাইপ ভিরেয়বেলর জন ৮ িবট বা ১ বাইট জায়গা সংর ণ কের যােত ০ থেক ১২৭ মানিবিশ মাট ১২৮িট ব াের ােরর য কান একিট মান রাথা যায়
এছাড়াও িস ত আরও ৪িট মিডফায়ার আেছ
স েলা হলঃ- singed unsigned short long
সাধারনত char টাইপ ভিরেয়বেলর জন singed ও unsigned মিডফায়ার এবং টাইপ
ভিরেয়বেলর জন singed unsigned short ও long মিডফায়ার float ও double টাইপ ভিরেয়বেলর জন short এবং long মিডফায়ার ব ব ত হয়
এসব ডটার িবট ও মােনর র জানা খব জ রী
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 5 -
অধ ায় ২
কন িস িশখেবন
িস হল অপােরিটং িসে ম লখার জন সবেচেয় বশী ব ব ত া ািমং ভাষা ইউিন িস ভাষায় লখা থম অপােরিটং িসে ম উ রকােলর মাইে াসফট উইে াস ম াক ও এস এ
িলনা সব েলাই িস ািমং ভাষায় লখা িস ধ অপােরিটং িসে েমর ভাষাই নয়
বতমানকােল জনি য় ায় সকল া িমং ভাষার রণা িস া িমং ভাষা কতপে পাল
িপএইচিপ পাইথন িব েত কটা ভাষাই িস ত লখা ধ ন আপিন িনশ ইটািলয়ান বা পতিগজ ভাষা িশখেত চাে ন তার আেগ ল ািটন শখা িক আপনার কােজ আসেব
নািক না যেহত ল ািটন ভাষা থেকই এসকল ভাষার উৎপি িস শখা আপনােক িস ভাষায় তির করা পেরা া িমং ভাষার পিরবারেক বঝেত সাহায করেব ndash আপনােক দেব াধীনতা মািটন িরিটর তিরকত BCPL থেক াগািমং ভাষা খেক B াগািমং ভাষা ডেভেলাপ করা হয় এবং সখান থেক ১৯৭০ সােল আেমিরকার বল ল াবেরটিরেত ডিনস িরিট নামক াগামার এই C ভাষািট ডেভেলাপ কেরন ১৯৮৩ সােল আেমিরকার National Standard Ins স সমেয়
চিলত Unix C এর জেন মান (Standard) িনধারণ কের দন C াগিমং এর ে অেনক েলা পথ রেযেছ যমন ANSI C Borland C Turbo C Microsoft C etc এ েলার মেধ ১ম িট হেলা Standard এবং বািকরা এই Standard অনসরণ কের আবার এরা েত েক এক একিট Compiler Compiler হেলা এমন একিট াগাম যা Source Code ক Object Code এ Convert কের বশিকছ ধােপ এই Compile স হয়-
1 Source Code 2 Syntax Analyzer 3 Semantic Analyzer 4 Intermediate Code Generator 5 Code Optimizer 6 Code Generator 7 Object Code
কন িস এবং কন এেস িল ভাষা নয়
এেস িল ভাষা আপনােক গিত এবং িসে েমর উপর সেবা িনয় ণ দান করেলও বহনেযাগ নয় িস িঠক এই যায়গাটােতই আলাদা এিট যমন িসে েমর উপর যেথ িনয় ন দয় তমিন বহনেযাগ ও
- 6 -
বইঃ
এই বইটা ছাড়াও কাম ামান িনটেনর বাংলা একটা বই আেছ ldquoসবার জন িসrdquo তািমম শাহিরয়ার সবীন এর ও একিট বাংলা বই আেছ আর ইংেরিজর জন হেল ldquoherbert schildtrdquo এর ldquoteach yourself crdquo িস শখার জন খব ভাল একটা বই C াগািমং িশখেত আ হী নতন
ব বহারকারীেদর জেন দরকারী বইেয়র তািলকাসমহ
01 Schaumsrsquos Outline of Programming wtih C By Byron Gotteried 02 Teach Yourself C By Herbert Schildt 03 Turbo CC++ The Complete Reference By Herbert Schildt
Schaums Series আেরকটা িকনেত পােরন Herbert Schildt Teach Yourself C হাবাড িশে র বইেয় িত চ া াের অনশীলনীেত চর এ ারসাইজ আেছ স েলার সমাধানও দওয়া আেছ বইেয়র পছেন এিট খবই সাহায করেব আপনােক
এছাড়া httpacmuvaesproblemset চ া ক ন উদাহরণ আর অনশীলনী াকিটস কের িশেখ ফলন িস
--------------------------------------------------------------------------------------
- 7 -
অধ ায় ৩
সব া ামই িকছ না িকছ া াম িনেয় কাজ কের া ােম ব বহােরর জন ডটােক থেম মমিরেত সংর ণ করা হয় এবং েয়াজেন মমির থেক ডটা উে ালন কের কােজ লাগােনা
হয় িন পযােয়র ভাষায় মমিরেত ডটা রাখার জন সরাসির িবট বাইট এবং মমির এ াে স ব বহার করা হয় যা বড় বড় া ােমর জন অত জিটল এবং ক কর কারণ ল ল এ াে েসর মেধ কখন কান এ াে েস কান ডটা রাখা হল তা মেন রাখা অস ব এই অসিবধা দর করার জন এবং া ামেক সহজ করার লে উ পযােয়র ভাষায় িবট বাইট এর পিরবেত ভিরেয়বল ব বহার করা হয়
ভিরেয়বলঃ ভিরেয়বল হল মমিরর লােকশেনর নাম বা িঠকানা া ােম যখন কান ডটা িনেয় কাজ করা হয় াথিমক ভােব স েলা কমিপউটােরর যােম অব ান কের পরবতী সমেয়
স েলা পন ার বা পনব বহােরর জন ঐ নাম বা িঠকানা জানা েয়াজন হয় সতরাং া ােম ডটা িনেয় কাজ করার সময় িতিট ডটার জন একিট ভিরেয়বল ব বহার করােত হয় ভিরেয়বল ব বহার না কের ও া ােম িবিভ ধরেনর ডটা যমন ক াের ার ি ং পনসংখ া
ভ াংশ তথা দশিমক সংখ া সােয়ি িফকসংখ া তখা এ েপােনি য়াল সংখ া িনেয় কাজ করা যায়
ডটা টাইপ ও মিডফায়ারঃ িস ভাষায় ভিরেয়বল ব বহার কের ডটা সংর েণর জন ভিরেয়বল ঘাষণার সময় ডটার ধরন অনযায়ী উপয ডটা টাইপ ও ঘাষণা করেত হয় এ প ব ব ত
চারিট মৗিলক বা িব ইন ডটা টাইপ হলঃ char integer float double চারিট মৗিলক ডটা এর জন ঘািষত ভিরেয়বেলর জন সংরি ত মমির পিরসর ডটার কিত এবং ধারণ
মতার একটা সীমাব তা রেয়েছ যমনঃ একিট char টাইপ ভিরেয়বেলর জন ৮ িবট বা ১ বাইট জায়গা সংর ণ কের যােত ০ থেক ১২৭ মানিবিশ মাট ১২৮িট ব াের ােরর য কান একিট মান রাথা যায়
এছাড়াও িস ত আরও ৪িট মিডফায়ার আেছ
স েলা হলঃ- singed unsigned short long
সাধারনত char টাইপ ভিরেয়বেলর জন singed ও unsigned মিডফায়ার এবং টাইপ
ভিরেয়বেলর জন singed unsigned short ও long মিডফায়ার float ও double টাইপ ভিরেয়বেলর জন short এবং long মিডফায়ার ব ব ত হয়
এসব ডটার িবট ও মােনর র জানা খব জ রী
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 6 -
বইঃ
এই বইটা ছাড়াও কাম ামান িনটেনর বাংলা একটা বই আেছ ldquoসবার জন িসrdquo তািমম শাহিরয়ার সবীন এর ও একিট বাংলা বই আেছ আর ইংেরিজর জন হেল ldquoherbert schildtrdquo এর ldquoteach yourself crdquo িস শখার জন খব ভাল একটা বই C াগািমং িশখেত আ হী নতন
ব বহারকারীেদর জেন দরকারী বইেয়র তািলকাসমহ
01 Schaumsrsquos Outline of Programming wtih C By Byron Gotteried 02 Teach Yourself C By Herbert Schildt 03 Turbo CC++ The Complete Reference By Herbert Schildt
Schaums Series আেরকটা িকনেত পােরন Herbert Schildt Teach Yourself C হাবাড িশে র বইেয় িত চ া াের অনশীলনীেত চর এ ারসাইজ আেছ স েলার সমাধানও দওয়া আেছ বইেয়র পছেন এিট খবই সাহায করেব আপনােক
এছাড়া httpacmuvaesproblemset চ া ক ন উদাহরণ আর অনশীলনী াকিটস কের িশেখ ফলন িস
--------------------------------------------------------------------------------------
- 7 -
অধ ায় ৩
সব া ামই িকছ না িকছ া াম িনেয় কাজ কের া ােম ব বহােরর জন ডটােক থেম মমিরেত সংর ণ করা হয় এবং েয়াজেন মমির থেক ডটা উে ালন কের কােজ লাগােনা
হয় িন পযােয়র ভাষায় মমিরেত ডটা রাখার জন সরাসির িবট বাইট এবং মমির এ াে স ব বহার করা হয় যা বড় বড় া ােমর জন অত জিটল এবং ক কর কারণ ল ল এ াে েসর মেধ কখন কান এ াে েস কান ডটা রাখা হল তা মেন রাখা অস ব এই অসিবধা দর করার জন এবং া ামেক সহজ করার লে উ পযােয়র ভাষায় িবট বাইট এর পিরবেত ভিরেয়বল ব বহার করা হয়
ভিরেয়বলঃ ভিরেয়বল হল মমিরর লােকশেনর নাম বা িঠকানা া ােম যখন কান ডটা িনেয় কাজ করা হয় াথিমক ভােব স েলা কমিপউটােরর যােম অব ান কের পরবতী সমেয়
স েলা পন ার বা পনব বহােরর জন ঐ নাম বা িঠকানা জানা েয়াজন হয় সতরাং া ােম ডটা িনেয় কাজ করার সময় িতিট ডটার জন একিট ভিরেয়বল ব বহার করােত হয় ভিরেয়বল ব বহার না কের ও া ােম িবিভ ধরেনর ডটা যমন ক াের ার ি ং পনসংখ া
ভ াংশ তথা দশিমক সংখ া সােয়ি িফকসংখ া তখা এ েপােনি য়াল সংখ া িনেয় কাজ করা যায়
ডটা টাইপ ও মিডফায়ারঃ িস ভাষায় ভিরেয়বল ব বহার কের ডটা সংর েণর জন ভিরেয়বল ঘাষণার সময় ডটার ধরন অনযায়ী উপয ডটা টাইপ ও ঘাষণা করেত হয় এ প ব ব ত
চারিট মৗিলক বা িব ইন ডটা টাইপ হলঃ char integer float double চারিট মৗিলক ডটা এর জন ঘািষত ভিরেয়বেলর জন সংরি ত মমির পিরসর ডটার কিত এবং ধারণ
মতার একটা সীমাব তা রেয়েছ যমনঃ একিট char টাইপ ভিরেয়বেলর জন ৮ িবট বা ১ বাইট জায়গা সংর ণ কের যােত ০ থেক ১২৭ মানিবিশ মাট ১২৮িট ব াের ােরর য কান একিট মান রাথা যায়
এছাড়াও িস ত আরও ৪িট মিডফায়ার আেছ
স েলা হলঃ- singed unsigned short long
সাধারনত char টাইপ ভিরেয়বেলর জন singed ও unsigned মিডফায়ার এবং টাইপ
ভিরেয়বেলর জন singed unsigned short ও long মিডফায়ার float ও double টাইপ ভিরেয়বেলর জন short এবং long মিডফায়ার ব ব ত হয়
এসব ডটার িবট ও মােনর র জানা খব জ রী
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 7 -
অধ ায় ৩
সব া ামই িকছ না িকছ া াম িনেয় কাজ কের া ােম ব বহােরর জন ডটােক থেম মমিরেত সংর ণ করা হয় এবং েয়াজেন মমির থেক ডটা উে ালন কের কােজ লাগােনা
হয় িন পযােয়র ভাষায় মমিরেত ডটা রাখার জন সরাসির িবট বাইট এবং মমির এ াে স ব বহার করা হয় যা বড় বড় া ােমর জন অত জিটল এবং ক কর কারণ ল ল এ াে েসর মেধ কখন কান এ াে েস কান ডটা রাখা হল তা মেন রাখা অস ব এই অসিবধা দর করার জন এবং া ামেক সহজ করার লে উ পযােয়র ভাষায় িবট বাইট এর পিরবেত ভিরেয়বল ব বহার করা হয়
ভিরেয়বলঃ ভিরেয়বল হল মমিরর লােকশেনর নাম বা িঠকানা া ােম যখন কান ডটা িনেয় কাজ করা হয় াথিমক ভােব স েলা কমিপউটােরর যােম অব ান কের পরবতী সমেয়
স েলা পন ার বা পনব বহােরর জন ঐ নাম বা িঠকানা জানা েয়াজন হয় সতরাং া ােম ডটা িনেয় কাজ করার সময় িতিট ডটার জন একিট ভিরেয়বল ব বহার করােত হয় ভিরেয়বল ব বহার না কের ও া ােম িবিভ ধরেনর ডটা যমন ক াের ার ি ং পনসংখ া
ভ াংশ তথা দশিমক সংখ া সােয়ি িফকসংখ া তখা এ েপােনি য়াল সংখ া িনেয় কাজ করা যায়
ডটা টাইপ ও মিডফায়ারঃ িস ভাষায় ভিরেয়বল ব বহার কের ডটা সংর েণর জন ভিরেয়বল ঘাষণার সময় ডটার ধরন অনযায়ী উপয ডটা টাইপ ও ঘাষণা করেত হয় এ প ব ব ত
চারিট মৗিলক বা িব ইন ডটা টাইপ হলঃ char integer float double চারিট মৗিলক ডটা এর জন ঘািষত ভিরেয়বেলর জন সংরি ত মমির পিরসর ডটার কিত এবং ধারণ
মতার একটা সীমাব তা রেয়েছ যমনঃ একিট char টাইপ ভিরেয়বেলর জন ৮ িবট বা ১ বাইট জায়গা সংর ণ কের যােত ০ থেক ১২৭ মানিবিশ মাট ১২৮িট ব াের ােরর য কান একিট মান রাথা যায়
এছাড়াও িস ত আরও ৪িট মিডফায়ার আেছ
স েলা হলঃ- singed unsigned short long
সাধারনত char টাইপ ভিরেয়বেলর জন singed ও unsigned মিডফায়ার এবং টাইপ
ভিরেয়বেলর জন singed unsigned short ও long মিডফায়ার float ও double টাইপ ভিরেয়বেলর জন short এবং long মিডফায়ার ব ব ত হয়
এসব ডটার িবট ও মােনর র জানা খব জ রী
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 8 -
ডটা টাইপ িবট সংখ া ডটা বা ভিরেয়বেলর মােনর র Char 8 -128harr 127 বা -27 harr 27-1 Signed char 8 -128harr 127 বা -27 harr 27-1 Unsigned char 8 0 harr 255 বা 0 harr (28-1) Integer 16 -32768 harr32767 বা -215harr 215-1 Short integer 16 -32768 harr32767 Unsigned int 16 0 harr 65535 বা 0 harr ( 216-1) Long integer 32 - 231 harr 231-1 Float 32 34xE-38 harr 34xE38 Long float 64 17xE-308 harr17xE308 Double 64 17xE-308 harr17xE308 Long double 80 34xE-4932 harr 11xE4932
ভিরেয়বল ঘাষনার িনয়মাবলীঃ
একই ফাংশেন একই নােম ই বা তেতািধক ভিরেয়বল ঘাষণা করা যায় না ভিরেয়বল নামকরেন কবল আলফােবিটক ক াের ার (a z) (AhellipZ) িডিজট (0 ৯)
এবং আ ারে ার(_)ও ডলার িচ ($) ব বহার করা যায় আ ারে ার ও ডলার িচ
ব তীত অন কান শাল ক াের ার ( যমনঃ +- ইত ািদ ব বহার করা যায় না) যমনঃ my_car My$Roll বধ িক mycar MyampRoll অৈবধ
ভিরেয়বল নােমর মেধ কান ফাকা ান থাকেত পাের না যমনঃ Myname Myhouse
বধ My name My house অৈবধ ভিরেয়বেলর নাম িডিজট বা অংক িদেয় হেত পাের না িস া ােম বড় হােতর অ র এবং ছাট হােতর অ র আলাদ অথ বহন কের িস
া ােম ছাট হােতর অ র ব বহার করেত হয় তেব িবেশষ ে বড় হােতর অ র ব বহার করা হয়
কান কীওয়ােডর নাম ভিরেয়বল িহেসেব ব বহার করা যায় না ভিরেয়বল নামকরেন য কান সংখ াক ক াের ার ব বহার করা যায় তেব ভিরেয়বেলর
নাম ৩১ ক াের ােরর মেধ হওয়া ভাল
---------------------------------------------------------------------------------------------------------------------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 9 -
অধ ায় ৪
ভিরেয়বেলর আউটপট অপােরশনঃ- া াম ডটা তথা ভিরেয়বেলর মান দশন করােক আউটপট অপােরশন বেল িস া ােম কান ভিরেয়বেলর মান মিনটেরর পদায় দশেনর জন printf ( ) putc ( ) puts ( ) putchar ( ) ভিত লাইে ির ফাংশন ব বহার করা হয়
printf ( ) ফাংশনঃ- printf ( ) একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh এর জন
া ােমর েত includeltstdiohgt টেমে র মাধ েম মাধ েম এই হডার ফাইল সংয করা হেয়েছ printf ( ) ফাংশেনর থম ব নীর মেধ ডবল কােটশেনর (ldquo rdquo) মেধ যা লখা হয়
া ােম িনবােহ তা মিনটর ীেন তথা আউটপট উইে ােত দিশত হয় িনেচ একিট া াম দওয়া হলঃ
এখােন printf ( ) ফাংশেনর ডবল কােটশেনর (ldquo rdquo) মেধ Welcome to C Programming লখা হেয়েছ যখন া ামিট রান করা হেয়েছ তখন আউটপট এ সই লখািট দিখেয়েছ া ামিট ত কান ভল আেছ িকনা তা দখার জন Alt + F9 চাপন আর া ামিট রান করার জন Ctr +
F9 চাপন তাহেলই া ামিট রান হেব
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 10 -
ব াক াশ ক াের ারঃ- িবেশষ িকছ ক াের ার আেছ ( যমনঃ- ldquon r t ইত ািদ) য েলা printf
( ) ফাংশেনর ডাবল কােটশেনর (ldquo rdquo) এর মেধ যভােব রাখা হয় ব সভােব ফলাফল কাশ কের না এখােন িকছ ব াক াশ ক াের ােরর বণনা দওয়া হলঃ-
ব াক াশ ক াের ার ব বহার n আউটপট পরবতী (নতন) লাইেনর েত দশেনর জন r আউটপট পরবতী লাইেনর েত একই কলাম বরাবর
দশেনর জন t আউটপট ডান িদেক এক ট াব দ ে দশেনর জন ldquo ডাবল কােটশন ক াের ার দশেনর জন a সংেকত দােনর জন
এখােন n দওয়ার জন নতন একিট লাইন তির হেয়েছ
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 11 -
ফরম াট িসফায়ারঃ- printf ( ) ফাংশন ারা কান ডটা বা ভিরেয়বেলর মান দশেনর জন িনিদ ফরম ােটর কত েলা ক াের ার ব ব ত হয় য েলােক ফরম াট িসফায়ার বলা হয় যমনঃ int টাইপ ডটা বা ভিরেয়বেলর মান দশেনর জন ফরম াট িসফায়ার হল i বা d char টাইপ ডটার জন c ইত ািদ
ফরম াট িসফায়ার ব বহার c Charটাইপ মান ইনপটআউটপট করার জন d Integer টাইপ মান ইনপটআউটপট করার জন f Float টাইপ মান ইনপটআউটপট করার জন lf Double টাইপ মান ইনপটআউটপট করার জন o Octal টাইপ মান ইনপটআউটপট করার জন
এই া ামিট ারা a b ও c যাগ করা হেয়েছ
িস া ােম পণসংখ া ( যমনঃ ২৩ ৫৬০০ -৯৮৪৫ ইত ািদ) িনেয় কাজ করার জন integer
টাইেপর ভিরেয়বল ব বহার করা হয় int টাইপ ভিরেয়বল ঘাষনার জন int কীওয়াড ব ব ত হয়
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 12 -
এখােন
includeltstdiohgt
includeltconiohgt
উপেরর ই লাইন হেলা হডার ফাইল
main()
ি তীয় ব নী দওয়ার পর া ােমর বিড লখা হয়
Int sum
Int িদেয় বাঝােনা হে য আমার য ডাটা িনেয় কাজ করব তা পণ সংখ া হেব বা int এবং sum
ারা ভিরেয়বল বাঝােনা হেয়েছ যার মেধ যাগফলিট থাকেব
Int abc
a b ও c এর মান int টাইেপর হেব তা বাঝােন হেয়েছ এবং পের এেদর মান দওয়া হেয়েছ আপিন চাইেল এক সােথই ভিরেয়বেলর মান ঘাষনা করেত পােরন আর িত া ােমর শেষ অবশ ই সিমকলন () িদেত হেব না হেল া ােম ভল ধরেব
এখােন a b ও c ভিরেয়বেলর পের আলাদা ভােব
a=32
b=23
c=33 মান নওয়া হেয়েছ অাপিন চাইেল একসােথ মান িনেত পােরন বা int a=32b=23c=33
sum=a+b+c
এই লাইন ারা a b ও c ক যাগ কের sum এর মেধ থাকেব তা দখােনা হেয়েছ
printf(ldquodrdquo sum)
এই লাইেনর জন আউটপেট বা মিনটের a b ও c এর যাগ ফল দখােব d দওয়া হেয়েছ ভিরেয়বল েলা হল int টাইেপর সই জন
getch()
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 13 -
এই ফাংশন ারা আউটপেট মান অেনক ণ ধের রাখার জন দওয়া হয় যিদ এই ফাংশন
দওয়া না হত তাহেল ও আউটপেট রজা দখাত তেব এত কম সময় য বাঝা যত না তাই এই ফাংশন ব বহার করা হয়
আর া াম শষ করেত ি তীয় ব নী ব বহার করা হয়
িনেচ একিট া াম দওয়া হল আশা রািখ সহেজই বঝেত পারেবন
---------------------------------------------------------------------------------------------------------------------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 14 -
অধ ায় ৫
Clrscr() ফাংশনঃ- এিট সাধারনত ব বহার করা হয় একিট া ােম অেনক বার ভিরেয়বল পিরবতন কের া াম রান করার জন া ামিট রান করার ফেল তার রজা বা ফলিট আউটপেট থেক যায় বার বার যিদ া ামিট রান করা হয় তাহেল রজা িট পর পর দখায় এ সমস া সমাধান করার জন এই ফাংশনিট ব বহার করা হয়
Scanf() ফাংশনঃ- Scanf() একিট লাইে ির ফাংশন যার হডার ফাইল হল stdioh া ােমর েত একবার includeltstdiohgt টেমে র মাধ েম এই হডার ফাইল সংয করা থাকেল
পনরায় েয়াজন হয় না scanf() ফাংশন ব বহার কের া ােম িনবাহকালীন সমেয় কীেবাড হেত য কান ভিরেয়বেলর মান হণ করা যায় ফেল া ােম ব ব ত ভিরেয়বেলর মান িনধারন সহজ হয় scanf() ফাংশন ব বহার কের কান ভিরেয়বেলর মান িনধারেনর ফরম াট হলঃ
scanf(ldquoF_Srdquo ampVariable Name)
এখােন F_S হল ফরম াট িসফায়ার যা ভিরেয়বল কান ধরেনর তা কাশ কের Variable
Name হল আেগ ঘািষত কান ভিরেয়বেলর নাম এবং amp ক এ াে স অপােরটর বলা হয় যা ভিরেয়বেলর জন গহীত মান মমিরর ঐ লােকশেন রণ কের এখােন scanf() ফাংশন ব বহােরর একিট নমনা দওয়া হলঃ
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 15 -
int n
এখােন n একিট integer ভিরেয়বল
clrscr()
আেগই বলা হেয়েছ clrscr() িট কােজ ব বহার করা হয
printf(ldquoEnter a positive integer numberrdquo)
printf ফাংশেনর ডাবল কােটশেনর মেধ যা থােক তাই কাশ কের এখােন Enter a positive
integer number লখািট আউটপেট কাশ করেব
scanf (ldquodrdquoampn)
এই ফাংশনিট ারা উপেরর বােক র বা লখার ইনপট কী বাড থেক হন করা হেব
Printf(ldquonYou have entered i (in decimal formats)rdquon)
Printf থাকার ফেল এর িভতের লখািট কাশ করেব আমরা আেগই জািন য n মােন নতন
একিট লাইন তির করা এখােনও নতন লাইন তির হেব You have entered এর পের decimal
number এর জন i ফরম াট িসফায়ার ব বহার করা হেয়েছ এবং কমা িদেয় n লখা হেয়েছ যােত কের n এর ফরম াটিট পিরবতন কের
পর পর ২িট লাইন একই রকম
এর পর getch() এর কাজ আেগই বলা হেয়েছ
িদেয় া াম শষ করা হেয়েছ
---------------------------------------------------------------------------------------------------------------------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 16 -
অধ ায় ৬ C fundamental
বিসক কনেস ইেতামে পববতী অধ ায় থেক আপনারা িকছ িশেখেছন তবও আবার একট ঝািলেয় িনন
Variable Variable মােন চলকআপিন যখন কান া াম করেবন তখন িবিভ ধরেনর মান এর েয়াজন পড়েব যা variable এ জমা থাকেব যমন a=5b=3
এখােন ab ইিট variable যার মান যথা েম ৫ ও ৩
Variable িলখার িনয়ম ১-gt A-Z a-z 0-9 এবং lsquo_rsquo যেকান character এর মাধ েম variable declare করা যায় ২-gt তেব থম character িহেসেব number ব বহার করা যায় না
Valid variable names _asdf name value i j etc (all combination of valid character set)
Invalid variable names 3name ( থম character এ Number ব বহার করা হেয়েছ) data ( is not a valid character)
কান keyword ক variable এর নাম িহেসেব িলখা যায় না যমনঃ case break int float double এ অ িকছ keyword রেয়েছআে আে তা জেন যােবন
Data type Data type িনেয়ও পেব আেলাচনা হেয়েছ চাইেল দেখ িনেত পােরন কমন ডাটাটাইপঃ int -gt পণসংখ া(integer) জমা রাখার জন float -gt ভ াংশ(floating) রাখার জন char -gt character জমা রােখ
ASCII Character set এিটও আপনারা পেব দেখেছন আমােদর কীেবাড এর সকল কী এর corresponding িকছ value রেয়েছ যমন A এর ASCII value 65 অথাৎ আমরা যখ কান
variable এ character lsquoArsquo টা জমা রািখ তখন ঐ variable এ ৬৫ জমা থােক
Statement আমরা যখন কান া াম িলখব তখন িবিভ ধরেনর কাজ করব যমন এক variable এর সােথ আেরক variable যাগ করা এবং তা অন কান variable এ জমা রাখা
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 17 -
A=3 A variable e 3 রাখা c=A+3 c variable e A এর সােথ 3 যাগ কের c variable এ রাখাএেত A এর value পিরবিতত হয় না
উে খ C language এ সকল statement এর পর দয়া লােগ (double forward slash) এর পর যা িলখা হয় তা কেম িহেসেব গন হয়
আপাতত যা দখালাম তা িদেয় া াম িলখা করা যায়
আমােদর থম া াম
এখােন েত কিট statement এর পর কেম করা আেছ এখােন ব ব ত int main() এর int এর কাজ িক এবং return 0 statement এর কাজ function আেলাচনা করার সময় বঝেত পারেবন
া ামিট compile ক ন আিম CodeBlocks IDE ব বহার কির compile এর জন ctrl+f9 চাপেত হয় া াম এ কান ভল থাকেল তা িনেচ দখােব
রান করেত ধ f9 চাপন
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 18 -
Output
আপনারা ইেতামেধ ই d এর কাজ বঝেত পারেছন এিট variable var এর মান িদেয় পিরবিতত হেয়েছ
এমন আরও অেনক specifier আেছ যমনঃ
c-gt shows a single character f-gt shows float value upto six decimal digit s-gt shows a string
String স েক ধারনা পােবন array িনেয় আেলাচনা করার সময়
এবার ঝটপট কের যা িশেখেছন তা িদেয় িনেচর া াম েলা কের ফলন
1 আউটপট ীন এ আপনার নাম ি ক ন 2 একিট variable এ 5 and আেরকিট variable এ 10 রেখ যাগ িবেয়াগ ন ভাগ ক ন
এবং িতবার ফলাফল আউটপট ীন এ ি ক ন
Operator +- এ েলা সাধারন িকছ mathematical operator C language এও এেদর ব বহার
পেবর মতেযমন এর কাজ +- এর আেগ হেব এখােনও ােকট এর ব বহার রেয়েছ তেব expression এ [] ব বহার হয় না ধ () ব ব ত হয় িকছ arithmetic expression
A+B+C (A+B)C (A+B)(C+D) (A-(B(C+D))) hellipetc
agrave modulus operator C=AB এই expression এ A ক B ারা ভাগ করেল য ভাগেশষ থাকেব তা C ত জমা রাখা C=57010 C=A5
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 19 -
Modulus Operator এর একিট িনয়ম হেলা operator এর আেগ বা পেড় য variable বা ভ ব ব ত হয় তা অবশ ই integer type (int) হেত হেব
C=A51 an error
float A=51 int C
C=A2 an error কারন A variable টা float type
Assignment Operator Assignment operator হে lsquo=rsquo সাইন general form of assignment operator identifier (variable) = expression
Variable ক identifier ও বলা হয়
A=33 A=B A=33B-C
এই সব েলা statement এ কান একিট value A variable এ জমা হে value িনভর কের expression এর valuersquoর উপর
Type Casting িবিভ গািনিতক কাজ করার পেব আমােদর type casting স েক জানা দরকার ধ ন একিট integer type (int) variable এর মেধ একিট float type variable এর value assign
করেত চান তখন int variable এর মেধ float variable এর মােনর ধমা integer part টা জমা হয়
Consider following statements in a program
int a float b=53 a =b এই statement এর পর a এর মান হেব 5
b=a এই statement এর পর a এর মান হেব 500
এ েলা হেলা auto type casting তেব কখেনা কখেনা manually typecast করা লাগেত পাের int acd float b=53 c=503
a=cb এই লাইন টা ভল কারন b float type variable
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 20 -
to do that task d=(int) b manual type casting a=cd
এখােন d variable এ মান রাখার সময় manual type casting করা হেয়েছ এই কাজিট আরও অেনকভােব করা যায়েযমনঃ
int ac=505 float b=53
a=c(int)b doing the same thing
Relational and Logical operator mathematical operator ছাড়াও C language এ relational and
logical operator রেয়েছ যা আমােদর control statement ও আরও িবিভ কােজ পরবতীেত লাগেব
Relational operator Meaning
lt less than gt greater than gt= greater or equal to lt= less or equal to == equal to = Not equal to
Logical operator Meaning
ampamp And || Or
কানিকছ তলনা করার জন এই operator েলা ব ব ত হয় ব বহার আপনারা control
statement এ পােবন
Unary Operator mathematical operator েলােক binary operator ও বলা হয়Unary operator
েলা একিটমা variable এর উ কাজ কের এ েলা হল ++ ndash ndash
Variable এর আেগ বা পের ব বহার করা হয়
int varr=5
varr++ অথবা ++varr এই statement এর meaning varr=varr+1 varr এর মান এক বাড়ােনা
varr- - অথবা - -varr এই statement এর meaning varr=varr-1 varr এর মান এক কমােনা
Conditional Operator এটাও আমরা control statement এর সময় দখব
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 21 -
Data Input And Output
Input নয়ার িকছ ফাংশনঃ scanf()gets()getchar()getch()
scanf() এই ফাংশনটা িদেয় int float double single character string input িহেসেব নয়া যায়
example টা দখন
এখােন উে খেযাগ ব াপার হে scanf()function এর মেধ amp সাইন ব বহার যখন কান variable declare করা হয় তখন র াম এ ঐ variable এর জন জায়গা তির হয় input নয়ার সময় C ত ঐ memory location উে খ করা লােগ তাই ampসাইন দয়া হেয়েছ যিদ amp সাইন ব বহার না কেরন তেব া াম compile করেলও কান ভল ধরেব না িক া াম রান কের ইনপট দয়ার সময় া া াশ করেব এেক runtime error ও বলা হয় আউটপট এ ধমা ভিরএবল এর নাম িদেলই হয়েসখােন amp সাইন ব বহার করা লােগ না
scanf() function এর আলাদাকারী(separator) কী হে Enter ও space scanf() এ intfloatdouble
ইনপট দয়ার সময় না ার ইনপট না দয়া পয স wait কের িক charater(char)type data
ইনপট নয়ার সময় space বা enter এর ASCII value িনেয় নয়
getchar() function কান একিট character (single) ইনপট নয়ার জন ব বহার হয় তাই ততীয় ক এ single character ইনপট নয়ার আেগ getchar() ব বহার করা হেয়েছ float এবং character
এর মধ বতী separator টা নয়ার জন getchar() টা ব বহার না করেল আউটপট এর character এ িকছ দখােব না
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 22 -
Output with getchar() function
Typing 512 then enter
Type 3565 then enter
3565 টাইপ করার পরবতী এ ার টা getchar() function এ ঢেকেছ তারপর একিট character type
কের এ ার িদন
া াম এর শষ লাইন return 0 execute কের া াম শষ হল
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 23 -
printf() ফাংশন এ একািধক ভিরএবল এর আউটপট একসােথ দখার জন িতিট specifier
এর জন ভিরএবল এর নাম মানসাের িলখেলই হয়
printf(ldquovar1=d var2=f var3=cnrdquo var1var2var3)
char type variable এর specifier হল c যিদ c এর জায়গায় d ব বহার করা হয় তেব ঐ variable এর ASCII value দখােব
char ch=rsquoArsquo printf(ldquoch=drdquoch)
---------------------------------------------------------------------------------------------------------------------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 24 -
অধ ায় ৭
Control Statement আমরা পববতী অধ ােয় relational operator ও logical operator এর কথা বেলিছলাম এর িকছ বিসক এখন বলা েয়াজন এ েলা জানা থাকেলই control statement এর কাজ খব সহজ হেয় যােব যেকান logical expression True হেল 1 return কেরfalse হেল 0 return
কের ধ ন ইিট ভিরএবল a b যার value হে ৫ ও ৭ িকছ logical expression ও তার interpretation
Expression TrueFalse Value agtb T 1 agt=b T 1 altb F 0 alt=b F 0 a==5 T 1 a=5 F 0
Logical operator And(ampamp) Or(||) বাঝার জন আমােদর িনেচর টিবলটা বাঝা লাগেব
AND(AampampB) Expression A Expression B AND output True True True True False False False True False False False False
And operator এর ে ইিট expression True হেলই ধ expression টা true হয়
OR(A||B) Expression A Expression B OR output True True True True False True False True True False False False
OR operator এর ে ইিট expression False হেলই ধ expression টা False হয় Expression
এর ে আরও একিট কথা বেল নয়া দরকারএকট আেগ আমরা logical expression দেখিছ এ হয়েতাবা ধ variable ও হেত পাের সে ে ভিরএবল এর ভ ালর উপর িনভর কের expression true না false variable এর ধমা ণ (0) মােনর জন expression false অন যেকান ভ ালর জন ই expression true Suppose A=12
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 25 -
Expression TrueFalse Value A True 1 A ampamp 5 True 1 A ampamp Alt10 False 0 A || Alt10 True 1
এতটক বঝেত পারেল control statement একদম সহ হেয় যােব control statement এর ধান িফচার েলা
1 Conditional operator 2 If-else 3 Looping agrave for loop while loop do-while loop 4 Switch
Conditional Operator General form of conditional operator expression1 expression2 expression3 এর মল িবষয় হে expression1 True হেল expression2 execute হেব false হেল
expression3 execute হেব
if-else if-else হল programming এর মল এিট তার নাম হেতই বাঝা যায়
General form if(expression) statement else statement
if এর statement true হেল থম statement execute করেব false হেল else এর statement execute
হেব
if তার িনেচর একিট statement কভার কের যিদ এক এর অিধক statement হয় সে ে compound statement এর মত ােকট এর মেধ িলখা লাগেব
simple statement i=5 j=var a=a+b etc compound statement
i=5 j=var c=a-20
Example of if-else using compound statement
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 26 -
int i=20 if(igt50) printf(ldquoi=dnrdquo i) i=i2 else printf(ldquoi=dnrdquo i) i=i3
printf(ldquoi=dn)
Output i=20 i=60
else ছাড়াও ধমা if ব বহার করা যায় if(expression) statement else ifMultiple if condition general form if(exp) statement else if(exp) statement else if(exp) statement else statement
Nested if-else একিট if বা else এর statement এর মেধ আবার if-else িলখাই Nested if-else General Form
if(exp) if(exp) statement else statement else if(exp) statement else statement
---------------------------------------------------------------------------------------------------------------------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 27 -
অধ ায় ৮
Control Statement Looping
আেগর অধ ায় েলােত আমরা িবিভ logical expression ও if-else এর ব বহার দেখিছলামআজ আমরা দখব Looping তার আেগ আপনার কােছ looping এর েয়াজনীয়তা তেল ধরিছ
ধ ন আপনার দশটা সংখ া ইনপট িনেয় যাগফল দখা দরকার আপিন িক দশবার scanf()
function িদেয় ডাটা ইনপট িনেবন কখেনাই না কারন সংখ াটা দশ না হেয় আরও বড় হেত পাের এ ধরেনর সমস ার সমাধানই হে লিপং
িস ত িতন ধরেনর লিপং রেয়েছ
1 while Loop 2 do-while Loop 3 for loop
while loop General Form
while(condition) condition means Logical Expression
statement
statement
hellip
এখােন condition এর ভ াল যত ন True তত ন ও তার িনেচর সব েলা statement execute কের আবার while loop এর condition statement এ চেল যােব যখন condition এর ভ াল false হেব তখন তা while loop এর স ণ অংশ বাদ িদেয় িনেচ চেল যােব িনেচর ছিবটা দখন
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 28 -
এবার থেম উে খ করা বেলমটা দিখ
আমার দশবার loop চালােনা েয়াজন এবার িনেচর উদাহরনটা দখন
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 29 -
এখােন দখন condition এর ােন ilt10 রেয়েছ i এর ভ াল িতবার loop ঘরার পর এক কের বাড়েছ অথাৎ 0123456789 এর জন মাট দশবার লপ ঘরেব আর িতবারই একিট ভ াল ইনপট িনেয় তা স এর সােথ যাগ করেব লপ শেষ সই যাগফল আউটপট এ দখােব
OUTPUT
উে খ িতিট না ার এর আলাদাকারী িহেসেব স কাজ কেরেছ শেষ 10 িলখার পর এ ার চাপন আর আউটপট দখন
লিপং এর ে condition টা অিত পণ কননা condition যিদ সিঠকভােব কাজ না কের
মােন condition যিদ কখেনা false না হয় তেব তা infinity loop এ পড়েব
যমনঃ
int i=1
while(i==1)
printf(ldquoardquo)
printf(ldquoprogram ended successfullynrdquo)
উপেরর উদাহরনিট কের দখন এই া ামিট কখনই শষ হেব না যা া ামিটেক াশ করােব
While loop িনেয় আরও গভীের যাওয়ার আেগ আসন array স েক িকছটা ধারনা িনেয় নই
Array আমােদর আজেকর থম বেলমটা দখন সখােন আমরা দশবার ইনপট িনেয় তা sum
এর সােথ যাগ কেরিছ িক সখােন য না ার েলা ইনপট িনেয়িছলাম তা যিদ পরবতীেত েয়াজন হয় তা কাথাও জমা নই আর যিদ জমা করেতও চাই তা দশিট আলাদা variable
declare কের জমা রাখাও সিঠক সমাধান নয়
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 30 -
একই data type এর অেনক েলা value একই নাম িদেয় জমা করার জন ই array আমরা যখন কান variable declare কির তখন মমরীেত ঐ variable এর জন জায়গা তরী হয় আর array ত আিম য সাইজ িদেয় declare করব িঠক ততিট জায়গা তরী হেব
Array declare করার িনয়মঃ
Data-Type array-name[ size ]
ex int arr[5]
িনেচর ছিবটা দখন
যখন একিট ভিরএবল declare করা হয় তখন মমরীেত একিট জায়গা তরী হেয়েছ আর যখন ৫ সাইজ এর array declare করা হেয়েছ তখন ৫টা একই ধরেনর জায়গা তরী হেলা Array এর
ে index টা অিত পণ index িনেদশ কের আপিন array এর কান element টা access
করেবন
িস ল া েয়জ এর ে index হয় ন (zero) থেক তাই index number ন থেক size-1
পয size-1 এর বড় বা zero এর ছাট কান index ব বহার করা যােব না করা হেল তােক invalid indexing বলা হয় যা একিট runtime error তরী করেব
Accessing array element কান element access করার জন িলখেত হয়
Array_name[index_number]
Example
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 31 -
int nums[10]
nums[0]=5 0th ইনেড এ ৫ রাখা
nums[9]=25 9th এ ২৫ রাখা
num[10]=125 error-gt invalid indexing
এবার থ বেলমটা আবার কির array ব বহার কের
উদাহরনটা দখন
সবেশষ printf() এ array এর একিট element access কেরিছ ind ত অন ভ াল িদেয় অন ান element ও access করেত পাির
Character array character array এর আেরক নাম stringstring এর মেধ একািধক character
একসােথ থােক ldquohello worldrdquo rdquowhat is your namerdquo এ ধরেনর sentence রাখেত string type
ব ব ত হয় আর intfloat etc type array এর সােথ তমন পাথক নই character array এর েত ক element ও সাধারন arrayrsquoর মত access করা যায় সাধারন array ত একিট কের
element ইনপট দয়া লােগ িক charater array ত gets() or scanf() function ব বহার কের একসােথ ইনপট নয়া যায়
িনেচর উদাহরন েলা দখন
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 32 -
OUTPUT
ইনপটিট array ত িকভােব জমা হে তা িনেচর টিবেল দখন
Name lsquoBrsquo lsquoarsquo lsquokrsquo lsquoersquo lsquorrsquo lsquorsquo Index 0 1 2 3 4 5 6 7 8
Character array এর িবেশষ উে খেযাগ ব াপার হল সব েলা ক াের ার এর শেষ স lsquorsquo বা Null
automatically বিসেয় নয়int বা float type array ত যতিট element Size িঠক তত হেলই হয়িক character array ত সাইজ element এর চেয় এক বশী হওয়া লােগ
Character array এর ে ইনপট নয়া িনেয় িকছ কথাঃ
ধ ন আেগর example টায় ইনপট এ baker টাইপ না কের টাইপ করেলন baker md anas Output
িহেসেব িক নাম এর অংেশ baker ই দখােব কারন scanf() function er separator িহেসেব স ব ব ত হয়তাই নাম এর থম অংশিট ধ name array ত উঠেব এ ার কী এর আগ পয যিদ ইনপট িহেসেব array ত িনেত চান তেব scanf() function টা এভােব িলখন
scanf(ldquo[^n]rdquoname)
ততীয় ােকট এর র পর lsquo^rsquo( shift+6) sign এর পর যসকল character উে খ করেবন তাই separator িহেসেব কাজ করেবex
scanf( ldquo [^n-A]rdquoname) এখােন sepeartor হল enter A -
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 33 -
Character array ইনপট নয়ার জন আেরকিট function রেয়েছ তা হল gets
General form gets(char_array_name)
gets() function এর separator হল এ ার
replace the code scanf(ldquo[^n]rdquoname) by gets(name)
তারপর রান কের আউটপট দখন
array initialization
উপের আিম array ত ইনপট িনেয়িছarray element access ও কেরিছ আমরা চাইেল array
declare করার সময়ও মান িদেয় িদেত পাির
থম লাইন এর ে সাইজ ৫ এবং আমরা ৫িট element িদেয়িছডাটার ইনেড মানসাের থাকেব
num[0]=1num[1]=2etc
Float type এর declaration এর সময় সাইজ িদেয়িছ ১০০ িক initialize কেরিছ মা ২টাএে ে থম ২টা element ছাড়া বাকী েলা undefined থাকেব
f_num[0]=52 f_num[1]=35
Char array ত আমরা সাইজ দই নাই কান array declaration এ সাইজ declare না করেল তার সাইজ initialization এর জন যতটক দরকার িঠক তত হয় আর array declaration এর সময় initialize করেল অবশ ই সাইজ িদেত হেব
---------------------------------------------------------------------------------------------------------------------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 34 -
অধ ায় ৯ do-while loop General form
do statement statement statement helliphellip while(condition)
িচ িট দখন
া াম এ দখ i=sum=0
একািধক variable এ একই মান জমা করার জন এভােব িলখা হয়েযমনঃ i=j=k=sum=0 এই
লাইন এ সব েলা variable এর মান ন িদেয় replace হেব
sum += arr[i] এর মােন হল sum = sum + arr[i]
এ ধরেনর আরও িকছ short form রেয়েছ A += B ndashgt A = A + B A -= B ndashgt A = A ndash B A = B-C ndashgt A = A (B-C) etc
আর i++ হল i=i+1 ++ হল increment operator যা আমরা unary operator বলার সময় পেড়িছলাম
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 35 -
While এবং do-while এর একিট পন পাথক হল যখােন while একবার ও execute কের না সখােনও do-while একবার execute কের িলেখ দখনঃ while(0) zero printf(ldquoThis line will not printednrdquo)
এবং do printf(ldquothis line will printednrdquo) while(0) কারন হল do-while এ condition check হয় লপ এর শেষ
for loop General form for( initialization condition incrementdecrement) Statements
িনেচর ছিবটা দখন
আেগর া ামিট আবার for loop use কের করলাম
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 36 -
Nested loop nested if-else এর মতই একিট loop এর ভতের আেরকিট loop ই হে nested loop
k=0 for( i=0ilt10i++) for(j=0jlt10j++) k++ printf(ldquok=dnrdquok) Output আসেব k=100
Library Function Library function হল িস ল া েয়জ এ দয়া default functionrsquos Library
function স ফাংশ এর corresponding header file আেছ যমন আমরা যখন printf() scanf()
function ব বহার কেরিছ তখন আমােদর ldquostdiohrdquo header file declare করেত হেয়েছ যেকান default function া াম এ ব বহার করা হেল তার header file অবশ ই থেম declare করা লাগেব
িকছ পন লাইে রী ফাংশন
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 37 -
Function name Header file Work scanf(hellip) stdioh Input নয়া printf(hellip) stdioh Output দয়া abs(i) stdlibh Return the absolute value of i acos(d) mathh Return cos-1(d) (মান radian এ return কের not degree) asin(d) mathh Return sin-1(d) atan(d) mathh Return tan-1(d) Sin(i) mathh Return sin(d) (d এর মান radian এ degree এর জন
function টা use করেল degree ক radian এ convert
করেত হেব) cos(i) mathh Return cos(d) tan(i) mathh Return tan(d) floor(d) mathh Return only the integer part of a fractional number ceil(d) mathh Return the integer_part+1 of a fractional number getchar() stdioh Take a single character input isalnum(c) ctypeh Return true if character c is either A-Za-z0-9 isalpha(c) ctypeh Return true if character c is either A-Za-z isdigit(c) ctypeh Return true if character c is either 0-9 isupper(c) ctypeh Return true if character c is either A-Z islower(c) ctypeh Return true if character c is either a-z log(c) mathh Return ln(c) log10(c) mathh Return log(c) pow(basep) mathh Return basep sqrt(d) mathh Return d (square root of d) toupper(c) ctypeh
orstdlibh Return capital letter of a letter
tolower(c) ctypeh orstdlibh
Return small letter of a letter
strlen(name) stringh Return the length of a character array strcpy(name1name2) stringh Copy name2 to name1 strcmp(name1name2) stringh Return true if name1 and name2 are exactly same gets(name) stdioh Take charater array or string as input
---------------------------------------------------------------------------------------------------------------------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 38 -
অধ ায় ১০
Switch statement switch statement অেনকটা multiple if-else এর মত যা আমরা পেব দেখিছলাম তবও আেরকবার multiple if-else এর general form টা দখন
if(exp1) statement else if(exp2) statement else if(exp3) statement else statement
এবার switch statement এর general form টা দখন
switch(expression)
case expression1 statement1 statement2
helliphellip
case expression2 statement3
statement4
helliphellip
case expression3 statement5
statement6
helliphellip
default statement7
statement8
helliphellip
Switch এর মধ বতী expression এর য ভ াল হেব ঐ ভ ালটা case এর য ভ াল এর সােথ িমেল যােব তখন ঐ case এর statement হেত execute করা হেব
িনেচর উদাহরন ইটা দখন
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 39 -
উপেরর া াম এর switch Version
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 40 -
উপের উে িখত ইিট া াম এরই আউটপট একই হেব আপনারা া ামিট িলেখ রান কের আউটপট দখেবন switch এর ভ াল case এর য ভ ালর সােথ িমেল যায় ঐ case ক হেত statement execution হয়
Switch এর া ামিটেত উে খ িবষয় হল break statement এর ব বহার switch statement এ িতিট case এর ক এ সবেশষ statement টা হল break break statement যিদ িতিট ক এ
ব ব ত না হত তেব কান একিট case এর statement কের break statement না পাওয়া পয বা switch statement শষ না হওয়া পয সকল statement execute করেব
ধ ন ধমা ldquocase 0rdquo এর ক এর break statement টা নই সে ে 0 ইনপট িদেল আউটপট হেব
Output you entered zero you entered one
Break Statement break statement ব ব ত হয় ধানত লপ terminate করা বা switch থেক বর হেয় যাওয়ার জন যমন পববতী উদাহরনিটেত আমরা break statement ব বহার কেরিছ
For loop while loop do-while loop এর ে ও break statement ব ব ত হয় িনেচ for loop এর মেধ break statement ব বহার করা হল
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 41 -
লিপং এর ে যখন break statement execute হয় তখন য loop এর িভতের break statement িট িলখা হেয়েছ সই লপ এর মেধ আর কান কাজ না কের সরাসির বাইের চেল আেস
Continue statement continue statement ব ব ত হয় িবিভ লিপং া াম এর ে continue
statement যিদ কান while or do-while loop এর ে execute হয় তেব ঐ continue statement
এর পর সরাসির লিপং এর condition এর অংেশ চেল যায়আর যিদ for loop হয় সে ে for
loop এর incrementdecrement অংেশ চেল যায়
িনেচর উদাহরন েলা ব াপারটােক পির ার কের তলেব
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 42 -
Comma Operator comma operator সাধারনত এেকর অিধক expression একইসােথ উে খ করার জন ব ব ত হয় যমনঃ for loop এর initialization বা increment অংেশ একিট expression
িলখার সেযাগ রেয়েছ িক আমরা lsquorsquo operator ব বহার কের একািধক expression একইসােথ িলখেত পাির যমনঃ
অেনকসময় এভােবও ব বহার করা যেত পােরঃ
if(i==3) j=j+2k++
িকংবা
i=1 j=0 একই statement এ ইিট ভ ািরএবল initialize করা
--------------------------------------------------------------------------------------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 43 -
অধ ায় ১১
Function (ফাংশন)
ফাংশন হে একিট া াম সগেম যা িকছ সিনিদ কাজ কের থােক সকল িস া াম এক বা একািধক ফাংশন এর সম েয় গিঠত আমরা য main() declare কির ও তার মেধ িবিভ কাজ কির সই main() ও একিট ফাংশন ফাংশন িলখার িকছ িনয়ম রেয়েছ এ েলা িনেচ উে খ করিছ
ফাংশন িলখা ও Call করার িনয়মঃ
ফাংশন এর general form
return_type function_name(type1 par1type2 par2helliptypeN parN)
contents of function
return ret_value
type1 parameter1type2 parameter2hellip type_n parameter n হল parameter_list
এখােন return_type হে ফাংশনিট য ভ াল return করেব তার ডাটাটাইপ এখােন উে খ return
করা বলেত া াম এর য জায়গা হেত function call করা হেয়েছ স জায়গায় ভ াল ফরত পাঠােনা function_name হে ঐ ফাংশন এর নাম ফাংশন এর নামকরেনর ে identifier
declare করার িনয়ম মানেত হয় identifier িনেয় আমরা থ িটউেনই আেলাচনা কেরিছলামআর parameter_list হে ঐ া ােম য সকল ভ াল পাঠােত হয় তার list আমরা িস ত যসকল িডফ ফাংশন দেখিছলাম তমন একিট ফাংশেনর াকচার দখন
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 44 -
toupper() ফাংশন এর কাজ িছল একিট ক াের ার িনেয় তার uppercase ফরত পাঠােনা উপেরর
ফাংশনিটেত function_name এর পের ােকেট char ch হল parameter list parameter যিদ একািধক হত তেব parameter েলা কমা (rdquordquo) িদেয় িলখা হত যমনঃ pow(int baseint power)
পাওয়ার ফাংশন এর ইিট প ারািমটার একিট হল বস আেরকিট পাওয়ার
থেম উে খ করা char হল return_type toupper ফাংশনিট একিট character িনেয় তার আপারেকস character return কের
ফাংশন এর সবেশষ লাইনিট হে return statement ঐ টেম এর মাধ েম ফাংশনিট য জায়গা হেত call করা হেয়িছল স জায়গায় return এর ভ াল িনেয় িফের আেসউপেরর ফাংশনিটেত যখন return ch টেম িট execute হেব তখন ch এর ভ াল যখান থেক ফাংশনিট call করা হেয়েছ সখােন পাঠােব এবং code এর execution ও সখােন ফরত আসেব
return_type এর মেধ intfloatdoublechar [unsignedsigned specifier] সহ datatype উে খ করা যায় িকছ িকছ ফাংশন রেয়েছ যারা ধমা parameter নয়ার পর ঐ ফাংশন এর সিনিদ কাজ কের িক কান ভ াল return কের না স ধরেনর ফাংশন এর return_type িহেসেব declare করা হয় void যিদ কান ফাংশন এর পেব কান ডাটাটাইপ উে খ করা না হয় তেব সই ফাংশন এর ডাটাটাইপ void ধরা হয় return_type িহেসেব কান array িস ত িডে য়ার করা যায় না
main function হেত কান ফাংশন কল করার জন ঐ ফাংশন এর নাম ও তার প ারািমটার এর ভ াল উে খ কের িদেত হয়
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 45 -
toupper() একিট িডফ ফাংশন আর _toupper হে আমােদর define করা ফাংশন েটা ফাংশন এর নাম আলাদা রাখা হেয়েছ
যিদ কান িডফ ফাংশন এর header file declare করা না থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় িক যিদ header file declare করা থােক তেব ঐ নােম অন কান ফাংশন declare করা যায় না আমােদর উপেরর া ামিটেত ফাংশন এর নাম চাইেল _toupper কেট toupper িলখেল error message দখােব না িক যিদ includeltctypehgt দয়া হয় সে ে আর ফাংশন এর নাম toupper দয়া যােব না
ফাংশনেক main function হেত িকংবা অন ফাংশন হেত িকংবা য ফাংশন এ থাকেব সটা থেকও কল করা যায় কান ফাংশন হেত ঐ ফাংশনেক কল করােক recurrsion বলা হয় পরবতী িটউেন recurrsion িনেয় আেলাচনা করব
ফাংশন ইভােব া াম এ িলখা যায় একিট হল main() function এর পেব আেরকিট হল main() function এর িনেচ main function এর উপের িলখার ে সাধারন িনয়েম একিট ফাংশন িডে য়ার করার পর আেরকিট ফাংশন এভােব সব েলা ফাংশন িডে য়ার করা হয়আর main()
function এর িনেচ কান একিট িট বা সব েলা ফাংশন িডে য়ার করা যায় সে ে য
ফাংশনিট main() function এর পর িডে য়ার করা হেব তার থম লাইন বা declaration টা main()
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 46 -
function এর উপর িলেখ সিমেকালন( ) িদেত হয় আর main() function এর িনেচ ফাংশনিট স ণ করা হয় িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত একিট ফাংশন main() function এর পেব আর ইিট ফাংশন main()
function এর িনেচ িডে য়ার করা হেয়েছ
এবার একিট ফাংশন িলখিছ যার কাজ হে িতনিট সংখ া ইনপট িনেয় তার মধ থেক সবেচেয় বড় সংখ ািট return করেব return type যেহত না ার তাই ডাটাটাইপ িডে য়ার করিছ int
িনেচর উদাহরনিট দখনঃ
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 47 -
উপের উে িখত া ামিটেত আমরা িতনিট integer value এর মেধ সবেচেয় বড়িট বর করার একিট ফাংশন িলেখিছ এখন আমার যখােন েয়াজন সখােন ধমা ফাংশনিট কল কের কাজিট করেত পাির
--------------------------------------------------------------------------------------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 48 -
অধ ায় ১২
Pass by value
Pass by value হে কান একিট ফাংশন এর মেধ য সকল ভ াল প ারািমটার িহেসেব পাস করা হেয়েছ তার ভ াল যিদ ঐ ফাংশন এর মেধ চ করা হয় তেব ঐ চ ধমা ঐ ফাংশন এর মেধ ই চ হেব ফাংশন যখন আবার যখান থেক কল করা হেয়িছল সখােন ফরত আসেব তখন ঐ প ারািমটার এর ভ াল আেগর মতই থাকেব
িনেচর উদাহরনিট দখন
এখােন িকছ কথা বেল নয়া ভাল কান ফাংশন এে স করার সময় প ারািমটার এর ভ ািরএবল ও ফাংশন এর ভ ািরএবল সংখ া অবশ ই সমান হেত হেব
যমন ধ ন কান ফাংশন এর definition টা অেনকটা এরকম
int findmax(int aint bint c)
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 49 -
internal code of function
এই ফাংশন এে স করার জন কাড িলখা হলঃ
value= findmax(xyz)
তখন ঐ ফাংশন এর মেধ
ndashgta এর ভ াল হেব x এর ভ াল
ndashgtb এর ভ াল হেব y এর ভ াল
ndashgtc এর ভ াল হেব z এর ভ াল
য িসিরয়ােল প ারািমটার উে খ করা হেব ভ ালও সই িসিরয়ােল assigned হেব
এবার আমরা উদাহরনিট িনেয় আেলাচনা কির উদাহরনিটেত ফাংশন এর প ারািমটার ভ াল িহেসেব ধমা a এর ভ াল পাঠােনা হেয়েছ আর ফাংশন এর মেধ ঐ ভ ালিট ডাবল হেলও সই ডাবল ভ ালিট ধমা ঐ ফাংশন এর মেধ ই কাযকর তাই যখন main() function এ ফরত এেসেছ তখন a এর ভ াল িহেসেব ফাংশন এ যাওয়ার সময় য ভ াল িছল তাই থাকেব
ল ক ন আমরা যখন ভ ািরএবল বা অ াের িনেয় আেলাচনা কেরিছলাম তখন আমরা বেলিছলাম য যিদ কান ভ ািরএবল িডে য়ার করা হয় সে ে মমরীেত ঐ ভ ািরএবল এর জন জায়গা তরী হয় ফাংশন কল এর সময় আমরা যখন প ারািমটার িল এ কান ভ ািরএবল এর নাম উে খ করিছ তখন ঐ ভ ািরএবল এর ভ ালটা argument িহেসেব পাস হয় আর ফাংশন এর ডিফেনশন এর মেধ য ভ ািরএবল এর নাম উে খ করা হয় ঐ ভ ািরএবল এর মমরী লােকশন এ য argument receive হয় সই ভ ালটাই assign হয় তাই যখন ফাংশন এ কান ভ ািরএবল এর মান ডাবল করা হে তখনঐ ফাংশেনর ভ ািরএবল এর ভ াল ডাবল হে িক main() function এর মেধ উে িখত ভ ািরএবল এর মােনর কান পিরবতন হয় না সকারেন যখন main() function এ ফরত আেস তখন main() function এর ভ ািরএবল এর
ভ ালর কান পিরবতন দখা যায় না
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 50 -
Pass by reference
Pass by reference বাঝার জন আমােদর Pointer স েক জানা থাকা েয়াজন Pointer িনেয় আমরা িব ািরত পের দখব এখন ধমা অ ধারনা িনন তা না হেল pass by reference এর উদাহরনিট িঠকভােব বঝেত পারেবন না
Pointer variable হেলা স সকল ভ ািরএবল যারা কান ভ ালর পিরবেত ldquo মমরী লােকশনrdquo জমা রােখ
Pointer variable declare করার িনয়মঃ
datatype variable_name
datatype হল pointer variable িট কান integer এর মমরী লােকশন রাখেব না double এর মমরী লােকশন রাখেব তা
pointer variable নােমর পেব () asterix িচ দয়া লােগ
এেতা গল নাম িডে য়ার করা া াম এ pointer variable ব বহার সাধারন ভ ািরএবল হেত িকছটা আলাদা
যমনঃ িডে য়ার করার পর অন কাথাও যিদ ধমা ভ ািরএবল এর নাম িলখা হয় তেব তা memory adderss িনেদশ কের আর যিদ িদেয় ভ ািরএবল এর নাম িলখা হয় তেব তা ঐ মমরী লােকশন এর ভ াল িনেদশ কের
িনেচর া ামিট ও তার কেম এবং রান কের আউটপট দখেল pointer স েক াথিমক ধারনা পেয় যােবন
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 51 -
উে খ X specifier হল হ ােডিসেমল এ কান ভ ািরএবল এর মান দখায় মমরীর কান
এে স সাধারনত হ ােডিসেমল এ দখােনা হয় উপেরর া ামিটর আউটপট এর ে upuvpv এর মান সমান (3) ampupu এর মান সমানআবার ampvpv এর মান সমানিক তা আলাদা আলাদা কি উটাের আলাদা আলাদা হেত পাের( মমরী লােকশন িক হেব তা িসে ম এর উপর িনভর কের) Pass by reference এর মােন হে প ারািমটার িহেসেব কান ভ ািরএবল এর ভ াল পাস না কের ঐ ভ ািরএবল এর মমরী লােকশন পাঠােনা হয় যার ফেল ফাংশন এর মেধ ঐ ভ ািরএবল এর মান পিরবতন করা হেল ঐ পিরবতনটা main() function এ িফের আসার পরও বজায় থােক িনেচর উদাহরনিট দখন
উপেরর উদাহরনিটেত ভ ািরএবল এর লােকশন পাঠােনা হেয়েছ ফেল ফাংশন এর মেধ ভ ালর
পিরবতন হেল তা main() function এও বজায় থােক ফাংশন কল করার সময় মমরী এে স পাঠােনা হেল সইিট হল pass by reference প ারািমটার িহেসেব যিদ কান array পাস করা হয় তেব তা pass by reference হয় যমনঃ আমরা যখন কান ক াের ার অ াের পাস কির তখন ঐ অ ােরর কান value change করেল তা main() function এও চ থােক
---------------------------------------------------------------------------------------------------------------------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 52 -
অধ ায় ১৩
Recursion িক
যখন কান একিট ফাংশন এর মধ হেতই ঐ ফাংশনিটেক আবার কল করা হয় যত ন না কান
িসিফক কি শন পরন না হে তখন ঐ ধরেনর কলেক recursion এবং ঐ ফাংশনিটেক recursive function বলা হয় া াম এর ে recursion এর ব বহার কাড অেনক ছাট ও সহজ কের তােল recursion যিদও সহজ তেব তা আয় করেত এবং সিঠক েয়াগ ঘটােত
েয়াজন অেনক অেনক াকিটস আজ আমরা অ িকছ বেলম recursion এর মাধ েম করব এবং তা ভালভােব বাঝার চ া করব
Recursion এর উদাহরনঃ
এবার আমরা recursive function এর থম বেলমটা করব ম াথম ািট িনেয় যােদর িকছটা ধারনা আেছ তারা অবশ ই factorial স েক জেন থাকেবন এখােন একবার উে খ করিছেকান সংখ ার factorial হল 1 থেক ঐ না ার পয সকল সংখ ার নফল
n = 1234hellipn
3 = 123 = 6
5 = 12345 = 120
exception 0 = 1
এবার যেকান না ার এর factorial বর করার জন আমরা loop ব বহার কের বর করেত পাির
যমনঃ
for( i=res=1 ilt=n i++ ) res=resi
printf(rdquo factorial of d dnrdquo n res )
উপেরর কাডিট িদেয় আমরা n এর factorial বর করেত পাির
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 53 -
এই for loop এর কাডটা আমরা recursion এর মাধ েম করেত পাির উে খ আমরা এখন য উদাহরনিট করিছ তা মলত recursion বাঝার জন এই া াম দেখ হয়ত মেন হেত পাের recursion এর িক দরকার recursion এর আরও অেনক া াম আমরা দখব পের
যখন কান ফাংশন কল করা হয় তখন যখান থেক কল করা হেয়েছ সখান থেক সরাসির
জা কের ফাংশন এ চেল যায় আর তারপর ঐ ফাংশন এর কাজ শষ হেল আবার কল এর
জায়গায় িফের আেস আর recursion এ যেহত একই ফাংশন হেত িনেজেকই আবার কল হয়
তাই ফাংশন কল ধ depth এ যেত থােক
িনেচর ছিবিটেত উপেরর উদাহরিট িকভােব execute হে তা দখােনা হল
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 54 -
যখন া ামিট depth এ যেত যেত 0(zero) এর জন এি িকউট হে তখন ঐ ফাংশন এর িসিফক কি শন পরন হওয়ায় তা ঐখান থেক return কের যখান থেক কল করা হেয়িছল
সখােন িফের আেস
এবার recursion apply কের আেরকিট বেলম কির আপিন একিট না ার ইনপট িনেয় 1 থেক ঐ না ার পয ি করব এবং এেদর যাগফল বর করব
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 55 -
আপনারা যিদ এর আেগর উদাহরনিট িকভােব কাজ করেছ বঝেত পােরন িঠক সভােব এটাও depth এ িগেয় িকভােব কাজ করেছ তা ধরেত পারেবন
আেরকিট উদাহরন কির আপিন কান ি ং এর reverse করেবন কান loop ছাড়া এিট recursion িদেয় সহেজ করা যায়
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 56 -
এইটার সমাধান করার মল কনেস টা হল যখন depth এ যেত যেত lsquo০rsquo বা null character
পােব তখন return করার সময় একিট কের ক াের ার ি করেব আর তার ফেল ি ংিটও িরভাস অডার এ ি হেব
recursion ব বহার কের অেনক ধরেনর কাজ খব সহেজ করা যায় িবিভ algorithm যমনঃ sorting searching ভিত ে recursion এর ব পক ব বহার
--------------------------------------------------------------------------------------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 57 -
অধ ায় ১৪
অনশীলনঃ িনেচর সমস া েলা সমাধান করার চ া ক নঃ
1 ইিট পণসংখ া ইনপট িনেয় আউটপট এ দখান 2 ইিট পণসংখ া যাগ করার একিট া াম িলখন 3 ইিট পণসংখ া ন করার একিট া াম িলখন 4 একিট float type সংখ া ইনপট িননতারপর তা একিট integer type variable এ রাখন
এবং ইিটর মান আউটপট এ দখন 5 যেকান character ইনপট িদেয় সই character ও তার ASCII value আউটপট ীন এ
দখান 6 িবিভ operator ব বহার কের া াম িলখন 7 একিট পণসংখ া ইনপট িনেয় তা জাড় না িবেজাড় ি কের দখান 8 িতনিট সংখ া ইনপট িনেয় সবেচেয় বড় সংখ ািট ি ক ন 9 া াম এ ইউজার থেক যেকান ধনা ক পনসংখ া িনেয় ১ থেক ঐ না ার পয
যাগফল আউটপট এ দখান 10 া াম এ ইউজার থেক ১০ িট না ার ইনপট িনেয় িতিট না ার ১০০০ থেক িবেয়াগ
কের িবেয়াগফল িতবার আউটপট দখান 11 ইনপট এ আপনার নাম িনন তারপর আপনার নাম এর িতিট ক াের ার এর ASCII
ভ াল ি ক ন 12 একিট integer ইনপট িনেয় তা মৗিলক সংখ া)prime) িকনা পির া ক ন 13 একিট character array বা string ইনপট িনেয় তা reverse order(last character থেক first
character) এ ি ক ন 14 ইিট string ইনপট িনেয় তা সমান হেল equal আর না হেল not equal ি ক ন 15 একিট string ইনপট িনেয় তার সকল character capital letter এ ি ক ন 16 একিট integer ইনপট িনেয় তা বগসংখ া িকনা পির া ক ন 17 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং তা াইম হেল ldquod is primerdquo আর না হেল ldquod is not prime showrdquo করেব 18 এমন একিট া াম িলখন যা q ইনপট দয়ার আেগ পয একিট ক াের ার ইনপট িনেব এবং
তার lowercase আউটপট এ দখােব 19 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ার এর সব েলা িডিজট এর যাগফল দখােব 20 এমন একিট া াম িলখন য া ামিট ন )0) ইনপট দয়ার আেগ পয একিট কের integer
input িনেব এবং ঐ না ারিটেক reverse order এ show করেবেযমনঃ ১২০ িদেল ০২১১২৫৪ িদেল ৪৫২১ ইত ািদ
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------
- 58 -
শষ কথা
মেনর সেখ া ািমং ক ন আর আনে থাকন এই বই স েক আপানার মতামত ভাললাগা ম লাগা সবিকছ জানান এই িঠকানায়- zobayermcgmailcom ও হ া কান িকছ জানেত চাইেল বা জানােত চাইেলও মইল করেত পােরন আপনােদর িস া ািমং শখার য়াস যিদ এতটকও সফল হয় তাহেল আমােদর ক সাথক এই বইেয়র পরবতী সং রণ পেত ও নতন নতন িবষেয়র ওপর বাংলা বই পেত চাখ রাখন httpmuktobanglaweeblycom এই ওেয়বসাইেট
---------- সমা ----------