SlideShare une entreprise Scribd logo
1  sur  567
‫بسم ال الرحمن‬
‫الرحيم‬
‫دانشگاه پيام‬
           ‫نور‬
‫دانشكده فناوري اطلعات‬
‫برنامه سازي پيشرفته‬
      ‫تعداد واحد: 3‬




      ‫تهيه كننده:‬
    ‫دكتر احمد فراهي‬
‫:مقدمه‬
    ‫زبان ‪ C‬يک زبان همه منظوره‬
    ‫است. دستورالعمل‌هاي اين زبان‬
  ‫بسيار شبيه عبارات جبري و نحو‬
‫آن شبيه جملت انگليسي مي باشد.‬
   ‫اين امر سبب مي‌شود که ‪ C‬يک‬
          ‫زبان سطح بال باشد که‬
‫++ ‪ C‬که از نسسسل ‪ C‬است، تمام‬
‫ويژگي‌هاي ‪ C‬را بسه ارث برده اسست. اما‬
‫برتري فني ديگري هم دارد: ‪ ++C‬اکنون‬
‫»شي‌گرا« اسست. مي‌توان بسا استفاده از‬
 ‫ايسسن خاصسسيت، برنامه‌هاي شي‌گرا توليد‬
  ‫نمود. برنامه‌هاي شي‌گرا منظم و‬
‫ساخت‌يافته‌اند، قابسل روزآمسد کردن‌انسد، به‬
‫سهولت تغيير و بهبود مي‌يابند و قابليت‬
         ‫اطمينان و پايداري بيشتري دارند.‬
‫:اهم مطالب اين كتاب‬

‫جلسه اول: »مقدمات برنامه‌نويسي با ‪«++C‬‬
                ‫جلسه دوم: »انواع اصلي«‬
                    ‫«جلسه سوم: »انتخاب‬
                    ‫جلسه چهارم: ››تكرار«‬
                      ‫«جلسه پنجم: »توابع‬
                   ‫جلسه‌ ششم: » آرايه‌ها«‬
‫‌‬           ‫‌‬
                       ‫«جلسه هفتم: »اشارهگرها و ارجاعها‬

                   ‫‌‬               ‫‌ ‌‬
‫جلسه‌ هشتم: »رشتههاي كاراكتري و فايلها در ++‪C‬استاندارد«‬

                                ‫جلسه نهم: »شيئ‌گرايي«‬

                   ‫«جلسه‌ دهم: »سربارگذاري عملگرها‬

                          ‫جلسه يازدهم: »تركيب و وراثت«‬
‫جلسه اول‬


‫مقدمات برنامه‌نويسي با‬
      ‫‪++C‬‬
‫:آنچه در اين جلسه مي خوانيد‬
                       ‫1- چرا ‪ ++C‬؟‬
                    ‫2- تاريخچ ۀ ‪++C‬‬
                 ‫3- آماده‌سازي مقدمات‬
                ‫4- شروع کار با ‪++C‬‬
                    ‫5- عملگر خروجي‬
               ‫6- ليترال‌ها و کاراکترها‬
            ‫7- متغيرها و تعريف آن‌ها‬
        ‫8- مقداردهي اوليه به متغيرها‬
                            ‫9- ثابت‌ها‬
‫هدف کلي:‬
‫آشنايي با تاريخچه و مزاياي زبان برنامه‌نويسي‬
‫‪ ++C‬و بيان مفاهيم بنيادي شي‌گرايي و عناصر‬
                         ‫مهم برنامه‌هاي ‪++C‬‬
‫:هدف‌هاي رفتاري‬
     ‫انتظار مي‌رود پس از پايان اين جلسه بتوانيد:‬
‫- مزاياي زبان ‪ ++C‬را بر زبان‌هاي مشاب ه ذکر‬
         ‫کرده و تفاوت آن را با زبان ‪ C‬بيان کنيد.‬
 ‫- شرح مختص ري از رون د پيشرفت زبان‌هاي‬
‫برنامه‌نويسي را بيان کرده و مشکلت هر دوره را‬
                       ‫به اختصار شرح دهيد.‬
‫- مزاياي شي‌گرايي در توليد نرم‌افزار را برشماريد.‬
‫- اصول سه‌گانۀ شي‌گرايي را نام برده و هر يک‬
                      ‫را به اختصار شرح دهيد.‬
‫- قال ب کل ي برنامه‌هاي ‪ ++C‬را بشناس يد و بتوانيد‬
             ‫برنامه‌هاي کوچک را نوشته و آزمايش کنيد.‬
‫- عملگر ورودي و خروجي را در ‪ ++C‬شناخته و از آن‌ها‬
                             ‫در برنامه‌ها استفاده کنيد.‬
‫- نحوۀ اعلن متغيره ا و شيوۀ مقدارده ي ب ه آن‌ها را‬
                                             ‫بدانيد.‬
‫- سه موجوديت »ليترال« ، »کاراکتر« و »عدد« را شناخته‬
                       ‫و فرق بين آن‌ها را شرح دهيد.‬
‫- علت و شيوه‌هاي افزودن توضيح به کد برنامه را شرح‬
                                            ‫دهيد.‬
  ‫- علت و شيوۀ معرفي ثابت‌ها در برنامه را شرح دهيد.‬
‫مقدمه‬
‫در دهه 0791 در آزمايشگاه‌هاي بل زباني به نام ‪C‬‬
‫ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود‬
 ‫تا اي ن ک ه در س ال 8791 توسط ‪ Kernighan‬و‬
 ‫‪ Richie‬شرح کامل ي از اي ن زبان منتش ر ش د و به‬
     ‫سرعت نظر برنامه‌نويسان حرفه‌اي را جلب نمود.‬
‫هنگام ي ک ه بح ث شي‌گراي ي و مزاياي آن در جهان‬
‫نرم‌افزار رون ق ياف ت، زبان ‪ C‬که قابليت شي‌گرايي‬
‫نداشت ناقص به نظر مي‌رسيد تا اين که در اوايل‬
‫ده ۀ 0891 دوباره شرک ت ب ل دس ت ب ه کار شد و‬
    ‫‪ Bjarne Stroustrup‬زبان ‪ ++C‬را طراحي نمود‬
‫‪ ++C‬ترکيبي از دو زبان ‪ C‬و ‪ Simula‬بود و‬
‫قابليت‌هاي شي‌گراي ي ني ز داشت. از آ ن زمان به‬
‫بع د شرکت‌هاي زيادي کامپايلرهايي براي ‪++C‬‬
‫طراحي کردند. اين امر سبب شد تفاوت‌هايي بين‬
‫نس خه‌هاي مختل ف اي ن زبان ب ه وجود بيايد و از‬
          ‫قابليت سازگاري و انتقال آن کاسته شود.‬
‫ب ه همين دليل در س ال 8991 زبان ‪ ++C‬توسط‬
‫موس سۀ اس تانداردهاي مل ي آمريک ا )‪ (ANSI‬به‬
              ‫شکل استاندارد و يک‌پارچه در‌آمد.‬
‫1- چرا ‪ ++C‬؟‬

          ‫‪ ‬زبان ‪ C‬يک زبان همه ظوره است‬
                  ‫من‬

 ‫‪ ‬در اي ن زبان عملگ هاي ي ت عبيه شده که‬
                    ‫ر‌‬
‫برنامه ي طح پاي ين و به زبان ماشين را‬
                             ‫‌نويس س‬
                       ‫نيز امکان‌پذير ي‌سازد‬
                             ‫م‬
‫هاي فراواني دارد، کد منبع‬  ‫‪‬چون ‪ C‬عملگر‬
       ‫برنام ها در اين زبان بسيار کوتاه است‬
                                     ‫ه‌‬
‫- زبان ‪ C‬براي اجراي بسياري از دستوراتش از توابع کتابخانه‌اي‬       ‫‪‬‬
‫استفاده مي‌کند و بيشتر خصوصيات وابسته به سخت‌افزار را به اين‬
                                         ‫توابع واگذار مي‌نمايد.‬
    ‫‪ ‬برنامۀ مقصدي که توسط کامپايلرهاي ‪ C‬ساخته مي‌شود بسيار‬
  ‫فشرده‌تر و کم‌حجم‌تر از برنامه‌هاي مشابه در ساير زبان‌ها است.‬


   ‫‪ ++C‬که از نسل ‪ C‬است، تمام ويژگي‌هاي جذاب ‪ C‬را به ارث‬           ‫‪‬‬
                                              ‫برده است .‬

 ‫و سرانجام آخرين دليل استفاده از ‪ ++C‬ورود به دنياي ‪ #C‬است.‬        ‫‪‬‬
‫2- تاريخچۀ ‪++C‬‬

‫در ده ه 0791 در آزمايشگاه‌هاي ب ل زبان ي به نام ‪C‬‬
‫ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود تا‬
 ‫اي ن ک ه در س ال 8791 توسط ‪ Kernighan‬و ‪Richie‬‬
‫شرح کاملي از اين زبان منتشر شد و به سرعت نظر‬
‫برنامه‌نويسان حرفه‌اي را جلب نمود. هنگامي که بحث‬
‫شي‌گرايي و مزاياي آن در جهان نرم‌افزار رونق يافت،‬
‫زبان ‪ C‬که قابلي ت شي‌گراي ي نداش ت ناق ص ب ه نظر‬
‫مي‌رسيد تا اين که در اوايل دهۀ 0891 دوباره شرکت‬
‫بل دست به کار شد و ‪ Bjarne Stroustrup‬زبان ‪++C‬‬
                                   ‫را طراحي نمود.‬
‫‪ ++C‬ترکيبي از دو زبان ‪ C‬و ‪ Simula‬بود و‬
‫قابليت‌هاي شي‌گرايي نيز داشت از آن زمان به بعد‬
‫شرکت‌هاي زيادي کامپايلرهايي براي ‪ ++C‬طراحي‬
 ‫کردند. اي ن ام ر س بب ش د تفاوت‌هاي ي بين‬
‫نس خه‌هاي مختل ف اي ن زبان ب ه وجود بيايد و از‬
‫قابليت سازگاري و انتقال آن کاسته شود . به همين‬
‫دلي ل در س ال 8991 زبان ‪ ++C‬توس ط موسسۀ‬
 ‫اس تانداردهاي مل ي آمريک ا )‪ (ANSI‬به شکل‬
‫استاندارد و يک‌پارچه در‌آمد. کامپايلرهاي کنوني به‬
‫اي ن اس تاندارد پايبندند. کتاب حاض ر نيز بر مبناي‬
               ‫همين استاندارد نگارش يافته است.‬
‫آماده‌سازي مقدمات -3‬
‫يک »برنامه« دستورالعمل‌هاي متوالي است که‬
‫مي‌تواند توسط يک رايانه اجرا شود. براي نوشتن‬
‫و اجراي هر برنامه به يک »ويرايش‌گر متن« و يک‬
                         ‫»کامپايلر« احتياج داريم.‬
 ‫بس تۀ ‪ ++Visual C‬محص ول شرکت‬
‫ميکروس افت و بس تۀ ‪ C++ Builder‬محصول‬
‫شرکت بورلند نمونه‌هاي جالبي از محيط مجتمع‬
       ‫توليد براي زبان ‪ ++C‬به شمار مي‌روند.‬
‫4- شروع کار با ‪++C‬‬
   ‫‪ ++C ‬نسبت به حروف »حساس به حالت« است يعني ‪ A‬و‬
                                  ‫‪ a‬را يکي نمي‌داند‬

                                                                      ‫مثال : اولين برنامه‬
‫اولين برنامه‌اي که مي‌نويسيم به محض تولد، به شما سلم مي‌کند و عبارت "‪ "!Hello, my programmer‬را‬
                                                                               ‫نمايش مي‌دهد:‬

‫#‪<include <iostream‬‬
‫‪()int main‬‬
‫} ‪; "std::cout << "Hello, my programmer!n‬‬
‫0 ‪;return‬‬
‫{‬
‫اولين خط از کد بال يک »راهنماي‬
 ‫پيش‌پردازنده« است. راهنماي پيش‌پردازنده‬
                   ‫شامل اجزاي زير است:‬
‫‪ -1 ‬کاراکتر # که نشان مي‌دهد اين خط، يک‬
‫راهنماي پيش‌پردازنده اس ت. اي ن کاراکت ر بايد‬
‫در ابتداي همۀ خطوط راهنماي پيش‌پردازنده‬
                                        ‫باشد.‬
                            ‫‪ -2 ‬عبارت ‪include‬‬

    ‫‪ -3 ‬نام يک »فايل کتابخانه‌اي« که ميان دو‬
              ‫علمت >< محصور شده است.‬
‫خط دوم برنامه نيز بايد در همه برنامه‌هاي ‪+C‬‬
           ‫+ وجود داشته باشد.‬
 ‫اين خط به کامپايلر مي‌گويد که »بدنۀ اصلي برنامه« از کجا شروع‬
                       ‫مي‌شود. اين خط داراي اجزاي زير است:‬

              ‫1 – عبارت ‪ int‬که يک نوع عددي در ‪ ++C‬است.‬
    ‫2 – عبارت ‪ main‬که به آن »تابع اصلي« در ‪ ++C‬مي‌گويند.‬
‫3 – دو پرانتز )( که نشان مي‌دهد عبارت ‪ main‬يک »تابع« است.‬


    ‫هر برنامه فقط بايد يک تابع‬
        ‫‪ ()main‬داشته باشد .‬
‫سه خط آخر برنامه، »بدنۀ اصلي برنامه« را تشکيل‬
                   ‫.مي‌دهند‬




 ‫دستورات برنامه از خط سوم شروع شده است.‬


‫دستور خط سوم با علمت سميکولن ; پايان يافته‬
                     ‫است.‬
‫توضيح‬

 ‫‪‬توضي ح، متن ي اس ت ک ه به منظور‬
‫راهنماي ي و درک بهت ر ب ه برنام ه اضافه‬
 ‫مي‌شود و تاثيري در اجراي برنامه‬
‫ندارد. . کامپايلر توضيحات برنامه را قبل‬
                    ‫از اجرا حذف مي‌کند.‬
‫‪ ‬اس تفاده از توضي ح س بب مي‌شود که‬
 ‫ساير افراد ک د برنام ۀ شم ا را راحت‌تر‬
‫به دو صورت مي‌توانيم به برنامه‌هاي ‪ ++C‬توضيحات اضافه‬
                        ‫کنيم:‬

 ‫‪ – 1 ‬با اس تفاده از دو علمت‬
‫اس لش // : هر متن ي ک ه بعد از دو‬
‫علم ت اس لش بياي د تا پايان همان‬
    ‫سطر يک توضيح تلقي مي‌شود .‬
‫‪ – 2‬با استفاده از حالت ‪ : C‬هر متني‬
 ‫که ب ا علم ت /* شروع شود و با‬
‫علمت */ پايان يابد يک توضيح تلقي‬
‫5- عملگر خروجي‬
‫علم ت >> عملگ ر خروج ي در ‪ ++C‬نام دارد )به آن‬
                            ‫عملگر درج نيز مي‌گويند(.‬
 ‫يک »عملگر« چيزي است که عملياتي را روي يک يا چند‬
 ‫شي انجام مي‌دهد. عملگر خروجي، مقادير موجود در سمت‬
             ‫راستش را به خروجي سمت چپش مي‌فرستد.‬
                                  ‫به اين ترتيب دستور‬
 ‫; 66 <<‪cout‬‬
‫مقدار 66 را به خروجي ‪ cout‬مي‌فرستد که ‪ cout‬معمول‬
‫به صفحه‌نمايش اشاره دارد. در نتيجه مقدار 66 روي صفحه‬
                                   ‫نمايش درج مي‌شود.‬
‫6 -ليترال‌ها و کاراکترها‬
‫ي ک »ليترال« رشته‌اي از حروف، ارقام ي ا علي م چاپي‬
‫اس ت ک ه ميان دو علم ت نق ل قول " " محصور شده‬
                                             ‫باشد.‬
‫يک »کاراکتر« يک حرف، رقم يا علمت قابل چاپ است‬
‫که ميان دونشانۀ ' ' محصور شده باشد. پس '‪ 'w‬و '!' و‬
                         ‫'1' هر کدام يک کاراکتر است.‬

‫به تفاوت سه موجوديت »عدد« و »کاراکتر« و »ليترال‬
‫رشته‌اي« دق ت کني د: 6 يک عدد اس ت، '6' يک کاراکتر‬
                   ‫است و "6" يک ليترال رشته‌اي است.‬
‫7 - متغيرها و تعريف آن‌ها:‬
‫»متغيسر« مکانسي در حافظسه اسست کسه چهار مشخصه‬
‫دارد: نام، نوع، مقدار، آدرس س . وقتي متغيري را‬
‫تعري ف مي‌کني م، ابتدا ب ا توج ه ب ه نوع متغير،‬
‫آدرسي از حافظه در نظر گرفته مي‌شود، سپس‬
             ‫به آن آدرس يک نام تعلق مي‌گيرد.‬
‫در ‪ ++C‬قبل از اين که بتوانيم از متغيري استفاده‬
                   ‫کنيم، بايد آن را اعلن نماييم.‬
        ‫نحو اعلن يک متغير‬
 ‫‪type name initializer‬‬

‫عبارت ‪ type‬نوع متغي ر را مشخص مي‌کند.‬
‫نوع متغير به کامپايلر اطلع مي‌دهد که اين‬
‫متغي ر چ ه مقاديري مي‌توان د داشت ه باشد و‬
      ‫چه اعمالي مي‌توان روي آن انجام داد.‬
‫‪name  initializer‬‬
‫عبارت ‪ name‬نام متغي ر را نشان مي‌دهد. اين نام‬
‫حداکث ر مي‌توان د 13 کاراکت ر باش د، نباي د با عدد شروع‬
‫شود، علي م رياض ي نداشت ه باش د و همچني ن »کلمۀ‬
                                     ‫کليدي« نيز نباشد.‬
                ‫مقداردهي اوليه‬
‫عبارت ‪ initializer‬عبارت »مقداردهي اوليه« نام دارد. با‬
‫استفاده از اين عبارت مي‌توان مقدار اوليه‌اي در متغير‬
                                   ‫مورد نظر قرار داد.‬

      ‫دستور زير تعريف يک متغير صحيح را نشان مي‌دهد:‬
‫;05 = ‪int n‬‬
‫8 - مقداردهي اوليه به متغيرها‬
‫در بسياري از موارد بهتر است متغيرها را در همان محلي که‬
 ‫اعلن مي‌شون د مقدارده ي کنيم. استفاده از متغيرهاي‬
   ‫مقداردهي نشده ممکن است باعث ايجاد دردسرهايي شود.‬

‫دردس ر متغيرهاي مقدارده ي نشده وقت ي بزرگ‌ تر مي‌شود که‬
‫سعي کني م متغي ر مقدارده ي نشده را در ي ک محاس به به کار‬
  ‫ببريم. مثل اگر ‪ x‬را که مقداردهي نشده در عبارت 5 + ‪;y = x‬‬
 ‫به کار ب بريم، حاص ل ‪ y‬غي ر قاب ل پيش‌ بيني خواهد بود. براي‬
‫اجتناب از چنين مشکلتي عاقلنه است که متغيرها را هميشه‬
                               ‫هنگام تعريف، مقداردهي کنيم.‬
                                                       ‫مثال:‬
   ‫;54=‪int x‬‬
   ‫;0=‪int y‬‬
‫9- ثابت‌ها‬
‫در بعضي از برنامه ‌ها از متغيري استفاده مي‌کنيم که فقط يک بار لزم‬
‫است آن را مقداردهي کنيم و سپس مقدار آن متغير در سراسر برنامه‬
‫بدون تغيير باقي مي‌ماند. مثل در يک برنامۀ محاسبات رياضي، متغيري به‬
‫نام ‪ PI‬تعريف مي‌کنيم و آن را با 41.3 مقداردهي مي‌کنيم و مي‌خواهيم‬
 ‫که مقدار اي ن متغي ر در س راسر برنام ه ثاب ت بماند. در چني ن حالتي از‬
                                            ‫»ثابت‌ها« استفاده مي‌کنيم.‬
       ‫يک ثابت، يک نوع متغير است که فقط يک بار مقداردهي‬
       ‫مي‌شود و سپس تغيير دادن مقدار آن در ادامۀ برنامه ممکن‬
                                                          ‫نيست.‬

        ‫تعريف ثابت‌ها مانند تعريف متغيرهاست با اين تفاوت که‬
          ‫کلمه کليدي ‪ 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;
}

                               ‫:برنامه فوق خروجي ندارد‬
