You are on page 1of 97

‫به نام خدا‬

‫دانشگاه صنعتی بیرجند‬

‫گروه مهندسی كامپیوتر و فناوري اطالعات‬

‫جزوه درس مبانی كامپیوتر و برنامه نويسی‬

‫وحیده بابائیان‬

‫‪vahidebabaiyan@yahoo.com‬‬

‫‪vahidebabaiyan.blogfa.com‬‬

‫‪sajaddehganzadeh78@gmail.com‬‬
‫‪ ‬جايگاه اين درس در رشته مهندسی كامپیوتر و مهندسی ‪IT‬‬

‫اين درس اولين درس دانشگاهي رشته مي باشد و نقطه شروعي براي ورود به دنياي جالب برنامه نويسي و علم و فن کامپيوتر‬
‫هست ‪ .‬بنابراين ياد گيري اصول اوليه برنامه نويسي در اين درس از جايگاه ويژه اي برخوردار است‪.‬‬

‫اين درس پايه و اساس برنامه نويسي است که جزء اصول اين رشته مي باشد و اين اصول را به فرگيران ياد مي دهد ‪ .‬بنابراين‬
‫يادگيري دقيق اين درس به همراه ارائه پروژه هاي عملي که الزمه اين درس مي باشد جزء اهم مسائل مي باشد ‪.‬‬

‫‪ ‬اهداف درس‬

‫‪ ‬الگوريتمي براي حل مسئله ارائه دهد‪.‬‬

‫‪ ‬اصول و مباني اوليه نرم افزار و سخت افزار را بشناسد‪.‬‬

‫‪ ‬اهداف و مفاهيم زبانهاي برنامه نويسي را بداند‪.‬‬

‫‪ ‬مفاهيم اوليه برنامه نويسي ساخت يافته را بداند و اصول الزم را در مرحله اجراء بکار ببرد ‪.‬‬

‫‪ ‬دستورات زبان ‪ C++‬را در برنامه ها بکار ببرد‪.‬‬

‫‪ ‬از توابع و روال هاي استاندارد زبان ‪ C++‬در صورت لزوم استفاده نمايد‪.‬‬

‫‪ ‬از توابع ‪ ،‬روال ها براي جدا کردن قطعات برنامه استفاده کند‪.‬‬

‫‪1‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫جلسه اول‪ :‬مفاهیم پايه كامپیوتر‬

‫سخت افزار (قسمت هاي قابل لمس و ديدني)‬

‫سيستم عامل مثل ‪Dos, Windows‬‬ ‫کامپيوتر‬

‫زبان هاي برنامه نويسي مثل ‪C, Pascal, Visual Basic‬‬ ‫نرم افزار‬

‫برنامه هاي کاربردي‬

‫بیت‪ :‬کوچکترين واحد اطالعاتي در کامپيوتر که مي تواند مقادير ‪ 0‬و ‪ 1‬را داشته باشد‪.‬‬

‫بايت‪ :‬به مجموع ‪ 8‬بيت يک بايت گوييم‪ .‬مثالً‪01001011 :‬‬

‫‪ 1‬کيلو بايت‪ 1001:‬بايت‬

‫‪ 1‬مگا بايت‪ 1001 :‬کيلو بايت‬

‫‪ 1‬گيگا بايت‪ 1001 :‬مگا بايت‬

‫اجزاي اصلی يک كامپیوتر‬

‫هر سيستم کامپيوتري از چهار قسمت اصلي تشکيل مي شود‪:‬‬

‫‪ )1‬واحد پردازش مرکزي ‪ )0‬واحد ورودي ‪ )3‬واحد خروجي ‪ )1‬حافظه‬

‫‪2‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫واحد پردازش مركزي‬

‫ريز پردازنده‪ ،‬تراشه ي الکترونيکي است که انجام عمليات پردازشي‪ ،‬منطقي‪ ،‬رياضي و کنترلي را بر عهده دارد‪ .‬اين قسمت‬
‫اصلي ترين بخش و در واقع مغز کامپيوتر محسوب مي شود‪ .‬نام ديگر آن ‪ Central Processing Unit‬مي باشد‪.‬‬

‫واحد ورودي‬

‫واحدي که داده ها را از دستگاه هاي ورودي دريافت کرد ه و جهت تبديل آن ها به داده هاي قابل فهم کامپيوتر‪ ،‬آن را به واحد‬
‫کنترل تحويل مي دهد‪ .‬قابل ذکر است که واحد کنترل بخشي از ‪ CPU‬مي باشد‪ .‬دستگاه هاي ورودي شامل موس‪ ،‬کيبورد‪،‬‬
‫اسکنر‪ ،‬وسايل بازي و ‪ ....‬هستند‪.‬‬

‫‪3‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫‪4‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬
‫واحد خروجی‬

‫واحدي است که اطالعات توليد شده توسط کامپيوتر را از حافظه اصلي دريافت کرده و به دستگاه هاي خروجي منتقل مي‬
‫نمايد‪ .‬دستگاه هاي خروجي عبارتند از‪ :‬چاپگر‪ ،‬پالتر يا نقشه کش‪ ،‬مونيتور يا صفحه نمايش‪ ،‬اسپيکر و ‪...‬‬

‫حافظه ها‬

