C++

2,030 views

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,030
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

C++

  1. 1. ‫بسم ال الرحمن‬ ‫الرحيم‬
  2. 2. ‫دانشگاه پيام‬ ‫نور‬ ‫دانشكده فناوري اطلعات‬
  3. 3. ‫برنامه سازي پيشرفته‬ ‫تعداد واحد: 3‬ ‫تهيه كننده:‬ ‫دكتر احمد فراهي‬
  4. 4. ‫:مقدمه‬ ‫زبان ‪ C‬يک زبان همه منظوره‬ ‫است. دستورالعمل‌هاي اين زبان‬ ‫بسيار شبيه عبارات جبري و نحو‬ ‫آن شبيه جملت انگليسي مي باشد.‬ ‫اين امر سبب مي‌شود که ‪ C‬يک‬ ‫زبان سطح بال باشد که‬
  5. 5. ‫++ ‪ C‬که از نسسسل ‪ C‬است، تمام‬ ‫ويژگي‌هاي ‪ C‬را بسه ارث برده اسست. اما‬ ‫برتري فني ديگري هم دارد: ‪ ++C‬اکنون‬ ‫»شي‌گرا« اسست. مي‌توان بسا استفاده از‬ ‫ايسسن خاصسسيت، برنامه‌هاي شي‌گرا توليد‬ ‫نمود. برنامه‌هاي شي‌گرا منظم و‬ ‫ساخت‌يافته‌اند، قابسل روزآمسد کردن‌انسد، به‬ ‫سهولت تغيير و بهبود مي‌يابند و قابليت‬ ‫اطمينان و پايداري بيشتري دارند.‬
  6. 6. ‫:اهم مطالب اين كتاب‬ ‫جلسه اول: »مقدمات برنامه‌نويسي با ‪«++C‬‬ ‫جلسه دوم: »انواع اصلي«‬ ‫«جلسه سوم: »انتخاب‬ ‫جلسه چهارم: ››تكرار«‬ ‫«جلسه پنجم: »توابع‬ ‫جلسه‌ ششم: » آرايه‌ها«‬
  7. 7. ‫‌‬ ‫‌‬ ‫«جلسه هفتم: »اشارهگرها و ارجاعها‬ ‫‌‬ ‫‌ ‌‬ ‫جلسه‌ هشتم: »رشتههاي كاراكتري و فايلها در ++‪C‬استاندارد«‬ ‫جلسه نهم: »شيئ‌گرايي«‬ ‫«جلسه‌ دهم: »سربارگذاري عملگرها‬ ‫جلسه يازدهم: »تركيب و وراثت«‬
  8. 8. ‫جلسه اول‬ ‫مقدمات برنامه‌نويسي با‬ ‫‪++C‬‬
  9. 9. ‫:آنچه در اين جلسه مي خوانيد‬ ‫1- چرا ‪ ++C‬؟‬ ‫2- تاريخچ ۀ ‪++C‬‬ ‫3- آماده‌سازي مقدمات‬ ‫4- شروع کار با ‪++C‬‬ ‫5- عملگر خروجي‬ ‫6- ليترال‌ها و کاراکترها‬ ‫7- متغيرها و تعريف آن‌ها‬ ‫8- مقداردهي اوليه به متغيرها‬ ‫9- ثابت‌ها‬
  10. 10. ‫هدف کلي:‬ ‫آشنايي با تاريخچه و مزاياي زبان برنامه‌نويسي‬ ‫‪ ++C‬و بيان مفاهيم بنيادي شي‌گرايي و عناصر‬ ‫مهم برنامه‌هاي ‪++C‬‬
  11. 11. ‫:هدف‌هاي رفتاري‬ ‫انتظار مي‌رود پس از پايان اين جلسه بتوانيد:‬ ‫- مزاياي زبان ‪ ++C‬را بر زبان‌هاي مشاب ه ذکر‬ ‫کرده و تفاوت آن را با زبان ‪ C‬بيان کنيد.‬ ‫- شرح مختص ري از رون د پيشرفت زبان‌هاي‬ ‫برنامه‌نويسي را بيان کرده و مشکلت هر دوره را‬ ‫به اختصار شرح دهيد.‬ ‫- مزاياي شي‌گرايي در توليد نرم‌افزار را برشماريد.‬ ‫- اصول سه‌گانۀ شي‌گرايي را نام برده و هر يک‬ ‫را به اختصار شرح دهيد.‬
  12. 12. ‫- قال ب کل ي برنامه‌هاي ‪ ++C‬را بشناس يد و بتوانيد‬ ‫برنامه‌هاي کوچک را نوشته و آزمايش کنيد.‬ ‫- عملگر ورودي و خروجي را در ‪ ++C‬شناخته و از آن‌ها‬ ‫در برنامه‌ها استفاده کنيد.‬ ‫- نحوۀ اعلن متغيره ا و شيوۀ مقدارده ي ب ه آن‌ها را‬ ‫بدانيد.‬ ‫- سه موجوديت »ليترال« ، »کاراکتر« و »عدد« را شناخته‬ ‫و فرق بين آن‌ها را شرح دهيد.‬ ‫- علت و شيوه‌هاي افزودن توضيح به کد برنامه را شرح‬ ‫دهيد.‬ ‫- علت و شيوۀ معرفي ثابت‌ها در برنامه را شرح دهيد.‬
  13. 13. ‫مقدمه‬ ‫در دهه 0791 در آزمايشگاه‌هاي بل زباني به نام ‪C‬‬ ‫ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود‬ ‫تا اي ن ک ه در س ال 8791 توسط ‪ Kernighan‬و‬ ‫‪ Richie‬شرح کامل ي از اي ن زبان منتش ر ش د و به‬ ‫سرعت نظر برنامه‌نويسان حرفه‌اي را جلب نمود.‬ ‫هنگام ي ک ه بح ث شي‌گراي ي و مزاياي آن در جهان‬ ‫نرم‌افزار رون ق ياف ت، زبان ‪ C‬که قابليت شي‌گرايي‬ ‫نداشت ناقص به نظر مي‌رسيد تا اين که در اوايل‬ ‫ده ۀ 0891 دوباره شرک ت ب ل دس ت ب ه کار شد و‬ ‫‪ Bjarne Stroustrup‬زبان ‪ ++C‬را طراحي نمود‬
  14. 14. ‫‪ ++C‬ترکيبي از دو زبان ‪ C‬و ‪ Simula‬بود و‬ ‫قابليت‌هاي شي‌گراي ي ني ز داشت. از آ ن زمان به‬ ‫بع د شرکت‌هاي زيادي کامپايلرهايي براي ‪++C‬‬ ‫طراحي کردند. اين امر سبب شد تفاوت‌هايي بين‬ ‫نس خه‌هاي مختل ف اي ن زبان ب ه وجود بيايد و از‬ ‫قابليت سازگاري و انتقال آن کاسته شود.‬ ‫ب ه همين دليل در س ال 8991 زبان ‪ ++C‬توسط‬ ‫موس سۀ اس تانداردهاي مل ي آمريک ا )‪ (ANSI‬به‬ ‫شکل استاندارد و يک‌پارچه در‌آمد.‬
  15. 15. ‫1- چرا ‪ ++C‬؟‬ ‫‪ ‬زبان ‪ C‬يک زبان همه ظوره است‬ ‫من‬ ‫‪ ‬در اي ن زبان عملگ هاي ي ت عبيه شده که‬ ‫ر‌‬ ‫برنامه ي طح پاي ين و به زبان ماشين را‬ ‫‌نويس س‬ ‫نيز امکان‌پذير ي‌سازد‬ ‫م‬ ‫هاي فراواني دارد، کد منبع‬ ‫‪‬چون ‪ C‬عملگر‬ ‫برنام ها در اين زبان بسيار کوتاه است‬ ‫ه‌‬
  16. 16. ‫- زبان ‪ C‬براي اجراي بسياري از دستوراتش از توابع کتابخانه‌اي‬ ‫‪‬‬ ‫استفاده مي‌کند و بيشتر خصوصيات وابسته به سخت‌افزار را به اين‬ ‫توابع واگذار مي‌نمايد.‬ ‫‪ ‬برنامۀ مقصدي که توسط کامپايلرهاي ‪ C‬ساخته مي‌شود بسيار‬ ‫فشرده‌تر و کم‌حجم‌تر از برنامه‌هاي مشابه در ساير زبان‌ها است.‬ ‫‪ ++C‬که از نسل ‪ C‬است، تمام ويژگي‌هاي جذاب ‪ C‬را به ارث‬ ‫‪‬‬ ‫برده است .‬ ‫و سرانجام آخرين دليل استفاده از ‪ ++C‬ورود به دنياي ‪ #C‬است.‬ ‫‪‬‬
  17. 17. ‫2- تاريخچۀ ‪++C‬‬ ‫در ده ه 0791 در آزمايشگاه‌هاي ب ل زبان ي به نام ‪C‬‬ ‫ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود تا‬ ‫اي ن ک ه در س ال 8791 توسط ‪ Kernighan‬و ‪Richie‬‬ ‫شرح کاملي از اين زبان منتشر شد و به سرعت نظر‬ ‫برنامه‌نويسان حرفه‌اي را جلب نمود. هنگامي که بحث‬ ‫شي‌گرايي و مزاياي آن در جهان نرم‌افزار رونق يافت،‬ ‫زبان ‪ C‬که قابلي ت شي‌گراي ي نداش ت ناق ص ب ه نظر‬ ‫مي‌رسيد تا اين که در اوايل دهۀ 0891 دوباره شرکت‬ ‫بل دست به کار شد و ‪ Bjarne Stroustrup‬زبان ‪++C‬‬ ‫را طراحي نمود.‬
  18. 18. ‫‪ ++C‬ترکيبي از دو زبان ‪ C‬و ‪ Simula‬بود و‬ ‫قابليت‌هاي شي‌گرايي نيز داشت از آن زمان به بعد‬ ‫شرکت‌هاي زيادي کامپايلرهايي براي ‪ ++C‬طراحي‬ ‫کردند. اي ن ام ر س بب ش د تفاوت‌هاي ي بين‬ ‫نس خه‌هاي مختل ف اي ن زبان ب ه وجود بيايد و از‬ ‫قابليت سازگاري و انتقال آن کاسته شود . به همين‬ ‫دلي ل در س ال 8991 زبان ‪ ++C‬توس ط موسسۀ‬ ‫اس تانداردهاي مل ي آمريک ا )‪ (ANSI‬به شکل‬ ‫استاندارد و يک‌پارچه در‌آمد. کامپايلرهاي کنوني به‬ ‫اي ن اس تاندارد پايبندند. کتاب حاض ر نيز بر مبناي‬ ‫همين استاندارد نگارش يافته است.‬
  19. 19. ‫آماده‌سازي مقدمات -3‬ ‫يک »برنامه« دستورالعمل‌هاي متوالي است که‬ ‫مي‌تواند توسط يک رايانه اجرا شود. براي نوشتن‬ ‫و اجراي هر برنامه به يک »ويرايش‌گر متن« و يک‬ ‫»کامپايلر« احتياج داريم.‬ ‫بس تۀ ‪ ++Visual C‬محص ول شرکت‬ ‫ميکروس افت و بس تۀ ‪ C++ Builder‬محصول‬ ‫شرکت بورلند نمونه‌هاي جالبي از محيط مجتمع‬ ‫توليد براي زبان ‪ ++C‬به شمار مي‌روند.‬
  20. 20. ‫4- شروع کار با ‪++C‬‬ ‫‪ ++C ‬نسبت به حروف »حساس به حالت« است يعني ‪ A‬و‬ ‫‪ a‬را يکي نمي‌داند‬ ‫مثال : اولين برنامه‬ ‫اولين برنامه‌اي که مي‌نويسيم به محض تولد، به شما سلم مي‌کند و عبارت "‪ "!Hello, my programmer‬را‬ ‫نمايش مي‌دهد:‬ ‫#‪<include <iostream‬‬ ‫‪()int main‬‬ ‫} ‪; "std::cout << "Hello, my programmer!n‬‬ ‫0 ‪;return‬‬ ‫{‬
  21. 21. ‫اولين خط از کد بال يک »راهنماي‬ ‫پيش‌پردازنده« است. راهنماي پيش‌پردازنده‬ ‫شامل اجزاي زير است:‬ ‫‪ -1 ‬کاراکتر # که نشان مي‌دهد اين خط، يک‬ ‫راهنماي پيش‌پردازنده اس ت. اي ن کاراکت ر بايد‬ ‫در ابتداي همۀ خطوط راهنماي پيش‌پردازنده‬ ‫باشد.‬ ‫‪ -2 ‬عبارت ‪include‬‬ ‫‪ -3 ‬نام يک »فايل کتابخانه‌اي« که ميان دو‬ ‫علمت >< محصور شده است.‬
  22. 22. ‫خط دوم برنامه نيز بايد در همه برنامه‌هاي ‪+C‬‬ ‫+ وجود داشته باشد.‬ ‫اين خط به کامپايلر مي‌گويد که »بدنۀ اصلي برنامه« از کجا شروع‬ ‫مي‌شود. اين خط داراي اجزاي زير است:‬ ‫1 – عبارت ‪ int‬که يک نوع عددي در ‪ ++C‬است.‬ ‫2 – عبارت ‪ main‬که به آن »تابع اصلي« در ‪ ++C‬مي‌گويند.‬ ‫3 – دو پرانتز )( که نشان مي‌دهد عبارت ‪ main‬يک »تابع« است.‬ ‫هر برنامه فقط بايد يک تابع‬ ‫‪ ()main‬داشته باشد .‬
  23. 23. ‫سه خط آخر برنامه، »بدنۀ اصلي برنامه« را تشکيل‬ ‫.مي‌دهند‬ ‫دستورات برنامه از خط سوم شروع شده است.‬ ‫دستور خط سوم با علمت سميکولن ; پايان يافته‬ ‫است.‬
  24. 24. ‫توضيح‬ ‫‪‬توضي ح، متن ي اس ت ک ه به منظور‬ ‫راهنماي ي و درک بهت ر ب ه برنام ه اضافه‬ ‫مي‌شود و تاثيري در اجراي برنامه‬ ‫ندارد. . کامپايلر توضيحات برنامه را قبل‬ ‫از اجرا حذف مي‌کند.‬ ‫‪ ‬اس تفاده از توضي ح س بب مي‌شود که‬ ‫ساير افراد ک د برنام ۀ شم ا را راحت‌تر‬
  25. 25. ‫به دو صورت مي‌توانيم به برنامه‌هاي ‪ ++C‬توضيحات اضافه‬ ‫کنيم:‬ ‫‪ – 1 ‬با اس تفاده از دو علمت‬ ‫اس لش // : هر متن ي ک ه بعد از دو‬ ‫علم ت اس لش بياي د تا پايان همان‬ ‫سطر يک توضيح تلقي مي‌شود .‬ ‫‪ – 2‬با استفاده از حالت ‪ : C‬هر متني‬ ‫که ب ا علم ت /* شروع شود و با‬ ‫علمت */ پايان يابد يک توضيح تلقي‬
  26. 26. ‫5- عملگر خروجي‬ ‫علم ت >> عملگ ر خروج ي در ‪ ++C‬نام دارد )به آن‬ ‫عملگر درج نيز مي‌گويند(.‬ ‫يک »عملگر« چيزي است که عملياتي را روي يک يا چند‬ ‫شي انجام مي‌دهد. عملگر خروجي، مقادير موجود در سمت‬ ‫راستش را به خروجي سمت چپش مي‌فرستد.‬ ‫به اين ترتيب دستور‬ ‫; 66 <<‪cout‬‬ ‫مقدار 66 را به خروجي ‪ cout‬مي‌فرستد که ‪ cout‬معمول‬ ‫به صفحه‌نمايش اشاره دارد. در نتيجه مقدار 66 روي صفحه‬ ‫نمايش درج مي‌شود.‬
  27. 27. ‫6 -ليترال‌ها و کاراکترها‬ ‫ي ک »ليترال« رشته‌اي از حروف، ارقام ي ا علي م چاپي‬ ‫اس ت ک ه ميان دو علم ت نق ل قول " " محصور شده‬ ‫باشد.‬ ‫يک »کاراکتر« يک حرف، رقم يا علمت قابل چاپ است‬ ‫که ميان دونشانۀ ' ' محصور شده باشد. پس '‪ 'w‬و '!' و‬ ‫'1' هر کدام يک کاراکتر است.‬ ‫به تفاوت سه موجوديت »عدد« و »کاراکتر« و »ليترال‬ ‫رشته‌اي« دق ت کني د: 6 يک عدد اس ت، '6' يک کاراکتر‬ ‫است و "6" يک ليترال رشته‌اي است.‬
  28. 28. ‫7 - متغيرها و تعريف آن‌ها:‬ ‫»متغيسر« مکانسي در حافظسه اسست کسه چهار مشخصه‬ ‫دارد: نام، نوع، مقدار، آدرس س . وقتي متغيري را‬ ‫تعري ف مي‌کني م، ابتدا ب ا توج ه ب ه نوع متغير،‬ ‫آدرسي از حافظه در نظر گرفته مي‌شود، سپس‬ ‫به آن آدرس يک نام تعلق مي‌گيرد.‬
  29. 29. ‫در ‪ ++C‬قبل از اين که بتوانيم از متغيري استفاده‬ ‫کنيم، بايد آن را اعلن نماييم.‬ ‫نحو اعلن يک متغير‬ ‫‪type name initializer‬‬ ‫عبارت ‪ type‬نوع متغي ر را مشخص مي‌کند.‬ ‫نوع متغير به کامپايلر اطلع مي‌دهد که اين‬ ‫متغي ر چ ه مقاديري مي‌توان د داشت ه باشد و‬ ‫چه اعمالي مي‌توان روي آن انجام داد.‬
  30. 30. ‫‪name initializer‬‬ ‫عبارت ‪ name‬نام متغي ر را نشان مي‌دهد. اين نام‬ ‫حداکث ر مي‌توان د 13 کاراکت ر باش د، نباي د با عدد شروع‬ ‫شود، علي م رياض ي نداشت ه باش د و همچني ن »کلمۀ‬ ‫کليدي« نيز نباشد.‬ ‫مقداردهي اوليه‬ ‫عبارت ‪ initializer‬عبارت »مقداردهي اوليه« نام دارد. با‬ ‫استفاده از اين عبارت مي‌توان مقدار اوليه‌اي در متغير‬ ‫مورد نظر قرار داد.‬ ‫دستور زير تعريف يک متغير صحيح را نشان مي‌دهد:‬ ‫;05 = ‪int n‬‬
  31. 31. ‫8 - مقداردهي اوليه به متغيرها‬ ‫در بسياري از موارد بهتر است متغيرها را در همان محلي که‬ ‫اعلن مي‌شون د مقدارده ي کنيم. استفاده از متغيرهاي‬ ‫مقداردهي نشده ممکن است باعث ايجاد دردسرهايي شود.‬ ‫دردس ر متغيرهاي مقدارده ي نشده وقت ي بزرگ‌ تر مي‌شود که‬ ‫سعي کني م متغي ر مقدارده ي نشده را در ي ک محاس به به کار‬ ‫ببريم. مثل اگر ‪ x‬را که مقداردهي نشده در عبارت 5 + ‪;y = x‬‬ ‫به کار ب بريم، حاص ل ‪ y‬غي ر قاب ل پيش‌ بيني خواهد بود. براي‬ ‫اجتناب از چنين مشکلتي عاقلنه است که متغيرها را هميشه‬ ‫هنگام تعريف، مقداردهي کنيم.‬ ‫مثال:‬ ‫;54=‪int x‬‬ ‫;0=‪int y‬‬
  32. 32. ‫9- ثابت‌ها‬ ‫در بعضي از برنامه ‌ها از متغيري استفاده مي‌کنيم که فقط يک بار لزم‬ ‫است آن را مقداردهي کنيم و سپس مقدار آن متغير در سراسر برنامه‬ ‫بدون تغيير باقي مي‌ماند. مثل در يک برنامۀ محاسبات رياضي، متغيري به‬ ‫نام ‪ PI‬تعريف مي‌کنيم و آن را با 41.3 مقداردهي مي‌کنيم و مي‌خواهيم‬ ‫که مقدار اي ن متغي ر در س راسر برنام ه ثاب ت بماند. در چني ن حالتي از‬ ‫»ثابت‌ها« استفاده مي‌کنيم.‬ ‫يک ثابت، يک نوع متغير است که فقط يک بار مقداردهي‬ ‫مي‌شود و سپس تغيير دادن مقدار آن در ادامۀ برنامه ممکن‬ ‫نيست.‬ ‫تعريف ثابت‌ها مانند تعريف متغيرهاست با اين تفاوت که‬ ‫کلمه کليدي ‪ const‬به ابتداي تعريف اضافه مي‌شود.‬
  33. 33. :‫مثال تعريف ثابت‌ها‬ 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; } ‫:برنامه فوق خروجي ندارد‬
  34. 34. ‫عملگر ورودي - 01‬ ‫براي اين که بتوانيم هنگام اجراي برنامه مقاديري را وارد کنيم از‬ ‫عملگر ورودي << استفاده مي‌کنيم.‬ ‫:استفاده از دستور ورودي به شکل زير است‬ ‫;‪cin >> variable‬‬ ‫‪ variable‬نام يک متغير است.‬
  35. 35. ‫مثال 101 – استفاده از عملگر ورودي‬ ‫برنامس ۀزسسسيسر يسک عدد از کاربر گرفته و همان عدد را دوباره در‬ :‫خروجي نمايش مي‌دهد‬ 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: 52 your number is: 52
  36. 36. ‫عملگسر ورودي نيسز ماننسد عملگسر خروجسي بسه شکل‬ ‫جريانسي رفتار مي‌کند. يعنسي همان طور کسه در عملگر‬ ‫خروجي مي‌توانستيم چند عبارت را با استفاده از چند‬ ‫عملگسر >> به صسورت پشست سسر هسم چاپ کنيم، در‬ ‫عملگر ورودي نيز مي‌توانيم با استفاده از چند عملگر‬ ‫<< چند مقدار را به صورت پشت سر هم دريافت کنيم.‬ ‫مثل با استفاده از دستور:‬ ‫;‪cin >> x >> y >> z‬‬ ‫سه مقدار ‪ x‬و ‪ y‬و ‪ z‬به ترتيب از ورودي دريافت مي‌شوند.‬ ‫براي ايسسن کار بايسسد بيسسن هسسر ورودي يسسک فضاي خالي‬ ‫)‪ (space‬بگذاريد و پس از تايپ کردن هم ۀوسسسرودي‌ها، کليد‬ ‫‪ enter‬را بفشاريد. آخرين مثال جلسه، اين موضوع را بهتر‬
  37. 37. ‫مثال 111 – چند ورودي روي يک خط‬ ‫برنام ۀزسسسير مانند مثال 01 – 2 است با اين تفاوت که سه‬ ‫عدد را از ورودي گرفته و همان اعداد را دوباره در‬ :‫خروجي نمايش مي‌دهد‬ 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 9 your numbers are: 35, 70, 9 }
  38. 38. ‫پايان جلسه اول‬
  39. 39. ‫جلسه دوم‬ ‫»انواع اصلي«‬
  40. 40. ‫:آنچه در اين جلسه مي خوانيد‬ ‫1- انواع داد ۀعسسسسددي‬ ‫2- متغير عدد صحيح‬ ‫3- محاسبات اعداد صحيح‬ ‫4- عملگرهاي افزايشي و‬ ‫کاهشي‬ ‫5- عملگرهاي مقدارگذاري مرکب ›››‬
  41. 41. ‫7- تعريف متغير مميز شناور‬ ‫8 - شکل علمي مقادير مميز‬ ‫شناور‬ ‫9- نوع بولين ‪bool‬‬ ‫01- نوع کاراکتري ‪char‬‬ ‫11- نوع شمارشي ‪enum‬‬ ‫›››‬ ‫21- تبديل نوع، گسترش نوع‬
  42. 42. ‫31- برخي از خطاهاي‬ ‫برنامه‌نويسي‬ ‫41 - سرريزي عددي‬ ‫51- خطاي گرد کردن‬ ‫61- حوزۀ متغيرها‬
  43. 43. ‫هدف کلي:‬ ‫هدف‌هاي رفتاري:‬ ‫انتظار مي‌رود پ س از وپايان اي بن‌کارگيري‬ ‫معرف ي انواع متغييرها نحوۀ ه جلسه‬ ‫بتوانيد:در برنامه‌هاي ‪++C‬‬ ‫آن‌ها‬ ‫- انواع عددي صحيح در ‪ ++C‬را نام ببريد و‬ ‫متغيرهاي ي از اي ن نوع‌ ها را در برنامه‌ ها به‬ ‫کار ببريد.‬ ‫- انواع عددي مميز شناور در ‪ ++C‬را نام‬ ‫ببري د و متغيرهاي ي از اي ن نوع‌ها را در‬ ‫<<<‬ ‫برنامه‌ها به کار ببريد.‬ ‫- نوع بولين را تعريف کرده و متغيرهايي از‬
  44. 44. ‫- نوع شمارشي را شناخته و متغيرهايي از‬ ‫اين نوع را در برنامه‌ها به کار ببريد.‬ ‫- مفاهيم »تبديل نوع« و »گسترش نوع« را‬ ‫شناخته و انواع مختلف را به يکديگر تبديل‬ ‫نماييد.‬ ‫- عل ت خطاهاي »سرريزي عددي« و‬ ‫»گردکردن« را دانسته و بتوانيد محل وقوع‬ ‫آن‌ها را کشف کنيد.‬ ‫- عملگرهاي حسابي و افزايشي و کاهشي‬
  45. 45. ‫مقدمه‬ ‫م ا در زندگ ي روزمره از داده‌هاي مختلفي‬ ‫استفاده مي‌کنيم: اعداد ، تصاوير، نوشته‌ها‬ ‫يا حروف الفب ا، ص داها، بوه ا و ... . با‬ ‫پردازش اي ن داده‌ ها مي‌تواني م تصميماتي‬ ‫اتخاذ کنيم، عکس‌العمل‌هايي نشان دهيم و‬ ‫مس اله‌اي را ح ل کنيم. رايانه‌ ها نيز قرار‬ ‫اس ت همي ن کار را انجام دهند. يعني‬ ‫داده‌هايي را بگيرند، آن ‌ها را به شکلي که‬ ‫ما تعيين مي‌کنيم پردازش کنند و در نتيجه‬
  46. 46. ‫1- انواع دادۀ عددي‬ ‫در ‪ ++C‬دو نوع اصلي داده وجود دارد:‬ ‫»نوع ص حيح« و »نوع مميز شناور«.‬ ‫همۀ انواع ديگر از روي اين دو ساخته‬ ‫مي‌شوند )به شکل زير دقت کنيد(.‬ ‫انواع اصلي‬ ‫انواع مميز شناور انواع صحيح‬
  47. 47. ‫نوع صحيح‬ ‫نوع صحيح براي نگهداري اعداد‬ ‫صحيح )اعداد 0 و 1 و 2 و ...(‬ ‫استفاده مي‌شود. اين اعداد بيشتر‬ ‫براي شمارش ب ه کار مي‌روند و‬ ‫دامنه محدودي دارند.‬
  48. 48. ‫انواع صحيح‬ ‫نوع‬ ‫نوع‬ ‫نوع‬ ‫نوع‬ boolean ‫ي‬‫شمارش‬ ‫کاراکتري‬ ‫عددي صحيح‬ short bool enum char int long unsigned Unsigned char short Unsigned wchar_t int unsigned long
  49. 49. ‫نوع مميز شناور براي نگهداري اعداد اعشاري‬ ‫اس تفاده مي‌شود. اعداد اعشاري بيشتر براي‬ ‫اندازه‌گيري دقيق به کار مي‌روند و دامنۀ بزرگ‌تري‬ ‫دارند . يک عدد اعشاري مثل 781/253 را مي‌توان‬ ‫به شک ل 01×81/2537 يا 201×1/25378‬ ‫يا01×3781/251-يا01×53781/2 2-و يا ... نوشت.‬ ‫به اي ن انواع مميز کم و زياد کردن‬ ‫ترتي ب ب ا شناور‬ ‫توان عدد 01 مميز عدد نيز جابه‌جا‬ ‫مي‌شود . به همين دليل است که به‬ ‫اعداد اعشاري »اعداد مميز ‪«float‬‬ ‫شناور‬ ‫‪double‬‬ ‫‪long double‬‬ ‫مي‌گويند.‬
  50. 50. ‫متغير عدد صحيح -2‬ ‫‪ ++C‬شش نوع متغي ر عدد صحيح دارد‬ ‫تفاوت اي ن ش ش نوع مربوط به ميزان‬ ‫حافظ ۀ مورد استفاده و محدودۀ مقاديري‬ ‫است که هر کدام مي‌توانند داشته باشند.‬ ‫اين ميزان حافظۀ مورد استفاده و محدودۀ‬ ‫مقادي ر، بس تگي زيادي ب ه سخت‌افزار و‬ ‫همچني ن س يستم عام ل دارد. يعن ي ممکن‬ ‫اس ت روي ي ک رايان ه، نوع ‪ int‬دو بايت از‬ ‫حافظ ه را اشغال کن د در حال ي که روي‬ ‫رايانه‌اي از نوع ديگ ر نوع ‪ int‬به چهار بايت‬
  51. 51. ‫نوع متغيير‬ ‫حداقل مقدار قابل‬ ‫حداكثر مقدار قابل‬ ‫پذيرش‬ ‫پذيرش‬ ‫‪short‬‬ ‫86723-‬ ‫76723‬ ‫‪unsigned short‬‬ ‫توجسه داشته‬ ‫0‬ ‫53556‬ ‫وقتسي برنامه‌اي مي‌نويسسيد،‬ ‫باشيسد کسه از نوع صسحيح مناسسب استفاده‬ ‫‪int‬‬ ‫7463847412 8463847412-‬ ‫5927694924 برنامه دچار خطا ‪unsigned int‬‬ ‫نشود و هم‬ ‫0‬ ‫کنيد تا هم‬ ‫حافظ ۀسسسسيستم را هدر ندهيد.‬ ‫‪long‬‬ ‫8463847412-‬ ‫7463847412‬ ‫‪unsigned long‬‬ ‫0‬ ‫5927694924‬
  52. 52. ‫3 -محاسبات اعداد صحيح‬ ‫‪ ++C‬مانن د اغلب زبان‌هاي‬ ‫برنامه‌نويسي براي محاسبات از‬ ‫عملگرهاي جم ع )+( ، تفريق‬ ‫)-( ، ضرب )*( ، تقسيم )/( و‬ ‫باقيمانده )%( استفاده مي‌کند.‬
  53. 53. ‫4 - عملگرهاي افزايشي و کاهشي‬ ‫‪ ++C‬براي دستکاري مقدار متغيرهاي صحيح، دو‬ ‫عملگر جالب ديگر دارد:‬ ‫عملگر ++ کدام از ايسن عملگرها دو‬ ‫امسا هسر :‬ ‫شکسسسل متفاوت دارنسسسد : شکل‬ ‫مقدار يک متغير را يک واحد افزايش‬ ‫»پيشوندي« و شکل »پسوندي«.‬ ‫مي‌دهد.‬ ‫عملگر -- :‬
  54. 54. ‫در شک ل پيشوندي ابتدا متغير،‬ ‫متناس ب ب ا عملگعملگر قبلش نام‬ ‫يا‬ ‫در شکل پيشوندي، ر، افزاي از‬ ‫متغير مي‌آيد مثل ++ ‪ m‬يا -- ‪ . n‬در‬ ‫کاهش مي‌يابد و پس از آن مقدار‬ ‫شک ل پس وندي، عملگ ر بعد از نام‬ ‫متغير مي‌آيد مثل محاس يا ‪ . --n‬ديگر‬ ‫متغي ر براي ‪ ++m‬بات‬ ‫استفاده مي‌شود.‬ ‫در شک ل پسوندي ابتدا مقدار‬ ‫متغير در محاسبات به کار مي‌رود‬ ‫و پس از آن مقدار متغير يک واحد‬
  55. 55. ‫5 – عملگرهاي مقدارگذاري مرکب‬ ‫‪ ++ C‬عملگرهاي ديگري دارد که‬ ‫مقدارگذاري در متغيره ا را تسهيل‬ ‫م ي ‌نمايند. مثل با ا ستفاده از عملگر‬ ‫+= م ي ‌تواني م هش ت واح د به ‪m‬‬ ‫اضا فه کن يم ا ما با د ستور کوتا ه ‌ تر:‬ ‫دستور بال معادل دستور 8 + ‪ ;m = m‬است‬ ‫با اين تفاوت که کوتاه‌تر است. به عملگر +=‬ ‫»عملگ ر مرک ب« مي‌گوين د زيرا ترکيبي از‬
  56. 56. ‫عملگرهاي مقدارگذاري مرکب -5‬ ‫براي مقدارگذاري در‬ ‫قبل از عملگر =‬ ‫متغيرها استفاده کرديم. ‪ ++C‬عملگرهاي‬ ‫ديگري دارد ک ه مقدارگذاري در متغيرها را‬ ‫تسهيل مي‌نمايند.‬ ‫+= و‬ ‫عملگر مرکب در ‪ ++C‬عبارتند از:‬ ‫-= و *= و /= و =%‬
  57. 57. ‫نحوۀ ع مل ا ين عملگر ها به شکل‬ ‫زير است:‬ ‫;8 + ‪m += 8; → m = m‬‬ ‫;8 - ‪m -= 8; → m = m‬‬ ‫;8 * ‪m *= 8; →m = m‬‬ ‫;8 / ‪m /= 8; →m = m‬‬ ‫;8 % ‪m %= 8; →m = m‬‬
  58. 58. ‫6 – انواع مميز شناور‬ ‫عدد مميز شناور به بيان ساده همان عدد اعشاري است. عددي‬ ‫مثل 54.321 يک عدد اعشاري است. براي اين که مقدار اين‬ ‫عدد در رايانسه ذخيره شود، ابتدا بايسد بسه شکسل دودويسي تبديل‬ ‫21001110.1101111 = 54.321‬ ‫شود:‬ ‫اکنون براي مشخ ص نمودن محل اعشار در عدد، تمام‬ ‫رقم ‌ها را به سمت راست مميز منتقل مي‌کنيم. البته با هر‬ ‫جابجايي مميز، عدد حاصل بايد در تواني از 2 ضرب شود:‬ ‫72 ×10011101101111.0 = 54.321‬ ‫به مقدار 10011101101111 »مانتيس عدد« و به‬ ‫7 که توان روي دو است، »نماي عدد« گفته مي‌شود.‬
  59. 59. ‫در ‪ ++C‬سه نوع مميز شناور وجود‬ ‫دارد:‬ ‫انواع مميز شناور‬ ‫‪float‬‬ ‫‪double‬‬ ‫‪long double‬‬ ‫نوع ‪ double‬از هشتهشتبراي‬ ‫نوع ‪ long double‬از بايت‬ ‫معمول نوع ‪ float‬از چهار يا‬ ‫نگهداري عدد استفاده مي‌کند.بايت‬ ‫ده براي نگهداري شانزده بايت‬ ‫عدد استفاده‬ ‫ي ا دوازده ي ا‬ ‫برايي نگهداري عدد استفاده‬ ‫م ‌کند.‬
  60. 60. ‫جدول تخصيص حافظه براي متغيير هاي مميز شناور‬ ‫تعداد بيت براي ذخيره‌سازيِ‬ ‫نوع متغير‬ ‫نما مانتيس‬ ‫علمت‬ ‫عدد‬ ‫23‪ float‬بيتي‬ ‫8 32‬ ‫1‬ ‫46 ‪double‬‬ ‫بيتي‬ ‫11 25‬ ‫1‬
  61. 61. ‫7 – تعريف متغير مميز شناور‬ ‫تعري ف متغي ر ممي ز شناور مانن د تعريف‬ ‫تفاوت نوع ‪ float‬با نوع ‪ double‬در اين‬ ‫متغي ر ص حيح اس ت . با اي ن تفاوت که از‬ ‫است که نوع ‪ double‬دو برابر ‪ float‬از‬ ‫کلم ۀ کليدي ‪ float‬يا ‪ double‬براي‬ ‫حافظ ه اس تفاده مي‌کند. پس نوع‬ ‫مشخ ص نمودن نوع متغي ر استفاده‬ ‫‪ double‬دقت ي بس يار بيشتر از ‪float‬‬ ‫مي‌کنيم.‬ ‫دارد . به همين دليل محاسبات ‪double‬‬ ‫مثال:‬ ‫وقت‌گيرتر از محاسبات ‪ float‬است.‬ ‫;‪float x‬‬
  62. 62. ‫شکل علمي مقادير مميز شناور -8‬ ‫اعداد ممي ز شناور ب ه دو صورت در ورودي و‬ ‫خروج ي نشان داده مي‌شون د : به شکل‬ ‫»ساده« و به شکل »علمي«.‬ ‫علمي -2‬ ‫ساده -1‬ ‫401×765432.1‬ ‫76.54321‬ ‫مشخ ص اس ت ک ه شک ل علمي براي‬ ‫نشان دادن اعداد خيل ي کوچک و‬ ‫همچني ن اعداد خيل ي بزرگ، کارآيي‬ ‫بيشتري دارد.‬
  63. 63. ‫9 – نوع بولين ‪bool‬‬ ‫نوع ‪ bool‬يک نوع ص حيح اس ت که‬ ‫متغيرهاي اين نوع فقط مي‌توانند مقدار‬ ‫‪ true‬يا ‪ false‬داشت ه باشند. ‪ true‬به‬ ‫معني درست و ‪ false‬به معني نادرست‬ ‫است.‬ ‫اما اين مقادير در اصل به صورت 1 و 0‬ ‫درون رايان ه ذخيره مي‌شوند: 1 براي‬ ‫‪ true‬و 0 براي ‪.false‬‬
  64. 64. ‫01- نوع کاراکتري ‪char‬‬ ‫يک کاراکتر يک حرف، رقم يا نشانه است که‬ ‫يک شمارۀ منحص ر ب ه فرد دارد. به عبارت‬ ‫عاميان ه، ه ر کليدي ک ه روي صفحه‌کليد خود‬ ‫مي‌بينيد يک کاراکتر را نشان مي‌دهد.‬ ‫مثل هر يک از حروف '‪ ' A‬تا '‪ 'Z‬و '‪ 'a‬تا '‪ 'z‬و‬ ‫هر يک از اعداد '0' تا '9' و يا نشانه‌هاي '~' تا‬ ‫'+' روي صفحه‌کليد را يک کاراکتر مي‌نامند.‬
  65. 65. ‫براي تعري ف متغيري از نوع کاراکتر از‬ ‫کلم ه کليدي ‪ char‬اس تفاده مي‌کنيم. يک‬ ‫کاراکتر بايد درون دو علمت آپستروف )'(‬ ‫محص ور شده باشد . پس '‪ ' A‬يک کاراکتر‬ ‫است؛ همچنين'8 ' يک کاراکتر است اما 8‬ ‫يک کاراکت ر نيس ت بلک ه ي ک عدد صحيح‬ ‫است .‬ ‫مثال:‬ ‫;'‪char c ='A‬‬
  66. 66. ‫11 – نوع شمارشي ‪enum‬‬ ‫يک نوع شمارشي يک نوع صحيح است که‬ ‫توسط کاربر مشخص مي‌شود. نحو تعريف‬ ‫يک نوع شمارشي به شکل زير است:‬ ‫}‪enum typename{enumerator-list‬‬ ‫که ‪ enum‬کلمه‌اي کليدي است، ‪typename‬‬ ‫نام نوع جديد است که کاربر مشخص مي‌کند‬ ‫و ‪ enumerator-list‬مجموعه مقاديري است‬ ‫که اين نوع جديد مي‌تواند داشته باشد.‬
  67. 67. ‫به عنوان مثال به تعريف زير دقت کنيد:‬ ‫}‪enum Day{SAT,SUN,MON,TUE,WED,THU,FRI‬‬ ‫حال ‪ Day‬يک نوع جديد است و متغيرهايي که از اين‬ ‫نوع تعريف جديد مي‌توانند يکي از ۀمسسسسقاديرش‬ ‫وقتي نوعمي‌شوند ‪ Day‬و محدودمقادير ‪ SAT‬و را‬ ‫تعيين و ‪ MON‬مي‌توانيم متغيرهايي ازو ‪FRI‬نوع‬ ‫‪ SUN‬کرديم، و ‪ TUE‬و ‪ WED‬و ‪ THU‬اين را‬ ‫داشته باشند:‬ ‫جديسد بسسازيم. در کد بال متغيرهاي 1‪ day‬و‬ ‫;2‪Day day1,day‬‬ ‫2‪ day‬از نوع ‪ Day‬تعريف شده‌اند.= آنگاه‬ ‫;‪day1 MON‬‬ ‫1‪ day‬با مقدار ‪ MON‬و 2‪ day‬با = مقدار‬ ‫;‪day2 THU‬‬ ‫‪ THU‬مقداردهي شده است.‬
  68. 68. ‫مي‌توان مقادير صحيحودلخواهي را به ... هر‬ ‫‪ SUN‬و شمارشگرها‬ ‫مقادير ‪SAT‬‬ ‫چن د ک ه ب ه همي ن شک ل به کار‬ ‫نسبت داد:‬ ‫46=‪enum Day{{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI‬‬ ‫ميهمچنيسن ام ايسا چنسد شمارشگسرهدرشکل‬ ‫اگسر ‌رون د دو از شمارشگرهسا مقداردهسي يک‬ ‫شوند،‬ ‫فقسط بعضسي در رايان ه ب‬ ‫آنگاه سساير مي‌تواننسد مقاديسر1مقداردهسي داشته‌اند‬ ‫فهرسست شمارشگرهسا وکسه يکسساني ونشده‬ ‫و 2 ...‬ ‫اعداد: صحيح 0‬ ‫باشندمتوالي بعدي را خواهند گرفت:‬ ‫مقادير‬ ‫‪Day{{SAT=1,SUN,MON,TUE,WED,THU,FRI‬دليل‬ ‫ذخيره مي‌شوند . به همين ‪enum‬‬ ‫1=‪enum Answer{{NO=0,FALSE=0,YES=1,TRUE=1,OK‬‬ ‫دسستورک ه مقاديسره ر تاي 7 را بسه مقادير‬ ‫ترتيسب به‬ ‫اس ت بال ب ه 1 ک از‬ ‫‪SAT‬هفته ‪ SUN‬و داد.... يک‬ ‫روزهاي و تخصيص خواهد‬
  69. 69. ‫نحوۀ انتخاب نام‌شمارشگره ا آزاد اس ت ام ا بيشتر‬ ‫برنامه‌نويسان از توافق زير در برنامه‌هايشان استفاده‬ ‫مي‌کنند:‬ ‫نام – براي نام ثاب ت ‌ها از حروف‬ ‫1 شمارشگر بايد معتبر باشد:‬ ‫بزرگ استفاده کنيد‬ ‫يعني:‬ ‫2 کلمۀ کليدي نباشد. از نام نوع‬ ‫1- – اولين حرف‬ ‫2- شمارششروع نشودحرف بزرگ‬ ‫.‬ ‫با عدد ي را با‬ ‫بنويسيد.‬ ‫3- نشانه‌هاي رياض ي ني ز نداشته‬ ‫3- نشانه‌هاي رياض ي ني ز نداشته‬ ‫باشد. در هر جاي ديگر از حروف‬ ‫3 –‬ ‫کوچک استفاده کنيد.‬
  70. 70. ‫آخسر ايسن کسه هم‌نام نبايد در محدودهعنوان‬ ‫‌هاي‬ ‫شمارشگرهاي نام شمارشگرهسا نبايسد به‬ ‫مشترک استفاده شوند. برايجاهاي ديگسسر برنامه‬ ‫مثال تعريف‌هاي زير‬ ‫نام متغيرهاي ديگسسر در‬ ‫استفاده شود. مثل:‬ ‫را در نظر بگيريد:‬ ‫‪enumScore{{A,B,C,D‬‬ ‫}‪enum Score{A,B,C,D‬‬ ‫;‪float B‬‬ ‫‪enum Group{{AB,B,BC‬‬ ‫;‪char c‬‬ ‫دو تعريف بال غيرمجاز است زيرا شمارشگر‬ ‫در تعريف‌هاي بال ‪ B‬و ‪ C‬را نبايد به عنوان‬ ‫‪ B‬در هر دو تعريف ‪ Score‬و ‪ Group‬آمده‬ ‫نام متغيرهاي ديگر به کار برد زيرا اين نام‌ها‬ ‫است.‬ ‫در نوع شمارشي ‪ Score‬به کار رفته است .‬
  71. 71. ‫انواع شمار شي براي تول يد کد » خود‬ ‫مستند« به کار م ي ‌روند، يعني کدي که‬ ‫به راحت ي درک شود و نياز به‬ ‫توضيحات اضافي نداشته باشد.‬ ‫مثل تعاري ف زي ر خودمس تند هستند‬ ‫زيرا ب ه راحتي نام و نوع کاربرد و‬ ‫محدودۀ مقاديرشان درک م ي ‌شود:‬ ‫}‪enum Color{RED,GREEN,BLUE,BLACK,ORANGE‬‬ ‫}‪enum Time{SECOND,MINUTE,HOUR‬‬ ‫}‪enum Date{DAY,MONTH,YEAR‬‬ ‫}‪enum Language{C,DELPHI,JAVA,PERL‬‬
  72. 72. ‫21 – تبديل نوع، گسترش نوع‬ ‫در محاس باتي ک ه چن د نوع متغير وجود‬ ‫دارد، جواب هميش ه ب ه شکل متغيري‬ ‫است که دقت بالتري دارد. يعني اگر يک‬ ‫عدد ص حيح را ب ا ي ک عدد مميز شناور‬ ‫جمعبراي ايسن پاسخ به يسک متغير از شناور‬ ‫ببنديم، کسه مقدار شکل مميز نوع‬ ‫مميسز شناور را بسه نوع صسحيح تبديسل کنيم‬ ‫است به اين عمل گسترش نوع مي‌گويند.‬ ‫از عبارت ‪ ()int‬اسستفاده مي‌کنيسم بسه اين‬ ‫اسستفاده مي‌کنيسم بسه اين‬ ‫از عبارت‬ ‫عمل تبديل نوع گفته مي شود‬
  73. 73. .‫مثال‌هاي زير تبديل نوع و گسترش نوع را نشان مي‌دهند‬ ‫مثال گسترش نوع‬ :‫مثال تبديل نوع‬ ‫برنام ۀزسسسير يک عدد صحيح را با يک عدد مميز شناور جمع‬ :‫ تبديل مي‌کند‬int ‫ را به نوع‬double ‫اينم برنامه، يک نوع‬ :‫ي‌کند‬ int main() int main() { // casts a double value as a double value: { // adds an int value with an int: double 22; int n = v=1234.987; int n; p = 3.1415; double n = int(v); p += n; cout << "v = " << v << ", n = " << n << endl; cout << "p = " << p << ", n = " << n << endl; return 0; return 0; } }
  74. 74. ‫31 – برخي از خطاهاي برنامه‌نويسي‬ ‫اي ن قبي ل خطاه ا ک ه اغلب خطاهاي نحوي‬ ‫هستند ، توسط کامپايلر کشف مي‌شوند و به‬ ‫راحتي مي‌توان آن‌ها را رفع نمود.‬ ‫»خطاي زمان اجرا«‬ ‫کشف اينگونه خطاها به راحتي ممکن نيست‬ ‫و کامپايل ر ني ز چيزي راج ع ب ه آن نمي‌داند.‬ ‫برخي از خطاهاي زمان اجرا سبب مي‌شوند‬ ‫که برنامه به طور کامل متوقف شود و از کار‬
  75. 75. ‫41- سرريزي عددي‬ ‫يک متغير هر قدر هم که گنجايش داشته‬ ‫باش د، بالخره مقداري هس ت که از‬ ‫گنجايش آن متغير بيشتر باشد. اگر سعي‬ ‫کنيم در يک متغير مقداري قرار دهيم که‬ ‫از گنجايش آن متغير فراتر باشد، متغير‬ ‫»سرريز « مي‌شود،در چني ن حالتي‬ ‫مي‌گويي م ک ه خطاي سرريزي رخ داده‬
  76. 76. ‫ل 21 – 2 سرريزي عدد صحيح‬ ‫مثا‬ ‫اين‌ برنامه‌ به طور مكرر ‪ n‬را در 0001 ضرب‌ ي‌كند تا‬ ‫م‬ ‫م سرريز شود:‬‫سرانجا‬ ‫وقت ي ي ک عدد صحيح‬ ‫)(‪int main‬‬ ‫{‬ ‫:‪//prints n until it overflows‬سرريز‬ ‫سرريز شود، عدد‬ ‫شده ب ه ي;‪cout << "n = " << n << endl‬‬ ‫ک مقدار منفي‬ ‫;0001= ‪int n‬‬ ‫»گردانيده«‪ n‬مي‌شود ;0001 =* ‪n‬‬ ‫0001 ‪ // multiplies by‬اما‬ ‫وقت ي ي ک‪ n‬عدد مميز شناور‬ ‫;‪cout << "n = " << n << endl‬‬ ‫;0001 =* ‪n‬‬ ‫0001 ‪// multiplies by‬‬ ‫;‪ endl‬نماد<< " = ‪cout << " n‬‬ ‫سرريز شود، << ‪ inf n‬به‬ ‫معناي بي ;‪ << endl‬را به =دست‬ ‫;0001 =* ‪n‬‬ ‫‌نهايت‬ ‫0001 ‪// multiplies n by‬‬ ‫‪cout << " n " << n‬‬ ‫;0 ‪return‬‬ ‫مي‌دهد.‬ ‫}‬
  77. 77. ‫51 – خطاي گرد کردن‬ ‫خطاي‌ گرد كردن‌ نوع‌ ديگري‌ از خطاست‌ كه‌‬ ‫اغلب‌ وقتي‌ رايانه‌ها روي‌ اعداد حقيقي‌‬ ‫»هيچ‌گاه از متغي ر مميز شناور براي‬ ‫محاس به‌ مي‌كنند، رخ‌ مي‌دهد. براي‌ مثال‌‬ ‫مقايس ه برابري اس تفاده نکنيد« زيرا در‬ ‫عدد 3/1ممكن ‌ است ‌ به ‌ صورت ‌ 333333.0‬ ‫متغيرهاي مميز شناور خطاي گرد کردن‬ ‫ذخيره‌ شود كه‌ دقيقا معادل‌ 3/1 نيست‌.‬ ‫سبب مي‌شود ک ه پاس خ ب ا آ ن چه مورد‬ ‫اين خطا از آن‌جا ناشي مي‌شود که اعدادي‬ ‫نظر شماست متفاوت باشد.‬ ‫مث ل 3/1 مقدار دقي ق ندارن د و رايانه‬ ‫نمي‌توان د اي ن مقدار را پيدا کن د، پس‬ ‫نزديک‌تري ن عدد قاب ل محاس به را به جاي‬
  78. 78. ‫حوز ۀمسسسستغيرها – 61‬ ‫انتخاب نام‌هاي نامفهوم ي ا ناق ص سبب‬ ‫اص طلح »بلوک« در ‪ ++C‬واژه‬ ‫کاهش خوانايي برنامه و افزايش خطاهاي‬ ‫مناس بي اس ت ک ه مي‌توان ب ه وسيلۀ‬ ‫برنامه‌نويسي مي‌شود. استفاده از متغيرها‬ ‫آن حوزۀ متغير را مشخص نمود. يک‬ ‫در حوزۀ نامناس ب ه م سبب بروز‬ ‫بلوک برنامه، قسمتي از برنامه است‬ ‫خطاهاي ي مي‌شود. »حوزه متغير«‬ ‫که درون يک جفت علمت کروشه } {‬ ‫محدوده‌اي است که يک متغير خاص اجازه‬ ‫محدود شده است.‬ ‫دارد در آن محدوده به کار رود يا فراخواني‬ ‫شود.‬
  79. 79. ‫حوزۀ يک متغير از محل اعلن آن شروع‬ ‫مي‌شود و ت ا پايان همان بلوک ادامه‬ ‫مي‌يابد. خارج از آ ن بلوک نمي‌توان به‬ ‫متغير دسترسي داشت. همچنين قبل از‬ ‫اين که متغير اعلن شود نمي‌توان آن را‬ ‫استفاده نمود.‬ ‫مي‌تواني م در ي ک برنام ه، چن د متغير‬ ‫متفاوت ب ا ي ک نام داشت ه باشي م به‬ ‫شرطي که در حوزه‌هاي مشترک نباشند.‬
  80. 80. ‫پايان جلسه دوم‬
  81. 81. ‫جلسه سوم‬ ‫»انتخاب«‬
  82. 82. ‫:آنچه در اين جلسه مي خوانيد‬ ‫1- دستور‌ ‪if‬‬ ‫2- دستور ‪if..else‬‬ ‫3- عملگرهاي مقايسه‌اي‬ ‫4- بلوك‌هاي دستورالعمل‬ ‫5- شرط‌هاي مركب‬ ‫›››‬ ‫6- ارزيابي ميانبري‬
  83. 83. ‫7- عبارات منطقي‬ ‫8 - دستور‌هاي انتخاب تودرتو‬ ‫9- ساختار ‪else if‬‬ ‫01- دستورالعمل ‪switch‬‬ ‫11- عملگر عبارت شرطي‬ ‫21- كلمات كليدي‬
  84. 84. ‫هدف‌هاي رفتاري:‬ ‫هدف کلي:‬ ‫انتظار مي‌رود پس از پايان اين جلسه بتوانيد:‬ ‫شناخست تور ‪ if‬شناخت ه و ل‌هاي انتخاب و شيو ۀ‬ ‫- نح و دس انواع رادستورالعم آ ن را در برنامه‌ ها به کار‬ ‫ببريد.‬ ‫به‌کارگيري هر يک‬ ‫- نحو دستور ‪ if..else‬را شناخته و آن را در برنامه ‌ها به‬ ‫کار ببريد.‬ ‫- از ساختار ‪ else..if‬در تصميم‌گيري‌هاي پيچيده استفاده‬ ‫کنيد.‬ ‫- نحو دستور ‪ switch‬را شناخته و خطاي »تلۀ سقوط«‬ ‫را تشخيص دهيد.‬ ‫- بلوک دستورالعمل را تعريف کنيد.‬ ‫- عملگرهاي مقايس ه‌اي و عملگ ر عبارت شرطي را در‬ ‫<<<‬ ‫دستورات شرطي به کار ببريد.‬
  85. 85. ‫مقدمه‬ ‫ه مۀ برنام ه ‌ها يي که در دو جلسه اول‬ ‫بيان ش د، ب ه شک ل ترتيبي ‌اجرا‬ ‫م ي ‌شون د، يعن ي دس تورات برنام ه به‬ ‫ترتيب از بال به پايين و هر کدام دقيقا‬ ‫يک بار اجرا م ي ‌شوند. در اي ن ‌ جلسه ‌‬ ‫نشان داده م ي ‌شود چگونه از‬ ‫دس تورالعم ل ‌هاي انتخاب 1 جهت‬ ‫انعطا ف ‌پذيري بيشت ر برنام ه استفاده‬
  86. 86. ‫بسه شکل‬ ‫دسستور ‪ if‬دستور ‪if‬‬ ‫مي‌شود برنامسه‬‫موجسب‬ ‫‌‬ ‫است‌:‬ ‫آن گون‌سسسس ۀ ‌ زير‬ ‫شرطي اجرا شود. نحو‬ ‫به‬ ‫شرطي اجرا شود نحو‬ ‫;‪If (condition) statement‬‬ ‫‪ Condition‬که شرط ناميده م ي ‌شود يك‬ ‫عبارت صحيح ا ست ) عبار تي که با يک‬ ‫مقدار صحيح برآورد م ي ‌شود( و‬ ‫‪ ‌ statement‬م ي ‌توان د ه ر فرمان قابل‬ ‫اجرا باشد. ‪ Statement‬وقتي اجرا‬ ‫خواه د ش د ك ه ‪ ‌ condition‬مقدار غير‬ ‫صفر داش ته باشد. د قت كن يد كه شرط‬
  87. 87. ‫2- دستور ‪if..else‬‬ ‫دسستور ‪ if..else‬موجسب مي‌شود بسسته بسه اين‬ ‫که شرط درسست باشسد يسا خيسر، يكي از دو‬ ‫دستورالعمل فرعي اجرا گردد. نحو اين دستور‬ ‫‪ condition‬است: شرط مسساله اسست کسه يك‬ ‫به شکل زير همان‬ ‫;‬ ‫مي‌باشد و 1‪statement‬‬ ‫عبارت صسسحيح 1‪if(condition )statement‬و‬ ‫2‪ statement‬فرمان‌هاي قابل اجرا هستند. اگر‬ ‫2‪;else statement‬‬ ‫مقدار شرط، غيسر صسفر باشد، 1‪statement‬‬ ‫اجرا خواهسد شسد وگرنه 2‪ statement‬اجرا‬ ‫مي‌شود.‬
  88. 88. ‫يک آزمون قابليت تقسيم‬ ‫مثال‬ 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; }
  89. 89. ‫هاي مقايسه‌اي‬‫4- عملگر‬ ‫در ‪ ++C‬شش عملگر مقايسه‌اي وجود دارد: >‬ ‫و < و >= و <= و == و != . هر يک‬ ‫از ايسسن شسسش عملگسسر بسسه شکسسل زيسسر به کار‬ ‫مي‌روند:‬ ‫‪‌ x‬کوچکتر از ‪ y‬است // ‪x < y‬‬ ‫‪ x‬بزرگتر از ‪ y‬است // ‪x > y‬‬ ‫‪‌ x‬کوچکتر يا مساوي ‪ y‬است // ‪x <= y‬‬ ‫‪ x‬بزرگ‌تر يا مساوي ‪ y‬است // ‪x >= y‬‬ ‫‪ x‬مساوي با ‪ y‬است // ‪x == y‬‬
  90. 90. ‫اين‌ ها مي‌توانن د براي مقايسۀ مقدار‬ ‫عبارات با هر نوع ترتيبي استفاده شوند.‬ ‫عبارت حاصل به عنوان يك ‌ شرط تفسير‬ ‫مي‌شود. مقدار اين شرط صفر است اگر‬ ‫شرط نادرست باشد و غير صفر است اگر‬ ‫شرط درس ت باشد. براي نمونه، عبارت‬ ‫7*8> 6*5 برابر با صفر ارزيابي مي‌شود،‬ ‫به اين معني كه اين شرط نادرست است.‬
  91. 91. ‫متغير عدد صحيح -2‬ ‫‪ ++C‬شش نوع متغي ر عدد صحيح دارد‬ ‫تفاوت اي ن ش ش نوع مربوط به ميزان‬ ‫حافظ ۀ مورد استفاده و محدودۀ مقاديري‬ ‫است که هر کدام مي‌توانند داشته باشند.‬ ‫اين ميزان حافظۀ مورد استفاده و محدودۀ‬ ‫مقادي ر، بس تگي زيادي ب ه سخت‌افزار و‬ ‫همچني ن س يستم عام ل دارد. يعن ي ممکن‬ ‫اس ت روي ي ک رايان ه، نوع ‪ int‬دو بايت از‬ ‫حافظ ه را اشغال کن د در حال ي که روي‬ ‫رايانه‌اي از نوع ديگ ر نوع ‪ int‬به چهار بايت‬
  92. 92. ‫ي با‬ ‫دقت کنيد كه در ++ ‪ C‬عملگر جايگزين‬ ‫ي‬ ‫عملگر برابري فرق دارد. عملگر جايگزين‬ ‫يک مساوي ي " = " است ي عملگر‬ ‫ول‬ ‫تک‬ ‫برابري، دو مساوي " = = " است.‬ ‫مثل دستور 33;= ‪ x‬مقدار 33 را در ‪ x‬قرار‬ ‫ي ي‌کند‬ ‫ي‌دهد ي دستور 33 ;==‪ x‬بررس م‬‫ول‬ ‫م‬ ‫که آيا مقدار ‪ x‬با 33 برابر است يا خير. درک‬ ‫اين تفاوت هميت زيادي دارد.‬ ‫ا‬
  93. 93. ‫ل‬‫4- بلو هاي دستورالعم‬ ‫ك‌‬ ‫ي ك بلوك دستورالعمل زنجيره ‌اي از‬ ‫دستورالعم هاست كه درون براكت }{ محصور‬ ‫ل‌‬ ‫شده، مانند :‬ ‫} ‪;int temp=x‬‬ ‫‪;x = y‬‬ ‫‪;y = temp‬‬ ‫{‬ ‫در برنامه‌هاي ++‪ C‬يک بلوک دستورالعمل‬ ‫مانند يک دستورالعمل تکي است.‬
  94. 94. ‫‪()int main‬‬ ‫مثال : يك بلوك دستورالعمل درون‬ ‫} ‪;int x, y‬‬ ‫يك دستور ‪if‬‬ ‫‪;" :cout << "Enter two integers‬‬ ‫ا ين برنا مه دو عدد صحيح را‪ x‬گرفته و‬ ‫‪;cin >> >> y‬‬ ‫به ترتي ب ‪ temp ‌ = x‬آن ‌ ها را> چاپ‬ ‫بزرگ تري، ‪if (x y){ ;int‬‬ ‫‪;x = y‬‬ ‫م ي ‌كند:‬ ‫;‪y = temp‬‬ ‫‪} //swap x and y‬‬ ‫;‪cout << x << " <= " << y << endl‬‬ ‫{‬
  95. 95. 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; }
  96. 96. ‫5 – شر هاي مركب‬ ‫ط‌‬ ‫ط ‌ ي مان ند ‪ n%d‬و ‪ x>=y‬ي‌توان ند به صورت‬ ‫م‬ ‫شر هاي‬ ‫يك ط مركب با م تركيب شوند. اين كار با استفاده‬ ‫ه‬ ‫شر‬ ‫هاي من ي && )‪ (and‬و || )‪ (or‬و ! )‪(not‬‬ ‫طق‬ ‫ازعملگر‬ ‫صورت ي‌پذيرد. ا ين عملگرها به ش ل ز ير تعريف‬ ‫ک‬ ‫م‬ ‫ي‌شوند:‬‫م‬ ‫‪ p && q‬درست است اگر و تنها اگر هم ‪ p‬و هم ‪ q‬هر دو درست‬ ‫باشند‬ ‫نادرست است اگر و تنها اگر هم ‪ p‬و هم ‪ q‬هر دو نادرست‬ ‫‪p || q‬‬ ‫باشند‬ ‫!‪p‬درست است‪x>=y‬تنها ‪n%d‬نادرست باشد است‬ ‫براي مثال) اگر و || اگر ‪ ( p‬نادر ست‬ ‫اگ ر و تنه ا اگ ر ‪ n%d‬برابر صفر و ‪x‬‬
  97. 97. ‫!‬ ‫سسه عملگسر منطقي && )‪ (and‬و || )‪ (or‬و )‪( not‬‬ ‫معمول بسا اسستفاده از جداول درستي بسه گونس ۀزسسسير بيان‌‬ ‫مي‌شوند:‬ ‫‪p q P&&q p q P||q P !P‬‬ ‫‪T T‬‬ ‫‪T‬‬ ‫‪T T T‬‬ ‫‪T F‬‬ ‫‪T F‬‬ ‫‪F‬‬ ‫‪T F T‬‬ ‫‪F T‬‬ ‫‪F T‬‬ ‫‪F‬‬ ‫‪F T T‬‬ ‫طبق جدول‌هاي فوق اگر ‪ p‬درست و ‪ q‬نادرست‬ ‫‪p||q‬‬ ‫‪F‬‬ ‫‪F F F‬‬ ‫باشسد، عبارت ‪ p&&q‬نادرست و عبارت ‪F F‬‬ ‫درست است.‬
  98. 98. ‫6- ارزيابي ميانبري‬ ‫عملگرهاي && و || به دو عملوند نياز‬ ‫دارندت ا مقايسه را روي آن دو انجام دهند.‬ ‫جداول درس تي نشان مي‌ده د که ‪p&&q‬‬ ‫شرط است مرك ب نادرست&& و. در اين‬ ‫نادرست ‌هاي اگر ‪ p‬كه از باشد ||‬ ‫اس تفادهنيازي‌كنن د عملوند دوم راشود.‬ ‫حالت ديگر مي نيست که ‪ q‬بررسي‬ ‫همچني ن ‪p||q‬ي‌كنن دت اس تناگكه ‪ p‬درست‬ ‫بررس ي نم درس مگ ر اي ر لزم‬ ‫باشددر اين حالت هم نيازي نيست که ‪q‬‬ ‫باشد و .‬ ‫بررسي شود. در هر دو حالت گفته شده، با‬ ‫ارزيابي عملوند اول به سرعت نتيجه معلوم‬ ‫مي‌شود. اين كار ارزيا بي ميانبري ناميده‬
  99. 99. ‫7- عبارات منطقي‬ ‫ي ك عبارت منطق ي شرط ي اس ت ك ه يا‬ ‫درس ت اس ت ي ا نادرس ت. قبل ديدي م که‬ ‫عبارات منطق ي ب ا مقادي ر ص حيح ارزيابي‬ ‫مي‌شوند. مقدار صفر به معناي نادرست و‬ ‫هر مقدار غير صفر به معناي درست است .‬ ‫به عبارات منطق ي »عبارات بول ي « هم‬ ‫مي‌گويند.‬
  100. 100. ‫چون همس ۀمسسسقاديسر صسحيح ناصسفر به معناي‬ ‫درست تفسير مي‌شوند، عبارات منطقي اغلب‬ ‫تغيير قيافه مي‌دهند. براي مثال دستور‬ ‫;"‪if (n) cout << "n is not zero‬‬ ‫وقتسي ‪ n‬غيسر صسفر است عبارت‬ ‫‪‌n is not‬‬ ‫‪ zero‬را چاپ مي‌كنسد زيرا عبارت منطقي‬ ‫)‪ ( n‬وقتسسي مقدار ‪ n‬غيسسر صسفر اسست به‬ ‫عنوان درست تفسير مي‌گردد.‬
  101. 101. ‫کد زير را نگاه کنيد:‬ ‫‪if (n%d;") cout << "n is not a multiple of d‬‬ ‫دسسستور خروجسسي فقسسط وقتسسي كه ‪n%d‬‬ ‫ناصسفر اسست اجرا مي‌گردد و ‪ n%d‬وقتي‬ ‫ناصفر است که ‪ n‬بر ‪ d‬بخش‌پذير نباشد.‬ ‫گاهسسي ممکسسن اسسست فراموش کنيسسم که‬ ‫عبارات منطقي مقادير صحيح دارند و اين‬ ‫فراموشي باعث ايجاد نتايج غير منتظره و‬ ‫نامتعارف شود.‬
  102. 102. ‫يك خطاي منطقي ديگر، اين برنامه خطادار است:‬ ‫)(‪int main‬‬ ‫;3‪{ int n1, n2, n‬‬ ‫;" :‪cout << "Enter three integers‬‬ ‫;3‪cin >> n1 >> n2 >> n‬‬ ‫;1‪if (n1 >= n2 >= n3) cout << "max = " << n‬‬ ‫}‬ ‫منشأ خطا در برنامۀ بال اين اصل است كه‬ ‫عبارات منطقي مقدارهاي عددي دارند.‬
  103. 103. ‫دستور‌هاي انتخاب تودرتو -8‬ ‫دس تورهاي انتخاب مي‌توانن د مانند‬ ‫دس تورالعملهاي مرك ب به كار روند .‬ ‫‌‬ ‫به اي ن ص ورت ک ه ي ك دستور انتخاب‬ ‫مي‌توان د درون دس تور انتخاب ديگر‬ ‫اس تفاده شود . به اين روش، جملت‬ ‫تودرتو مي‌گويند.‬
  104. 104. ‫مثال 21-3 دستور‌هاي انتخاب تودرتو‬ ‫اين برنامه همان اثر مثال 01-3 را دارد:‬ ‫وقت ي دس تور ‪ if..else‬به شکل‬ ‫)(‪int main‬‬ ‫;‪{ int n, d‬‬ ‫تو در ت و به کار م ي ‌رود،‬ ‫;" :‪cout << "Enter two positive integers‬‬ ‫كامپايل ر از قانون زي ر )0جهت‬ ‫;‪cin >> n >> d‬‬ ‫=! ‪if (d‬‬ ‫تجزيه‪ n‬اين دستورالعمل= مركب‬ ‫;‪if (n%d = 0) cout << d << " divides " << n << endl‬‬ ‫;‪else cout << d << " does not divide " << << endl‬‬ ‫استفاده م ي ‌كند:‬ ‫;‪else cout << d << " does not divide " << n << endl‬‬ ‫}‬ ‫» هر ‪ else‬با آخريسسن ‪ if‬تنهسسا جفت‬ ‫در برنام ۀ بال، دستور ‪ if..else‬دوم درون‬ ‫مي‌شود.«‬ ‫دستور ‪ if..else‬اول قرار گرفته است‌.‬
  105. 105. ‫9- ساختار ‪else if‬‬ ‫دسسستور ‪ if..else‬تودرتسسو، اغلب براي‬ ‫بررسسي مجموعه‌اي از حالت‌هاي متناوب يا‬ ‫موازي بسه كار مي‌رود. در ايسن حالت فقط‬ ‫عبارت ‪ else‬شامسل دسستور ‪ if‬بعدي خواهد‬ ‫بود. ايسن قبيسل کدهسا را معمول بسا ساختار‬ ‫‪else if‬مي‌سازند.‬
  106. 106. ‫ براي مشخص کردن محدود ۀنسسسمره‬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."; }
  107. 107. switch ‫01- دستورالعمل‬ else ‫ مي‌تواند به جاي ساختار‬switch ‫دستور‬ ‫ براي بررسي مجموعه‌اي از حالت‌هاي‬if ‫متناوب و موازي بسسه كار رود. نحسسو دستور‬ :‫ به شکل زير است‬switch switch (expression) { case constant1: statementlist1; case constant2: statementlist2; case constant3: statementlist3; : :
  108. 108. ‫اين دستور ابتدا ‪ expression‬را برآورد‬ ‫مي‌كند و سپس ميان يکت‌هاي ‪ case‬به دنبال‬ ‫عبارت اختياري‬ ‫عبارت ‪ default‬ثاب‬ ‫مقدار . يعنسي مي . اگر‬ ‫اسست آن مي‌گردد‌توانيسم مقدار مربوطه از ميان‬ ‫در دستور ‪switch‬‬ ‫ثابت‌هاي فهرسسست.‌شده يافسست شسسد، دستور‬ ‫آن را قيسد نکنيم ‪ expression‬بايسد به‬ ‫‪ statementlist‬مقابسسل ارزيابي‪ case‬اجرا‬ ‫شود و‬ ‫شکسل يسك نوع صسحيح آن‬ ‫مي‌شود. اگسر مقدار مورد نظسر ميان ‪case‬ها‬ ‫‌‬ ‫‪constant‬ها بايسسد ثابتهاي صحيح‬ ‫يافست نشسد و عبارت ‪ default‬وجود داشت،‬ ‫باشند.‬ ‫دسسستور ‪ statementlist‬مقابسسل آن اجرا‬ ‫مي‌شود.‬
  109. 109. ‫لزم اسسست در انتهاي هسسر ‪ case‬دستور‌‬ ‫‪ break‬قرار بگيرد. بدون ايسسن دستور،‬ ‫اجراي برنامسسه پسسس از ايسسن كه ‪case‬‬ ‫مربوطسه را اجرا کرد از دستور ‪switch‬‬ ‫خارج نمي‌شود، بلکسسه هم ۀ ‪case‬هاي‬ ‫زيريسن را هسم خسط بسه خسط مي‌پيمايد و‬ ‫دسستورات مقابسل آن‌سها را اجرا مي‌کند. به‬ ‫اين اتفاق، تلۀ سقوط مي‌گويند.‬ ‫;‪case constant1: statementlist1;break‬‬
  110. 110. ‫11- عملگر عبارت شرطي‬ ‫در اي ن عملگر ابتدا شرط ‪condition‬‬ ‫عملگر عبارت شرطي يکي از درست‬ ‫بررسي مي‌شود. اگر اين شرط امکاناتي‬ ‫بود، حاص لسستک ل عبارتدر کدنويسي‬ ‫برابر با‬ ‫اختصسسار‬ ‫اسسست کسسه جه‬ ‫تدارک ديده شدهمي‌شود وسسناگر شرط را‬ ‫1‪ expression‬اسسست. اي عملگر‬ ‫منادرست بود، حاصل کل ‪ if..else‬به کار‬ ‫ي‌توانيم به جاي دستور عبارت برابر با‬ ‫2‪ expression‬مي‌شود. ‌‬ ‫ببريم. اين عملگر از نشانههاي ? و : به‬ ‫شکل زير استفاده مي‌كند:‬ ‫;2‪condition ? expression1 : expression‬‬
  111. 111. ‫مثل در دستور انتساب زير:‬ ‫;) ‪min = ( x<y ? x : y‬‬ ‫اگر ‪ x<y‬باشد مقدار ‪ x‬را درون ‪min‬‬ ‫قرار مي‌دهد و اگر ‪ x<y‬نباشد مقدار‬ ‫‪ y‬را درون ‪ min‬قرار مي‌دهد. يعني‬ ‫به همي ن س ادگي و اختصار، مقدار‬ ‫کمين ۀ ‪ x‬و ‪ y‬درون متغير ‪ min‬قرار‬ ‫مي‌گيرد.‬
  112. 112. ‫21- كلمات كليدي ‌‬ ‫اکنون با کلماتي مثل ‪ if‬و ‪ case‬و ‪float‬‬ ‫آشنا شديم. دانستيم که اين کلمات براي‬ ‫يك‌ كلممۀ كليدي در يك زبان‬ ‫برنامه‌نويس ي كلم دارند. از اين کلمات‬ ‫ه‌اي اس ت كه از‬ ‫‪ ++C‬معاني خاصي‬ ‫نمي‌توان به عنوان نام يک متغير يا هر‬ ‫قب ل تعريف شده و براي هدف‬ ‫منظور ديگري استفاده کرد و فقط بايد‬ ‫براي انجام منظور شده است.‬ ‫همان کار خاص استفاده‬ ‫مشخصي‬ ‫شوند. مثل کلم ۀ ‪ float‬فق ط بايد براي‬ ‫معرفي يک نوع اعشاري به کار رود.‬
  113. 113. :‫ است‬and ‫++ استاندارد اكنون شامل 47 كلم ۀ‬C ‫كسسسليدي‬ and_eq asm auto bitand Bitor bool break case catch char class compl const const_cast continue default delete dodouble dynamic_cast else enum explicit export extern dfalse float for friend goto
  114. 114. if inline int long mutable namespace new not not_eq operator or or_eq privat eprotected public register reinterpret_cast return short signed sizeof static static_cast struct swich template this throw TRUE try
  115. 115. typedef typoid typename using union unsigned virtual void volatile wchar_t while xor xor_eq
  116. 116. ‫دو نوع كلمۀ كليدي وجود دارد:‬ ‫1- كلم ه ‌هاي رزرو شد ه‌‌‬ ‫2- شناس ه ‌هاي استاندارد.‬ ‫يك كلم ۀ رزرو شده كلمه‌اي اس ت ک ه يک‬ ‫دس تور خاص از آن زبان را نشان مي‌دهد.‬ ‫كلمۀ كليدي ‪ if‬و ‪ else‬كلمات رزرو شده‬ ‫يك شناسۀ استاندارد كلمه‌اي است كه يك نوع‬ ‫هستند.‬ ‫دادۀ اس تاندارد از زبان را مشخص مي‌كند.‬ ‫كلمات كليدي ‪ bool‬و ‪ int‬شناسه‌هاي‬ ‫استاندارد هستند‬
  117. 117. ‫پايان جلسه سوم‬
  118. 118. ‫جلسه چهارم‬ ‫»تكرار«‬
  119. 119. ‫:آنچه در اين جلسه مي خوانيد‬ ‫1- دستور ‪while‬‬ ‫2- خاتمه دادن به يك حلقه‬ ‫3- دستور ‪do..while‬‬ ‫4- دستور ‪for‬‬ ‫5- دستور ‪break‬‬ ‫6- دستور ‪continue‬‬ ‫7- دستور ‪goto‬‬ ‫8- توليد اعداد شبه تصادفي‬
  120. 120. ‫هدف‌هاي رفتاري:‬ ‫هدف کلي:‬ ‫انتظار مي‌رود پس از مطالعۀ اين جلسه بتوانيد:‬ ‫- نحو دستورانواع را شناخته و از آن براي ايجاد نحو استفاده‬ ‫شناخت ‪ while‬ساختارهاي تکرار و حلقه آن‌ها‬ ‫کنيد.تبديل آن‌ها به يکديگر.‬ ‫و‬ ‫- نحو دستور ‪ do..while‬را شناخته و تفاوت آن با‬ ‫دستور ‪ while‬را بيان کنيد.‬ ‫- نح و دس تور ‪ for‬را شناخت ه و ب ا اس تفاده از آن‬ ‫حلقه‌هاي گوناگون بسازيد.‬ ‫- حلقه‌هاي فوق را به يکديگر تبديل کنيد.‬ ‫- علت استفاده از »دستورات پرش« را ذکر کرده‬ ‫و تفاوت سه دستور ‪ break‬و ‪ continue‬و ‪ goto‬را‬ ‫بيان کنيد.‬
  121. 121. ‫مقدمه‬ ‫تكرار، اجراي پي در پي يك دستور يا بلوكي‬ ‫از دس تورالعمل‌ها در ي ك برنام ه اس ت. با‬ ‫اس تفاده از تکرار مي‌تواني م کنترل برنامه را‬ ‫مجبور کنيم تا به خطوط قبلي برگردد و آن‌ها‬ ‫را دوباره اجرا نمايد.‬ ‫‪ ++C‬داراي س ه دس تور تكرار اس ت: دستور‬ ‫‪ ،while‬دس تور ‪ do_while‬و دستور ‪.for‬‬ ‫دس تور‌هاي تکرار ب ه عل ت طبيعت‬
  122. 122. ‫1- دستور ‪while‬‬ ‫نحو دستور ‪ while‬به شکل زير است:‬ ‫;‪while (condition) statement‬‬ ‫به جاي ‪ ، condition‬يك شرط قرار مي‌گيرد و به‬ ‫جاي ‪ statement‬دستوري که بايد تکرار شود قرار‬ ‫مي‌گيرد. اگ ر مقدار شرط، ص فر)يعن ي نادرست(‬ ‫باشد، ‪ statement‬ناديده گرفته مي‌شود و برنامه‬ ‫به اولي ن دس تور بع د از ‪ while‬پرش مي‌كند. اگر‬ ‫مقدار شرط ناص فر)يعني‌ درس ت( باشد،‬ ‫‪ statement‬اجرا ‌شده و دوباره مقدار شرط‬ ‫بررسي مي‌شود. اين تکرار آن قدر ادامه مي‌يابد‬
  123. 123. while ‫مثال 1-4 محاسب ۀحسسساصل جمع اعداد صحيح متوالي با حلق ۀ‬ n ‫ را براي عدد ورودي‬n + … + 3 + 2 + 1 ‫ايسن برنامه مقدار‬ :‫محاسبه مي‌كند‬ 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; }
  124. 124. ‫2- خاتمه دادن به يك حلقه‬ ‫)(‪int main‬‬ ‫قبل‌ ديدي م ك ه چگون ه دستور ‪ break‬براي {‬ ‫;1=‪int n, i‬‬ ‫كنترل دس :‪cout << "Enter a positive integer‬‬ ‫;" تورالعمل ‪ switch‬استفاده‬ ‫;‪cin >> n‬‬ ‫م ي‌شود )به مثال 471- ;0=‪ .(sum‬از‬ ‫‪long‬‬ ‫نگاه كنيد‬ ‫يك ي از‌ مزيت‌هاي دستور‬ ‫‪ break‬اين است كهبراي پايان دادن به حلقه‌ها‬ ‫)‪while (true‬‬ ‫دستور ‪ break‬فورا حلقه‬ ‫رانيز ميتوان استفاده کرد. ;‪{ if (i > n) break‬‬ ‫خاتمه ‌مي‌دهد بدون اين که‬ ‫;++‪sum += i‬‬ ‫مابق ي دس تورهاي درون حلقه‬ ‫}‬ ‫اجرا شوند.‬ ‫<< " ‪cout << "The sum of the first " << n << " integers is‬‬ ‫;‪sum‬‬ ‫}‬
  125. 125. ‫* مثال‌ 44- اعداد فيبوناچي‬ ‫اعداد فيبوناچي 3‪ … , F0, F1, F2, F‬به شکل‬ ‫بازگشتي توسط معادله‌هاي زير تعريف مي‌شوند:‬ ‫2-‪F0 = 0 , F1 = 1 , Fn = Fn-1 + Fn‬‬ ‫مثل براي 2=‪ n‬داريم:‬ ‫1 = 1 + 0 = 0‪F2 = F2-1 + F2-2 = F1 + F‬‬ ‫يا براي 3=‪ n‬داريم:‬ ‫2 = 1 + 1 = 1‪F3 = F3-1 + F3-2 = F2 + F‬‬ ‫و براي 4=‪ n‬داريم:‬ ‫3 = 1 + 2 = 2‪F4 = F4-1 + F4-2 = F3 + F‬‬
  126. 126. ‫بسرسنساسم س ۀزسسسسيسسرس، هسسمسس ۀاسسسسعسدساسدس فسسيبوسنساسچسسيسس رساس تسساس يسك س مسحسدسوسدس ۀ‬ ‫مسشسسخسسصسس کسسهس اسزس وسرسوسدسيس دسرسيساسفسسستس مسيسس‌سسشوسدس، مسحساسسسسبهس وس‬ ‫چسساسپس مسيسس‌سسكندس:‬ ‫)(‪int main‬‬ ‫;‪{ long bound‬‬ ‫;" :‪cout << "Enter a positive integer‬‬ ‫;‪cin >> bound‬‬ ‫;"1 ,0‪cout << "Fibonacci numbers < " << bound << ":n‬‬ ‫;1=1‪long f0=0, f‬‬ ‫)‪while (true‬‬ ‫;1‪{ long f2 = f0 + f‬‬ ‫;‪if (f2 > bound) break‬‬ ‫;2‪cout << ", " << f‬‬ ‫;1‪f0 = f‬‬ ‫0001 :‪Enter af1 = integer‬‬ ‫};2‪positive f‬‬ ‫}‬ ‫:0001 < ‪Fibonacci numbers‬‬ ‫789 ,016 ,773 ,332 ,441 ,98 ,55 ,43 ,12 ,31 ,8 ,5 ,3 ,2 ,1 ,1 ,0‬
  127. 127. ‫مثال5-4 استفاده از تابع 0(‪(exit‬‬ ‫تابع 0(‪ (exit‬روش ديگري براي خاتمه دادن به يك حلقه‌ است. هرچند که‬ ‫اين تابع بلفاصله اجراي کل برنامه را پايان مي‌دهد:‬ ‫)(‪int main‬‬ ‫;‪{ long bound‬‬ ‫;" :‪cout << "Enter a positive integer‬‬ ‫;‪cin >> bound‬‬ ‫;"1 ,0‪cout << "Fibonacci numbers < " << bound << ":n‬‬ ‫;1=1‪long f0=0, f‬‬ ‫)‪while (true‬‬ ‫;1‪{ long f2 = f0 + f‬‬ ‫برنامه‌نويس ان ترجيح‬ ‫مي‌دهند از ‪ break‬براي ;)0(‪if (f2 > bound) exit‬‬ ‫;2‪cout << ", " << f‬‬ ‫خاتم ه دادن به حلقه‌هاي‬ ‫;1‪f0 = f‬‬ ‫نامتناهي استفاده کنند زيرا‬ ‫} ;2‪f1 = f‬‬ ‫}‬ ‫قابليت انعطاف بيشتري‬ ‫دارد.‬
  128. 128. ‫متوقف کردن يك حلقۀ نامتناهي :‬ ‫با فشردن کليدهاي ‪ Ctrl+C‬سيستم عامل‬ ‫يک برنام ه را ب ه اجبار خاتم ه مي‌دهد. كليد‬ ‫‪ Ctrl‬را پايي ن نگ ه داشت ه و كليد ‪ C‬روي‬ ‫صفحه‌كليد خود را فشار دهيد تا برنامۀ فعلي‬ ‫خاتمه پيدا کند.‬
  129. 129. ‫3- دستور ‪do..while‬‬ ‫س اختار ‪ do..while‬روش ديگري براي س اختن حلقه‬ ‫است. نحو آن به صورت زير است:‬ ‫;)‪do statement while (condition‬‬ ‫به جاي دستور ابتدا ‪ ‌ statement‬را مي‌گيرد و‬ ‫اي ن ‪ condition‬يك شرط قرار اجرا‬ ‫به مي‌كن ‪‌ statement‬شرطتور ي ا بلوکيراقرار‬ ‫جاي د و سپس دس ‪condition‬‬ ‫ميبررس که قرار استر شرط درست بود‬ ‫‌گيرد ي مي‌كند. اگ تکرار شود.‬ ‫حلقه دوباره تکرار مي‌شود وگرنه حلقه‬ ‫پايان مييابد.‬ ‫‌‬
  130. 130. ‫دستور‌ ‪ do..while‬مانند دستور ‪while‬‬ ‫است. با اين فرق كه شرط کنترل حلقه‬ ‫به نتيج ۀ ديگ که اي ن اس تحلقه حلقۀ‬ ‫ارزيابي‬ ‫جاي اين ر در ابتداي ك ه‬ ‫‪ do..while‬هميش ه بدون توج ه به‬ ‫گردد، در انتهاي حلقه ارزيابي ميشود.‬ ‫‌‬ ‫مقدار شرط كنترل، لاقل يك بار اجرا‬ ‫مي‌شود متغيرحلق ۀ ‪ while‬مي‌تواند كه‬ ‫يعني هر ام ا كنترلي به جاي اين‬ ‫قب اصل اجرا نشود. حلق ه تنظيم شود،‬ ‫ل از شروع‬ ‫مي‌تواند درون آن تنظيم گردد.‬
  131. 131. ‫مثال 47- محاسسب ۀحسسساصسل جمسع اعداد صسحيح ‌متوالسي بسا حلق ۀ‬ ‌do..while :‫اين برنامه همان تأثير مثال 51- را دارد‬ 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; }
  132. 132. ‫* مثال 8-4 اعداد فاكتوريال‬ ‫اعداد فاكتوريال 0! و 1! و 2! و 3! و … با استفاده از رابطه‌هاي‬ ‫بازگشتي زير تعريف مي‌شوند:‬ ‫1 = !0‬ ‫,‬ ‫!)1-‪n! = n(n‬‬ ‫براي مثال، به ازاي 1 = ‪ n‬در معادل ۀدسسسوم داريم:‬ ‫1 = )1(1 = )!0(1 = )!)1-1((1 = !1‬ ‫همچنين براي 2 = ‪ n‬داريم:‬ ‫2 = )1(2 = )!1(2 = )!)1-2((2 = !2‬ ‫و به ازاي 3 = ‪ n‬داريم:‬ ‫6 = )2(3 = )!2(3 = )!)1-3((3 = !3‬
  133. 133. ‌ ،‫برنام ۀزسسسيرم‌سسسس ۀ ‌ اعداد فاكتوريال را که از عدد داده شده کوچک‌ترند‬ ‫ه‬ ‌ :‫چاپ ميکند‬ ()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 {
  134. 134. ‫4 - دستور ‪for‬‬ ‫نحو دستورالعمل ‪ for‬به صورت زير است:‬ ‫;‪for (initialization; condition; update) statement‬‬ ‫سه قسمت داخل پرانتز، حلقه را کنترل مي‌کنند.‬ ‫عبارت ‪ initialization‬تعيي ن اعلنمتغير‬ ‫عبارت ‪update‬براي براي بردن يا‬ ‫اي ن ک ه آيا‬ ‫عبارت ‪ condition‬براي پيش‌‬ ‫کنترل حلق ه اولي هکار يامي‌رود کنترلم عبارت‬ ‫مقداردهي ب ه به متغي ر . اينحلقه‬ ‫حلقه بايد تکرار شود خير به کار ي‌رود.‬ ‫پس تفاده مي‌شود.اي ن عبارت اولين‬ ‫اس از اجراي‬ ‫يعني اين عبارت، ‪ statement‬ارزيابي‬ ‫شرط کنترل حلقه است.‬ ‫مي‌گردد.است که ارزيابي مي‌شود پيش‬‫عبارتي‬ ‫اگ ر اي ن شرط درس ت باش د دستور‬ ‫از اين که نوبت به تکرارها برسد.‬ ‫‪ statement‬اجرا مي‌شود.‬
  135. 135. ‫بنابرايسن زنجير ۀوسسسسقايعسسي که تکرار را ايجاد‬ ‫مي‌کنند عبارتند از:‬ ‫1 – ارزيابي عبارت ‪initialization‬‬ ‫2 – بررسي شرط ‪ . condition‬اگر نادرست‬ ‫باشد، حلقه خاتمه مي‌يابد.‬ ‫3عبارت‌هاي ‪ initialization statement‬و‬ ‫– اجراي‬ ‫4 – ارزيابي عبارت و ‪update‬عبارت‌هاي‬ ‫‪update condition‬‬ ‫5 – تکرار گام‌هاي 2 تا مي‌توانيسم آن‌ها را در‬ ‫اختياري هسستند. يعنسي 4‬ ‫حلقه ذکر نکنيم.‬
  136. 136. ‫مثال 49- اسستفاده از حلقس ۀ ‪ for‬براي محاسسب ۀمسسسجموع اعداد صحيح‬ ‫متوالي‬ ‫اين برنامه همان تأثير مثال 51- را دارد:‬ ‫)(‪int main‬‬ ‫;‪{ int n‬‬ ‫;" :‪cout << "Enter a positive integer‬‬ ‫;‪cin >> n‬‬ ‫;0=‪long sum‬‬ ‫در ‪ ++C‬استاندارد وقتي يك متغير كنترل درون يك حلق ۀ ‪ for‬اعلن‬ ‫مي‌شود )ماننسد ‪ i‬در مثال بال( حوز ۀآسسسسن;‪ <= n‬بسه همان حلق ۀ ‪for‬‬ ‫‪for‬‬ ‫)++‪ i‬متغيسر ‪(int i=1; i‬‬ ‫;‪sum += I‬‬ ‫‌‬ ‫محدود ميگردد. يعنسي آسن متغيسر نمي‌توانسد بيرون از آسن حلقسه استفاده‬ ‫شود. ;‪cout << "The sum of the first " << n << " integers is " << sum‬‬ ‫}‬ ‫نتيج ۀدسسسيگر اين است که مي‌توان از نام مشابهي در خارج از حلق ۀ‬ ‫‪ for‬براي يك متغير ديگر استفاده نمود.‬
  137. 137. ‫مثال 421- يك حلق ۀ ‪ for‬نزولي‬ ‫برنام ۀزسسسير‌ ده عدد صحيح مثبت را به ترتيب نزولي چاپ مي‌كند:‬ ‫)(‪int main‬‬ ‫)--‪{ for (int i=10; i > 0; i‬‬ ‫;‪cout << " " << i‬‬ ‫}‬
  138. 138. ‫مثال 51-4 بيشتر از يك متغير كنترل در حلق ۀ ‪for‬‬ ‫حلق ۀ ‪ for‬در برنام ۀزسسسير دو متغير كنترل دارد:‬ ‫)(‪int main‬‬ ‫)++‪{ for (int m=95, n=11, m%n > 0; m -= 3, n‬‬ ‫;‪cout << m << "%" << n << " = " << m%n << endl‬‬ ‫}‬
  139. 139. ‫ تودرتو‬for ‫مثال 61-4 حلقه‌هاي‬ :‫برنام ۀزسسسير يك جدول ضرب چاپ مي‌كند‬ #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; } }
  140. 140. ‫5- دستور ‪break‬‬ ‫وقت ي دستور ‪ break‬درون‬ ‫دستور ‪ break‬يک دستور آشناست. قبل از‬ ‫آن حلقخاتمه تودرتبهو استفاده‬ ‫دستور ‪ switch‬و‬ ‫دادن‬ ‫براي ه‌هاي‬ ‫همچنين حلقه ط روي حلق و‌اي که‬ ‫‪do..while‬‬ ‫شود، فق ‌هاي ‪ while‬ه‬ ‫اس مس تقيماهدرون از ناي قرار گرفته‬ ‫ن دستور براي‬ ‫تفاده کرد ‌ايم. آ‬ ‫خاتم تاثير مي‌گذارد.‬ ‫ه دادن ب ه حلق ۀ ‪ for‬ني ز مي‌توانيم‬ ‫حلقه‌هاي بيرون ي بدون هيچ‬ ‫استفاده کنيم.‬ ‫تغييري ادامه مي‌يابند.‬ ‫دستور ‪ break‬در هر جايي درون حلقه‬ ‫مي‌تواند جا بگيرد و در همان جا حلقه را‬ ‫خاتمه دهد.‬
  141. 141. ‫6- دستور ‪continue‬‬ ‫دس تور ‪ break‬بقي ۀ دستورهاي درون‬ ‫بلوك حلق ه را ناديده گرفت ه و ب ه اولين‬ ‫‌‌دستور بيرون حلقه پرش مي‌كند. دستور‬ ‫‪ continue‬اين دستور، ادامۀ‬ ‫نيز شبيه همين است اما به‬ ‫جاي اين که حلقهفعلي را لغو‬ ‫را خاتمه دهد، اجرا را‬ ‫چرخۀ‬ ‫کرده و اجراي دور‬ ‫به تكرار بعدي حلقه منتقل مي‌كند.‬ ‫بعدي حلقه را آغاز‬ ‫ميکند.‬ ‫‌‬
  142. 142. continue ‫ و‬break ‫مثال 491- استفاده از دستورهاي‬ :‫ را شرح مي‌دهد‬continue ‫ و‬break ‫اين برنام ۀكسسسوچك،‌ دستورهاي‬ 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; }
  143. 143. ‫7- دستور ‪goto‬‬ ‫دستورهاي‬ ‫دسستور ‪ goto‬نوع ديگري از‬ ‫توسسسط يك‬ ‫پرش اسسست. مقصسسد ايسسن پرش‬ ‫برچسب معين مي‌شود.‬ ‫برچ سب شناسسه‌اي اسست كسه جلوي آن‬ ‫علمست كولسن) : ( مي‌آيسد و جلوي يك دستور‬ ‫ديگر قرار مي‌گيرد.‬ ‫يک مزيت دستور ‪ goto‬اين است که با‬ ‫استفاده از آن مي‌توان از همۀ حلقه‌هاي‬ ‫تودرتو خارج شد و به مکان دلخواهي در‬
  144. 144. ‫ براي خارج شدن از‬goto ‫مثال 402- اس تفاده از دستور‬ ‫حلق ه ‌هاي تودرتو‬ 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; } }
  145. 145. ‫8- توليد اعداد شبه تصادفي‬ ‫يك ي از كاربردهاي بس يار مه م رايانه‌ها،‬ ‫»شبيه‌ سازي « 

×