‫عملگر ورودي - 01‬

‫براي اين که بتوانيم هنگام اجراي برنامه مقاديري را وارد کنيم از‬
                            ‫عملگر ورودي << استفاده مي‌کنيم.‬

          ‫:استفاده از دستور ورودي به شکل زير است‬
  ‫;‪cin >> variable‬‬



                          ‫‪ variable‬نام يک متغير است.‬
‫مثال 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
‫عملگسر ورودي نيسز ماننسد عملگسر خروجسي بسه شکل‬
‫جريانسي رفتار مي‌کند. يعنسي همان طور کسه در عملگر‬
‫خروجي مي‌توانستيم چند عبارت را با استفاده از چند‬
‫عملگسر >> به صسورت پشست سسر هسم چاپ کنيم، در‬
‫عملگر ورودي نيز مي‌توانيم با استفاده از چند عملگر‬
‫<< چند مقدار را به صورت پشت سر هم دريافت کنيم.‬
                           ‫مثل با استفاده از دستور:‬
‫;‪cin >> x >> y >> z‬‬
‫سه مقدار ‪ x‬و ‪ y‬و ‪ z‬به ترتيب از ورودي دريافت مي‌شوند.‬
 ‫براي ايسسن کار بايسسد بيسسن هسسر ورودي يسسک فضاي خالي‬
‫)‪ (space‬بگذاريد و پس از تايپ کردن هم ۀوسسسرودي‌ها، کليد‬
‫‪ enter‬را بفشاريد. آخرين مثال جلسه، اين موضوع را بهتر‬
‫مثال 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
}
‫پايان جلسه اول‬
‫جلسه دوم‬


‫»انواع اصلي«‬
‫:آنچه در اين جلسه مي خوانيد‬
               ‫1- انواع داد ۀعسسسسددي‬
             ‫2- متغير عدد صحيح‬
        ‫3- محاسبات اعداد صحيح‬
        ‫4- عملگرهاي افزايشي و‬
                     ‫کاهشي‬
‫5- عملگرهاي مقدارگذاري مرکب ›››‬
‫7- تعريف متغير مميز شناور‬
      ‫8 - شکل علمي مقادير مميز‬
                        ‫شناور‬
              ‫9- نوع بولين ‪bool‬‬
         ‫01- نوع کاراکتري ‪char‬‬
        ‫11- نوع شمارشي ‪enum‬‬
‫›››‬   ‫21- تبديل نوع، گسترش نوع‬
‫31- برخي از خطاهاي‬
      ‫برنامه‌نويسي‬
  ‫41 - سرريزي عددي‬
 ‫51- خطاي گرد کردن‬
   ‫61- حوزۀ متغيرها‬
‫هدف کلي:‬
                               ‫هدف‌هاي رفتاري:‬
‫انتظار مي‌رود پ س از وپايان اي بن‌کارگيري‬
‫معرف ي انواع متغييرها نحوۀ ه جلسه‬
                    ‫بتوانيد:در برنامه‌هاي ‪++C‬‬
                                          ‫آن‌ها‬
‫- انواع عددي صحيح در ‪ ++C‬را نام ببريد و‬
‫متغيرهاي ي از اي ن نوع‌ ها را در برنامه‌ ها به‬
                                      ‫کار ببريد.‬
‫- انواع عددي مميز شناور در ‪ ++C‬را نام‬
‫ببري د و متغيرهاي ي از اي ن نوع‌ها را در‬
    ‫<<<‬                  ‫برنامه‌ها به کار ببريد.‬
‫- نوع بولين را تعريف کرده و متغيرهايي از‬
‫- نوع شمارشي را شناخته و متغيرهايي از‬
        ‫اين نوع را در برنامه‌ها به کار ببريد.‬
‫- مفاهيم »تبديل نوع« و »گسترش نوع« را‬
‫شناخته و انواع مختلف را به يکديگر تبديل‬
                                       ‫نماييد.‬
 ‫- عل ت خطاهاي »سرريزي عددي« و‬
‫»گردکردن« را دانسته و بتوانيد محل وقوع‬
                          ‫آن‌ها را کشف کنيد.‬
‫- عملگرهاي حسابي و افزايشي و کاهشي‬
‫مقدمه‬
 ‫م ا در زندگ ي روزمره از داده‌هاي مختلفي‬
‫استفاده مي‌کنيم: اعداد ، تصاوير، نوشته‌ها‬
 ‫يا حروف الفب ا، ص داها، بوه ا و ... . با‬
 ‫پردازش اي ن داده‌ ها مي‌تواني م تصميماتي‬
‫اتخاذ کنيم، عکس‌العمل‌هايي نشان دهيم و‬
 ‫مس اله‌اي را ح ل کنيم. رايانه‌ ها نيز قرار‬
 ‫اس ت همي ن کار را انجام دهند. يعني‬
‫داده‌هايي را بگيرند، آن ‌ها را به شکلي که‬
 ‫ما تعيين مي‌کنيم پردازش کنند و در نتيجه‬
‫1- انواع دادۀ عددي‬
‫در ‪ ++C‬دو نوع اصلي داده وجود دارد:‬
 ‫»نوع ص حيح« و »نوع مميز شناور«.‬
‫همۀ انواع ديگر از روي اين دو ساخته‬
      ‫مي‌شوند )به شکل زير دقت کنيد(.‬
            ‫انواع اصلي‬

     ‫انواع مميز شناور انواع صحيح‬
‫نوع صحيح‬

‫نوع صحيح براي نگهداري اعداد‬
‫صحيح )اعداد 0 و 1 و 2 و ...(‬
‫استفاده مي‌شود. اين اعداد بيشتر‬
‫براي شمارش ب ه کار مي‌روند و‬
            ‫دامنه محدودي دارند.‬
‫انواع صحيح‬

  ‫نوع‬      ‫نوع‬       ‫نوع‬          ‫نوع‬
boolean   ‫ي‬‫شمارش‬   ‫کاراکتري‬   ‫عددي صحيح‬
                                     short
bool      enum
                          char        int
                                     long
                        unsigned   Unsigned
                          char       short
                                   Unsigned
                         wchar_t      int
                                   unsigned
                                     long
‫نوع مميز شناور براي نگهداري اعداد اعشاري‬
  ‫اس تفاده مي‌شود. اعداد اعشاري بيشتر براي‬
 ‫اندازه‌گيري دقيق به کار مي‌روند و دامنۀ بزرگ‌تري‬
‫دارند . يک عدد اعشاري مثل 781/253 را مي‌توان‬
   ‫به شک ل 01×81/2537 يا 201×1/25378‬
  ‫يا01×3781/251-يا01×53781/2 2-و يا ... نوشت.‬
    ‫به اي ن انواع مميز کم و زياد کردن‬
                ‫ترتي ب ب ا شناور‬
    ‫توان عدد 01 مميز عدد نيز جابه‌جا‬
    ‫مي‌شود . به همين دليل است که به‬
    ‫اعداد اعشاري »اعداد مميز ‪«float‬‬
     ‫شناور‬          ‫‪double‬‬      ‫‪long double‬‬
                                 ‫مي‌گويند.‬
‫متغير عدد صحيح -2‬
‫‪ ++C‬شش نوع متغي ر عدد صحيح دارد‬
‫تفاوت اي ن ش ش نوع مربوط به ميزان‬
‫حافظ ۀ مورد استفاده و محدودۀ مقاديري‬
    ‫است که هر کدام مي‌توانند داشته باشند.‬
‫اين ميزان حافظۀ مورد استفاده و محدودۀ‬
‫مقادي ر، بس تگي زيادي ب ه سخت‌افزار و‬
‫همچني ن س يستم عام ل دارد. يعن ي ممکن‬
‫اس ت روي ي ک رايان ه، نوع ‪ int‬دو بايت از‬
‫حافظ ه را اشغال کن د در حال ي که روي‬
‫رايانه‌اي از نوع ديگ ر نوع ‪ int‬به چهار بايت‬
‫نوع متغيير‬     ‫حداقل مقدار قابل‬   ‫حداكثر مقدار قابل‬
                      ‫پذيرش‬              ‫پذيرش‬
    ‫‪short‬‬            ‫86723-‬             ‫76723‬
‫‪unsigned short‬‬
   ‫توجسه داشته‬        ‫0‬             ‫53556‬
                ‫وقتسي برنامه‌اي مي‌نويسسيد،‬
  ‫باشيسد کسه از نوع صسحيح مناسسب استفاده‬
     ‫‪int‬‬       ‫7463847412 8463847412-‬
‫5927694924 برنامه دچار خطا ‪unsigned int‬‬
  ‫نشود و هم‬           ‫0‬          ‫کنيد تا هم‬
               ‫حافظ ۀسسسسيستم را هدر ندهيد.‬
    ‫‪long‬‬         ‫8463847412-‬        ‫7463847412‬
‫‪unsigned long‬‬           ‫0‬           ‫5927694924‬
‫3 -محاسبات اعداد صحيح‬

 ‫‪ ++C‬مانن د اغلب زبان‌هاي‬
‫برنامه‌نويسي براي محاسبات از‬
‫عملگرهاي جم ع )+( ، تفريق‬
‫)-( ، ضرب )*( ، تقسيم )/( و‬
 ‫باقيمانده )%( استفاده مي‌کند.‬
‫4 - عملگرهاي افزايشي و کاهشي‬
‫‪ ++C‬براي دستکاري مقدار متغيرهاي صحيح، دو‬
                     ‫عملگر جالب ديگر دارد:‬
‫عملگر ++ کدام از ايسن عملگرها دو‬
                       ‫امسا هسر :‬
 ‫شکسسسل متفاوت دارنسسسد : شکل‬
   ‫مقدار يک متغير را يک واحد افزايش‬
   ‫»پيشوندي« و شکل »پسوندي«.‬
                           ‫مي‌دهد.‬
                             ‫عملگر -- :‬
‫در شک ل پيشوندي ابتدا متغير،‬
‫متناس ب ب ا عملگعملگر قبلش نام‬
 ‫يا‬ ‫در شکل پيشوندي، ر، افزاي از‬
 ‫متغير مي‌آيد مثل ++ ‪ m‬يا -- ‪ . n‬در‬
‫کاهش مي‌يابد و پس از آن مقدار‬
 ‫شک ل پس وندي، عملگ ر بعد از نام‬
  ‫متغير مي‌آيد مثل محاس يا ‪ . --n‬ديگر‬
         ‫متغي ر براي ‪ ++m‬بات‬
                   ‫استفاده مي‌شود.‬
 ‫در شک ل پسوندي ابتدا مقدار‬
‫متغير در محاسبات به کار مي‌رود‬
‫و پس از آن مقدار متغير يک واحد‬
‫5 – عملگرهاي مقدارگذاري مرکب‬
‫‪ ++ C‬عملگرهاي ديگري دارد که‬
‫مقدارگذاري در متغيره ا را تسهيل‬
 ‫م ي ‌نمايند. مثل با ا ستفاده از عملگر‬
‫+= م ي ‌تواني م هش ت واح د به ‪m‬‬
  ‫اضا فه کن يم ا ما با د ستور کوتا ه ‌ تر:‬

‫دستور بال معادل دستور 8 + ‪ ;m = m‬است‬
‫با اين تفاوت که کوتاه‌تر است. به عملگر +=‬
‫»عملگ ر مرک ب« مي‌گوين د زيرا ترکيبي از‬
‫عملگرهاي مقدارگذاري مرکب -5‬

 ‫براي مقدارگذاري در‬    ‫قبل از عملگر =‬
‫متغيرها استفاده کرديم. ‪ ++C‬عملگرهاي‬
‫ديگري دارد ک ه مقدارگذاري در متغيرها را‬
                        ‫تسهيل مي‌نمايند.‬
‫+= و‬     ‫عملگر مرکب در ‪ ++C‬عبارتند از:‬
           ‫-= و *= و /= و =%‬
‫نحوۀ ع مل ا ين عملگر ها به شکل‬
                      ‫زير است:‬
‫;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‬‬
‫6 – انواع مميز شناور‬
‫عدد مميز شناور به بيان ساده همان عدد اعشاري است. عددي‬
‫مثل 54.321 يک عدد اعشاري است. براي اين که مقدار اين‬
‫عدد در رايانسه ذخيره شود، ابتدا بايسد بسه شکسل دودويسي تبديل‬
‫21001110.1101111 = 54.321‬                               ‫شود:‬
‫اکنون براي مشخ ص نمودن محل اعشار در عدد، تمام‬
‫رقم ‌ها را به سمت راست مميز منتقل مي‌کنيم. البته با هر‬
  ‫جابجايي مميز، عدد حاصل بايد در تواني از 2 ضرب شود:‬

‫72 ×10011101101111.0 = 54.321‬
‫به مقدار 10011101101111 »مانتيس عدد« و به‬
‫7 که توان روي دو است، »نماي عدد« گفته مي‌شود.‬
‫در ‪ ++C‬سه نوع مميز شناور وجود‬
                          ‫دارد:‬
            ‫انواع مميز شناور‬


    ‫‪float‬‬      ‫‪double‬‬      ‫‪long double‬‬



‫نوع ‪ double‬از هشتهشتبراي‬
      ‫نوع ‪ long double‬از بايت‬
 ‫معمول نوع ‪ float‬از چهار يا‬
‫نگهداري عدد استفاده مي‌کند.بايت‬
  ‫ده براي نگهداري شانزده بايت‬
‫عدد استفاده‬       ‫ي ا دوازده ي ا‬
    ‫برايي نگهداري عدد استفاده‬
                         ‫م ‌کند.‬
‫جدول تخصيص حافظه براي متغيير هاي مميز شناور‬


                  ‫تعداد بيت براي ذخيره‌سازيِ‬
  ‫نوع متغير‬
                ‫نما مانتيس‬          ‫علمت‬
                                    ‫عدد‬
‫23‪ float‬بيتي‬      ‫8 32‬                 ‫1‬
 ‫46 ‪double‬‬
    ‫بيتي‬
                  ‫11 25‬                ‫1‬
‫7 – تعريف متغير مميز شناور‬
‫تعري ف متغي ر ممي ز شناور مانن د تعريف‬
 ‫تفاوت نوع ‪ float‬با نوع ‪ double‬در اين‬
‫متغي ر ص حيح اس ت . با اي ن تفاوت که از‬
 ‫است که نوع ‪ double‬دو برابر ‪ float‬از‬
 ‫کلم ۀ کليدي ‪ float‬يا ‪ double‬براي‬
  ‫حافظ ه اس تفاده مي‌کند. پس نوع‬
 ‫مشخ ص نمودن نوع متغي ر استفاده‬
 ‫‪ double‬دقت ي بس يار بيشتر از ‪float‬‬
                               ‫مي‌کنيم.‬
 ‫دارد . به همين دليل محاسبات ‪double‬‬
            ‫مثال:‬
      ‫وقت‌گيرتر از محاسبات ‪ float‬است.‬
‫;‪float x‬‬
‫شکل علمي مقادير مميز شناور -8‬
‫اعداد ممي ز شناور ب ه دو صورت در ورودي و‬
‫خروج ي نشان داده مي‌شون د : به شکل‬
             ‫»ساده« و به شکل »علمي«.‬
     ‫علمي -2‬             ‫ساده -1‬
 ‫401×765432.1‬          ‫76.54321‬
‫مشخ ص اس ت ک ه شک ل علمي براي‬
‫نشان دادن اعداد خيل ي کوچک و‬
‫همچني ن اعداد خيل ي بزرگ، کارآيي‬
                      ‫بيشتري دارد.‬
‫9 – نوع بولين ‪bool‬‬
‫نوع ‪ bool‬يک نوع ص حيح اس ت که‬
‫متغيرهاي اين نوع فقط مي‌توانند مقدار‬
‫‪ true‬يا ‪ false‬داشت ه باشند. ‪ true‬به‬
‫معني درست و ‪ false‬به معني نادرست‬
                               ‫است.‬
‫اما اين مقادير در اصل به صورت 1 و 0‬
‫درون رايان ه ذخيره مي‌شوند: 1 براي‬
               ‫‪ true‬و 0 براي ‪.false‬‬
‫01- نوع کاراکتري ‪char‬‬
‫يک کاراکتر يک حرف، رقم يا نشانه است که‬
 ‫يک شمارۀ منحص ر ب ه فرد دارد. به عبارت‬
 ‫عاميان ه، ه ر کليدي ک ه روي صفحه‌کليد خود‬
         ‫مي‌بينيد يک کاراکتر را نشان مي‌دهد.‬
‫مثل هر يک از حروف '‪ ' A‬تا '‪ 'Z‬و '‪ 'a‬تا '‪ 'z‬و‬
‫هر يک از اعداد '0' تا '9' و يا نشانه‌هاي '~' تا‬
    ‫'+' روي صفحه‌کليد را يک کاراکتر مي‌نامند.‬
‫براي تعري ف متغيري از نوع کاراکتر از‬
‫کلم ه کليدي ‪ char‬اس تفاده مي‌کنيم. يک‬
‫کاراکتر بايد درون دو علمت آپستروف )'(‬
‫محص ور شده باشد . پس '‪ ' A‬يک کاراکتر‬
‫است؛ همچنين'8 ' يک کاراکتر است اما 8‬
 ‫يک کاراکت ر نيس ت بلک ه ي ک عدد صحيح‬
                                ‫است .‬
               ‫مثال:‬
‫;'‪char c ='A‬‬
‫11 – نوع شمارشي ‪enum‬‬
‫يک نوع شمارشي يک نوع صحيح است که‬
‫توسط کاربر مشخص مي‌شود. نحو تعريف‬
      ‫يک نوع شمارشي به شکل زير است:‬
‫}‪enum typename{enumerator-list‬‬
‫که ‪ enum‬کلمه‌اي کليدي است، ‪typename‬‬
‫نام نوع جديد است که کاربر مشخص مي‌کند‬
‫و ‪ enumerator-list‬مجموعه مقاديري است‬
      ‫که اين نوع جديد مي‌تواند داشته باشد.‬
‫به عنوان مثال به تعريف زير دقت کنيد:‬

‫}‪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‬مقداردهي شده است.‬
‫مي‌توان مقادير صحيحودلخواهي را به ... هر‬
‫‪ 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‬و داد.... يک‬
                     ‫روزهاي و تخصيص خواهد‬