‫حافظه مکاني است که اطالعات موقتاً يا دائماً در آن قرار مي گيرد‪ .‬حافظه هاي درون سيستم به دو دسته ي حافظه هاي‬
‫اصلي )‪ (Main Memory‬و حافظه هاي جانبي يا ثانويه )‪ (Secondary Memory‬تقسيم مي شوند‪ .‬هر برنامه براي اجرا ابتدا‬
‫بايستي در حافظه ي اصلي قرار بگيرد و سپس توسط ‪ CPU‬اجرا شود‪ .‬پس از اجراي برنامه‪ ،‬براي ذخيره اطالعات برنامه‪ ،‬آن ها‬
‫را روي حافظه ي جانبي ذخيره مي کنند‪.‬‬

‫وب سايت‬

‫به مجموعه اي از صفحات وب که توسط يک سرور وب‪ ،‬ميزباني مي شوند يک وب سايت گوييم‪.‬‬

‫‪5‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مرورگر وب‬

‫يک نرم افزار کاربردي است که اسناد فرامتني وب را پيدا مي کند و آن ها را در کامپيوتر کاربر باز مي نمايد‪ .‬اولين مرورگر وب‬
‫‪ Mosaic‬بود که در سال ‪ 1993‬شروع به کار کرد‪.‬‬

‫از انواع ديگر مرورگر هاي وب مي توان به عنوان مثال اينترنت اکسپلورر‪ ،‬موزيال فايرفاکس و ‪ ...‬را نام برد‪.‬‬

‫ايمیل‬

‫چيزي شبيه سيستم پستي قديمي مي باشد‪ .‬ما مي توانيم به وسيله ي ايميل پيام خود را کمتر از يک ثانيه به تمام دنيا‬
‫بف رستيم‪ .‬صدا‪ ،‬تصوير و فايل هاي مختلفي مي توانند به نامه ي ما پيوست شوند‪ .‬بر خالف سيستم تلفن‪ ،‬اين سيستم يک‬
‫سيستم افالين مي باشد‪ .‬يعني در زمان ارسال نامه الزم نيست طرف مقابل پشت سيستم خود باشد‪.‬‬

‫موتور جستجو‬

‫از اين وسيله براي جستجوي يک تاپيک يا موضوع خاص در اين ترنت استفاده مي کنيم‪ .‬اين موتورهاي جستجو از طريق‬
‫مرورگرهاي وب در دسترس خواهند بود‪ .‬هر کلمه کليدي يا عبارتي که وارد کنيد با مجموعه اي از نتايج روبرو خواهيد شد‪ .‬در‬
‫ادامه مثال هايي از چند موتور جستجو اورده شده است‪:‬‬

‫سیستم عامل‬

‫سيستم عامل يک نرم افزار سيست مي است که در واقع ارتباط بين سخت افزار و‬
‫نرم افزار کاربردي را کنترل مي نمايد‪ .‬به عبارت ديگر به عنوان واسط سخت افزار و‬
‫برنامه هاي کاربردي انجام وظيفه مي کند‪.‬‬

‫‪6‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫زبان هاي برنامهنويسی‬

‫نرمافزارها توسط زبان هاي برنامهنويسي نوشته ميشوند‪ .‬زبان هاي برنامهنويسي‪ ،‬يک سيستم ارتباطي هستند که توسط آن ها‬
‫ميتوان دستورات الزم را به ماشين انتقال داد‪.‬‬

‫هر زبان برنامهنويسي به مجموعهأي از عاليم‪ ،‬قواعد و دستورالعملها گفته ميشود که امکان ارتباط با کامپيوتر را جهت بيان‬
‫کاري يا حل مسئلهاي فراهم ميکند‪.‬‬

‫در حالت کلي زبان هاي برنامهنويسي را به سه دسته زير تقسيمبندي ميکنند‪:‬‬

‫‪ ‬زبان هاي سطح باال‬

‫‪ ‬زبان هاي سطح پايين‬

‫‪ ‬زبان هاي سطح مياني‬

‫کامپايلر برنامه نوشته در يک زبان سطح باال را به برنامه مقصد تبديل ميکند‪.‬‬

‫‪7‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫جلسه دوم‪ :‬آشنايی با سیستم اعداد‬

‫مرور سیستم دهدهی‬

‫‪ ‬پايه ‪ 10‬است و ارقام ‪ 9 ... ،1 ،0‬مي باشند‪.‬‬

‫‪ ‬براي اعداد بزرگتر از ‪ ،9‬يک رقم با اهميت تر به سمت چپ اضافه کنيد‪ .‬مثال‪9>19 :‬‬

‫‪ ‬هر محل داراي يک وزن است‪:‬‬

‫‪ ‬به عنوان مثال عدد ‪ 1936301‬را مي توان به صورت زير نمايش داد‪:‬‬

‫‪1103  9 102  3 101  6 100  2 10 1  5 10 2‬‬

‫سیستم عدد نويسی دودويی‬

‫‪ ‬پايه ‪ 0‬است و ارقام ‪1 ،0‬هستند‪.‬‬

‫‪ ‬براي اعداد بزرگتر از ‪ ،1‬يک رقم با اهميت تر به سمت چپ اضافه کنيد‪ .‬مثال‪1>10 :‬‬

‫‪ ‬هر محل داراي يک وزن است‪:‬‬

‫‪ ‬به عنوان مثال عدد ‪ 10111301‬را مي توان به صورت زير محاسبه کرد‪:‬‬

‫‪1 24  0  23  1 22  1 21  1 20  0  21  1 22 ‬‬

‫‪ 116  0  8  1 4  1 2  11  0  0.5  1 0.25  23.25‬‬

‫‪8‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مبناي دو (باينري)‬

‫سيستم عدد نويسي دودويي‬

‫‪(110000.0111)2 = ( ? ) 10‬‬

‫جواب‪1831381 :‬‬

‫در دنياي کامپيوتر‪:‬‬

‫‪ 1001=010 ‬با ‪( K‬کيلو) نشان داده مي شود‪.‬‬

‫‪ 1018186=000 ‬با ‪( M‬مگا) نشان داده مي شود‪.‬‬

‫‪( G =030 ‬گيگا)‬

‫‪( T = 010 ‬ترا)‬

‫چه تعداد بيت در يک حافظه ‪ 16GByte‬وجود دارد؟‬

‫‪9‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مبناهاي ‪ 8‬و ‪16‬‬

‫– مبناي ‪8‬‬
‫– پايه ‪ 8‬است و رقم ها ‪ 0, 1, 2, 3, 4, 5, 6, 7‬هستند‬

‫– ‪(236.4)8 = (158.5)10‬‬

‫‪2  82  3  81  6  80  4  8 1  158.5‬‬ ‫–‬

‫– مبناي ‪16‬‬
‫– پايه ‪ 16‬است و رقمهاي ‪ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9‬از سيستم دهديي قرض گرفته شده اند و از ‪A, B,‬‬

‫‪ C, D, E, F‬به ترتيب براي نمايش رقمهاي ‪ 11 ،11 ،13 ،10 ،11 ،10‬استفاده مي گردد‪.‬‬

‫– ‪(D63FA)16 = (877562)10‬‬

‫‪13164  6 163  3 162  15 161  10 160  877562‬‬

‫تبديل از دهدهی به دودويی‬

‫تبديل اعداد اعشاري‪:‬‬

‫معادل دودويي ‪ (0.8542)10‬را تا شش رقم دقت پيدا کنيد‪.‬‬

‫‪0.8542 × 2 = 1 + 0.7084‬‬ ‫‪a-1 = 1‬‬

‫‪0.7084 × 2 = 1 + 0.4168‬‬ ‫‪a-2 = 1‬‬

‫‪0.4168 × 2 = 0 + 0.8336‬‬ ‫‪a-3 = 0‬‬

‫‪0.8336 × 2 = 1 + 0.6672‬‬ ‫‪a-4 = 1‬‬

‫‪0.6672 × 2 = 1 + 0.3344‬‬ ‫‪a-5 = 1‬‬

‫‪0.3344 × 2 = 0 + 0.6688‬‬ ‫‪a-6 = 0‬‬

‫( = ‪(53.8542)10‬‬ ‫?‬ ‫‪)2‬‬

‫‪11‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تبديل از مبناي ده به مبناي دو به صورت زير است‪:‬‬

‫جمع دودويی‬

‫‪11‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫جلسه سوم‪ :‬آشنايی با الگوريتم‬
‫هدف هاي کلي‬

‫– شناخت حل مسئله و ارائه الگوريتم‬

‫– شناخت اجزاء الزم براي حل مسئله‬

‫– بررسي صحت الگوريتم‬

‫هدف هاي رفتاري‬

‫دانشجو پس از مطالعه اين فصل بايد بتواند‪:‬‬

‫– الگوريتمي را براي حل مسئله ارائه دهد‪.‬‬

‫– الگوريتم هاي مختلف براي يک مسئله را مقايسه کند‪.‬‬

‫– شرط ها و حلقه ها را در الگوريتم بکار ببرد ‪.‬‬

‫در زندگي روزمره‪ ،‬انسان با مسائل مختلفي روبروست و براي هر کدام از اين مسائل (حل مشکالت) راه حلي و روشي را بر ميگزيند‪ .‬مسائلي از‬
‫قبيل راه رفتن‪ ،‬غذا خوردن‪ ،‬خوابيدن و غيره که بشر تقريباً هر روز آنها را پيش روي خود دارد‪.‬‬

‫همه اين مسائل نياز به روشي براي حل کردن دارند مثال راه رفتن بايد با ترتيب خاصي و مراحل معيني انجام شود‪ .‬تا مسئله راه رفتن براي بشر‬
‫حل شود‪ .‬اصطالحاً روش انجام کار يا حل مسئله را الگوريتم آن مسئله مينامند‪.‬‬

‫تعريف الگوريتم‬

‫هر دستورالعملي که مراحل انجام کاري را با زباني دقيق و با جزئيات کافي بيان نمايد بطوريکه ترتيب مراحل و شرط خاتمه‬
‫عمليات در آن کامال“ مشخص شده باشد را الگوريتم گويند‪ .‬به عبارتي ديگر‪ :‬الگوريتم مجموعهاي از دستورالعمل ها‪ ،‬براي‬
‫حل مسئله ميباشد که شرايط زير را بايد دارا باشد‪:‬‬

‫– دقيق باشد‬
‫– جزئيات کامل حل مسئله را داشته باشد‪.‬‬
‫– پايانپذير باشد‪.‬‬

‫‪12‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مراحل الگوريتم‬

‫براي حل يک مسئله بايد الگوريتم آن مسئله را مشخص کنيم (يا بيابيم)‪ .‬که اصطالحاً طراحي الگوريتم براي آن مسئله ناميده‬
‫ميشود‪ .‬در طراحي الگوريتم معموالً سه مرحله زير را از هم جدا ميکنند‪:‬‬

‫– خواندن دادهها‬
‫– انجام محاسبات‬
‫– خروجی ها‬

‫مثال ‪ :‬الگوريتمي بنويسيد که دو عدد از ورودي دريافت کرده مجموع دو عدد را محاسبه و چاپ نمايد‪.‬‬

‫ورودي ها‬ ‫انجام محاسبات‬ ‫خروجیها‬

‫‪a , b‬‬ ‫جمع دو عدد‬ ‫مجموع دو عدد‬

‫‪0‬ـ شروع‬
‫‪1‬ـ ‪ b ,a‬را بخوان‪.‬‬
‫‪0‬ـ مجموع ‪ b , a‬را محاسبه و در ‪ sum‬قرار بده‪.‬‬
‫‪3‬ـ ‪ sum‬را در خروجي چاپ کن‬
‫‪1‬ـ پايان‬
‫مثال‪ :‬الگوريتمي بنويسيد که سه عدد از ورودي دريافت کرده مجموع و ميانگين سه عدد را محاسبه و چاپ کند‪.‬‬

‫ورودي ها‬ ‫انجام محاسبات‬ ‫خروجیها‬

‫‪a,b,c‬‬ ‫محاسبه مجموع‬ ‫چاپ مجموع‬

‫محاسبه میانگین‬ ‫چاپ میانگین‬

‫‪0‬ـ شروع‬
‫‪1‬ـ سه عدد از ورودي بخوان‬
‫‪0‬ـ مجموع سه عدد را محاسبه و در ‪ sum‬قرار بده‪.‬‬
‫‪3‬ـ ‪ sum‬را بر سه تقسيم کرده‪،‬در ‪ ave‬قرار بده‪.‬‬
‫‪1‬ـ ‪ ave , sum‬را در خروجي چاپ کن‪.‬‬
‫‪1‬ـ پايان‪.‬‬

‫‪13‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فلوچارت‬

‫معموالً درك يک الگوريتم با شکل راحت تر از نوشتن آن بصورت متن ميباشد‪ .‬لذا الگوريتم را با فلوچارت (‪)flowchart‬‬
‫نمايش ميدهند‪ .‬فلوچارت از شکلهاي زير تشکيل ميشود‪.‬‬

‫‪ .1‬عالمتهاي شروع و پايان‪ :‬که معموال از يک بيضي استفاده ميکنند‪:‬‬

‫‪Begin‬‬
‫‪End‬‬

‫‪ .0‬عالمت هاي ورودي و خروجي‪ :‬که معموال از متوازياالضالع استفاده ميشود‪:‬‬

‫خواندن يا ‪Read‬‬ ‫چاپ کردن يا ‪write‬‬

‫‪ .3‬عالمت هاي محاسباتي و جايگزيني‪ :‬براي نمايش دستورات جايگزيني و محاسباتي از مستطيل استفاده ميکنند‪:‬‬

‫جايگزين يا محاسبات‬

‫‪ .1‬عالمت شرط‪ :‬براي نمايش شرط از لوزي استفاده ميشود‪.‬‬

‫شرط‬

‫‪ .1‬عالمت اتصال‪ :‬براي اتصال شکلهاي مختلف بهم از فلشهاي جهتدار استفاده ميکنند‪.‬‬

‫‪14‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال» فلوچارت مجموع سه عدد‬

‫مثال‪ :‬فلوچارتي رسم نمائيد که دو عدد از ورودي دريافت کرده سپس محتويات دو عدد را با هم جابجا نمايد‪.‬‬

‫براي حل اين مسئله ‪ b , a‬را دو متغير که در آن ها دو عدد خوانده شده‪ ،‬قرار ميگيرد در نظر ميگيريم‪ .‬سپس با استفاده از‬
‫يک متغير کمکي محتويات اين دو عدد را جابجا ميکنيم ‪:‬‬

‫‪15‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فلوچارت مسئله باال بصورت زير خواهد بود‪:‬‬

‫تمرين‬

‫‪1‬ـ فلوچارتي رسم نمائيد که طول و عرض مستطيل را از ورودي دريافت کرده محيط و مساحت آنرا محاسبه و چاپ کند‪.‬‬

‫‪0‬ـ فلوچارتي رسم نمائيد که شعاع دايرهاي را از ورودي دريافت کرده‪ ،‬محيط و مساحت آنرا محاسبه و چاپ نمايد‪.‬‬

‫‪3‬ـ فلوچارتي رسم کنيد که سه عدد ‪ Third , second, first‬را از ورودي دريافت کرده‪ ،‬محتويات آن ها را جابجا نموده‪ ،‬حاصل را در خروجي‬
‫چاپ کند‪.‬‬

‫‪1‬ـ فلوچارتي رسم نمائيد که دو عدد از ورودي دريافت کرده‪ ،‬سپس محتويات دو عدد را بدون استفاده از متغير کمکي جابجا کند‪.‬‬

‫‪ 1‬ـ فلوچارتي رسم نمائيد که عددي (درجه حرارت برحسب سانتيگراد) را از ورودي دريافت کرده سپس آن را به درجه فارنهايت تبديل کند‪.‬‬

‫‪16‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫دستورالعملهاي شرطی‬

‫در حل بسياري از مسائل يا تقريباً تمام مسائل نياز به استفاده از شروط جزء‪ ،‬نيازهاي اساسي محسوب ميشود‪ .‬همانطور که ما‬
‫خودمان در زندگي روزمره با اين شرط ها سرکار داريم‪ .‬بطور مثال اگر هوا ابري باشد ممکن است چنين سخن بگوييم‪:‬‬

‫اگر هوا باراني باشد سپس چتري برميدارم‪ .‬در غير اينصورت چتر برنميدارم‪.‬‬

‫در حالت کلي شرط را بصورت زير نمايش ميدهند‪:‬‬

‫مثال ‪ :‬فلوچارتي رسم نمائيد که عددي را از ورودي دريافت کرده‪ ،‬فرد يا زوج بودن آن را تشخيص دهد‪.‬‬

‫‪17‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال ‪ :‬فلوچارتي رسم کنيد که دو عدد از ورودي دريافت کرده بزرگترين عدد را پيدا کرده در خروجي چاپ نمايد‪.‬‬

‫مثال ‪ :‬فلوچارتي رسم نمائيد که سه عدد از ورودي دريافت کرده‪ ،‬کوچکترين عدد را يافته در خروجي چاپ نمايد‪:‬‬

‫نمونه اجراي فلوچارت باال بصورت زير ميباشد‪:‬‬

‫‪18‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تمرين‬

‫‪ -1‬فلوچارتي رسم کنيد که عددي را از ورودي دريافت کرده‪ ،‬قدر مطلق عدد را در خروجي چاپ کند‪.‬‬

‫‪ -0‬فلوچارتي رسم نمائيد که عددي از ورودي دريافت کرده مثبت‪ ،‬منفي يا صفر بودن عدد را تشخيص داده‪ ،‬در خروجي با‬
‫پيغام مناسب چاپ کند‪.‬‬

‫‪ -3‬فلوچارتي رسم نمائيد که عددي را از ورودي دريافت کرده‪ ،‬بخش پذيري آن بر ‪ 3‬و ‪ 1‬را بررسي نمايد‪.‬‬

‫‪1‬ـ فلوچارتي رسم نمائيد که ضرايب يک معادله درجه دوم را از ورودي دريافت کرده‪ ،‬ريشههاي آن را محاسبه در خروجي‬
‫چاپ کند‪.‬‬

‫‪19‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫حلقهها‬

‫در حل بسياري از مسائل با عملياتي روبرو مي شويم ‪ ،‬که نياز به تکرار دارند و عمل تکرار آنها به تعداد مشخصي انجام ميگيرد‪.‬‬
‫فرض کنيد‪ ،‬بخواهيم ميانگين ‪ 100‬عدد را محاسبه کنيم‪ ،‬در اينصورت منطقي بنظر نميرسد که ‪ 100‬متغير مختلف را از‬
‫ورودي دريافت کنيم سپس آنها را جمع کنيم‪.‬‬

‫انواع حلقه ها‬

‫‪ .1‬حلقه هاي با تکرار مشخص‬


‫‪ .0‬حلقه هاي با تکرار نا مشخص‬

‫حلقه هاي با تکرار مشخص‪ :‬در اين نوع حلقهها تعداد تکرار مشخص ميباشد اين حلقه از اجزاء زير تشکيل ميشود‪:‬‬

‫‪1‬ـ انديس حلقه‬


‫‪0‬ـ مقدار اوليه براي انديس حلقه‬
‫‪ -3‬مقدار افزاينده يا کاهنده براي انديس حلقه (معموال يک واحد در هر مرحله)‬
‫‪1‬ـ مقدار نهايي (تعداد تکرا حلقه)‬
‫‪1‬ـ شرطي براي کنترل تعداد تکرار حلقه‬

‫اين حلقهها را غالباً با فلوچارت بصورت زير نمايش ميدهند‪:‬‬

‫‪21‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال ‪ :‬فلوچارتي رسم نمائيد که عدد ‪ n‬را از ورودي دريافت کرده‪ ،‬مجموع اعداد از يک تا ‪ n‬را محاسبه کند‪.‬‬

‫مقدار نهايي‬ ‫‪n‬‬


‫انديس حلقه‬ ‫‪i‬‬

‫نمونه اجراي فلوچارت باال بصورت زير است‪:‬‬

‫مثال ‪ :‬فلوچارتي رسم کنيد که ‪ n‬عدد از ورودي دريافت کرده‪ ،‬بزرگترين مقدار از بين ‪ n‬عدد را پيدا کرده در خروجي چاپ‬
‫نمايد‪.‬‬

‫‪i‬‬ ‫انديس حلقه‬


‫‪n‬‬ ‫مقدار نهايي‬
‫‪Max‬‬ ‫بزرگترين مقدار‬

‫‪21‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال ‪ :‬فلوچارتي رسم نمائيد که ‪ ،n , x‬دو عدد صحيح مثبت را از ورودي دريافت کرده سپس ‪ x‬به توان ‪ n‬را محاسبه کند‪.‬‬

‫‪i‬‬ ‫انديس حلقه‬


‫‪n‬‬ ‫مقدار نهايي‬
‫عدد به توان ‪n‬‬
‫‪pow‬‬

‫‪22‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫حلقههايي که تعداد تکرار آن ها مشخص نيست (در ‪ C++‬به حلقه ‪ while‬مشهورند‪).‬‬

‫در اين حلقهها با توجه به ورودي‪ ،‬تعداد تکرار مشخص ميشود‪ .‬و دقيقاً نمي توان تعداد تکرار حلقه را بدون ورودي معين کرد‪.‬‬
‫اين حلقه ها فقط شامل شرطي هستند که تا زمانيکه برقرار باشد حلقه اجرا ميشود‪.‬‬

‫در حالت کلي اين نوع حلقهها بصورت زير نمايش داده ميشوند‪:‬‬

‫مثال‪ :‬فلوچارتي رسم کنيد که عددي را از ورودي دريافت کرده سپس تعداد ارقام آن را شمرده در خروجي چاپ نمايد‪.‬‬

‫‪N‬‬ ‫عدد خوانده شده‬


‫‪count‬‬ ‫تعداد ارقام‬

‫‪23‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال ‪ :‬فلوچارتي رسم نمائيد که عددي از ورودي دريافت کرده‪ ،‬سري فيبوناچي قبل از آن را توليد نمايد‪.‬‬

‫در حالت کلي جمالت سري بصورت‪fk=fk-1+fk-2 :‬‬

‫‪N‬‬ ‫عدد خوانده شده‬

‫‪f1‬‬ ‫جمله اول سري‬


‫‪f2‬‬ ‫جمله دوم سري‬
‫‪f3‬‬ ‫جمله سوم سري‬

‫تمرين‬

‫‪ -1‬فلوچارتي رسم نمائيد که عددي از ورودي دريافت کرده‪ ،‬کامل بودن آن را بررسي نمايد‪( .‬عدد کامل‪ ،‬عددي است که‬
‫مجموع مقسومعليههاي آن با خودش برابر باشد‪).‬‬

‫‪ -0‬فلوچارتي رسم کنيد که ‪ N‬را از ورودي دريافت کرده‪ N ،‬جمله سري فيبوناچي را توليد نمايد‪.‬‬

‫‪ 3‬ـ فلوچارتي رسم نمائيد که دو عدد ‪ N , M‬را از ورودي خوانده‪ ،‬بزرگترين مقسومعليه مشترك دو عدد را محاسبه و چاپ‬
‫کند‪.‬‬

‫حلقههاي تودرتو‬

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

‫‪24‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫در حلقههاي تودرتو به ازاي يکبار تکرار حلقه اوليه‪ ،‬حلقه داخلي به اندازه مقدار نهايي خود تکرار ميشود‪ .‬در کل اگر حلقه‬
‫اوليه ‪ n‬بار تکرار شود و حلقه داخلي ‪ m‬بار‪ ،‬در اينصورت کل حلقه ‪ n×m‬بار تکرار خواهد شد‪.‬‬

‫حلقههاي‬ ‫فلوچارت‬
‫ميتوان‬ ‫را‬ ‫تودرتو‬
‫بصورت روبرو نشان داد‪:‬‬

‫مثال ‪ :‬فلوچارتي رسم نمائيد که ‪ N‬را از ورودي دريافت کرده‪ ،‬مجموع سري زير را محاسبه نمايد‪:‬‬

‫‪I‬‬ ‫انديس حلقه اول‬


‫‪S  1  2  3  ....  N‬‬
‫!‪2! 3‬‬ ‫!‪N‬‬
‫‪N‬‬ ‫ورودي‬
‫‪fact‬‬ ‫محاسبه فاکتوريل‬
‫‪j‬‬ ‫انديس حلقه داخلي‬

‫‪Sum‬‬ ‫مجموع‬

‫‪25‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تمرينات آخر فصل‬

‫‪ -1‬فلوچارتي رسم نمائيد که ‪ N‬عدد از ورودي دريافت کرده تعداد اعداد اول و کامل را شمرده در خروجي چاپ نمايد‪.‬‬

‫‪ -0‬فلوچارتي رسم نمائيد که ‪ N , X‬را از ورودي خوانده مقدار سري زير را محاسبه کند‪:‬‬

‫‪2‬‬ ‫‪4‬‬ ‫‪n‬‬


‫‪S  1  x  x  ....  x‬‬
‫!‪2‬‬ ‫!‪4‬‬ ‫!‪N‬‬
‫‪ -3‬فلوچارتي رسم نمائيد که عددي را از ورودي دريافت کرده مقلوب عدد را محاسبه و در خروجي چاپ کند‪.‬‬

‫‪ 1‬ـ فلوچارتي رسم کنيد که تاريخ تولد شخصي را از ورودي خوانده‪ ،‬سن شخص را با تاريخ روز‪ ،‬محاسبه نموده در خروجي‬
‫چاپ کند‪.‬‬

‫‪ -1‬فلوچارتي رسم نمائيد که ‪ (m>n) N ,M‬را از ورودي دريافت کرده سري فيبوناچي بين ‪ N ,M‬را توليد کرده‪ ،‬در خروجي‬
‫چاپ کند‪.‬‬

‫‪26‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫برنامه نويسی به زبان ‪C++‬‬
‫فهرست مطالب‪:‬‬

‫فصل اول ‪ :‬مقدمات زبان ‪C++‬‬

‫فصل دوم ‪ :‬ساختار هاي تصمیم گیري و تکرار‬

‫فصل سوم ‪ :‬ساير ساختار هاي تکرار‬

‫فصل چهارم ‪ :‬اعداد تصادفی‬

‫فصل پنجم ‪ :‬آرايه ها‬

‫فصل ششم ‪ :‬توابع‬

‫فصل هفتم ‪ :‬ساختارها و رشته ها‬

‫‪27‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فصل اول‪ :‬مقدمات ‪C++‬‬

‫‪ ‬عملگرهاي جايگزيني محاسباتي‬ ‫‪ ‬رشته ها‬ ‫‪ ‬تاريخچه مختصر‬


‫اولويت عملگرها‬ ‫‪‬‬ ‫نمايش مقادير داده ها‬ ‫‪‬‬ ‫قانون نامگذاري شناسه ها‬ ‫‪‬‬
‫توضيحات (‪)Comments‬‬ ‫‪‬‬ ‫دريافت مقادير‬ ‫‪‬‬ ‫متغير ها‬ ‫‪‬‬
‫توابع کتابخانه‬ ‫‪‬‬ ‫عملگر انتساب‬ ‫‪‬‬ ‫اعالن متغير‬ ‫‪‬‬
‫برنامه در ‪C++‬‬ ‫‪‬‬ ‫عملگر هاي محاسباتي‬ ‫‪‬‬ ‫تخصيص مقادير به متغير‬ ‫‪‬‬
‫عملگرهاي افزايش و کاهش‬ ‫‪‬‬ ‫داده هاي از نوع کرکتر‬ ‫‪‬‬
‫عملگر ‪sizeof‬‬ ‫‪‬‬ ‫کرکتر هاي مخصوص‬ ‫‪‬‬

‫تاريخچه مختصر ‪:C++‬‬

‫اين زبان در اوائل دهه ‪ 1980‬توسط ‪ Bjarne stroustrup‬در آزمايشگاه بل طراحي شده‪ .‬اين زبان عمالً توسعه يافته زبان‬
‫برنامه نويسي ‪ C‬مي باشد که امکان نوشتن برنامههاي ساخت يافته شئ گرا را ميدهد‪.‬‬

‫قانون نامگذاري شناسهها‪:‬‬

‫‪ )1‬حروف کوچک و بزرگ در نامگذاري شناسهها متفاوت ميباشند‪.‬‬

