پاورپوینت کامل برنامه سازی پیشرفته ++C 576 اسلاید در PowerPoint
توجه : این فایل به صورت فایل power point (پاور پوینت) ارائه میگردد
پاورپوینت کامل برنامه سازی پیشرفته ++C 576 اسلاید در PowerPoint دارای ۵۷۶ اسلاید می باشد و دارای تنظیمات کامل در PowerPoint می باشد و آماده ارائه یا چاپ است
شما با استفاده ازاین پاورپوینت میتوانید یک ارائه بسیارعالی و با شکوهی داشته باشید و همه حاضرین با اشتیاق به مطالب شما گوش خواهند داد.
لطفا نگران مطالب داخل پاورپوینت نباشید، مطالب داخل اسلاید ها بسیار ساده و قابل درک برای شما می باشد، ما عالی بودن این فایل رو تضمین می کنیم.
توجه : در صورت مشاهده بهم ریختگی احتمالی در متون زیر ،دلیل ان کپی کردن این مطالب از داخل فایل می باشد و در فایل اصلی پاورپوینت کامل برنامه سازی پیشرفته ++C 576 اسلاید در PowerPoint،به هیچ وجه بهم ریختگی وجود ندارد
بخشی از مطالب داخلی اسلاید ها
پاورپوینت کامل برنامه سازی پیشرفته ++C 576 اسلاید در PowerPoint
اسلاید ۴: زبان C یک زبان همه منظوره است. دستورالعملهای این زبان بسیار شبیه عبارات جبری و نحو آن شبیه جملات انگلیسی می باشد. این امر سبب میشود که C یک زبان سطح بالا باشد که برنامهنویسی در آن آسان است ›››مقدمه:
اسلاید ۵: ++C که از نسل C است، تمام ویژگیهای C را به ارث برده است. اما برتری فنی دیگری هم دارد: C++ اکنون «شیگرا» است. میتوان با استفاده از این خاصیت، برنامههای شیگرا تولید نمود. برنامههای شیگرا منظم و ساختیافتهاند، قابل روزآمد کردناند، به سهولت تغییر و بهبود مییابند و قابلیت اطمینان و پایداری بیشتری دارند.
اسلاید ۶: اهم مطالب این کتاب :جلسه سوم: «انتخاب»جلسه دوم: «انواع اصلی»جلسه پنجم: «توابع»جلسه چهارم: ‹‹تکرار»جلسه اول: «مقدمات برنامهنویسی با C++»جلسه ششم: « آرایهها»
اسلاید ۷: جلسه نهم: «شیئگرایی»جلسه هشتم: «رشتههای کاراکتری و فایلها در ++Cاستاندارد»جلسه دهم: «سربارگذاری عملگرها» جلسه هفتم: «اشارهگرها و ارجاعها»جلسه یازدهم: «ترکیب و وراثت»
اسلاید ۸: جلسه اولمقدمات برنامهنویسی با C++
اسلاید ۹: آنچه در این جلسه می خوانید:۱- چرا C++ ؟۲- تاریخچ C++3- آمادهسازی مقدمات۴- شروع کار با C++5- عملگر خروجی۶- لیترالها و کاراکترها۷- متغیرها و تعریف آنها۸- مقداردهی اولیه به متغیرها۹- ثابتها۱۰- عملگر ورودی
اسلاید ۱۰: هدف کلی: آشنایی با تاریخچه و مزایای زبان برنامهنویسی C++ و بیان مفاهیم بنیادی شیگرایی و عناصر مهم برنامههای C++
اسلاید ۱۱: هدفهای رفتاری: انتظار میرود پس از پایان این جلسه بتوانید:- مزایای زبان C++ را بر زبانهای مشابه ذکر کرده و تفاوت آن را با زبان C بیان کنید.- شرح مختصری از روند پیشرفت زبانهای برنامهنویسی را بیان کرده و مشکلات هر دوره را به اختصار شرح دهید.- مزایای شیگرایی در تولید نرمافزار را برشمارید.- اصول سهگان شیگرایی را نام برده و هر یک را به اختصار شرح دهید.>>
اسلاید ۱۲: – قالب کلی برنامههای C++ را بشناسید و بتوانید برنامههای کوچک را نوشته و آزمایش کنید.- عملگر ورودی و خروجی را در C++ شناخته و از آنها در برنامهها استفاده کنید.- نحو اعلان متغیرها و شیو مقداردهی به آنها را بدانید.- سه موجودیت «لیترال»، «کاراکتر» و «عدد» را شناخته و فرق بین آنها را شرح دهید.- علت و شیوههای افزودن توضیح به کد برنامه را شرح دهید.- علت و شیو معرفی ثابتها در برنامه را شرح دهید.
اسلاید ۱۳: مقدمهدر دهه ۱۹۷۰ در آزمایشگاههای بل زبانی به نام C ایجاد شد. انحصار این زبان در اختیار شرکت بل بود تا این که در سال ۱۹۷۸ توسط Kernighan و Richie شرح کاملی از این زبان منتشر شد و به سرعت نظر برنامهنویسان حرفهای را جلب نمود. هنگامی که بحث شیگرایی و مزایای آن در جهان نرمافزار رونق یافت، زبان C که قابلیت شیگرایی نداشت ناقص به نظر میرسید تا این که در اوایل ده ۱۹۸۰ دوباره شرکت بل دست به کار شد و Bjarne Stroustrup زبان C++ را طراحی نمود
اسلاید ۱۴: C++ ترکیبی از دو زبان C و Simula بود و قابلیتهای شیگرایی نیز داشت. از آن زمان به بعد شرکتهای زیادی کامپایلرهایی برای C++ طراحی کردند. این امر سبب شد تفاوتهایی بین نسخههای مختلف این زبان به وجود بیاید و از قابلیت سازگاری و انتقال آن کاسته شود. به همین دلیل در سال ۱۹۹۸ زبان C++ توسط موسس استانداردهای ملی آمریکا (ANSI) به شکل استاندارد و یکپارچه درآمد.
اسلاید ۱۵: ۱- چرا C++ ؟زبان C یک زبان همه منظوره است در این زبان عملگرهایی تعبیه شده که برنامهنویسی سطح پایین و به زبان ماشین را نیز امکانپذیر میسازد چون C عملگرهای فراوانی دارد، کد منبع برنامهها در این زبان بسیار کوتاه است
اسلاید ۱۶: برنام مقصدی که توسط کامپایلرهای C ساخته میشود بسیار فشردهتر و کمحجمتر از برنامههای مشابه در سایر زبانها است.C++ که از نسل C است، تمام ویژگیهای جذاب C را به ارث برده است .و سرانجام آخرین دلیل استفاده از C++ ورود به دنیای C# است. – زبان C برای اجرای بسیاری از دستوراتش از توابع کتابخانهای استفاده میکند و بیشتر خصوصیات وابسته به سختافزار را به این توابع واگذار مینماید.
اسلاید ۱۷: ۲- تاریخچ C++ در دهه ۱۹۷۰ در آزمایشگاههای بل زبانی به نام C ایجاد شد. انحصار این زبان در اختیار شرکت بل بود تا این که در سال ۱۹۷۸ توسط Kernighan و Richie شرح کاملی از این زبان منتشر شد و به سرعت نظر برنامهنویسان حرفهای را جلب نمود. هنگامی که بحث شیگرایی و مزایای آن در جهان نرمافزار رونق یافت، زبان C که قابلیت شیگرایی نداشت ناقص به نظر میرسید تا این که در اوایل ده ۱۹۸۰ دوباره شرکت بل دست به کار شد و Bjarne Stroustrup زبان C++ را طراحی نمود.
اسلاید ۱۸: C++ ترکیبی از دو زبان C و Simula بود و قابلیتهای شیگرایی نیز داشت از آن زمان به بعد شرکتهای زیادی کامپایلرهایی برای C++ طراحی کردند. این امر سبب شد تفاوتهایی بین نسخههای مختلف این زبان به وجود بیاید و از قابلیت سازگاری و انتقال آن کاسته شود. به همین دلیل در سال ۱۹۹۸ زبان C++ توسط موسس استانداردهای ملی آمریکا (ANSI) به شکل استاندارد و یکپارچه درآمد. کامپایلرهای کنونی به این استاندارد پایبندند. کتاب حاضر نیز بر مبنای همین استاندارد نگارش یافته است.
اسلاید ۱۹: ۳- آمادهسازی مقدمات یک «برنامه» دستورالعملهای متوالی است که میتواند توسط یک رایانه اجرا شود. برای نوشتن و اجرای هر برنامه به یک «ویرایشگر متن» و یک «کامپایلر» احتیاج داریم. بست Visual C++ محصول شرکت میکروسافت و بست C++ Builder محصول شرکت بورلند نمونههای جالبی از محیط مجتمع تولید برای زبان C++ به شمار میروند.
اسلاید ۲۰: ۴- شروع کار با C++C++ نسبت به حروف «حساس به حالت» است یعنی A و a را یکی نمیدانداولین برنامهای که مینویسیم به محض تولد، به شما سلام میکند و عبارت Hello, my programmer! را نمایش میدهد:#include <iostream>int main(){ std::cout << Hello, my programmer!n ; return 0;} مثال : اولین برنامه
اسلاید ۲۱: اولین خط از کد بالا یک «راهنمای پیشپردازنده» است. راهنمای پیشپردازنده شامل اجزای زیر است: ۱- کاراکتر # که نشان میدهد این خط، یک راهنمای پیشپردازنده است. این کاراکتر باید در ابتدای هم خطوط راهنمای پیشپردازنده باشد.۲- عبارت include3- نام یک «فایل کتابخانهای» که میان دو علامت <> محصور شده است.
اسلاید ۲۲: خط دوم برنامه نیز باید در همه برنامههای C++ وجود داشته باشد. این خط به کامپایلر میگوید که «بدن اصلی برنامه» از کجا شروع میشود. این خط دارای اجزای زیر است:۱ – عبارت int که یک نوع عددی در C++ است. ۲ – عبارت main که به آن «تابع اصلی» در C++ میگویند.۳ – دو پرانتز () که نشان میدهد عبارت main یک «تابع» است. هر برنامه فقط باید یک تابع main() داشته باشد .
اسلاید ۲۳: سه خط آخر برنامه، «بدن اصلی برنامه» را تشکیل میدهند. دستورات برنامه از خط سوم شروع شده است. دستور خط سوم با علامت سمیکولن ; پایان یافته است.
اسلاید ۲۴: توضیح توضیح، متنی است که به منظور راهنمایی و درک بهتر به برنامه اضافه میشود و تاثیری در اجرای برنامه ندارد. . کامپایلر توضیحات برنامه را قبل از اجرا حذف میکند. استفاده از توضیح سبب میشود که سایر افراد کد برنام شما را راحتتر درک کنند.
اسلاید ۲۵: به دو صورت میتوانیم به برنامههای C++ توضیحات اضافه کنیم: ۱ – با استفاده از دو علامت اسلش // : هر متنی که بعد از دو علامت اسلش بیاید تا پایان همان سطر یک توضیح تلقی میشود .۲ – با استفاده از حالت C : هر متنی که با علامت /* شروع شود و با علامت */ پایان یابد یک توضیح تلقی میشود.
اسلاید ۲۶: ۵- عملگر خروجیعلامت << عملگر خروجی در C++ نام دارد (به آن عملگر درج نیز میگویند). یک «عملگر» چیزی است که عملیاتی را روی یک یا چند شی انجام میدهد. عملگر خروجی، مقادیر موجود در سمت راستش را به خروجی سمت چپش میفرستد. به این ترتیب دستور cout<< 66 ;مقدار ۶۶ را به خروجی cout میفرستد که cout معمولا به صفحهنمایش اشاره دارد. در نتیجه مقدار ۶۶ روی صفحه نمایش درج میشود.
اسلاید ۲۷: ۶ -لیترالها و کاراکترهایک «لیترال» رشتهای از حروف، ارقام یا علایم چاپی است که میان دو علامت نقل قول محصور شده باشد. یک «کاراکتر» یک حرف، رقم یا علامت قابل چاپ است که میان دونشان محصور شده باشد. پس w و ! و ۱ هر کدام یک کاراکتر است. به تفاوت سه موجودیت «عدد» و «کاراکتر» و «لیترال رشتهای» دقت کنید: ۶ یک عدد است، ۶ یک کاراکتر است و ۶ یک لیترال رشتهای است.
اسلاید ۲۸: ۷ – متغیرها و تعریف آنها:«متغیر» مکانی در حافظه است که چهار مشخصه دارد: نام، نوع، مقدار، آدرس. وقتی متغیری را تعریف میکنیم، ابتدا با توجه به نوع متغیر، آدرسی از حافظه در نظر گرفته میشود، سپس به آن آدرس یک نام تعلق میگیرد.
اسلاید ۲۹: در C++ قبل از این که بتوانیم از متغیری استفاده کنیم، باید آن را اعلان نماییم. نحو اعلان یک متغیرtype name initializerعبارت type نوع متغیر را مشخص میکند. نوع متغیر به کامپایلر اطلاع میدهد که این متغیر چه مقادیری میتواند داشته باشد و چه اعمالی میتوان روی آن انجام داد.
اسلاید ۳۰: name initializerعبارت name نام متغیر را نشان میدهد. این نام حداکثر میتواند ۳۱ کاراکتر باشد، نباید با عدد شروع شود، علایم ریاضی نداشته باشد و همچنین «کلم کلیدی» نیز نباشد. عبارت initializer عبارت «مقداردهی اولیه» نام دارد. با استفاده از این عبارت میتوان مقدار اولیهای در متغیر مورد نظر قرار داد.مقداردهی اولیه دستور زیر تعریف یک متغیر صحیح را نشان میدهد:int n = 50;
اسلاید ۳۱: ۸ – مقداردهی اولیه به متغیرهادر بسیاری از موارد بهتر است متغیرها را در همان محلی که اعلان میشوند مقداردهی کنیم. استفاده از متغیرهای مقداردهی نشده ممکن است باعث ایجاد دردسرهایی شود. دردسر متغیرهای مقداردهی نشده وقتی بزرگتر میشود که سعی کنیم متغیر مقداردهی نشده را در یک محاسبه به کار ببریم. مثلا اگر x را که مقداردهی نشده در عبارت y = x + 5; به کار ببریم، حاصل y غیر قابل پیشبینی خواهد بود. برای اجتناب از چنین مشکلاتی عاقلانه است که متغیرها را همیشه هنگام تعریف، مقداردهی کنیم.مثال: int x=45; int y=0;
اسلاید ۳۲: ۹- ثابتهادر بعضی از برنامهها از متغیری استفاده میکنیم که فقط یک بار لازم است آن را مقداردهی کنیم و سپس مقدار آن متغیر در سراسر برنامه بدون تغییر باقی میماند. مثلا در یک برنام محاسبات ریاضی، متغیری به نام PI تعریف میکنیم و آن را با ۳.۱۴ مقداردهی میکنیم و میخواهیم که مقدار این متغیر در سراسر برنامه ثابت بماند. در چنین حالاتی از «ثابتها» استفاده میکنیم. یک ثابت، یک نوع متغیر است که فقط یک بار مقداردهی میشود و سپس تغییر دادن مقدار آن در ادام برنامه ممکن نیست. تعریف ثابتها مانند تعریف متغیرهاست با این تفاوت که کلمه کلیدی const به ابتدای تعریف اضافه میشود.
اسلاید ۳۳: int main(){ // defines constants; has no output: const char BEEP =b; const int MAXINT=2147483647; const float DEGREE=23.53; const double PI=3.14159265358979323846 return 0;}برنامه فوق خروجی ندارد:مثال تعریف ثابتها:
اسلاید ۳۴: ۱۰ – عملگر ورودیبرای این که بتوانیم هنگام اجرای برنامه مقادیری را وارد کنیم از عملگر ورودی >> استفاده میکنیم. استفاده از دستور ورودی به شکل زیر است:cin >> variable;variable نام یک متغیر است.
اسلاید ۳۵: مثال ۱۰ – ۱ استفاده از عملگر ورودیبرنام زیر یک عدد از کاربر گرفته و همان عدد را دوباره در خروجی نمایش میدهد:int main(){ // reads an integer from input: int m; cout << Enter a number: ; cin >> m; cout << your number is: << m << endl; return 0;}Enter a number: 52your number is: 52
اسلاید ۳۶: عملگر ورودی نیز مانند عملگر خروجی به شکل جریانی رفتار میکند. یعنی همان طور که در عملگر خروجی میتوانستیم چند عبارت را با استفاده از چند عملگر << به صورت پشت سر هم چاپ کنیم، در عملگر ورودی نیز میتوانیم با استفاده از چند عملگر >> چند مقدار را به صورت پشت سر هم دریافت کنیم. مثلا با استفاده از دستور:cin >> x >> y >> z;سه مقدار x و y و z به ترتیب از ورودی دریافت میشوند. برای این کار باید بین هر ورودی یک فضای خالی (space) بگذارید و پس از تایپ کردن هم ورودیها، کلید enter را بفشارید. آخرین مثال جلسه، این موضوع را بهتر نشان میدهد.
اسلاید ۳۷: مثال ۱۱ – ۱ چند ورودی روی یک خطبرنام زیر مانند مثال ۱۰ – ۲ است با این تفاوت که سه عدد را از ورودی گرفته و همان اعداد را دوباره در خروجی نمایش میدهد:int main(){ // reads 3 integers from input: int q, r, s; cout << Enter three numbers: ; cin >> q >> r >> s; cout << your numbers are: << q << , << r << , << s << endl; return 0;}Enter three numbers: 35 70 9your numbers are: 35, 70, 9
اسلاید ۳۸: پایان جلسه اول
اسلاید ۳۹: جلسه دوم«انواع اصلی»
اسلاید ۴۰: آنچه در این جلسه می خوانید:۱- انواع داد عددی۲- متغیر عدد صحیح۳- محاسبات اعداد صحیح۴- عملگرهای افزایشی و کاهشی۵- عملگرهای مقدارگذاری مرکب۶- انواع ممیز شناور›››
اسلاید ۴۱: ۷- تعریف متغیر ممیز شناور ۸ – شکل علمی مقادیر ممیز شناور ۹- نوع بولین bool 10- نوع کاراکتری char 11- نوع شمارشی enum 12- تبدیل نوع، گسترش نوع›››
اسلاید ۴۲: ۱۳- برخی از خطاهای برنامهنویسی ۱۴ – سرریزی عددی ۱۵- خطای گرد کردن ۱۶- حوز متغیرها
اسلاید ۴۳: هدف کلی: معرفی انواع متغییرها و نحو بهکارگیری آنها در برنامههای C++هدفهای رفتاری: انتظار میرود پس از پایان این جلسه بتوانید:- انواع عددی صحیح در C++ را نام ببرید و متغیرهایی از این نوعها را در برنامهها به کار ببرید.- انواع عددی ممیز شناور در C++ را نام ببرید و متغیرهایی از این نوعها را در برنامهها به کار ببرید.- نوع بولین را تعریف کرده و متغیرهایی از این نوع را در برنامهها به کار ببرید.>>>
اسلاید ۴۴: – نوع شمارشی را شناخته و متغیرهایی از این نوع را در برنامهها به کار ببرید.- مفاهیم «تبدیل نوع» و «گسترش نوع» را شناخته و انواع مختلف را به یکدیگر تبدیل نمایید.- علت خطاهای «سرریزی عددی» و «گردکردن» را دانسته و بتوانید محل وقوع آنها را کشف کنید.- عملگرهای حسابی و افزایشی و کاهشی و مقدارگذاری مرکب را در برنامهها به کار ببرید.
اسلاید ۴۵: ما در زندگی روزمره از دادههای مختلفی استفاده میکنیم: اعداد ، تصاویر، نوشتهها یا حروف الفبا، صداها، بوها و … . با پردازش این دادهها میتوانیم تصمیماتی اتخاذ کنیم، عکسالعملهایی نشان دهیم و مسالهای را حل کنیم. رایانهها نیز قرار است همین کار را انجام دهند. یعنی دادههایی را بگیرند، آنها را به شکلی که ما تعیین میکنیم پردازش کنند و در نتیجه اطلاعات مورد نیازمان را استخراج کنند. مقدمه
اسلاید ۴۶: ۱- انواع داد عددیدر C++ دو نوع اصلی داده وجود دارد: «نوع صحیح» و «نوع ممیز شناور». هم انواع دیگر از روی این دو ساخته میشوند (به شکل زیر دقت کنید).
اسلاید ۴۷: نوع صحیح نوع صحیح برای نگهداری اعداد صحیح (اعداد ۰ و ۱ و ۲ و …) استفاده میشود. این اعداد بیشتر برای شمارش به کار میروند و دامنه محدودی دارند.
اسلاید ۴۸:
اسلاید ۴۹: نوع ممیز شناور برای نگهداری اعداد اعشاری استفاده میشود. اعداد اعشاری بیشتر برای اندازهگیری دقیق به کار میروند و دامن بزرگتری دارند. یک عدد اعشاری مثل ۳۵۲/۱۸۷ را میتوان به شکل ۱۰×۷۳۵۲/۱۸ یا ۱۰۲×۸۷۳۵۲/۱ یا۱-۱۰×۵۲/۱۸۷۳یا۲-۱۰×۲/۱۸۷۳۵ و یا … نوشت. به این ترتیب با کم و زیاد کردن توان عدد ۱۰ ممیز عدد نیز جابهجا میشود. به همین دلیل است که به اعداد اعشاری «اعداد ممیز شناور» میگویند.
اسلاید ۵۰: ۲- متغیر عدد صحیح C++ شش نوع متغیر عدد صحیح دارد تفاوت این شش نوع مربوط به میزان حافظ مورد استفاده و محدود مقادیری است که هر کدام میتوانند داشته باشند. این میزان حافظ مورد استفاده و محدود مقادیر، بستگی زیادی به سختافزار و همچنین سیستم عامل دارد. یعنی ممکن است روی یک رایانه، نوع int دو بایت از حافظه را اشغال کند در حالی که روی رایانهای از نوع دیگر نوع int به چهار بایت حافظه نیاز داشته باشد.
اسلاید ۵۱: وقتی برنامهای مینویسید، توجه داشته باشید که از نوع صحیح مناسب استفاده کنید تا هم برنامه دچار خطا نشود و هم حافظ سیستم را هدر ندهید.
اسلاید ۵۲: ۳ -محاسبات اعداد صحیح C++ مانند اغلب زبانهای برنامهنویسی برای محاسبات از عملگرهای جمع (+) ، تفریق (-) ، ضرب (*) ، تقسیم (/) و باقیمانده (%) استفاده میکند.
اسلاید ۵۳: ۴ – عملگرهای افزایشی و کاهشیC++ برای دستکاری مقدار متغیرهای صحیح، دو عملگر جالب دیگر دارد:عملگر ++ :مقدار یک متغیر را یک واحد افزایش میدهد. عملگر — : مقدار یک متغیر را یک واحد کاهش میدهد. اما هر کدام از این عملگرها دو شکل متفاوت دارند: شکل «پیشوندی» و شکل «پسوندی».
اسلاید ۵۴: در شکل پیشوندی، عملگر قبل از نام متغیر میآید مثل ++m یا –n . در شکل پسوندی، عملگر بعد از نام متغیر میآید مثل m++ یا n– . در شکل پیشوندی ابتدا متغیر، متناسب با عملگر، افزایش یا کاهش مییابد و پس از آن مقدار متغیر برای محاسبات دیگر استفاده میشود. در شکل پسوندی ابتدا مقدار متغیر در محاسبات به کار میرود و پس از آن مقدار متغیر یک واحد افزایش یا کاهش مییابد.
اسلاید ۵۵: ۵ – عملگرهای مقدارگذاری مرکبC++ عملگرهای دیگری دارد که مقدارگذاری در متغیرها را تسهیل مینمایند. مثلا با استفاده از عملگر += میتوانیم هشت واحد به m اضافه کنیم اما با دستور کوتاهتر:m += 8;دستور بالا معادل دستور m = m + 8; است با این تفاوت که کوتاهتر است. به عملگر += «عملگر مرکب» میگویند زیرا ترکیبی از عملگرهای + و = میباشد
اسلاید ۵۶: ۵- عملگرهای مقدارگذاری مرکبقبلا از عملگر = برای مقدارگذاری در متغیرها استفاده کردیم. C++ عملگرهای دیگری دارد که مقدارگذاری در متغیرها را تسهیل مینمایند. عملگر مرکب در C++ عبارتند از: += و -= و *= و /= و =%
اسلاید ۵۷: نحو عمل این عملگرها به شکل زیر است:m += 8; m = m + 8;m -= 8; m = m – 8;m *= 8; m = m * 8;m /= 8; m = m / 8;m %= 8; m = m % 8;
اسلاید ۵۸: ۶ – انواع ممیز شناورعدد ممیز شناور به بیان ساده همان عدد اعشاری است. عددی مثل ۱۲۳.۴۵ یک عدد اعشاری است. برای این که مقدار این عدد در رایانه ذخیره شود، ابتدا باید به شکل دودویی تبدیل شود:۱۲۳.۴۵ = ۱۱۱۱۰۱۱.۰۱۱۱۰۰۱۲ اکنون برای مشخص نمودن محل اعشار در عدد، تمام رقمها را به سمت راست ممیز منتقل میکنیم. البته با هر جابجایی ممیز، عدد حاصل باید در توانی از ۲ ضرب شود:۱۲۳.۴۵ = ۰.۱۱۱۱۰۱۱۰۱۱۱۰۰۱× ۲۷ به مقدار ۱۱۱۱۰۱۱۰۱۱۱۰۰۱ «مانتیس عدد» و به ۷ که توان روی دو است، «نمای عدد» گفته میشود.
اسلاید ۵۹: درC++ سه نوع ممیز شناور وجود دارد: نوع long double از هشت یا ده یا دوازده یا شانزده بایت برای نگهداری عدد استفاده میکند. معمولا نوع float از چهار بایت برای نگهداری عدد استفاده میکند. نوع double از هشت بایت برای نگهداری عدد استفاده میکند.
اسلاید ۶۰: جدول تخصیص حافظه برای متغییر های ممیز شناور
اسلاید ۶۱: ۷ – تعریف متغیر ممیز شناورتعریف متغیر ممیز شناور مانند تعریف متغیر صحیح است. با این تفاوت که از کلم کلیدی float یا double برای مشخص نمودن نوع متغیر استفاده میکنیم. مثال:float x;double x,y=0;تفاوت نوع float با نوع double در این است که نوع double دو برابر float از حافظه استفاده میکند. پس نوع double دقتی بسیار بیشتر از float دارد. به همین دلیل محاسبات double وقتگیرتر از محاسبات float است.
اسلاید ۶۲: اعداد ممیز شناور به دو صورت در ورودی و خروجی نشان داده میشوند: به شکل «ساده» و به شکل «علمی».۸- شکل علمی مقادیر ممیز شناور۲- علمی ۱.۲۳۴۵۶۷×۱۰۴ ۱- ساده۱۲۳۴۵.۶۷ مشخص است که شکل علمی برای نشان دادن اعداد خیلی کوچک و همچنین اعداد خیلی بزرگ، کارآیی بیشتری دارد.
اسلاید ۶۳: نوع bool یک نوع صحیح است که متغیرهای این نوع فقط میتوانند مقدار true یا false داشته باشند. true به معنی درست و false به معنی نادرست است. اما این مقادیر در اصل به صورت ۱ و ۰ درون رایانه ذخیره میشوند: ۱ برای true و ۰ برای false. 9 – نوع بولین bool
اسلاید ۶۴: ۱۰- نوع کاراکتری char یک کاراکتر یک حرف، رقم یا نشانه است که یک شمار منحصر به فرد دارد. به عبارت عامیانه، هر کلیدی که روی صفحهکلید خود میبینید یک کاراکتر را نشان میدهد. مثلا هر یک از حروف A تا Z و a تا z و هر یک از اعداد ۰ تا ۹ و یا نشانههای ~ تا + روی صفحهکلید را یک کاراکتر مینامند.
اسلاید ۶۵: برای تعریف متغیری از نوع کاراکتر از کلمه کلیدی char استفاده میکنیم. یک کاراکتر باید درون دو علامت آپستروف () محصور شده باشد. پس A یک کاراکتر است؛ همچنین۸ یک کاراکتر است اما ۸ یک کاراکتر نیست بلکه یک عدد صحیح است . مثال:char c =A;
اسلاید ۶۶: ۱۱ – نوع شمارشی enum یک نوع شمارشی یک نوع صحیح است که توسط کاربر مشخص میشود. نحو تعریف یک نوع شمارشی به شکل زیر است:enum typename{enumerator-list} که enum کلمهای کلیدی است، typename نام نوع جدید است که کاربر مشخص میکند و enumerator-list مجموعه مقادیری است که این نوع جدید میتواند داشته باشد.
اسلاید ۶۷: به عنوان مثال به تعریف زیر دقت کنید:enum Day{SAT,SUN,MON,TUE,WED,THU,FRI} حالا Day یک نوع جدید است و متغیرهایی که از این نوع تعریف میشوند میتوانند یکی از مقادیر SAT و SUN و MON و TUE و WED و THU و FRI را داشته باشند:Day day1,day2;day1 = MON;day2 = THU; وقتی نوع جدید Day و محدود مقادیرش را تعیین کردیم، میتوانیم متغیرهایی از این نوع جدید بسازیم. در کد بالا متغیرهای day1 و day2 از نوع Day تعریف شدهاند. آنگاه day1 با مقدار MON و day2 با مقدار THU مقداردهی شده است.
اسلاید ۶۸: مقادیر SAT و SUN و … هر چند که به همین شکل به کار میروند اما در رایانه به شکل اعداد صحیح ۰ و ۱ و ۲ و … ذخیره میشوند. به همین دلیل است که به هر یک از مقادیر SAT و SUN و … یک شمارشگر میگویند. میتوان مقادیر صحیح دلخواهی را به شمارشگرها نسبت داد:enum Day{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI=64} اگر فقط بعضی از شمارشگرها مقداردهی شوند، آنگاه سایر شمارشگرها که مقداردهی نشدهاند مقادیر متوالی بعدی را خواهند گرفت:enum Day{SAT=1,SUN,MON,TUE,WED,THU,FRI} دستور بالا مقادیر ۱ تا ۷ را به ترتیب به روزهای هفته تخصیص خواهد داد. همچنین دو یا چند شمارشگر در یک فهرست میتوانند مقادیر یکسانی داشته باشند:enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1}
اسلاید ۶۹: نام شمارشگر باید معتبر باشد: یعنی:۱- کلم کلیدی نباشد.۲- با عدد شروع نشود.۳- نشانههای ریاضی نیز نداشته باشد. ۱ – برای نام ثابتها از حروف بزرگ استفاده کنید۲ – اولین حرف از نام نوع شمارشی را با حرف بزرگ بنویسید.۳ – در هر جای دیگر از حروف کوچک استفاده کنید. نحو انتخاب نامشمارشگرها آزاد است اما بیشتر برنامهنویسان از توافق زیر در برنامههایشان استفاده میکنند:
اسلاید ۷۰: آخر این که نام شمارشگرها نباید به عنوان نام متغیرهای دیگر در جاهای دیگر برنامه استفاده شود. مثلا:enum Score{A,B,C,D}float B;char c; در تعریفهای بالا B و C را نباید به عنوان نام متغیرهای دیگر به کار برد زیرا این نامها در نوع شمارشی Score به کار رفته است . شمارشگرهای همنام نباید در محدودههای مشترک استفاده شوند. برای مثال تعریفهای زیر را در نظر بگیرید:enum Score{A,B,C,D}enum Group{AB,B,BC}دو تعریف بالا غیرمجاز است زیرا شمارشگر B در هر دو تعریف Score و Group آمده است.
اسلاید ۷۱: انواع شمارشی برای تولید کد «خود مستند» به کار میروند، یعنی کدی که به راحتی درک شود و نیاز به توضیحات اضافی نداشته باشد. مثلا تعاریف زیر خودمستند هستند زیرا به راحتی نام و نوع کاربرد و محدود مقادیرشان درک میشود:enum Color{RED,GREEN,BLUE,BLACK,ORANGE}enum Time{SECOND,MINUTE,HOUR}enum Date{DAY,MONTH,YEAR}enum Language{C,DELPHI,JAVA,PERL}enum Gender{MALE,FEMALE}
اسلاید ۷۲: در محاسباتی که چند نوع متغیر وجود دارد، جواب همیشه به شکل متغیری است که دقت بالاتری دارد. یعنی اگر یک عدد صحیح را با یک عدد ممیز شناور جمع ببندیم، پاسخ به شکل ممیز شناور است به این عمل گسترش نوع میگویند. ۱۲ – تبدیل نوع، گسترش نوع برای این که مقدار یک متغیر از نوع ممیز شناور را به نوع صحیح تبدیل کنیم از عبارت int() استفاده میکنیم به این عمل تبدیل نوع گفته می شود
اسلاید ۷۳: مثال تبدیل نوع: این برنامه، یک نوع double را به نوع int تبدیل میکند:int main(){ // casts a double value as an int: double v=1234.987; int n; n = int(v); cout << v = << v << , n = << n << endl; return 0;}مثالهای زیر تبدیل نوع و گسترش نوع را نشان میدهند. مثال گسترش نوع برنام زیر یک عدد صحیح را با یک عدد ممیز شناور جمع میکند:int main(){ // adds an int value with a double value: int n = 22; double p = 3.1415; p += n; cout << p = << p << , n = << n << endl; return 0;}
اسلاید ۷۴: «خطای زمان کامپایل» این قبیل خطاها که اغلب خطاهای نحوی هستند ، توسط کامپایلر کشف میشوند و به راحتی میتوان آنها را رفع نمود. «خطای زمان اجرا» کشف اینگونه خطاها به راحتی ممکن نیست و کامپایلر نیز چیزی راجع به آن نمیداند. برخی از خطاهای زمان اجرا سبب میشوند که برنامه به طور کامل متوقف شود و از کار بیفتد. ۱۳ – برخی از خطاهای برنامهنویسی
اسلاید ۷۵: یک متغیر هر قدر هم که گنجایش داشته باشد، بالاخره مقداری هست که از گنجایش آن متغیر بیشتر باشد. اگر سعی کنیم در یک متغیر مقداری قرار دهیم که از گنجایش آن متغیر فراتر باشد، متغیر «سرریز» میشود،در چنین حالتی میگوییم که خطای سرریزی رخ داده است.۱۴- سرریزی عددی
اسلاید ۷۶: مثال ۱۲ – ۲ سرریزی عدد صحیحاین برنامه به طور مکرر n را در ۱۰۰۰ ضرب میکند تا سرانجام سرریز شود:int main(){ //prints n until it overflows: int n =1000; cout << n = << n << endl; n *= 1000; // multiplies n by 1000 cout << n = << n << endl; n *= 1000; // multiplies n by 1000 cout << n = << n << endl; n *= 1000; // multiplies n by 1000 cout << n = << n << endl; return 0;} وقتی یک عدد صحیح سرریز شود، عدد سرریز شده به یک مقدار منفی «گردانیده» میشود اما وقتی یک عدد ممیز شناور سرریز شود، نماد inf به معنای بینهایت را به دست میدهد.
اسلاید ۷۷: ۱۵ – خطای گرد کردن خطای گرد کردن نوع دیگری از خطاست که اغلب وقتی رایانهها روی اعداد حقیقی محاسبه میکنند، رخ میدهد. برای مثال عدد ۱/۳ممکن است به صورت ۰.۳۳۳۳۳۳ ذخیره شود که دقیقا معادل ۱/۳ نیست. این خطا از آنجا ناشی میشود که اعدادی مثل ۱/۳ مقدار دقیق ندارند و رایانه نمیتواند این مقدار را پیدا کند، پس نزدیکترین عدد قابل محاسبه را به جای چنین اعدادی منظور میکند. «هیچگاه از متغیر ممیز شناور برای مقایسه برابری استفاده نکنید» زیرا در متغیرهای ممیز شناور خطای گرد کردن سبب میشود که پاسخ با آن چه مورد نظر شماست متفاوت باشد.
اسلاید ۷۸: ۱۶ – حوز متغیرهاانتخاب نامهای نامفهوم یا ناقص سبب کاهش خوانایی برنامه و افزایش خطاهای برنامهنویسی میشود. استفاده از متغیرها در حوز نامناسب هم سبب بروز خطاهایی میشود. «حوزه متغیر» محدودهای است که یک متغیر خاص اجازه دارد در آن محدوده به کار رود یا فراخوانی شود. اصطلاح «بلوک» در C++ واژه مناسبی است که میتوان به وسیل آن حوز متغیر را مشخص نمود. یک بلوک برنامه، قسمتی از برنامه است که درون یک جفت علامت کروشه { } محدود شده است.
اسلاید ۷۹: حوز یک متغیر از محل اعلان آن شروع میشود و تا پایان همان بلوک ادامه مییابد. خارج از آن بلوک نمیتوان به متغیر دسترسی داشت. همچنین قبل از این که متغیر اعلان شود نمیتوان آن را استفاده نمود.میتوانیم در یک برنامه، چند متغیر متفاوت با یک نام داشته باشیم به شرطی که در حوزههای مشترک نباشند.
اسلاید ۸۰: پایان جلسه دوم
اسلاید ۸۱: جلسه سوم«انتخاب»
اسلاید ۸۲: آنچه در این جلسه می خوانید:۱- دستور if2- دستور if..else3- عملگرهای مقایسهای۴- بلوکهای دستورالعمل۵- شرطهای مرکب۶- ارزیابی میانبری›››
اسلاید ۸۳: ۷- عبارات منطقی ۸ – دستورهای انتخاب تودرتو ۹- ساختار else if 10- دستورالعمل switch 11- عملگر عبارت شرطی ۱۲- کلمات کلیدی
اسلاید ۸۴: هدف کلی:شناخت انواع دستورالعملهای انتخاب و شیو بهکارگیری هر یک هدفهای رفتاری:انتظار میرود پس از پایان این جلسه بتوانید:- نحو دستور if را شناخته و آن را در برنامهها به کار ببرید.- نحو دستور if..else را شناخته و آن را در برنامهها به کار ببرید.- از ساختار else..if در تصمیمگیریهای پیچیده استفاده کنید.- نحو دستور switch را شناخته و خطای «تل سقوط» را تشخیص دهید.- بلوک دستورالعمل را تعریف کنید.- عملگرهای مقایسهای و عملگر عبارت شرطی را در دستورات شرطی به کار ببرید.- از شرطهای مرکب استفاده کرده و ارزیابی میانبری را شرح دهید.- «کلم کلیدی» را تعریف کنید. >>>
اسلاید ۸۵: هم برنامههایی که در دو جلسه اول بیان شد، به شکل ترتیبی اجرا میشوند، یعنی دستورات برنامه به ترتیب از بالا به پایین و هر کدام دقیقا یک بار اجرا میشوند. در این جلسه نشان داده میشود چگونه از دستورالعملهای انتخاب۱ جهت انعطافپذیری بیشتر برنامه استفاده کنیم. همچنین در این جلسه انواع صحیح که در C++ وجود دارد بیشتر بررسی میگردد.مقدمه
اسلاید ۸۶: دستور if موجب میشود برنامه به شکل شرطی اجرا شود. نحو آن به گون زیر است:If (condition) statement; Condition که شرط نامیده میشود یک عبارت صحیح است (عبارتی که با یک مقدار صحیح برآورد میشود) و statement میتواند هر فرمان قابل اجرا باشد. Statement وقتی اجرا خواهد شد که condition مقدار غیر صفر داشته باشد. دقت کنید که شرط باید درون پرانتز قرار داده شود.دستور if
اسلاید ۸۷: ۲- دستور if..elseدستور if..else موجب میشود بسته به این که شرط درست باشد یا خیر، یکی از دو دستورالعمل فرعی اجرا گردد. نحو این دستور به شکل زیر است:if (condition) statement1;else statement2;condition همان شرط مساله است که یک عبارت صحیح میباشد و statement1 و statement2 فرمانهای قابل اجرا هستند. اگر مقدار شرط، غیر صفر باشد، statement1 اجرا خواهد شد وگرنه statement2 اجرا میشود.
اسلاید ۸۸: int main(){ int n, d; cout << Enter two positive integers: ; cin >> n >> d; if (n%d) cout << n << is not divisible by << d << endl; else cout << n << is divisible by << d << endl;}مثال یک آزمون قابلیت تقسیم
اسلاید ۸۹: ۴- عملگرهای مقایسهایدر C++ شش عملگر مقایسهای وجود دارد: < و > و <= و >= و == و != . هر یک از این شش عملگر به شکل زیر به کار میروند:x < y // است y کوچکتر از x x > y // است y بزرگتر از xx <= y // است y کوچکتر یا مساوی xx >= y // است y بزرگتر یا مساوی xx == y // است y مساوی با xx != y // نیست y مساوی با x
اسلاید ۹۰: اینها میتوانند برای مقایس مقدار عبارات با هر نوع ترتیبی استفاده شوند. عبارت حاصل به عنوان یک شرط تفسیر میشود. مقدار این شرط صفر است اگر شرط نادرست باشد و غیر صفر است اگر شرط درست باشد. برای نمونه، عبارت ۷*۸<6*5 برابر با صفر ارزیابی میشود، به این معنی که این شرط نادرست است.
اسلاید ۹۱: ۲- متغیر عدد صحیح C++ شش نوع متغیر عدد صحیح دارد تفاوت این شش نوع مربوط به میزان حافظ مورد استفاده و محدود مقادیری است که هر کدام میتوانند داشته باشند. این میزان حافظ مورد استفاده و محدود مقادیر، بستگی زیادی به سختافزار و همچنین سیستم عامل دارد. یعنی ممکن است روی یک رایانه، نوع int دو بایت از حافظه را اشغال کند در حالی که روی رایانهای از نوع دیگر نوع int به چهار بایت حافظه نیاز داشته باشد.
اسلاید ۹۲: مثلا دستور x = 33; مقدار ۳۳ را در x قرار میدهد ولی دستور x == 33; بررسی میکند که آیا مقدار x با ۳۳ برابر است یا خیر. درک این تفاوت اهمیت زیادی دارد.دقت کنید که در ++C عملگر جایگزینی با عملگر برابری فرق دارد. عملگر جایگزینی یک مساوی تکی = است ولی عملگر برابری، دو مساوی = = است.
اسلاید ۹۳: ۴- بلوکهای دستورالعملیک بلوک دستورالعمل زنجیرهای از دستورالعملهاست که درون براکت {} محصور شده، مانند :{ int temp=x; x = y; y = temp;}در برنامههای ++C یک بلوک دستورالعمل مانند یک دستورالعمل تکی است.
اسلاید ۹۴: int main(){ int x, y; cout << Enter two integers: ; cin >> x >> y; if (x > y) { int temp = x; x = y; y = temp; } //swap x and y cout << x << <= << y << endl;}مثال : یک بلوک دستورالعمل درون یک دستور ifاین برنامه دو عدد صحیح را گرفته و به ترتیب بزرگتری، آنها را چاپ میکند:
اسلاید ۹۵: int main(){ int n=44; cout << n = << n << endl; { int n; cout << Enter an integer: ; cin >> n; cout << n = << n << endl; } { cout << n = << n << endl; } { int n; cout << n = << n << endl; } cout << n = << n << endl; }
اسلاید ۹۶: ۵ – شرطهای مرکبشرطهایی مانند n%d و x>=y میتوانند به صورت یک شرط مرکب با هم ترکیب شوند. این کار با استفاده ازعملگرهای منطقی && (and) و || (or) و ! (not) صورت میپذیرد. این عملگرها به شکل زیر تعریف میشوند:p && q درست است اگر و تنها اگر هم p و هم q هر دو درست باشندp || q نادرست است اگر و تنها اگر هم p و هم q هر دو نادرست باشند!pدرست است اگر و تنها اگر p نادرست باشد برای مثال(n%d || x>=y) نادرست است اگر و تنها اگر n%d برابر صفر و x کوچکتر از y باشد.
اسلاید ۹۷: سه عملگر منطقی && (and) و || (or) و ! (not) معمولا با استفاده از جداول درستی به گون زیر بیان میشوند:طبق جدولهای فوق اگر p درست و q نادرست باشد، عبارت p&&q نادرست و عبارت p||q درست است.
اسلاید ۹۸: ۶- ارزیابی میانبریعملگرهای && و || به دو عملوند نیاز دارندتا مقایسه را روی آن دو انجام دهند. جداول درستی نشان میدهد که p&&q نادرست است اگر p نادرست باشد. در این حالت دیگر نیازی نیست که q بررسی شود. همچنین p||q درست است اگر p درست باشد و در این حالت هم نیازی نیست که q بررسی شود. در هر دو حالت گفته شده، با ارزیابی عملوند اول به سرعت نتیجه معلوم میشود. این کار ارزیابی میانبری نامیده میشود. شرطهای مرکب که از && و || استفاده میکنند عملوند دوم را بررسی نمیکنند مگر این که لازم باشد.
اسلاید ۹۹: ۷- عبارات منطقییک عبارت منطقی شرطی است که یا درست است یا نادرست. قبلا دیدیم که عبارات منطقی با مقادیر صحیح ارزیابی میشوند. مقدار صفر به معنای نادرست و هر مقدار غیر صفر به معنای درست است. به عبارات منطقی «عبارات بولی» هم میگویند.
اسلاید ۱۰۰: چون هم مقادیر صحیح ناصفر به معنای درست تفسیر میشوند، عبارات منطقی اغلب تغییر قیافه میدهند. برای مثال دستورif (n) cout << n is not zero; وقتی n غیر صفر است عبارت n is not zero را چاپ میکند زیرا عبارت منطقی (n) وقتی مقدار n غیر صفر است به عنوان درست تفسیر میگردد.
اسلاید ۱۰۱: کد زیر را نگاه کنید:if (n%d) cout << n is not a multiple of d;دستور خروجی فقط وقتی که n%d ناصفر است اجرا میگردد و n%d وقتی ناصفر است که n بر d بخشپذیر نباشد. گاهی ممکن است فراموش کنیم که عبارات منطقی مقادیر صحیح دارند و این فراموشی باعث ایجاد نتایج غیر منتظره و نامتعارف شود.
اسلاید ۱۰۲: یک خطای منطقی دیگر، این برنامه خطادار است:int main(){ int n1, n2, n3; cout << Enter three integers: ; cin >> n1 >> n2 >> n3; if (n1 >= n2 >= n3) cout << max = << n1; }منشأ خطا در برنام بالا این اصل است که عبارات منطقی مقدارهای عددی دارند.
اسلاید ۱۰۳: دستورهای انتخاب میتوانند مانند دستورالعملهای مرکب به کار روند. به این صورت که یک دستور انتخاب میتواند درون دستور انتخاب دیگر استفاده شود. به این روش، جملات تودرتو میگویند. ۸- دستورهای انتخاب تودرتو
اسلاید ۱۰۴: مثال ۱۲-۳ دستورهای انتخاب تودرتواین برنامه همان اثر مثال ۱۰-۳ را دارد:int main(){ int n, d; cout << Enter two positive integers: ; cin >> n >> d; if (d != 0) if (n%d = = 0) cout << d << divides << n << endl; else cout << d << does not divide << n << endl; else cout << d << does not divide << n << endl;} در برنام بالا، دستور if..else دوم درون دستور if..else اول قرار گرفته است. وقتی دستور if..else به شکل تو در تو به کار میرود، کامپایلر از قانون زیر جهت تجزیه این دستورالعمل مرکب استفاده میکند:« هر else با آخرین if تنها جفت میشود.»
اسلاید ۱۰۵: ۹- ساختار else if دستور if..else تودرتو، اغلب برای بررسی مجموعهای از حالتهای متناوب یا موازی به کار میرود. در این حالات فقط عبارت else شامل دستور if بعدی خواهد بود. این قبیل کدها را معمولا با ساختار else ifمیسازند.
اسلاید ۱۰۶: استفاده از ساختار else if برای مشخص کردن محدود نمره برنام زیر یک نمر امتحان را به درج حرفی معادل تبدیل میکند:int main(){ int score; cout << Enter your test score: ; cin >> score; if (score > 100) cout << Error: that score is out of range.; else if (score >= 90) cout << Your grade is an A. << endl; else if (score >= 80) cout << Your grade is a B. << endl; else if (score >= 70) cout << Your grade is a C. << endl; else if (score >= 60) cout << Your grade is a D. << endl; else if (score >= 0) cout << Your grade is an F. << endl; else cout << Error: that score is out of range.;}
اسلاید ۱۰۷: ۱۰- دستورالعمل switch دستور switch میتواند به جای ساختار else if برای بررسی مجموعهای از حالتهای متناوب و موازی به کار رود. نحو دستور switch به شکل زیر است:switch (expression){ case constant1: statementlist1; case constant2: statementlist2; case constant3: statementlist3; : : case constantN: statementlistN; default: statementlist0;}
اسلاید ۱۰۸: این دستور ابتدا expression را برآورد میکند و سپس میان ثابتهای case به دنبال مقدار آن میگردد. اگر مقدار مربوطه از میان ثابتهای فهرستشده یافت شد، دستور statementlist مقابل آن case اجرا میشود. اگر مقدار مورد نظر میان caseها یافت نشد و عبارت default وجود داشت، دستور statementlist مقابل آن اجرا میشود. عبارتdefault یک عبارت اختیاری است. یعنی میتوانیم در دستور switch آن را قید نکنیم. expression باید به شکل یک نوع صحیح ارزیابی شود و constantها باید ثابتهای صحیح باشند.
اسلاید ۱ است در انتهای هر case دستور break قرار بگیرد. بدون این دستور، اجرای برنامه پس از این که case مربوطه را اجرا کرد از دستور switch خارج نمیشود، بلکه هم caseهای زیرین را هم خط به خط میپیماید و دستورات مقابل آنها را اجرا میکند. به این اتفاق، تل سقوط میگویند.case constant1: statementlist1;break;
اسلاید ۱۱۰: عملگر عبارت شرطی یکی از امکاناتی است که جهت اختصار در کدنویسی تدارک دیده شده است. این عملگر را میتوانیم به جای دستور if..else به کار ببریم. این عملگر از نشانههای و : به شکل زیر استفاده میکند:condition expression1 : expression2; 11- عملگر عبارت شرطیدر این عملگر ابتدا شرط condition بررسی میشود. اگر این شرط درست بود، حاصل کل عبارت برابر با expression1 میشود و اگر شرط نادرست بود، حاصل کل عبارت برابر با expression2 میشود.
اسلاید ۱۱۱: مثلا در دستور انتساب زیر:min = ( x<y x : y ); اگر x<y باشد مقدار x را درون min قرار میدهد و اگر x<y نباشد مقدار y را درون min قرار میدهد. یعنی به همین سادگی و اختصار، مقدار کمین x و y درون متغیر min قرار میگیرد.
اسلاید ۱۱۲: اکنون با کلماتی مثل if و case و float آشنا شدیم. دانستیم که این کلمات برای C++ معانی خاصی دارند. از این کلمات نمیتوان به عنوان نام یک متغیر یا هر منظور دیگری استفاده کرد و فقط باید برای انجام همان کار خاص استفاده شوند. مثلا کلم float فقط باید برای معرفی یک نوع اعشاری به کار رود. ۱۲- کلمات کلیدییک کلم کلیدی در یک زبان برنامهنویسی کلمهای است که از قبل تعریف شده و برای هدف مشخصی منظور شده است.
اسلاید ۱۱۳: C++ استاندارد اکنون شامل ۷۴ کلم کلیدی است:
اسلاید ۱۱۴:
اسلاید ۱۱۵:
اسلاید ۱۱۶: یک کلم رزرو شده کلمهای است که یک دستور خاص از آن زبان را نشان میدهد. کلم کلیدی if و else کلمات رزرو شده هستند.دو نوع کلم کلیدی وجود دارد:۱- کلمههای رزرو شده ۲- شناسههای استاندارد. یک شناس استاندارد کلمهای است که یک نوع داد استاندارد از زبان را مشخص میکند. کلمات کلیدی bool و int شناسههای استاندارد هستند
اسلاید ۱۱۷: پایان جلسه سوم
اسلاید ۱۱۸: جلسه چهارم«تکرار»
اسلاید ۱۱۹: آنچه در این جلسه می خوانید:۱- دستور while2- خاتمه دادن به یک حلقه۳- دستور do..while4- دستور for5- دستور break6- دستور continue7- دستور goto8- تولید اعداد شبه تصادفی
اسلاید ۱۲۰: هدفهای رفتاری:انتظار میرود پس از مطالع این جلسه بتوانید:- نحو دستورwhile را شناخته و از آن برای ایجاد حلقه استفاده کنید.- نحو دستور do..while را شناخته و تفاوت آن با دستور while را بیان کنید.- نحو دستور for را شناخته و با استفاده از آن حلقههای گوناگون بسازید.- حلقههای فوق را به یکدیگر تبدیل کنید.- علت استفاده از «دستورات پرش» را ذکر کرده و تفاوت سه دستور break و continue و goto را بیان کنید.- اهمیت اعداد تصادفی را بیان کرده و نحو تولید «اعداد شبه تصادفی» را بدانید.هدف کلی:شناخت انواع ساختارهای تکرار و نحو آنها و تبدیل آنها به یکدیگر.
اسلاید ۱۲۱: مقدمه تکرار، اجرای پی در پی یک دستور یا بلوکی از دستورالعملها در یک برنامه است. با استفاده از تکرار میتوانیم کنترل برنامه را مجبور کنیم تا به خطوط قبلی برگردد و آنها را دوباره اجرا نماید.C++ دارای سه دستور تکرار است: دستور while، دستور do_while و دستور for. دستورهای تکرار به علت طبیعت چرخهمانندشان، حلقه نیز نامیده میشوند.
اسلاید ۱۲۲: ۱- دستور while نحو دستور while به شکل زیر است:while (condition) statement;به جای condition، یک شرط قرار میگیرد و به جای statement دستوری که باید تکرار شود قرار میگیرد. اگر مقدار شرط، صفر(یعنی نادرست) باشد، statement نادیده گرفته میشود و برنامه به اولین دستور بعد از while پرش میکند. اگر مقدار شرط ناصفر(یعنی درست) باشد، statement اجرا شده و دوباره مقدار شرط بررسی میشود. این تکرار آن قدر ادامه مییابد تا این که مقدار شرط صفر شود.
اسلاید ۱۲۳: مثال ۱-۴ محاسب حاصل جمع اعداد صحیح متوالی با حلق whileاین برنامه مقدار ۱ + ۲ + ۳ + … + n را برای عدد ورودی n محاسبه میکند:int main(){ int n, i=1; cout << Enter a positive integer: ; cin >> n; long sum=0; while (i <= n) sum += i++; cout << The sum of the first << n << integers is << sum;}
اسلاید ۱۲۴: int main(){ int n, i=1; cout << Enter a positive integer: ; cin >> n; long sum=0; while (true) { if (i > n) break; sum += i++; } cout << The sum of the first << n << integers is << sum;} 2- خاتمه دادن به یک حلقهقبلا دیدیم که چگونه دستور break برای کنترل دستورالعمل switch استفاده میشود (به مثال ۱۷-۴ نگاه کنید). از دستور break برای پایان دادن به حلقهها نیز میتوان استفاده کرد. یکی از مزیتهای دستور break این است که فورا حلقه را خاتمه میدهد بدون این که مابقی دستورهای درون حلقه اجرا شوند.
اسلاید ۱۲۵: * مثال ۴-۴ اعداد فیبوناچیاعداد فیبوناچی F0, F1, F2, F3, … به شکل بازگشتی توسط معادلههای زیر تعریف میشوند:F0 = 0 , F1 = 1 , Fn = Fn-1 + Fn-2مثلا برای n=2 داریم:F2 = F2-1 + F2-2 = F1 + F0 = 0 + 1 = 1یا برای n=3 داریم:F3 = F3-1 + F3-2 = F2 + F1 = 1 + 1 = 2و برای n=4 داریم:F4 = F4-1 + F4-2 = F3 + F2 = 2 + 1 = 3
اسلاید ۱۲۶: برنام زیر، هم اعداد فیبوناچی را تا یک محدود مشخص که از ورودی دریافت میشود، محاسبه و چاپ میکند:int main(){ long bound; cout << Enter a positive integer: ; cin >> bound; cout << Fibonacci numbers < << bound << :n0, 1; long f0=0, f1=1; while (true) { long f2 = f0 + f1; if (f2 > bound) break; cout << , << f2; f0 = f1; f1 = f2;}}Enter a positive integer: 1000Fibonacci numbers < 1000:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987
اسلاید ۱۲۷: int main(){ long bound; cout << Enter a positive integer: ; cin >> bound; cout << Fibonacci numbers < << bound << :n0, 1; long f0=0, f1=1; while (true) { long f2 = f0 + f1; if (f2 > bound) exit(0); cout << , << f2; f0 = f1; f1 = f2; }} برنامهنویسان ترجیح میدهند از break برای خاتمه دادن به حلقههای نامتناهی استفاده کنند زیرا قابلیت انعطاف بیشتری دارد. مثال۵-۴ استفاده از تابع exit(0)تابع exit(0) روش دیگری برای خاتمه دادن به یک حلقه است. هرچند که این تابع بلافاصله اجرای کل برنامه را پایان میدهد:
اسلاید ۱۲۸: متوقف کردن یک حلق نامتناهی : با فشردن کلیدهای Ctrl+C سیستم عامل یک برنامه را به اجبار خاتمه میدهد. کلید Ctrl را پایین نگه داشته و کلید C روی صفحهکلید خود را فشار دهید تا برنام فعلی خاتمه پیدا کند.
اسلاید ۱۲۹: ۳- دستور do..whileساختار do..while روش دیگری برای ساختن حلقه است. نحو آن به صورت زیر است:do statement while (condition);به جای condition یک شرط قرار میگیرد و به جای statement دستور یا بلوکی قرار میگیرد که قرار است تکرار شود. این دستور ابتدا statement را اجرا میکند و سپس شرط condition را بررسی میکند. اگر شرط درست بود حلقه دوباره تکرار میشود وگرنه حلقه پایان مییابد.
اسلاید ۱۳۰: دستور do..while مانند دستور while است. با این فرق که شرط کنترل حلقه به جای این که در ابتدای حلقه ارزیابی گردد، در انتهای حلقه ارزیابی میشود. یعنی هر متغیر کنترلی به جای این که قبل از شروع حلقه تنظیم شود، میتواند درون آن تنظیم گردد.نتیج دیگر این است که حلق do..while همیشه بدون توجه به مقدار شرط کنترل، لااقل یک بار اجرا میشود اما حلق while میتواند اصلا اجرا نشود.
اسلاید ۱۳۱: مثال ۷-۴ محاسب حاصل جمع اعداد صحیح متوالی با حلق do..whileاین برنامه همان تأثیر مثال ۱-۵ را دارد:int main(){ int n, i=0; cout << Enter a positive integer: ; cin >> n; long sum=0; do sum += i++; while (i <= n); cout << The sum of the first << n << integers is << sum;}
اسلاید ۱۳۲: * مثال ۸-۴ اعداد فاکتوریالاعداد فاکتوریال ۰! و ۱! و ۲! و ۳! و … با استفاده از رابطههای بازگشتی زیر تعریف میشوند:۰! = ۱ , n! = n(n-1)!برای مثال، به ازای n = 1 در معادل دوم داریم:۱! = ۱((۱-۱)!) = ۱(۰!) = ۱(۱) = ۱همچنین برای n = 2 داریم:۲! = ۲((۲-۱)!) = ۲(۱!) = ۲(۱) = ۲و به ازای n = 3 داریم:۳! = ۳((۳-۱)!) = ۳(۲!) = ۳(۲) = ۶
اسلاید ۱۳۳: برنام زیر هم اعداد فاکتوریال را که از عدد داده شده کوچکترند، چاپ میکند:int main(){ long bound; cout << Enter a positive integer: ; cin >> bound; cout << Factorial numbers < << bound << :n1; long f=1, i=1; do { cout << , << f; f *= ++i; } while (f < bound);}
اسلاید ۱۳۴: نحو دستورالعمل for به صورت زیر است:for (initialization; condition; update) statement;سه قسمت داخل پرانتز، حلقه را کنترل میکنند. ۴ – دستور forعبارت initialization برای اعلان یا مقداردهی اولیه به متغیر کنترل حلقه استفاده میشود.این عبارت اولین عبارتی است که ارزیابی میشود پیش از این که نوبت به تکرارها برسد. عبارت condition برای تعیین این که آیا حلقه باید تکرار شود یا خیر به کار میرود. یعنی این عبارت، شرط کنترل حلقه است. اگر این شرط درست باشد دستور statement اجرا میشود. عبارت updateبرای پیشبردن متغیر کنترل حلقه به کار میرود. این عبارت پس از اجرای statement ارزیابی میگردد.
اسلاید ۱۳۵: بنابراین زنجیر وقایعی که تکرار را ایجاد میکنند عبارتند از:۱ – ارزیابی عبارت initialization2 – بررسی شرط condition . اگر نادرست باشد، حلقه خاتمه مییابد.۳ – اجرای statement4 – ارزیابی عبارت update5 – تکرار گامهای ۲ تا ۴عبارتهای initialization و condition و updateعبارتهای اختیاری هستند. یعنی میتوانیم آنها را در حلقه ذکر نکنیم.
اسلاید ۱۳۶: مثال ۹-۴ استفاده از حلق for برای محاسب مجموع اعداد صحیح متوالیاین برنامه همان تأثیر مثال ۱-۵ را دارد:int main(){ int n; cout << Enter a positive integer: ; cin >> n; long sum=0; for (int i=1; i <= n; i++) sum += I; cout << The sum of the first << n << integers is << sum;}در C++ استاندارد وقتی یک متغیر کنترل درون یک حلق for اعلان میشود (مانند i در مثال بالا) حوز آن متغیر به همان حلق for محدود میگردد. یعنی آن متغیر نمیتواند بیرون از آن حلقه استفاده شود. نتیج دیگر این است که میتوان از نام مشابهی در خارج از حلق for برای یک متغیر دیگر استفاده نمود.
اسلاید ۱۳۷: مثال ۱۲-۴ یک حلق for نزولیبرنام زیر ده عدد صحیح مثبت را به ترتیب نزولی چاپ میکند:int main(){ for (int i=10; i > 0; i–) cout << << i;}
اسلاید ۱۳۸: مثال ۱۵-۴ بیشتر از یک متغیر کنترل در حلق forحلق for در برنام زیر دو متغیر کنترل دارد:int main(){ for (int m=95, n=11, m%n > 0; m -= 3, n++) cout << m << % << n << = << m%n << endl;}
اسلاید ۱۳۹: مثال ۱۶-۴ حلقههای for تودرتوبرنام زیر یک جدول ضرب چاپ میکند:#include <iomanip> #include <iostream> int main(){ for (int x=1; x <= 10; x++) { for (int y=1; y <= 10; y++) cout << setw(4) << x*y; cout << endl; }}
اسلاید ۱۴۰: دستور break یک دستور آشناست. قبلا از آن برای خاتمه دادن به دستور switch و همچنین حلقههای while و do..while استفاده کردهایم. از این دستور برای خاتمه دادن به حلق for نیز میتوانیم استفاده کنیم. دستور break در هر جایی درون حلقه میتواند جا بگیرد و در همان جا حلقه را خاتمه دهد. ۵- دستور breakوقتی دستور break درون حلقههای تودرتو استفاده شود، فقط روی حلقهای که مستقیما درون آن قرار گرفته تاثیر میگذارد. حلقههای بیرونی بدون هیچ تغییری ادامه مییابند.
اسلاید ۱۴۱: ۶- دستور continueدستور break بقی دستورهای درون بلوک حلقه را نادیده گرفته و به اولین دستور بیرون حلقه پرش میکند. دستور continue نیز شبیه همین است اما به جای این که حلقه را خاتمه دهد، اجرا را به تکرار بعدی حلقه منتقل میکند. این دستور، ادام چرخ فعلی را لغو کرده و اجرای دور بعدی حلقه را آغاز میکند.
اسلاید ۱۴۲: مثال ۱۹-۴ استفاده از دستورهای break و continueاین برنام کوچک، دستورهای break و continue را شرح میدهد:int main(){ int n = 1; char c; for( ; ;n++ ) { cout << nLoop no: << n << endl; cout << Continue <y|n> ; cin >> c; if (c = = y) continue; break; } cout << nTotal of loops: << n;}
اسلاید ۱۴۳: دستورgoto نوع دیگری از دستورهای پرش است. مقصد این پرش توسط یک برچسب معین میشود. برچسب شناسهای است که جلوی آن علامت کولن( : ) میآید و جلوی یک دستور دیگر قرار میگیرد. یک مزیت دستور goto این است که با استفاده از آن میتوان از هم حلقههای تودرتو خارج شد و به مکان دلخواهی در برنامه پرش نمود. ۷- دستور goto
اسلاید ۱۴۴: مثال ۲۰-۴ استفاده از دستور goto برای خارج شدن از حلقههای تودرتوint main(){ const int N=5; for (int i=0; i<N; i++) { for (int j=0; j<N; j++) { for (int k=0; k<N; k++) if (i+j+k>N) goto esc; else cout << i+j+k << ; cout << * ; } esc: cout << . << endl; }}
اسلاید ۱۴۵: یکی از کاربردهای بسیار مهم رایانهها، «شبیهسازی» سیستمهای دنیای واقعی است. تحقیقات و توسعههای بسیار پیشرفته به این راهکار خیلی وابسته است. به وسیل شبیهسازی میتوانیم رفتار سیستمهای مختلف را مطالعه کنیم بدون این که لازم باشد واقعا آنها را پیادهسازی نماییم. در شبیهسازی نیاز است «اعداد تصادفی» توسط رایانهها تولید شود تا نادانستههای دنیای واقعی مدلسازی شود. ۸- تولید اعداد شبه تصادفی
اسلاید ۱۴۶: رایانهها «ثابتکار» هستند یعنی با دادن دادههای مشابه به رایانههای مشابه، همیشه خروجی یکسان تولید میشود. با وجود این میتوان اعدادی تولید کرد که به ظاهر تصادفی هستند؛ اعدادی که به طور یکنواخت در یک محدود خاص گستردهاند و برای هیچکدام الگوی مشخصی وجود ندارد. چنین اعدادی را «اعداد شبهتصادفی» مینامیم.
اسلاید ۱۴۷: مثال ۲۲-۴ تولید اعداد شبه تصادفیاین برنامه از تابع rand() برای تولید اعداد شبهتصادفی استفاده میکند:#include<cstdlib>//defines the rand() and RAND_MAX#include <iostream>int main(){ // prints pseudo-random numbers: for (int i = 0; i < 8; i++) cout << rand() << endl; cout << RAND_MAX = << RAND_MAX << endl;}هر بار که برنام بالا اجرا شود، رایانه هشت عدد صحیح unsigned تولید میکند که به طور یکنواخت در فاصل ۰ تا RAND_MAX گسترده شدهاند. RAND_MAX در این رایانه برابر با ۲,۱۴۷,۴۸۳,۶۴۷ است.
اسلاید ۱۴۸: هر عدد شبهتصادفی از روی عدد قبلی خود ساخته میشود. اولین عدد شبهتصادفی از روی یک مقدار داخلی که «هسته» گفته میشود ایجاد میگردد. هر دفعه که برنامه اجرا شود، هسته با یک مقدار پیشفرض بارگذاری میشود. برای حذف این اثر نامطلوب که از تصادفی بودن اعداد میکاهد، میتوانیم با استفاده از تابع ()srand خودمان مقدار هسته را انتخاب کنیم.
اسلاید ۱۴۹: #include <cstdlib> // defines the rand() and srand()#include <iostream>int main(){ // prints pseudo-random numbers: unsigned seed; cout << Enter seed: ; cin >> seed; srand(seed); // initializes the seed for (int i = 0; i < 8; i++) cout << rand() << endl;}مثال ۲۳-۴ کارگذاری هسته به طور محاورهایاین برنامه مانند برنام مثال ۲۲-۴ است بجز این که میتوان هست تولیدکنند اعداد تصادفی را به شکل محاورهای وارد نمود:
اسلاید ۱۵۰: پایان جلسه چهارم
اسلاید ۱۵۱: جلسه پنجم« توابع»
اسلاید ۱۵۲: آنچه در این جلسه می خوانید:۱- توابع کتابخانهای C++ استاندارد۲- توابع ساخت کاربر۳- برنام آزمون۴- اعلانها و تعاریف تابع۵- کامپایل جداگان توابع۶- متغیرهای محلی، توابع محلی›››
اسلاید ۱۵۳: ۷- تابع void 8 – توابع بولی ۹- توابع ورودی/خروجی (I/O) 10- ارسال به طریق ارجاع (آدرس) ۱۱- ارسال از طریق ارجاع ثابت ۱۲-توابع بیواسطه ›››
اسلاید ۱۵۴: ۱۳- چندشکلی توابع ۱۴- تابع main() 15- آرگومانهای پیشفرض
اسلاید ۱۵۵: هدف کلی:شناخت و معرفی توابع و مزایای استفاده از تابع در برنامههاهدفهای رفتاری:انتظار میرود پس از پایان این جلسه بتوانید:- اهمیت توابع و مزیت استفاده از آنها را بیان کنید.- «اعلان» و «تعریف» تابع را بدانید و خودتان توابعی را ایجاد کنید.- «برنام آزمون» را تعریف کرده و دلیل استفاده از آن را بیان نمایید.- مفهوم «آرگومان» را بدانید.- تفاوت ارسال به طریق «ارجاع» و ارسال به طریق «مقدار» و ارسال به طریق «ارجاع ثابت» را بیان کنید و شکل استفاده از هر یک را بدانید.›››
اسلاید ۱۵۶: – «تابع بیواسطه» را شناخته و نحو معرفی آن را بدانید.- چندشکلی توابع را تعریف کنید و شیو آن را بدانید.- طریق بهکارگیری آرگومانهای پیشفرض را بدانید.- فرق بین تابع void با سایر توابع را بدانید.
اسلاید ۱۵۷: ۱-مقدمهبرنامههای واقعی و تجاری بسیار بزرگتر از برنامههایی هستند که تاکنون بررسی کردیم. برای این که برنامههای بزرگ قابل مدیریت باشند، برنامهنویسان این برنامهها را به زیربرنامههایی بخشبندی میکنند. این زیربرنامهها «تابع» نامیده میشوند. توابع را میتوان به طور جداگانه کامپایل و آزمایش نمود و در برنامههای مختلف دوباره از آنها استفاده کرد.
اسلاید ۱۵۸: ۲- توابع کتابخانهای C++ استاندارد«کتابخان C++ استاندارد» مجموعهای است که شامل توابع از پیش تعریف شده و سایر عناصر برنامه است. این توابع و عناصر از طریق «سرفایلها» قابل دستیابیاند.قبلا برخی از آنها را استفاده کردهایم: ثابت INT_MAX که در <climits> تعریف شده ، تابع ()sqrt که در <cmath> تعریف شده است و… .
اسلاید ۱۵۹: تابع جذر sqrt()ریش دوم یک عدد مثبت، جذر آن عدد است.تابع مانند یک برنام کامل، دارای روند ورودی – پردازش – خروجی است هرچند که پردازش، مرحلهای پنهان است. یعنی نمیدانیم که تابع روی عدد ۲ چه اعمالی انجام میدهد که ۴۱۴۲۱/۱ حاصل میشود.
اسلاید ۱۶۰: برنام ساد زیر، تابع از پیش تعریف شد جذر را به کار میگیرد:#include <cmath> // defines the sqrt() function#include <iostream> // defines the cout object using namespace std;int main(){ //tests the sqrt() function: for (int x=0; x < 6; x++) cout << t << x << t << sqrt(x) << endl;} برای اجرای یک تابع مانند تابع sqrt() کافی است نام آن تابع به صورت یک متغیر در دستورالعمل مورد نظر استفاده شود، مانند زیر:y=sqrt(x);
اسلاید ۱۶۱: این کار «فراخوانی تابع» یا «احضار تابع» گفته میشود. بنابراین وقتی کد sqrt(x) اجرا شود، تابع sqrt() فراخوانی میگردد. عبارت x درون پرانتز «آرگومان» یا «پارامتر واقعی» فراخوانی نامیده میشود. در چنین حالتی میگوییم که x توسط «مقدار» به تابع فرستاده میشود. لذا وقتی x=3 است، با اجرای کد sqrt(x) تابع sqrt() فراخوانی شده و مقدار ۳ به آن فرستاده میشود. تابع مذکور نیز حاصل ۱.۷۳۲۰۵ را به عنوان پاسخ برمیگرداند…
اسلاید ۱۶۲: … این فرایند در نمودار زیر نشان داده شده. ۳۱.۷۳۲۰۵xyMain()doubleintSqrt()31.73205متغیرهای x و y در تابع main() تعریف شدهاند. مقدار x که برابر با ۳ است به تابع sqrt() فرستاده میشود و این تابع مقدار ۱.۷۳۲۰۵ را به تابع main() برمیگرداند. جعبهای که تابع sqrt() را نشان میدهد به رنگ تیره است، به این معنا که فرایند داخلی و نحو کار آن قابل رویت نیست.
اسلاید ۱۶۳: مثال ۲-۵ آزمایش یک رابط مثلثاتیاین برنامه هم از سرفایل <cmath> استفاده میکند. هدف این است که صحت رابط Sin2x=2Siپاورپوینت کامل برنامه سازی پیشرفته ++C 576 اسلاید در PowerPointCosx به شکل تجربی بررسی شود.int main(){ for (float x=0; x < 2; x += 0.2) cout << x << tt << sin(2*x) << t“ << 2*sin(x)*cos(x) << endl;}
اسلاید ۱۶۴: ۰ ۰ ۰۰.۲ ۰.۳۸۹۴۱۸ ۰.۳۸۹۴۱۸۰.۴ ۰.۷۱۷۳۵۶ ۰.۷۱۷۳۵۶۰.۶ ۰.۹۳۲۰۳۹ ۰.۹۳۲۰۳۹۰.۸ ۰.۹۹۹۵۷۴ ۰.۹۹۹۵۷۴۱ ۰.۹۹ ۰.۶۷۵۴۶۳ ۰.۶۷۵۴۶۳۱.۴ ۰.۳۳۴۹۸۸ ۰.۳۳۴۹۸۸۱.۶ -۰.۰۵۸۳۷۴۴ -۰.۰۵۸۳۷۴۴۱.۸ -۰.۴۴۲۵۲۱ -۰.۴۴۲۵۲۱برنام مقدار x را در ستون اول، مقدار Sin2x را در ستون دوم و مقدار ۲Siپاورپوینت کامل برنامه سازی پیشرفته ++C 576 اسلاید در PowerPointCosx را در ستون سوم چاپ میکند. خروجی برنامه:خروجی نشان میدهد که برای هر مقدار آزمایشی x، مقدار Sin2x با مقدار ۲Siپاورپوینت کامل برنامه سازی پیشرفته ++C 576 اسلاید در PowerPointCosx برابر است.
اسلاید ۱۶۵: بیشتر توابع معروف ریاضی که در ماشینحسابها هم وجود دارد در سرفایل <cmath> تعریف شده است. بعضی از این توابع در جدول زیر نشان داده شده:
اسلاید ۱۶۶:
اسلاید ۱۶۷: توجه داشته باشید که هر تابع ریاضی یک مقدار از نوع double را برمیگرداند. اگر یک نوع صحیح به تابع فرستاده شود، قبل از این که تابع آن را پردازش کند، مقدارش را به نوع double ارتقا میدهد.
اسلاید ۱۶۸: بعضی از سرفایلهای کتابخان C++ استاندارد که کاربرد بیشتری دارند در جدول زیر آمده است:این سرفایلها از کتابخان C استاندارد گرفته شدهاند. استفاده از آنها شبیه استفاده از سرفایلهای C++ استاندارد (مانند <iostream> ) است. برای مثال اگر بخواهیم تابع اعداد تصادفی rand() را از سرفایل <cstdlib> به کار ببریم، باید دستور پیشپردازند زیر را به ابتدای فایل برنام اصلی اضافه کنیم:#include <cstdlib>
اسلاید ۱۶۹: ۳- توابع ساخت کاربرگرچه توابع بسیار متنوعی در کتابخان C++ استاندارد وجود دارد ولی این توابع برای بیشتر وظایف برنامهنویسی کافی نیستند. علاوه بر این برنامهنویسان دوست دارند خودشان بتوانند توابعی را بسازند و استفاده نمایند.
اسلاید ۱۷۰: مثال ۳-۵ تابع cube()یک مثال ساده از توابع ساخت کاربر:int cube(int x){ // returns cube of x: return x*x*x;}این تابع، مکعب یک عدد صحیح ارسالی به آن را برمیگرداند. بنابراین فراخوانی cube(2) مقدار ۸ را برمیگرداند.
اسلاید ۱۷۱: نوع بازگشتی تابع cube() که در بالا تعریف شد، int است. نام آن cube میباشد و یک پارامتر از نوع int به نام x دارد. یعنی تابع cube() یک مقدار از نوع int میگیرد و پاسخی از نوع int تحویل میدهد. بدن تابع، یک بلوک کد است که در ادام عنوان آن میآید. بدنه شامل دستوراتی است که باید انجام شود تا نتیج مورد نظر به دست آید. بدنه شامل دستور return است که پاسخ نهایی را به مکان فراخوانی تابع برمیگرداند. یک تابع ساخت کاربر دو قسمت دارد: ۱-عنوان ۲- بدنه. عنوان یک تابع به صورت زیر است:(فهرست پارامترها) نام نوع بازگشتی مثال:int cube(int x){… بدنه تابع }
اسلاید ۱۷۲: دستور return دو وظیف عمده دارد. اول این که اجرای تابع را خاتمه میدهد و دوم این که مقدار نهایی را به برنام فراخوان باز میگرداند. دستور return به شکل زیر استفاده میشود:return expression;به جای expression هر عبارتی قرار میگیرد که بتوان مقدار آن را به یک متغیر تخصیص داد. نوع آن عبارت باید با نوع بازگشتی تابع یکی باشد.عبارت int main() که در هم برنامهها استفاده کردهایم یک تابع به نام «تابع اصلی» را تعریف میکند. نوع بازگشتی این تابع از نوع int است. نام آن main است و فهرست پارامترهای آن خالی است؛ یعنی هیچ پارامتری ندارد.
اسلاید ۱۷۳: وقتی یک تابع مورد نیاز را ایجاد کردید، فورا باید آن تابع را با یک برنام ساده امتحان کنید. چنین برنامهای برنام آزمون نامیده میشود. ۴- برنام آزمون برنام آزمون یک برنام موقتی است که باید «سریع و کثیف» باشد؛ یعنی: لازم نیست در آن تمام ظرافتهای برنامهنویسی – مثل پیغامهای خروجی، برچسبها و راهنماهای خوانا – را لحاظ کنید. تنها هدف این برنامه، امتحان کردن تابع و بررسی صحت کار آن است.
اسلاید ۱۷۴: مثال ۴-۵ یک برنام آزمون برای تابع cube()کد زیر شامل تابع cube() و برنام آزمون آن است:int cube(int x){ // returns cube of x: return x*x*x;}int main(){ // tests the cube() function: int n=1; while (n != 0) { cin >> n; cout << tcube( << n << ) = << cube(n) << endl; }}برنام حاضر اعداد صحیح را از ورودی میگیرد و مکعب آنها را چاپ میکند تا این که کاربر مقدار ۰ را وارد کند.
اسلاید ۱۷۵: هر عدد صحیحی که خوانده میشود، با استفاده از کد cube(n) به تابع cube() فرستاده میشود. مقدار بازگشتی از تابع، جایگزین عبارت cube(n) گشته و با استفاده از cout در خروجی چاپ میشود. میتوان رابط بین تابع main() و تابع cube() را شبیه این شکل تصور نمود: ۵ nint5125cube()main()5 xintدقت کنید که تابع cube() در بالای تابع main() تعریف شده زیرا قبل از این که تابعcube() در تابع main() به کار رود، کامپایلر C++ باید در بار آن اطلاع حاصل کند.
اسلاید ۱۷۶: مثال ۵-۵ یک برنام آزمون برای تابع max()تابع زیر دو پارامتر دارد. این تابع از دو مقدار فرستاده شده به آن، مقدار بزرگتر را برمیگرداند:int max(int x, int y){ // returns larger of the two given integers: int z; z = (x > y) x : y ; return z;}int main(){ int m, n; do { cin >> m >> n; cout << tmax( << m << , << n << ) = << max(m,n) << endl; } while (m != 0);}
اسلاید ۱۷۷: توابع میتوانند بیش از یک دستور return داشته باشند. مثلا تابع max() را مانند این نیز میتوانستیم بنویسیم:int max(int x, int y){ // returns larger of the two given integers: if (x < y) return y; else return x;}در این کد هر دستور return که زودتر اجرا شود مقدار مربوطهاش را بازگشت داده و تابع را خاتمه میدهد. دستور return نوعی دستور پرش است (شبیه دستور break ) زیرا اجرا را به بیرون از تابع هدایت میکند. اگرچه معمولا return در انتهای تابع قرار میگیرد، میتوان آن را در هر نقط دیگری از تابع قرار داد.
اسلاید ۱۷۸: ۵- اعلانها و تعاریف تابعبه دو روش میتوان توابع را تعریف نمود:۱-توابع قبل از تابع main() به طور کامل با بدنه مربوطه آورده شوند.۲-راه دیگری که بیشتر رواج دارد این گونه است که ابتدا تابع اعلان شود، سپس متن برنام اصلیmain() بیاید، پس از آن تعریف کامل تابع قرار بگیرد.
اسلاید ۱۷۹: اعلان تابع با تعریف تابع تفاوت دارد. اعلان تابع، فقط عنوان تابع است که یک سمیکولن در انتهای آن قرار دارد.تعریف تابع، متن کامل تابع است که هم شامل عنوان است و هم شامل بدنه. اعلان تابع شبیه اعلان متغیرهاست. یک متغیر قبل از این که به کار گرفته شود باید اعلان شود. تابع هم همین طور است با این فرق که متغیر را در هر جایی از برنامه میتوان اعلان کرد اما تابع را باید قبل از برنام اصلی اعلان نمود.
اسلاید ۱۸۰: همینها برای کامپایلر کافی است تا بتواند کامپایل برنامه را آغاز کند. سپس در زمان اجرا به تعریف بدن تابع نیز احتیاج میشود که این بدنه در انتهای برنامه و پس از تابع main() قرار میگیرد.در اعلان تابع فقط بیان میشود که نوع بازگشتی تابع چیست، نام تابع چیست و نوع پارامترهای تابع چیست.
اسلاید ۱۸۱: فرق بین «آرگومان» و «پارامتر» :پارامترها متغیرهایی هستند که در فهرست پارامتر یک تابع نام برده میشوند. پارامترها متغیرهای محلی برای تابع محسوب میشوند؛ یعنی فقط در طول اجرای تابع وجود دارند. آرگومانها متغیرهایی هستند که از برنام اصلی به تابع فرستاده میشوند.
اسلاید ۱۸۲: int max(int,int);int main(){ int m, n; do { cin >> m >> n; cout << tmax( << m << , << n << ) = << max(m,n) << endl; } while (m != 0);}int max(int x, int y){ if (x < y) return y; else return x;}مثال ۶-۵ تابعmax() با اعلان جدا از تعریف آناین برنامه همان برنام آزمون تابع max() در مثال ۵-۶ است. اما اینجا اعلان تابع بالای تابع اصلی ظاهر شده و تعریف تابع بعد از برنام اصلی آمده است:توجه کنید که پارامترهای x و y در بخش عنوان تعریف تابع آمدهاند (طبق معمول) ولی در اعلان تابع وجود ندارند.
اسلاید ۱۸۳: اغلب این طور است که تعریف و بدن توابع در فایلهای جداگانهای قرار میگیرد. این فایلها به طور مستقل کامپایل۱ میشوند و سپس به برنام اصلی که آن توابع را به کار میگیرد الصاق۲ میشوند. ۶- کامپایل جداگان توابع توابع کتابخان C++ استاندارد به همین شکل پیادهسازی شدهاند و هنگامی که یکی از آن توابع را در برنامههایتان به کار میبرید باید با دستور راهنمای پیشپردازنده، فایل آن توابع را به برنامهتان ضمیمه کنید. این کار چند مزیت دارد:
اسلاید ۱۸۴: ۱- اولین مزیت «مخفیسازی اطلاعات» است. ۲-مزیت دیگر این است که توابع مورد نیاز را میتوان قبل از این که برنام اصلی نوشته شود، جداگانه آزمایش نمود. ۳-سومین مزیت این است که در هر زمانی به راحتی میتوان تعریف توابع را عوض کرد بدون این که لازم باشد برنام اصلی تغییر یابد.۴-چهارمین مزیت هم این است که میتوانید یک بار یک تابع را کامپایل و ذخیره کنید و از آن پس در برنامههای مختلفی از همان تابع استفاده ببرید.
اسلاید ۱۸۵: int max(int x, int y){ if (x < y) return y; else return x;}max.cppتابع max() را به خاطر بیاورید. برای این که این تابع را در فایل جداگانهای قرار دهیم، تعریف آن را در فایلی به نام max.cpp ذخیره میکنیم. فایل max.cpp شامل کد زیر است:
اسلاید ۱۸۶: حال کافی است عبارت:#include <test.cpp> را به اول برنامه اصلی وقبل ازmain() اضافه کنیم:#include <test.cpp> int main(){ // tests the max() function: int m, n; do { cin >> m >> n; cout << tmax( << m << , << n << ) = << max(m,n) << endl; } while (m != 0);}
اسلاید ۱۸۷: نحو کامپایل کردن فایلها و الصاق آنها به یکدیگر به نوع سیستم عامل و نوع کامپایلر بستگی دارد. در سیستم عامل ویندوز معمولا توابع را در فایلهایی از نوع DLL کامپایل و ذخیره میکنند و سپس این فایل را در برنام اصلی احضار مینمایند. فایلهای DLL را به دو طریق ایستا و پویا میتوان مورد استفاده قرار داد. برای آشنایی بیشتر با فایلهای DLL به مرجع ویندوز و کامپایلرهای C++ مراجعه کنید.
اسلاید ۱۸۸: ۶- متغیرهای محلی، توابع محلیمتغیر محلی، متغیری است که در داخل یک بلوک اعلان گردد. این گونه متغیرها فقط در داخل همان بلوکی که اعلان میشوند قابل دستیابی هستند. چون بدن تابع، خودش یک بلوک است پس متغیرهای اعلان شده در یک تابع متغیرهای محلی برای آن تابع هستند. این متغیرها فقط تا وقتی که تابع در حال کار است وجود دارند. پارامترهای تابع نیز متغیرهای محلی محسوب میشوند.
اسلاید ۱۸۹: * مثال ۷-۵ تابع فاکتوریلاعداد فاکتوریل را در مثال ۸-۵ دیدیم. فاکتوریل عدد صحیح n برابر است با:n! = n(n-1)(n-2)..(3)(2)(1)تابع زیر، فاکتوریل عدد n را محاسبه میکند:long fact(int n){ //returns n! = n*(n-1)*(n-2)*…*(2)*(1) if (n < 0) return 0; int f = 1; while (n > 1) f *= n–; return f;}این تابع دو متغیر محلی دارد: n و f پارامتر n یک متغیر محلی است زیرا در فهرست پارامترهای تابع اعلان شده و متغیر f نیز محلی است زیرا درون بدن تابع اعلان شده است.
اسلاید ۱۹۰: همان گونه که متغیرها میتوانند محلی باشند، توابع نیز میتوانند محلی باشند. یک تابع محلی تابعی است که درون یک تابع دیگر به کار رود. با استفاده از چند تابع ساده و ترکیب آنها میتوان توابع پیچیدهتری ساخت. به مثال زیر نگاه کنید. تابع محلی در ریاضیات، تابع جایگشت را با p(n,k) نشان میدهند. این تابع بیان میکند که به چند طریق میتوان k عنصر دلخواه از یک مجموع n عنصری را کنار یکدیگر قرار داد. برای این محاسبه از رابط زیر استفاده میشود:
اسلاید ۱۹۱: پس به ۱۲ طریق میتوانیم دو عنصر دلخواه از یک مجموع چهار عنصری را کنار هم بچینیم. برای دو عنصر از مجموع {۱, ۲, ۳, ۴} حالتهای ممکن عبارت است از:۱۲, ۱۳, ۱۴, ۲۱, ۲۳, ۲۴, ۳۱, ۳۲, ۳۴, ۴۱, ۴۲, ۴۳کد زیر تابع جایگشت را پیادهسازی میکند:long perm(int n, int k){// returns P(n,k), the number of the permutations of k from n: if (n < 0) || k < 0 || k > n) return 0; return fact(n)/fact(n-k);}این تابع، خود از تابع دیگری که همان تابع فاکتوریل است استفاده کرده است. شرط به کار رفته در دستور if برای محدود کردن حالتهای غیر ممکن استفاده شده است. در این حالتها، تابع مقدار ۰ را برمیگرداند تا نشان دهد که یک ورودی اشتباه وجود داشته است.
اسلاید ۱۹۲: برنام آزمون برای تابع perm() در ادامه آمده است:long perm(int,int);// returns P(n,k), the number of permutations of k from n:int main(){ // tests the perm() function: for (int i = -1; i < 8; i++) { for (int j= -1; j <= i+1; j++) cout << << perm(i,j); cout << endl; }}0 00 1 00 1 1 00 1 2 2 00 1 3 6 6 00 1 4 12 24 24 00 1 5 20 60 120 120 00 1 6 30 120 360 720 720 00 1 7 42 210 840 2520 5040 5040 0
اسلاید ۱۹۳: ۷- تابع voidلازم نیست یک تابع حتما مقداری را برگرداند. در C++ برای مشخص کردن چنین توابعی از کلم کلیدی void به عنوان نوع بازگشتی تابع استفاده میکنند یک تابع void تابعی است که هیچ مقدار بازگشتی ندارد. از آنجا که یک تابع void مقداری را برنمیگرداند، نیازی به دستور return نیست ولی اگر قرار باشد این دستور را در تابع void قرار دهیم، باید آن را به شکل تنها استفاده کنیم بدون این که بعد از کلم return هیچ چیز دیگری بیاید:return;در این حالت دستور return فقط تابع را خاتمه میدهد.
اسلاید ۱۹۴: ۸- توابع بولیدر بسیاری از اوقات لازم است در برنامه، شرطی بررسی شود. اگر بررسی این شرط به دستورات زیادی نیاز داشته باشد، بهتر است که یک تابع این بررسی را انجام دهد. این کار مخصوصا هنگامی که از حلقهها استفاده میشود بسیار مفید است.توابع بولی فقط دو مقدار را برمیگردانند: true یا false . اسم توابع بولی را معمولا به شکل سوالی انتخاب میکنند زیرا توابع بولی همیشه به یک سوال مفروض پاسخ بلی یا خیر میدهند.
اسلاید ۱۹۵: مثال ۱۰-۵ تابعی که اول بودن اعداد را بررسی میکندکد زیر یک تابع بولی است که تشخیص میدهد آیا عدد صحیح ارسال شده به آن، اول است یا خیر:bool isPrime(int n){ // returns true if n is prime, false otherwise: float sqrtn = sqrt(n); if (n < 2) return false; // 0 and 1 are not primes if (n < 4) return true; // 2 and 3 are the first primes if (n%2 == 0) return false; // 2 is the only even prime for (int d=3; d <= sqrtn; d += 2) if (n%d == 0) return false; // n has a nontrivial divisor return true; // n has no nontrivial divisors}
اسلاید ۱۹۶: ۹- توابع ورودی/خروجی (I/O)بخشهایی از برنامه که به جزییات دست و پا گیر میپردازد و خیلی به هدف اصلی برنامه مربوط نیست را میتوان به توابع سپرد. در چنین شرایطی سودمندی توابع محسوستر میشود. فرض کنید نرمافزاری برای سیستم آموزشی دانشگاه طراحی کردهاید که سوابق تحصیلی دانشجویان را نگه میدارد. در این نرمافزار لازم است که سن دانشجو به عنوان یکی از اطلاعات پروند دانشجو وارد شود. اگر وظیف دریافت سن را به عهد یک تابع بگذارید، میتوانید جزییاتی از قبیل کنترل ورودی معتبر، یافتن سن از روی تاریخ تولد و … را در این تابع پیادهسازی کنید بدون این که از مسیر برنام اصلی منحرف شوید.
اسلاید ۱۹۷: قبلا نمونهای از توابع خروجی را دیدیم. تابع PrintDate() در مثال ۹-۵ هیچ چیزی به برنام اصلی برنمیگرداند و فقط برای چاپ نتایج به کار میرود. این تابع نمونهای از توابع خروجی است؛ یعنی توابعی که فقط برای چاپ نتایج به کار میروند و هیچ مقدار بازگشتی ندارند. توابع ورودی نیز به همین روش کار میکنند اما در جهت معکوس. یعنی توابع ورودی فقط برای دریافت ورودی و ارسال آن به برنام اصلی به کار میروند و هیچ پارامتری ندارند. مثال بعد یک تابع ورودی را نشان میدهد.
اسلاید ۱۹۸: مثال ۱۱-۵ تابعی برای دریافت سن کاربرتابع ساد زیر، سن کاربر را درخواست میکند و مقدار دریافت شده را به برنام اصلی میفرستد. این تابع تقریبا هوشمند است و هر عدد صحیح ورودی غیر منطقی را رد میکند و به طور مکرر درخواست ورودی معتبر میکند تا این که یک عدد صحیح در محدود ۷ تا ۱۲۰ دریافت دارد: int age(){ // prompts the user to input his/her age and returns that value: int n; while (true) { cout << How old are you: ; cin >> n; if (n < 0) cout << atYour age could not be negative.; else if (n > 120) cout << atYou could not be over 120.; else return n; cout << ntTry again.n; }}
اسلاید ۱۹۹: یک برنام آزمون و خروجی حاصل از آن در ادامه آمده است:int age()int main(){ // tests the age() function: int a = age(); cout << nYou are << a << years old.n;}How old are you 125 You could not be over 120 Try again.How old are you -3 Your age could not be negative Try again.How old are you 99You are 99 years old.
اسلاید ۲۰۰: تا این لحظه تمام پارامترهایی که در توابع دیدیم به طریق مقدار ارسال شدهاند. یعنی ابتدا مقدار متغیری که در فراخوانی تابع ذکر شده برآورد میشود و سپس این مقدار به پارامترهای محلی تابع فرستاده میشود. مثلا در فراخوانی cube(x) ابتدا مقدار x برآورد شده و سپس این مقدار به متغیر محلی n در تابع فرستاده میشود و پس از آن تابع کار خویش را آغاز میکند. در طی اجرای تابع ممکن است مقدار n تغییر کند اما چون n محلی است هیچ تغییری روی مقدار x نمیگذارد.
اسلاید ۲۰۱: پس خود x به تابع نمیرود بلکه مقدار آن درون تابع کپی میشود. تغییر دادن این مقدار کپی شده درون تابع هیچ تاثیری بر x اصلی ندارد. به این ترتیب تابع میتواند مقدار x را بخواند اما نمیتواند مقدار x را تغییر دهد. به همین دلیل به x یک پارامتر «فقط خواندنی» میگویند. وقتی ارسال به وسیل مقدار باشد، هنگام فراخوانی تابع میتوان از عبارات استفاده کرد. مثلا تابع cube() را میتوان به صورتcube(2*x-3) فراخوانی کرد یا به شکل cube(2*sqrt(x)-cube(3)) فراخوانی نمود. در هر یک از این حالات، عبارت درون پرانتز به شکل یک مقدار تکی برآورد شده و حاصل آن مقدار به تابع فرستاده میشود.
اسلاید ۲۰۲: ۱۰- ارسال به طریق ارجاع (آدرس)ارسال به طریق مقدار باعث میشود که متغیرهای برنام اصلی از تغییرات ناخواسته در توابع مصون بمانند. اما گاهی اوقات عمدا میخواهیم این اتفاق رخ دهد. یعنی میخواهیم که تابع بتواند محتویات متغیر فرستاده شده به آن را دستکاری کند. در این حالت از ارسال به طریق ارجاع استفاده میکنیم.
اسلاید ۲۰۳: برای این که مشخص کنیم یک پارامتر به طریق ارجاع ارسال میشود، علامت را به نوع پارامتر در فهرست پارامترهای تابع اضافه میکنیم. این باعث میشود که تابع به جای این که یک کپی محلی از آن آرگومان ایجاد کند، خود آرگومان محلی را به کار بگیرد. به این ترتیب تابع هم میتواند مقدار آرگومان فرستاده شده را بخواند و هم میتواند مقدار آن را تغییر دهد. در این حالت آن پارامتر یک پارامتر «خواندنی-نوشتنی» خواهد بود. &
اسلاید ۲۰۴: * مثال ۱۲-۵ تابع swap()تابع کوچک زیر در مرتب کردن دادهها کاربرد فراوان دارد:void swap(float& x, float& y){ // exchanges the values of x and y: float temp = x; x = y; y = temp;}هر تغییری که روی پارامتر خواندنی-نوشتنی در تابع صورت گیرد به طور مستقیم روی متغیر برنام اصلی اعمال میشود. به مثال زیر نگاه کنید.هدف این تابع جابجا کردن دو عنصری است که به آن فرستاده میشوند. برای این منظور پارامترهای x و y به صورت پارامترهای ارجاع تعریف شدهاند:float& x, float& y
اسلاید ۲۰۵: عملگر ارجاع & موجب میشود که به جای x و y آرگومانهای ارسالی قرار بگیرند. برنام آزمون و اجرای آزمایشی آن در زیر آمده است:void swap(float&, float&)// exchanges the values of x and y:int main(){ // tests the swap() function: float a = 55.5, b = 88.8; cout <&
- همچنین لینک دانلود به ایمیل شما ارسال خواهد شد به همین دلیل ایمیل خود را به دقت وارد نمایید.
- ممکن است ایمیل ارسالی به پوشه اسپم یا Bulk ایمیل شما ارسال شده باشد.
- در صورتی که به هر دلیلی موفق به دانلود فایل مورد نظر نشدید با ما تماس بگیرید.
مهسا فایل |
سایت دانلود فایل 