‫نحوۀ انتخاب نام‌شمارشگره ا آزاد اس ت ام ا بيشتر‬
‫برنامه‌نويسان از توافق زير در برنامه‌هايشان استفاده‬
                                          ‫مي‌کنند:‬
 ‫نام – براي نام ثاب ت ‌ها از حروف‬
    ‫1 شمارشگر بايد معتبر باشد:‬
              ‫بزرگ استفاده کنيد‬
                           ‫يعني:‬
 ‫2 کلمۀ کليدي نباشد. از نام نوع‬
               ‫1- – اولين حرف‬
 ‫2- شمارششروع نشودحرف بزرگ‬
            ‫.‬ ‫با عدد ي را با‬
                       ‫بنويسيد.‬
‫3- نشانه‌هاي رياض ي ني ز نداشته‬
‫3- نشانه‌هاي رياض ي ني ز نداشته‬
‫باشد. در هر جاي ديگر از حروف‬
                           ‫3 –‬
                   ‫کوچک استفاده کنيد.‬
‫آخسر ايسن کسه هم‌نام نبايد در محدودهعنوان‬
  ‫‌هاي‬ ‫شمارشگرهاي نام شمارشگرهسا نبايسد به‬
‫مشترک استفاده شوند. برايجاهاي ديگسسر برنامه‬
 ‫مثال تعريف‌هاي زير‬     ‫نام متغيرهاي ديگسسر در‬
                              ‫استفاده شود. مثل:‬
                              ‫را در نظر بگيريد:‬
‫‪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‬به کار رفته است .‬
‫انواع شمار شي براي تول يد کد » خود‬
‫مستند« به کار م ي ‌روند، يعني کدي که‬
   ‫به راحت ي درک شود و نياز به‬
       ‫توضيحات اضافي نداشته باشد.‬
 ‫مثل تعاري ف زي ر خودمس تند هستند‬
 ‫زيرا ب ه راحتي نام و نوع کاربرد و‬
    ‫محدودۀ مقاديرشان درک م ي ‌شود:‬
‫}‪enum Color{RED,GREEN,BLUE,BLACK,ORANGE‬‬
‫}‪enum Time{SECOND,MINUTE,HOUR‬‬
‫}‪enum Date{DAY,MONTH,YEAR‬‬
‫}‪enum Language{C,DELPHI,JAVA,PERL‬‬
‫21 – تبديل نوع، گسترش نوع‬

‫در محاس باتي ک ه چن د نوع متغير وجود‬
‫دارد، جواب هميش ه ب ه شکل متغيري‬
‫است که دقت بالتري دارد. يعني اگر يک‬
‫عدد ص حيح را ب ا ي ک عدد مميز شناور‬
‫جمعبراي ايسن پاسخ به يسک متغير از شناور‬
  ‫ببنديم، کسه مقدار شکل مميز نوع‬
  ‫مميسز شناور را بسه نوع صسحيح تبديسل کنيم‬
   ‫است به اين عمل گسترش نوع مي‌گويند.‬
  ‫از عبارت ‪ ()int‬اسستفاده مي‌کنيسم بسه اين‬
  ‫اسستفاده مي‌کنيسم بسه اين‬      ‫از عبارت‬
                 ‫عمل تبديل نوع گفته مي شود‬
.‫مثال‌هاي زير تبديل نوع و گسترش نوع را نشان مي‌دهند‬
                                         ‫مثال گسترش نوع‬
                                              :‫مثال تبديل نوع‬
     ‫برنام ۀزسسسير يک عدد صحيح را با يک عدد مميز شناور جمع‬
        :‫ تبديل مي‌کند‬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;
}
}
‫31 – برخي از خطاهاي برنامه‌نويسي‬

‫اي ن قبي ل خطاه ا ک ه اغلب خطاهاي نحوي‬
‫هستند ، توسط کامپايلر کشف مي‌شوند و به‬
           ‫راحتي مي‌توان آن‌ها را رفع نمود.‬
                           ‫»خطاي زمان اجرا«‬
‫کشف اينگونه خطاها به راحتي ممکن نيست‬
‫و کامپايل ر ني ز چيزي راج ع ب ه آن نمي‌داند.‬
‫برخي از خطاهاي زمان اجرا سبب مي‌شوند‬
‫که برنامه به طور کامل متوقف شود و از کار‬
‫41- سرريزي عددي‬

‫يک متغير هر قدر هم که گنجايش داشته‬
 ‫باش د، بالخره مقداري هس ت که از‬
‫گنجايش آن متغير بيشتر باشد. اگر سعي‬
‫کنيم در يک متغير مقداري قرار دهيم که‬
‫از گنجايش آن متغير فراتر باشد، متغير‬
 ‫»سرريز « مي‌شود،در چني ن حالتي‬
‫مي‌گويي م ک ه خطاي سرريزي رخ داده‬
‫ل 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‬‬                          ‫مي‌دهد.‬
‫}‬
‫51 – خطاي گرد کردن‬
‫خطاي‌ گرد كردن‌ نوع‌ ديگري‌ از خطاست‌ كه‌‬
  ‫اغلب‌ وقتي‌ رايانه‌ها روي‌ اعداد حقيقي‌‬
     ‫»هيچ‌گاه از متغي ر مميز شناور براي‬
 ‫محاس به‌ مي‌كنند، رخ‌ مي‌دهد. براي‌ مثال‌‬
    ‫مقايس ه برابري اس تفاده نکنيد« زيرا در‬
 ‫عدد 3/1ممكن ‌ است ‌ به ‌ صورت ‌ 333333.0‬
    ‫متغيرهاي مميز شناور خطاي گرد کردن‬
       ‫ذخيره‌ شود كه‌ دقيقا معادل‌ 3/1 نيست‌.‬
    ‫سبب مي‌شود ک ه پاس خ ب ا آ ن چه مورد‬
 ‫اين خطا از آن‌جا ناشي مي‌شود که اعدادي‬
                  ‫نظر شماست متفاوت باشد.‬
   ‫مث ل 3/1 مقدار دقي ق ندارن د و رايانه‬
   ‫نمي‌توان د اي ن مقدار را پيدا کن د، پس‬
 ‫نزديک‌تري ن عدد قاب ل محاس به را به جاي‬
‫حوز ۀمسسسستغيرها – 61‬
 ‫انتخاب نام‌هاي نامفهوم ي ا ناق ص سبب‬
    ‫اص طلح »بلوک« در ‪ ++C‬واژه‬
‫کاهش خوانايي برنامه و افزايش خطاهاي‬
   ‫مناس بي اس ت ک ه مي‌توان ب ه وسيلۀ‬
‫برنامه‌نويسي مي‌شود. استفاده از متغيرها‬
   ‫آن حوزۀ متغير را مشخص نمود. يک‬
 ‫در حوزۀ نامناس ب ه م سبب بروز‬
   ‫بلوک برنامه، قسمتي از برنامه است‬
  ‫خطاهاي ي مي‌شود. »حوزه متغير«‬
   ‫که درون يک جفت علمت کروشه } {‬
‫محدوده‌اي است که يک متغير خاص اجازه‬
                     ‫محدود شده است.‬
‫دارد در آن محدوده به کار رود يا فراخواني‬
                                   ‫شود.‬
‫حوزۀ يک متغير از محل اعلن آن شروع‬
 ‫مي‌شود و ت ا پايان همان بلوک ادامه‬
‫مي‌يابد. خارج از آ ن بلوک نمي‌توان به‬
‫متغير دسترسي داشت. همچنين قبل از‬
‫اين که متغير اعلن شود نمي‌توان آن را‬
                        ‫استفاده نمود.‬
 ‫مي‌تواني م در ي ک برنام ه، چن د متغير‬
 ‫متفاوت ب ا ي ک نام داشت ه باشي م به‬
‫شرطي که در حوزه‌هاي مشترک نباشند.‬
‫پايان جلسه دوم‬
‫جلسه سوم‬


‫»انتخاب«‬
‫:آنچه در اين جلسه مي خوانيد‬
                        ‫1- دستور‌ ‪if‬‬
                 ‫2- دستور ‪if..else‬‬
           ‫3- عملگرهاي مقايسه‌اي‬
          ‫4- بلوك‌هاي دستورالعمل‬
                ‫5- شرط‌هاي مركب‬
‫›››‬
                 ‫6- ارزيابي ميانبري‬
‫7- عبارات منطقي‬
‫8 - دستور‌هاي انتخاب تودرتو‬
         ‫9- ساختار ‪else if‬‬
   ‫01- دستورالعمل ‪switch‬‬
  ‫11- عملگر عبارت شرطي‬
          ‫21- كلمات كليدي‬
‫هدف‌هاي رفتاري:‬
                                       ‫هدف کلي:‬
      ‫انتظار مي‌رود پس از پايان اين جلسه بتوانيد:‬
‫شناخست تور ‪ if‬شناخت ه و ل‌هاي انتخاب و شيو ۀ‬
‫- نح و دس انواع رادستورالعم آ ن را در برنامه‌ ها به کار‬
                                                     ‫ببريد.‬
                                      ‫به‌کارگيري هر يک‬
‫- نحو دستور ‪ if..else‬را شناخته و آن را در برنامه ‌ها به‬
                                                 ‫کار ببريد.‬
‫- از ساختار ‪ else..if‬در تصميم‌گيري‌هاي پيچيده استفاده‬
                                                      ‫کنيد.‬
‫- نحو دستور ‪ switch‬را شناخته و خطاي »تلۀ سقوط«‬
                                          ‫را تشخيص دهيد.‬
                       ‫- بلوک دستورالعمل را تعريف کنيد.‬
‫- عملگرهاي مقايس ه‌اي و عملگ ر عبارت شرطي را در‬
   ‫<<<‬                       ‫دستورات شرطي به کار ببريد.‬
‫مقدمه‬

‫ه مۀ برنام ه ‌ها يي که در دو جلسه اول‬
   ‫بيان ش د، ب ه شک ل ترتيبي ‌اجرا‬
 ‫م ي ‌شون د، يعن ي دس تورات برنام ه به‬
‫ترتيب از بال به پايين و هر کدام دقيقا‬
 ‫يک بار اجرا م ي ‌شوند. در اي ن ‌ جلسه ‌‬
    ‫نشان داده م ي ‌شود چگونه از‬
    ‫دس تورالعم ل ‌هاي انتخاب 1 جهت‬
 ‫انعطا ف ‌پذيري بيشت ر برنام ه استفاده‬
‫بسه شکل‬            ‫دسستور ‪ if‬دستور ‪if‬‬
          ‫مي‌شود برنامسه‬‫موجسب‬
    ‫‌‬
  ‫است‌:‬   ‫آن گون‌سسسس ۀ ‌ زير‬
                        ‫شرطي اجرا شود. نحو‬
                        ‫به‬      ‫شرطي اجرا شود نحو‬
‫;‪If (condition) statement‬‬
‫‪ Condition‬که شرط ناميده م ي ‌شود يك‬
‫عبارت صحيح ا ست ) عبار تي که با يک‬
  ‫مقدار صحيح برآورد م ي ‌شود( و‬
‫‪ ‌ statement‬م ي ‌توان د ه ر فرمان قابل‬
 ‫اجرا باشد. ‪ Statement‬وقتي اجرا‬
‫خواه د ش د ك ه ‪ ‌ condition‬مقدار غير‬
‫صفر داش ته باشد. د قت كن يد كه شرط‬
‫2- دستور ‪if..else‬‬
‫دسستور ‪ if..else‬موجسب مي‌شود بسسته بسه اين‬
  ‫که شرط درسست باشسد يسا خيسر، يكي از دو‬
‫دستورالعمل فرعي اجرا گردد. نحو اين دستور‬
‫‪ condition‬است: شرط مسساله اسست کسه يك‬
                           ‫به شکل زير همان‬
‫;‬  ‫مي‌باشد و 1‪statement‬‬
 ‫عبارت صسسحيح 1‪if(condition )statement‬و‬
‫2‪ statement‬فرمان‌هاي قابل اجرا هستند. اگر‬
‫2‪;else statement‬‬
‫مقدار شرط، غيسر صسفر باشد، 1‪statement‬‬
 ‫اجرا خواهسد شسد وگرنه 2‪ statement‬اجرا‬
                                    ‫مي‌شود.‬
‫يک آزمون قابليت تقسيم‬                  ‫مثال‬


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;
}
‫هاي مقايسه‌اي‬‫4- عملگر‬
 ‫در ‪ ++C‬شش عملگر مقايسه‌اي وجود دارد: >‬
‫و < و >= و <= و == و != . هر يک‬
‫از ايسسن شسسش عملگسسر بسسه شکسسل زيسسر به کار‬
                                    ‫مي‌روند:‬
‫‪‌ x‬کوچکتر از ‪ y‬است // ‪x < y‬‬
‫‪ x‬بزرگتر از ‪ y‬است // ‪x > y‬‬
‫‪‌ x‬کوچکتر يا مساوي ‪ y‬است // ‪x <= y‬‬
‫‪ x‬بزرگ‌تر يا مساوي ‪ y‬است // ‪x >= y‬‬
‫‪ x‬مساوي با ‪ y‬است // ‪x == y‬‬
‫اين‌ ها مي‌توانن د براي مقايسۀ مقدار‬
‫عبارات با هر نوع ترتيبي استفاده شوند.‬
‫عبارت حاصل به عنوان يك ‌ شرط تفسير‬
‫مي‌شود. مقدار اين شرط صفر است اگر‬
‫شرط نادرست باشد و غير صفر است اگر‬
 ‫شرط درس ت باشد. براي نمونه، عبارت‬
‫7*8> 6*5 برابر با صفر ارزيابي مي‌شود،‬
‫به اين معني كه اين شرط نادرست است.‬
‫متغير عدد صحيح -2‬
‫‪ ++C‬شش نوع متغي ر عدد صحيح دارد‬
‫تفاوت اي ن ش ش نوع مربوط به ميزان‬
‫حافظ ۀ مورد استفاده و محدودۀ مقاديري‬
    ‫است که هر کدام مي‌توانند داشته باشند.‬
‫اين ميزان حافظۀ مورد استفاده و محدودۀ‬
‫مقادي ر، بس تگي زيادي ب ه سخت‌افزار و‬
‫همچني ن س يستم عام ل دارد. يعن ي ممکن‬
‫اس ت روي ي ک رايان ه، نوع ‪ int‬دو بايت از‬
‫حافظ ه را اشغال کن د در حال ي که روي‬
‫رايانه‌اي از نوع ديگ ر نوع ‪ int‬به چهار بايت‬
‫ي با‬ ‫دقت کنيد كه در ++ ‪ C‬عملگر جايگزين‬
‫ي‬ ‫عملگر برابري فرق دارد. عملگر جايگزين‬
‫يک مساوي ي " = " است ي عملگر‬
          ‫ول‬             ‫تک‬
         ‫برابري، دو مساوي " = = " است.‬
‫مثل دستور 33;= ‪ x‬مقدار 33 را در ‪ x‬قرار‬
‫ي ي‌کند‬
     ‫ي‌دهد ي دستور 33 ;==‪ x‬بررس م‬‫ول‬      ‫م‬
‫که آيا مقدار ‪ x‬با 33 برابر است يا خير. درک‬
               ‫اين تفاوت هميت زيادي دارد.‬
                               ‫ا‬
‫ل‬‫4- بلو هاي دستورالعم‬
                       ‫ك‌‬
  ‫ي ك بلوك دستورالعمل زنجيره ‌اي از‬