‫بنابراين ‪ xy ، xY ، XY ، Xy‬چهار شناسه متفاوت از نظر ‪ C++‬میباشد‪.‬‬

‫‪ )0‬در نامگذاري شناسهها از حروف الفباء‪ ،‬ارقام وزير خط (‪ )underscore‬استفاده ميشود و حداکثر طول شناسه ‪ 31‬ميباشد‬
‫و شناسه بايستي با يک رقم شروع نگردد‪.‬‬

‫‪ )3‬براي نامگذاري شناسه ها از کلمات کليدي نبايستي استفاده نمود‪ .‬در زير بعضي از کلمات کليدي داده شده است‪.‬‬

‫لیست كامل كلمات كلیدي‬

‫‪28‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫متغيرها‪:‬‬

‫متغير‪ ،‬مکاني در حافظه اصلي کامپيوتر ميباشد که در آنجا يک‬


‫مقدار را مي توان ذخيره و در برنامه از آن استفاده نمود‪ .‬قانون‬
‫نامگذاري متغيرها همان قانون نامگذاري شناسهها ميباشد‪.‬‬

‫انواع داده ها‬

‫نوع داده‬ ‫حافظه الزم‬


‫‪int‬‬ ‫‪ 4‬بايت‬
‫‪unsigned int‬‬ ‫‪4‬بايت‬
‫‪long int‬‬ ‫‪ 4‬بايت‬
‫‪unsigned long int‬‬ ‫‪ 4‬بايت‬
‫‪char‬‬ ‫‪1‬بايت‬
‫‪unsigned char‬‬ ‫‪ 1‬بايت‬
‫‪float‬‬ ‫‪ 4‬بايت‬
‫‪double‬‬ ‫‪ 8‬بايت‬
‫اعالن متغيرها‪:‬‬

‫قبل از آن که در برنامه به متغيرها مقداري تخصيص داده شود و از آن ها استفاده گردد بايستي آن ها را در برنامه اعالن نمود‪.‬‬

‫چند مثال از اعالن متغير ها ‪:‬‬

‫‪int‬‬ ‫;‪x‬‬ ‫براي اعالن متغير‪ x‬از نوع ‪: int‬‬

‫براي اعالن متغيرهاي ‪ p‬و ‪ q‬را از نوع ‪ float‬که هر کدام چهار بايت از حافظه را اشغال ميکنند‪:‬‬

‫‪float p , q‬‬ ‫;‬


‫براي اعالن متغير ‪ next‬از نوع کرکتر که ميتوان يکي از ‪ 016‬کرکتر را به آن تخصيص داد و يک بايت را اشغال ميکند‪.‬‬

‫‪char next‬‬ ‫;‬

‫‪29‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تخصيص مقادير به متغيرها‬

‫با استفاده از عملگر = ميتوان به متغيرها مقدار اوليه تخصيص نمود‪.‬‬

‫مثال ‪:‬‬

‫‪ ‬در دستورالعمل ;‪ x ، int x=26‬را از نوع ‪ int‬با مقدار اوليه ‪ 26‬اعالن نموده ‪.‬‬

‫‪ ‬در دستورالعمل ;‪ ، long int a=67000 , b=260‬متغيرهاي ‪ b‬و ‪ a‬را از نوع ‪ long int‬تعريف نموده با مقادير بترتيب‬
‫‪ 260‬و ‪ 67000‬مقدار دهي کرده ايم‪.‬‬

‫دادههاي از نوع کرکتر‬

‫براي نمايش دادههاي از نوع ‪ char‬در حافظه کامپيوتر از جدول ‪ ASCII‬استفاده ميشود‪ .‬جدول اسکي به هر يک از ‪016‬‬
‫کرکتر يک عدد منحصر بفرد بين ‪ 0‬تا ‪ 011‬تخصيص ميدهد‪.‬‬

‫کرکترهاي مخصوص‬

‫کامپايلر ‪ C++‬بعضي از کرکترهاي مخصوص که در برنامه مي توان از آنها براي فرمت بندي استفاده کرد را تشخيص ميدهد‪.‬‬
‫تعدادي از اين کرکترهاي مخصوص به همراه کاربرد آنها در ادامه آورده شده است ‪.‬‬

‫بعنوان مثال از کرکتر ‪ \a‬ميتوان براي ايجاد صداي ‪ beep‬استفاده نمود‪.‬‬

‫; ‪Char x = '\a‬‬

‫‪\n‬‬ ‫‪Newline‬‬ ‫‪\a‬‬ ‫‪Beep sound‬‬ ‫‪\0‬‬ ‫‪Null character‬‬


‫‪\t‬‬ ‫‪Tab‬‬ ‫”\‬ ‫‪Double quote‬‬ ‫?\‬ ‫‪Question mark‬‬
‫‪\b‬‬ ‫‪Backspace‬‬ ‫’\‬ ‫‪Single quote‬‬ ‫\\‬ ‫‪Back slash‬‬

‫رشتهها‬

‫رشته يا ‪ string‬عبارتست از دنبالهاي از کرکترها که بين " " قرار داده مي شود‪ .‬در حافظه کامپيوتر انتهاي رشتهها‬
‫بوسيله ‪ \0‬ختم ميگردد‪.‬‬

‫مثال‪:‬‬

‫‪ "BOOK STORE" ‬يک رشته ده کرکتري ميباشد که با توجه به کرکتر ‪ \0‬که به انتهاي آن در حافظه اضافه مي‬
‫شود جمعــاً يازده بايت را اشغال ميکند‪.‬‬

‫‪31‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫‪ ‬دقت نماييد که "‪ "w‬يک رشته ميباشد که دو بايت از حافظه را اشغال ميکند در حاليکه '‪ 'w‬يک کرکتر ميباشد که‬
‫يک بايت از حافظه را اشغال مينمايد‪.‬‬

‫نمايش مقادير دادهها‬

‫براي نمايش دادهها بر روي صفحه مانتور از ‪ cout‬که بدنبال آن عملگر درج يعني >> قيد شده باشد استفاده ميگردد‪ .‬بايستي‬
‫توجه داشت که دوکرکتر > پشت سر هم توسط ‪ C++‬بصورت يک کرکتر تلقي ميگردد‪.‬‬

‫مثال‪:‬‬

‫‪ ‬براي نمايش پيغام ‪ good morning‬بر روي صفحه نمايش ‪:‬‬

‫;"‪cout << "good morning‬‬

‫‪ ‬براي نمايش مقدار متغير ‪ X‬بر روي صفحه نمايش ‪:‬‬

‫; ‪cout << x‬‬

‫دريافت مقادير متغيرها‬

‫به منظور دريافت مقادير براي متغيرها در ضمن اجراي برنامه از صفحه کليد‪ ،‬از ‪ cin‬که بدنبال آن عملگر استخراج يعني‬
‫<< قيد شده باشد ميتوان استفاده نمود‪.‬‬

‫مثال‪:‬‬

‫;‪int x‬‬

‫; "‪cout << "Enter a number:‬‬

‫;‪cin >> x‬‬

‫عملگر انتساب‬

‫عملگر انتساب = ميباشد که باعث ميگردد مقدار عبارت در طرف راست اين عملگر ارزيابي شده و در متغير طرف چپ آن قرار‬
‫گيرد‪.‬‬

‫از عملگرهاي انتساب چندگانه نيز ميتـوان اسـتفاده نمـود‪ .‬کـه‬ ‫مثال‪:‬‬
‫مقدار سه متغير ‪ z‬و ‪ y‬و ‪ x‬برابر با ‪ 26‬مي شود‪.‬‬
‫;‪x=a+b‬‬
‫; ‪x=35‬‬
‫; ‪x=y=z=26‬‬
‫‪31‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬
‫عملگرهاي محاسباتي‬

‫در ‪ C++‬پنج عملگر محاسباتي وجود دارد که عبارتند از ‪:‬‬

‫جمع‬ ‫‪+‬‬

‫تفريق‬ ‫‪-‬‬

‫ضرب‬ ‫*‬

‫تقسیم‬ ‫‪/‬‬

‫باقیمانده‬ ‫‪%‬‬

‫اين عملگرها دو تائي ميباشند زيرا روي دو عملوند عمل مينمايند‪ .‬از طرف ديگر عملگرهاي ‪ +‬و – را ميتوان بعنوان‬
‫عملگرهاي يکتائي نيز در نظر گرفت‪.‬‬

‫‪ ‬مثال ‪: 1‬‬

‫در حالتي که هر دو عملوند عملگرهاي ‪ – ، + ، * ، / ، %‬از نوع صحيح باشد‬


‫نتيجه عمل از نوع صحيح ميباشد‪.‬‬

‫‪ ‬مثال ‪: 2‬‬

‫در صورتيکه حداقل يکي از عملوندهاي عملگرهاي ‪ + ، – ، * ، /‬از نوع‬


‫اعشاري باشد نتيجه عمل از نوع اعشاري ميباشد‪.‬‬

‫عملگرهاي افزايش و کاهش‬

‫در ‪ ، C++‬افزايش يک واحد به مقدار يک متغير از نوع صحيح را افزايش و بطور مشابه کاهش يک واحد از مقدار يک متغير از‬
‫نوع صحيح را کاهش مينامند‪.‬‬

‫عملگر کاهش را با ‪ - -‬و عملگر افزايش را با ‪ ++‬نمايش ميدهند‪ .‬چون عملگرهاي ‪ ++‬و ‪ - -‬فقط روي يک عملوند اثر دارند اين‬
‫دو عملگر نيز جزء عملگرهاي يکتائي ميباشند‪.‬‬

‫‪32‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫سه دستور العمل ‪:‬‬

‫;‪++x‬‬

‫;‪x++‬‬

‫;‪x=x+1‬‬

‫معادل مي باشند و بطريق مشابه سه دستورالعمل زير نيز معادل مي باشند‪.‬‬

‫;‪- - y‬‬

‫;‪y=y-1‬‬

‫; ‪y- -‬‬

‫از عملگرهاي ‪ ++‬و ‪ --‬مي توان بدو صورت پيشوندي و پسوندي استفاده نمود‪ .‬در دستورالعملهاي پيچيده عملگر پيشوندي‬
‫قبل از انتساب ارزيابي مي شود و عملگر پسوندي بعد از انتساب ارزيابي ميشود‪.‬‬

‫مثال‪:‬‬

‫;‪int x=5‬‬

‫;‪y=++x * 2‬‬

‫پس از اجراي دستورالعمل هاي فوق ‪y=12 :‬‬

‫;‪int x=5‬‬

‫;‪y=x++ * 2‬‬

‫پس از اجراي دستورالعمل هاي فوق‪y=10 :‬‬

‫عملگر ‪sizeof‬‬

‫‪ Sizeof‬ازعملگرهاي يکتائي مي باشد و مشخص کننده تعداد بايت هائي است که يک نوع داده اشغال ميکند‪.‬‬

‫مثال ‪:‬‬

