زبان برنامه نویسی C++
در نمایش آنلاین پاورپوینت، ممکن است بعضی علائم، اعداد و حتی فونتها به خوبی نمایش داده نشود. این مشکل در فایل اصلی پاورپوینت وجود ندارد.
- جزئیات
- امتیاز و نظرات
- متن پاورپوینت
برچسبهای مرتبط
- Borland c++
- انواع حلقه ها
- برنامه نویسی
- برنامه نویسی C++
- برنامه نویسی به زبان ++C
- پاورپوينت زبان برنامه نويسی C++
- پاورپوینت
- پاورپوینت آماده
- پاورپوینت رایگان
- تاریخچه C++
- تاریخچه مختصر C++
- حلقه های تودرتو
- دانشگاه آزاد اسلامی
- دانلود پاورپوینت
- دانلود پاورپوینت آماده
- دانلود پاورپوینت رایگان
- دستور IF
- زبان برنامه نویسی
- زبان برنامه نویسی C++
- زبان های برنامهنويسی
- ساختارهای تصمیم گیری
- عملگر رابطه ای
- عملگر شرطی
- مراحل الگوریتم
- ویژوال استودیو
امتیاز
زبان برنامه نویسی C++
اسلاید 1: برنامه نويسي C++ محمد رضا ملک شاهکویی mamad.malek@gmail.comWWW.MrMalek.Irسایت و انجمن علمی تخصصی مهندسی شیمیSUTCHE.COMدانشگاه آزاد اسلامی واحد گرگان گروه مهندسي كامپيوتر و فناوري اطلاعات
اسلاید 2: 2منابع:برنامه نویسی به زبان ++ C ، نویسنده: جعفرنژاد قمیکتاب آموزش زبان برنامه نویسی ++ C دایتل دایتل ابزارها و نرم افزارهاي مورد نياز: نرم افزارهاي آفيس و ويژوال استوديو 2008 Borland c++, آدرس پست الکترونيکي: mamad.malek@gmail.com
اسلاید 3: 3Course Evaluation Schemeامتحان پايان ترم: 14 نمرهامتحان ميان ترم: 5 نمره تمرین های کلاسی و شرکت در بحث کلاس: 1 نمره
اسلاید 4: جايگاه اين درس در رشته مهندسي کامپيوتر و مهندسي IT اين درس اولين درس دانشگاهي رشته مي باشد و نقطه شروعي براي ورود به دنياي جالب برنامه نويسي و علم و فن کامپيوتر هست. بنابراين ياد گيري اصول اوليه برنامه نويسي در اين درس از جايگاه ويژه اي برخوردار است. اين درس پايه و اساس برنامه نويسي است که جزء اصول اين رشته مي باشد و اين اصول را به فرگيران ياد مي دهد . بنابراين يادگيري دقيق اين درس به همراه ارائه پروژه هاي عملي که لازمه اين درس مي باشد جزء اهم مسائل مي باشد .
اسلاید 5: اهداف درسالگوريتمي براي حل مسئله ارائه دهد. اصول و مباني اوليه نرم افزار و سخت افزار را بشناسد. اهداف و مفاهيم زبانهاي برنامه نويسي را بداند. مفاهيم اوليه برنامه نويسي ساخت يافته را بداند و اصول لازم را در مرحله اجراء بکار ببرد .دستورات زبان C++ را در برنامه ها بکار ببرد. از توابع و روال هاي استاندارد زبان C++ در صورت لزوم استفاده نمايد.از توابع ، روال ها براي جدا کردن قطعات برنامه استفاده کند.
اسلاید 6: زبان هاي برنامهنويسينرمافزارها توسط زبان هاي برنامهنويسي نوشته ميشوند. زبان هاي برنامهنويسي، يك سيستم ارتباطي هستند كه توسط آن ها ميتوان دستورات لازم را به ماشين انتقال داد. هر زبان برنامهنويسي به مجموعهأي از علايم، قواعد و دستورالعملها گفته ميشود كه امكان ارتباط با كامپيوتر را جهت بيان كاري يا حل مسئلهاي فراهم ميكند.
اسلاید 7: در حالت كلي زبان هاي برنامهنويسي را به سه دسته زير تقسيمبندي ميكنند: زبان هاي سطح بالا زبان هاي سطح پايين زبان هاي سطح مياني كامپايلر برنامه نوشته در يك زبان سطح بالا را به برنامه مقصد تبديل ميكند.
اسلاید 8: جلسه اول: الگوریتم ها
اسلاید 9: هدفهاي كليشناخت اجزاء لازم براي حل مسئله شناخت حل مسئله و ارائه الگوريتم بررسي صحت الگوريتم
اسلاید 10: هدفهاي رفتاري الگوريتمي را براي حل مسئله ارائه دهد. الگوريتم هاي مختلف براي يک مسئله را مقايسه کند. شرط ها و حلقه ها را در الگوريتم بکار ببرد . دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 11: مقدمه در زندگي روزمره، انسان با مسائل مختلفي روبروست و براي هر كدام از اين مسائل (حل مشكلات) راه حلي و روشي را بر ميگزيند. مسائلي از قبيل راه رفتن، غذا خوردن، خوابيدن و غيره كه بشر تقريباً هر روز آنها را پيش روي خود دارد. همه اين مسائل نياز به روشي براي حل كردن دارند مثلا راه رفتن بايد با ترتيب خاصي و مراحل معيني انجام شود. تا مسئله راه رفتن براي بشر حل شود. اصطلاحاً روش انجام كار يا حل مسئله را الگوريتم آن مسئله مينامند.
اسلاید 12: تعريف الگوريتمهر دستورالعملی که مراحل انجام کاری را با زبانی دقیق و با جزئیات کافی بیان نماید بطوریکه ترتیب مراحل و شرط خاتمه عملیات در آن کاملا“ مشخص شده باشد را الگوریتم گویند. به عبارتي ديگر: الگوريتم مجموعهاي از دستورالعمل ها، براي حل مسئله ميباشد كه شرايط زير را بايد دارا باشد: دقيق باشد جزئيات كامل حل مسئله را داشته باشد.پايانپذير باشد.
اسلاید 13: مراحل الگوريتم براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم). كه اصطلاحاً طراحي الگوريتم براي آن مسئله ناميده ميشود. در طراحي الگوريتم معمولاً سه مرحله زير را از هم جدا ميكنند: خواندن دادهها انجام محاسبات خروجيها
اسلاید 14: مثال : الگوريتمي بنويسيد كه دو عدد از ورودي دريافت كرده مجموع دو عدد را محاسبه و چاپ نمايد. خروجيها انجام محاسبات ورودي ها مجموع دو عدد جمع دو عدد a , b 0ـ شروع 1ـ b ,a را بخوان.2ـ مجموع b , a را محاسبه و در sum قرار بده.3ـ sum را در خروجي چاپ كن 4ـ پايان
اسلاید 15: خروجيها انجام محاسبات ورودي ها چاپ مجموع محاسبه مجموع a چاپ ميانگين محاسبه ميانگين b مثال: الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع و ميانگين سه عدد را محاسبه و چاپ كند.0ـ شروع1ـ سه عدد از ورودي بخوان2ـ مجموع سه عدد را محاسبه و در sum قرار بده.3ـ sum را بر سه تقسيم كرده،در ave قرار بده.4ـ ave , sum را در خروجي چاپ كن.5ـ پايان.c
اسلاید 16: معمولا درك يك الگوريتم با شكل راحت تر از نوشتن آن بصورت متن ميباشد. لذا الگوريتم را با فلوچارت(flowchart) نمايش ميدهند. فلوچارت از شكلهاي زير تشكيل ميشود.BeginEndخواندن يا Readچاپ کردن writeعلامتهاي شروع و پايان: كه معمولا از يك بيضي استفاده ميكنند: علامتهاي ورودي و خروجي: كه معمولا از متوازيالاضلاع استفاده ميشود:
اسلاید 17: علامتهاي محاسباتي و جايگزيني: براي نمايش دستورات جايگزيني و محاسباتي از مستطيل استفاده ميكنند:جايگزين يا محاسباتعلامت اتصال: براي اتصال شكلهاي مختلف بهم از فلشهاي جهتدار استفاده ميكنند.شرطعلامت شرط: براي نمايش شرط از لوزي استفاده ميشود.
اسلاید 18: BeginRead(a,b,c)Sum a+b+cAve sum/3Write(sum,ave)Endفلوچارت مجموع سه عدد
اسلاید 19: مثال: فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده سپس محتويات دو عدد را با هم جابجا نمايد.براي حل اين مسئله b , a را دو متغير كه در آنها دو عدد خوانده شده، قرار ميگيرند در نظر ميگيريم. سپس با استفاده از يك متغير كمكي محتويات اين دو عدد را جابجا ميكنيم :
اسلاید 20: 1215tempab121512abtemp151512abtemp151212abtemp
اسلاید 21: BeginRead(a,b)temp aa bWrite(a,b)Endb tempفلوچارت مسئله بالا بصورت زير خواهد بود:
اسلاید 22: تمرين1ـ فلوچارتي رسم نمائيد كه طول و عرض مستطيل را از ورودي دريافت كرده محيط و مساحت آنرا محاسبه و چاپ كند.2ـ فلوچارتي رسم نمائيد كه شعاع دايرهاي را از ورودي دريافت كرده، محيط و مساحت آنرا محاسبه و چاپ نمايد.3ـ فلوچارتي رسم كنيد كه سه عدد Third , second, first را از ورودي دريافت كرده، محتويات آن ها را جابجا نموده، حاصل را در خروجي چاپ كند.4ـ فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده، سپس محتويات دو عدد را بدون استفاده از متغير كمكي جابجا كند.5ـ فلوچارتي رسم نمائيد كه عددي (درجه حرارت برحسب سانتيگراد) را از ورودي دريافت كرده سپس آن را به درجه فارنهايت تبديل كند.
اسلاید 23: دستورالعملهاي شرطي در حل بسياري از مسائل يا تقريباً تمام مسائل نياز به استفاده از شروط جزء، نيازهاي اساسي محسوب ميشود. همانطور كه ما خودمان در زندگي روزمره با اين شرطها سركار داريم. بطور مثال اگر هوا ابري باشد ممكن است چنين سخن بگوييم: اگر هوا باراني باشد سپس چتري برميدارم. در غير اينصورت چتر برنميدارم.
اسلاید 24: در حالت كلي شرط را بصورت زير نمايش ميدهند:If شرط يا شروط thenعمل يا اعمالNOyesعمل يا اعمال بعدي
اسلاید 25: مثال : فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، فرد يا زوج بودن آن را تشخيص دهد.
اسلاید 26: مثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد را پيدا كرده در خروجي چاپ نمايد.
اسلاید 27: مثال : فلوچارتي رسم نمائيد كه سه عدد از ورودي دريافت كرده، كوچكترين عدد را يافته در خروجي چاپ نمايد:
اسلاید 28: نمونه اجراي فلوچارت بالا بصورت زير ميباشد:خروجa b c Min1112 11 17 1211111112345
اسلاید 29: تمرين1- فلوچارتي رسم كنيد که عددي را از ورودي دريافت كرده، قدر مطلق عدد را در خروجي چاپ كند.2- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده مثبت، منفي يا صفر بودن عدد را تشخيص داده، در خروجي با پيغام مناسب چاپ كند.3- فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، بخش پذيري آن بر 3 و 5 را بررسي نمايد.4ـ فلوچارتي رسم نمائيد كه ضرايب يك معادله درجه دوم را از ورودي دريافت كرده، ريشههاي آن را محاسبه در خروجي چاپ كند.
اسلاید 30: حلقههادر حل بسياري از مسائل با عملياتي روبرو ميشويم ، كه نياز به تكرار دارند و عمل تكرار آن ها به تعداد مشخصي انجام ميگيرد. فرض كنيد، بخواهيم ميانگين 100 عدد را محاسبه كنيم، در اينصورت منطقي بنظر نميرسد كه 100 متغير مختلف را از ورودي دريافت كنيم سپس آن ها را جمع كنيم.
اسلاید 31: انواع حلقه هاحلقه هاي با تکرار مشخصحلقه هاي با تکرار نامشخص
اسلاید 32: حلقه هاي با تکرار مشخصدر اين نوع حلقهها تعداد تكرار مشخص ميباشد اين حلقه از اجزاء زير تشكيل ميشود:1ـ انديس حلقه 2ـ مقدار اوليه براي انديس حلقه 3- مقدار افزاينده براي انديس حلقه (معمولا يك واحد در هر مرحله)4ـ مقدار نهايي (تعداد تكرار حلقه)5ـ شرطي براي كنترل تعداد تكرار حلقه
اسلاید 33: اين حلقهها را غالباً با فلوچارت بصورت زير نمايش ميدهند:شرطي براي كنترل تعداد تكرار حلقه: i<=nانديس حلقه : iمقدار اوليه براي انديس حلقه : 1مقدار افزاينده براي انديس حلقه (معمولا يك واحد در هر مرحله) : +1مقدار نهايي (تعداد تكرار حلقه): n
اسلاید 34: مثال : فلوچارتي رسم نمائيد كه عدد n را از ورودي دريافت كرده، مجموع اعداد از يك تا n را محاسبه كند.i انديس حلقه n مقدار نهايي
اسلاید 36: خروجيN i sum 155 1 0 2 13 34 6 5 106 15نمونه اجراي فلوچارت بالا بصورت زير است:
اسلاید 37: مثال : فلوچارتي رسم كنيد كه n عدد از ورودي دريافت كرده، بزرگترين مقدار از بين n عدد را پيدا كرده در خروجي چاپ نمايد.انديس حلقه iمقدار نهايي nبزرگترين مقدار Max
اسلاید 39: مثال : فلوچارتي رسم نمائيد كه n , x ، دو عدد صحيح مثبت را از ورودي دريافت كرده سپس x به توان n را محاسبه كند.انديس حلقه iمقدار نهايي nعدد به توان n pow
اسلاید 41: حلقههايي كه تعداد تكرار آن ها مشخص نيست.در اين حلقهها با توجه به ورودي، تعداد تكرار مشخص ميشود. و دقيقاً نميتوان تعداد تكرار حلقه را بدون ورودي معين كرد. اين حلقه ها فقط شامل شرطي هستند كه تا زمانيكه برقرار باشد حلقه اجرا ميشود.
اسلاید 42: در حالت كلي اين نوع حلقهها بصورت زير نمايش داده ميشوند:
اسلاید 43: مثال: فلوچارتي رسم كنيد كه عددي را از ورودي دريافت كرده سپس تعداد ارقام آن را شمرده در خروجي چاپ نمايد.عدد خوانده شده N تعداد ارقام count
اسلاید 45: مثال : فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، سري فيبوناچي قبل از آن را توليد نمايد.در حالت كلي جملات سري بصورت:fk=fk-1+fk-2عدد خوانده شدهNجمله سوم سري f3جمله دوم سري f2جمله اول سري f1
اسلاید 47: تمرين 1- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، كامل بودن آن را بررسي نمايد. (عدد كامل، عددي است كه مجموع مقسومعليههاي آن با خودش برابر باشد.)2- فلوچارتي رسم كنيد كه N را از ورودي دريافت كرده، N جمله سري فيبوناچي را توليد نمايد.3ـ فلوچارتي رسم نمائيد كه دو عدد N , M را از ورودي خوانده، بزرگترين مقسومعليه مشترك دو عدد را محاسبه و چاپ كند.
اسلاید 48: حلقههاي تودرتو الگوريتمهايي كه تا حال بكار برديم، فقط شامل يك حلقه بودند. در صورتي كه در بسياري از مسائل ممكن است نياز به استفاده از چند حلقه در داخل هم باشيم. در اين نوع حلقهها بايد دقت بيشتري به خرج دهيم، تا مشكلي پيش نيايد. اگر از حلقههاي نوع اول بصورت تودرتو استفاده كنيم در اينصورت براي هر حلقه شرط نهايي و انديس اوليه جداگانه بايد تعريف كنيم .
اسلاید 49: در حلقههاي تودرتو به ازاي يكبار تكرار حلقه اوليه، حلقه داخلي به اندازه مقدار نهايي خود تكرار ميشود. در كل اگر حلقه اوليه n بار تكرار شود و حلقه داخلي m بار، در اينصورت كل حلقه : بار تكرار خواهد شد.n بارm بار
اسلاید 50: فلوچارت حلقههاي تودرتو را ميتوان بصورت زير نشان داد:n بارm بار
اسلاید 51: انديس حلقه اول i ورودي N محاسبه فاكتوريل fact انديس حلقه داخلي j مجموع Sum مثال : فلوچارتي رسم نمائيد كه N را از ورودي دريافت كرده، مجموع سري زير را محاسبه نمايد:
اسلاید 52: Sum ← Sum + i/factایا راه ساده تری وجود دارد؟
اسلاید 54: تمرينات آخر فصل1- فلوچارتي رسم نمائيد كه N عدد از ورودي دريافت كرده تعداد اعداد اول و كامل را شمرده در خروجي چاپ نمايد.2- فلوچارتي رسم نمائيد كه N , X را از ورودي خوانده مقدار سري زير را محاسبه كند: 3- فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده مقلوب عدد را محاسبه و در خروجي چاپ كند.4ـ فلوچارتي رسم كنيد كه تاريخ تولد شخصي را از ورودي خوانده، سن شخص را با تاريخ روز، محاسبه نموده در خروجي چاپ كند.5- فلوچارتي رسم نمائيد كه (m>n) N ,M را از ورودي دريافت كرده سري فيبوناچي بين N ,M را توليد كرده، در خروجي چاپ كند.+2
اسلاید 55: برنامه نویسی به زبان C++
اسلاید 56: فهرست مطالبفصل اول : مقدمات زبان C++فصل دوم : ساختار های تصمیم گیری و تکرارفصل سوم : سایر ساختار های تکرارفصل چهارم : اعداد تصادفیفصل پنجم : آرایه هافصل ششم : توابعفصل هفتم : ساختارها و اشاره گرها
اسلاید 57: فصل اول مقدمات C++
اسلاید 58: فهرست مطالب فصل اولعملگر انتسابعملگر های محاسباتیعملگرهای افزایش و کاهشعملگر sizeofعملگرهای جایگزینی محاسباتیاولویت عملگرهاتوضیحات (Comments)توابع کتابخانهبرنامه در C++تاریخچه مختصرقانون نامگذاری شناسه هامتغیر هااعلان متغیرتخصیص مقادیر به متغیرداده های از نوع کرکترکرکتر های مخصوصرشته هانمایش مقادیر داده هادریافت مقادیر
اسلاید 59: تاریخچه مختصر C++ این زبان در اوائل دهه 1980 توسط Bjarne stroustrup در آزمايشگاه بل طراحي شده. اين زبان عملاً توسعه يافته زبان برنامه نويسي C می باشد كه امكان نوشتن برنامههاي ساخت يافته شئ گرا را ميدهد.
اسلاید 60: قانون نامگذاري شناسهها حروف كوچك و بزرگ در نامگذاري شناسهها متفاوت ميباشند. بنابراين Xy ، XY ، xY ، xy چهار شناسه متفاوت از نظر C++ ميباشد.
اسلاید 61: قانون نامگذاري شناسهها2) در نامگذاري شناسهها از حروف الفباء، ارقام وزير خط (underscore) استفاده ميشود و حداكثر طول شناسه 31 ميباشد و شناسه بايستي با يك رقم شروع نگردد.
اسلاید 62: قانون نامگذاري شناسهها3) براي نامگذاري شناسهها از كلمات كليدي نبايستي استفاده نمود. در زير بعضي از كلمات كليدي داده شده است. لیست کامل کلمات کلیدی
اسلاید 63: متغيرها در اسلاید بعد به انواع داده ها اشاره می شود. متغير، مكاني در حافظه اصلي كامپيوتر ميباشد كه در آنجا يك مقدار را ميتوان ذخيره و در برنامه از آن استفاده نمود. قانون نامگذاري متغيرها همان قانون نامگذاري شناسهها ميباشد.
اسلاید 64: انواع داده ها
اسلاید 65: اعلان متغیرها در اسلاید بعد مثال هایی از اعلان متغیر ذکر شده است. قبل از آنكه در برنامه به متغيرها مقداري تخصيص داده شود و از آنها استفاده گردد بايستي آنها را در برنامه اعلان نمود.
اسلاید 66: براي اعلان متغيرx از نوع int : int x;برای اعلان متغيرهاي p و q را از نوع float كه هر كدام چهار بايت از حافظه را اشغال ميكنند :float p , q; برای اعلان متغير next از نوع كركتر كه ميتوان يكي از 256 كركتر را به آن تخصيص داد و يك بايت را اشغال ميكند. char next; چند مثال از اعلان متغیر ها :
اسلاید 67: تخصيص مقادير به متغيرها در اسلاید بعد مثال هایی از اعلان متغیر ذکر شده است.با استفاده از عملگر = ميتوان به متغيرها مقدار اوليه تخصيص نمود.
اسلاید 68: مثال : در دستورالعمل int x=26; X را از نوع int با مقدار اوليه 26 اعلان نموده .در دستورالعمل long int a=67000 , b=260; متغيرهاي b و a را از نوعlong int تعريف نموده با مقادير بترتيب 260 و 67000.
اسلاید 69: دادههاي از نوع كركتر براي نمايش دادههاي از نوع char در حافظه كامپيوتر از جدول ASCII استفاده ميشود. جدول اسكي به هر يك از 256 كركتر يك عدد منحصر بفرد بين 0 تا 255 تخصيص ميدهد.
اسلاید 70: كركترهاي مخصوص كامپيلر C++ بعضي از كركترهاي مخصوص كه در برنامه ميتوان از آنها براي فرمت بندي استفاده كرد را تشخيص ميدهد. تعدادي از اين كركترهاي مخصوص به همراه کاربرد آنها در اسلاید بعد آورده شده است .
اسلاید 71: كركترهاي مخصوصبعنوان مثال از كركتر a ميتوان براي ايجاد صداي beep استفاده نمود. char x = a ;
اسلاید 72: رشتهها رشته يا string عبارتست از دنبالهاي از كركترها كه بين قرار داده ميشود. در حافظه كامپيوتر انتهاي رشتهها بوسيله 0 ختم ميگردد. در اسلاید بعد به دو مثال دقت نمایید.
اسلاید 73: مثال 1 :BOOK STORE يك رشته ده كركتري ميباشد كه با توجه به كركتر 0 كه به انتهاي آن در حافظه اضافه مي شود جمعــاً يازده بايت را اشغال ميكند.
اسلاید 74: مثال 2 : دقت نمایید که w يك رشته ميباشد كه دو بايت از حافظه را اشغال ميكند در حاليكه w يك كركتر ميباشد كه يك بايت از حافظه را اشغال مينمايد.
اسلاید 75: نمايش مقادير دادهها براي نمايش دادهها بر روي صفحه مانتور از cout كه بدنبال آن عملگر درج يعني <<قيد شده باشد استفاده ميگردد. بايستي توجه داشت كه دوكركتر <پشت سر هم توسط C++ بصورت يك كركتر تلقي ميگردد.
اسلاید 76: مثال :برای نمایش پيغام good morning بر روی صفحه نمایش :cout << good morning;برای نمایش مقدار متغیر X بر روی صفحه نمایش :cout << x ;
اسلاید 77: دریافت مقادیر متغیرها به منظور دريافت مقادير براي متغيرها در ضمن اجراي برنامه از صفحه كليد، از cin كه بدنبال آن عملگر استخراج يعني >> قيد شده باشد ميتوان استفاده نمود.
اسلاید 78: مثال :int x;cout << Enter a number: ;cin >> x;
اسلاید 79: عملگر انتساب عملگر انتساب = ميباشد كه باعث ميگردد مقدار عبارت در طرف راست این عملگر ارزيابي شده و در متغير طرف چپ آن قرار گيرد.
اسلاید 80: مثال : x=a+b; x=35 ; x=y=z=26 ;از عملگرهاي انتساب چندگانه نيز ميتوان استفاده نمود. که مقدار سه متغير z و y و x برابر با 26 مي شود.
اسلاید 81: عملگرهاي محاسباتي در C++ پنج عملگر محاسباتي وجود دارد كه عبارتند از : اين عملگرها دو تائي ميباشند زيرا روي دو عملوند عمل مينمايند. از طرف ديگر عملگرهاي + و – راميتوان بعنوان عملگرهاي يكتائي نيز در نظر گرفت.
اسلاید 82: مثال 1 : در حالتي كه هر دو عملوند عملگرهاي % ، / ، * ، + ، – از نوع صحيح باشد نتيجه عمل از نوع صحيح ميباشد.
اسلاید 83: مثال 2 : در صورتيكه حداقل يكي از عملوندهاي عملگرهاي / ، * ، – ، + از نوع اعشاري باشد نتيجه عمل از نوع اعشاري ميباشد.
اسلاید 84: عملگرهاي افزايش و كاهش در C++ ، افزايش يك واحد به مقدار يك متغير از نوع صحيح را افزايش و بطور مشابه كاهش يك واحد از مقدار يك متغير از نوع صحيح را كاهش مينامند..
اسلاید 85: عملگرهاي افزايش و كاهش عملگر كاهش را با - - و عملگر افزايش را با ++ نمايش ميدهند. چون عملگرهاي ++ و - - فقط روي يك عملوند اثر دارند اين دو عملگر نيز جزء عملگرهاي يكتائي ميباشند.
اسلاید 86: مثال :سه دستور العمل :++x;x++;x= x+1;معادل ميباشند و بطريق مشابه سه دستورالعمل زير نیز معادل مي باشند. - - y ; y= y-1;y - - ;
اسلاید 87: از عملگرهاي ++ و -- ميتوان بدو صورت پيشوندي و پسوندي استفاده نمود. در دستورالعملهاي پيچيده عملگر پيشوندي قبل از انتساب ارزيابي مي شود و عملگر پسوندي بعد از انتساب ارزيابي ميشود.
اسلاید 88: مثال :int x=5;y=++x * 2;پس از اجراي دستورالعملهاي فوق : y=12X=6int x=5;y=x++ * 2;پس از اجراي دستورالعملهاي فوق :y=10X=6
اسلاید 89: عملگر sizeofSizeof ازعملگرهاي يكتائي مي باشد و مشخص كننده تعداد بايت هائي است كه يك نوع داده اشغال ميكند. مثال :int x;cout << sizeof x ; مقدار 2 نمايش داده ميشود .cout << sizeof(float) ; مقدار 4 نمايش داده مي شود.
اسلاید 90: عملگرهاي جايگزيني محاسباتي براي سادهتر نوشتن عبارتها در C++ ، ميتوان از عملگرهاي جايگزيني محاسبـــاتي استفاده نمود. %= /= *= -= += مثال: int a=1;a = a +1;int a=1;a += 1;
اسلاید 91: اولويت عملگرها ارزيابي مقدار يك عبارت رياضي براساس جدول اولويت عملگرها انجام ميگردد. در ذيل جدول اولويت عملگرها براساس بترتيب از بيشترين اولويت به كمترين اولويت داده شده است.
اسلاید 92: مثال 1 :(5+2) *(6+2*2)/2با توجه به جدول اولويت عملگرها داريم كه 7 *(6+2*2)/27*(6+4)/27* 10 /270 /235
اسلاید 93: مثال 2 :int a=6 , b=2, c=8, d=12;d=a++ * b/c ++;cout << d << c << b << a;خروجی :1 9 2 7
اسلاید 94: توضيحات (Comments) توضيحات در برنامه باعث خوانائي بيشتر و درك بهتر برنامه مي شود. بنابراين توصيه بر آن است كه حتي الامكان در برنامهها از توضيحات استفاده نمائيم. در C++، توضيحات بدو صورت انجام ميگيرد که در اسلایدهای بعد به آن اشاره شده است.
اسلاید 95: توضيحات (Comments)الف: اين نوع توضيح بوسيله // انجام ميشود. كه كامپيوتر هر چيزي را كه بعد از // قرار داده شود تا انتهاي آن خط اغماض مينمايد. مثال :c=a+b; //c is equal to sum of a and b ب: توضيح نوع دوم با /* شروع شده و به */ ختم ميشود و هر چيزي كه بين* / و */ قرار گيرد اغماض مينمايد .مثال : / * this is a program to calcufate sum of n integer numbers */
اسلاید 96: توابع كتابخانه زبان C++ مجهز به تعدادي توابع كتابخانه ميباشد. بعنوان مثال تعدادي توابع كتابخانه براي عمليات ورودي و خروجي وجود دارند. معمولاً توابع كتابخانه مشابه ، بصورت برنامههاي هدف (برنامه ترجمه شده بزبان ماشين) در قالب فايلهاي كتابخانه دسته بندي و مورد استفاده قرا رميگيرند. اين فايلها را فايلهاي header مينامند و داراي پسوند .h ميباشند.
اسلاید 97: نحوه استفاده از توابع کتابخانه ای براي استفاده از توابع كتابخانه خاصي بايستـــي نام فايل header آنرا در ابتداي برنامه در دستور #include قرار دهيم. > اسم فايل header < include#
اسلاید 99: برنامه در C++ اكنون باتوجه به مطالب گفته شده قادر خواهيم بود كه تعدادي برنامه ساده و كوچك به زبان C++ بنويسيم. براي نوشتن برنامه بايستي دستورالعملها را در تابع main( ) قرار دهيم و براي اينكار ميتوان به يكي از دو طريقی که در اسلایدهای بعد آمده است ، عمل نمود.
اسلاید 100: روش اول :#include < >int main( )}دستورالعمل 1 ;دستورالعمل 2 ;...n دستورالعمل ;return 0 ;}
اسلاید 101: روش دوم :#include < >void main( ){دستورالعمل 1 ;دستورالعمل 2 ;...n دستورالعمل ;}
اسلاید 102: error:به خطاهاي برنامه نويسي error مي گويند. ما در برنامه نویسی دو نوع خطا داریم:خطاهای دستوری (syntax error)خطاهای منطقی (logical error).
اسلاید 103: #include <iostream.h>int main( ){cout <<C++ is an object oriented language n ; return 0 ;} برنامه ای که پيغام C++ is an object oriented language را روي صفحه مانیتور نمايش مي دهد.
اسلاید 104: برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ تبديل مينمايد. #include <iostream.h>#include <stdlib. h> int main( ){ char c1 , c2;cout << Enter a lowercase letter: cin >> c1;c2 = toupper(c1);cout << c2 << endl;return 0; }
اسلاید 105: دو عدد از نوع اعشاري را گرفته مجموع و حاصلضرب آنها را محاسبه و نمايش ميدهد. #include <iostream.h>int main( ){float x,y,s,p ;cin >> x >> y ;s= x+y ;p=x*y;cout << s <<endl << p;return 0 ;}
اسلاید 106: فصل دوم ساختارهای تصمیم گیری و تکرار
اسلاید 107: فهرست مطالب فصل دومعملگر های رابطه ایعملگر شرطیدستورالعمل شرطیعملگر کاماعملگر های منطقیدستورالعمل For
اسلاید 108: عملگرهای رابطه ای از این عملگرها براي تعيين اينكه آيا دو عدد با هم معادلند يا يكي از ديگري بزرگتر يا كوچكتر ميباشد استفاده ميگردد. عملگرهاي رابطهاي عبارتند از:
اسلاید 109: عملگر شرطیشكل كلي عملگر شرطي بصورت زير ميباشد:عملگر شرطي تنها عملگري در C++ ميباشد كه داراي سه عملوند ميباشد. expression _ test ? expression _ true : expression _ false
اسلاید 110: مثال 1 :int x=10,y=20,b;b=(x>y) ? x : y ;اين دو دستور العمل باعث مي شوند كه ماكزيمم مقادير y و x در b قرار بگيرد. مثال 2 :x>=10 ? cout << passed : cout << failed ;اگر مقدار x بزرگتر يا مساوي ده باشد رشتة passed در غير اينصورت رشته failed نمايش داده مي شود.
اسلاید 111: دستورالعمل شرطي توسط این دستور شرطي را تست نموده و بسته به آنكه شرط درست يا غلط باشد عكسالعمل خاصي را نشان دهيم. IF if (عبارت ) { 1دستورالعمل ;. n دستورالعمل ; } else { 1 دستورالعمل ;. n دستورالعمل ; }
اسلاید 112: مثال 1 :if(x != y){cout << x ;++ x ;}else {cout << y ;- - y ; }
اسلاید 113: مثال 2:#include <iostream.h>#include <math . h>int main( ){float x,s;cin >> x ;if ( x < 0 )cout << x is negative << endl ; else {s = sqrt(x) ;cout << s << endl ; }return 0;}برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آن را محاسبه مينمايد.
اسلاید 114: عملگر كاما تعدادي عبارت را ميتوان با كاما بهم متصل نمود و تشكيل يك عبارت پيچيدهتري را داد. اين عبارتها به ترتيب از چپ به راست ارزيابي شده و مقدار عبارت معادل عبارتn ميباشد. (عبارت n , …. , عبارت 3 , عبارت 2 , عبارت 1)
اسلاید 115: مثال :اگر داشته باشيم int a=2 , b=4 , c=5 ; عبارت زير را در نظر بگيريد:(++ a , a+b, ++ c, c+b)مقدار عبارت برابر است با b+c كه معادل 10 ميباشد.
اسلاید 116: عملگرهای منطقیبا استفاده از عملگرهاي منطقي ميتوان شرط هاي تركيبي در برنامه ايجاد نمود. عملگرهاي منطقي عبارتست از :ANDORNOTكه در C++ به ترتيب بصورت زير نشان داده مي شود.&&||!
اسلاید 117: جدول درستی سه عملگر شرطیAndOrNot
اسلاید 118: چند مثال :if ((x= = 5) ||(y != 0)) cout << x << endl ;اگر x برابر با 5 يا y مخالف صفر باشد مقدار x نمايش داده شود . if(x) x = 0 ;اگر مقدار x مخالف صفر باشد، آنگاه x برابر با صفر شود .
اسلاید 119: برنامه زير طول سه پارهخط را از ورودي گرفته مشخص مينمايد كه آيا تشكيل يك مثلث مي دهد يا خير؟ #include < iostream.h >int main( ){float a, b, c; cout << Enter three real numbers << endl ; cin >> a >> b >> c; if(( a < b + c) &&(b < a+c) &&(c < a+b))cout << It is a triangle ;else cout << Not a triangle ;return 0 ;}
اسلاید 120: دستورالعمل Forاز دستور العمل for براي تكرار دستورالعمل ها استفاده مي شود. شكل كلي دستور for بصورت زير ميباشد:(عبارت 3 ; عبارت ; 2 عبارت 1) for { 1 دستورالعمل ; 2 دستورالعمل ; . . . n دستورالعمل ; }
اسلاید 121: ساختار forمعرفی کنترل گر حلقه;for (مقداردهی اولیه کنترل گر حلقه; شرط حلقه; گام حرکت )} مجموعه دستورات بدنه حلقه ;{int i;for (i=1; i<=3; i++) { cout << “hello n”; {
اسلاید 122: مثالvoid main(){cout << “hello n”;cout << “hello n”;cout << “hello n”;}void main(){int i;for (i=1; i<=3; i++) { cout << “hello n”; }}
اسلاید 123: نحوه اجرای دستور forint i;for (i=1; i<=3; i++) { cout << “hello n”; } i =
اسلاید 124: نحوه اجرای دستور forint i;for (i=1; i<=3; i++) { cout << “hello n”; } i =1
اسلاید 125: نحوه اجرای دستور forint i;for (i=1; i<=3; i++) { cout << “hello n”; } i =12hello
اسلاید 126: نحوه اجرای دستور forint i;for (i=1; i<=3; i++) { cout << “hello n”; } i =123hellohello
اسلاید 127: نحوه اجرای دستور forint i;for (i=1; i<=3; i++) { cout << “hello n”; } i =1243hellohellohello
اسلاید 128: نحوه اجرای دستور forint i;for (i=1; i<=3; i++) { cout << “hello n”; } i =1243hellohellohello
اسلاید 129: نکتهلزومی ندارد که کنترل گر حلقه حتماً از 1 شروع شود.int i;for (i=5; i<=7; i++) { cout << “hello n”; }
اسلاید 130: نکتهمقدار دهی اولیه کنترل گر حلقه می تواند خارج از دستور for باشد.int i =1;for ( i ; i<=3; i++) { cout << “hello n”; }
اسلاید 131: نکتهمقدار دهی اولیه کنترل گر حلقه می تواند خارج از دستور for باشد. در این صورت می توان جمله اول موجود در عبارت for را خالی گذاشت.int i=1;for ( i; i<=3; i++) { cout << “hello n”; } =int i=1;for ( ; i<=3; i++) { cout << “hello n”; }
اسلاید 132: نکتهگام حرکت می تواند در بدنه دستور for تعریف شود.int i=1;for ( i; i<=3; ) { cout << “hello n”; i++; }
اسلاید 133: نکتهمعرفی کنترل گر حلقه می تواند در داخل دستور for باشد.for (int i= 1; i<=3; i++) { cout << “hello n”; }
اسلاید 134: نکتهدر دستور for اگر قسمت شرط خالی باشد، حلقه همیشه اجرا خواهد شد. به عبارتی هیچ شرطی برای توقف نداریمfor (int i= 1; ; i++) { cout << “hello n”; } وقتی هیچ شرطی نداریم، دو قسمت دیگر دستور for نیز می توانند خالی باشند.for ( ; ; ) { cout << “hello n”; }
اسلاید 135: نکتهلزومی ندارد که گام حرکت بصورت افزایشی باشد بلکه می تواند بصورت کاهشی نیز باشد. for (int i= 3; i >= 1; i--) { cout << “hello n”; } تمرین: اعداد 100 تا 1 را به صورت نزولی چاپ نمایید. ( با گام حرکت افزایشی و کاهشی جداگانه بنویسید)
اسلاید 136: نکتهگام حرکت می تواند افزایش یا کاهش بیش از 1 واحد را داشته باشد. مثال: چاپ اعداد فرد بین 1 تا 100for (int i= 1; i <= 100; k=k+2) { cout << k << “n”; }
اسلاید 137: نکتهکنترل گر حلقه می تواند اعشاری یا کاراکتری باشد، لزومی ندارد که حتما عدد صحیح در نظر بگیریم.for (char ch= ‘a’; ch <= ‘z’; ch++) { cout << ch << “n”; }
اسلاید 138: برنامه زير عدد صحيح و مثبت n را از ورودي گرفته فاكتوريل آن را محاسبه ونمايش ميدهد.#include <iostream.h>int main( ){int n, i ; long fact = 1 ;cout << Enter a positive integer number;cin >> n;for( i=1; i<=n; ++i) fact *= i; cout << fact << endl;return 0 ;}
اسلاید 139: برنامه زير مجموع اعداد صحيح و متوالي بين 1 تا n را محاسبه نموده و نمايش ميدهد.#include <iostream.h>int main( ){int n, i=1 ; long s = 0 ;cin >> n ;for( ; i<=n; i++) s += i;cout << s ;return 0 ; }
اسلاید 140: برنامه زير ارقام 0 تا 9 را نمايش ميدهد.#include <iostream.h>int main( ){int j=0 ;for( ; j <= 9 ; ) cout << j++ << endl; return 0 ; }
اسلاید 141: #include <iostream.h>int main( ){int i,j,k,n;for(i=1; i<=3; ++i)for(j=1; j<=3; ++j)for(k=1; k<=3; ++k){n=i*100 + j*10+k;cout << n << ‘n’ ;}return 0 ;}برنامه زير كليه اعداد سه رقمي كه با ارقام 1 ، 2 ، 3 ايجاد ميشوند را نمايش ميدهد.
اسلاید 142: تمرینبرنامه ای که اعداد ذوج بین 1 تا 1000 را چاپ کند.برنامه ای که 100 عدد را خوانده، مجموع را محاسبه و چاپ کند.برنامه ای که حاصلضرب اعداد 1 تا 50 را چاپ کند.برنامه ای که 50 کاراکتر از صفحه کلید خوانده و تعیین کند که کدام یک حرف کوچک است.برنامه ای که 100 عدد صحیح را خوانده max و min را چاپ کند.برنامه ای که کاراکتر هایی که کد آن ها بین 100 تا 200 هست، را چاپ نماید.
اسلاید 143: کاربرد دستور break در دستور forاگر در بدنه for از جمله ی break; استفاده شود، ادامه ی اجرای حلقه متوقف شده و حلقه خاتمه می یابد.int i , x;for(i=1;i<=100;i++){cin>>x;if(x==50) break;}قطعه کد فوق حداکثر 100 عدد صحیح از ورودی می گیرد، ولی اگر در بین اعداد ورودی عدد 50 وارد شود بدون بررسی شرط حلقه از ادامه اجرای دستورات for اجتناب کرده و از حلقه خارج می شود.
اسلاید 144: مثالقطعه کدی که تعدادی کاراکتر از صفحه کلید خوانده، بعد از فشردن دکمه ی E تعداد آن ها را مشخص کند:char ch;int i;for(i=0; ;i++) {cin>>ch; if (ch==‘E’) break; }cout<<i;
اسلاید 145: حلقه for تودرتومی توان داخل بدنه ی دستور for هر دستور دلخواه دیگری نوشت. به عنوان مثال می توان از یک دستور for در بدنه دستور for استفاده کرد.قطعه کد زیر عبارت Hello را 15 بار اجرا می کند:for(int i=1; i<=5; i++) { for(int j=1; j<=3; j++) cout<<“Hello n”; }3 بار5 بار15 بار
اسلاید 146: مثال: چاپ جدول ضرب اعدادint main(){int i,j;for(int i=1; i<=10; i ++) for(int j=1; j<=10; j++) { cout<<i*j<<“ “; if (j==10) cout<<‘n’; }return 0;}
اسلاید 147: مثال: برنامه ای که 20 عدد را خوانده و برای هرکدام مجموع اعداد 1 تا آن عدد را محاسبه کند.int main(){int i,j,x,sum;for(int i=1; i<=20; i++) {sum=0; cin>>x; for(int j=1; j<=x; j++) sum+=j; cout<<“sum of 1 to “<<x<<“ :“<<sum<<endl; }return 0;}
اسلاید 148: کاربرد حلقه for با دو اندیسبرنامه ای بنویسید که ستون اعداد زیر را چاپ کند:1, 202, 193, 184, 17...20, 1روش اول: for(int i=1; i<=20; i++) cout<<i<<“, “<<21-i<<endl;روش دوم: for(int i=1, j=20; i<=20; i++, j--) cout<<i<<“, “<<j<<endl;
اسلاید 149: دستور continue; در forاگر دستور continue; در حلقه for استفاده شود، جملاتی از حلقه که هنوز اجرا نشده اند، بدون اجرا مانده و ادامه اجرا از انتهای حلقه اغاز خواهد شد.int main(){int x, p=1;for(int i=1; i<=20; i++) {cin>>x; if (!x) continue; p*=x; }cout<<p;return 0; }برنامه فوق 20 عدد از ورودی خوانده و حاصلضرب اعداد غیر صفر را در متغیر p محاسبه کرده و در نهایت نمایش می دهد.
اسلاید 150: فصل سومسایر ساختارهای تکرار
اسلاید 151: فهرست مطالب فصل سومدستورالعمل whileدستورالعمل do whileدستورالعمل breakدستورالعمل continueدستورالعمل switchتابع cin.get()عملگر static_cast<>()جدول اولویت عملگرها
اسلاید 152: دستورالعمل whileاز اين دستور العمل مانند دستورالعمل for براي تكرار يك دستورالعمل ساده يا تركيبي استفاده ميگردد. شكل كلي اين دستور العمل بصورت زير ميباشد.معرفی کنترل گر حلقه;مقدار دهی اولیه کنترل گر حلقه;while( شرط)} دستورالعمل 1 ; دستورالعمل 2 ; . . n دستورالعمل ; گام حرکت ; }
اسلاید 153: تفاوت دستورهای while و forدستورالعمل for زماني استفاده مي شود كه تعداد دفعات تكرار از قبل مشخص و معين باشد. در صورتيكه تعداد دفعات تكرار مشخص نباشد بايستي از دستورالعمل while استفاده نمود. دقت کنید با پیاده سازی مکانیزم های خاصی می توان بدون توجه به دفعات تکرار از هر دو دستور بصورت مشابه استفاده کرد.
اسلاید 154: مثال :int x=0while(x<5)cout << x ++<< endl;با اجراي قطعه برنامه فوق مقادير زير نمايش داده ميشود :01234
اسلاید 155: #inclode <iostream.h>int main( ){int count = 0 , n;float x, sum = 0 , avg ;cin >> n ; /* تعداد مقادير ورودي n*/while(count < n){ cin >> x ; sum += x ; ++ count ; }avg = sum / n ;cout << avg << endl;return 0 ; }برنامة فوق n مقدار از نوع اعشاري را گرفته ميانگين آن ها را محاسبه و در متغير avg قرار ميدهد.
اسلاید 156: نکتههمانند دستور for اگر داخل بدنه دستور while فقط یک جمله باشد می توان { و } را حذف کرد.مثال: نمایش اعداد 0 تا 100:int main( ){int j = 0;while(j<=100) cout<<j++<<endl;return 0 ; }
اسلاید 157: برنامه زیر را تفسیر کنید:int main( ){int j = 0;while(j<10) J++; cout<<j;return 0 ; }
اسلاید 158: دستورالعمل do while اين دستور العمل نيز براي تكرار يك دستورالعمل ساده يا تركيبي استفاده ميشود. شكل كلي اين دستورالعمل بصورت زير ميباشد. do} دستورالعمل 1 ; دستورالعمل 2 ; . . n دستورالعمل ; } while( شرط);معرفی کنترل گر حلقه;مقدار دهی اولیه کنترل گر حلقه;do {دستورالعمل 1 ; دستورالعمل 2 ; . . n دستورالعمل ; گام حرکت ; } while( شرط);
اسلاید 159: تفاوت دستورهای do while و whileدر دستورالعمل while ابتدا مقدار شرط ارزيابي شده اما در دستورالعمل do while ابتدا دستورالعمل اجرا شده سپس مقدار شرط ارزيابي ميگردد. بنابراین دستورالعمل do while حداقل يك بار انجام مي شود .
اسلاید 160: مثال :#include <iostream.h>int main( ){int count = 0;docout << count ++<<endl ;while(count <= 9);return 0 ; }ارقام 0 تا 9 را روي ده خط نمايش ميدهد
اسلاید 161: دستورالعمل breakاين دستورالعمل باعث توقف دستورالعمل هاي تكرار( for , while ,do while) شده و كنترل به خارج از اين دستورالعمل ها منتقل مينمايد. Break
اسلاید 162: مثال 1 :#include <iostream.h>int main( ){float x, s=0.0 ;cin >> x ;while(x <= 1000.0) { if(x < 0.0){ cout << Error-Negative Value ; break; } s += x ; cin >> x ;}cout << s << endl ; return 0 ; }جمع تعدادی عدد که بین 0 و 1000 هستند. اگر بین اعداد وارد شده عدد منفی وارد شود، بواسطه دستور break; حلقه خاتمه می یابد.اگر عدد وارد شده بزرگتر از 1000 باشد نیز شرط حلقه برآورده نشده و حلقه خاتمه می یابد
اسلاید 163: مثال 2:#include <iostream.h>int main( ){int count = 0 ;while( 1 ) { count ++ ; if(count > 10 ) break ; }cout << counter : << count << n;return 0 ;}counter : 11
اسلاید 164: مثال 3:#include <iostream.h>void main( ){int count; float x, sum = 0;cin >> x ;for(count = 1; x < 1000 . 0; ++ count ) { cin >> x ; if(x < 0.0) { cout << Error – Negative value <<endl; break ; } sum += x ; cin >> x ; }cout << sum << n ; }جمع تعدادی عدد اعشاری که بیشتر از 0 و کمتر از 1000هستند را محاسبه می کند. اگر بین اعداد وارد شده عدد منفی وارد شود، بواسطه دستور break; حلقه خاتمه می یابد.اگر عدد وارد شده بزرگتر یا مساوی 1000 باشد نیز شرط حلقه برآورده نشده و حلقه خاتمه می یابد
اسلاید 165: مثال 4:#include <iostream.h>int main( ){ float x , sum = 0.0 ;do { cin >> x ; if(x < 0.0) { cout << Error – Negative Value << endl ; break ; } sum += x ; } while(x <= 1000.0);cout << sum << endl ;return 0 ; }جمع تعدادی عدد که بین 0 و 1000 هستند. اگر بین اعداد وارد شده عدد منفی وارد شود، بواسطه دستور break; حلقه خاتمه می یابد.اگر عدد وارد شده بزرگتر از 1000 باشد نیز شرط حلقه برآورده نشده و حلقه خاتمه می یابد.نکته: این حلقه حداقل یک بار اجرا می شود.... حتی اگر عدد اول بزرگتر از 1000 باشد نیز در مجموع شرکت داده خواهد شد. سپس از حلقه خارج خواهیم شد.
اسلاید 166: دستورالعمل continue از دستورالعمل continue ميتوان در دستورالعمل هاي تكرار do while ، while ، for استفاده نمود. اين دستورالعمل باعث ميشود كه كنترل به ابتدای دستورالعمل هاي تكرار منتقل گردد. (تذکر: در ابتدای حلقه بایستی شرط حلقه نیز بررسی شود)پس بهتر است بگوییم به انتهای بدنه حلقه تکرار رفته و از آن جا ادامه می دهد.Continue
اسلاید 167: مثال 1:#include <iostream.h>int main( ){float x, sum = 0.0 ;Do { cin >> x ; if(x < 0 . 0) { cout << Error << endl ; continue ; } sum += x ; } while(x <= 1000.0 );cout << sum ;return 0 ; }جمع تعدادی عدد که کوچکتر و مساوی 1000 هستند را بدست می اورد. اگر بین اعداد وارد شده عدد منفی وارد شود، در حاصل جمع شرکت نخواهد کرد و اجرای دستورالعمل ها به انتهای حلقه هدایت خواهد شد.اگر عدد وارد شده بزرگتر از 1000 باشد نیز شرط حلقه برآورده نشده و حلقه خاتمه می یابد.نکته: این حلقه حداقل یک بار اجرا می شود.... حتی اگر عدد اول بزرگتر از 1000 باشد نیز در مجموع شرکت داده خواهد شد سپس از حلقه خارج خواهیم شد.
اسلاید 168: مثال 2:#include <iostream.h>int main( ){int n , navg = 0 ;float x, avg, sum = 0 ;cin >> n ; / * عبارت از تعداد اعداد ورودي n * /for(int count = 1 ; count <=n; ++ count ) { cin >> x ; if(x == 0 ) continue ; sum += x ; ++ navg ; }avg = sum / navg; cout << avg << endl ;return 0 ; } n عدد از ورودی خوانده. در صورتیکه صفر نباشد ان را در مجموع اعداد شرکت می دهد. در نهایت میانگین اعداد غیر صفر را محاسبه می کند
اسلاید 169: دستورالعمل switch همانطور که می دانید از دستورالعمل شرطی(if else) می توان بصورت تودرتو استفاده نمود ولي از طرفي اگر عمق استفادة تو در تو از اين دستورالعمل زياد گردد، درك آن ها مشكل مي شود . براي حل اين مشكل C++ ، دستورالعمل switch كه عملاً يك دستورالعمل چند انتخابي ميباشد را ارائه نموده است. switchcase
اسلاید 170: شکل کلی دستور العمل Switchswitch(عبارت){case valueone : statement; break;case valuetwo: statement; break;case valuen : statement; break;default: statement ; }
اسلاید 171: مثال 1 :#include <iostream.h>void main( ){unsigned int n ;cin >> n;switch(n){case 0: cout << ZERO << endl ;break;case 1:cout << one << endl ;break ;case 2:cout << two << endl ;break;default :cout << default << endl;} / * end of switch statement * /}
اسلاید 172: مثال 2 :#include <iostream.h>void main( ){unsigned int n;cin >> n ;switch(n) { case 0: case 1: case 2: cout << Less Than Three << endl; break; case 3: cout << Equal To Three << endl ; break; default: cout << Greater Than Three << endl;}}
اسلاید 173: تابع cin.get() :اين تابع يك كركتر را از صفحه كليد ميگيرد. براي استفاده از اين تابع در ابتداي برنامه بايستي داشته باشيم :#include <iostream.h>
اسلاید 174: char x;x = cin.get( );cout << x ;قطعه برنامه ذيل يك كركتر را از صفحه كليد گرفته و نمايش ميدهد.
اسلاید 175: #include <iostream.h>int main( ){ char x;while((x = cin.get( )) !=EOF)cout << x ;return 0 ; }برنامة ذيل يك سطر متن انگليسي كه به CTRL Z ختم مي شود را گرفته دقيقاً نمايش ميدهد.EOF به معني End of File ميباشد كه در iostream.h تعريف شده و مقدار آن برابر با 1- ميباشد. مقدار آن در سيستم عامل DOS عبارتست از ctrl z .
اسلاید 176: char x;x = cin.get( );switch(x) {case r :case R : cout << RED << n ; break ;case b :case B : cout << BLUE << endl ; break ;case y :case Y : cout << YELLOW << endl; break; }در قطعه برنامه ذيل ازتابع cin.get() و دستور switch استفاده شده است.
اسلاید 177: #include <iostream.h>int main( ){char next;while((next = cin.get( ) ) !=EOF)if(next != ) cout << next ;return 0 ; }برنامة ذيل يك سطر متن انگليسي را گرفته كركترهاي خالي (blank) آن را حذف نموده و نمايش مي دهد.
اسلاید 178: تمرین : برنامه ای با استفاده از ساخنار switch case که یک عملگر و دو عملوند را از ورودی خوانده ، عملگر را بر روی عملوند اجرا نمایید.
اسلاید 179: عملگر static_castاز اين عملگر براي تبديل موقت يك نوع data به نوع ديگر استفاده ميشود. اين عملگر يك عملگر يكتائي ميباشد.
اسلاید 180: مثال 1:int x = 25 ;float y ;y = static_cast < float >(x) ; مقدار x موقتاً بصورت اعشاري در می آيد و در نتيجه مقدار y برابر با 25.0 می شود. بايستي توجه داشت كه نوع متغير x عوض نمي شود بلكه موقتاً مقدار آن بصورت اعشاري در آمده است.
اسلاید 181: مثال 2:float x = 14.75 ;cout << static_cast < int >(x) << endl;cout << x ; ابتدا مقدار 14 نمايش داده مي شود و سپس مقدار 14.75 نمايش داده ميشود.
اسلاید 182: جدول اولویت عملگرها
اسلاید 183: تمرینبرنامه ای که یک سکه 100 ریالی را به سکه های 2و5 و10و20 و 50 ریالی خرد کند.برنامه ای که خروجی زیر را چاپ کند:برنامه ای که حاصل عبارت زیر را بدست اورد:
اسلاید 184: فصل چهارماعداد تصادفی
اسلاید 185: فهرست مطالب فصل چهارمتولید اعداد تصادفیتعریف نوع داده ( typedef )داده های از نوع شمارشی
اسلاید 186: اعداد تصادفی مقادير تصادفي يا شانسي در اكثر برنامههاي كاربردي در زمينه شبيه سازي و بازيهاي كامپيوتري نقش مهمي را ايفا مينمايند. براي ايجاد يك عدد تصادفي صحيح بين 0 و 32767 بايستي از تابع rand() استفاده نمائيم. rand( )
اسلاید 187: #include <stdlib.h>#include < iostream.h>int main( ){for(int j=1; j<=10; ++j)cout << rand( ) << n ;return 0 ; }برنامه زير 10 عدد تصادفي بين 0 و 32767 را ايجاد مينمايد.
اسلاید 188: تعريف نوع داده (typedef)از typedef ميتوان براي تعريف نوع دادههاي جديد كه معادل نوع دادههاي موجود باشد استفاده نمود. شكل كلي عبارتست از :typedef type newtype;نشان دهنده نوع داده موجود اسم جديد
اسلاید 189: مثال :typedef int integer; حال ميتوان y و x را بصورت زير تعريف نمود :integer x,y;
اسلاید 190: دادههاي از نوع شمارشي بمنظور معرفي دادههاي از نوع شمارشي از كلمه enum استفاده ميگردد.مثالمثالemum status {married, devorced, vidow, single}; status a ; a= single ; : enum color {red, blue, green, yellow, brown} ;color يك نوع داده شمارشي ميباشد. 02341
اسلاید 191: توجه : بايستي در نظر داشت كه دادههاي از نوع شمارشي در عمليات ورودي و خروجي شركت نمينمايند. بعبارت ديگر مقادير دادههاي از نوع شمارشي بايستي در برنامه تعيين نمود. دستورالعمل هاي ورودي و خروجي مانند cin و cout در مورد دادههاي شمارشي نميتوان استفاده نمود.
اسلاید 192: فصل پنجمآرایه ها
اسلاید 193: فهرست مطالب فصل پنجمآرایه یک بعدیآرایه دو بعدی ( ماتریس ها )
اسلاید 194: آرایه یک بعدیآرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر ميباشد كه ميتواند چندين مقدا را در خود جاي دهد. كليه عناصر يك آرايه از يك نوع ميباشند. عناصر آرايه بوسيله انديس آن ها مشخص ميشوند. در C++ ، انديس آرايه از صفر شروع ميشود.
اسلاید 195: کاربرد آرایه هاآرايهها در برنامهنويسي در مواردي كاربرد دارند كه بخواهيم اطلاعات و دادهها را در طول اجراي برنامه حفظ نمائيم.
اسلاید 196: int x[5] ; اولين عنصر x[0] پنجمين عنصر x[4] آرایه یک بعدی از نوع int
اسلاید 197: تخصیص مقادیر اولیه به عناصر آرایه : int x[5]= {4, 2, 5, 17, 30};
اسلاید 198: دریافت مقادیر عناصر آرایه :int x[5];for(int i=0; i<=4; ++i) cin >> x[ i ] ;نمایش مقادیر عناصر آرایه :for(int i=0; i<5; ++i) cout << x[ i ] ;
اسلاید 199: اگر تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده بطور اتوماتيك، مقدار اوليه صفر ميگيرند. int x[5] = {12, 5, 7};
اسلاید 200: بايستي توجه داشت كه آرايهها به صورت ضمني مقدار اوليه صفر نميگيرند. برنامه نويس بايد به عضو اول آرايه، مقدار اوليه صفر تخصيص دهد تا عضوهاي باقيمانده بطور اتوماتيك، مقدار اوليه صفر بگيرند. int x[5] = {0} ;
اسلاید 201: دستور زير يك آرايه يك بعدي شش عنصري از نوع float ايجاد مينمايد. float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9, 16.5} ;
اسلاید 202: برنامه ذيل 100 عدد اعشاري و مثبت را گرفته تشكيل يك آرايه مي دهد سپس مجموع عناصر آرايه را مشخص نموده نمايش ميدهد. #include <iostream.h>int main( ){const int arrsize = 100 ;float x[ arrsize], tot = 0.0 ;for(int j=0; j<arrsize; j++) cin >> x[ j ];for(j=0; j<arrsize; j++) tot += x[ j ] ;cout << tot ;return 0 ; }
اسلاید 203: برنامه ذيل 20 عدد اعشاري را گرفته تشكيل يك آرايه داده سپس كوچكترين عنصر آرايه را مشخص و نمايش ميدهد. #include <iostream.h>#include <conio.h>int main( ){float x[20], s;int j ;for(j=0; j<20 ; ++j) cin >> x[ j ];s = x[0 ] ;for(j=1; j<20; ++j) if(x[ j] <s) s = x[ j ];cout << s << endl; return 0;}
اسلاید 204: برنامه زير 100 عدد اعشاري را گرفته بروش حبابي (Bubble sort) بصورت صعودي مرتب مينمايد. #include <iostream.h>#include <conio.h>int main ( ){float x[100] , temp;int i,j ; for(i=0; i<100; ++i) cin >> x[i ];for(i=0; i<99; i++)for(j=i+1 ; j<100; j++)if(x[ j ] < x[i ]{ temp = x[ j ] ;x[ j ] = x[ i ]; x[ i ] = temp ;}for(i=0; i<=99; i++)cout << x[ i ] << endl;return 0 ;}
اسلاید 205: آرايههاي دوبعدي (ماتريسها)ماتريس ها بوسيله آرايههاي دوبعدي در كامپيوترنمايش داده مي شوند. int a[3][4];
اسلاید 206: تخصیص مقادیر اولیه به عناصر آرایه : int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } ;
اسلاید 207: int a[3][4]= { {1}, {2,3} , {4,5,6} } ;نکته 1 :
اسلاید 208: int a[3][4]= {1, 2, 3, 4,5 } ;نکته 2 :
اسلاید 209: در يك آراية دوانديسي، هر سطر، در حقيقت آرايهاي يك انديسي است. در اعلان آرايههاي دوانديسي ذكر تعداد ستون ها الزامي است. نکته 3 :int a[ ][4]={1,2,3,4,5};
اسلاید 210: برنامه زير يك ماتريس 3*4 را گرفته مجموع عناصر آن را مشخص نموده و نمايش ميدهد.#include <iostream.h>#include <conio.h>int main( ){float x[3][4], total= 0.0;int i, j ;// generate matrix x.for(i=0; i<3; ++i) for (j=0; j<4; j++) cin >> x[ i ][ j ];// calculate the sum of elements.for(i=0; i<3; ++i) for(j=0; j<4; j++) total + = x [ i ][ j ];cout << total = << total << endl; return 0 ;}
اسلاید 211: برنامه که عناصر ماتریس 2*3 را از ورودی خوانده و بزرگترین عنصر هر سطر را پیدا کرده و به همراه شماره سطر آن جاپ نماید.
اسلاید 212: ضدحال...!
اسلاید 213: فصل ششمتوابع
اسلاید 214: فهرست مطالب فصل ششمتعریف تابعتابع بازگشتیتوابع درون خطیانتقال پارامترها از طریق ارجاعکلاس های حافظه ( storage classes )سربارگذاری توابع
اسلاید 215: تعریف توابع استفاده از توابع در برنامهها به برنامهنويس اين امكان را ميدهد كه بتواند برنامههاي خود را به صورت قطعه قطعه برنامه بنويسد. تا كنون كليه برنامههائي كه نوشتهايم فقط از تابع main( ) استفاده نمودهايم.
اسلاید 216: شكل كلي توابع بصورت زير ميباشند : return-value-type function-name (parameter-list){declaration and statements}نام تابع نوع مقدار برگشتي لیست پارامتر ها جهت انتقال اطلاعات از تابع احضار كننده به تابع فراخوانده شده تعريف اعلانهاي تابع و دستورالعمل هاي اجرائي
اسلاید 217: تابع زير يك حرف كوچك را به بزرگ تبديل مينمايد. char low_to_up (char c1){char c2;c2 = (c1>= a && c1<= z )?(c1 - 32): c1; // کد حرف کوچک = کد حرف بزرگ+ 32return (c2) ;}نام تابعنوع مقدار برگشتیپارامتری از نوع charif (c1>= a && c1<= z ) c2=c1-32; else c2=c1;یا
اسلاید 218: برنامه کامل که از تابع قبل جهت تبدیل يك حرف كوچك به بزرگ استفاده مينمايد. #include <iostream.h>char low_to_up(char c1){char c2;c2=(c1 >= a && c1 <= z )?( A +c1 - a ) : c1; return c2;}int main( ){char x;x=cin.get( );cout << low_to_up(x) ;return 0; }c2آرگومان‘D’‘d’
اسلاید 219: تابع maximum دو مقدار صحيح را گرفته بزرگترين آنها را برمي گرداند. int maximum(int x, int y){int z ;z=(x >= y)? x : y; // if (x>=y) z=x; else z=y;return z;}
اسلاید 220: برنامه کامل که از تابع maximum جهت یافتن ماکزیمم دو مقدار صحيح استفاده می نماید.#include <iostream.h>int maximum(int x , int y){int z ;z=(x > y)? x : y ;return z;}int main( ){int a, b ;cin >> a >> b ;cout << maximum(a,b);return 0;}a, b آرگومانهای تابع maximumz15
اسلاید 221: نکته 1 :اسامي پارامترها و آرگومان هاي يك تابع ميتوانند همنام باشند.
اسلاید 222: برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسبه نموده نمايش ميدهد. #include <iostream.h>long int factorial(int n){long int prod=1;if(n>1)for(int i=2; i<=n; ++i)prod *=i;return(prod);}int main( ){int n;cin >> n ;cout << factorial(n) ;return 0 ;}x!=1*2*3*4*…*(x-1)*xi در factorial2,3,4prod در factorial6
اسلاید 223: نکته 2 :وقتي در تابعي، تابع ديگر احضار ميگردد بايستي تعريف تابع احضار شونده قبل از تعريف تابع احضار كننده در برنامه ظاهر گردد.
اسلاید 224: نکته 3 :اگر بخواهیم در برنامهها ابتدا تابع main ظاهر گردد بايستي prototype تابع يعني پيش نمونة تابع كه شامل نام تابع، نوع مقدار برگشتي تابع، تعداد پارامترهائي را كه تابع انتظار دريافت آنرا دارد و انواع پارامترها و ترتيب قرارگرفتن اين پارامترها را به اطلاع كامپايلر برساند. در اسلاید بعد مثالی در این زمینه آورده شده است.
اسلاید 225: #include <iostream.h>#include <conio.h>long int factorial(int); // function prototype int main( ){int n;cout << Enter a positive integer << endl; cin >> n;cout << factorial(n) << endl; return 0 ;}long int factorial(int n){long int prod = 1;if(n>1)for(int i=2; i<=n; ++i)prod *= i;return(prod);}
اسلاید 226: نکته 4 :در صورتي كه تابع مقداري بر نگرداند نوع مقدار برگشتي تابع را void اعلان ميكنيم. و در صورتيكه تابع مقداري را دريافت نكند بجاي parameter- list از void يا ( ) استفاده مي گردد. در اسلاید بعد مثالی در این زمینه آورده شده است.
اسلاید 227: #include <iostream.h>#include <conio.h>void maximum(int , int) ;int main( ){ int x, y;cin >> x >> y;maximum(x,y);return 0;}void maximum(int x, int y){int z ;z=(x>=y) ? x : y ;cout << max value n << z<< endl; return ; } تابع مقداري بر نمی گرداند.
اسلاید 228: احضار بوسیله مقدار ( Call By Value )#include <iostream.h>int modify(int);int main( ){int a=20;cout << a << endl;modify(a) ;cout << a << endl;return 0 ;}int modify(int a){a *= 2;cout << a << endl;return 0; }a در modify40خروجی برنامه :204020
اسلاید 229: احضار بوسیله مقدار ( Call By Value )#include <iostream.h>int modify(int);int main( ){int a=20;cout << a << endl;modify(a) ;cout << a << endl;return 0 ;}int modify(int a){a *= 2;cout << a << endl;return 0; }a در modify40در این نوع احضار تابع حافظههاي مورد استفاده آرگومان ها و پارامترها از هم متمايزند و هرگونه تغيير در پارامترها باعـــث تغيـــر در آرگومان هاي متناظر نميگردد.
اسلاید 230: تابع بازگشتي (recursive functions)توابع بازگشتي يا recursive توابعي هستند كه وقتي احضار شوند باعث ميشوند كه خود را احضار نمايند.
اسلاید 231: نحوه محاسبه فاکتوریل از طریق تابع بازگشتیn != 1*2*3*…*(n-1) *nf(n) = n !f(n) =1 n=1/ n=0 اگرf(n) =n *f(n-1) در غير اينصورتn!= 1* 2* 3* … *(n-2) *(n-1) *nn!=(n-1)! *nدر اسلاید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.
اسلاید 232: تابع بازگشتی محاسبه فاکتوریل#include <iostream.h>long int factorial(int) ;int main( ){int n ;cout << n= ;cin >> n ;cout << endl << factorial = << factorial(n) << endl;return 0 ;}long int factorial(int n){if(n<=1)return(1);else return(n *factorical(n-1) ) ;}
اسلاید 233: نحوه محاسبه n امین مقدار دنباله فیبوناچی از طریق تابع بازگشتی0 , 1, 1, 2, 3, 5, 8, 13, 21 , 34, … دنباله فیبوناچی : در اسلاید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.= fib(n)= جمله n اماگر n=1 1= fib(n)= جمله n اماگر n=2 1 در غير اينصورت fib(n-1)+fib(n-2)
اسلاید 234: برنامهزير n امين مقدار دنبالة فيبوناچي (fibonacci) را مشخص و نمايش ميدهد. #include <iostream.h>long int fib(long int); // forward declaration int main( ){long int r ;int n ;cout << Enter an integer value << endl ;cin >> n ;r = fib(n) ;cout << r << endl ;return 0 ;}long int fib(long int n){ if (n==0) return 0;else if(n = = 1 || n= = 2)return 1 ;else return(fib(n-1) + fib(n-2) ) ;}
اسلاید 235: برنامه زير يك خط متن انگليسي را گرفته آن را وارون نموده نمايش ميدهد. # include <iostream># include <conio.h>using namespace std;void reverse(void) ; // forward declaration int main( ){reverse( ) ;getch();return 0 ;}void reverse(void) // read a line of characters and reverse it {char c ;if( (c=cin.get()) != n) reverse( ); cout << c ;return ;}
اسلاید 236: انتقال پارامترها از طريق ارجاعتاكنون وقتي تابعي را احضار ميكرديم يك كپي از مقادير آرگومان ها درپارامترهاي متناظر قرار ميگرفت . این روش احضار بوسيله مقدار يا call by value ناميده شد. در انتقال پارامترها از طريق ارجاع در حقيقت حافظه مربوط به آرگومان ها و پارامترهاي متناظر بصورت اشتراكي مورد استفاده قرار ميگيرد. اين روش call by reference ناميده ميشود .
اسلاید 237: انتقال پارامترها از طريق ارجاعدر اين روش پارامترهائي كه از طريق call by reference عمل مينمايند در پيش نمونه تابع قبل از نام چنين پارامترهائي از & استفاده ميشود.واضح است كه در تعريف تابع نيز بهمين طريق عمل ميشود.
اسلاید 238: مثال :#include <iostream.h>int vfunct(int); void rfunct (int &) ;int main( ){int x=5, y=10;cout << x << endl << vfunct(x) << endl << x << endl ;cout << y << endl ;rfunct(y) ;cout << y << endl ;return 0 ;}int vfunct(int a){return a *= a ; }void rfunct(int &b){b *= b ;}xy510خروجی :5 25510مقدار آرگومان x تغییر نمی کند.ادامه خروجی :100
اسلاید 239: نکته :وقتي پارامتري بصورت call by reference اعلان ميگردد اين بدان معني است كه با تغيير مقدار اين پارامتر در تابع احضار شده مقدار آرگومان متناظر نيز تغيير مينمايد.
اسلاید 240: برنامهزير با استفاده از fswap دو مقدار اعشاري را مبادله مينمايد.#include <iostream.h>void fswap(float & , float & );int main( ){float a=5.2, b=4.3;cout << a << endl << b ;fswap( a , b) ;cout << a << endl << b ;return 0 ;}void fswap(float &x , float & y){float t;t = x ;x = y ;y = t ;}
اسلاید 241: توابع درون خطي (inline) كلمه inline بدين معني است كه به كامپايلر دستور ميدهد كه يك كپي از دستورالعمل هاي تابع در همان جا (در زمان مقتضي) توليد نمايد تا از احضار تابع ممانعت بعمل آورد.
اسلاید 242: اشکال توابع inline بجاي داشتن تنها يك كپي از تابع ، چند كپي از دستورالعمل هاي تابع در برنامه اضافه ميشود كه باعث بزرگ شدن اندازه يا طول برنامه ميشود. بنابراين از inline براي توابع كوچك استفاده ميگردد.
اسلاید 243: مثالی از توابع درون خطی#include <iostream.h>inline float cube(const float s) {return s*s*s; }int main( ){float side ;cin >> side ;cout << side << cube(side) << endl ; return 0 ;}
اسلاید 244: كلاسهاي حافظه (storage classes) متغيرها بدو طريق متمايز مشخص ميشوند يكي بوسيله نوع (type) آن ها و ديگري بوسيله كلاس حافظه آن ها. نوع متغير قبلاً اشاره شده بعنوان مثال int ، float ، double ، . . . ولي كلاس حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث مينمايد. در اسلاید بعد به انواع کلاس حافظه می پردازیم.
اسلاید 245: بطور كلي كلاس حافظه متغيرها به چهار دستة تقسيم ميگردد : automaticstaticexternalregister
اسلاید 246: متغيرهاي automatic در درون يك تابع تعريف ميشوند و در تابعي كه اعلان ميشود بصورت متغيرهاي محلي براي آن تابع ميباشند. حافظه تخصيص داده شده به متغيرهاي automatic پس از اتمام اجراي تابع از بين مي رود بعبارت ديگر وسعت و دامنة متغيرهاي از نوع automatic تابعي ميباشد كه متغير در آن اعلان گرديده است. automatic
اسلاید 247: متغيرهاي static نيز در درون توابع تعريف مي شوند و از نظر وسعت و دامنه شبيه متغيرهاي automatic هستند ولي در خاتمة اجراي تابع، حافظه وابسته به اين نوع متغيرهـــا از بين نميرود بلكه براي فراخواني بعدي تابع باقي ميماند. و به دودسته تقسیم می شوند1- متغیر های استاتیک محلی2- متغیر های استاتیک عمومیمقدار اولیه متغیرهای استاتیک محلی و عمومی صفر است.staticدر اسلاید بعد به یک مثال از کاربرد این نوع کلاس حافظه می پردازیم.
اسلاید 248: فقط در همان تابعی که تعریف می شوند قابل استفاده اند.هنگام فراخوانی تابع ایجاد می شوند و به هنگام خروج تابع ، آخرین مقدار خودشان را حفظ می کنند.فقط یک با مقدار اولیه می گیرند.استاتیک محلیدر اسلاید بعد به یک مثال از کاربرد این نوع کلاس حافظه می پردازیم.
اسلاید 249: مثال :#include <iostream.h>#include <conio.h>Void test(void);int main( ){Int i;For (i=0 ; i<5; i++)test(); return 0 ;}Void test(void){Static int y=0;Int x=0;Cout<<“n outo x= “<<x<<“, static y=“<<y;X++;Y++;}
اسلاید 250: مثال :#include <iostream.h>// program to calculate successive fibonacci numbers long int fib(int) ;int main( ){int n ;cout << how many fibonacci numbers? ;cin >> n ;cout << endl ;for(int j=1; j<=n; ++j )cout << j << << fib(j) << endl ;return 0 ;}long int fib(int count){static long int t1 = 1, t2=1;long int t ;t =(count <3) ?1 : t1 + t2 ;t2 = t1 ;t1 = t ;return(t) ;}بايستي توجه داشت كه اگر در توابع به متغيرهاي از نوع static مقدار اوليه تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها در نظر گرفته ميشود.
اسلاید 251: متغيرهاي از نوع external متغيرهائي هستند كه در بيرون از توابع اعلان مي شوند و وسعت و دامنه فعاليت آنها كليه توابعي ميباشد كه در زير دستور اعلان متغير قرار دارد. externalدر اسلاید بعد به یک مثال از کاربرد این نوع کلاس حافظه می پردازیم.
اسلاید 252: مثال :#include <iostream.h>External int w; // external variablefuncta(int x, int y){cout << w ;w = x + y ;cout << endl << w << enld;return x%y ;}int main( ){int a, b, c, d;cin >> a >> b ;c=functa(a, b) ;d=functa(w, b+1);cout << endl << c << endl << d << endl << w ;return 0 ;}بايستي توجه داشت كه اگر در توابع به متغيرهاي از نوع external مقدار اوليه تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها در نظر گرفته ميشود.
اسلاید 253: وقتي متغيري از نوع register اعلان ميشود از كامپيوتر عملاً درخواست ميشود كه به جاي حافظه از يكي از رجيسترهاي موجود استفاده نمايد. register
اسلاید 254: کاربرد کلاس registerمعمولاً از نوع رجيستر براي شاخصهاي دستور تكرار و يا انديس هاي آرايهها استفاده ميشود. بايستي توجه داشت كه متغيرهاي از نوع رجيستر قابل استفاده دردستور cin نميباشند register int i; for(i=1;i<=10;i++) cout<<“hi”;
اسلاید 255: سربارگذاري توابع (function overloading) در C++ اين امكان وجود دارد كه دريك برنامه بتوانيم از چند توابع هم نام استفاده نمائيم مشروط بر اين كه پارامترهاي اين توابع متفاوت باشند. (از نظر تعداد پارامتر و يا نوع پارامترها و ترتيب آنها)
اسلاید 256: مثال :#include <iostream.h>float addf(float , int);int addf(int , int);int main( ){int a=5, b=10 ;float d=14.75 ;cout << addf(a , b) << endl;cout << addf(d , b) << endl;return 0 ;}int addf(int x, int y){return x+y ;}float addf(float x, int y){return x+y ;}
اسلاید 257: برنامه ای که با استفاده ار تابعی به نام Square() ، مربع یک عدد را محاسبه می کند دقت شود این برنامه باید بتواند مربع یک عدد صحیح و اعشاری را با استفاده از توابع سرباگذاری محاسبه نمایید.
اسلاید 258: تمرینبرنامه ای بنویسید که 3 عدد اعشاری را خوانده و به تابعی ارسال کند و تابع میانگین آن ها را محاسبه کرده و برگرداند.برنامه ای که ضرایب معادله ی درجه دومی را خوانده، آن ها را به تابعی ارسال کند. تابع معادله را حل کند و جواب ها را در خروجی چاپ کند. (تابع جواب ها را به تابع اصلی برنمی گرداند.)برنامه ای بنویسید که عددی را از ورودی خوانده و هریک از ارقام آن را در یک سطر چاپ کند. تفکیک و چاپ ارقام توسط تابع بازگشتی صورت گیرد.برنامه ای بنویسید که حاصلضرب دو عدد صحیح را به کمک جمع کردن محاسبه کند. برای این کار از تابع بازگشتی استفاده کنید. a اگر b=1 a×(b-1)+a اگر b>1a×b =
اسلاید 259: 1# include <iostream># include <conio.h>using namespace std;float average(float a, float b, float c){return ((a+b+c)/3);}void main() {float x, y, z;cin>>x>>y>>z;cout<<average(x,y,z);getch();}
اسلاید 260: 2# include <iostream># include <conio.h># include <math.h>using namespace std;void f(int a, int b, int c){float delta = (b*b)-(4*a*c); if(delta == 0) cout<<The only answer:n<<x= <<(-b)/(2*a);else if(delta > 0) { cout<<Two answers:n<<x1= <<(-b+sqrt(delta))/(2*a); cout<<x2= <<(-b-sqrt(delta))/(2*a); }}void main() {float x, y, z;cin>>x>>y>>z;f(x,y,z);getch();}
اسلاید 261: 3# include <iostream># include <conio.h># include <math.h>using namespace std;void f(int a){if (a>10) f(a/10);cout<<(a%10)<<endl;}void main(){int n;cin>>n;f(n);getch();}
اسلاید 262: 4# include <iostream># include <conio.h># include <math.h>using namespace std;int f(int a,int b){if (b==1) return a;return (f(a,b-1)+a);}void main(){int n,m;cin>>n>>m;cout<<f(n,m);getch();}
اسلاید 263: فصل هفتمساختار ها و اشاره گرها
اسلاید 264: فهرست مطالب فصل هفتمساختارهاUnion هااشاره گرها ( Pointer)تعریف آرایهآرایه های دو بعدی و اشاره گرهاتخصیص حافظه بصورت پویا ( عملگر new )رشته ها و توابع مربوطه
اسلاید 265: ساختارها ساختارها شبيه آرايهها بوده بدين صورت كه يك نوع داده گروهي است كه فضاي پيوسته از حافظه اصلي را اشغال مينمايد. اما عناصر ساختار الزاماً از يك نوع نميباشند بلكه اعضاي يك ساختار ميتوانند از نوعهاي مختلف از قبيل char ، int ، float ، … باشند.
اسلاید 266: تعريف ساختار struct time {int hour ; // 0 – 23int minute ; // 0 – 59int second; //} ;نام ساختاراعضا ساختار
اسلاید 267: مثال :struct account {int acc_no ;char acc_type;char name[80] ;float balance ;};ساختار account داراي چهار عضو ميباشد.acc_no شماره حساب از نوع intacc_type نوع حساب از نوع char name مشخصات صاحب حساب از نوع رشتة 80 كركتري balance مانده حساب از نوع float
اسلاید 268: به دو صورت می توان اعلان یک متغیر از نوع ساختار را نمایش داد :struct account {int acc_no;char acc_type;char name[80];float balance;} cust1, cust2, cust3;struct account {int acc_no ;char acc_type;char name[80];float balance;};account cust1, cust2, cust3;روش اول :روش دوم :
اسلاید 269: به ساختارها ميتوان مقدار اوليه نيز تخصيص داد account cust = {4236, r, Nader Naderi , 7252.5};
اسلاید 270: دسترسي به عناصر يك ساختار بمنظور دسترسي به عناصر يك ساختار از عملگر . استفاده ميگردد . عملگر. جزء عملگرهاي يكتائي ميباشد.
اسلاید 271: مثال :cust .acc_no = 4236;cust .acc_type = r;cust . name = Nader Naderi;cust . balance = 7252.5;
اسلاید 272: نکته :عضو يك ساختار خود ميتواند يك ساختار ديگر باشد. struct date {int month;int day;int year;};struct account {int acc_no ;char acc_typer;char name[80];float balance ;date lastpay ; };اگرداشته باشيمaccount x, y ; بوسيله lastpay آنگاه عضوx.lastpay.day x.lastpay.monthx.lastpay.year مشخص ميگردد.
اسلاید 273: نکته : ميتوان آرايهاي تعريف نمود كه هر عضو آن يك ساختار باشد و حتي به آنها مقادير اوليه تخصيص نمود.struct struc1 {char name[40];int pay1;int pay2; } ;struc1 cust[ ]= {nader, 3000 , 40000, sara, 4200, 6000, susan, 3700, 25000, saman, 4800 , 2000, };
اسلاید 274: برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته، دو عدد مختلط را ميگيرد و مجموع آن ها را مشخص و نمايش ميدهد. #include <iostream.h>int main( ){struct complex{float a;float b; } x, y, z;cout << enter 2 complex numbers << endl ;cin >> x.a>>x.b ;cout << endl;cin >> y.a >> y.b;z.a = x.a + y.a ;z.b = x.b + y.b ;cout << endl << z.a << << z.b;return 0 ;}
اسلاید 275: unionunion از نظر ساختاري شبيه struct ميباشد . با اين تفاوت كه عضوهائي كه تشكيل union ميدهد همگي از حافظه مشتركي در كامپيوتر استفاده مينمايند. بنابراين استفاده از union باعث صرفهجوئي در حافظه ميگردد.
اسلاید 276: مثال :union id {char color [10];int size; } x , y; هر كدام از متغيرهاي x و y يك رشته 10 كركتري يا يك مقدار از نوع int ميباشد وكامپيوتر يك بلوك حافظه كه بتواند رشته 10 كركتري رادر خود جاي دهد ، برايcolor و size در نظر ميگيرد.
اسلاید 277: مثال :union xpq {int x ;char y[2] ; } p ;
اسلاید 278: تمرین:برنامه اي بنويسيم كه يك دفترچه تلفن 20 تايي (ظرفيت پذيرش 20 نام و شماره تلفن را داشته باشد)و امكان جستجو در آن را بر اساس نام فرد ايجاد نمايد.
اسلاید 279: اشارهگرها (Pointers) دادههائي كه در كامپيوتر در حافظه اصلي ذخيره ميشوند بايتهاي متوالي از حافظه بسته به نوع data اشغال ميكنند.
اسلاید 280: اشارهگرها (Pointers)با داشتن آدرس داده در حافظة اصلي ميتوان براحتي به آن داده دسترسي پيدا نمود و از طرف ديگر آدرس هر داده در حافظه آدرس بايت شروع آن داده ميباشد. int x = 613;
اسلاید 281: نکته :در كامپيوتر آدرسها معمولاً دو بايت اشغال مينمايند. اگر آدرس x را در px قرار دهيم آنگاه ميگوئيم كه px به x اشاره مينمايد.pxxآدرس متغير x را بوسيله &x نشان ميدهيم و عملگر & را عملگر آدرس مينامند. int x , *pxX=54;px = &x ;
اسلاید 282: مثال :int y , x , *px ;x = 26 ;px = &x ;26pxxحال اگر دستور العمل x += 10 ; را بدهيم: 36pxxحال اگر دستورالعمل *px = *px + 7 ; بدهيم.43pxx
اسلاید 283: آرایه یک بعدی و اشاره گرهااولين عنصر آرايه بوسيله x[0] مشخص ميشود. آدرس اولين عنصر آرايه بوسيله &x[0] يا بوسيله x مشخص ميشود. آدرس i امين عنصر آرايه بوسيله &x[i] يا بوسيله (x+i) مشخص ميشود. دو دستورالعمل زير با هم معادلند .x[ i ] = 82.5 ;*(x + i) = 82.5 ; از طرف ديگر اگر داشته باشيم float x[10];float *p;دو دستورالعمل زير معادلند.p = &x[2] ;p= x + 2 ;
اسلاید 284: ساختارها و اشاره گرهاميتوان اشارهگري را تعريف نمود كه به اولين بايت يك ساختار (struct) اشاره نمايد. struct struc1 { int a ; float b ; char c; int d ;} x, *px ; px = &x ; عبارت x.a معادل pxa معادل (*px).a ميباشد.
اسلاید 285: نکته :استفاده از آرايهها بعنوان پارامتر تابع مجاز است. در اسلاید بعد به یک مثال توجه نمایید.
اسلاید 286: در برنامه زير تابع modify آرايه a را بعنوان پارامتر ميگيرد. #include <iostream.h>void modify(int [ ] ); // forward declaration int main( ){int a[5] ;for(int j=0; j<=4; ++j)a[ j ] = j+1 ;modify(a) ;for(int j=0; j<5; ++j)cout << a[ j ] << endl ;return 0 ;}void modify(int a[ ]) // function definition {for(int j=0; j<5; ++j)a[ j ] += 2 ;for(int j=0; j<5; ++j)cout << a[ j ] << endl ;return ;}خروجی : 123453456734567نکته: در این مثال از فراخوانی با مقدار استفاده نشده است. برای همین تغییرات انجام شده در تابع modify() باعث تغییر در مقادیر ارایه در تابع اصلی یا main() شده است. این مبحث، تحت عنوان فراخوانی از طریق ارجاع در ادامه توضیح داده می شود.
اسلاید 287: نکته :در صورتيكه آرايه بيش از يك بعد داشته باشد بعدهاي دوم به بعد بايستي در تعريف تابع و پيش نمونه تابع ذكر گردد. در اسلاید بعد به یک مثال توجه نمایید.
اسلاید 288: #include <iostream.h>void printarr(int [ ][ 3 ]);int main( ){int arr1 [2][3] = { {1,2,3}, {4,5,6} } ,arr2 [2][3]= {1,2,3,4,5} , arr3 [2][3]={ {1,2}, {4} };printarr(arr1);cout << endl ;printarr(arr2);cout << endl ;printarr(arr3);return 0 ; }void printarr(int a[ ][3] ){for(int i=0; i<2; i++) {for(int j=0; j<3; j++)cout << a[ i ][ j ] << ;cout << endl ;} } خروجی :
اسلاید 289: آرايههاي دوبعدي و اشارهگرها يك آرايه دوبعدي بصورت تعدادي آرايه يك بعدي ميتوان تعريف نمود.اگر x يك ماتريس 5 سطري و 4 ستوني از نوع اعشاري باشد قبلاً اين ماتريس را با float x[5][4]; معرفي كرديم. حال با استفاده از اشارهگرها بصورت زير معرفي نمائيم:float (*x)[4];
اسلاید 290: آرايههاي دوبعدي و اشارهگرها float (*x)[4];
اسلاید 291: در برنامه زير يك آرايه 5 عنصري از نوع int ايجاد شده و مقادير عناصر آرايه را به چهار طريق نمايش ميدهد. #include <iostream.h>int main( ){int x[ ]={12, 25, 6, 19, 100}, i;int *px=x; //نام آرايه بدون انديس، اشاره به عنصر اول آرايه مينمايد for(i=0; i<=4; i++)cout << *(x+i) << endl;//the second method for(i=0; i<5; i++)cout << x[ i ] << n;//the third method for(i=0; i<=4; i++)cout << px[ i ]<<endl;//the forth method for(i=0; i<=4; i++)cout << *(px+i)<<endl;return 0; }
اسلاید 292: تخصيص حافظه به صورت پويا يا (عملگر new) از عملگر new براي تخيصيص حافظه به صورت پويا می توان استفاده نمود ، در ضمن ميتوان براي بلوكي از حافظه كه تخصيص يافته مقدار اوليه تعیین نمود. newdeletedynamic memory allocation
اسلاید 293: براي تخصيص حافظه باندازه 20 مقدار از نوع int كه اشارهگر ptx به آن اشاره نمايد بصورت زير عمل ميشود. int *ptx;ptx = new int [20]; ptx به اولين داده از نوع int اشاره مينمايد. ptx+i به i+1 امين عنصر از فضاي پيوسته اشاره مينمايد.
اسلاید 295: برنامه زير يك فضاي n عنصري از نوع اعشاري در حافظه ايجاد نموده، سپس آن را مقدار داده و مجموع مقادير رامشخص و نمايش ميدهد. #include <iostream.h>int main( ){int n;float *ptr, tot = 0.0;cout << enter a value for n << endl; cin >> n;ptr=new float [n];for(int j=0; j<n; ++j) { cin >> *(ptr + j); cout << n ; }for(j=0; j<=n-1; ++j) tot += *(ptr + j);cout << tot ;// in order to free the space use delete[ ] ptr ;return 0; }
اسلاید 296: برنامه زير آرايههاي n عنصري از ساختار را ايجاد مينمايد.#include <iostream.h>#include <conio.h>int main( ){struct rec {float a;int b; } ;int n; rec *ptr; cout << how many records? n;cin >> n ;ptr = new rec[n];for(int i=0; i<n; ++i) { cout <<((ptr+i) ->b=i) << ; cout <<((*(ptr +i)).a = i+0.5) << endl ; }delete [ ] ptr;getch();return 0;}
اسلاید 297: برنامه زير دو مقدار اعشاري را گرفته مقادير آن ها را به كمك تابع swap جابهجا مينمايد.#include <iostream.h>#include <conio.h> void swap(float *, float *);int main( ){float a,b,*ptb,*pta; cin >> a >> b; pta=&a;ptb=&b;swap(pta,ptb); ///////swap(a,b);cout << a << endl << b << endl ;return 0; }void swap(float *px , float *py){ float t; t = *px; *px = *py; *py = t ; return; }
اسلاید 298: برنامه ای که تعداد n عدد را از ورودی خوانده ، در آرایه ای قرار می دهد و سپس آرایه را به تابعی ارسال می کند .تابع تعداد اعداد زوج و فرد را نمایش دهد.
اسلاید 299: رشتهها و توابع مربوطه رشتهها در C++ ، آرايهاي از كركترها ميباشند كه با كركتر 0 ختم مي شوند. char name[ ]= sara;
اسلاید 301: مقداردهی اولیه به رشته
اسلاید 306: رشته و اشاره گر هر رشته از طريق اشارهگري به اولين كركتر آن در دسترس قرار ميگيرد. آدرس يك رشته، آدرس كركتر اول آن ميباشد. به رشتهها ميتوان مقدار اوليه تخصيص داد. char *name = sara;
اسلاید 311: تابع strcmpi(s1, s2) رشتههاي s1 و s2 را با هم مقايسه نموده (بدون توجه به حروف كوچك و بزرگ) اگر رشته s1 برابر با رشته s2 باشد مقدار صفر و اگر رشته s1 كوچكتر از رشته s2 باشد يك مقدار منفي در غير اينصورت يك مقدار مثبت بر ميگرداند.char *s1= ALI; // char s1[10] = ALI; char *s2=ali; //char s2[10]=ali;cout << strcmpi(s1, s2) << endl;0
اسلاید 312: تابع ) strcmp(s1, s2رشتههاي s1 و s2 را با هم مقايسه نموده اگر s1 برابر با s2 باشد مقدار صفر و اگر رشته s1 كوچكتر از رشته s2 باشد يك مقدار منفي در غير اينصورت يك مقدار مثبت برميگرداند. char *s1= ALI;char *s2=ali;char s1[10]= ALI;char s2[10]=ali;cout << strcmp(s1, s2) << endl;-1
اسلاید 313: تابع ) strncmp(s1, s2,nحداكثر n كركتر از رشتة s1 را با n كركتر از رشتة s2 مقايسه نموده در صورتيكه s1 كوچكتر از s2 باشد يك مقدار منفي، اگر s1 مساوي با s2 باشد مقدار صفر در غير اينصورت يك مقدار مثبت برميگرداند. char *s1= ali reza;char *s2=ali;char s1[10]= ali reza;char s2[10]=ali;cout << strncmp(s1, s2,3) << endl;0char *s1= ali reza;char *s2=ali;char s1[10]= ali reza;char s2[10]=ali;cout << strncmp(s1, s2,4) << endl;32
اسلاید 314: تابع (strcat(s1, s2دو رشتة s1 و s2 را بعنوان آرگومان گرفته رشتة s2 را به انتهاي رشتة s1 اضافه مينمايد. كركتر اول رشتة s2 روي كركتر پاياني 0 رشتة s1 نوشته ميشود ونهايتاً رشتة s1 را برميگرداند.char s1[20]= ali ;char *s2=reza;char s2[20]=reza;cout << strcat(s1, s2) << endl;ali reza
اسلاید 315: تابع (strncat(s1, s2,nدو رشته s1 و s2 ومقدار صحيح و مثبت n را بعنوان آرگومان گرفته، حداكثر n كركتر از رشتة s2 را در انتهاي رشتة s1 كپي مينمايد. اولين كركتر رشته s2 روي كركتر پاياني 0 رشتة s1 مينويسد ونهايتاً مقدار رشتة s1 را برميگرداند.char s1[20]= ali ;char *s2=reza;char s2[20]=reza;cout << strncat(s1, s2,2) << endl;ali re
اسلاید 316: تابع (strlen(sرشتة s را بعنوان آرگومان گرفته طول رشته را مشخص مينمايد. char *s1= ali;char s1[10]= ali;cout << strlen(s1);3char *s1= ali ;char s1[10]= ali ;cout << strlen(s1);4
اسلاید 317: تابع strcpy(s1,s2) دو رشتة s1 و s2 را بعنوان آرگومان گرفته رشتة s2 را در رشتة s1 كپي مينمايد و نهايتاً مقدار رشتة s1 را بر ميگرداند. char s1[20]= ali ;char *s2=reza;char s2[10]=reza;cout << strcpy(s1, s2) << endl;rezachar s1[20];char *s2=“ali;char s2[10]=“ali;cout << strcpy(s1, s2) << endl;ali
اسلاید 318: تابع (strncpy(s1, s2,nدو رشتة s1 , s2 و مقدار صحيح و مثبت n را بعنوان آرگومان گرفته، حداكثر n كركتر را از رشتة s2 در رشتة s1 كپي نموده، نهايتاً مقدار رشتة s1 را برميگرداند.char s1[20]= ali ;char *s2=reza;char s2[10]=reza;cout << strncpy(s1, s2,3) << endl;rezchar s1[20];char *s2=“amir ali;char s2[10]=“amir ali;cout << strncpy(s1, s2,4) << endl;amir
اسلاید 319: نكته مهم براي استفاده از توابع مربوط به رشتهها بايستي حتماً در ابتدا برنامه #include <string.h> را قرار دهيم.
اسلاید 320: برنامه ذيل پنج اسم را بصورت 5 رشته در نظر گرفته آن ها را بترتيب حروف الفباء مرتب نموده نمايش ميدهد.using namespace std;#include<iostream>#include<conio.h>#include<string.h>void sort(char name[][10]) {char t[10]; for(int i=0; i<4; ++i) for(int j=i+1; j<5; ++j) if(strcmpi(name[i], name[j])> 0) {// interchange the two strings strcpy(t,name[i]); strcpy(name[i] , name[j]); strcpy(name[j] , t) ; } }void main(){char name[5][10] = {sara, afsaneh, babak, saman, naser };sort(name);// display sorted strings for(int i=0; i<5; ++i) cout << name[i] << endl;getch();}
اسلاید 321: مثال :using namespace std;#include<iostream>#include<conio.h>#include<string.h>int main( ){char s1[20]= happy birthday;char s2[20]= happy holidays;cout << strcmp(s1, s2) << endl;cout << strncmp(s1, s2, 7) << endl ;getch();}-1-6
اسلاید 322: مثال :using namespace std;#include<iostream>#include<conio.h>#include<string.h>int main( ){char s[10] = sara; cout << strlen(s);getch();}4
اسلاید 323: تابع زیر معادل تابع کتابخانه strcmp می باشد.int nikstrcmp(char s[] , char t[] ){int i=0;while (s[i]==t[i] )if ( s[i++]=0 )return 0;return (s[i]-t[i]);}
اسلاید 324: برنامه ای بنویسید که رشته ای را از ورودی خوانده، تمام حروف کوچک آن رشته را به حروف بزرگ تبدیل کرده و چاپ می کند.توضیح: در این برنامه از تابعی به نام upper() استفاده کنید که در این تابع باید عملیات تبدیل را انجام دهد نکته : تفاوت کد اسکی حروف کوچک و بزرگ32 واحد است برای تبدیل ‘a’ به ‘A’ کافی است از ‘a’ به اندازه 32 واحد کم کنید.
اسلاید 325: برنامه ای بنویسید که رشته ای را که به نقطه ختم می شود را از ورودی خوانده ، کاراکتر های موجود در رشته را به همراه تعداد دفعات تکرار آنها به خروجی ببرد
اسلاید 326: فصل هشتمبرنامه نویس شی گرا
اسلاید 327: فهرست مطالب فصل هشتمتعریف شی گراییچند ریختی (polymorphism)خاصیت ارث بریپشته (stack)ایجاد شیارث بریسازنده ها و نابود کننده هاتوابع دوستکلاس های دوستتوابع سازنده پارامتر دارتوابع سازنده یک پارامتریعضوهای staticکلاسهای تودرتوکلاس های محلیاستفاده از object ها بعنوان پارامترهای تابعبرگشت اشیاءانتساب اشیاءآرایه اشیاءاشاره گر به اشیاءاشاره گر thisتوابع مجازی و پلی مرفیسم
اسلاید 328: تعریف شی گراییبرنامه نويسي شئ گرا يا oop يك روش جديد برنامه نويسي ميباشد كه در آن از ويژگي ساختيافته همراه با چند ويژگيهاي قوي جديد استفاده ميشود. زبان برنامه نويسي C++ امكان استفاده از oop را به راحتي فراهم مينمايد.
اسلاید 329: نوع داده انتزاعی برنامه ها برای حل مسائل دنیای واقعی نوشته می شوند ، مثل نگهداری اطلاعات مربوط به دانشجویان ، نگهداری اطلاعات مشتریان بانک ها .گر چه می توان بسیاری از مسئله های دنیای واقعی را با استفاده از انواع اولیه حل کرد ، اما با تعریف انواع جدیدی که بتوان اشیای دنیای واقعی ، مثل دانشجویان را مدلسازی کنند ، حل مسائل راحتر خواهد بود در زبان برنامه نویسی شی گرا امکان تعریف انواع جدید وجود دارد در زبان برنامه نویسی C++ برای تعریف نوع جدید ، از کلاس ها استفاده می شود
اسلاید 330: کلاس ها و اشیاکلاس ها نوع جدیدی است که برنامه نویس آن را برای حل مسئله های دنیای واقعی تعریف می کند ، کلاس ها حاوی داده ها و تعریف عملیات است داده های عضو کلاس را فیلد یا صفت می گویند.عملیات کلاس ها را تابع یا متد می نامند.شی یک نمونه از کلاس است که در تکنیک برنامه نویسی شی گرا یک نهاد زمان اجرا می باشد.
اسلاید 331: نکته مهم :تمام زبانهاي برنامه نويسي شيگرا داراي سه خصوصيت مشترك زير ميباشند : الف: encapsulation (محصورسازي) ب: polymorphism (چندريختي) ج:inheritance (ارث بري)
اسلاید 332: محصورسازی (Encapsulation )محصور سازی یا بسته بندی به معنای این است که تمام جنبه های یک نهاد در داخل یک کلاس جمع آوری و از سایر نهاد ها تفکیک می شود .بسته بندی ، مانع از این می شود که داده ها یک شی، توسط متد های شی دیگری دستیابی شود.
اسلاید 333: polymorphism (چند ريختي)چند ریختی به معنای این است که نهادی مثل متغیر ، تابع ، شی، معانی یا کاربردهای مختلفی داشته باشند .به عنوان مثال توابع همنام نوعی چند ریختی محسوب می شوند.
اسلاید 334: inheritance (ارث بري)ارث بري فرآيندي است كه بوسيله آن يك شي (object) ميتواند خاصيتهاي شي ديگري را دارا شود.
اسلاید 335: تعریف کلاس و اشیادر c++ Class نام کلاس {داده ها توابع اختصاصیPublic :داده ها و عمومیPrivate : داده ها و توابع اختصاصی Protected:داده ها و توابع محافظت شده}اشایی از کلاس;
اسلاید 336: مثال
اسلاید 337: دستیابی به اعضای یک کلاسبرای دستیابی به اعضای یک کلاس از (نقطه) به صورت زیر استفاده می شود.نام عضو کلاس. نام شی کلاس امکان پذیر نیست em1.nameEm1.putname() امکان پذیر نیست Em1.age()
اسلاید 338: برنامه ای که طول و عرض مستطیلی را از ورودی خوانده ، مساحت و محیط آن را به خروجی می برد
اسلاید 339: برنامه ای با استفاده از کلاس ها بنویسید که عددی را از ورودي گرفته و فاكتوريل آن را محاسبه ونمايش ميدهد.
اسلاید 340: پشته (stack) پشته ساختاري است كه داراي خاصيت last in first out ميباشد. پشته فضاي پيوسته در حافظه اشغال مينمايد. عملياتي كــه روي پشته انجام ميشوند عبارتند از :الف: push، كه باعث ميشود يك عنصر وارد پشته شده.ب: pop ، كه باعث ميشود يك عنصر از پشته خارج گردد.
اسلاید 341: ايجاد شي (object)بمنظور ايجاد يك شي بايستي از كلمة رزروشده class استفاده نمود. class از نظر ظاهر شبيه ساختار يا struct ميباشد. پشته را بعنوان يك object ميتوان در نظر گرفت كه data آن شامل يك آرايه و يك tos ، و عملياتي كه روي اين object انجام ميشود عبارتست از push، initialize ، pop كردن پشته.در اسلاید بعد مثالی از نحوه ایجاد شی آورده شده است.
اسلاید 342: مثال :#define SIZE 100// this creates the class stack.class stack { private : int stck[SIZE]; int tos;public: void init( );void push(int i);int pop( ); };بدين معني است كه stck و tos بوسيله توابعي كه عضو object نباشند غير قابل دسترسي هستند. و اين يكي از روشهاي محصور سازي اقلام دادههاست. بدين معني است كه بوسيله ساير قطعات برنامه قابل دسترسي ميباشد.
اسلاید 343: نکته : فقط توابع عضو ميتوانند به متغيرهاي عضو از نوع private دسترسي داشته باشند. بايستي توجه داشت كه اگر نوع عضوي مشخص نگردد آن عضو به صورت اتوماتيك private می باشد.Private
اسلاید 344: نحوه تعریف تابع عضو یک کلاس void stack : : push(int i){ if(tos = = SIZE ) { cout << stack is full.; return; } stck[tos]= i ; tos ++ ;}عملگر: : مشخص مينمايد كه تابع متعلق به كدام object ميباشد. عملگر : : عملگر scope resolution ناميده ميشود.
اسلاید 345: برنامه کامل stack :#include <iostream.h>#define SIZE 100// this creates the class stack. class stack { int stck[SIZE]; int tos;public:void init(int i); int pop( ); void push(int i); };void stack : : init( ){ tos = 0 ;}void stack : : push(int i){ if(tos = = size) { cout << stack is full. ; return ; }stck[tos] = i ;tos ++ ;}int stack : : pop( ){ if(tos = = 0) { cout << stack empty. ; return 0 ; } tos - - ; return stck[tos]; }int main( ){stack st1, st2; // create two objectsst1. init( ); st2.init( );st1.push(1);st2.push(2);st1.push(3);st2.push(4);cout << st1.pop( ) << endl;cout << st1.pop( ) << endl;cout << st2. pop( ) << endl;cout << st2. pop( ) << endl;return 0; }
اسلاید 346: سازندهها و نابودكنندهها (constructors and destructors)Initialization يا مقدار اوليه دادن بصورت اتوماتيك از طريق تابعي انجام ميشود بنام تابع constructor يا تابع سازنده. تابع سازنده تابع مخصوصي است كه عضوي از كلاس بوده و همنام با كلاس ميباشد.
اسلاید 347: سازندهها و نابودكنندهها (constructors and destructors) تابع نابود كننده يا destructor ، عكس عمل تابع سازنده را انجام ميدهد. وقتي كه شياي از بين ميرود بصورت اتوماتيك تابع نابود كننده آن فراخواني ميگردد.
اسلاید 348: سازندهها (constructors)
اسلاید 349: سازندهها با پارامتر (constructors)
اسلاید 350: مثال از سازنده با یک پارامتر
اسلاید 351: توابع دوست کلاسهمانطورکه گفته شد تابعی که عضو کلاس نباشد ، نمی تواند به اعضای اختصاصی آن کلاس دستیابی داشته باشند برای اعلان تابع دوست ، باید الگوی آن را در داخل کلاس قرار دهید و کلمه کلیدی Friend را قبل از آن ذکر کنید.
اسلاید 352: برنامه ای که با استفاده از تابع دوست دوعدد را با هم جمع و تفریق می کند
اسلاید 353: مثال: تابع دوست دو کلاس
اسلاید 354: مثال: کلاس های دوست کلاس های را می توان دوست کلاس های دیگر معرفی کرد. دراین حالت ، کلاس دوست و تمام توابع عضو آن به اعضای اختصاصی کلاس دیگر دسترسی دارند برنامه ای که با استفاده از کلاس دوست ، بین دو عدد کوچکترین را پیدا می کند.
اسلاید 355: اعضای کلاس با ویژگی staticدر بعضی از مواقع ، فقط یک کپی از یک متغیر باید بین تمام اشیای یک کلاس مشترک باشد . کلمه کلیدی static برای این منظور به کار می رود.وقتی کلمه کلیدی static را با اعضای داده ای کلاس به کار می بریم ، به کامپایلر می گوییم که فقط یک کپی از آن متغیر وجود خواهد داشت و تمام اشیای آن کلاس ، آن متغیر را به اشتراک می گذارند.
اسلاید 356: مثال: اعضای کلاس با ویژگی static برنامه ای که کاربرد و اثر عضو داده ای staticرا نشان می دهد.
اسلاید 357: انتساب اشياء (object assignment)در صورتيكه دو تا object از يك نوع باشند ميتوان يك object را بديگري انتساب نمود. در اسلاید بعد مثالی آورده شده است.
اسلاید 358: مثال :#include <iostream.h>#include <conio.h>class myclass{ int i; public: void set_i(int n) {i=n;} int get_i( ) {return i;} };int main( ){myclass ob1, ob2; obl.set_i(126);ob2= ob1; // assign data from ob1 to ob2 clrscr( );cout << ob2.get_i( );retrun 0 ; }
اسلاید 359: مثال: آرایه ای از اشیا
اسلاید 360: اشاره گر به کلاس Pointers to Classesاشاره گرها همانطور که می توانند به متغیرها اشاره کنند، می توانند به اشیاء یک کلاس نیز اشاره کنند و چون شی نمونه ای از کلاس است پس به کلاس اشاره می کنند . در حالت ساده برای دسترسی به اعضای کلاس توسط شی تعریفی، از نقطه (.) استفاده کردیم. اما در اشاره گر به شی باید از ترکیب 2 کاراکتر خط و بزرگتر (<-) استفاده کنیم. با هم مثالی کامل از اشاره گر به شی یا همان کلاس را بررسی می کنیم :
اسلاید 361: مثال :اشاره گر به کلاس
اسلاید 362: برنامه ای که نام ، شماره دانشحویی و معدل تعداد 15 دانشجو را از ورودی خوانده در آرایه ای از اشیا قرار داده و سپس دانشجویی که بیشترین معدل را دارد نمایش دهد.
اسلاید 363: ارث بریارث بري فرآيندي است كه بوسيله آن يك شي (object) ميتواند خاصيتهاي شي ديگري را دارا شود.
اسلاید 364: کلاس های پايه و مشتق شدهچند کلاس ممکن است خصوصيات و رفتارهای مشترکی داشته باشند اما هريک شامل خواص و توابع ديگری هم باشد. وراثت اجازه می دهد يک کلاس عمومی تعريف شود که اشيا درخصوصيات آن مشترک هستند و اين کلاس می تواند توسط ساير کلاس ها ارث برده شود و خواص جديدی به آن اضافه شود بدون اينکه تاثيری روی کلاس عمومی داشته باشد. وراثت شباهت بين دو کلاس را با استفاده از مفاهيم کلاس پايه base و کلاس مشتق شده derived بيان می کند. کلاسی که از آن ارث بری می شود کلاس پايه يا مبنا و کلاس وارث که خصوصيات کلاس پايه را به ارث می برد را کلاس مشتق شده می نامند. کلاس پايه شامل کليه خواص و رفتارهائی است که بين کلاس های مشتق شده مشترک است.
اسلاید 365: مثال:مثال. کلاس پايه shape را درنظر بگيريد که دارای خاصيت های اندازه، رنگ و موقعيت است. هر شکل می تواند رسم شود، پاک شود، حرکت کند و رنگ شود. هر کدام از اشکال دارای خواص و رفتارهای اضافه تری هستند. برای يک شکل معين بعضی رفتارها ممکن است متفاوت باشد مثلا محاسبه مساحت.نکته. يک کلاس متشق شده به نوبه خود می تواند کلاس پايه برای ساير کلاس ها باشد. نکته. اگر کلاس پايه تغيير کند کلاس مشتق شده نيز تحت تاثير اين تغييرات قرار می گيرد.
اسلاید 366: تعريف کلاس مشتق شدهفرم کلی تعريف يک کلاس مشتق شده به صورت زير است:class derived : access base { //members of new class; }derived نام کلاس جديد است که از کلاس پايه base مشتق شده است. قسمت access اختياری است ولی می تواند public، private يا protected باشد و برای تعيين مجوز دسترسی اعضای کلاس پايه در کلاس جديد بکار می رود. اگر مجوز دسترسی ذکر نشود به اين معنی است که کليه اعضای عمومی کلاس پايه در کلاس مشتق شده به صورت خصوصی خواهند بود.
اسلاید 367: مثال. کلاس جديد Derived از کلاس Base مشتق شده است. در برنامه اصلی تابع change از کلاس Derived فراخوانی شده که خود دو تابع set و read از کلاس Base را صدا می زند.
اسلاید 368: مثال:
اسلاید 369: پروژهکلاسی به نام tictac تعریف کنید که با آن بتوانید دوزبازی انجام دهید این کلاس حاوی یک آرایه دوبعدی 3* 3 از نوع صحیح است .سازنده کلاس باید عناصر آرایه را برابر صفر قرار دهد. دو بازیکن ، بازی می کنند . بازیکن اول عدد 1 را در قرار می دهد و بازیکن دوم عدد 2 را در مربعی قرار می دهد . حرکت ها باید در خانه های خالی انجام شود .پس از هر حرکت کنترل می کنید که آیا کسی برنده شده است یا خیر . برنامه باید نوبت را رعایت کند مشخص کند که کدام بازیکن باید اول شروع کند.
اسلاید 370: keywords and alternative tokens.
اسلاید 371: پایان
خرید پاورپوینت توسط کلیه کارتهای شتاب امکانپذیر است و بلافاصله پس از خرید، لینک دانلود پاورپوینت در اختیار شما قرار خواهد گرفت.
در صورت عدم رضایت سفارش برگشت و وجه به حساب شما برگشت داده خواهد شد.
در صورت بروز هر گونه مشکل به شماره 09353405883 در ایتا پیام دهید یا با ای دی poshtibani_ppt_ir در تلگرام ارتباط بگیرید.
- پاورپوینتهای مشابه
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.