‫دستورالعم هاست كه درون براكت }{ محصور‬
                              ‫ل‌‬
                             ‫شده، مانند :‬
‫} ‪;int temp=x‬‬
‫‪;x = y‬‬
‫‪;y = temp‬‬
‫{‬
‫در برنامه‌هاي ++‪ C‬يک بلوک دستورالعمل‬
           ‫مانند يک دستورالعمل تکي است.‬
‫‪()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‬‬
‫{‬
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; }
‫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‬‬
‫!‬
  ‫سسه عملگسر منطقي && )‪ (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‬‬
                                          ‫درست است.‬
‫6- ارزيابي ميانبري‬
 ‫عملگرهاي && و || به دو عملوند نياز‬
‫دارندت ا مقايسه را روي آن دو انجام دهند.‬
 ‫جداول درس تي نشان مي‌ده د که ‪p&&q‬‬
‫شرط است مرك ب نادرست&& و. در اين‬
      ‫نادرست ‌هاي اگر ‪ p‬كه از باشد ||‬
‫اس تفادهنيازي‌كنن د عملوند دوم راشود.‬
       ‫حالت ديگر مي نيست که ‪ q‬بررسي‬
‫همچني ن ‪p||q‬ي‌كنن دت اس تناگكه ‪ p‬درست‬
      ‫بررس ي نم درس مگ ر اي ر لزم‬
‫باشددر اين حالت هم نيازي نيست که ‪q‬‬
                                ‫باشد و .‬
‫بررسي شود. در هر دو حالت گفته شده، با‬
‫ارزيابي عملوند اول به سرعت نتيجه معلوم‬
‫مي‌شود. اين كار ارزيا بي ميانبري ناميده‬
‫7- عبارات منطقي‬
 ‫ي ك عبارت منطق ي شرط ي اس ت ك ه يا‬
 ‫درس ت اس ت ي ا نادرس ت. قبل ديدي م که‬
 ‫عبارات منطق ي ب ا مقادي ر ص حيح ارزيابي‬
 ‫مي‌شوند. مقدار صفر به معناي نادرست و‬
‫هر مقدار غير صفر به معناي درست است .‬
  ‫به عبارات منطق ي »عبارات بول ي « هم‬
                                ‫مي‌گويند.‬
‫چون همس ۀمسسسقاديسر صسحيح ناصسفر به معناي‬
‫درست تفسير مي‌شوند، عبارات منطقي اغلب‬
      ‫تغيير قيافه مي‌دهند. براي مثال دستور‬

‫;"‪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‬‬
‫;3‪{ int n1, n2, n‬‬
  ‫;" :‪cout << "Enter three integers‬‬
  ‫;3‪cin >> n1 >> n2 >> n‬‬
    ‫;1‪if (n1 >= n2 >= n3) cout << "max = " << n‬‬
‫}‬

‫منشأ خطا در برنامۀ بال اين اصل است كه‬
    ‫عبارات منطقي مقدارهاي عددي دارند.‬
‫دستور‌هاي انتخاب تودرتو -8‬

 ‫دس تورهاي انتخاب مي‌توانن د مانند‬
‫دس تورالعملهاي مرك ب به كار روند .‬
                         ‫‌‬
 ‫به اي ن ص ورت ک ه ي ك دستور انتخاب‬
 ‫مي‌توان د درون دس تور انتخاب ديگر‬
‫اس تفاده شود . به اين روش، جملت‬
                    ‫تودرتو مي‌گويند.‬
‫مثال 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‬اول قرار گرفته است‌.‬
‫9- ساختار ‪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 ‫01- دستورالعمل‬
else ‫ مي‌تواند به جاي ساختار‬switch ‫دستور‬
 ‫ براي بررسي مجموعه‌اي از حالت‌هاي‬if
‫متناوب و موازي بسسه كار رود. نحسسو دستور‬
                :‫ به شکل زير است‬switch
switch (expression)
{ case constant1: statementlist1;
  case constant2: statementlist2;
  case constant3: statementlist3;
     :
     :
‫اين دستور ابتدا ‪ expression‬را برآورد‬
‫مي‌كند و سپس ميان يکت‌هاي ‪ case‬به دنبال‬
    ‫عبارت اختياري‬   ‫عبارت ‪ default‬ثاب‬
                       ‫مقدار . يعنسي مي . اگر‬
‫اسست آن مي‌گردد‌توانيسم مقدار مربوطه از ميان‬
   ‫در دستور ‪switch‬‬
 ‫ثابت‌هاي فهرسسست.‌شده يافسست شسسد، دستور‬
   ‫آن را قيسد نکنيم ‪ expression‬بايسد به‬
 ‫‪ statementlist‬مقابسسل ارزيابي‪ case‬اجرا‬
   ‫شود و‬       ‫شکسل يسك نوع صسحيح آن‬
‫مي‌شود. اگسر مقدار مورد نظسر ميان ‪case‬ها‬
               ‫‌‬
    ‫‪constant‬ها بايسسد ثابتهاي صحيح‬
‫يافست نشسد و عبارت ‪ default‬وجود داشت،‬ ‫باشند.‬
 ‫دسسستور ‪ statementlist‬مقابسسل آن اجرا‬
                                      ‫مي‌شود.‬
‫لزم اسسست در انتهاي هسسر ‪ case‬دستور‌‬
‫‪ break‬قرار بگيرد. بدون ايسسن دستور،‬
‫اجراي برنامسسه پسسس از ايسسن كه ‪case‬‬
‫مربوطسه را اجرا کرد از دستور ‪switch‬‬
 ‫خارج نمي‌شود، بلکسسه هم ۀ ‪case‬هاي‬
‫زيريسن را هسم خسط بسه خسط مي‌پيمايد و‬
‫دسستورات مقابسل آن‌سها را اجرا مي‌کند. به‬
          ‫اين اتفاق، تلۀ سقوط مي‌گويند.‬
‫;‪case constant1: statementlist1;break‬‬
‫11- عملگر عبارت شرطي‬
   ‫در اي ن عملگر ابتدا شرط ‪condition‬‬
   ‫عملگر عبارت شرطي يکي از درست‬
‫بررسي مي‌شود. اگر اين شرط امکاناتي‬
 ‫بود، حاص لسستک ل عبارتدر کدنويسي‬
     ‫برابر با‬    ‫اختصسسار‬  ‫اسسست کسسه جه‬
 ‫تدارک ديده شدهمي‌شود وسسناگر شرط را‬
       ‫1‪ expression‬اسسست. اي عملگر‬
‫منادرست بود، حاصل کل ‪ if..else‬به کار‬
   ‫ي‌توانيم به جاي دستور عبارت برابر با‬
                ‫2‪ expression‬مي‌شود. ‌‬
‫ببريم. اين عملگر از نشانههاي ? و : به‬
                ‫شکل زير استفاده مي‌كند:‬
‫;2‪condition ? expression1 : expression‬‬
‫مثل در دستور انتساب زير:‬
‫;) ‪min = ( x<y ? x : y‬‬
‫اگر ‪ x<y‬باشد مقدار ‪ x‬را درون ‪min‬‬
‫قرار مي‌دهد و اگر ‪ x<y‬نباشد مقدار‬
‫‪ y‬را درون ‪ min‬قرار مي‌دهد. يعني‬
 ‫به همي ن س ادگي و اختصار، مقدار‬
‫کمين ۀ ‪ x‬و ‪ y‬درون متغير ‪ min‬قرار‬
                          ‫مي‌گيرد.‬
‫21- كلمات كليدي ‌‬
‫اکنون با کلماتي مثل ‪ if‬و ‪ case‬و ‪float‬‬
‫آشنا شديم. دانستيم که اين کلمات براي‬
  ‫يك‌ كلممۀ كليدي در يك زبان‬
‫برنامه‌نويس ي كلم دارند. از اين کلمات‬
  ‫ه‌اي اس ت كه از‬   ‫‪ ++C‬معاني خاصي‬
‫نمي‌توان به عنوان نام يک متغير يا هر‬
  ‫قب ل تعريف شده و براي هدف‬
‫منظور ديگري استفاده کرد و فقط بايد‬
        ‫براي انجام منظور شده است.‬
 ‫همان کار خاص استفاده‬
                           ‫مشخصي‬
‫شوند. مثل کلم ۀ ‪ float‬فق ط بايد براي‬
    ‫معرفي يک نوع اعشاري به کار رود.‬
:‫ است‬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
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
typedef   typoid   typename

 using    union    unsigned

virtual   void      volatile

wchar_t   while       xor

xor_eq
‫دو نوع كلمۀ كليدي وجود دارد:‬
        ‫1- كلم ه ‌هاي رزرو شد ه‌‌‬
       ‫2- شناس ه ‌هاي استاندارد.‬
‫يك كلم ۀ رزرو شده كلمه‌اي اس ت ک ه يک‬
‫دس تور خاص از آن زبان را نشان مي‌دهد.‬
 ‫كلمۀ كليدي ‪ if‬و ‪ else‬كلمات رزرو شده‬
‫يك شناسۀ استاندارد كلمه‌اي است كه يك نوع‬
                                  ‫هستند.‬
 ‫دادۀ اس تاندارد از زبان را مشخص مي‌كند.‬
  ‫كلمات كليدي ‪ bool‬و ‪ int‬شناسه‌هاي‬
                          ‫استاندارد هستند‬
‫پايان جلسه سوم‬
‫جلسه چهارم‬


‫»تكرار«‬
‫:آنچه در اين جلسه مي خوانيد‬
                  ‫1- دستور ‪while‬‬
         ‫2- خاتمه دادن به يك حلقه‬
              ‫3- دستور ‪do..while‬‬
                    ‫4- دستور ‪for‬‬
                 ‫5- دستور ‪break‬‬
              ‫6- دستور ‪continue‬‬
                    ‫7- دستور ‪goto‬‬
         ‫8- توليد اعداد شبه تصادفي‬
‫هدف‌هاي رفتاري:‬
                                             ‫هدف کلي:‬
   ‫انتظار مي‌رود پس از مطالعۀ اين جلسه بتوانيد:‬
‫- نحو دستورانواع را شناخته و از آن براي ايجاد نحو استفاده‬
‫شناخت ‪ while‬ساختارهاي تکرار و حلقه آن‌ها‬
                         ‫کنيد.تبديل آن‌ها به يکديگر.‬
                                                 ‫و‬
‫- نحو دستور ‪ do..while‬را شناخته و تفاوت آن با‬
                         ‫دستور ‪ while‬را بيان کنيد.‬
‫- نح و دس تور ‪ for‬را شناخت ه و ب ا اس تفاده از آن‬
                        ‫حلقه‌هاي گوناگون بسازيد.‬
         ‫- حلقه‌هاي فوق را به يکديگر تبديل کنيد.‬
‫- علت استفاده از »دستورات پرش« را ذکر کرده‬
‫و تفاوت سه دستور ‪ break‬و ‪ continue‬و ‪ goto‬را‬
                                          ‫بيان کنيد.‬
‫مقدمه‬
‫تكرار، اجراي پي در پي يك دستور يا بلوكي‬
 ‫از دس تورالعمل‌ها در ي ك برنام ه اس ت. با‬
‫اس تفاده از تکرار مي‌تواني م کنترل برنامه را‬
‫مجبور کنيم تا به خطوط قبلي برگردد و آن‌ها‬
                         ‫را دوباره اجرا نمايد.‬
‫‪ ++C‬داراي س ه دس تور تكرار اس ت: دستور‬
‫‪ ،while‬دس تور ‪ do_while‬و دستور ‪.for‬‬
 ‫دس تور‌هاي تکرار ب ه عل ت طبيعت‬
‫1- دستور ‪while‬‬
        ‫نحو دستور ‪ while‬به شکل زير است:‬
‫;‪while (condition) statement‬‬
‫به جاي ‪ ، condition‬يك شرط قرار مي‌گيرد و به‬
‫جاي ‪ statement‬دستوري که بايد تکرار شود قرار‬
‫مي‌گيرد. اگ ر مقدار شرط، ص فر)يعن ي نادرست(‬
‫باشد، ‪ statement‬ناديده گرفته مي‌شود و برنامه‬
 ‫به اولي ن دس تور بع د از ‪ while‬پرش مي‌كند. اگر‬
  ‫مقدار شرط ناص فر)يعني‌ درس ت( باشد،‬
‫‪ statement‬اجرا ‌شده و دوباره مقدار شرط‬
‫بررسي مي‌شود. اين تکرار آن قدر ادامه مي‌يابد‬
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;
}
‫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‬‬
‫}‬
‫* مثال‌ 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‬‬
‫بسرسنساسم س ۀزسسسسيسسرس، هسسمسس ۀاسسسسعسدساسدس فسسيبوسنساسچسسيسس رساس تسساس يسك س مسحسدسوسدس ۀ‬
‫مسشسسخسسصسس کسسهس اسزس وسرسوسدسيس دسرسيساسفسسستس مسيسس‌سسشوسدس، مسحساسسسسبهس وس‬
                                                                     ‫چسساسپس مسيسس‌سسكندس:‬
‫)(‪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‬
‫مثال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‬‬
‫}‬                                      ‫قابليت انعطاف بيشتري‬
                                                      ‫دارد.‬
‫متوقف کردن يك حلقۀ نامتناهي :‬

‫با فشردن کليدهاي ‪ Ctrl+C‬سيستم عامل‬
‫يک برنام ه را ب ه اجبار خاتم ه مي‌دهد. كليد‬
‫‪ Ctrl‬را پايي ن نگ ه داشت ه و كليد ‪ C‬روي‬
‫صفحه‌كليد خود را فشار دهيد تا برنامۀ فعلي‬
                             ‫خاتمه پيدا کند.‬
‫3- دستور ‪do..while‬‬
‫س اختار ‪ do..while‬روش ديگري براي س اختن حلقه‬
                ‫است. نحو آن به صورت زير است:‬
‫;)‪do statement while (condition‬‬

‫به جاي دستور ابتدا ‪ ‌ statement‬را مي‌گيرد و‬
     ‫اي ن ‪ condition‬يك شرط قرار اجرا‬
 ‫به مي‌كن ‪‌ statement‬شرطتور ي ا بلوکيراقرار‬
        ‫جاي د و سپس دس ‪condition‬‬
     ‫ميبررس که قرار استر شرط درست بود‬
           ‫‌گيرد ي مي‌كند. اگ تکرار شود.‬
    ‫حلقه دوباره تکرار مي‌شود وگرنه حلقه‬
                           ‫پايان مييابد.‬
                                ‫‌‬
‫دستور‌ ‪ do..while‬مانند دستور ‪while‬‬
‫است. با اين فرق كه شرط کنترل حلقه‬
   ‫به نتيج ۀ ديگ که اي ن اس تحلقه حلقۀ‬
‫ارزيابي‬  ‫جاي اين ر در ابتداي ك ه‬
   ‫‪ do..while‬هميش ه بدون توج ه به‬
‫گردد، در انتهاي حلقه ارزيابي ميشود.‬
     ‫‌‬
   ‫مقدار شرط كنترل، لاقل يك بار اجرا‬
‫مي‌شود متغيرحلق ۀ ‪ while‬مي‌تواند كه‬
    ‫يعني هر ام ا كنترلي به جاي اين‬
 ‫قب اصل اجرا نشود. حلق ه تنظيم شود،‬
                        ‫ل از شروع‬
        ‫مي‌تواند درون آن تنظيم گردد.‬
‫مثال 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;
}
‫* مثال 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‬
‌ ،‫برنام ۀزسسسيرم‌سسسس ۀ ‌ اعداد فاكتوريال را که از عدد داده شده کوچک‌ترند‬
                                                                ‫ه‬
                                                                   ‌
                                                             :‫چاپ ميکند‬
()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
{
‫4 - دستور ‪for‬‬
       ‫نحو دستورالعمل ‪ for‬به صورت زير است:‬
‫;‪for (initialization; condition; update) statement‬‬
 ‫سه قسمت داخل پرانتز، حلقه را کنترل مي‌کنند.‬

   ‫عبارت ‪ initialization‬تعيي ن اعلنمتغير‬
     ‫عبارت ‪update‬براي براي بردن يا‬
  ‫اي ن ک ه آيا‬ ‫عبارت ‪ condition‬براي پيش‌‬
 ‫کنترل حلق ه اولي هکار يامي‌رود کنترلم عبارت‬
    ‫مقداردهي ب ه به متغي ر . اينحلقه‬
 ‫حلقه بايد تکرار شود خير به کار ي‌رود.‬
     ‫پس تفاده مي‌شود.اي ن عبارت اولين‬
                             ‫اس از اجراي‬
     ‫يعني اين عبارت، ‪ statement‬ارزيابي‬
 ‫شرط کنترل حلقه است.‬
    ‫مي‌گردد.است که ارزيابي مي‌شود پيش‬‫عبارتي‬
   ‫اگ ر اي ن شرط درس ت باش د دستور‬
          ‫از اين که نوبت به تکرارها برسد.‬
                  ‫‪ statement‬اجرا مي‌شود.‬
‫بنابرايسن زنجير ۀوسسسسقايعسسي که تکرار را ايجاد‬
                             ‫مي‌کنند عبارتند از:‬

        ‫1 – ارزيابي عبارت ‪initialization‬‬
‫2 – بررسي شرط ‪ . condition‬اگر نادرست‬
                     ‫باشد، حلقه خاتمه مي‌يابد.‬
 ‫3عبارت‌هاي ‪ initialization statement‬و‬
                                     ‫– اجراي‬
 ‫4 – ارزيابي عبارت و ‪update‬عبارت‌هاي‬
                ‫‪update condition‬‬
 ‫5 – تکرار گام‌هاي 2 تا مي‌توانيسم آن‌ها را در‬
                      ‫اختياري هسستند. يعنسي 4‬
                               ‫حلقه ذکر نکنيم.‬
‫مثال 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‬براي يك متغير ديگر استفاده نمود.‬
‫مثال 421- يك حلق ۀ ‪ for‬نزولي‬
 ‫برنام ۀزسسسير‌ ده عدد صحيح مثبت را به ترتيب نزولي چاپ مي‌كند:‬
‫)(‪int main‬‬
‫)--‪{ for (int i=10; i > 0; i‬‬
    ‫;‪cout << " " << i‬‬
‫}‬
‫مثال 51-4 بيشتر از يك متغير كنترل در حلق ۀ ‪for‬‬
‫حلق ۀ ‪ for‬در برنام ۀزسسسير دو متغير كنترل دارد:‬


‫)(‪int main‬‬
‫)++‪{ for (int m=95, n=11, m%n > 0; m -= 3, n‬‬
    ‫;‪cout << m << "%" << n << " = " << m%n << endl‬‬
‫}‬
‫ تودرتو‬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;
  }
}
‫5- دستور ‪break‬‬
         ‫وقت ي دستور ‪ break‬درون‬
‫دستور ‪ break‬يک دستور آشناست. قبل از‬
         ‫آن حلقخاتمه تودرتبهو استفاده‬
‫دستور ‪ switch‬و‬           ‫دادن‬  ‫براي ه‌هاي‬
        ‫همچنين حلقه ط روي حلق و‌اي که‬
 ‫‪do..while‬‬    ‫شود، فق ‌هاي ‪ while‬ه‬
        ‫اس مس تقيماهدرون از ناي قرار گرفته‬
 ‫ن دستور براي‬           ‫تفاده کرد ‌ايم. آ‬
                          ‫خاتم تاثير مي‌گذارد.‬
 ‫ه دادن ب ه حلق ۀ ‪ for‬ني ز مي‌توانيم‬
        ‫حلقه‌هاي بيرون ي بدون هيچ‬
                                ‫استفاده کنيم.‬
                 ‫تغييري ادامه مي‌يابند.‬
 ‫دستور ‪ break‬در هر جايي درون حلقه‬
 ‫مي‌تواند جا بگيرد و در همان جا حلقه را‬
                            ‫خاتمه دهد.‬
‫6- دستور ‪continue‬‬
 ‫دس تور ‪ break‬بقي ۀ دستورهاي درون‬
‫بلوك حلق ه را ناديده گرفت ه و ب ه اولين‬
‫‌‌دستور بيرون حلقه پرش مي‌كند. دستور‬
             ‫‪ continue‬اين دستور، ادامۀ‬
‫نيز شبيه همين است اما به‬
            ‫جاي اين که حلقهفعلي را لغو‬
‫را خاتمه دهد، اجرا را‬   ‫چرخۀ‬
            ‫کرده و اجراي دور‬
      ‫به تكرار بعدي حلقه منتقل مي‌كند.‬
           ‫بعدي حلقه را آغاز‬
                 ‫ميکند.‬
                     ‫‌‬
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;
}
‫7- دستور ‪goto‬‬
‫دستورهاي‬  ‫دسستور ‪ goto‬نوع ديگري از‬
‫توسسسط يك‬  ‫پرش اسسست. مقصسسد ايسسن پرش‬
                    ‫برچسب معين مي‌شود.‬
‫برچ سب شناسسه‌اي اسست كسه جلوي آن‬
‫علمست كولسن) : ( مي‌آيسد و جلوي يك دستور‬
                       ‫ديگر قرار مي‌گيرد.‬
‫يک مزيت دستور ‪ goto‬اين است که با‬
‫استفاده از آن مي‌توان از همۀ حلقه‌هاي‬
‫تودرتو خارج شد و به مکان دلخواهي در‬
‫ براي خارج شدن از‬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;
  }
}
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++

Contenu connexe

Similaire à C++

Software Fault Avoidance in Implementation
Software Fault Avoidance in ImplementationSoftware Fault Avoidance in Implementation
Software Fault Avoidance in ImplementationMorteza Zakeri
 
1. preface, hello world
1. preface, hello world1. preface, hello world
1. preface, hello worldVahid Heidari
 
پاورپوینت زبان برنامه نویسی پایتون.pptx
پاورپوینت زبان برنامه نویسی پایتون.pptxپاورپوینت زبان برنامه نویسی پایتون.pptx
پاورپوینت زبان برنامه نویسی پایتون.pptxpadparsa1388
 