‫;‪int x‬‬
‫; ‪cout << sizeof x‬‬ ‫مقدار ‪ 1‬نمايش داده ميشود‪.‬‬
‫; )‪cout << sizeof(float‬‬ ‫مقدار ‪ 1‬نمايش داده مي شود‪.‬‬

‫‪33‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫عملگرهاي جايگزيني محاسباتي‬

‫براي سادهتر نوشتن عبارت ها در ‪ ، C++‬ميتوان از عملگرهاي جايگزيني محاسبـــاتي استفاده نمود‪.‬‬

‫=‪%‬‬ ‫=‪/‬‬ ‫=*‬ ‫=‪-‬‬ ‫=‪+‬‬

‫اولويت عملگرها‬

‫ارزيابي مقدار يک عبارت رياضي براساس جدول اولويت عملگرها انجام مي گردد‪ .‬در ذيل جدول اولويت عملگرها براساس‬
‫بترتيب از بيشترين اولويت به کمترين اولويت داده شده است‪.‬‬

‫مثال ‪: 1‬‬

‫? = ‪(5+2) *(6+2*2)/2‬‬

‫با توجه به جدول اولويت عملگرها داريم که‬

‫‪7 *(6+2*2)/2‬‬
‫‪7*(6+4)/2‬‬
‫‪7* 10 /2‬‬
‫‪70 /2‬‬
‫‪35‬‬

‫مثال ‪: 0‬‬

‫;‪int a=6 , b=2, c=8, d=12‬‬


‫;‪d=a++ * b/c ++‬‬
‫;‪cout << d << c << b << a‬‬

‫خروجي‪1 9 2 7 :‬‬

‫‪34‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫توضيحات (‪)Comments‬‬

‫توضيحات در برنامه باعث خوانائي بيشتر و درك بهتر برنامه مي شود‪ .‬بنابراين توصيه بر آن است که حتي االمکان در برنامهها‬
‫از توضيحات استفاده نمائيم‪ .‬در ‪ ،C++‬توضيحات بدو صورت انجام ميگيرد که در اساليدهاي بعد به آن اشاره شده است‪.‬‬

‫الف‪ :‬اين نوع توضيح بوسیله ‪ //‬انجام مي شود‪ .‬که کامپيوتر هر چيزي را که بعد از ‪ //‬قرار داده شود تا انتهاي آن خط اغماض‬
‫مينمايد‪.‬‬

‫مثال ‪:‬‬
‫‪c=a+b; //c is equal to sum of a and b‬‬

‫ب‪ :‬توضيح نوع دوم با *‪ /‬شروع شده و به ‪ */‬ختم ميشود و هر چيزي که بين* ‪ /‬و ‪ */‬قرار گيرد اغماض مينمايد ‪.‬‬

‫مثال ‪:‬‬
‫‪/ * this is a program‬‬
‫‪to calculate sum of‬‬
‫‪n integer numbers */‬‬
‫توابع کتابخانه‬

‫زبان ‪ C++‬مجهز به تعدادي توابع کتابخانه مي باشد‪ .‬بعنوان مثال تعدادي توابع کتابخانه براي عمليات ورودي و خروجي وجود‬
‫دارند‪ .‬معموالً توابع کتابخانه مشابه ‪ ،‬بصورت برنامه هاي هدف (برنامه ترجمه شده بزبان ماشين) در قالب فايل هاي کتابخانه‬
‫دسته بندي و مورد استفاده قرار ميگيرند‪ .‬اين فايل ها را فايلهاي ‪ header‬مينامند و داراي پسوند ‪ .h‬ميباشند‪.‬‬

‫نحوه استفاده از توابع کتابخانه اي‬

‫براي استفاده از توابع کتابخانه خاصي بايستـــي نام فايل ‪ header‬آنرا در ابتداي برنامه در دستور ‪ #include‬قرار دهيم‪.‬‬

‫‪#include‬‬ ‫> اسم فايل ‪< header‬‬

‫‪35‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫برنامه در ‪C++‬‬

‫اکنون باتوجه به مطالب گفته شده قادر خواهيم بود که تعدادي برنامه ساده و کوچک به زبان ‪ C++‬بنويسيم‪ .‬براي نوشتن‬
‫برنامه بايستي دستورالعمل ها را در تابع ) (‪ main‬قرار دهيم و براي اينکار ميتوان به يکي از دو طريقي که در ادامه آمده است‪،‬‬
‫عمل نمود‪.‬‬

‫روش دوم‪:‬‬ ‫روش اول ‪:‬‬


‫;‪using namespace std‬‬ ‫;‪using namespace std‬‬
‫‪#include‬‬ ‫<‬ ‫>‬ ‫‪#include‬‬ ‫<‬ ‫>‬
‫) (‪void main‬‬ ‫) (‪int main‬‬
‫{‬ ‫}‬
‫; دستورالعمل ‪1‬‬
‫; دستورالعمل ‪1‬‬
‫; دستورالعمل ‪0‬‬
‫; دستورالعمل ‪0‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫;دستورالعمل ‪n‬‬
‫;دستورالعمل ‪n‬‬
‫}‬
‫; ‪return 0‬‬
‫}‬
‫نکات‪:‬‬
‫‪36‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬
‫به خطاهاي برنامه نويسي ‪ error‬مي گويند‪ .‬ما در برنامه نويسي دو نوع خطا داريم‪:‬‬

‫‪ ‬خطاهاي دستوري (‪)syntax error‬‬


‫‪ ‬خطاهاي منطقي (‪.)logical error‬‬
‫در خطاهاي دستوري (‪ ،) syntax error‬کد برنامه داراي اشکال است که معموال خود کامپايلر با پيغامي خطا در زمان کامپايل‪،‬‬
‫آن خطا را به ما تذکر مي دهد و تا زماني که آن خطا را برطرف نکنيم برنامه اجرا نمي شود‪( .‬به اين خطا‪ ،‬خطاي زمان کامپايل‬
‫نيز مي گويند‪ ).‬به عنوان مثال فرض کنيد دستور ‪ cout‬را به صورت ‪ coot‬بنويسيد‪ ،‬در اين صورت کامپايلر با پيغامي‪ ،‬اين خطا‬
‫را به شما هشدار ميدهد‪ .‬اما در خطاي منطقي (‪ ،) logical error‬کد برنامه مشکلي ندارد‪ ،‬ولي الگوريتم برنامه داراي مشکل‬
‫است‪ ،‬رايج ترين خطاي منطقي‪ ،‬خطاي تقسيم بر صفر است‪( .‬زيرا اگر هر عدد بر صفر تقسيم شود‪ ،‬حاصلي مبهم دارد) اين نوع‬
‫خطاها توسط کامپايلر تشخيص داده نميشود‪ ،‬و حتي ممکن است برنامه اجرا شود‪ ،‬ولي پس از اجرا‪ ،‬برنامه نتايجي به همراه‬
‫دارد که با پيش بيني ما از برنامه متفاوت خواهد بود و حتي ممکن است در خروجي برنامه مشکل ايجاد کند‪.‬‬

‫در اين قسمت به مفاهيم اوليه کدنويسي به زبان ‪ C++‬ميپردازيم‪.‬‬

‫ما براي کدنويسي برنامههايمان‪ ،‬به نرم افزارهاي ديگري نياز داريم تا کدهاي برنامه را درون آن بنويسيم و نتايج آنها را‬
‫برايمان نمايش بدهد‪ ،‬به اين برنامهها مترجم (‪ )Compiler‬گفته ميشود‪ ،‬که عبارتند از‪:‬‬

‫‪Microsoft visual studio, Borland C++, Turbo C++, Notepad ++‬‬

‫که من استفاده از ‪ Microsoft visual studio 2010‬را پيشنهاد مي کنم‪ ،‬زيرا نوشتن و ويرايش کد در اين محيط راحتتر‬
‫است‪.‬‬

‫ابتدا به روش ساختن يک پروژه جديد در ‪ Visual Studio 2010‬ميپردازيم‪:‬‬

‫پس از باز کردن نرم افزار ‪ Visual Studio 2010‬همانند شکل زير بر روي گزينه ‪ File‬کليک کرده‪ ،‬سپس با رفتن به روي‬
‫دکمهي ‪ ،New‬گزينهي ‪ Project‬را انتخاب ميکنيم‪:‬‬

‫‪37‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫سپس در سمت چپ قسمت ‪ Visual C++‬را انتخاب کرده و از قسمت سمت راست گزينه ‪ Empty Project‬را انتخاب ميکنيم‪،‬‬
‫همچنين در پايين در کادر ‪ name‬بک نام به پروژه ي خود اختصاص دهيد و محل ذخيره پروژه را با استفاده از دکمهي‬
‫‪ browse‬مشخص کنيد‪:‬‬

‫‪38‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫پس از درست شدن پروژه جديد همانند شکل زير بر روي ‪ Source Files‬کليک راست کرده و گزينه ‪ New item‬را انتخاب‬
‫ميکنيم‪:‬‬