Clojure se-radio.net Interview with Rich Hickey (ترجمه مصاحبه رادیو مهندسی نر...
Clojure se-radio.net Interview with Rich Hickey (ترجمه مصاحبه رادیو مهندسی نر...Clojure se-radio.net Interview with Rich Hickey (ترجمه مصاحبه رادیو مهندسی نر...
Clojure se-radio.net Interview with Rich Hickey (ترجمه مصاحبه رادیو مهندسی نر...Jahan Zinedine
 
مفاهیم اولیه داکر
مفاهیم اولیه داکرمفاهیم اولیه داکر
مفاهیم اولیه داکرAli Rasoulian
 
About Programming - persion.pptx
About Programming - persion.pptxAbout Programming - persion.pptx
About Programming - persion.pptxHossein Darvishi
 
آشنایی با زبان جاوا - مقدماتی اندروید
آشنایی با زبان جاوا - مقدماتی اندرویدآشنایی با زبان جاوا - مقدماتی اندروید
آشنایی با زبان جاوا - مقدماتی اندرویدSadegh Ghanbari Shohani
 
How to be a better Developer & Programmer
How to be a better Developer & ProgrammerHow to be a better Developer & Programmer
How to be a better Developer & ProgrammerReza Razavi
 

Similaire à C++ (20)

مقدمه ای بر F#
مقدمه ای بر F#مقدمه ای بر F#
مقدمه ای بر F#
 
MIPS and QtSpim
MIPS and QtSpimMIPS and QtSpim
MIPS and QtSpim
 
Software Fault Avoidance in Implementation
Software Fault Avoidance in ImplementationSoftware Fault Avoidance in Implementation
Software Fault Avoidance in Implementation
 
1. preface, hello world
1. preface, hello world1. preface, hello world
1. preface, hello world
 
Amjadi - Ebook 5 - Function - v1
Amjadi - Ebook 5 - Function - v1Amjadi - Ebook 5 - Function - v1
Amjadi - Ebook 5 - Function - v1
 
Lecture2
Lecture2Lecture2
Lecture2
 
lunch box plugin
 lunch box plugin  lunch box plugin
lunch box plugin
 
پاورپوینت زبان برنامه نویسی پایتون.pptx
پاورپوینت زبان برنامه نویسی پایتون.pptxپاورپوینت زبان برنامه نویسی پایتون.pptx
پاورپوینت زبان برنامه نویسی پایتون.pptx
 
RESUME
RESUMERESUME
RESUME
 
مدل رانده
مدل راندهمدل رانده
مدل رانده
 
Clojure se-radio.net Interview with Rich Hickey (ترجمه مصاحبه رادیو مهندسی نر...
Clojure se-radio.net Interview with Rich Hickey (ترجمه مصاحبه رادیو مهندسی نر...Clojure se-radio.net Interview with Rich Hickey (ترجمه مصاحبه رادیو مهندسی نر...
Clojure se-radio.net Interview with Rich Hickey (ترجمه مصاحبه رادیو مهندسی نر...
 
پیش مقدمه آموزش نرم افزار متلب
پیش مقدمه آموزش نرم افزار متلبپیش مقدمه آموزش نرم افزار متلب
پیش مقدمه آموزش نرم افزار متلب
 
مفاهیم اولیه داکر
مفاهیم اولیه داکرمفاهیم اولیه داکر
مفاهیم اولیه داکر
 
About Programming - persion.pptx
About Programming - persion.pptxAbout Programming - persion.pptx
About Programming - persion.pptx
 
آشنایی با زبان جاوا - مقدماتی اندروید
آشنایی با زبان جاوا - مقدماتی اندرویدآشنایی با زبان جاوا - مقدماتی اندروید
آشنایی با زبان جاوا - مقدماتی اندروید
 
Kotlin
KotlinKotlin
Kotlin
 
How to be a better Developer & Programmer
How to be a better Developer & ProgrammerHow to be a better Developer & Programmer
How to be a better Developer & Programmer
 
News
NewsNews
News
 
RESUME
RESUMERESUME
RESUME
 
RESUME
RESUMERESUME
RESUME
 

C++

  • 2. ‫دانشگاه پيام‬ ‫نور‬ ‫دانشكده فناوري اطلعات‬
  • 3. ‫برنامه سازي پيشرفته‬ ‫تعداد واحد: 3‬ ‫تهيه كننده:‬ ‫دكتر احمد فراهي‬
  • 4. ‫:مقدمه‬ ‫زبان ‪ C‬يک زبان همه منظوره‬ ‫است. دستورالعمل‌هاي اين زبان‬ ‫بسيار شبيه عبارات جبري و نحو‬ ‫آن شبيه جملت انگليسي مي باشد.‬ ‫اين امر سبب مي‌شود که ‪ C‬يک‬ ‫زبان سطح بال باشد که‬
  • 5. ‫++ ‪ C‬که از نسسسل ‪ C‬است، تمام‬ ‫ويژگي‌هاي ‪ C‬را بسه ارث برده اسست. اما‬ ‫برتري فني ديگري هم دارد: ‪ ++C‬اکنون‬ ‫»شي‌گرا« اسست. مي‌توان بسا استفاده از‬ ‫ايسسن خاصسسيت، برنامه‌هاي شي‌گرا توليد‬ ‫نمود. برنامه‌هاي شي‌گرا منظم و‬ ‫ساخت‌يافته‌اند، قابسل روزآمسد کردن‌انسد، به‬ ‫سهولت تغيير و بهبود مي‌يابند و قابليت‬ ‫اطمينان و پايداري بيشتري دارند.‬
  • 6. ‫:اهم مطالب اين كتاب‬ ‫جلسه اول: »مقدمات برنامه‌نويسي با ‪«++C‬‬ ‫جلسه دوم: »انواع اصلي«‬ ‫«جلسه سوم: »انتخاب‬ ‫جلسه چهارم: ››تكرار«‬ ‫«جلسه پنجم: »توابع‬ ‫جلسه‌ ششم: » آرايه‌ها«‬
  • 7. ‫‌‬ ‫‌‬ ‫«جلسه هفتم: »اشارهگرها و ارجاعها‬ ‫‌‬ ‫‌ ‌‬ ‫جلسه‌ هشتم: »رشتههاي كاراكتري و فايلها در ++‪C‬استاندارد«‬ ‫جلسه نهم: »شيئ‌گرايي«‬ ‫«جلسه‌ دهم: »سربارگذاري عملگرها‬ ‫جلسه يازدهم: »تركيب و وراثت«‬
  • 9. ‫:آنچه در اين جلسه مي خوانيد‬ ‫1- چرا ‪ ++C‬؟‬ ‫2- تاريخچ ۀ ‪++C‬‬ ‫3- آماده‌سازي مقدمات‬ ‫4- شروع کار با ‪++C‬‬ ‫5- عملگر خروجي‬ ‫6- ليترال‌ها و کاراکترها‬ ‫7- متغيرها و تعريف آن‌ها‬ ‫8- مقداردهي اوليه به متغيرها‬ ‫9- ثابت‌ها‬
  • 10. ‫هدف کلي:‬ ‫آشنايي با تاريخچه و مزاياي زبان برنامه‌نويسي‬ ‫‪ ++C‬و بيان مفاهيم بنيادي شي‌گرايي و عناصر‬ ‫مهم برنامه‌هاي ‪++C‬‬
  • 11. ‫:هدف‌هاي رفتاري‬ ‫انتظار مي‌رود پس از پايان اين جلسه بتوانيد:‬ ‫- مزاياي زبان ‪ ++C‬را بر زبان‌هاي مشاب ه ذکر‬ ‫کرده و تفاوت آن را با زبان ‪ C‬بيان کنيد.‬ ‫- شرح مختص ري از رون د پيشرفت زبان‌هاي‬ ‫برنامه‌نويسي را بيان کرده و مشکلت هر دوره را‬ ‫به اختصار شرح دهيد.‬ ‫- مزاياي شي‌گرايي در توليد نرم‌افزار را برشماريد.‬ ‫- اصول سه‌گانۀ شي‌گرايي را نام برده و هر يک‬ ‫را به اختصار شرح دهيد.‬
  • 12. ‫- قال ب کل ي برنامه‌هاي ‪ ++C‬را بشناس يد و بتوانيد‬ ‫برنامه‌هاي کوچک را نوشته و آزمايش کنيد.‬ ‫- عملگر ورودي و خروجي را در ‪ ++C‬شناخته و از آن‌ها‬ ‫در برنامه‌ها استفاده کنيد.‬ ‫- نحوۀ اعلن متغيره ا و شيوۀ مقدارده ي ب ه آن‌ها را‬ ‫بدانيد.‬ ‫- سه موجوديت »ليترال« ، »کاراکتر« و »عدد« را شناخته‬ ‫و فرق بين آن‌ها را شرح دهيد.‬ ‫- علت و شيوه‌هاي افزودن توضيح به کد برنامه را شرح‬ ‫دهيد.‬ ‫- علت و شيوۀ معرفي ثابت‌ها در برنامه را شرح دهيد.‬
  • 13. ‫مقدمه‬ ‫در دهه 0791 در آزمايشگاه‌هاي بل زباني به نام ‪C‬‬ ‫ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود‬ ‫تا اي ن ک ه در س ال 8791 توسط ‪ Kernighan‬و‬ ‫‪ Richie‬شرح کامل ي از اي ن زبان منتش ر ش د و به‬ ‫سرعت نظر برنامه‌نويسان حرفه‌اي را جلب نمود.‬ ‫هنگام ي ک ه بح ث شي‌گراي ي و مزاياي آن در جهان‬ ‫نرم‌افزار رون ق ياف ت، زبان ‪ C‬که قابليت شي‌گرايي‬ ‫نداشت ناقص به نظر مي‌رسيد تا اين که در اوايل‬ ‫ده ۀ 0891 دوباره شرک ت ب ل دس ت ب ه کار شد و‬ ‫‪ Bjarne Stroustrup‬زبان ‪ ++C‬را طراحي نمود‬
  • 14. ‫‪ ++C‬ترکيبي از دو زبان ‪ C‬و ‪ Simula‬بود و‬ ‫قابليت‌هاي شي‌گراي ي ني ز داشت. از آ ن زمان به‬ ‫بع د شرکت‌هاي زيادي کامپايلرهايي براي ‪++C‬‬ ‫طراحي کردند. اين امر سبب شد تفاوت‌هايي بين‬ ‫نس خه‌هاي مختل ف اي ن زبان ب ه وجود بيايد و از‬ ‫قابليت سازگاري و انتقال آن کاسته شود.‬ ‫ب ه همين دليل در س ال 8991 زبان ‪ ++C‬توسط‬ ‫موس سۀ اس تانداردهاي مل ي آمريک ا )‪ (ANSI‬به‬ ‫شکل استاندارد و يک‌پارچه در‌آمد.‬
  • 15. ‫1- چرا ‪ ++C‬؟‬ ‫‪ ‬زبان ‪ C‬يک زبان همه ظوره است‬ ‫من‬ ‫‪ ‬در اي ن زبان عملگ هاي ي ت عبيه شده که‬ ‫ر‌‬ ‫برنامه ي طح پاي ين و به زبان ماشين را‬ ‫‌نويس س‬ ‫نيز امکان‌پذير ي‌سازد‬ ‫م‬ ‫هاي فراواني دارد، کد منبع‬ ‫‪‬چون ‪ C‬عملگر‬ ‫برنام ها در اين زبان بسيار کوتاه است‬ ‫ه‌‬
  • 16. ‫- زبان ‪ C‬براي اجراي بسياري از دستوراتش از توابع کتابخانه‌اي‬ ‫‪‬‬ ‫استفاده مي‌کند و بيشتر خصوصيات وابسته به سخت‌افزار را به اين‬ ‫توابع واگذار مي‌نمايد.‬ ‫‪ ‬برنامۀ مقصدي که توسط کامپايلرهاي ‪ C‬ساخته مي‌شود بسيار‬ ‫فشرده‌تر و کم‌حجم‌تر از برنامه‌هاي مشابه در ساير زبان‌ها است.‬ ‫‪ ++C‬که از نسل ‪ C‬است، تمام ويژگي‌هاي جذاب ‪ C‬را به ارث‬ ‫‪‬‬ ‫برده است .‬ ‫و سرانجام آخرين دليل استفاده از ‪ ++C‬ورود به دنياي ‪ #C‬است.‬ ‫‪‬‬
  • 17. ‫2- تاريخچۀ ‪++C‬‬ ‫در ده ه 0791 در آزمايشگاه‌هاي ب ل زبان ي به نام ‪C‬‬ ‫ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود تا‬ ‫اي ن ک ه در س ال 8791 توسط ‪ Kernighan‬و ‪Richie‬‬ ‫شرح کاملي از اين زبان منتشر شد و به سرعت نظر‬ ‫برنامه‌نويسان حرفه‌اي را جلب نمود. هنگامي که بحث‬ ‫شي‌گرايي و مزاياي آن در جهان نرم‌افزار رونق يافت،‬ ‫زبان ‪ C‬که قابلي ت شي‌گراي ي نداش ت ناق ص ب ه نظر‬ ‫مي‌رسيد تا اين که در اوايل دهۀ 0891 دوباره شرکت‬ ‫بل دست به کار شد و ‪ Bjarne Stroustrup‬زبان ‪++C‬‬ ‫را طراحي نمود.‬
  • 18. ‫‪ ++C‬ترکيبي از دو زبان ‪ C‬و ‪ Simula‬بود و‬ ‫قابليت‌هاي شي‌گرايي نيز داشت از آن زمان به بعد‬ ‫شرکت‌هاي زيادي کامپايلرهايي براي ‪ ++C‬طراحي‬ ‫کردند. اي ن ام ر س بب ش د تفاوت‌هاي ي بين‬ ‫نس خه‌هاي مختل ف اي ن زبان ب ه وجود بيايد و از‬ ‫قابليت سازگاري و انتقال آن کاسته شود . به همين‬ ‫دلي ل در س ال 8991 زبان ‪ ++C‬توس ط موسسۀ‬ ‫اس تانداردهاي مل ي آمريک ا )‪ (ANSI‬به شکل‬ ‫استاندارد و يک‌پارچه در‌آمد. کامپايلرهاي کنوني به‬ ‫اي ن اس تاندارد پايبندند. کتاب حاض ر نيز بر مبناي‬ ‫همين استاندارد نگارش يافته است.‬
  • 19. ‫آماده‌سازي مقدمات -3‬ ‫يک »برنامه« دستورالعمل‌هاي متوالي است که‬ ‫مي‌تواند توسط يک رايانه اجرا شود. براي نوشتن‬ ‫و اجراي هر برنامه به يک »ويرايش‌گر متن« و يک‬ ‫»کامپايلر« احتياج داريم.‬ ‫بس تۀ ‪ ++Visual C‬محص ول شرکت‬ ‫ميکروس افت و بس تۀ ‪ C++ Builder‬محصول‬ ‫شرکت بورلند نمونه‌هاي جالبي از محيط مجتمع‬ ‫توليد براي زبان ‪ ++C‬به شمار مي‌روند.‬
  • 20. ‫4- شروع کار با ‪++C‬‬ ‫‪ ++C ‬نسبت به حروف »حساس به حالت« است يعني ‪ A‬و‬ ‫‪ a‬را يکي نمي‌داند‬ ‫مثال : اولين برنامه‬ ‫اولين برنامه‌اي که مي‌نويسيم به محض تولد، به شما سلم مي‌کند و عبارت "‪ "!Hello, my programmer‬را‬ ‫نمايش مي‌دهد:‬ ‫#‪<include <iostream‬‬ ‫‪()int main‬‬ ‫} ‪; "std::cout << "Hello, my programmer!n‬‬ ‫0 ‪;return‬‬ ‫{‬
  • 21. ‫اولين خط از کد بال يک »راهنماي‬ ‫پيش‌پردازنده« است. راهنماي پيش‌پردازنده‬ ‫شامل اجزاي زير است:‬ ‫‪ -1 ‬کاراکتر # که نشان مي‌دهد اين خط، يک‬ ‫راهنماي پيش‌پردازنده اس ت. اي ن کاراکت ر بايد‬ ‫در ابتداي همۀ خطوط راهنماي پيش‌پردازنده‬ ‫باشد.‬ ‫‪ -2 ‬عبارت ‪include‬‬ ‫‪ -3 ‬نام يک »فايل کتابخانه‌اي« که ميان دو‬ ‫علمت >< محصور شده است.‬
  • 22. ‫خط دوم برنامه نيز بايد در همه برنامه‌هاي ‪+C‬‬ ‫+ وجود داشته باشد.‬ ‫اين خط به کامپايلر مي‌گويد که »بدنۀ اصلي برنامه« از کجا شروع‬ ‫مي‌شود. اين خط داراي اجزاي زير است:‬ ‫1 – عبارت ‪ int‬که يک نوع عددي در ‪ ++C‬است.‬ ‫2 – عبارت ‪ main‬که به آن »تابع اصلي« در ‪ ++C‬مي‌گويند.‬ ‫3 – دو پرانتز )( که نشان مي‌دهد عبارت ‪ main‬يک »تابع« است.‬ ‫هر برنامه فقط بايد يک تابع‬ ‫‪ ()main‬داشته باشد .‬
  • 23. ‫سه خط آخر برنامه، »بدنۀ اصلي برنامه« را تشکيل‬ ‫.مي‌دهند‬ ‫دستورات برنامه از خط سوم شروع شده است.‬ ‫دستور خط سوم با علمت سميکولن ; پايان يافته‬ ‫است.‬
  • 24. ‫توضيح‬ ‫‪‬توضي ح، متن ي اس ت ک ه به منظور‬ ‫راهنماي ي و درک بهت ر ب ه برنام ه اضافه‬ ‫مي‌شود و تاثيري در اجراي برنامه‬ ‫ندارد. . کامپايلر توضيحات برنامه را قبل‬ ‫از اجرا حذف مي‌کند.‬ ‫‪ ‬اس تفاده از توضي ح س بب مي‌شود که‬ ‫ساير افراد ک د برنام ۀ شم ا را راحت‌تر‬
  • 25. ‫به دو صورت مي‌توانيم به برنامه‌هاي ‪ ++C‬توضيحات اضافه‬ ‫کنيم:‬ ‫‪ – 1 ‬با اس تفاده از دو علمت‬ ‫اس لش // : هر متن ي ک ه بعد از دو‬ ‫علم ت اس لش بياي د تا پايان همان‬ ‫سطر يک توضيح تلقي مي‌شود .‬ ‫‪ – 2‬با استفاده از حالت ‪ : C‬هر متني‬ ‫که ب ا علم ت /* شروع شود و با‬ ‫علمت */ پايان يابد يک توضيح تلقي‬
  • 26. ‫5- عملگر خروجي‬ ‫علم ت >> عملگ ر خروج ي در ‪ ++C‬نام دارد )به آن‬ ‫عملگر درج نيز مي‌گويند(.‬ ‫يک »عملگر« چيزي است که عملياتي را روي يک يا چند‬ ‫شي انجام مي‌دهد. عملگر خروجي، مقادير موجود در سمت‬ ‫راستش را به خروجي سمت چپش مي‌فرستد.‬ ‫به اين ترتيب دستور‬ ‫; 66 <<‪cout‬‬ ‫مقدار 66 را به خروجي ‪ cout‬مي‌فرستد که ‪ cout‬معمول‬ ‫به صفحه‌نمايش اشاره دارد. در نتيجه مقدار 66 روي صفحه‬ ‫نمايش درج مي‌شود.‬
  • 27. ‫6 -ليترال‌ها و کاراکترها‬ ‫ي ک »ليترال« رشته‌اي از حروف، ارقام ي ا علي م چاپي‬ ‫اس ت ک ه ميان دو علم ت نق ل قول " " محصور شده‬ ‫باشد.‬ ‫يک »کاراکتر« يک حرف، رقم يا علمت قابل چاپ است‬ ‫که ميان دونشانۀ ' ' محصور شده باشد. پس '‪ 'w‬و '!' و‬ ‫'1' هر کدام يک کاراکتر است.‬ ‫به تفاوت سه موجوديت »عدد« و »کاراکتر« و »ليترال‬ ‫رشته‌اي« دق ت کني د: 6 يک عدد اس ت، '6' يک کاراکتر‬ ‫است و "6" يک ليترال رشته‌اي است.‬
  • 28. ‫7 - متغيرها و تعريف آن‌ها:‬ ‫»متغيسر« مکانسي در حافظسه اسست کسه چهار مشخصه‬ ‫دارد: نام، نوع، مقدار، آدرس س . وقتي متغيري را‬ ‫تعري ف مي‌کني م، ابتدا ب ا توج ه ب ه نوع متغير،‬ ‫آدرسي از حافظه در نظر گرفته مي‌شود، سپس‬ ‫به آن آدرس يک نام تعلق مي‌گيرد.‬
  • 29. ‫در ‪ ++C‬قبل از اين که بتوانيم از متغيري استفاده‬ ‫کنيم، بايد آن را اعلن نماييم.‬ ‫نحو اعلن يک متغير‬ ‫‪type name initializer‬‬ ‫عبارت ‪ type‬نوع متغي ر را مشخص مي‌کند.‬ ‫نوع متغير به کامپايلر اطلع مي‌دهد که اين‬ ‫متغي ر چ ه مقاديري مي‌توان د داشت ه باشد و‬ ‫چه اعمالي مي‌توان روي آن انجام داد.‬
  • 30. ‫‪name initializer‬‬ ‫عبارت ‪ name‬نام متغي ر را نشان مي‌دهد. اين نام‬ ‫حداکث ر مي‌توان د 13 کاراکت ر باش د، نباي د با عدد شروع‬ ‫شود، علي م رياض ي نداشت ه باش د و همچني ن »کلمۀ‬ ‫کليدي« نيز نباشد.‬ ‫مقداردهي اوليه‬ ‫عبارت ‪ initializer‬عبارت »مقداردهي اوليه« نام دارد. با‬ ‫استفاده از اين عبارت مي‌توان مقدار اوليه‌اي در متغير‬ ‫مورد نظر قرار داد.‬ ‫دستور زير تعريف يک متغير صحيح را نشان مي‌دهد:‬ ‫;05 = ‪int n‬‬
  • 31. ‫8 - مقداردهي اوليه به متغيرها‬ ‫در بسياري از موارد بهتر است متغيرها را در همان محلي که‬ ‫اعلن مي‌شون د مقدارده ي کنيم. استفاده از متغيرهاي‬ ‫مقداردهي نشده ممکن است باعث ايجاد دردسرهايي شود.‬ ‫دردس ر متغيرهاي مقدارده ي نشده وقت ي بزرگ‌ تر مي‌شود که‬ ‫سعي کني م متغي ر مقدارده ي نشده را در ي ک محاس به به کار‬ ‫ببريم. مثل اگر ‪ x‬را که مقداردهي نشده در عبارت 5 + ‪;y = x‬‬ ‫به کار ب بريم، حاص ل ‪ y‬غي ر قاب ل پيش‌ بيني خواهد بود. براي‬ ‫اجتناب از چنين مشکلتي عاقلنه است که متغيرها را هميشه‬ ‫هنگام تعريف، مقداردهي کنيم.‬ ‫مثال:‬ ‫;54=‪int x‬‬ ‫;0=‪int y‬‬
  • 32. ‫9- ثابت‌ها‬ ‫در بعضي از برنامه ‌ها از متغيري استفاده مي‌کنيم که فقط يک بار لزم‬ ‫است آن را مقداردهي کنيم و سپس مقدار آن متغير در سراسر برنامه‬ ‫بدون تغيير باقي مي‌ماند. مثل در يک برنامۀ محاسبات رياضي، متغيري به‬ ‫نام ‪ PI‬تعريف مي‌کنيم و آن را با 41.3 مقداردهي مي‌کنيم و مي‌خواهيم‬ ‫که مقدار اي ن متغي ر در س راسر برنام ه ثاب ت بماند. در چني ن حالتي از‬ ‫»ثابت‌ها« استفاده مي‌کنيم.‬ ‫يک ثابت، يک نوع متغير است که فقط يک بار مقداردهي‬ ‫مي‌شود و سپس تغيير دادن مقدار آن در ادامۀ برنامه ممکن‬ ‫نيست.‬ ‫تعريف ثابت‌ها مانند تعريف متغيرهاست با اين تفاوت که‬ ‫کلمه کليدي ‪ const‬به ابتداي تعريف اضافه مي‌شود.‬
  • 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. ‫عملگر ورودي - 01‬ ‫براي اين که بتوانيم هنگام اجراي برنامه مقاديري را وارد کنيم از‬ ‫عملگر ورودي << استفاده مي‌کنيم.‬ ‫:استفاده از دستور ورودي به شکل زير است‬ ‫;‪cin >> variable‬‬ ‫‪ variable‬نام يک متغير است.‬
  • 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. ‫عملگسر ورودي نيسز ماننسد عملگسر خروجسي بسه شکل‬ ‫جريانسي رفتار مي‌کند. يعنسي همان طور کسه در عملگر‬ ‫خروجي مي‌توانستيم چند عبارت را با استفاده از چند‬ ‫عملگسر >> به صسورت پشست سسر هسم چاپ کنيم، در‬ ‫عملگر ورودي نيز مي‌توانيم با استفاده از چند عملگر‬ ‫<< چند مقدار را به صورت پشت سر هم دريافت کنيم.‬ ‫مثل با استفاده از دستور:‬ ‫;‪cin >> x >> y >> z‬‬ ‫سه مقدار ‪ x‬و ‪ y‬و ‪ z‬به ترتيب از ورودي دريافت مي‌شوند.‬ ‫براي ايسسن کار بايسسد بيسسن هسسر ورودي يسسک فضاي خالي‬ ‫)‪ (space‬بگذاريد و پس از تايپ کردن هم ۀوسسسرودي‌ها، کليد‬ ‫‪ enter‬را بفشاريد. آخرين مثال جلسه، اين موضوع را بهتر‬
  • 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 }
  • 40. ‫:آنچه در اين جلسه مي خوانيد‬ ‫1- انواع داد ۀعسسسسددي‬ ‫2- متغير عدد صحيح‬ ‫3- محاسبات اعداد صحيح‬ ‫4- عملگرهاي افزايشي و‬ ‫کاهشي‬ ‫5- عملگرهاي مقدارگذاري مرکب ›››‬
  • 41. ‫7- تعريف متغير مميز شناور‬ ‫8 - شکل علمي مقادير مميز‬ ‫شناور‬ ‫9- نوع بولين ‪bool‬‬ ‫01- نوع کاراکتري ‪char‬‬ ‫11- نوع شمارشي ‪enum‬‬ ‫›››‬ ‫21- تبديل نوع، گسترش نوع‬
  • 42. ‫31- برخي از خطاهاي‬ ‫برنامه‌نويسي‬ ‫41 - سرريزي عددي‬ ‫51- خطاي گرد کردن‬ ‫61- حوزۀ متغيرها‬
  • 43. ‫هدف کلي:‬ ‫هدف‌هاي رفتاري:‬ ‫انتظار مي‌رود پ س از وپايان اي بن‌کارگيري‬ ‫معرف ي انواع متغييرها نحوۀ ه جلسه‬ ‫بتوانيد:در برنامه‌هاي ‪++C‬‬ ‫آن‌ها‬ ‫- انواع عددي صحيح در ‪ ++C‬را نام ببريد و‬ ‫متغيرهاي ي از اي ن نوع‌ ها را در برنامه‌ ها به‬ ‫کار ببريد.‬ ‫- انواع عددي مميز شناور در ‪ ++C‬را نام‬ ‫ببري د و متغيرهاي ي از اي ن نوع‌ها را در‬ ‫<<<‬ ‫برنامه‌ها به کار ببريد.‬ ‫- نوع بولين را تعريف کرده و متغيرهايي از‬
  • 44. ‫- نوع شمارشي را شناخته و متغيرهايي از‬ ‫اين نوع را در برنامه‌ها به کار ببريد.‬ ‫- مفاهيم »تبديل نوع« و »گسترش نوع« را‬ ‫شناخته و انواع مختلف را به يکديگر تبديل‬ ‫نماييد.‬ ‫- عل ت خطاهاي »سرريزي عددي« و‬ ‫»گردکردن« را دانسته و بتوانيد محل وقوع‬ ‫آن‌ها را کشف کنيد.‬ ‫- عملگرهاي حسابي و افزايشي و کاهشي‬
  • 45. ‫مقدمه‬ ‫م ا در زندگ ي روزمره از داده‌هاي مختلفي‬ ‫استفاده مي‌کنيم: اعداد ، تصاوير، نوشته‌ها‬ ‫يا حروف الفب ا، ص داها، بوه ا و ... . با‬ ‫پردازش اي ن داده‌ ها مي‌تواني م تصميماتي‬ ‫اتخاذ کنيم، عکس‌العمل‌هايي نشان دهيم و‬ ‫مس اله‌اي را ح ل کنيم. رايانه‌ ها نيز قرار‬ ‫اس ت همي ن کار را انجام دهند. يعني‬ ‫داده‌هايي را بگيرند، آن ‌ها را به شکلي که‬ ‫ما تعيين مي‌کنيم پردازش کنند و در نتيجه‬
  • 46. ‫1- انواع دادۀ عددي‬ ‫در ‪ ++C‬دو نوع اصلي داده وجود دارد:‬ ‫»نوع ص حيح« و »نوع مميز شناور«.‬ ‫همۀ انواع ديگر از روي اين دو ساخته‬ ‫مي‌شوند )به شکل زير دقت کنيد(.‬ ‫انواع اصلي‬ ‫انواع مميز شناور انواع صحيح‬
  • 47. ‫نوع صحيح‬ ‫نوع صحيح براي نگهداري اعداد‬ ‫صحيح )اعداد 0 و 1 و 2 و ...(‬ ‫استفاده مي‌شود. اين اعداد بيشتر‬ ‫براي شمارش ب ه کار مي‌روند و‬ ‫دامنه محدودي دارند.‬
  • 48. ‫انواع صحيح‬ ‫نوع‬ ‫نوع‬ ‫نوع‬ ‫نوع‬ boolean ‫ي‬‫شمارش‬ ‫کاراکتري‬ ‫عددي صحيح‬ short bool enum char int long unsigned Unsigned char short Unsigned wchar_t int unsigned long
  • 49. ‫نوع مميز شناور براي نگهداري اعداد اعشاري‬ ‫اس تفاده مي‌شود. اعداد اعشاري بيشتر براي‬ ‫اندازه‌گيري دقيق به کار مي‌روند و دامنۀ بزرگ‌تري‬ ‫دارند . يک عدد اعشاري مثل 781/253 را مي‌توان‬ ‫به شک ل 01×81/2537 يا 201×1/25378‬ ‫يا01×3781/251-يا01×53781/2 2-و يا ... نوشت.‬ ‫به اي ن انواع مميز کم و زياد کردن‬ ‫ترتي ب ب ا شناور‬ ‫توان عدد 01 مميز عدد نيز جابه‌جا‬ ‫مي‌شود . به همين دليل است که به‬ ‫اعداد اعشاري »اعداد مميز ‪«float‬‬ ‫شناور‬ ‫‪double‬‬ ‫‪long double‬‬ ‫مي‌گويند.‬
  • 50. ‫متغير عدد صحيح -2‬ ‫‪ ++C‬شش نوع متغي ر عدد صحيح دارد‬ ‫تفاوت اي ن ش ش نوع مربوط به ميزان‬ ‫حافظ ۀ مورد استفاده و محدودۀ مقاديري‬ ‫است که هر کدام مي‌توانند داشته باشند.‬ ‫اين ميزان حافظۀ مورد استفاده و محدودۀ‬ ‫مقادي ر، بس تگي زيادي ب ه سخت‌افزار و‬ ‫همچني ن س يستم عام ل دارد. يعن ي ممکن‬ ‫اس ت روي ي ک رايان ه، نوع ‪ int‬دو بايت از‬ ‫حافظ ه را اشغال کن د در حال ي که روي‬ ‫رايانه‌اي از نوع ديگ ر نوع ‪ int‬به چهار بايت‬
  • 51. ‫نوع متغيير‬ ‫حداقل مقدار قابل‬ ‫حداكثر مقدار قابل‬ ‫پذيرش‬ ‫پذيرش‬ ‫‪short‬‬ ‫86723-‬ ‫76723‬ ‫‪unsigned short‬‬ ‫توجسه داشته‬ ‫0‬ ‫53556‬ ‫وقتسي برنامه‌اي مي‌نويسسيد،‬ ‫باشيسد کسه از نوع صسحيح مناسسب استفاده‬ ‫‪int‬‬ ‫7463847412 8463847412-‬ ‫5927694924 برنامه دچار خطا ‪unsigned int‬‬ ‫نشود و هم‬ ‫0‬ ‫کنيد تا هم‬ ‫حافظ ۀسسسسيستم را هدر ندهيد.‬ ‫‪long‬‬ ‫8463847412-‬ ‫7463847412‬ ‫‪unsigned long‬‬ ‫0‬ ‫5927694924‬
  • 52. ‫3 -محاسبات اعداد صحيح‬ ‫‪ ++C‬مانن د اغلب زبان‌هاي‬ ‫برنامه‌نويسي براي محاسبات از‬ ‫عملگرهاي جم ع )+( ، تفريق‬ ‫)-( ، ضرب )*( ، تقسيم )/( و‬ ‫باقيمانده )%( استفاده مي‌کند.‬
  • 53. ‫4 - عملگرهاي افزايشي و کاهشي‬ ‫‪ ++C‬براي دستکاري مقدار متغيرهاي صحيح، دو‬ ‫عملگر جالب ديگر دارد:‬ ‫عملگر ++ کدام از ايسن عملگرها دو‬ ‫امسا هسر :‬ ‫شکسسسل متفاوت دارنسسسد : شکل‬ ‫مقدار يک متغير را يک واحد افزايش‬ ‫»پيشوندي« و شکل »پسوندي«.‬ ‫مي‌دهد.‬ ‫عملگر -- :‬
  • 54. ‫در شک ل پيشوندي ابتدا متغير،‬ ‫متناس ب ب ا عملگعملگر قبلش نام‬ ‫يا‬ ‫در شکل پيشوندي، ر، افزاي از‬ ‫متغير مي‌آيد مثل ++ ‪ m‬يا -- ‪ . n‬در‬ ‫کاهش مي‌يابد و پس از آن مقدار‬ ‫شک ل پس وندي، عملگ ر بعد از نام‬ ‫متغير مي‌آيد مثل محاس يا ‪ . --n‬ديگر‬ ‫متغي ر براي ‪ ++m‬بات‬ ‫استفاده مي‌شود.‬ ‫در شک ل پسوندي ابتدا مقدار‬ ‫متغير در محاسبات به کار مي‌رود‬ ‫و پس از آن مقدار متغير يک واحد‬
  • 55. ‫5 – عملگرهاي مقدارگذاري مرکب‬ ‫‪ ++ C‬عملگرهاي ديگري دارد که‬ ‫مقدارگذاري در متغيره ا را تسهيل‬ ‫م ي ‌نمايند. مثل با ا ستفاده از عملگر‬ ‫+= م ي ‌تواني م هش ت واح د به ‪m‬‬ ‫اضا فه کن يم ا ما با د ستور کوتا ه ‌ تر:‬ ‫دستور بال معادل دستور 8 + ‪ ;m = m‬است‬ ‫با اين تفاوت که کوتاه‌تر است. به عملگر +=‬ ‫»عملگ ر مرک ب« مي‌گوين د زيرا ترکيبي از‬
  • 56. ‫عملگرهاي مقدارگذاري مرکب -5‬ ‫براي مقدارگذاري در‬ ‫قبل از عملگر =‬ ‫متغيرها استفاده کرديم. ‪ ++C‬عملگرهاي‬ ‫ديگري دارد ک ه مقدارگذاري در متغيرها را‬ ‫تسهيل مي‌نمايند.‬ ‫+= و‬ ‫عملگر مرکب در ‪ ++C‬عبارتند از:‬ ‫-= و *= و /= و =%‬
  • 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. ‫6 – انواع مميز شناور‬ ‫عدد مميز شناور به بيان ساده همان عدد اعشاري است. عددي‬ ‫مثل 54.321 يک عدد اعشاري است. براي اين که مقدار اين‬ ‫عدد در رايانسه ذخيره شود، ابتدا بايسد بسه شکسل دودويسي تبديل‬ ‫21001110.1101111 = 54.321‬ ‫شود:‬ ‫اکنون براي مشخ ص نمودن محل اعشار در عدد، تمام‬ ‫رقم ‌ها را به سمت راست مميز منتقل مي‌کنيم. البته با هر‬ ‫جابجايي مميز، عدد حاصل بايد در تواني از 2 ضرب شود:‬ ‫72 ×10011101101111.0 = 54.321‬ ‫به مقدار 10011101101111 »مانتيس عدد« و به‬ ‫7 که توان روي دو است، »نماي عدد« گفته مي‌شود.‬
  • 59. ‫در ‪ ++C‬سه نوع مميز شناور وجود‬ ‫دارد:‬ ‫انواع مميز شناور‬ ‫‪float‬‬ ‫‪double‬‬ ‫‪long double‬‬ ‫نوع ‪ double‬از هشتهشتبراي‬ ‫نوع ‪ long double‬از بايت‬ ‫معمول نوع ‪ float‬از چهار يا‬ ‫نگهداري عدد استفاده مي‌کند.بايت‬ ‫ده براي نگهداري شانزده بايت‬ ‫عدد استفاده‬ ‫ي ا دوازده ي ا‬ ‫برايي نگهداري عدد استفاده‬ ‫م ‌کند.‬
  • 60. ‫جدول تخصيص حافظه براي متغيير هاي مميز شناور‬ ‫تعداد بيت براي ذخيره‌سازيِ‬ ‫نوع متغير‬ ‫نما مانتيس‬ ‫علمت‬ ‫عدد‬ ‫23‪ float‬بيتي‬ ‫8 32‬ ‫1‬ ‫46 ‪double‬‬ ‫بيتي‬ ‫11 25‬ ‫1‬
  • 61. ‫7 – تعريف متغير مميز شناور‬ ‫تعري ف متغي ر ممي ز شناور مانن د تعريف‬ ‫تفاوت نوع ‪ float‬با نوع ‪ double‬در اين‬ ‫متغي ر ص حيح اس ت . با اي ن تفاوت که از‬ ‫است که نوع ‪ double‬دو برابر ‪ float‬از‬ ‫کلم ۀ کليدي ‪ float‬يا ‪ double‬براي‬ ‫حافظ ه اس تفاده مي‌کند. پس نوع‬ ‫مشخ ص نمودن نوع متغي ر استفاده‬ ‫‪ double‬دقت ي بس يار بيشتر از ‪float‬‬ ‫مي‌کنيم.‬ ‫دارد . به همين دليل محاسبات ‪double‬‬ ‫مثال:‬ ‫وقت‌گيرتر از محاسبات ‪ float‬است.‬ ‫;‪float x‬‬
  • 62. ‫شکل علمي مقادير مميز شناور -8‬ ‫اعداد ممي ز شناور ب ه دو صورت در ورودي و‬ ‫خروج ي نشان داده مي‌شون د : به شکل‬ ‫»ساده« و به شکل »علمي«.‬ ‫علمي -2‬ ‫ساده -1‬ ‫401×765432.1‬ ‫76.54321‬ ‫مشخ ص اس ت ک ه شک ل علمي براي‬ ‫نشان دادن اعداد خيل ي کوچک و‬ ‫همچني ن اعداد خيل ي بزرگ، کارآيي‬ ‫بيشتري دارد.‬
  • 63. ‫9 – نوع بولين ‪bool‬‬ ‫نوع ‪ bool‬يک نوع ص حيح اس ت که‬ ‫متغيرهاي اين نوع فقط مي‌توانند مقدار‬ ‫‪ true‬يا ‪ false‬داشت ه باشند. ‪ true‬به‬ ‫معني درست و ‪ false‬به معني نادرست‬ ‫است.‬ ‫اما اين مقادير در اصل به صورت 1 و 0‬ ‫درون رايان ه ذخيره مي‌شوند: 1 براي‬ ‫‪ true‬و 0 براي ‪.false‬‬
  • 64. ‫01- نوع کاراکتري ‪char‬‬ ‫يک کاراکتر يک حرف، رقم يا نشانه است که‬ ‫يک شمارۀ منحص ر ب ه فرد دارد. به عبارت‬ ‫عاميان ه، ه ر کليدي ک ه روي صفحه‌کليد خود‬ ‫مي‌بينيد يک کاراکتر را نشان مي‌دهد.‬ ‫مثل هر يک از حروف '‪ ' A‬تا '‪ 'Z‬و '‪ 'a‬تا '‪ 'z‬و‬ ‫هر يک از اعداد '0' تا '9' و يا نشانه‌هاي '~' تا‬ ‫'+' روي صفحه‌کليد را يک کاراکتر مي‌نامند.‬
  • 65. ‫براي تعري ف متغيري از نوع کاراکتر از‬ ‫کلم ه کليدي ‪ char‬اس تفاده مي‌کنيم. يک‬ ‫کاراکتر بايد درون دو علمت آپستروف )'(‬ ‫محص ور شده باشد . پس '‪ ' A‬يک کاراکتر‬ ‫است؛ همچنين'8 ' يک کاراکتر است اما 8‬ ‫يک کاراکت ر نيس ت بلک ه ي ک عدد صحيح‬ ‫است .‬ ‫مثال:‬ ‫;'‪char c ='A‬‬
  • 66. ‫11 – نوع شمارشي ‪enum‬‬ ‫يک نوع شمارشي يک نوع صحيح است که‬ ‫توسط کاربر مشخص مي‌شود. نحو تعريف‬ ‫يک نوع شمارشي به شکل زير است:‬ ‫}‪enum typename{enumerator-list‬‬ ‫که ‪ enum‬کلمه‌اي کليدي است، ‪typename‬‬ ‫نام نوع جديد است که کاربر مشخص مي‌کند‬ ‫و ‪ enumerator-list‬مجموعه مقاديري است‬ ‫که اين نوع جديد مي‌تواند داشته باشد.‬
  • 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. ‫مي‌توان مقادير صحيحودلخواهي را به ... هر‬ ‫‪ 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. ‫نحوۀ انتخاب نام‌شمارشگره ا آزاد اس ت ام ا بيشتر‬ ‫برنامه‌نويسان از توافق زير در برنامه‌هايشان استفاده‬ ‫مي‌کنند:‬ ‫نام – براي نام ثاب ت ‌ها از حروف‬ ‫1 شمارشگر بايد معتبر باشد:‬ ‫بزرگ استفاده کنيد‬ ‫يعني:‬ ‫2 کلمۀ کليدي نباشد. از نام نوع‬ ‫1- – اولين حرف‬ ‫2- شمارششروع نشودحرف بزرگ‬ ‫.‬ ‫با عدد ي را با‬ ‫بنويسيد.‬ ‫3- نشانه‌هاي رياض ي ني ز نداشته‬ ‫3- نشانه‌هاي رياض ي ني ز نداشته‬ ‫باشد. در هر جاي ديگر از حروف‬ ‫3 –‬ ‫کوچک استفاده کنيد.‬
  • 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. ‫انواع شمار شي براي تول يد کد » خود‬ ‫مستند« به کار م ي ‌روند، يعني کدي که‬ ‫به راحت ي درک شود و نياز به‬ ‫توضيحات اضافي نداشته باشد.‬ ‫مثل تعاري ف زي ر خودمس تند هستند‬ ‫زيرا ب ه راحتي نام و نوع کاربرد و‬ ‫محدودۀ مقاديرشان درک م ي ‌شود:‬ ‫}‪enum Color{RED,GREEN,BLUE,BLACK,ORANGE‬‬ ‫}‪enum Time{SECOND,MINUTE,HOUR‬‬ ‫}‪enum Date{DAY,MONTH,YEAR‬‬ ‫}‪enum Language{C,DELPHI,JAVA,PERL‬‬
  • 72. ‫21 – تبديل نوع، گسترش نوع‬ ‫در محاس باتي ک ه چن د نوع متغير وجود‬ ‫دارد، جواب هميش ه ب ه شکل متغيري‬ ‫است که دقت بالتري دارد. يعني اگر يک‬ ‫عدد ص حيح را ب ا ي ک عدد مميز شناور‬ ‫جمعبراي ايسن پاسخ به يسک متغير از شناور‬ ‫ببنديم، کسه مقدار شکل مميز نوع‬ ‫مميسز شناور را بسه نوع صسحيح تبديسل کنيم‬ ‫است به اين عمل گسترش نوع مي‌گويند.‬ ‫از عبارت ‪ ()int‬اسستفاده مي‌کنيسم بسه اين‬ ‫اسستفاده مي‌کنيسم بسه اين‬ ‫از عبارت‬ ‫عمل تبديل نوع گفته مي شود‬
  • 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. ‫31 – برخي از خطاهاي برنامه‌نويسي‬ ‫اي ن قبي ل خطاه ا ک ه اغلب خطاهاي نحوي‬ ‫هستند ، توسط کامپايلر کشف مي‌شوند و به‬ ‫راحتي مي‌توان آن‌ها را رفع نمود.‬ ‫»خطاي زمان اجرا«‬ ‫کشف اينگونه خطاها به راحتي ممکن نيست‬ ‫و کامپايل ر ني ز چيزي راج ع ب ه آن نمي‌داند.‬ ‫برخي از خطاهاي زمان اجرا سبب مي‌شوند‬ ‫که برنامه به طور کامل متوقف شود و از کار‬
  • 75. ‫41- سرريزي عددي‬ ‫يک متغير هر قدر هم که گنجايش داشته‬ ‫باش د، بالخره مقداري هس ت که از‬ ‫گنجايش آن متغير بيشتر باشد. اگر سعي‬ ‫کنيم در يک متغير مقداري قرار دهيم که‬ ‫از گنجايش آن متغير فراتر باشد، متغير‬ ‫»سرريز « مي‌شود،در چني ن حالتي‬ ‫مي‌گويي م ک ه خطاي سرريزي رخ داده‬
  • 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. ‫51 – خطاي گرد کردن‬ ‫خطاي‌ گرد كردن‌ نوع‌ ديگري‌ از خطاست‌ كه‌‬ ‫اغلب‌ وقتي‌ رايانه‌ها روي‌ اعداد حقيقي‌‬ ‫»هيچ‌گاه از متغي ر مميز شناور براي‬ ‫محاس به‌ مي‌كنند، رخ‌ مي‌دهد. براي‌ مثال‌‬ ‫مقايس ه برابري اس تفاده نکنيد« زيرا در‬ ‫عدد 3/1ممكن ‌ است ‌ به ‌ صورت ‌ 333333.0‬ ‫متغيرهاي مميز شناور خطاي گرد کردن‬ ‫ذخيره‌ شود كه‌ دقيقا معادل‌ 3/1 نيست‌.‬ ‫سبب مي‌شود ک ه پاس خ ب ا آ ن چه مورد‬ ‫اين خطا از آن‌جا ناشي مي‌شود که اعدادي‬ ‫نظر شماست متفاوت باشد.‬ ‫مث ل 3/1 مقدار دقي ق ندارن د و رايانه‬ ‫نمي‌توان د اي ن مقدار را پيدا کن د، پس‬ ‫نزديک‌تري ن عدد قاب ل محاس به را به جاي‬
  • 78. ‫حوز ۀمسسسستغيرها – 61‬ ‫انتخاب نام‌هاي نامفهوم ي ا ناق ص سبب‬ ‫اص طلح »بلوک« در ‪ ++C‬واژه‬ ‫کاهش خوانايي برنامه و افزايش خطاهاي‬ ‫مناس بي اس ت ک ه مي‌توان ب ه وسيلۀ‬ ‫برنامه‌نويسي مي‌شود. استفاده از متغيرها‬ ‫آن حوزۀ متغير را مشخص نمود. يک‬ ‫در حوزۀ نامناس ب ه م سبب بروز‬ ‫بلوک برنامه، قسمتي از برنامه است‬ ‫خطاهاي ي مي‌شود. »حوزه متغير«‬ ‫که درون يک جفت علمت کروشه } {‬ ‫محدوده‌اي است که يک متغير خاص اجازه‬ ‫محدود شده است.‬ ‫دارد در آن محدوده به کار رود يا فراخواني‬ ‫شود.‬
  • 79. ‫حوزۀ يک متغير از محل اعلن آن شروع‬ ‫مي‌شود و ت ا پايان همان بلوک ادامه‬ ‫مي‌يابد. خارج از آ ن بلوک نمي‌توان به‬ ‫متغير دسترسي داشت. همچنين قبل از‬ ‫اين که متغير اعلن شود نمي‌توان آن را‬ ‫استفاده نمود.‬ ‫مي‌تواني م در ي ک برنام ه، چن د متغير‬ ‫متفاوت ب ا ي ک نام داشت ه باشي م به‬ ‫شرطي که در حوزه‌هاي مشترک نباشند.‬
  • 82. ‫:آنچه در اين جلسه مي خوانيد‬ ‫1- دستور‌ ‪if‬‬ ‫2- دستور ‪if..else‬‬ ‫3- عملگرهاي مقايسه‌اي‬ ‫4- بلوك‌هاي دستورالعمل‬ ‫5- شرط‌هاي مركب‬ ‫›››‬ ‫6- ارزيابي ميانبري‬
  • 83. ‫7- عبارات منطقي‬ ‫8 - دستور‌هاي انتخاب تودرتو‬ ‫9- ساختار ‪else if‬‬ ‫01- دستورالعمل ‪switch‬‬ ‫11- عملگر عبارت شرطي‬ ‫21- كلمات كليدي‬
  • 84. ‫هدف‌هاي رفتاري:‬ ‫هدف کلي:‬ ‫انتظار مي‌رود پس از پايان اين جلسه بتوانيد:‬ ‫شناخست تور ‪ if‬شناخت ه و ل‌هاي انتخاب و شيو ۀ‬ ‫- نح و دس انواع رادستورالعم آ ن را در برنامه‌ ها به کار‬ ‫ببريد.‬ ‫به‌کارگيري هر يک‬ ‫- نحو دستور ‪ if..else‬را شناخته و آن را در برنامه ‌ها به‬ ‫کار ببريد.‬ ‫- از ساختار ‪ else..if‬در تصميم‌گيري‌هاي پيچيده استفاده‬ ‫کنيد.‬ ‫- نحو دستور ‪ switch‬را شناخته و خطاي »تلۀ سقوط«‬ ‫را تشخيص دهيد.‬ ‫- بلوک دستورالعمل را تعريف کنيد.‬ ‫- عملگرهاي مقايس ه‌اي و عملگ ر عبارت شرطي را در‬ ‫<<<‬ ‫دستورات شرطي به کار ببريد.‬
  • 85. ‫مقدمه‬ ‫ه مۀ برنام ه ‌ها يي که در دو جلسه اول‬ ‫بيان ش د، ب ه شک ل ترتيبي ‌اجرا‬ ‫م ي ‌شون د، يعن ي دس تورات برنام ه به‬ ‫ترتيب از بال به پايين و هر کدام دقيقا‬ ‫يک بار اجرا م ي ‌شوند. در اي ن ‌ جلسه ‌‬ ‫نشان داده م ي ‌شود چگونه از‬ ‫دس تورالعم ل ‌هاي انتخاب 1 جهت‬ ‫انعطا ف ‌پذيري بيشت ر برنام ه استفاده‬
  • 86. ‫بسه شکل‬ ‫دسستور ‪ if‬دستور ‪if‬‬ ‫مي‌شود برنامسه‬‫موجسب‬ ‫‌‬ ‫است‌:‬ ‫آن گون‌سسسس ۀ ‌ زير‬ ‫شرطي اجرا شود. نحو‬ ‫به‬ ‫شرطي اجرا شود نحو‬ ‫;‪If (condition) statement‬‬ ‫‪ Condition‬که شرط ناميده م ي ‌شود يك‬ ‫عبارت صحيح ا ست ) عبار تي که با يک‬ ‫مقدار صحيح برآورد م ي ‌شود( و‬ ‫‪ ‌ statement‬م ي ‌توان د ه ر فرمان قابل‬ ‫اجرا باشد. ‪ Statement‬وقتي اجرا‬ ‫خواه د ش د ك ه ‪ ‌ condition‬مقدار غير‬ ‫صفر داش ته باشد. د قت كن يد كه شرط‬
  • 87. ‫2- دستور ‪if..else‬‬ ‫دسستور ‪ if..else‬موجسب مي‌شود بسسته بسه اين‬ ‫که شرط درسست باشسد يسا خيسر، يكي از دو‬ ‫دستورالعمل فرعي اجرا گردد. نحو اين دستور‬ ‫‪ condition‬است: شرط مسساله اسست کسه يك‬ ‫به شکل زير همان‬ ‫;‬ ‫مي‌باشد و 1‪statement‬‬ ‫عبارت صسسحيح 1‪if(condition )statement‬و‬ ‫2‪ statement‬فرمان‌هاي قابل اجرا هستند. اگر‬ ‫2‪;else statement‬‬ ‫مقدار شرط، غيسر صسفر باشد، 1‪statement‬‬ ‫اجرا خواهسد شسد وگرنه 2‪ statement‬اجرا‬ ‫مي‌شود.‬
  • 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. ‫هاي مقايسه‌اي‬‫4- عملگر‬ ‫در ‪ ++C‬شش عملگر مقايسه‌اي وجود دارد: >‬ ‫و < و >= و <= و == و != . هر يک‬ ‫از ايسسن شسسش عملگسسر بسسه شکسسل زيسسر به کار‬ ‫مي‌روند:‬ ‫‪‌ x‬کوچکتر از ‪ y‬است // ‪x < y‬‬ ‫‪ x‬بزرگتر از ‪ y‬است // ‪x > y‬‬ ‫‪‌ x‬کوچکتر يا مساوي ‪ y‬است // ‪x <= y‬‬ ‫‪ x‬بزرگ‌تر يا مساوي ‪ y‬است // ‪x >= y‬‬ ‫‪ x‬مساوي با ‪ y‬است // ‪x == y‬‬
  • 90. ‫اين‌ ها مي‌توانن د براي مقايسۀ مقدار‬ ‫عبارات با هر نوع ترتيبي استفاده شوند.‬ ‫عبارت حاصل به عنوان يك ‌ شرط تفسير‬ ‫مي‌شود. مقدار اين شرط صفر است اگر‬ ‫شرط نادرست باشد و غير صفر است اگر‬ ‫شرط درس ت باشد. براي نمونه، عبارت‬ ‫7*8> 6*5 برابر با صفر ارزيابي مي‌شود،‬ ‫به اين معني كه اين شرط نادرست است.‬
  • 91. ‫متغير عدد صحيح -2‬ ‫‪ ++C‬شش نوع متغي ر عدد صحيح دارد‬ ‫تفاوت اي ن ش ش نوع مربوط به ميزان‬ ‫حافظ ۀ مورد استفاده و محدودۀ مقاديري‬ ‫است که هر کدام مي‌توانند داشته باشند.‬ ‫اين ميزان حافظۀ مورد استفاده و محدودۀ‬ ‫مقادي ر، بس تگي زيادي ب ه سخت‌افزار و‬ ‫همچني ن س يستم عام ل دارد. يعن ي ممکن‬ ‫اس ت روي ي ک رايان ه، نوع ‪ int‬دو بايت از‬ ‫حافظ ه را اشغال کن د در حال ي که روي‬ ‫رايانه‌اي از نوع ديگ ر نوع ‪ int‬به چهار بايت‬
  • 92. ‫ي با‬ ‫دقت کنيد كه در ++ ‪ C‬عملگر جايگزين‬ ‫ي‬ ‫عملگر برابري فرق دارد. عملگر جايگزين‬ ‫يک مساوي ي " = " است ي عملگر‬ ‫ول‬ ‫تک‬ ‫برابري، دو مساوي " = = " است.‬ ‫مثل دستور 33;= ‪ x‬مقدار 33 را در ‪ x‬قرار‬ ‫ي ي‌کند‬ ‫ي‌دهد ي دستور 33 ;==‪ x‬بررس م‬‫ول‬ ‫م‬ ‫که آيا مقدار ‪ x‬با 33 برابر است يا خير. درک‬ ‫اين تفاوت هميت زيادي دارد.‬ ‫ا‬
  • 93. ‫ل‬‫4- بلو هاي دستورالعم‬ ‫ك‌‬ ‫ي ك بلوك دستورالعمل زنجيره ‌اي از‬ ‫دستورالعم هاست كه درون براكت }{ محصور‬ ‫ل‌‬ ‫شده، مانند :‬ ‫} ‪;int temp=x‬‬ ‫‪;x = y‬‬ ‫‪;y = temp‬‬ ‫{‬ ‫در برنامه‌هاي ++‪ C‬يک بلوک دستورالعمل‬ ‫مانند يک دستورالعمل تکي است.‬
  • 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. 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. ‫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. ‫!‬ ‫سسه عملگسر منطقي && )‪ (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. ‫6- ارزيابي ميانبري‬ ‫عملگرهاي && و || به دو عملوند نياز‬ ‫دارندت ا مقايسه را روي آن دو انجام دهند.‬ ‫جداول درس تي نشان مي‌ده د که ‪p&&q‬‬ ‫شرط است مرك ب نادرست&& و. در اين‬ ‫نادرست ‌هاي اگر ‪ p‬كه از باشد ||‬ ‫اس تفادهنيازي‌كنن د عملوند دوم راشود.‬ ‫حالت ديگر مي نيست که ‪ q‬بررسي‬ ‫همچني ن ‪p||q‬ي‌كنن دت اس تناگكه ‪ p‬درست‬ ‫بررس ي نم درس مگ ر اي ر لزم‬ ‫باشددر اين حالت هم نيازي نيست که ‪q‬‬ ‫باشد و .‬ ‫بررسي شود. در هر دو حالت گفته شده، با‬ ‫ارزيابي عملوند اول به سرعت نتيجه معلوم‬ ‫مي‌شود. اين كار ارزيا بي ميانبري ناميده‬
  • 99. ‫7- عبارات منطقي‬ ‫ي ك عبارت منطق ي شرط ي اس ت ك ه يا‬ ‫درس ت اس ت ي ا نادرس ت. قبل ديدي م که‬ ‫عبارات منطق ي ب ا مقادي ر ص حيح ارزيابي‬ ‫مي‌شوند. مقدار صفر به معناي نادرست و‬ ‫هر مقدار غير صفر به معناي درست است .‬ ‫به عبارات منطق ي »عبارات بول ي « هم‬ ‫مي‌گويند.‬
  • 100. ‫چون همس ۀمسسسقاديسر صسحيح ناصسفر به معناي‬ ‫درست تفسير مي‌شوند، عبارات منطقي اغلب‬ ‫تغيير قيافه مي‌دهند. براي مثال دستور‬ ‫;"‪if (n) cout << "n is not zero‬‬ ‫وقتسي ‪ n‬غيسر صسفر است عبارت‬ ‫‪‌n is not‬‬ ‫‪ zero‬را چاپ مي‌كنسد زيرا عبارت منطقي‬ ‫)‪ ( n‬وقتسسي مقدار ‪ n‬غيسسر صسفر اسست به‬ ‫عنوان درست تفسير مي‌گردد.‬
  • 101. ‫کد زير را نگاه کنيد:‬ ‫‪if (n%d;") cout << "n is not a multiple of d‬‬ ‫دسسستور خروجسسي فقسسط وقتسسي كه ‪n%d‬‬ ‫ناصسفر اسست اجرا مي‌گردد و ‪ n%d‬وقتي‬ ‫ناصفر است که ‪ n‬بر ‪ d‬بخش‌پذير نباشد.‬ ‫گاهسسي ممکسسن اسسست فراموش کنيسسم که‬ ‫عبارات منطقي مقادير صحيح دارند و اين‬ ‫فراموشي باعث ايجاد نتايج غير منتظره و‬ ‫نامتعارف شود.‬
  • 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. ‫دستور‌هاي انتخاب تودرتو -8‬ ‫دس تورهاي انتخاب مي‌توانن د مانند‬ ‫دس تورالعملهاي مرك ب به كار روند .‬ ‫‌‬ ‫به اي ن ص ورت ک ه ي ك دستور انتخاب‬ ‫مي‌توان د درون دس تور انتخاب ديگر‬ ‫اس تفاده شود . به اين روش، جملت‬ ‫تودرتو مي‌گويند.‬
  • 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. ‫9- ساختار ‪else if‬‬ ‫دسسستور ‪ if..else‬تودرتسسو، اغلب براي‬ ‫بررسسي مجموعه‌اي از حالت‌هاي متناوب يا‬ ‫موازي بسه كار مي‌رود. در ايسن حالت فقط‬ ‫عبارت ‪ else‬شامسل دسستور ‪ if‬بعدي خواهد‬ ‫بود. ايسن قبيسل کدهسا را معمول بسا ساختار‬ ‫‪else if‬مي‌سازند.‬
  • 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. switch ‫01- دستورالعمل‬ else ‫ مي‌تواند به جاي ساختار‬switch ‫دستور‬ ‫ براي بررسي مجموعه‌اي از حالت‌هاي‬if ‫متناوب و موازي بسسه كار رود. نحسسو دستور‬ :‫ به شکل زير است‬switch switch (expression) { case constant1: statementlist1; case constant2: statementlist2; case constant3: statementlist3; : :
  • 108. ‫اين دستور ابتدا ‪ expression‬را برآورد‬ ‫مي‌كند و سپس ميان يکت‌هاي ‪ case‬به دنبال‬ ‫عبارت اختياري‬ ‫عبارت ‪ default‬ثاب‬ ‫مقدار . يعنسي مي . اگر‬ ‫اسست آن مي‌گردد‌توانيسم مقدار مربوطه از ميان‬ ‫در دستور ‪switch‬‬ ‫ثابت‌هاي فهرسسست.‌شده يافسست شسسد، دستور‬ ‫آن را قيسد نکنيم ‪ expression‬بايسد به‬ ‫‪ statementlist‬مقابسسل ارزيابي‪ case‬اجرا‬ ‫شود و‬ ‫شکسل يسك نوع صسحيح آن‬ ‫مي‌شود. اگسر مقدار مورد نظسر ميان ‪case‬ها‬ ‫‌‬ ‫‪constant‬ها بايسسد ثابتهاي صحيح‬ ‫يافست نشسد و عبارت ‪ default‬وجود داشت،‬ ‫باشند.‬ ‫دسسستور ‪ statementlist‬مقابسسل آن اجرا‬ ‫مي‌شود.‬
  • 109. ‫لزم اسسست در انتهاي هسسر ‪ case‬دستور‌‬ ‫‪ break‬قرار بگيرد. بدون ايسسن دستور،‬ ‫اجراي برنامسسه پسسس از ايسسن كه ‪case‬‬ ‫مربوطسه را اجرا کرد از دستور ‪switch‬‬ ‫خارج نمي‌شود، بلکسسه هم ۀ ‪case‬هاي‬ ‫زيريسن را هسم خسط بسه خسط مي‌پيمايد و‬ ‫دسستورات مقابسل آن‌سها را اجرا مي‌کند. به‬ ‫اين اتفاق، تلۀ سقوط مي‌گويند.‬ ‫;‪case constant1: statementlist1;break‬‬
  • 110. ‫11- عملگر عبارت شرطي‬ ‫در اي ن عملگر ابتدا شرط ‪condition‬‬ ‫عملگر عبارت شرطي يکي از درست‬ ‫بررسي مي‌شود. اگر اين شرط امکاناتي‬ ‫بود، حاص لسستک ل عبارتدر کدنويسي‬ ‫برابر با‬ ‫اختصسسار‬ ‫اسسست کسسه جه‬ ‫تدارک ديده شدهمي‌شود وسسناگر شرط را‬ ‫1‪ expression‬اسسست. اي عملگر‬ ‫منادرست بود، حاصل کل ‪ if..else‬به کار‬ ‫ي‌توانيم به جاي دستور عبارت برابر با‬ ‫2‪ expression‬مي‌شود. ‌‬ ‫ببريم. اين عملگر از نشانههاي ? و : به‬ ‫شکل زير استفاده مي‌كند:‬ ‫;2‪condition ? expression1 : expression‬‬
  • 111. ‫مثل در دستور انتساب زير:‬ ‫;) ‪min = ( x<y ? x : y‬‬ ‫اگر ‪ x<y‬باشد مقدار ‪ x‬را درون ‪min‬‬ ‫قرار مي‌دهد و اگر ‪ x<y‬نباشد مقدار‬ ‫‪ y‬را درون ‪ min‬قرار مي‌دهد. يعني‬ ‫به همي ن س ادگي و اختصار، مقدار‬ ‫کمين ۀ ‪ x‬و ‪ y‬درون متغير ‪ min‬قرار‬ ‫مي‌گيرد.‬
  • 112. ‫21- كلمات كليدي ‌‬ ‫اکنون با کلماتي مثل ‪ if‬و ‪ case‬و ‪float‬‬ ‫آشنا شديم. دانستيم که اين کلمات براي‬ ‫يك‌ كلممۀ كليدي در يك زبان‬ ‫برنامه‌نويس ي كلم دارند. از اين کلمات‬ ‫ه‌اي اس ت كه از‬ ‫‪ ++C‬معاني خاصي‬ ‫نمي‌توان به عنوان نام يک متغير يا هر‬ ‫قب ل تعريف شده و براي هدف‬ ‫منظور ديگري استفاده کرد و فقط بايد‬ ‫براي انجام منظور شده است.‬ ‫همان کار خاص استفاده‬ ‫مشخصي‬ ‫شوند. مثل کلم ۀ ‪ float‬فق ط بايد براي‬ ‫معرفي يک نوع اعشاري به کار رود.‬
  • 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. 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. typedef typoid typename using union unsigned virtual void volatile wchar_t while xor xor_eq
  • 116. ‫دو نوع كلمۀ كليدي وجود دارد:‬ ‫1- كلم ه ‌هاي رزرو شد ه‌‌‬ ‫2- شناس ه ‌هاي استاندارد.‬ ‫يك كلم ۀ رزرو شده كلمه‌اي اس ت ک ه يک‬ ‫دس تور خاص از آن زبان را نشان مي‌دهد.‬ ‫كلمۀ كليدي ‪ if‬و ‪ else‬كلمات رزرو شده‬ ‫يك شناسۀ استاندارد كلمه‌اي است كه يك نوع‬ ‫هستند.‬ ‫دادۀ اس تاندارد از زبان را مشخص مي‌كند.‬ ‫كلمات كليدي ‪ bool‬و ‪ int‬شناسه‌هاي‬ ‫استاندارد هستند‬
  • 119. ‫:آنچه در اين جلسه مي خوانيد‬ ‫1- دستور ‪while‬‬ ‫2- خاتمه دادن به يك حلقه‬ ‫3- دستور ‪do..while‬‬ ‫4- دستور ‪for‬‬ ‫5- دستور ‪break‬‬ ‫6- دستور ‪continue‬‬ ‫7- دستور ‪goto‬‬ ‫8- توليد اعداد شبه تصادفي‬
  • 120. ‫هدف‌هاي رفتاري:‬ ‫هدف کلي:‬ ‫انتظار مي‌رود پس از مطالعۀ اين جلسه بتوانيد:‬ ‫- نحو دستورانواع را شناخته و از آن براي ايجاد نحو استفاده‬ ‫شناخت ‪ while‬ساختارهاي تکرار و حلقه آن‌ها‬ ‫کنيد.تبديل آن‌ها به يکديگر.‬ ‫و‬ ‫- نحو دستور ‪ do..while‬را شناخته و تفاوت آن با‬ ‫دستور ‪ while‬را بيان کنيد.‬ ‫- نح و دس تور ‪ for‬را شناخت ه و ب ا اس تفاده از آن‬ ‫حلقه‌هاي گوناگون بسازيد.‬ ‫- حلقه‌هاي فوق را به يکديگر تبديل کنيد.‬ ‫- علت استفاده از »دستورات پرش« را ذکر کرده‬ ‫و تفاوت سه دستور ‪ break‬و ‪ continue‬و ‪ goto‬را‬ ‫بيان کنيد.‬
  • 121. ‫مقدمه‬ ‫تكرار، اجراي پي در پي يك دستور يا بلوكي‬ ‫از دس تورالعمل‌ها در ي ك برنام ه اس ت. با‬ ‫اس تفاده از تکرار مي‌تواني م کنترل برنامه را‬ ‫مجبور کنيم تا به خطوط قبلي برگردد و آن‌ها‬ ‫را دوباره اجرا نمايد.‬ ‫‪ ++C‬داراي س ه دس تور تكرار اس ت: دستور‬ ‫‪ ،while‬دس تور ‪ do_while‬و دستور ‪.for‬‬ ‫دس تور‌هاي تکرار ب ه عل ت طبيعت‬
  • 122. ‫1- دستور ‪while‬‬ ‫نحو دستور ‪ while‬به شکل زير است:‬ ‫;‪while (condition) statement‬‬ ‫به جاي ‪ ، condition‬يك شرط قرار مي‌گيرد و به‬ ‫جاي ‪ statement‬دستوري که بايد تکرار شود قرار‬ ‫مي‌گيرد. اگ ر مقدار شرط، ص فر)يعن ي نادرست(‬ ‫باشد، ‪ statement‬ناديده گرفته مي‌شود و برنامه‬ ‫به اولي ن دس تور بع د از ‪ while‬پرش مي‌كند. اگر‬ ‫مقدار شرط ناص فر)يعني‌ درس ت( باشد،‬ ‫‪ statement‬اجرا ‌شده و دوباره مقدار شرط‬ ‫بررسي مي‌شود. اين تکرار آن قدر ادامه مي‌يابد‬
  • 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. ‫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. ‫* مثال‌ 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. ‫بسرسنساسم س ۀزسسسسيسسرس، هسسمسس ۀاسسسسعسدساسدس فسسيبوسنساسچسسيسس رساس تسساس يسك س مسحسدسوسدس ۀ‬ ‫مسشسسخسسصسس کسسهس اسزس وسرسوسدسيس دسرسيساسفسسستس مسيسس‌سسشوسدس، مسحساسسسسبهس وس‬ ‫چسساسپس مسيسس‌سسكندس:‬ ‫)(‪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. ‫مثال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. ‫متوقف کردن يك حلقۀ نامتناهي :‬ ‫با فشردن کليدهاي ‪ Ctrl+C‬سيستم عامل‬ ‫يک برنام ه را ب ه اجبار خاتم ه مي‌دهد. كليد‬ ‫‪ Ctrl‬را پايي ن نگ ه داشت ه و كليد ‪ C‬روي‬ ‫صفحه‌كليد خود را فشار دهيد تا برنامۀ فعلي‬ ‫خاتمه پيدا کند.‬
  • 129. ‫3- دستور ‪do..while‬‬ ‫س اختار ‪ do..while‬روش ديگري براي س اختن حلقه‬ ‫است. نحو آن به صورت زير است:‬ ‫;)‪do statement while (condition‬‬ ‫به جاي دستور ابتدا ‪ ‌ statement‬را مي‌گيرد و‬ ‫اي ن ‪ condition‬يك شرط قرار اجرا‬ ‫به مي‌كن ‪‌ statement‬شرطتور ي ا بلوکيراقرار‬ ‫جاي د و سپس دس ‪condition‬‬ ‫ميبررس که قرار استر شرط درست بود‬ ‫‌گيرد ي مي‌كند. اگ تکرار شود.‬ ‫حلقه دوباره تکرار مي‌شود وگرنه حلقه‬ ‫پايان مييابد.‬ ‫‌‬
  • 130. ‫دستور‌ ‪ do..while‬مانند دستور ‪while‬‬ ‫است. با اين فرق كه شرط کنترل حلقه‬ ‫به نتيج ۀ ديگ که اي ن اس تحلقه حلقۀ‬ ‫ارزيابي‬ ‫جاي اين ر در ابتداي ك ه‬ ‫‪ do..while‬هميش ه بدون توج ه به‬ ‫گردد، در انتهاي حلقه ارزيابي ميشود.‬ ‫‌‬ ‫مقدار شرط كنترل، لاقل يك بار اجرا‬ ‫مي‌شود متغيرحلق ۀ ‪ while‬مي‌تواند كه‬ ‫يعني هر ام ا كنترلي به جاي اين‬ ‫قب اصل اجرا نشود. حلق ه تنظيم شود،‬ ‫ل از شروع‬ ‫مي‌تواند درون آن تنظيم گردد.‬
  • 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. ‫* مثال 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. ‌ ،‫برنام ۀزسسسيرم‌سسسس ۀ ‌ اعداد فاكتوريال را که از عدد داده شده کوچک‌ترند‬ ‫ه‬ ‌ :‫چاپ ميکند‬ ()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. ‫4 - دستور ‪for‬‬ ‫نحو دستورالعمل ‪ for‬به صورت زير است:‬ ‫;‪for (initialization; condition; update) statement‬‬ ‫سه قسمت داخل پرانتز، حلقه را کنترل مي‌کنند.‬ ‫عبارت ‪ initialization‬تعيي ن اعلنمتغير‬ ‫عبارت ‪update‬براي براي بردن يا‬ ‫اي ن ک ه آيا‬ ‫عبارت ‪ condition‬براي پيش‌‬ ‫کنترل حلق ه اولي هکار يامي‌رود کنترلم عبارت‬ ‫مقداردهي ب ه به متغي ر . اينحلقه‬ ‫حلقه بايد تکرار شود خير به کار ي‌رود.‬ ‫پس تفاده مي‌شود.اي ن عبارت اولين‬ ‫اس از اجراي‬ ‫يعني اين عبارت، ‪ statement‬ارزيابي‬ ‫شرط کنترل حلقه است.‬ ‫مي‌گردد.است که ارزيابي مي‌شود پيش‬‫عبارتي‬ ‫اگ ر اي ن شرط درس ت باش د دستور‬ ‫از اين که نوبت به تکرارها برسد.‬ ‫‪ statement‬اجرا مي‌شود.‬
  • 135. ‫بنابرايسن زنجير ۀوسسسسقايعسسي که تکرار را ايجاد‬ ‫مي‌کنند عبارتند از:‬ ‫1 – ارزيابي عبارت ‪initialization‬‬ ‫2 – بررسي شرط ‪ . condition‬اگر نادرست‬ ‫باشد، حلقه خاتمه مي‌يابد.‬ ‫3عبارت‌هاي ‪ initialization statement‬و‬ ‫– اجراي‬ ‫4 – ارزيابي عبارت و ‪update‬عبارت‌هاي‬ ‫‪update condition‬‬ ‫5 – تکرار گام‌هاي 2 تا مي‌توانيسم آن‌ها را در‬ ‫اختياري هسستند. يعنسي 4‬ ‫حلقه ذکر نکنيم.‬
  • 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. ‫مثال 421- يك حلق ۀ ‪ for‬نزولي‬ ‫برنام ۀزسسسير‌ ده عدد صحيح مثبت را به ترتيب نزولي چاپ مي‌كند:‬ ‫)(‪int main‬‬ ‫)--‪{ for (int i=10; i > 0; i‬‬ ‫;‪cout << " " << i‬‬ ‫}‬
  • 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. ‫ تودرتو‬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. ‫5- دستور ‪break‬‬ ‫وقت ي دستور ‪ break‬درون‬ ‫دستور ‪ break‬يک دستور آشناست. قبل از‬ ‫آن حلقخاتمه تودرتبهو استفاده‬ ‫دستور ‪ switch‬و‬ ‫دادن‬ ‫براي ه‌هاي‬ ‫همچنين حلقه ط روي حلق و‌اي که‬ ‫‪do..while‬‬ ‫شود، فق ‌هاي ‪ while‬ه‬ ‫اس مس تقيماهدرون از ناي قرار گرفته‬ ‫ن دستور براي‬ ‫تفاده کرد ‌ايم. آ‬ ‫خاتم تاثير مي‌گذارد.‬ ‫ه دادن ب ه حلق ۀ ‪ for‬ني ز مي‌توانيم‬ ‫حلقه‌هاي بيرون ي بدون هيچ‬ ‫استفاده کنيم.‬ ‫تغييري ادامه مي‌يابند.‬ ‫دستور ‪ break‬در هر جايي درون حلقه‬ ‫مي‌تواند جا بگيرد و در همان جا حلقه را‬ ‫خاتمه دهد.‬
  • 141. ‫6- دستور ‪continue‬‬ ‫دس تور ‪ break‬بقي ۀ دستورهاي درون‬ ‫بلوك حلق ه را ناديده گرفت ه و ب ه اولين‬ ‫‌‌دستور بيرون حلقه پرش مي‌كند. دستور‬ ‫‪ continue‬اين دستور، ادامۀ‬ ‫نيز شبيه همين است اما به‬ ‫جاي اين که حلقهفعلي را لغو‬ ‫را خاتمه دهد، اجرا را‬ ‫چرخۀ‬ ‫کرده و اجراي دور‬ ‫به تكرار بعدي حلقه منتقل مي‌كند.‬ ‫بعدي حلقه را آغاز‬ ‫ميکند.‬ ‫‌‬
  • 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. ‫7- دستور ‪goto‬‬ ‫دستورهاي‬ ‫دسستور ‪ goto‬نوع ديگري از‬ ‫توسسسط يك‬ ‫پرش اسسست. مقصسسد ايسسن پرش‬ ‫برچسب معين مي‌شود.‬ ‫برچ سب شناسسه‌اي اسست كسه جلوي آن‬ ‫علمست كولسن) : ( مي‌آيسد و جلوي يك دستور‬ ‫ديگر قرار مي‌گيرد.‬ ‫يک مزيت دستور ‪ goto‬اين است که با‬ ‫استفاده از آن مي‌توان از همۀ حلقه‌هاي‬ ‫تودرتو خارج شد و به مکان دلخواهي در‬
  • 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; } }