‫سپس در پنجره ي باز شده در سمت راست همانند شکل زير روي گزينهي (‪ C++ File(.cpp‬کليک ميکنيم و نام مناسب‬
‫منبع کد را نيز در قسمت ‪( name‬پايين صفحه) مشخص ميکنيم‪:‬‬

‫‪39‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫در نهايت همانند شکل زير محيط سفيد رنگ کد نويسي باز ميشود‪ ،‬که شما در اينجا کدهاي خود را مينويسيد‪:‬‬

‫در شکل زير کد يک برنامه وجود دارد که پيغام !‪ welcome to c++‬را براي ما در مانيتور‪ ،‬چاپ ميکند‪:‬‬

‫حال به توضيح قسمت هاي مختلف کد باال ميپردازيم‪:‬‬

‫نتيجه اجراي اين کد نمايش جملهي !‪ Welcome to c++‬است‪.‬‬

‫خط ‪ 1‬و ‪ 0‬دستور هاي پيش پردازنده است‪ ،‬يعني قبل از کامپايل (کار تبديل کدهاي برنامه به دستورهاي قابل فهم کامپيوتر)‬
‫برنامه اين خط اجرا ميشود‪ ،‬به عبارت ديگر هر خطي که با ‪ #‬شروع ميشود يک دستور پيش پردازنده است‪.‬‬

‫دستور خط ‪ 1‬به پيش پردازنده مي گويد که محتواي سرفايل جريان ورودي‪ /‬خروجي را در برنامه قرار دهد‪.‬‬

‫‪41‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫عبارت سبز رنگي که با عالمت ‪ //‬شروع ميشود‪ ،‬توسط کامپايلر ناديده گرفته مي شود‪ ،‬زيرا از اين نوع خطوط براي وضوح‬
‫بخشيدن به برنامه استفاده ميشود‪ ،‬همان طور که مشاهده ميکنيد‪ ،‬روبروي خط ‪ 1‬توضيحي براي علت استفاده از اين خط‬
‫نوشته شده است‪(.‬در اين باره در نکات تکميلي توضيح ميدهم)‬

‫خط ‪ 3‬يک خط خالي است که کامپايلر آن را ناديده مي گيرد؛ در کل خطوط خالي در کامپايل برنامه خللي ايجاد نميکند و‬
‫همچيني به خوانايي کد کمک ميکند‪.‬‬

‫خط ‪ 1‬به اين معني است که ما از دستورهاي استاندارد استفاده ميکنيم‪ ،‬که بايد در تمام برنامهها وجود داشته باشد‪.‬‬

‫از خط ‪ 6‬تا ‪ ،10‬بدنهي اصلي برنامه را تشکيل ميدهد‪ ،‬که هر برنامهي ما حداقل بايد يک بدنهي اصلي داشته باشد‪.‬‬

‫کلماتي که به رنگ آبي نمايش داده شده است‪ ،‬دستور هاي اصلی ‪ C++‬هستند‪ ،‬دستور ‪ int‬نوع متغير است‪( .‬که در قسمتهاي‬
‫بعد توضيح داده خواهد شد‪).‬‬

‫دستور ()‪ main‬يک تابع است که نمايانگر بدنه ي اصلي برنامه است‪ ،‬که گيومه خالي به اين علت است که برنامه مقداري را‬
‫برنميگرداند‪ ،‬همين طور بدنهي اصلي بايد بين دو کروشه باز و بسته {} (خطوط ‪ 8‬و ‪ ) 10‬قرار گيرد‪( .‬البته در قسمتهاي‬
‫بعد به توضيح اين تابع مي پردازيم‪ ).‬در حالت کلي دستورهاي شامل گيومه‪ ،‬تابع هستند‪.‬‬

‫خط ‪ ،8‬خطي است که جملهي !‪ Welcome to c++‬را در مانيتور نمايش ميدهد‪( .‬اين همه خط کد براي نمايش همين چند يه‬
‫جمله!) دستور ‪ cout‬همراه با عالمت >> قسمت بعد از اين عالمت را در خروجي نمايش ميدهد‪ ،‬که ميتواند شامل متن‬
‫(همانند اين مثال)‪ ،‬يک متغير و … باشد‪ ،‬همچنين دستور ‪ \n‬باعث مي شود‪ ،‬مکان نما به خط جديد برود‪( .‬درباره ي اين نوع‬
‫دستورها در نکات تکميلي توضيح خواهم داد)‬

‫خط ‪ 10‬به اين دليل به کار ميرود تا پنجرهاي که خروجي برنامه را نمايش مي دهد تا زماني که ما کاري براي بستن آن انجام‬
‫ندهيم‪ ،‬بسته نشود‪ ،‬حتما االن اين سوال را از خود پرسيدهايد که مفهوم بسته نشدن برنامه يعني چه؟ ببينيد به علت اينکه‬
‫حاصل نتايج ک ار شما بر روي يک صفحه سياه! نمايش داده مي شود و به عبارت ديگر خروجي برنامه به حالت ‪ dos‬است شما‬
‫بايد از پايه تمام کارهاي برنامه را بنويسيد (همون طور که در قسمت قبل به دقيق بودن کدهاي برنامه اشاره کردم)‪ ،‬به همين‬
‫دليل بايد اين دستور هم براي بسته نشدن پنجره بنويسيد‪( .‬براي درك بهتر ميتوانيد اين کد را يک بار حذف کرده و نتيجه را‬
‫ببينيد‪ ،‬البته ميدونم که يه کم فهم اين قسمت سخته به همين دليل شما فقط براي بسته نشدن پنجره اين دستور رو در هر‬
‫حالت بنويسيد!)‬

‫‪41‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫خط ‪ ،11‬دستوري است که نشان مي دهد برنامه به پايان رسيده است‪ ،‬و ع مليات ترجمه کد بايد خاتمه يابد‪ ،‬البته اين خط‬
‫بيشتر زماني به کار ميرود که قرار است شما برنامه ي خود را بر روي فضايي اجرا کنيد که داراي حافظهي بسيار محدود است‪،‬‬
‫ولي با توجه به اينکه فضاي کامپيوتر شما بسيار زياد است ميتوانيد اين کد را ننويسيد‪.‬‬

‫نکات تکمیلی‬

‫‪ C++ .1‬به بزرگي و کوچکي حروف حساس است‪ ،‬يعني ‪ main‬و ‪ Main‬دو معني جدا از هم دارند‪ ،‬که تمام دستورهاي ‪ C++‬با‬
‫حروف كوچک نوشته ميشوند‪.‬‬

‫‪ .0‬تمام دستورهاي ‪ C++‬با عالمت ; (سِمي کالِن) به پايان ميرسند‪ ،‬به جز دستورهاي پيش پردازنده‪.‬‬

‫‪ .3‬تفاوت “ و ’ ‪ :‬هرگاه متنی بين ” ” (دابِل کوتِيشِن) بيايد به آن رشته يا ليتِرال گفته ميشود‪ ،‬ولي بين ‘ ‘ (کوتِيشِن) يک‬
‫متن نمیتواند بيايد‪ ،‬زيرا اين عالمت براي نمايش يک کاراکتر به کار ميرود‪.‬‬

‫‪ .1‬به کاراکتر \ کاراکتر كنترلی يا کاراکتر گريز گفته ميشود‪ ،‬که نشاندهندهي کاراکتر خاصي بر روي خروجي است (اين‬
‫کاراکترها در دستور ‪ cout‬استفاده مي شوند)‪ ،‬که چند نمونه از اين نوع کاراکترها عبارتند از‪:‬‬

‫‪ \n‬خط جديد‪ :‬مکان نما را به ابتداي خط بعد منتقل ميکند‪.‬‬

‫‪ \t‬جدول بندي افقي‪ :‬مکان نما را به محل ستون بعدي (به اندازهي ‪ 1/1‬اينچي) ميبرد‪.‬‬

‫‪ \r‬برگشت به اول سطر‪ :‬مکان نما را در ابتداي خط فعلي قرار ميدهد ولي آن را تا خط بعد جلو نميبرد‪.‬‬

‫‪ \a‬زنگ‪ :‬صداي سيستم به صدا در ميآيد‪( .‬عموما براي نوشتن کد خطا به کار ميرود‪ ،‬البته استفاده هاي ديگه اي هم داره که‬
‫ميتونيد خودتون پيدا کنيد!)‬

‫‪ .1‬دستور هاي جريان ورودي‪ /‬خروجي به ترتيب شامل دستورهاي ‪ cin/cout‬هستند‪ ،‬که استفاده از اين دستورها را در برنامه‬
‫هاي بعدي که مي نويسيم‪ ،‬توضيح خواهيم داد‪ ،‬البته اين دستورها را با اين عالمت ها به کار ميروند‪ cout>> :‬و <<‪cin‬‬

‫‪ .6‬براي اينکه کدي که شما مينويسيد خوانا باشد و اگر روزي آن را به شخص ديگري بدهيد‪ ،‬بتواند آن را بخواند‪ ،‬بهتر است از‬
‫عالمت هاي توضيحي استفاده کنيد که شامل ‪ //‬و ‪ /* */‬است‪ ،‬عالمت ‪ //‬براي توضيح يک خطي به کار ميرود و عالمت هاي‬
‫‪ /* */‬براي توضيح چند خطي به کار مي روند‪ ،‬که توضيح هاي چند خطي با عالمت *‪ /‬شروع و با عالمت ‪ */‬به پايان ميرسد‪،‬‬
‫يعني هر عبارتي بين اين دو عالمت قرار بگيرد‪ ،‬توسط برنامه توضيح تلقي ميشود‪.‬‬

‫‪42‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫‪ .8‬دستورهايي که با عالمت ‪ #‬شروع مي شوند‪ ،‬که به آنها پيش پردازنده مي گويند‪ ،‬در اصل هرکدام از آنها يک کتابخانه‬
‫(‪ )library‬سي پالس پالس را فراخواني مي کنند‪ .‬حال کتابخانه چيست؟ منظور از کتابخانه در ‪ C++‬يعني مجموعه تابع ها و‬
‫دستورهايي که ما با فراخواندن يکي از دستورهاي پيش پردازنده آن ها را در اختيار برنامه قرار ميدهيم‪ ،‬به بيان سادهتر‪ ،‬وقتي‬
‫شما يک دستور پيش پردازنده مثل ‪ iostream‬را در برنامه به عنوان کد پيش پردازنده مينويسيد‪ ،‬تمام دستورها و تابع هاي‬
‫مربوط به کتابخانه ورودي‪/‬خروجي در اختيار برنامه قرار ميگيرد (همون طور که در توضيح خط ‪ 1‬کد گفتم‪ ،‬محتواي سرفايل‬
‫ورودي‪/‬خروجي‪ ،‬منظورم همين بود!) به عنوان مثالي ديگر اگر دستور پيش پردازنده ‪ math.h‬را به صورت زير در برنامه قرار‬
‫دهيد‪ ،‬تمام تابع ها و عملگرهاي رياضي مثل توان‪ ،‬سينوس‪ ،‬کسينوس و… در برنامه قرار ميگيرد‪# include <math.h>:‬‬

‫مثال‪ :‬برنامه زير يک حرف انگليسي کوچک را گرفته به حرف بزرگ تبديل مينمايد‪.‬‬

‫;‪using namespace std‬‬


‫> ‪#include <iostream‬‬
‫>‪#include <stdlib. h‬‬
‫) (‪int main‬‬
‫{‬
‫;‪char c1 , c2‬‬
‫"‪cout << "Enter a lowercase letter:‬‬
‫;‪cin >> c1‬‬
‫;)‪c2 = toupper(c1‬‬
‫;‪cout << c2 << endl‬‬
‫} ;‪return 0‬‬
‫مثال‪ :‬دو عدد از نوع اعشاري را گرفته مجموع و حاصلضرب آن ها را محاسبه و نمايش ميدهد‪.‬‬

‫;‪using namespace std‬‬


‫> ‪#include <iostream‬‬
‫) (‪int main‬‬
‫{‬
‫‪float‬‬ ‫; ‪x,y,s,p‬‬
‫; ‪cin >> x >> y‬‬
‫; ‪s= x+y‬‬
‫;‪p=x*y‬‬
‫;‪cout << s <<endl << p‬‬
‫; ‪return 0‬‬
‫}‬

‫‪43‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فصل دوم‪ :‬ساختارهاي تصمیم گیري و تکرار‬

‫‪ ‬عملگر هاي منطقی‬ ‫‪ ‬دستورالعمل شرطی‬ ‫‪ ‬عملگر هاي رابطه اي‬


‫‪ ‬دستورالعمل ‪For‬‬ ‫‪ ‬عملگر كاما‬ ‫‪ ‬عملگر شرطی‬

‫عملگرهاي رابطه اي‬

‫از اين عملگرها براي تعيين اينکه آيا دو عدد با هم معادلند يا‬
‫يکي از ديگري بزرگتر يا کوچکتر ميباشد استفاده ميگردد‪.‬‬
‫عملگرهاي رابطهاي عبارتند از‪:‬‬

‫عملگر شرطی‬

‫شکل کلي عملگر شرطي بصورت زير ميباشد‪:‬‬

‫‪expression _ test ? expression _ true : expression _ false‬‬

‫عملگر شرطي تنها عملگري در ‪ C++‬ميباشد که داراي سه عملوند ميباشد‪.‬‬

‫مثال‪:1‬‬

‫;‪int x=10,y=20,b‬‬

‫; ‪b=(x>y) ? x : y‬‬

‫اين دو دستور العمل باعث مي شوند که ماکزيمم مقادير ‪ y‬و ‪ x‬در ‪ b‬قرار بگيرد‪.‬‬

‫; "‪x>=10 ? cout << "passed" : cout << "failed‬‬

‫اگر مقدار ‪ x‬بزرگتر يا مساوي ده باشد رشتة ‪ passed‬در غير اينصورت رشته ‪ failed‬نمايش داده مي شود‪.‬‬

‫دستورالعمل شرطی‬

‫توسط اين دستور شرطی را تست نموده و بسته به آنکه شرط درست يا غلط باشد عکسالعمل خاصي را نشان دهيم‪.‬‬

‫‪44‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫) عبارت( ‪if‬‬
‫{‬
‫; دستورالعمل ‪1‬‬
‫…‬
‫;دستورالعمل ‪n‬‬
‫}‬
‫‪else‬‬
‫{‬
‫; دستورالعمل ‪1‬‬
‫‪...‬‬
‫;دستورالعمل ‪n‬‬
‫}‬
‫مثال‪:1‬‬

‫)‪if(x != y‬‬
‫} ; ‪{ cout << x ; ++ x‬‬
‫‪else‬‬
‫} ; ‪{ cout << y ; - - y‬‬

‫در اين مثال اگر ‪ x‬و ‪ y‬مخالف هم باشند‪ x ،‬را نمايش داده و سپس به ‪ x‬يک واحد مي افزايد‪ .‬در غير اين صورت يعني زماني که ‪ x‬و ‪ y‬مساوي هم‬
‫هستند‪ ،‬مقدار ‪ y‬را نمايش داده و از ‪ y‬يک واحد کم مي کند‪.‬‬

‫مثال‪:2‬‬

‫برنامه زير يک عدد اعشاري را از ورودي گرفته جذر آن را محاسبه مينمايد‪.‬‬

‫‪45‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫عملگر كاما‬

‫تعدادي عبارت را ميتوان با کاما بهم متصل نمود و تشکيل يک عبارت پيچيدهتري را داد‪ .‬اين عبارت ها به ترتيب از چپ به‬
‫راست ارزيابي شده و مقدار عبارت معادل عبارت ‪ n‬ميباشد‪.‬‬

‫(عبارت ‪ , .… , n‬عبارت ‪ , 3‬عبارت ‪ , 2‬عبارت ‪)1‬‬

‫مثال‪ :‬اگر داشته باشيم ; ‪ int a=2 , b=4 , c=5‬عبارت زير را در نظر بگيريد‪:‬‬

‫)‪(++ a , a+b, ++ c, c+b‬‬

‫ابتدا به ‪ a‬يک واحد اضافه شده‪ ،‬سپس ‪ a‬و ‪ b‬جمع مي شوند‪ ،‬بعد از آن به ‪ c‬يک واحد اضافه مي شود و در نهايت ‪ c‬و ‪ b‬با هم‬
‫جمع مي شوند‪ .‬مقدار عبارت حاصل برابر است با ‪ b+c‬که معادل ‪ 10‬ميباشد‪.‬‬

‫عملگرهاي منطقی‬

‫با استفاده از عملگرهاي منطقي ميتوان شرط هاي ترکيبي در برنامه ايجاد نمود‪ .‬عملگرهاي منطقي عبارتست از ‪:‬‬

‫‪AND‬‬

‫‪OR‬‬

‫‪NOT‬‬

‫که در ‪ C++‬به ترتيب بصورت && ‪ || ،‬و ! نشان داده مي شود‪.‬‬

‫جدول درستی سه عملگر شرطی‬

‫‪46‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال‪:‬‬
‫))‪if ((x= = 5) ||(y != 0‬‬
‫; ‪cout << x << endl‬‬ ‫اگر ‪ x‬برابر با ‪ 5‬يا ‪ y‬مخالف صفر باشد مقدار ‪ x‬نمايش داده شود ‪.‬‬

‫)‪if(x‬‬ ‫اگر مقدار ‪ x‬مخالف صفر باشد‪ ،‬آنگاه ‪ x‬برابر با صفر شود ‪.‬‬
‫;‪x=0‬‬

‫برنامه زير طول سه پارهخط را از ورودي گرفته مشخص مينمايد که آيا تشکيل يک مثلث مي دهد يا خير؟‬

‫;‪using namespace std‬‬


‫> ‪#include <iostream‬‬
‫) (‪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‬‬
‫}‬
‫دستورالعمل ‪For‬‬
‫از دستور العمل ‪ for‬براي تکرار دستورالعمل ها استفاده مي شود‪ .‬شکل کلي دستور ‪ for‬بصورت زير ميباشد‪:‬‬

‫ساختار ‪:for‬‬

‫;معرفي کنترل گر حلقه‬


‫;‪int i‬‬
‫) گام حرکت ;شرط حلقه ;مقداردهي اوليه کنترل گر حلقه( ‪for‬‬ ‫)‪for (i=1; i<=3; i++‬‬
‫{‬ ‫{‬
‫; مجموعه دستورات بدنه حلقه‬ ‫;”‪cout << “hello \n‬‬
‫{‬
‫}‬
‫‪47‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬
‫مثال‬

‫)(‪void main‬‬ ‫)(‪void main‬‬


‫{‬ ‫{‬
‫;”‪cout << “hello \n‬‬ ‫;‪int i‬‬
‫;”‪cout << “hello \n‬‬ ‫)‪for (i=1; i<=3; i++‬‬
‫;”‪cout << “hello \n‬‬ ‫{‬
‫}‬ ‫;”‪cout << “hello \n‬‬
‫}‬
‫}‬ ‫نکات‪:‬‬
‫• لزومي ندارد که کنترل گر حلقه حتماً از ‪ 1‬شروع شود‪.‬‬

‫• مقدار دهي اوليه کنترل گر حلقه مي تواند خارج از دستور ‪ for‬باشد‪.‬‬

‫• مقدار دهي اوليه کنترل گر حلقه مي تواند خارج از دستور ‪ for‬باشد‪ .‬در اين صورت مي توان جمله اول موجود در عبارت‬
‫‪ for‬را خالي گذاشت‪.‬‬

‫‪48‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫• گام حرکت مي تواند در بدنه دستور ‪ for‬تعريف شود‪.‬‬

‫• معرفي کنترل گر حلقه مي تواند در داخل دستور ‪ for‬باشد‪.‬‬

‫• در دستور ‪ for‬اگر قسمت شرط خالي باشد‪ ،‬حلقه هميشه اجرا خواهد شد‪ .‬به عبارتي هيچ شرطي براي توقف نداريم‬

‫• وقتي هيچ شرطي نداريم‪ ،‬دو قسمت ديگر دستور ‪ for‬نيز مي توانند خالي باشند‪.‬‬

‫‪49‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫• لزومي ندارد که گام حرکت بصورت افزايشي باشد بلکه مي تواند بصورت کاهشي نيز باشد‪.‬‬

‫تمرين‪ :‬اعداد ‪ 100‬تا ‪ 1‬را به صورت نزولي چاپ نماييد‪ ( .‬با گام حرکت افزايشي و کاهشي جداگانه بنويسيد)‬

‫• گام حرکت مي تواند افزايش يا کاهش بيش از ‪ 1‬واحد را داشته باشد‪.‬‬

‫مثال‪ :‬چاپ اعداد فرد بين ‪ 1‬تا ‪100‬‬

‫کنترل گر حلقه مي تواند اعشاري يا کاراکتري باشد‪ ،‬لزومي ندارد که حتما عدد صحيح در نظر بگيريم‪.‬‬ ‫•‬

‫برنامه زير عدد صحيح و مثبت ‪ n‬را از ورودي گرفته فاکتوريل آن را محاسبه ونمايش ميدهد‪.‬‬

‫‪51‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫برنامه زير مجموع اعداد صحيح و متوالي بين ‪ 1‬تا ‪ n‬را محاسبه نموده و نمايش ميدهد‪.‬‬

‫برنامه زير ارقام ‪ 0‬تا ‪ 9‬را نمايش ميدهد‪.‬‬

‫تمرينات‪:‬‬

‫• برنامه اي که اعداد ذوج بين ‪ 1‬تا ‪ 1000‬را چاپ کند‪.‬‬

‫• برنامه اي که ‪ 100‬عدد را خوانده‪ ،‬مجموع را محاسبه و چاپ کند‪.‬‬

‫• برنامه اي که حاصلضرب اعداد ‪ 1‬تا ‪ 10‬را چاپ کند‪.‬‬

‫• برنامه اي که ‪ 10‬کاراکتر از صفحه کليد خوانده و تعيين کند که کدام يک حرف کوچک است‪.‬‬

‫• برنامه اي که ‪ 100‬عدد صحيح را خوانده ‪ max‬و ‪ min‬را چاپ کند‪.‬‬

‫• برنامه اي که کاراکتر هايي که کد آن ها بين ‪ 100‬تا ‪ 000‬هست‪ ،‬را چاپ نمايد‪.‬‬

‫‪51‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫كاربرد دستور ‪ break‬در دستور ‪for‬‬

‫اگر در بدنه ‪ for‬از جمله ي ;‪ break‬استفاده شود‪ ،‬ادامه ي اجراي حلقه متوقف شده و حلقه خاتمه مي يابد‪.‬‬

‫;‪int i , x‬‬
‫)‪for(i=1;i<=100;i++‬‬
‫;‪{cin>>x‬‬
‫;‪if (x==50) break‬‬
‫}‬
‫قطعه کد فوق حداکثر ‪ 100‬عدد صحيح از ورودي مي گيرد‪ ،‬ولي اگر در بين اعداد ورودي عدد ‪ 10‬وارد شود بدون بررسي‬
‫شرط حلقه از ادامه اجراي دستورات ‪ for‬اجتناب کرده و از حلقه خارج مي شود‪.‬‬

‫مثال‪:‬‬

‫قطعه کدي که تعدادي کاراکتر از صفحه کليد خوانده‪ ،‬بعد از فشردن دکمه ي ‪ E‬تعداد آن ها را مشخص کند‪:‬‬

‫;‪char ch‬‬
‫;‪int i‬‬
‫;‪for(i=0‬‬ ‫)‪;i++‬‬
‫;‪{cin>>ch‬‬
‫;‪if (ch==‘E’) break‬‬
‫}‬
‫;‪cout<<i‬‬
‫حلقه ‪ for‬تودرتو‬

‫مي توان داخل بدنه ي دستور ‪ for‬هر دستور دلخواه ديگري نوشت‪ .‬به عنوان مثال مي توان از يک دستور ‪ for‬در بدنه دستور‬
‫‪ for‬استفاده کرد‪.‬‬

‫قطعه کد زير عبارت ‪ Hello‬را ‪ 11‬بار اجرا مي کند‪:‬‬

‫‪52‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫برنامه زير کليه اعداد سه رقمي که با ارقام ‪ 3 ، 2 ، 1‬ايجاد ميشوند را نمايش ميدهد‪.‬‬

‫مثال‪ :‬چاپ جدول ضرب اعداد‬

‫مثال‪ :‬برنامه اي که ‪ 00‬عدد را خوانده و براي هرکدام مجموع اعداد ‪ 1‬تا آن عدد را محاسبه کند‪.‬‬

‫‪53‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫كاربرد حلقه ‪ for‬با دو انديس‬

‫مثال‪ :‬برنامه اي بنويسيد که ستون اعداد زير را چاپ کند‪:‬‬

‫دستور ;‪ continue‬در ‪for‬‬

‫اگر دستور ;‪ continue‬در حلقه ‪ for‬استفاده شود‪ ،‬جمالتي از حلقه که هنوز اجرا نشده اند‪ ،‬بدون اجرا مانده و ادامه اجرا از‬
‫انتهاي حلقه اغاز خواهد شد‪.‬‬

‫‪54‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فصل سوم‪ :‬ساير ساختارهاي تکرار‬

‫‪ ‬دستورالعمل ‪break‬‬ ‫‪ ‬دستورالعمل ‪do while‬‬ ‫‪ ‬دستورالعمل ‪while‬‬


‫‪ ‬تابع ) (‪cin.get‬‬ ‫‪ ‬دستورالعمل ‪switch‬‬ ‫‪ ‬دستورالعمل ‪continue‬‬
‫‪ ‬جدول اولويت عملگرها‬ ‫‪ ‬عملگر ) ( > < ‪static_cast‬‬

‫دستورالعمل ‪while‬‬

‫از اين دستور العمل مانند دستورالعمل ‪ for‬براي تکرار يک دستورالعمل ساده يا ترکيبي استفاده ميگردد‪ .‬شکل کلي اين‬
‫دستور العمل بصورت زير ميباشد‪.‬‬

‫تفاوت دستورهاي ‪ while‬و ‪for‬‬

‫دستورالعمل ‪ for‬زماني استفاده مي شود که تعداد دفعات تکرار از قبل مشخص و معين باشد‪ .‬در صورتيکه تعداد دفعات تکرار‬
‫مشخص نباشد بايستي از دستورالعمل ‪ while‬استفاده نمود‪ .‬دقت کنيد با پياده سازي مکانيزم هاي خاصي مي توان بدون‬
‫توجه به دفعات تکرار از هر دو دستور بصورت مشابه استفاده کرد‪.‬‬

‫مثال‪:‬‬
‫‪int x=0‬‬

‫)‪while(x<5‬‬

‫;‪cout << x ++<< endl‬‬

‫با اجراي قطعه برنامه فوق مقادير فوق نمايش داده مي شود ‪:‬‬

‫‪55‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫• نکته‪ :‬همانند دستور ‪ for‬اگر داخل بدنه دستور ‪ while‬فقط يک جمله باشد مي توان { و } را حذف کرد‪.‬‬

‫مثال‪ :‬نمايش اعداد ‪ 0‬تا ‪:100‬‬

‫تمرين‪ :‬برنامه زير را تفسير کنيد‪:‬‬

‫مثال‪ :‬برنامة فوق ‪ n‬مقدار از نوع اعشاري را گرفته ميانگين آن ها را محاسبه و در متغير ‪ avg‬قرار ميدهد‪.‬‬

‫‪56‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫دستورالعمل ‪do while‬‬

‫اين دستور العمل نيز براي تکرار يک دستورالعمل ساده يا ترکيبي استفاده ميشود‪.‬‬

‫شکل کلي اين دستورالعمل بصورت روبرو ميباشد‪.‬‬

‫تفاوت دستورهاي ‪ do while‬و ‪while‬‬

‫در دستورالعمل ‪ while‬ابتدا مقدار شرط ارزيابي شده اما در دستورالعمل ‪ do while‬ابتدا‬
‫دستورالعمل اجرا شده سپس مقدار شرط ارزيابي ميگردد‪ .‬بنابراين دستورالعمل ‪do while‬‬
‫حداقل يک بار انجام مي شود ‪.‬‬

‫مثال‪ :‬برنامه فوق‪ ،‬ارقام ‪ 0‬تا ‪ 9‬را روي ده خط نمايش مي دهد‪.‬‬

‫دستورالعمل ‪break‬‬

‫اين دستورالعمل باعث توقف دستورالعمل هاي تکرار( ‪ )for , while ,do while‬شده و کنترل به خارج از اين دستورالعمل ها‬
‫منتقل مينمايد‪.‬‬

‫چند مثال‪:‬‬

‫‪57‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫دستورالعمل ‪continue‬‬

‫از دستورالعمل ‪ continue‬ميتوان در دستورالعمل هاي تکرار ‪ for ، while ، do while‬استفاده نمود‪ .‬اين دستورالعمل‬
‫باعث ميشود که کنترل به ابتداي دستورالعمل هاي تکرار منتقل گردد‪.‬‬

‫چند مثال‪:‬‬

‫‪58‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫دستورالعمل ‪switch‬‬

‫همانطور که مي دانيد از دستورالعمل شرطي(‪ )if else‬مي توان بصورت تودرتو استفاده نمود ولي از طرفي اگر عمق استفادة تو در‬
‫تو از اين دستورالعمل زياد گردد‪ ،‬درك آنها مشکل مي شود ‪ .‬براي حل اين مشکل ‪ ، C++‬دستورالعمل ‪ switch‬که عمالً يک‬
‫دستورالعمل چند انتخابي ميباشد را ارائه نموده است‪.‬‬

‫شکل کلي دستور العمل ‪:Switch‬‬

‫‪59‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال‪:‬‬

‫‪61‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تابع )(‪: cin.get‬‬

‫اين تابع يک کرکتر را از صفحه کليد ميگيرد‪ .‬براي استفاده از اين تابع در ابتداي برنامه بايستي داشته باشيم‪:‬‬

‫‪#include‬‬ ‫> ‪<iostream‬‬

‫مثال‪ :‬قطعه برنامه ذيل يک کرکتر را از صفحه کليد گرفته و نمايش ميدهد‪.‬‬

‫‪char‬‬ ‫;‪x‬‬
‫;) (‪x = cin.get‬‬
‫; ‪cout << x‬‬
‫مثال‪ :‬برنامة ذيل يک سطر متن انگليسي که به ‪ CTRL Z‬ختم مي شود را گرفته دقيقاً نمايش ميدهد‪.‬‬

‫‪#include‬‬ ‫> ‪<iostream‬‬


‫) (‪int main‬‬ ‫‪ EOF‬بـــه معنـــي ‪ End of File‬مـــيباشـــد کـــه در‬
‫{‬
‫;‪char x‬‬ ‫‪ iostream.h‬تعريف شده و مقدار آن برابر با ‪ -1‬ميباشـد‪.‬‬
‫)‪while((x = cin.get()) !=EOF‬‬
‫مقدار آن در سيستم عامل ‪ DOS‬عبارتست از ‪. ctrl z‬‬
‫; ‪cout << x‬‬
‫; ‪return 0‬‬
‫}‬

‫مثال‪ :‬در قطعه برنامه ذيل ازتابع )(‪ cin.get‬و دستور ‪ switch‬استفاده شده است‪.‬‬

‫‪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‬‬
‫}‬

‫‪61‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال‪ :‬برنامة ذيل يک سطر متن انگليسي را گرفته کرکترهاي خالي (‪ )blank‬آن را حذف نموده و نمايش مي دهد‪.‬‬

‫;‪using namespace std‬‬


‫‪#include‬‬ ‫> ‪<iostream‬‬
‫) (‪int main‬‬
‫{‬
‫;‪char next‬‬
‫)‪while((next = cin.get( ) ) !=EOF‬‬
‫) ‪if(next !=  ‬‬
‫; ‪cout << next‬‬
‫; ‪return 0‬‬
‫}‬
‫عملگر ‪static_cast‬‬

‫از اين عملگر براي تبديل موقت يک نوع ‪ data‬به نوع ديگر استفاده ميشود‪ .‬اين عملگر يک عملگر يکتائي ميباشد‪.‬‬

‫مثال‪:1‬‬

‫; ‪int x = 25‬‬
‫; ‪float y‬‬
‫; )‪y = static_cast < float >(x‬‬
‫مقدار ‪ x‬موقتاً بصورت اعشاري در مي آيد و در نتيجه مقدار ‪ y‬برابر با ‪ 25.0‬مي شود‪ .‬بايستي توجه داشت که نوع متغير ‪x‬‬
‫عوض نمي شود بلکه موقتاً مقدار آن بصورت اعشاري در آمده است‪.‬‬

‫مثال‪:0‬‬

‫; ‪float x = 14.75‬‬
‫;‪cout << static_cast < int >(x) << endl‬‬
‫; ‪cout << x‬‬
‫ابتدا مقدار ‪ 11‬نمايش داده مي شود و سپس مقدار ‪ 11381‬نمايش داده مي شود‪.‬‬

‫جدول اولويت عملگرها‬

‫‪62‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تمرينات‪:‬‬

‫‪ .1‬برنامه اي که يک سکه ‪ 100‬ريالي را به سکه هاي ‪0‬و‪ 1‬و‪10‬و‪ 00‬و ‪ 10‬ريالي خرد کند‪.‬‬

‫‪ .0‬برنامه اي که خروجي زير را چاپ کند‪:‬‬

‫‪ .3‬برنامه اي که حاصل عبارت زير را بدست اورد‪:‬‬

‫‪63‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فصل چهارم‪ :‬اعداد تصادفی‬

‫‪ ‬تعريف نوع داده ( ‪) typedef‬‬ ‫‪ ‬توليد اعداد تصادفي‬


‫‪ ‬داده هاي از نوع شمارشي‬

‫اعداد تصادفي‬

‫مقادير تصادفي يا شانسي در اکثر برنامه هاي کاربردي در زمينه شبيه سازي و بازي هاي کامپيوتري نقش مهمي را ايفا‬
‫مينمايند‪ .‬براي ايجاد يک عدد تصادفي صحيح بين ‪ 0‬و ‪ 30868‬بايستي از تابع )(‪ rand‬استفاده نمائيم‪.‬‬

‫مثال‪ :‬برنامه زير ‪ 10‬عدد تصادفي بين ‪ 0‬و ‪ 32767‬را ايجاد مينمايد‪.‬‬

‫;‪using namespace std‬‬


‫‪#include‬‬ ‫> ‪<iostream‬‬
‫) (‪int main‬‬
‫{‬
‫)‪for(int j=1; j<=10; ++j‬‬
‫; ‪cout << rand( ) << \n‬‬
‫; ‪return 0‬‬
‫}‬
‫اگر برنامة فوق را چندبار اجرا نمائيم جواب يکساني را از کامپيوتري مي گيريم‪ .‬براي تصادفي کردن اعداد ميبايستي از تابع‬
‫) (‪ srand‬استفاده نمائيم‪ .‬اين تابع به يک آرگومان صحيح از نوع ‪ unsigned‬نياز دارد‪ .‬به اين آرگومان ‪ seed‬گفته ميشود‪.‬‬

‫مثال‪ :‬برنامه زير ‪ 10‬عدد تصادفي بين ‪ 0‬و ‪ 32767‬را ايجاد مينمايد‪) srand( ) ( .‬‬

‫;‪using namespace std‬‬


‫‪#include‬‬ ‫> ‪<iostream‬‬
‫) (‪int main‬‬
‫{‬
‫;‪unsigned seed‬‬
‫; " ‪cout << "Enter seed value :‬‬
‫; ‪cin >> seed‬‬
‫;)‪srand(seed‬‬
‫)‪for(int j=1; j<=10; ++j‬‬
‫;‪cout << rand( ) <<  \n ‬‬
‫; ‪return 0‬‬
‫}‬

‫‪64‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


.‫ برنامه زير نتيجه پرتاب دو تاس را نمايش ميدهد‬:‫مثال‬

using namespace std;


#include <iostream >
int main( )
{
unsigned seed, d1, d2;
cout << "Enter seed: " ;
cin >> seed ;
srand(seed) ;
d1= 1+rand( )% 6 ;
d2= 1+rand( )% 6 ;
cout << d1 <<  << d2 ;
return 0 ;
}

.‫ را نمايش ميدهد‬1 ‫ و‬0 ‫ اعداد شانسي بين‬10 ‫ برنامه زير‬:‫مثال‬

using namespace std;


#include <stdlib.h>
#include < iostream >
int main( )
{
unsigned seed ;
cout << "Enter seed: " ;
cin >> seed ;
srand(seed) ;
for(int i=1; i<=10; ++i)
cout << rand( ) / 32768.0 << endl ;
return 0 ;
}
)typedef( ‫تعريف نوع داده‬

:‫ شکل کلي عبارتست از‬.‫ ميتوان براي تعريف نوع دادههاي جديد که معادل نوع دادههاي موجود باشد استفاده نمود‬typedef ‫از‬

typedef type newtype;

‫نشان دهنده نوع داده موجود‬ ‫اسم جديد‬


:‫مثال‬

typedef int integer;

65 ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫;‪integer x,y‬‬ ‫حال ميتوان ‪ y‬و ‪ x‬را بصورت روبرو تعريف نمود‪:‬‬

‫دادههاي از نوع شمارشي‬

‫بمنظور معرفي دادههاي از نوع شمارشي از کلمه ‪ enum‬استفاده ميگردد‪.‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫مثال ‪:‬‬

‫; }‪enum color {red, blue, green, yellow, brown‬‬

‫‪ color‬يک نوع داده شمارشي ميباشد‪.‬‬

‫چند مثال‪:‬‬

‫;}‪emum status {married, devorced, vidow, single‬‬ ‫; ‪status a‬‬ ‫; ‪a= single‬‬

‫;}‪enum days {sat, sun, mon, tue, wed, thr, fri‬‬

‫نکته‪:‬‬

‫بايستي در نظر داشت که داده هاي از نوع شمارشي در عمليات ورودي و خروجي شرکت نمينمايند‪ .‬به عبارت ديگر مقادير‬
‫داده هاي از نوع شمارشي بايستي در برنامه تعيين نمود‪ .‬دستورالعل هاي ورودي و خروجي مانند ‪ cin‬و ‪ cout‬در مورد دادههاي‬
‫شمارشي نميتوان استفاده نمود‪.‬‬

‫‪66‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فصل پنجم‪ :‬آرايه ها‬

‫‪ ‬آرايه يک بعدي‬

‫‪ ‬آرايه دو بعدي ( ماتريس ها )‬

‫آرايه يک بعدي‪:‬‬

‫آرايه يک فضاي پيوسته از حافظه اصلي کامپيوتر ميباشد که ميتواند چندين مقدا را در خود جاي دهد‪.‬‬

‫كلیه عناصر يک آرايه از يک نوع میباشند‪.‬‬

‫عناصر آرايه بوسیله انديس آن ها مشخص میشوند‪.‬‬

‫در ‪ ، C++‬انديس آرايه از صفر شروع میشود‪.‬‬

‫آرايهها در برنامهنويسي در مواردي کاربرد دارند که بخواهيم اطالعات و دادهها را در طول اجراي برنامه حفظ نمائيم‪.‬‬

‫مثال‪:‬‬

‫ايجاد آرايه يک بعدي از نوع ‪int‬‬

‫; ]‪int x[5‬‬

‫تخصيص مقادير اوليه به عناصر آرايه ‪:‬‬

‫;}‪int x[5]= {4, 2, 5, 17, 30‬‬

‫‪67‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫دريافت مقادير عناصر آرايه ‪:‬‬
‫;]‪int x[5‬‬
‫)‪for(int i=0; i<=4; ++i‬‬
‫; ] ‪cin >> x[ i‬‬
‫نمايش مقادير عناصر آرايه ‪:‬‬
‫; ] ‪for (int i=0; i<5; ++i) cout << x[ i‬‬

‫نکته‪ :‬اگر تعداد مقادير اوليه کمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده بطور اتوماتيک‪ ،‬مقدار اوليه صفر ميگيرند‪.‬‬
‫مثال‪:‬‬
‫;}‪int x[5] = {12, 5, 7‬‬

‫نکته‪ :‬بايستي توجه داشت که آرايهها به صورت ضمني مقدار اوليه صفر نمي گيرند‪ .‬برنامه نويس بايد به عضو اول آرايه‪ ،‬مقدار‬
‫اوليه صفر تخصيص دهد تا عضوهاي باقي مانده بطور اتوماتيک‪ ،‬مقدار اوليه صفر بگيرند‪.‬‬
‫; }‪int x[5] = {0‬‬

‫دستور زير يک آرايه يک بعدي شش عنصري از نوع ‪ float‬ايجاد مينمايد‪.‬‬


‫; }‪float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9, 16.5‬‬

‫برنامه زير ‪ 100‬عدد اعشاري را گرفته تشکيل يک آرايه مي دهد سپس مجموع عناصر آرايه را مشخص نموده نمايش ميدهد‪.‬‬
‫;‪using namespace std‬‬
‫‪#include‬‬ ‫> ‪<iostream‬‬
‫) (‪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‬‬
‫}‬

‫‪68‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


.‫ عدد اعشاري را گرفته تشکيل يک آرايه داده سپس کوچکترين عنصر آرايه را مشخص و نمايش ميدهد‬20 ‫برنامه زير‬

using namespace std;


#include <iostream >
#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;
}
.‫) بصورت صعودي مرتب مينمايد‬Bubble sort( ‫ عدد اعشاري را گرفته بروش حبابي‬100 ‫برنامه زير‬

using namespace std;


#include <conio.h>
#include <iostream>

int main ( )
{
const int n=10;
float x[n] , temp;
int i,j ;
for(i=0; i<n; ++i)
cin >> x[i];
for(i=n-1; i>0; i--)
for(j=0 ; j<i; j++)
if(x[j] > x[j+1])
{
temp = x[j] ;
x[j] = x[j+1];
x[j+1] = temp ;
}
for(i=0; i< n ; i++)
cout << x[i] << endl;
getch();
return 0 ;
}
)‫آرايههاي دوبعدي (ماتريسها‬

.‫ماتريس ها بوسیله آرايههاي دوبعدي در كامپیوترنمايش داده می شوند‬

int a[3][4];

69 ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تخصیص مقادير اولیه به عناصر آرايه‪:‬‬

‫; } }‪int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12‬‬

‫نکته‪:1‬‬

‫; } }‪int a[3][4]= { {1}, {2,3} , {4,5,6‬‬

‫نکته‪:0‬‬
‫; } ‪int a[3][4]= {1, 2, 3, 4,5‬‬

‫نکته‪:3‬‬
‫در يک آراية دوانديسی‪ ،‬هر سطر‪ ،‬در حقیقت آرايهاي يک انديسی است‪ .‬در اعالن آرايههاي دوانديسی ذكر تعداد ستون ها الزامی‬
‫است‪.‬‬

‫;}‪int a[ ][4]={1,2,3,4,5‬‬

‫‪71‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


.‫ را گرفته مجموع عناصر آن را مشخص نموده و نمايش ميدهد‬3*4 ‫ برنامه زير يک ماتريس‬:‫مثال‬

using namespace std;


#include <iostream >
#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 ;
}
:‫تمرين‬

71 ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فصل ششم‪ :‬توابع‬

‫‪ ‬توابع درون خطي‬ ‫‪ ‬تابع بازگشتي‬ ‫‪ ‬تعريف تابع‬


‫‪ ‬سربارگذاري توابع‬ ‫‪ ‬کالس هاي حافظه ( ‪) storage classes‬‬ ‫‪ ‬انتقال پارامترها از طريق ارجاع‬

‫تعريف توابع‬

‫استفاده از توابع در برنامهها به برنامهنويس اين امکان را ميدهد که بتواند برنامههاي خود را به صورت قطعه قطعه برنامه‬
‫بنويسد‪ .‬تا کنون کليه برنامههائي که نوشتهايم فقط از تابع ) (‪ main‬استفاده نمودهايم‪ .‬شکل كلی توابع بصورت زير ميباشند‪:‬‬

‫نوع مقدار برگشتی‬ ‫نام تابع‬

‫)‪return-value-type function-name (parameter-list‬‬

‫{‬

‫‪declaration and statements‬‬ ‫لیست پارامتر ها جهت انتقال اطالعات از تابع احضار كننده به تابع فراخوانده شده‬

‫}‬

‫تعريف اعالنهاي تابع و دستورالعملهاي اجرائی‬

‫مثال‪ :‬تابع زير يک حرف کوچک را به بزرگ تبديل مينمايد‪.‬‬

‫‪72‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


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

‫تابع ‪ maximum‬دو مقدار صحيح را گرفته بزرگ ترين آن ها را برمي گرداند‪.‬‬

‫)‪int maximum(int x, int y‬‬


‫{‬
‫; ‪int z‬‬
‫;‪z=(x >= y)? x : y‬‬
‫;‪return z‬‬
‫}‬
‫برنامه کامل که از تابع ‪ maximum‬جهت يافتن ماکزيمم دو مقدار صحيح استفاده مي نمايد‪.‬‬

‫‪73‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫نکته‪ :‬اسامي پارامترها و آرگومان هاي يک تابع ميتوانند هم نام باشند‪.‬‬

‫برنامه زير يک مقدار مثبت را گرفته فاکتوريل آن را محاسبه نموده نمايش ميدهد‪.‬‬

‫نکته‪ :‬وقتي در تابعي‪ ،‬تابع ديگر احضار مي گردد بايستي تعريف تابع احضار شونده قبل از تعريف تابع احضار کننده در برنامه‬
‫ظاهر گردد‪.‬‬
‫نکته‪ :‬اگر بخواهيم در برنامهها ابتدا تابع ‪ main‬ظاهر گردد بايستي ‪ prototype‬تابع يعني پيش نمونة تابع که شامل نام تابع‪،‬‬
‫نوع مقدار برگشتي تابع‪ ،‬تعداد پارامترهائي را که تابع انتظار دريافت آن را دارد و انواع پارامترها و ترتيب قرارگرفتن اين‬
‫پارامترها را به اطالع کامپايلر برساند‪.‬‬
‫مثال‪:‬‬

‫;‪using namespace std‬‬


‫> ‪#include <iostream‬‬
‫>‪#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‬‬
‫}‬
‫‪74‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬
‫)‪long int factorial(int n‬‬
‫{‬
‫;‪long int prod = 1‬‬
‫)‪if(n>1‬‬
‫)‪for (int i=2; i<=n; ++i‬‬
‫;‪prod *= i‬‬
‫;)‪return(prod‬‬
‫}‬
‫نکته‪ :‬در صورتي که تابع مقداري بر نگرداند نوع مقدار برگشتي تابع را ‪ void‬اعالن ميکنيم‪ .‬و در صورتيکه تابع مقداري را‬
‫دريافت نکند بجاي ‪ parameter- list‬از ‪ void‬يا ( ) استفاده مي گردد‪.‬‬

‫مثال‪:‬‬

‫احضار بوسيله مقدار ( ‪) Call By Value‬‬

‫‪75‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫در اين نوع احضار تابع حافظههاي مورد استفاده آرگومان ها و پارامترها از هم متمايزند و هرگونه تغيير در پارامترها باعـــث‬
‫تغيـــر در آرگومان هاي متناظر نميگردد‪.‬‬

‫تابع بازگشتي ( ‪)recursive functions‬‬

‫توابع بازگشتي يا ‪ recursive‬توابعي هستند که وقتي احضار شوند باعث ميشوند که خود را احضار نمايند‪.‬‬

‫مثال‪ :1‬نحوه محاسبه فاکتوريل از طريق تابع بازگشتي‬

‫‪n != 1*2*3*…*(n-1) *n‬‬

‫! ‪f(n) = n‬‬

‫‪1‬‬ ‫اگر ‪n=0‬‬


‫= )‪f(n‬‬
‫)‪n *f(n-1‬‬ ‫در غير اينصورت‬

‫‪n!= 1* 2* 3* … *(n-2) *(n-1) *n‬‬

‫‪n!=(n-1)! *n‬‬

‫پياده سازي تابع بازگشتي محاسبه ي فاکتوريل‪:‬‬

‫> ‪# include <iostream‬‬


‫; )‪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‬‬
‫}‬

‫‪76‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫ امين مقدار دنباله فيبوناچي از طريق تابع بازگشتي‬n ‫ نحوه محاسبه‬:0‫مثال‬

0 , 1, 1, 2, 3, 5, 8, 13, 21 , 34, …

.‫) را مشخص و نمايش ميدهد‬fibonacci( ‫ امين مقدار دنبالة فيبوناچي‬n ‫برنامه زير‬

# include <iostream >


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;
if(n = = 1 || n= = 2)
return 1 ;
else
return(fib(n-1) + fib(n-2) ) ;
}
.‫ برنامه زير يک خط متن انگليسي را گرفته آن را وارون نموده نمايش ميدهد‬:3‫مثال‬

# include <iostream >


void reverse(void) ; // forward declaration
int main( )
{
reverse( ) ;
return 0 ;
}

77 ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫)‪void reverse(void‬‬
‫‪// read a line of characters and reverse it‬‬
‫{‬
‫; ‪char c‬‬
‫)‪if(( c=cin.get( )) !=  \n ‬‬
‫;) (‪reverse‬‬
‫; ‪cout << c‬‬
‫; ‪return‬‬
‫}‬
‫نکته‪ :‬استفاده از آرايهها بعنوان پارامتر تابع مجاز است‪.‬‬

‫مثال‪ :‬در برنامه زير تابع ‪ modify‬آرايه ‪ a‬را بعنوان پارامتر ميگيرد‪.‬‬

‫> ‪# include <iostream‬‬


‫‪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‬‬
‫}‬
‫نکته‪ :‬در اين مثال از فراخواني با مقدار استفاده نشده است‪ .‬براي همين تغييرات انجام شده در تابع )(‪ modify‬باعث تغيير در‬
‫مقادير ارايه در تابع اصلي يا )(‪ main‬شده است‪ .‬اين مبحث‪ ،‬تحت عنوان فراخواني از طريق ارجاع در ادامه توضيح داده مي‬
‫شود‪.‬‬

‫‪78‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثال‪ :‬در صورتيکه آرايه بيش از يک بعد داشته باشد بعدهاي دوم به بعد بايستي در تعريف تابع و پيش نمونه تابع ذکر گردد‪.‬‬

‫توابع درون خطي (‪)inline‬‬

‫کلمه ‪ inline‬بدين معني است که به کامپايلر دستور ميدهد که يک کپي از دستورالعمل هاي تابع در همان جا (در زمان‬
‫مقتضي) توليد نمايد تا از احضار تابع ممانعت بعمل آورد‪.‬‬

‫اشکال توابع ‪inline‬‬

‫بجاي داشتن تنها يک کپي از تابع ‪ ،‬چند کپي از دستورالعمل هاي تابع در برنامه اضافه ميشود که باعث بزرگ شدن اندازه يا‬
‫طول برنامه ميشود‪ .‬بنابراين از ‪ inline‬براي توابع کوچک استفاده ميگردد‪.‬‬

‫‪79‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مثالي از توابع درون خطي‪:‬‬

‫> ‪#include <iostream‬‬


‫} ;‪inline float cube(const float s) {return s*s*s‬‬
‫) (‪int main‬‬
‫{‬
‫; ‪float side‬‬
‫; ‪cin >> side‬‬
‫; ‪cout << side << cube(side) << endl‬‬
‫; ‪return 0‬‬
‫}‬
‫انتقال پارامترها از طريق ارجاع‬

‫تاکنون وقتي تابعي را احضار ميکرديم يک کپي از مقادير آرگومان ها درپارامترهاي متناظر قرار ميگرفت ‪ .‬اين روش احضار‬
‫بوسيله مقدار يا ‪ call by value‬ناميده شد‪ .‬در انتقال پارامترها از طريق ارجاع در حقيقت حافظه مربوط به آرگومان ها و‬
‫پارامترهاي متناظر بصورت اشتراکي مورد استفاده قرار ميگيرد‪ .‬اين روش ‪ call by reference‬ناميده ميشود‪.‬‬

‫در اين روش پارامترهائي که از طريق ‪ call by reference‬عمل مينمايند در پيش نمونه تابع قبل از نام چنين پارامترهائي‬
‫از & استفاده ميشود‪ .‬واضح است که در تعريف تابع نيز به همين طريق عمل ميشود‪.‬‬

‫‪81‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫نکته‪ :‬وقتي پارامتري بصورت ‪ call by reference‬اعالن مي گردد اين بدان معني است که با تغيير مقدار اين پارامتر در تابع‬
‫احضار شده مقدار آرگومان متناظر نيز تغيير مينمايد‪.‬‬
‫مثال‪ :‬برنامهزير با استفاده از ‪ fswap‬دو مقدار اعشاري را مبادله مينمايد‪.‬‬

‫> ‪# include <iostream‬‬


‫;) & ‪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‬‬
‫}‬
‫کالسهاي حافظه (‪)storage classes‬‬

‫متغيرها به دو طريق متمايز مشخص ميشوند‪ :‬يکي بوسيله نوع (‪ )type‬آن ها و ديگري بوسيله کالس حافظه آن ها‪.‬‬

‫نوع متغير قبالً اشاره شد‪ .‬بعنوان مثال ‪ . . . ، double ، float ، int‬ولي کالس حافظة يک متغير در مورد طول عمر و وسعت و‬
‫دامنة متغير بحث مينمايد‪.‬‬

‫بطور کلي کالس حافظه متغيرها به چهار دستة تقسيم ميگردد ‪:‬‬

‫‪automatic .1‬‬

‫‪static .0‬‬

‫‪external .3‬‬

‫‪register .1‬‬

‫‪81‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫‪ :automatic‬متغيرهاي ‪ automatic‬در درون يک تابع تعريف ميشوند و در تابعي که اعالن ميشود بصورت متغيرهاي محلي‬
‫براي آن تابع مي باشند‪ .‬حافظه تخصيص داده شده به متغيرهاي ‪ automatic‬پس از اتمام اجراي تابع از بين مي رود به عبارت‬
‫ديگر وسعت و دامنة متغيرهاي از نوع ‪ automatic‬تابعي ميباشد که م تغير در آن اعالن گرديده است‪.‬‬

‫‪ :Static‬متغيرهاي ‪ static‬نيز در درون توابع تعريف مي شوند و از نظر وسعت و دامنه شبيه متغيرهاي ‪ automatic‬هستند ولي‬
‫در خاتمة اجراي تابع‪ ،‬حافظه وابسته به اين نوع متغيرهـــا از بين نمي رود بلکه براي فراخواني بعدي تابع باقي ميماند‪.‬‬

‫بايستي توجه داشت که اگر در توابع به متغيرهاي از نوع ‪ static‬مقدار اوليه تخصيص ندهيم مقدار صفر بصورت اتوماتيک براي‬
‫آن ها در نظر گرفته ميشود‪.‬‬

‫‪ :External‬متغيرهاي از نوع ‪ external‬متغيرهائي هستند که در بيرون از توابع اعالن مي شوند و وسعت و دامنه فعاليت آن‬
‫ها کليه توابعي مي باشد که در زير دستور اعالن متغير قرار دارد‪.‬‬

‫مثال‪:‬‬

‫> ‪# include <iostream‬‬


‫‪int w; // external variable‬‬
‫)‪functa(int x, int y‬‬
‫{‬
‫; ‪cout << w‬‬
‫;‪w=x+y‬‬
‫;‪cout << endl << w << enld‬‬
‫; ‪return x%y‬‬
‫}‬

‫‪82‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫) (‪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‬مقدار اوليه تخصيص ندهيم مقدار صفر بصورت اتوماتيک‬
‫براي آن ها در نظر گرفته ميشود‪.‬‬

‫‪ :Register‬وقتي متغيري از نوع ‪ register‬اعالن ميشود از کامپيوتر عمالً درخواست ميشود که به جاي حافظه از يکي از‬
‫رجيسترهاي موجود استفاده نمايد‪.‬‬

‫کاربرد کالس ‪ :register‬معموالً از نوع رجيستر براي شاخصهاي دستور تکرار و يا انديس هاي آرايهها استفاده ميشود‪ .‬بايستي‬
‫توجه داشت که متغيرهاي از نوع رجيستر قابل استفاده در دستور ‪ cin‬نميباشند‪.‬‬

‫سربارگذاري توابع (‪)function overloading‬‬

‫در ‪ C++‬اين امکان وجود دارد که دريک برنامه بتوانيم از چند توابع هم نام استفاده نمائيم مشروط بر اين که پارامترهاي اين‬
‫توابع متفاوت باشند‪( .‬از نظر تعداد پارامتر و يا نوع پارامترها و ترتيب آن ها)‬

‫مثال‪:‬‬

‫> ‪# include <iostream‬‬


‫;)‪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‬‬
‫‪83‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬
‫تمرينات‪:‬‬

‫‪ .1‬برنامه اي بنويسيد که ‪ 3‬عدد اعشاري را خوانده و به تابعي ارسال کند و تابع ميانگين آن ها را محاسبه کرده و‬
‫برگرداند‪.‬‬

‫‪ .0‬برنامه اي که ضرايب معادله ي درجه دومي را خوانده‪ ،‬آن ها را به تابعي ارسال کند‪ .‬تابع معادله را حل کند و جواب ها‬
‫را در خروجي چاپ کند‪( .‬تابع جواب ها را به تابع اصلي برنمي گرداند‪).‬‬

‫‪ .3‬برنامه اي بنويسيد که عددي را از ورودي خوانده و هريک از ارقام آن را در يک سطر چاپ کند‪ .‬تفکيک و چاپ ارقام‬
‫توسط تابع بازگشتي صورت گيرد‪.‬‬

‫‪ .1‬برنامه اي بنويسيد که حاصلضرب دو عدد صحيح را به کمک جمع کردن محاسبه کند‪ .‬براي اين کار از تابع بازگشتي‬
‫استفاده کنيد‪.‬‬

‫اگر ‪b=1‬‬ ‫‪a‬‬


‫‪= a×b‬‬
‫اگر ‪b>1‬‬ ‫‪a×(b-1)+a‬‬

‫‪84‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫فصل هفتم‪ :‬ساختار ها‬
‫‪ ‬ساختارها‬
‫‪ ‬رشته ها و توابع مربوطه‬
‫‪ Union ‬ها‬

‫ساختارها‬

‫ساختارها شبيه آرايه ها بوده بدين صورت که يک نوع داده گروهي است که فضاي پيوسته از حافظه اصلي را اشغال مينمايد‪.‬‬
‫اما عناصر ساختار الزاماً از يک نوع نميباشند بلکه اعضاي يک ساختار‬
‫ميتوانند از نوعهاي مختلفه از قبيل ‪ … ، float ، int ، char‬باشند‪.‬‬

‫تعريف ساختار‪:‬‬

‫‪struct account‬‬
‫{‬
‫; ‪int acc_no‬‬
‫;‪char acc_type‬‬
‫; ]‪char name[80‬‬
‫; ‪float balance‬‬
‫;}‬
‫ساختار ‪ account‬داراي چهار عضو ميباشد‪:‬‬

‫شماره حساب از نوع ‪int‬‬ ‫‪acc_no‬‬

‫نوع حساب از نوع ‪char‬‬ ‫‪acc_type‬‬


‫مشخصات صاحب حساب از نوع رشتة ‪ 80‬کرکتري‬ ‫‪name‬‬
‫مانده حساب از نوع ‪float‬‬ ‫‪balance‬‬

‫به دو صورت مي توان اعالن يک متغير از نوع ساختار را نمايش داد ‪:‬‬

‫‪85‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫روش دوم‬ ‫روش اول‬

‫به ساختارها ميتوان مقدار اوليه نيز تخصيص داد‪:‬‬

‫;}‪account cust = {4236, r, Nader Naderi , 7252.5‬‬

‫جزء‬ ‫‪.‬‬ ‫استفاده ميگردد‪ .‬عملگر‬ ‫دسترسي به عناصر يک ساختار‪ :‬به منظور دسترسي به عناصر يک ساختار از عملگر ‪.‬‬
‫عملگرهاي يکتائي ميباشد‪.‬‬

‫مثال‪:‬‬
‫‪cust .acc_no = 4236‬‬
‫‪cust .acc_type = r‬‬
‫‪cust . name = Nader Naderi‬‬
‫‪cust . balance = 7252.5‬‬

‫نکته‪ :‬عضو يک ساختار خود ميتواند يک ساختار ديگر باشد‪.‬‬

‫‪86‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫نکته‪ :‬ميتوان آرايهاي تعريف نمود که هر عضو آن يک ساختار باشد و حتي به آن ها مقادير اوليه تخصيص نمود‪.‬‬

‫برنامه زير هر عدد مختلط را بصورت يک ساختار در نظر گرفته‪ ،‬دو عدد مختلط را ميگيرد و مجموع آن ها را مشخص و‬
‫نمايش ميدهد‪.‬‬

‫‪Union‬‬
‫‪ union‬از نظر ساختاري شبيه ‪ struct‬ميباشد‪ .‬با اين تفاوت که عضوهائي که تشکيل ‪ union‬مي دهد همگي از حافظه مشترکي‬
‫در کامپيوتر استفاده مينمايند‪ .‬تمام اعضاي داده اي در يونيون از يک محل شروع مي شوند‪.‬‬
‫بنابراين استفاده از ‪ union‬باعث صرفهجوئي در حافظه ميگردد‪.‬‬
‫مثال‪:‬‬
‫‪union id‬‬
‫{‬
‫;]‪char color [10‬‬
‫;‪int size‬‬
‫;‪} x , y‬‬

‫‪color‬‬

‫‪size‬‬

‫‪87‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫هر کدام از متغيرهاي ‪ x‬و ‪ y‬يک رشته ‪ 10‬کرکتري يا يک مقدار از نوع ‪ int‬ميباشد و کامپيوتر يک بلوك حافظه که بتواند‬
‫رشته ‪ 10‬کرکتري را در خود جاي دهد ‪ ،‬براي ‪ color‬و ‪ size‬در نظر ميگيرد‪.‬‬

‫مثال‪:‬‬

‫رشتهها و توابع مربوطه‬

‫رشتهها در ‪ ، C++‬آرايهاي از کرکترها ميباشند که با کرکتر ‪  \0‬ختم مي شوند‪.‬‬

‫;‪char name[ ]=  sara‬‬

‫‪88‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫مقداردهی اولیه به رشته ها‬

‫اگر همانند دو دستور اول عمل کنيم‪ ،‬خود کامپايلر اتوماتيک در آخر رشته ’‪ ‘\0‬قرار مي دهد ولي در حالت سوم بايد خودمان‬
‫به رشته ’‪ ‘\0‬بدهيم‪.‬‬

‫نکته‪ :‬رشته ها هميشه به خاطر ’‪ ‘\0‬يک کاراکتر بيشتر فضا مي گيرند‪.‬‬

‫خواندن و نوشتن رشته‪:‬‬

‫براي خواندن رشته ها از ورودي طبق رويه زير عمل مي کنيم‪.‬‬

‫‪89‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫استفاده از متد ) (‪get‬‬

‫طول رشته‪ :‬طول حداكثر مکانی است كه رشته می تواند بگیرد‪.‬‬

‫تفاوت ‪ get‬و ‪cin‬‬

‫‪91‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫انتساب رشته ها‪:‬‬

‫دو رشته را نمي توان بصورت مستقيم در داخل يکديگر بريزيم‪.‬‬

‫مقايسه ي رشته ها‪:‬‬

‫الحاق دو رشته‪:‬‬

‫‪91‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


.‫ رشته در نظر گرفته آن ها را به ترتيب حروف الفباء مرتب نموده نمايش ميدهد‬5 ‫ برنامه ذيل پنج اسم را بصورت‬:‫مثال‬

using namespace std;

#include <string.h>

#include <conio.h>

#include <iostream>

void sort(char [ ][10 ]);

int 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();

return 0;

void sort(char name[ 5][ 10])

char t[10];

for(int i=4; i>0;i--)

for(int j=0; j<i; j++)

if(strcmpi(name[j], name[j+1])> 0)

{// interchange the two strings

strcpy(t, name[j]);

strcpy(name[j], name[j+1]);

strcpy(name[j+1], t);

return ;

92 ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تابع )‪strcmpi(s1, s2‬‬

‫رشتههاي ‪ s1‬و ‪ s2‬را با هم مقايسه نموده (بدون توجه به حروف کوچک و بزرگ) اگر رشته ‪ s1‬برابر با رشته ‪ s2‬باشد مقدار‬
‫صفر و اگر رشته ‪ s1‬کوچکتر از رشته ‪ s2‬باشد يک مقدار منفي در غير اينصورت يک مقدار مثبت بر ميگرداند‪.‬‬

‫;"‪char s1[10] = "ALI‬‬


‫;"‪char s2[10]="ali‬‬ ‫‪0‬‬
‫;‪cout << strcmpi(s1, s2) << endl‬‬

‫تابع ) ‪strcmp(s1, s2‬‬

‫رشتههاي ‪ s1‬و ‪ s2‬را با هم مقايسه نموده اگر ‪ s1‬برابر با ‪ s2‬باشد مقدار صفر و اگر رشته ‪ s1‬کوچکتر از رشته ‪ s2‬باشد يک‬
‫مقدار منفي در غير اينصورت يک مقدار مثبت برميگرداند‪.‬‬

‫;"‪char s1[10]= "ALI‬‬ ‫‪-1‬‬


‫;"‪char s2[10]="ali‬‬
‫;‪cout << strcmp(s1, s2) << endl‬‬

‫تابع ) ‪strncmp(s1, s2,n‬‬

‫حداکثر ‪ n‬کرکتر از رشتة ‪ s1‬را با ‪ n‬کرکتر از رشتة ‪ s2‬مقايسه نموده در صورتيکه ‪ s1‬کوچکتر از ‪ s2‬باشد يک مقدار منفي‪ ،‬اگر‬
‫‪ s1‬مساوي با ‪ s2‬باشد مقدار صفر در غير اينصورت يک مقدار مثبت برمي گرداند‪.‬‬

‫;"‪char s1[10]= "ali reza‬‬


‫;"‪char s2[10]="ali‬‬
‫;‪cout << strncmp(s1, s2,3) << endl‬‬
‫‪0‬‬

‫;"‪char s1[10]= "ali reza‬‬


‫;"‪char s2[10]="ali‬‬
‫‪32‬‬
‫;‪cout << strncmp(s1, s2,4) << endl‬‬

‫‪93‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تابع (‪strcat(s1, s2‬‬

‫دو رشتة ‪ s1‬و ‪ s2‬را بعنوان آرگومان گرفته رشتة ‪ s2‬را به انتهاي رشتة ‪ s1‬اضافه مينمايد‪ .‬کرکتر اول رشتة ‪ s2‬روي کرکتر‬
‫پاياني ‪ \0‬رشتة ‪ s1‬نوشته ميشود ونهايتاً رشتة ‪ s1‬را برمي گرداند‪.‬‬

‫;" ‪char s1[20]= "ali‬‬


‫;"‪char s2[20]="reza‬‬ ‫‪ali reza‬‬
‫;‪cout << strcat(s1, s2) << endl‬‬

‫تابع (‪strncat(s1, s2,n‬‬

‫دو رشته ‪ s1‬و ‪ s2‬ومقدار صحيح و مثبت ‪ n‬را بعنوان آرگومان گرفته‪ ،‬حداکثر ‪ n‬کرکتر از رشتة ‪ s2‬را در انتهاي رشتة ‪ s1‬کپي‬
‫مينمايد‪ .‬اولين کرکتر رشته ‪ s2‬روي کرکتر پاياني ‪ \0‬رشتة ‪ s1‬مينويسد ونهايتاً مقدار رشتة ‪ s1‬را برمي گرداند‪.‬‬

‫;" ‪char s1[20]= "ali‬‬


‫;"‪char s2[20]="reza‬‬ ‫‪ali re‬‬
‫;‪cout << strncat(s1, s2,2) << endl‬‬

‫تابع (‪strlen(s‬‬

‫رشتة ‪ s‬را بعنوان آرگومان گرفته طول رشته را مشخص مينمايد‪.‬‬

‫;"‪char s1[10]= "ali‬‬


‫;)‪cout << strlen(s1‬‬
‫‪3‬‬

‫;" ‪char s1[10]= "ali‬‬ ‫‪4‬‬


‫;)‪cout << strlen(s1‬‬

‫‪94‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


‫تابع )‪strcpy(s1,s2‬‬

‫دو رشتة ‪ s1‬و ‪ s2‬را بعنوان آرگومان گرفته رشتة ‪ s2‬را در رشتة ‪ s1‬کپي مينمايد و نهايتاً مقدار رشتة ‪ s1‬را بر ميگرداند‪.‬‬

‫;" ‪char s1[20]= "ali‬‬ ‫‪reza‬‬


‫;"‪char s2[10]="reza‬‬
‫;‪cout << strcpy(s1, s2) << endl‬‬

‫;]‪char s1[20‬‬
‫;"‪char s2[10]=“ali‬‬
‫‪ali‬‬
‫;‪cout << strcpy(s1, s2) << endl‬‬

‫تابع (‪strncpy(s1, s2,n‬‬

‫دو رشتة ‪ s1 , s2‬و مقدار صحيح و مثبت ‪ n‬را بعنوان آرگومان گرفته‪ ،‬حداکثر ‪ n‬کرکتر را از رشتة ‪ s2‬در رشتة ‪ s1‬کپي نموده‪،‬‬
‫نهايتاً مقدار رشتة ‪ s1‬را برمي گرداند‪.‬‬

‫;" ‪char s1[20]= "ali‬‬


‫;"‪char s2[10]="reza‬‬ ‫‪rez‬‬
‫;‪cout << strncpy(s1, s2,3) << endl‬‬

‫;]‪char s1[20‬‬
‫;"‪char s2[10]=“amir ali‬‬ ‫‪amir‬‬
‫;‪cout << strncpy(s1, s2,4) << endl‬‬

‫نکته‪ :‬براي استفاده از توابع مربوط به رشتهها بايستي حتماً در ابتدا برنامه >‪ #include <string.h‬را قرار دهيم‪.‬‬

‫‪95‬‬ ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬


:‫مثال‬

#include <iostream >


#include <string.h>
#include <conio.h>
int main( )
{
char s1[30]= happy birthday;
char s2[30]= happy holidays ;
cout << strcmp(s1, s2) << endl;
cout << strncmp(s1, s2, 7) << endl ;
return 0;
}
:‫مثال‬

#include <iostream >


#include <string.h>
#include <conio.h>
int main( )
{
char s[10] = sara;
cout << strlen(s);
return 0;
}
.‫ مي باشد‬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]);
}

96 ‫وحیده بابائیان‬ ‫جزوه درس مبانی كامپیوتر و برنامه سازي‬

You might also like