0% found this document useful (0 votes)
81 views183 pages

Fundamentals of Progrmaming - Finalized Revised

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
81 views183 pages

Fundamentals of Progrmaming - Finalized Revised

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 183

‫جمهوری اسالمی افغانستان‬

‫ریاست عمومی تعلیمات تخنیکی و مسلکی‬


‫ریاست انکشاف نصاب تعلیمی‬

‫اساسات برنامه نویسی‬


‫)‪(C++‬‬
‫شناسنامۀ کتاب‬

‫شناسنامۀ کتاب‬ ‫‪‬‬


‫اساسات برنامه نویسی‬ ‫نام کتاب‪:‬‬ ‫‪‬‬
‫پوهندوی صدیق هللا بارکزی‬ ‫تدوین کننده‪:‬‬ ‫‪‬‬
‫‪1398‬‬ ‫سال چاپ‪:‬‬ ‫‪‬‬
‫اول‬ ‫نوبت چاپ‪:‬‬ ‫‪‬‬
‫تیراژ‪:‬‬ ‫‪‬‬
‫طرح و دیزاین کمپیوتر‪:‬‬ ‫‪‬‬
‫پیش گفتار‬
‫سپاس خداي مهربان را که انسان را علم آموخت و اورا اشرف‬
‫مخلوقات آفرید‪ .‬طوریکه همۀ ما می دانیم ٰ امروزعلم‬
‫درحال‬ ‫روز‬ ‫وهر‬ ‫نموده‪،‬‬ ‫توسعه‬ ‫و‬ ‫کمپیوتربسیاررشد‬
‫تغییروانکشاف ميباشد‪ .‬همه جهانیان به این باور اند که‬
‫عصرکنونی‪ ،‬عصر تکنالوژی است و مردم ما نیز بدین امر‬
‫معتقد اند که یگانه راه که کشور ما را به سوی ترقی و‬
‫پیشرفت میبرد‪ ،‬پی گیری علم و دانش و آشنایی به تکنالوژی‬
‫معاصر است‪ .‬تکنالوژی که امروز تمام جهان را در زیر یک‬
‫چتر قرار داده‪ ،‬کره زمین را با این عظمت و وسعت اش در‬
‫یک خانه همچو مرغ در قفس قرار داده به تمام منابع و‬
‫معلومات در رابطه با سایر علوم در آن واحد می توان به آن‬
‫دسترسی پیدا کرد‪.‬‬
‫بدین وسیله خداوند متعال را سپاسگزارم که به من توفیق‬
‫عنایت فرمود تا وظیفه سپرده شده از طرف ریاست انکشاف‬
‫(اساسات‬ ‫نصاب تعلیمی در رابطه به تالیف کتاب درسی‬
‫برنامه نویسی) برای سمستردوم در شش ساعت درسی را به‬
‫پایان برسانم‪ .‬در جمع آوری مطالب این کتاب درسی از‬
‫مراجع معتبر جدید استفاده کرده ام‪ .‬آنگونه که هویداست‬
‫موضوع اساسات برنامه نویسی بحث نهایت گسترده است‪ ،‬این‬
‫جانب تالش کرده ام موضوعات زیاد‪ ،‬ضروری را که محصالن‬
‫دیپارتمنت های شبکه‪ ،‬ویب دیزاین‪ ،‬دیتابیس و گرافیک به‬
‫عنوان افراد تخنیکی در آینده به آن نیاز دارند گرد‬
‫بیاورم و در طرح عبارت ها روش ساده را در پیش گرفته ام‪،‬‬
‫تا استفاده آن عام گردد‪.‬‬
‫باوجود این همه‪ ،‬تألیف این اثر کار و تالش انسانی است‪،‬‬
‫از مطالعه کنند گان ( به خصوص استادان و محصالن) عزیز‬
‫تمنا داریم تا خوبی های آنرا اثر لطف وعنایت خداوند‬
‫دررفع نواقص آن ما یاری رسانند‪.‬‬ ‫متعال من دانسته و‬

‫با احترام‬

‫پوهندوی صدیق هللا بارکزي‬

‫ب‬
‫فهرست مطالب‬
‫فصل اول – معرفی زبانهای برنامه نویسی‬
‫فصل اول ‪4...................................................................................................................‬‬
‫معرفی زبانهای برنامه نویسی ‪4........................................................................................‬‬
‫برنامه نویسی ‪5............................................................................................................‬‬
‫مترجمان زبان (‪7.............................................................. )Language Translators‬‬
‫خالصه ‪9......................................................................................................................‬‬
‫پرسش های فصل ‪10.....................................................................................................‬‬
‫فصل دوم ‪11.................................................................................................................‬‬
‫الگوریتم و فلوچارت ‪11..................................................................................................‬‬
‫انکشاف راه حل کمپیوتری )‪16.................. (Development of Computer Solution‬‬
‫ردیابی اشتباهات )‪17................................................................ (Debugging‬‬
‫مستند سازی)‪18..................................................................... (Documentation‬‬
‫خـالصه فصل ‪18............................................................................................................‬‬
‫پرسشهای فصل ‪18......................................................................................................‬‬
‫فصل سوم ‪19................................................................................................................‬‬
‫ثابت ها‪ ،‬متحولها و انواع دیتا ‪19.....................................................................................‬‬
‫تطبیق زبان سی پلس پلس ( ‪20.................................. )Application of C++‬‬
‫ساختار ابتدایی یک برنامه ‪20.................................................................................. C++‬‬
‫مجموعۀ حروف (‪27.................................................................)C++ Character Set‬‬
‫اجزای ‪28.................................................................................... )C++ Token( C++‬‬
‫دستورهای کلیدی (‪28.............................................................................. )Keywords‬‬
‫ثابتها (‪30............................................................................................. )Constants‬‬
‫ثابتهای سمبولیک یا ماکرو )‪33............................................. (Symbolic Constants‬‬
‫مفهوم ‪37.......................................................................... Escape Sequences‬‬
‫متحولها (‪38............................................................................................ )Variables‬‬
‫انواع دیتا ( ‪39......................................................................... )Data Types in C++‬‬
‫معرفی متحولها)‪41............................................................... (Declaring Variables‬‬
‫ت‬
42...... (Assigning Values to Variables)‫توظیف قیمت ها در متحولها‬
42.................................................................. (Assignment Statement) = ‫بیانیه‬
48.......................................................................................................... ‫خـالصۀ فصل‬
48....................................................................................................... ‫پرسشهای فصل‬
50..............................................................................................................‫فصل چهارم‬
50................................................................................................ ‫عملگرها و عبارت ها‬
52........................................... )Arathematic Operators( ‫عملگرهای حسابی‬
53......)Precedence of Arathematic Operators( ‫اولویت بندی عملگر های حسابی‬
56........................................... (Relational Operators)‫عملگرهای ارتباطی‬
57..................................................... )Logical Operators( ‫عملگرهای منطقی‬
58............................................................. )Assignment Operators( = ‫عملگر‬
62............................................................ )Bitwise Operators( ‫عملگر بیتی‬
64................................................................................................. (sizeof) ‫عملگر‬
65..................................................................................... )Expressions( ‫عبارت ها‬
66.........................................................................................)Statements( ‫بیانیه ها‬
67................................................ )Evaluation of Expressions( ‫ارزیابی عبارت ها‬
68.............................................. )Precedence of Operators( ‫حق اولویت عملگرها‬
70............................... )Some Computational Problems( ‫بعضی مسایل محاسباتی‬
71.....................................................................)Library Functions(‫توابع کتابخانه‬
75.............................................................................................................‫خالصۀ فصل‬
77....................................................................................................... ‫پرسشهای فصل‬
78................................................................................................................ ‫فصل پنچم‬
78................................................................................. ‫بیانیه های تصمیم گیری یا شرطی‬
78...................................................................................................... )if( ‫بیانیۀ شرطی‬
82.................................................... THE IF ( ) ELSE STATEMENT ‫بیانیۀ شرطی‬
89.................................... NESTED IF ( ) STATEMENT ‫یک شرط داخل شرط دیگر‬
97.................................................................................... THE ELSE – IF ( ) ‫بیانیه‬
100............................................................................................. switch ‫بیانیۀ شرطی‬
106.................................................... )The Conditional Operator( ‫عملگر شرطی‬
‫ث‬
‫بیانیه ‪108.......................................................................................................... goto‬‬
‫خـالصۀ فصل ‪111..........................................................................................................‬‬
‫پرسشهای فصل ‪112.....................................................................................................‬‬
‫فصل ششم ‪113.............................................................................................................‬‬
‫حلقه ها ‪113.................................................................................................................‬‬
‫انواع حلقه (‪116................................................. )Types of Looping Constructs‬‬
‫پرش در حلقه ها (‪136..................................................................... )Jump in Loops‬‬
‫تابع ) ( ‪139........................................................................................................ exit‬‬
‫خـالصۀ فصل ‪141..........................................................................................................‬‬
‫پرسشهای فصل ‪142.....................................................................................................‬‬
‫فصل هفتم ‪143..............................................................................................................‬‬
‫صف یا ‪143...................................................................................................... Array‬‬
‫انواع صف (‪144............................................................................. )Types of Array‬‬
‫خـالصه فصل ‪161..........................................................................................................‬‬
‫پرسشهای فصل ‪162.....................................................................................................‬‬
‫فصل هشتم ‪163.............................................................................................................‬‬
‫تابع )‪163...................................................................................................(Function‬‬
‫توابع کتاب خانه ای‪164..................................................................................................‬‬
‫توابع تعریف شده توسط کاربر ‪165....................................................................................‬‬
‫نوشتن توابع ‪166..........................................................................................................‬‬
‫روشهای ارسال پارامتر ها به توابع ‪171.............................................................................‬‬
‫مآخذ‪177.....................................................................................................................‬‬

‫ج‬
‫مـقدمـه‬
‫طوري که همۀ ماميدانیمدراین اواخرعلم کمپیوتر رشد وتوسعۀ‬
‫چشم گیري نموده‪ ،‬وباگذشت هر روز در حال تغییر و پیشررفت‬
‫میباشد‪ .‬کمپیوتر و تکنالوژي معلوماتي نقش بسیار مهرم و‬
‫ارزنده را در زند گي روزمره بشر ایفا مینماید‪.‬‬
‫هدف ازتألیف این کتاب این است که بتواند نیازهای محصرالن‬
‫را در بخش اساسات نویسی فراهم نماید‪ .‬کتاب اساسات نویسی‬
‫با درنظرداشت مفردات جدید که توسط دیپارتمنت های متذکره‬
‫اخیرا آماده شده تألیف گردیده است‪ .‬کتاب برا ززم لسران‬
‫‪ C++‬تالیف گردیده است‪ .‬مفاهیم اساسی نویسی و ‪ C++‬در ایرن‬
‫کتاب به زبان ساده و عام هدف اینکه توانایی هرای محصرالن‬
‫را در بخش حل مسایل (‪ )Problem solving‬با فراهم نمودن دانرش و‬
‫مهارت های فهم بیان گردیده است‪ .‬در هر فصل این کتاب یک‬
‫تعداد مثال ها ذکر گردیده ترا در مفراهیم را سراده ترر‬
‫سازد‪.‬‬
‫فصل اول در رابطه به مفاهیم اساسی برنامه نویسی‪ ،‬تحلیرل‬
‫و دیررزاین حررل مسررأله ‪ .‬فصررل دوم درمررورد الگرروریتم و‬
‫فلوچارت‪ .‬فصل سوم در رابطه به اهمیت و تطبیرق لسران ‪،C++‬‬
‫ساختارابتدایی یک ‪ . C++‬فصل چهارم در رابطه به ثابت ها‪،‬‬
‫متحولها‪ ،‬دستورهای کلیدی و انرواع دیترا‪ .‬فصرل پرنمم در‬
‫رابطه به عملگرها‪ ،‬انواع مختلف عملگرها‪ ،‬حق اولویت بندی‬
‫عملگرها‪ ،‬عبارات و باآلخره توابع کتابخانه یی ‪ .‬فصل ششرم‬
‫درمورد تنظمیات ورودی و خروجی‪ ،‬فایرل صردری‪ ،‬عملگرهرای‬
‫ورودی و خروجی ‪ .‬فصل هفتم در رابطه به بیانیه های تصمیم‬
‫گیری مانند ‪ switch ،if‬وعملگر شررطی ‪ . The Conditional Operator‬فصرل‬
‫بیانیه هرای حلقروی ماننرد ‪،for ،do while ،while‬‬ ‫هشتم درمورد‬
‫‪ Nested loop‬و ‪ . Jump in loops‬فصل نهم در رابطه به صرف و انرواع‬
‫صف فصل دهم درمورد توابع‪ ،‬نیراز بررای توابرع‪ ،‬سراختار‬
‫توابع و ارگومنت های حقیقی و رسمی ‪.‬‬
‫هر فصل با مقدمه‪ ،‬اهداف آموزشی در ابتداء و به تعقیب آن‬
‫به موضوعات اساسی فصل پرداخته شده است‪ ،‬به هر موضوع بره‬
‫اندازه نیاز شرح داده شده‪ ،‬خالطه مطالب هر فصرل در قسرمت‬
‫اخیر آن آورده شده و پرسش برای ارزیرابی مطالرب فصرل در‬
‫آخر آن گنمانیده شده است و فصل ها با معرفی فهرست مآخرذ‬
‫پایان یافته است‪.‬‬

‫‪2‬‬
‫امیدوارم خداوند متعال این تالش ناچیز را ق بول نمروده و‬
‫وسیله گسترش علم و دانش در بخش برنامره نویسری کمپیروتر‬
‫درکشور عزیز مان بگرداند‪.‬‬

‫‪3‬‬
‫فصل اول‬
‫معرفی زبان های برنامه نویسی‬
‫‪Introduction to Programming Languages‬‬

‫آشناشوند‪.‬‬ ‫نویسی‬ ‫برنامه‬ ‫تعریف‬ ‫با‬ ‫عمومی‪:‬‬ ‫هدف‬


‫‪.‬‬
‫اهداف آموزشی‪ :‬در پایان این فصل‪ ،‬محصالن قادر خواهند بود تا‪:‬‬
‫‪ .1‬برنامه را تعریف نمایند‪.‬‬
‫‪ .2‬تاریخچه برنامه نویسی را بیان نمایند‪.‬‬
‫‪ .3‬انواع زبان های برنامه نویسی را توضیح دهند‪.‬‬

‫این فصل حاوی مفاهیم اساسی و ابتدایی برنامه نویسی‬


‫مانند اهمیت‪ ،‬تعریف و تاریخچۀ برنامه نویسی و مترجمان‬
‫برنامه نویسی میباشد که عناوین پی یکدیگر به تفصیل مورد‬
‫بحث قرار گرفته است‪.‬‬
‫کمپیوتر وسیلۀ الکترونیکی است که غرض حل مسرایل مختلرف‬
‫استفاده می شود‪ .‬هدف از مسایل (‪ )Problems‬مشرکالت یرا چرالش‬
‫های است کره برای آن هرا راه هرای حرل برا اسرتفاده از‬
‫کمپیوتر دریافت می نماییم‪ .‬برای روشن شردن مفهروم مسأله‬
‫مثال های ذیل را در نظر گیرید‪:‬‬
‫‪ ‬مسأله (‪ )Problem‬در بخرش انمنییرری میتوانرد دیرزاین یرک‬
‫ماشین و یا دیزاین نقشۀ یک تعمیر باشد‪.‬‬
‫‪ ‬مسأله در بخش طب میتواند تشخیص دقیق امراض‪ ،‬کمپیروتری‬
‫نمودن سیستم مدیریت شفاخانه ها و یا نگهداری گدام های‬
‫ادویه یک شفاخانه باشد‪.‬‬
‫‪ ‬مسأله در بخش تمارت میتواند کمپیوتری (‪ )Computerize‬نمودن‬
‫داد و گرفت امور بانکی‪ ،‬فهرست اموال و کنتررول برازار‬
‫اسعار‪ ،‬محاسبه مالیات و یا محافظت حساب بانکی باشد‪.‬‬
‫پس گفته میتوانیم که حل مسایل با استفاده از کمپیوتر یک‬
‫پروسۀ پرچالش ولی در عین زمان مبتکرانه است؛ به خاطر که‬
‫این پروسه شامل تحلیل و تمزیه‪ ،‬پالن گزاری و گرفتن تصامیم‬
‫منطقی و درست میباشد ‪ .‬قابل ذکر است که برای حرل مسرایل‬

‫‪4‬‬
‫مختلف باید اقداماتی ززم و منطقی راه اندازی گردد تا به‬
‫حل درست و مطلوب مسایل نایل گردیم‪.‬‬

‫برنامه نویسی‬
‫برنامه نویسری در حقیقرت پروسرۀ راه یرابی (الگروریتم و‬
‫فلوچارت) حل یک مسأله میباشد‪ .‬زبان برنامه نویسی برای‬
‫نوشتن ممموعۀ از کودهای کمپیوتر استفاده میشود‪.‬‬
‫زبان برنامه نویسی ممموعۀ دستورالعمل های است که توسط‬
‫راص را اجررا‬
‫آن کمپیوتر رهنمرایی گردیرده ترا عملیرات خر‬
‫نماید‪ .‬این برنامه نویس است که با استفاده از زبان هرای‬
‫مختلف برنامه نویسی کمپیوتر را هدایت نموده ترا عملیرات‬
‫مطلوب را انمام دهد‪.‬‬
‫تاریخچۀ زبان های برنامه نویسی‬
‫در سال ‪ 1960‬یک بسته اززبان های برنامه نویسری بره میران‬
‫آمد که هر یکی آن مروارد اسرتفاده خاصری خرود را داشرت‪.‬‬
‫مردم به فکر این شدند که بره جرای آمروختن چنردین زبران‬
‫برای اهداف متعدد چرا یک زبان را نیاموزند که در تمرام‬
‫بخش ها مورد استفاده باشد‪ .‬به همرین خراطر کمیترۀ برین‬
‫الملل‪ ،‬زبان الگول ‪ )Algol 60( 60‬را ایماد نمرود‪ .‬امرا ایرن‬
‫زبان خشک و بسیار عمومی برود و مرورد پسرند مرردم قررار‬
‫نگرفت و سبب گردید تا زبان جدیدی به نرام زبران ترکیبری‬
‫کمپیوتر (‪ )1CPL‬توسط پوهنتون کامبریج به میان آمد‪ .‬بعردا‬
‫دیده شد که آموختن و تطبیق این زبان بسیار دشروار اسرت‪.‬‬
‫رام زبران ترکیبری ابتردایی‬ ‫متعاقبا‪ ،‬زبران دیگرر بره نر‬
‫کمپیوتر (‪ )2BCPL‬به میان آمد به امید این که مشرکالت فرو‬
‫را نداشته باشد‪ .‬اما دیده شد کره ایرن زبران ضرعیف و در‬
‫عرصه های خاص مورد استفاده قرار می گرفرت‪ .‬در ایرن وقرت‬
‫زبان دیگر تحت نام ‪ B‬به وجود آمد که بررای سیسرتم عامرل‬
‫یونکس (‪ )Unix‬توسط کین تامسن (‪ )Ken Thompson‬در زبراتروار ‪AT‬‬
‫و ‪ T‬بیل نوشته شد‪.‬‬
‫در سال ‪ 1972‬شخصی دیگر به نام دینس ریچی (‪ )Dennis M Ritchie‬برا‬
‫ترکیب نمودن بعضی مشخصرات لسران ‪ B‬و ‪ BCPL‬و مفکروره هرای‬

‫‪1‬‬
‫‪Combine Programming Language‬‬
‫‪2‬‬
‫‪Basic Combined Programming Language‬‬
‫‪5‬‬
‫خودش یک زبان جدید را به نام زبان ‪ C‬به میان آورد‪ C .‬یک‬
‫زبان عمومی برنامه نویسی می باشد‪ .‬این زبان به هدف خاصی‬
‫که بتواند کود های سیستم عامل یونکس را برای برار مکررر‬
‫نوشته کند تهیه شده بود (‪.)Aitken, Jones, 2014‬‬
‫در سال ‪ 1979‬برنامه نویس به نام ‪ Bjarne Stroustrup‬در زبراتروار‬
‫‪ Bell‬ایالت نیوجرسی آیازت متحده امریکا کرار را روی لسران‬
‫‪ C++‬را آغاز نمود‪ .‬لسان ‪ C++‬شکل انکشاف یافته ‪ C‬بروده و‬
‫از جملۀ زبان هرای شری گررا (‪)Object Oriented Programming Language‬‬
‫محسوب میگردد‪ .‬این زبان دارای محیط گرافیکی و دوسرتانه‬
‫بوده و آموختن آن نسبتا آسان میباشد‪.‬‬
‫طوریکه قبال ذکر گردید ‪ C++‬شکل پیشرفتۀ زبان ‪ C‬میباشرد و‬
‫میتواند تقریبا تمامی برنامه های که در ‪ C‬قابل اجرا است‬
‫در این زبان هم اجرا گردد‪ .‬عمرده تررین برترری زبران ‪C++‬‬
‫نسبت به ‪ C‬این است که ‪ C++‬مفاهیم کالس ها (‪ ،)Classes‬وراثرت‬
‫(‪ ،)Inheritance‬توابع (‪)Functions‬را دربر دارد‪ .‬این ویژگیهرای‬
‫انواع دیتا های مممل ( ‪Abstract‬‬ ‫خاص به ما اجازه میدهد که‬
‫‪ )Data Types‬را ایماد و خصوصیات (‪ )Attributes‬کالس ها را بره ار‬
‫برده و مفکوره چندین شکلی (‪ )Polymorphism‬را حمایرت نمراییم‬
‫)‪.(Aitken & Jones, 2014‬‬
‫به صورت عموم‪ ،‬زبان های برنامه نویسی به پنج دسته تقسیم‬
‫گردیده که عبارت اند از‪:‬‬
‫‪ .1‬زبان ماشین‬
‫‪ .2‬زبان های سطح پایین‬
‫‪ .3‬زبان های سطح باز‬
‫‪ .4‬زبانهای نسل چهارم‬
‫‪ .5‬زبان های نسل پنمم‬
‫میگیریم‪:‬‬ ‫حال هر یکی از این دسته زبان ها را به بحث‬
‫زبان ماشین‬
‫عبارت از زبان است که از ‪ 0‬و ‪ 1‬تشکیل گردیده و توسط کمپیوتر قابل‬
‫فهم میباشد‪ .‬به این معنا که ضرورت نیست کود های ‪ 0‬و ‪ 1‬توسط یک‬
‫مترجم ترجمه گردد تا کمپیوتر آنرا بفهمد‪.‬‬
‫زبانهای سطح پایین‬
‫زبان های است که بیشتر مشابهت به زبان ماشین دارد‪ ..‬دستور‬
‫های این زبان ها به شکل سمبول های خاص است که با استفاده از‬
‫‪6‬‬
‫آن میتوانید برنامه های مخلتف را تهیه نماید‪ .‬زبان اسمبلی‬
‫(‪ )Assembly‬مربوط به زبان های سطح پایین میباشد‪ .‬قابل یاد آوری‬
‫است که مترجم اسمبلر (‪ )Assembler‬به خاطر ترجمه عبارتهای زبان‬
‫اسمبلی به زبان ماشین استفاده می گردد‪.‬‬
‫در عبارات زبان های سطح پایین برای پرزه جات کمپیوتر نظر به‬
‫انسان ساده تر است زیرا عبارات این زبان ها بیشتر شباهت به‬
‫زبان ماشین دارد‬

‫زبان های سطح باال‬


‫زبان های است که عبارات آن به زبان های بشر تهیه و ترتیب می‬
‫گردد‪ .‬به همین خاطر‪ ،‬نوشتن برنامه ها در این زبان ها برای‬
‫برنامه نویس آسان میباشد‪ .‬قابل یاد آوری است که کمپیوتر‬
‫عبارتهای این نوع زبان ها را نمیشناسد و ضرورت به ترجمه‬
‫دارد‪ .‬به همین دلیل است که این نوع زبان ها برای ترجمه‬
‫نمودن عبارت های خویش از مترجم کمپایلر (‪ )Compiler‬و یا‬
‫انترپریتر (‪ )Interpreter‬استفاده مینمایند ‪.‬زبان های مانند ‪، java‬‬
‫‪ C++ ، COBOL ،BASIC‬از جمله ی زبان های سطح باز میباشد‪.‬‬
‫زبان های نسل چهارم‬
‫این زبان ها نیز از جملۀ زبان های سطح باز میباشد ولی‬
‫برنامه نویسی در این نوع زبان ها آسانتر است ‪.‬این نوع زبان‬
‫ها بیشتر غرض ایماد دیتابیس ها استفاده میگردد‪ ..‬زبان ‪MYSQL‬‬
‫‪ , FoxPro‬و ‪ Oracle‬از جملۀ زبان های نسل چهارم میباشد‪.‬‬
‫زبان های نسل پنجم‬
‫این نوع زبان ها نیز مربوط به زبان های سطح باز میباشد‪.‬‬
‫تفاوت خاص این نوع زبان ها با زبان های دیگر‪ ،‬در این است که‬
‫برنامه نویسی در این زبان ها آسان است زیرا زبان های نسل‬
‫پنمم از جملۀ زبان های گرافیکی است‪ .‬زبان ‪ Visual BASIC ،Java‬و‬
‫‪ C++‬از جملۀ زبان های شی گرا محسوب میگردد‪.‬‬
‫مترجمان زبان (‪)Language Translators‬‬
‫طوری که همه میدانیم کمپیوتر تنها ‪ 0‬و ‪ 1‬را می شناسد‪ .‬به‬
‫عبارت دیگر‪ ،‬لسان کمپیوتر ‪ 0‬و ‪ 1‬میباشد‪ .‬وقتی که یک کود‬
‫یا بیانیه (‪ )Statement‬به زبان های سطح باز نوشته میگردد‬
‫‪7‬‬
‫کمپیوتر آنرا نمی فهمد و نیاز است که کود متذکره به‬
‫زبان ‪ 0‬و ‪ 1‬تبدیل گردد تا کمپیوتر آنرا بداند و عمل‬
‫مطلوب را انمام دهد‪ .‬به همین خاطر تمام زبان های برنامه‬
‫نویسی دارای مترجمان اند که کودهای سطح باز را به زبان‬
‫ماشین (‪ 0‬و ‪ )1‬تبدیل مینماید‪.‬‬
‫به صورت عموم‪ ،‬سه نوع مترجمان وجود دارد که ذیال به آنها‬
‫میپردازیم‪:‬‬

‫اسمبلر (‪)Assembler‬‬
‫این مترجم کودهای زبان اسمبلی را به زبان ماشین (‪ 0‬و ‪)1‬‬
‫تبدیل مینماید‪ .‬مترجم اسمبلر تنها در زبان اسمبلی مورد‬
‫استفاده قرار میگیرد‪ .‬زبان اسمبلی یکی از زبان های سطح‬
‫پایین بوده و نوشتن برنامه در آن نیز مشکل میباشد‪ .‬به‬
‫همین خاطر از زبان اسمبلی فعال استفاده زیاد صورت نمی‬
‫گیرد‪.‬‬
‫مترجم (‪)Compiler‬‬
‫این مترجم کودهای زبان های سطح باز را به زبان کمپیوتر‬
‫(‪ 0‬و ‪ )1‬تبدیل مینماید‪ .‬لسان سی پلس پلس و یک تعداد زبان‬
‫های دیگر برنامه نویسی از مترجم ‪ Compiler‬استفاده‬
‫مینمایند‪ .‬این مترجم تمام کود های یک برنامه را در اخیر‬
‫بعد از اینکه برنامه نویس روی دکمه ‪ Run‬کلک نماید به ‪ 0‬و‬
‫‪ 1‬تبدیل مینماید‪ .‬اگر در برنامه اشتباه وجود داشته باشد‬
‫طور مثال سیمی کولن (;) در اخیر یک بیانیه نوشته نشده‬
‫باشد و یا کدام دستور به شکل نادرست نوشته شده باشد‪ ،‬در‬
‫آنصورت مترجم ‪ Compiler‬اشتباهات برنامه را دریافت و مشخص‬
‫نموده طی یک پیام روی سکرین نشان میدهد‪ .‬برنامه نویس‬
‫بعد از خواندن پیام‪ ،‬اشتباهات را رفع نموده و برنامه را‬
‫دوباره اجرا (‪ )Run‬مینماید‪ .‬در صورت که تمام اشتباهات‬
‫برنامه رفع شده باشد برنامه اجرا (‪ )Execute‬گردیده و‬
‫نتایج برنامه روی سکرین ظاهر میگردد‪.‬‬
‫تفسیر کننده (‪)Interpreter‬‬
‫این مترجم برنامه را سطر به سطر ترجمه مینماید‪ .‬به این‬
‫معنا که وقتی برنامه نویس یک بیانیه را مکمل نوشته کند‬
‫و دکمۀ ‪ Enter‬روی صفحه کلید را فشار دهد در آنصورت ‪Interpreter‬‬
‫به شکل اتومات سطر متذکره را ترجمه مینماید‪ .‬اگر در‬

‫‪8‬‬
‫بیانیه کدام مشکل وجود داشته باشد تفسیر کننده اتومات‬
‫یک پیام را روی سکرین نشان میدهد و اشتباه موجود در‬
‫همان سطر را نشانی مینماید که باید اصالح گردد در غیر آن‬
‫کرزر به سطر بعدی نمیرود و یا هم سطر متذکره را به رنگ‬
‫سرخ نشان میدهد‪ .‬بعد از رفع اشتباه کرزر به سطر بعدی‬
‫رفته و رنگ نوشته نیز درست (سیاه) میشود‪.‬‬
‫همینطور وقتی برنامه نویس در سطر دوم بیانیه را نوشته‬
‫میکند بعد از فشار دادن کلید ‪ Enter‬در صورت وجود اشتباه‬
‫در سطر جاری تفسیر کننده یک پیام را نشان میدهد و اگر‬
‫کدام اشتباه وجود نداشته باشد در آنصورت کرزر به سطر‬
‫بعدی رفته برنامه نویس میتواند بیانیه بعدی را نوشته‬
‫کند‪.‬‬
‫پس گفته میتوانیم که سرعت مترجم ‪ Compiler‬نسبت به ‪Interpreter‬‬
‫بیشتر است به خاطر ‪ Compiler‬برنامه را در اخیر به یک باره‬
‫گی یکبار اجرا مینماید‪.‬‬

‫خالصه‬
‫در این فصل مسایل مختلف که با اسرتفاده از کمپیروتر حرل‬
‫میشود مورد بحث قرار گرفرت و در نتیمره مفراهیم ذیرل را‬
‫آموختیم‪:‬‬
‫برای اینکه مسایل مختلف را با اسرتفاده از کمپیروتر حرل‬
‫نماییم ‪،‬ززم است که مسأله به شرکل واضرح و روشرن تعریرف‬
‫گردد‪ .‬با استفاده از زبان های برنامره نوی سی مسرهله را‬
‫پروگرام نموده به حل کمپیوتری آن نایل می شود‪.‬‬
‫مبحث دوم که در این فصل توضیح گردید تاریخچۀ زبران هرای‬
‫برنامه نویسی میباشد‪ .‬از سال ‪ 1960‬تا حال زبان های مختلرف‬
‫برنامه نویسی به میان آمده که هر یکی آن دارای خصوصریات‬
‫متفاوت میباشد‪ .‬در حال حاضر‪ ،‬بیشتر تالش میگردد کره غررض‬
‫حل مسائل مختلف از زبان های شی گررا (‪)Object Oriented Languages‬‬
‫استفاده صورت گیرد به خاطر که این نروع زبران هرا دارای‬
‫محیط گرافیکی و دوستانه بوده و کار کردن در آن نیز آسان‬
‫میباشد‪ .‬مبحث نهایی این فصل مترجمان لسران هرای برنامره‬
‫نویسی میباشد که کودهای زبان های سطح براز را بره زبران‬
‫ماشین (‪ 0‬و ‪ )1‬تبدیل مینماید‪ .‬مترجمان انواع مختلف دارند‬
‫که هر یکی آن دارای مشخصات جداگانه میباشد‪.‬‬
‫‪9‬‬
‫پرسش های فصل‬

‫مسهله را تعریف نمایید؟‬ ‫‪.1‬‬


‫برنامه را تعریف نمایید؟‬ ‫‪.2‬‬
‫تاریخچۀ برنامه نویسی را توضیح دهید؟‬ ‫‪.3‬‬
‫نسل های زبان های برنامه نویسی را نام بگیرید؟‬ ‫‪.4‬‬
‫قبل از وجود زبانهای برنامه نویسی‪ ،‬مردم مسایل مختلف‬ ‫‪.5‬‬
‫را چطور حل مینمود؟‬
‫فعالیت گروپی‬
‫بحث‬ ‫را‬ ‫روزمره‬ ‫مسایل‬ ‫حل‬ ‫در‬ ‫نویسی‬
‫اهمیت برنامه‬ ‫‪.6‬‬
‫نمایید؟‬
‫تفاوت بین زبان های سطح پایین و سطح باز را توضیح‬ ‫‪.7‬‬
‫دهید؟‬

‫‪10‬‬
‫فصل دوم‬
‫الگوریتم و فلوچارت‬
‫‪Algorithm and Flowcharts‬‬

‫هدف عمومی‪ :‬با الگوریتم ها و فلوچارت ها آشنا شوند‪.‬‬


‫اهداف آموزشی‪ :‬در پایان این فصل‪ ،‬محصالن قادر خواهند بود تا‪:‬‬
‫‪ .1‬الگوریتم را تعریف نمایند‪.‬‬
‫‪ .2‬الگوریتم یک برنامه را نوشته بتوانند‪.‬‬
‫‪ .3‬فلوچارت ها را بیان نمایند‪.‬‬
‫‪ .4‬فلوچارت ها برای برنامه ها را ترسیم بتوانند‪.‬‬

‫این فصل حاوی مفاهیم الگوریتم‪ ،‬فلوچارت و نقش آن در‬


‫برنامه نویسی میباشد که عناوین پی یکدیگر به تفصیل مورد‬
‫بحث قرار گرفته است‪.‬‬
‫دووسیلۀ که به خاطر دیزاین حل مسایل بیشتر مورد استفاده‬
‫قرار میگیرد عبارت اند از‪:‬‬
‫‪ .1‬الگوریتم‬
‫‪ .2‬فلوچارت‬
‫الگوریتم (‪)Algorithm‬‬
‫کلمۀ الگوریتم از نام ریاضی دان مشهور عربی قرن نهم بره‬
‫نام الخوارزمی گرفته شده است‪ .‬این نام در طی سال هرا از‬
‫الخوارزم (‪ )Alkhowarism‬به الگروریزم (‪ )Algorism‬و براآلخره بره‬
‫الگوریتم (‪ )Algorithm‬تبدیل شده است‪.‬‬
‫الگوریتم ممموعۀ عبرارت هرای سرادا اسرت که بره زبران‬
‫حسابی نوشته میشود (‪.)Klousen, 2017‬‬ ‫انگلیسی و عبارت های‬
‫الگوریتم یک پروسیمر مرحله وار است که بررای حرل مسرایل‬
‫رف اسررتفاده میگررردد)‪ . (Backman, 2012‬برره بیرران دیگررر‪،‬‬ ‫مختلر‬
‫الگوریتم عبارت از حل مرحله وار یک مسرأله اسرت کره بره‬
‫آسانی قابل در می باشرد‪ .‬در حقیقیرت الگروریتم ممموعرۀ‬
‫مراحل معین است که بعد از طی نمودن آن به نتیمره مطلروب‬
‫میرسیم )‪.(Lippman, 2002‬‬

‫‪11‬‬
‫اهگوریتم )‪(Properties of Algorithm‬‬
‫خصوصیات‬
‫هر الگوریتم باید خصوصیات ذیل را داشته باشد‪:‬‬
‫‪ .1‬ساده باشد‪.‬‬
‫‪ .2‬مختص و صریح باشد‪.‬‬
‫‪ .3‬ورودی داشته باشد‪.‬‬
‫‪ .4‬حل یگانه (‪ )Unique‬را برای مسأله پیشکش نماید‪.‬‬
‫ران برسرد‪.‬‬ ‫‪ .5‬بعد از طی نمودن چند مرحلرۀ محردود بره پایر‬
‫(نقطۀ انمام داشته باشد)‪.‬‬
‫‪ .6‬حد اقل یک خروجی داشته باشد‪.‬‬
‫به خاطر اینکه برای یک مسأله الگروریتم را طررح نمراییم‬
‫باید‪:‬‬
‫‪ .1‬مسأله را به شکل درست فهمیده باشیم‪.‬‬
‫‪ .2‬خروجی که به دست می آید معلوم باشد‪.‬‬
‫‪ .3‬ورودی آن مشخص باشد‪.‬‬
‫‪ .4‬پروسۀ که قیمت ها را وارد برنامه میسرازد و در نتیمره‬
‫خروجی تولید میگردد دیزاین شده باشد‪.‬‬
‫‪ .5‬صحت الگوریتم ارزیابی و امتحان شده باشد؛ به این معنا‬
‫که دیتا به طوری امتحانی وارد الگوریتم گردیده باشد و‬
‫نتیمه نیز بررسی شده باشد‪.‬‬
‫‪ .6‬اگر خروجی مورد نظر به دست نیامد در آنصورت الگروریتم‬
‫باید بار دیگر مورد بررسی قرار گیرد‪.‬‬
‫عالمتگذاری اهگوریتم )‪(Algorithm Notations‬‬
‫در اثنای نوشتن الگوریتم عالمت گذاری هرای ذیرل بایرد در‬
‫نظر گرفته شود‪:‬‬
‫‪ .i‬نأام (‪ :)Name‬مسأله را مشخص میسازد‪.‬‬
‫‪ .ii‬شماره مرحل (‪ :)Step Number‬هر هدایت (عبارت) را توسرط یرک‬
‫شمارا خاص مشخص مینماید‪.‬‬
‫‪ .iii‬تبصره (‪ :)Comments‬عبارت ها و عملیات را توضیح می دهد؛‬
‫تبصره هرا در داخرل قوسرهای مربرع شرکل (‪)square brackets‬‬
‫نوشته میشود‪.‬‬
‫‪ .iv‬آغاز‪/‬خاتم (‪ :)Beginning / Termination‬این بیانیه آغاز و خاتمرۀ‬
‫الگوریتم را نشان میدهد‪.‬‬

‫‪12‬‬
‫مثال ‪ :1.2‬الگوریتمی را بنوسید که درجه حرارت را به سانتی گرید بگیرد و آنرا به فارنهایت تبدیل نماید‪.‬‬

‫الگوریتم‪ :‬تبدیل نمودن درجه حرارت از سانتی گرید به فارنهایت‬


‫مرحله ‪ :1‬آغاز‬
‫مرحله ‪ C :2‬را بخوانید‪.‬‬
‫مرحله ‪ F = 9/5 * c+ 32 :3‬را محاسبه کنید‪.‬‬
‫مرحله ‪ F :4‬را نشان دهید‪.‬‬
‫مرحله ‪ :5‬پایان‪.‬‬
‫مثال ‪ :2.2‬الگوریتمی را بنویسید که مفاد را محاسبه کند به شرطی که سرمایه کلی‪ ،‬فیصدی مفاد و مدت‬
‫زمان داده شده باشد‪.‬‬
‫الگوریتم‪ :‬محاسبه مفاد ساده‬
‫مرحله ‪ :1‬آغاز‬
‫مرحله ‪ :2‬قیمت سرمایه کلی‪ ،‬فیصدی مفاد و مدت زمان را وارد کنید‪.‬‬
‫مرحله ‪ :3‬مفاد را محاسبه کنید ‪.‬‬
‫سرمایه کلی ‪ +‬فیصدی مفاد ‪ +‬مدت زمان‬
‫اندازه مفاد =‬
‫‪100‬‬ ‫مرحله ‪ :4‬اندازه مفاد را نشان دهید‪.‬‬
‫مرحله ‪ :5‬پایان‪.‬‬

‫فواید اهگوریتم‬
‫‪ .1‬ردیابی مشکالت آسان است زیرا تمام مراحل به شکل مرحلره‬
‫وار نوشته شده است‪.‬‬
‫‪ .2‬تهیه نمودن الگوریتم آسان است به خاطر کره نیراز بره‬
‫دانستن لسان های برنامه نویسی ندارد‪.‬‬
‫‪ .3‬الگوریتم ما را کمک می کند تا برنامه را درست محافظرت‬
‫کنیم‪.‬‬
‫نواقص اهگوریتم‬
‫‪ .1‬تهیه نمودن الگوریتم برای مسایل مغلق و پیچیده مشکل و‬
‫زمان گیر است‪.‬‬
‫‪ .2‬فهمیرردن مسررایل پیچیررده (‪ )Complex logic‬بررا اسررتفاده از‬
‫الگوریتم دشوار است‪.‬‬
‫فلوچارت )‪(Flowchart‬‬
‫بیان تصویری مرحله وار الگوریتم بره نرام فلوچرارت یراد‬
‫میگردد‪ .‬فلوچارت شرامل شریوا حرل مسرأله (‪،)Solution procedure‬‬
‫محاسبات مرتبط (‪ ،)Relevant computations‬نکات تصمیم گیری ( ‪Points of‬‬

‫‪13‬‬
‫برا‬ ‫‪ )decisions‬و دیگر معلومرات مهرم میباشرد‪ .‬فلوچرارت هرا‬
‫هرر‬ ‫استفاده از اشکال و سمبولهای هندسی تهیه میگرردد‪.‬‬
‫برا‬ ‫شکل هندسی نشان دهندا عملیه خاص میباشد‪ .‬این اشرکال‬
‫حرل‬ ‫استفاده از تیرها (‪ )Arrows‬با همدیگروصرل گردیرده کره‬
‫کامل یک مسأله بزرگ را نشان می دهد (‪. )Halterman, 2018‬‬

‫معنی‬ ‫سمبول‬
‫آغاز ‪ /‬انجام (‪)Start/End‬‬
‫این شکل نشاندهندۀ آغاز و انجام برنامه است‪.‬‬
‫ورودی ‪ /‬خروجی (‪)Input/output‬‬
‫این شکل به خاطر خواندن قیمت های ورودی و‬
‫خروجی استفادهمیگردد‪.‬‬

‫پروسس کننده (‪)Processing‬‬


‫تمام عملیات حسابی و فورمول ها در این شکل درج می‬
‫گردد‪.‬‬
‫تصمیم گیری (‪)Decision‬‬
‫در این شکل مقایسۀ قیمتهاو تصمیم گیری صورت‬
‫میگیرد‬
‫تکرار دستورها (‪)Repetition‬‬
‫این شکل نشاندهندۀ این است که دستورهای داخل آن‬
‫برای چندین بار تکرار میگردد‪.‬‬
‫پروسۀ قبال تعریف شده (‪)pre-defined process‬‬
‫این شکل نماینده گی از محاسبات میکندکه قبال تعریف‬
‫شده باشد‪ .‬مثال گروپ عملیات که در کدام جای دیگر‬
‫مشخص شده باشد‪.‬‬
‫ارتباط دهنده (‪)Connector‬‬
‫این شکل نشاندهندۀ نقطه ورود و یا خروج به بخش‬
‫دیگر از فلوچارت است‪.‬‬
‫تعیین کنندۀ جهت (‪)Director of flow‬‬
‫این اشکال جهت جریان پروسه را نشان میدهد‪.‬‬

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

‫‪14‬‬
‫مثال‪ :4.2‬فلوچارت را رسم کنید که مساحت مثلث را‬ ‫مثال ‪ :3.2‬فلوچارت را رسم کنید که نمرات ‪4‬‬
‫دریافت نماید و دارای اضالع ‪ B ،A‬و ‪ C‬باشد؟‬ ‫مضمون را وارد نموده‪ ،‬مجموعه و اوسط آنرا‬
‫دریافت نماید؟‬

‫آغاز‬ ‫آغاز‬

‫قیمت های وارد شدۀ اضالع‬ ‫نمرات وارد شدۀ چهار مضمون‬
‫‪A, B, C‬‬ ‫‪M1, M2, M3, M4‬‬

‫‪ S‬محیط مثلث‬ ‫‪=A+B+C/2‬‬ ‫‪Sum = M1+ M2 + M3+ M4‬‬

‫)‪Area = √ S (S-A) (S-B)(S-C‬‬ ‫‪Avg = Sum / 4‬‬

‫چا پ کنید‬ ‫چا پ کنید‬


‫‪Area‬‬ ‫‪Sum , Avg‬‬

‫پایان‬ ‫پایان‬

‫فواید فلوچارت (‪)Advantages of Flowchart‬‬


‫را با استفاده از اشکال هندسی‬ ‫‪ ‬حل مسایل مغلق و پیچیده‬
‫ساده ترمیسازد‪.‬‬
‫‪ ‬این شیوه‪ ،‬یکنوع مستند سازی )‪ (Documentation‬برنامه است‪.‬‬
‫‪ ‬با استفاده از فلوچارت برنامه به شکل موثر و آسان کود‬
‫نویسی میگردد‪.‬‬
‫‪ ‬شیوا خوب برای ردیابی و امتحان یک برنامره را فرراهم‬
‫میسازد‪.‬‬
‫‪ ‬زمینه را برای برنامه نویس مسراعد میسرازدتا هرر بخرش‬
‫مورد نظر برنامه را تغییر دهد‪.‬‬
‫محدودیت های فلوچارت )‪(Limitation of Algorithm‬‬
‫‪ ‬این شیوه برای نمایش مسایل بزرگ‪ ،‬مغلق و پیچیده مروثر‬
‫نیست ‪ ،‬زیرا فلوچارت هم چنین مسایل را بره شرکل واضرح‬
‫بیان کردهنمیتواند‪.‬‬

‫‪15‬‬
‫اگر کدام دستور شکل حلقوی (‪ )Loop‬داشته باشرد ‪،‬ززم اسرت‬ ‫‪‬‬
‫تا اشکال هندسی مکرر ترسیم گردد‪.‬‬

‫ها)‪(Rule for writing flowcharts‬‬


‫قواعد ترسیم فلوچارت‬
‫‪ ‬فلوچارت از طرف باز به پایین و یا راسرت بره چرس رسرم‬
‫میگردد‪.‬‬
‫رمبول خرتم‬
‫‪ ‬فلوچارت همیشه با سمبول آغاز شرروع و برا سر‬
‫پایان مییابد‪.‬‬
‫‪ ‬تیرهای جهت دار به خاطر وصرل نمرودن اشرکال هندسری در‬
‫فلوچارت استفاده میگردد‪.‬‬
‫‪ ‬در هر فلوچارت حد اقل یک سمبول که خاتمره فلوچرارت را‬
‫نشان دهد باید وجود داشته باشد‪.‬‬
‫‪ ‬شکل شرطی باید یک جهرت ورودی و دو جهرت خروجری داشرته‬
‫باشد‪.‬‬
‫‪ ‬بیانیه ها و عبارتها باید در داخل اشکال هندسی نوشرته‬
‫شود‪.‬‬
‫انکشاف راه حل کمپیوتری )‪(Development of Computer Solution‬‬
‫‪ .a‬کودنویسی)‪(Coding‬‬
‫الگروریتم و یرا‬ ‫کود نویسی در حقیقت ترجمرۀ عبارتهرای‬
‫فلوچارت به زبان های برنامره نویسری (ماننرد ‪، Pascal ،C++‬‬
‫‪ ) Java ،Fortran‬وغیرهمیباشد‪.‬‬
‫‪ .b‬امتحان و ردیابی)‪(Testing and Debugging‬‬
‫ره دسرت آوریرم نیراز اسرت‬ ‫به خاطر که نتیمه مطلوب را بر‬
‫برنامۀ که به شرکل کرود نوشرته شرده چرک (‪ ،)Test‬ترجمره‬
‫(‪ )Compile‬و اجرا (‪ )Execute‬گرردد‪ .‬در اثنرای ترجمرۀ کرود‬
‫ممکن یک تعداد اشتباهات در برنامه وجود داشته باشد کره‬
‫توسط متررجم (‪ )Compiler‬شناسرایی میگرردد‪ .‬ایرن اشرتباهات‬
‫گرامری در اصطالح برنامه نویسی بره نرام اشرتباه امالیری‬
‫(‪ )Syntax errors‬یادمیگردد‪ .‬به خاطر کره برنامره درسرت کرار‬
‫کند‪ ،‬ززم است تا این اشتباهات شناسایی و حل شود‪.‬‬
‫رن یرک سلسرله اشرتباهات در‬ ‫در اثنای اجررای برنامره ممکر‬
‫برنامه رونما گردد که به نام اشتباهات اثنأای اجأرای برنامأ‬
‫(‪ )Runtime errors‬یادمیگردد‪ .‬طور مثال‪ ،‬اگر یک عدد بازی صرفر‬
‫تقسیم گردد یک پیام مانند‪" :‬هریچ عردد صرحیح برازی صرفر‬
‫‪16‬‬
‫تقسیم نمیگردد " را نشان خواهرد داد‪ .‬اشرتباهاتی کره در‬
‫اثنای اجرای برنامه رونما میگردددر اصطالح برنامه نویسری‬
‫به نام ‪ Bugs‬یاد می شود )‪.(Halterman, 2018‬‬
‫اشتباهات مفهومی (‪)Semantic Errors‬‬
‫عبارت ریاضی ‪ Y = A + B‬را درنظر گیرید‪ ،‬دیرده مری شرود کره‬
‫قیمت ‪ A‬و ‪ B‬باهم جمع شده و در متحول ‪ Y‬ذخیرهمیگرردد‪ .‬اگرر‬
‫نوشرته گرردد‪ ،‬قیمرت ‪ A‬و ‪B‬‬ ‫عبارت فو به اینطرور‪A + B = Y‬‬
‫باهم جمع شده اما در متحول ‪ Y‬کره در سرمت راسرت عالمره‬
‫قرار دارد ذخیره نخواهد شد‪ .‬این نوع اشتباه را بره نرام‬
‫میکند(‪.)Stroustrup, 2013‬‬ ‫اشتباه مفهومی (‪ )Semantic error‬یاد‬
‫ردیابی اشتباهات )‪(Debugging‬‬
‫ایررن پروسرره حرراوی شناسررایی و پررا کرراری اشررتباهات‬
‫(‪)Bugs‬میباشد‪ .‬بعضی اوقات ممکرن برنامره شراهد اشرتباهات‬
‫باشررد کرره برره نررام اشررتباهات منطقرری (‪ )Logical errors‬یرراد‬
‫میشود(‪.)Oualline, 1995‬‬
‫مثال‪:‬‬
‫اگر مسأله یافتن مساحت دایره باشد بره شررط اینکره قیمرت‬
‫شعاع معلوم باشد در آن صورت فورمول مساحت دایرره عبرارت‬
‫است از‪:‬‬
‫قیمت پای * شعاع * شعاع‬ ‫مساحت دایره‬
‫و یا‪:‬‬
‫‪area = 3.14 * r * r‬‬

‫اگر فورمول فو به این شکل ‪ Area = 2 * 3.14 * r‬نوشته شود واضح‬


‫است قیمت خروجی که از این فورمرول بره دسرت میآیردمطابق‬
‫خواست ما نیست یعنی مساحت دایره را درست نمیکشد با وجود‬
‫اینکه برنامه بیدون روبرشردن بره هریچ نروع مشرکل اجررا‬
‫میگردداما نتیمه فورمول درست نیست‪.‬‬
‫در همچو حالت الگوریتم مسأله باید دوباره مرور گرردد و‬
‫اصالحات ززم در آن به میان آید‪ ،‬بعدا در روشنی الگروریتم‬
‫جدید برنامه باید دوباره طرح ریزی شرود‪ .‬در مرحلرۀ بعرد‬
‫ززم است که برنامه اجرا گردد ترا دیرده شرود کره نتیمره‬
‫مطلوب به دست آمده یا خیر؟‪.‬‬

‫‪17‬‬
‫مستند سازی)‪(Documentation‬‬
‫هدف مستند سازی این اسرت کره یرک مآخرذ بررای رهنمرایی‬
‫استفاده کننده (‪ )User manual‬و یا نگهرداری برنامره ( ‪Program‬‬
‫‪ )maintenance‬ترتیب گردد‪ .‬این مستند سازی میتواندبه شکل یک‬
‫فایل جداگانه و یا فایل های هم کار در داخل برنامه وجود‬
‫داشته باشد )‪.(Oualline, 1995‬‬

‫خـالصه فصل‬
‫در این فصل مسایل مختلف که با اسرتفاده از کمپیروتر حرل‬
‫میشود‪،‬مورد بحث قرار گرفرت و در نتیمره مفراهیم ذیرل را‬
‫آموختیم‪:‬‬
‫به خاطر دیزاین حل مسایل مختلرف مری تروانیم از مفراهیم‬
‫الگرروریتم و فلوچررارت اسررتفاده نمرراییم‪ .‬الگرروریتم یررک‬
‫پروسیمر مرحله وار است که برای حل مسایل مختلف اسرتفاده‬
‫میگردد ‪ ،‬در حالیکه فلوچارت بیران تصرویری الگروریتم را‬
‫میگوید‪.‬‬

‫پرسشهای فصل‬

‫الگوریتم را تعریف نمایید؟‬ ‫‪.1‬‬


‫مراحل که به خاطر تهیه الگوریتم ضروری اند کدام ها‬ ‫‪.2‬‬
‫اند؟‬
‫فلوچارت را تعریف نمایید؟‬ ‫‪.3‬‬
‫اشکال هندسی که در فلوچارت استفاده میگرددکدام ها‬ ‫‪.4‬‬
‫اند؟‬
‫سمبول های که در فلوچارت استفاده میگرددکدام ها اند؟‬ ‫‪.5‬‬
‫اشتباه امالیی (‪ ) Syntax errors‬چه مفهوم را ارایه میکند ؟‬ ‫‪.6‬‬
‫غلطی اثنای اجرای برنامه (‪ )Run time errors‬چیست؟‬ ‫‪.7‬‬
‫بقاء برنامه (‪ )Maintenance‬چیست؟‬ ‫‪.8‬‬
‫در فلوچارت چرا از اشکال هندسی استفاده میشود؟‬ ‫‪.9‬‬
‫فعالیت گروپی‬
‫و نواقص الگوریتم چیست‪ ،‬توضیح دهید؟‬ ‫‪ .10‬فواید‬
‫الگوریتم وجود دارد چرا از فلوچارت نیز در حل‬ ‫‪ .11‬وقتی‬
‫مسایل مختلف استفاده میشود؟‬
‫‪18‬‬
‫فصل سوم‬
‫ثابت ها‪ ،‬متحولها و انواع دیتا‬
‫‪Constants, Variables and Data Types‬‬

‫هدف عمومی‪ :‬باساختار ‪ ،C++‬دستورهای کلیدی‪ ،‬ثابتها‪ ،‬متحول ها‬


‫و انواع دیتا در آن آشنا شوند‪.‬‬

‫اهداف آموزشی‪ :‬در پایان این فصل‪ ،‬محصالن قادر خواهند بود تا‪:‬‬
‫‪ .1‬ساختار برنامه ‪ C++‬را بیان نمایند‪.‬‬
‫‪ .2‬عملگر های ورودی و خروجی (‪ C++ )cin / cout‬را شرح دهند‪.‬‬
‫‪ .3‬دستورهای کلیدی (‪ )Keywords‬را شرح دهند‪.‬‬
‫‪ .4‬ثابتهاو انواع آنرا تشریح نمایند‪.‬‬
‫‪ .5‬متحول (‪ )Variable‬را تعریف نمایند‪.‬‬
‫‪ .6‬انواع مختلف دیتا را در برنامه های گوناگون اسرتفاده‬
‫نمایند‪.‬‬
‫در این فصل زبان برنامره نویسری سری پلرس پلرس‪ ،‬سراختار‬
‫برنامه‪ ،‬دستورهای کلیدی‪ ،‬ثابت ها و انرواع آن‪ ،‬متحرول و‬
‫انواع مختلف دیتا مورد بحث قرار گرفته است‪.‬‬
‫زبان برنامه نویسی ‪ C++‬نسبت به زبران هرای دیگرر برنامره‬
‫نویسی‪ ،‬سطح باز یک سلسله برتری های دارد که عبرارت انرد‬
‫از (‪:)Rama, 2011‬‬
‫‪ ‬یک زبان قوی و توانمند است‪.‬‬
‫‪ ‬بیشتر برای نوشتن نرم افزار های سیستم (‪ )System software‬و‬
‫برنامه های تطبیقی (‪ )Application software‬استفاده میگردد‪.‬‬
‫‪ ‬دارای انواع متعردد نوعیرت دیترا (‪ )Data types‬و عملگرهرا‬
‫ران‬
‫رن زبر‬ ‫رارآیی ایر‬ ‫ررعت و کر‬ ‫رث سر‬‫ردکه باعر‬
‫(‪ )Operators‬میباشر‬
‫میگردد‪.‬‬
‫‪ ‬دارای ‪ Platform‬آزاد و قابل انتقال میباشد‪ .‬اکثریت برنامه‬
‫های که در ‪ C++‬نوشته میشوددر تمرام سیسرتم هرای عامرل‬
‫قابل اجرامیباشد‪.‬‬
‫‪ ‬از جملۀ زبان های شی گرا (‪)Object Oriented‬میباشد‪.‬‬

‫‪19‬‬
‫تطبیق زبان سی پلس پلس ( ‪)Application of C++‬‬
‫زبان ‪ C++‬بیشتر برای انکشاف برنامه های سیسرتم و برنامره‬
‫های تطبیقی مانند (‪:)Rama, 2011‬‬
‫‪ ‬مترجمین (‪)Compilers‬‬
‫‪ ‬تفسیر کننده (‪)Interpretors‬‬
‫‪ ‬سیستم های عامل (‪)Operating Systems‬‬
‫‪ ‬سیستم های مدیریت دیتابیس (‪)DBMS‬‬
‫‪ ‬برنامه ورد (‪)MS Word‬‬
‫‪ ‬برنامه اکسیل (‪)MS Excel‬‬
‫‪ ‬برنامه های گرافیک (‪)Graphics packages‬‬
‫‪ ‬برنامه های ساینسی و انمینری استفاده میگردد‬

‫ساختار ابتدایی یک برنامه ‪C++‬‬


‫یک برنامه ‪ C++‬به چندین بخش تقسریم شرده کره ذیرال توضریح‬
‫میگردد)‪:(2011, Rama‬‬

‫‪C++‬‬ ‫شکل ‪ 1.3‬ساختار یک برنامه‬


‫حال هر بخش برنامه‪ ،‬ذیال به تفصیل مورد بحث قرارمیگیرد‪:‬‬

‫‪20‬‬
‫سازی (‪)Documentation Section‬‬
‫‪ .I‬بخش مستند‬
‫این بخش دربرگیرنده ممموعۀ تبصره های مفید است کره غررض‬
‫رهنمود استفاده کننده به کار میرود‪ .‬با وجود اینکره در‬
‫تبصره اجباری نیست امرا اسرتفاده کننرده گران را در در‬
‫مفاهیم و اهداف برنامه ها و سطر های آن کمک میکند‪.‬‬
‫‪ .II‬بخش پیش پرداز و تعریف آن (‪)Preprocessor and Defination Section‬‬
‫این بخش دربرگیرنده فایل های صدری است که با عالمه ‪ #‬آغاز‬
‫گردیده و در اخیر خویش ‪ .h‬را نیز در برر دارد‪ .‬اینهرا را‬
‫به نام رهنمود پیش پردازنده (‪ )Preprocessor directive‬یاد میکند‬
‫که دربرگیرندا فایل صدری در ‪C++‬میباشد‪.‬‬
‫چند نمونه بیانیه ‪ Preprocessor‬عبارت اند از‪:‬‬
‫>‪# include <iostream.h‬‬
‫>‪# include <math.h‬‬
‫راز‬ ‫ره ‪ #‬را در آغر‬ ‫عالمر‬ ‫رمبولیک (‪)Symbolic constants‬‬
‫رای سر‬‫رت هر‬ ‫ثابر‬
‫مثال‪:‬‬ ‫دستور ‪ define‬دارد‪.‬‬
‫‪# define PI 3.14159‬‬
‫‪# define e 2.71826‬‬

‫متحولهای سراسری (‪)Glabal Declaration Section‬‬


‫‪ .III‬معرفی‬
‫در بیشرتر‬ ‫بخش‪ ،‬متحولهای (‪ )Variables‬معرفی میگرددکه‬ ‫در این‬
‫از یک تابع مورد استفاده قرار میگیرد‪ .‬این نوع متحولهرا‬
‫را به نام متحولها سراسری (‪ )Global variables‬یاد میکندکه باید‬
‫تحت فایل های صدری (‪ )Header files‬معرفی گرردد‪ .‬یرک برنامره‬
‫ممکن چندین توابع را داشته باشد‪ .‬فایده معرفری متحولهرا‬
‫سراسری در این است که شرما میتوانیردآنرا در هرر ترابع‬
‫بدون این که دوباره در همان تابع معرفی گردد‪ ،‬اسرتفاده‬
‫کنید‪.‬‬
‫‪ .IV‬تابع ‪)main Function( main‬‬
‫تمام برنامه های ‪ C++‬باید تابع )‪ (main‬را داشته باشد‪ .‬قابرل‬
‫یادآوری است که در هر برنامه فقرط یرک ترابع ) ‪ (main‬بایرد‬
‫وجود داشته باشد‪.‬‬
‫‪ .V‬قوسهای بزرگ (‪)Braces‬‬
‫ترمرام بررنامه هررای ‪ C++‬حراوی تعرداد قروس هرای برزرگ‬
‫میباشد‪ .‬اجرای برنامه از قوس باز تابع )‪ (main‬آغاز و برا‬
‫قوس بسته تابع متذکره ختم میشود‪.‬‬
‫تعریف (‪)Declaration Part‬‬ ‫بخش‬ ‫‪.VI‬‬
‫‪21‬‬
‫در این بخش تمام متحولهرا‪ ،‬توابرع‪ ،‬صرف یرا ‪ Array‬و غیرره‬
‫معرفی میشود‪ .‬همچنان قیمت هرای اولیره (‪ )Initialization‬نیرز در‬
‫همین قسمت معرفی میگردد‪.‬‬
‫‪ .VII‬بخش اجرائیوی (‪)Execution Part‬‬
‫این بخش دربرگیرندا بیانیه های اجرائیوی مانند‪ :‬بیانیره‬
‫های ورودی و خروجی (‪ ،)Input/Output Statements‬بیانیه های حسرابی‬
‫(‪ ،)Arithmetic statements‬بیانیه های شرطی و حلقوی (‪)Control statements‬‬
‫و غیره بیانیه هامیباشد‪ .‬این بخش میتواندکره تبصرره هرا‬
‫(‪ )Comments‬را نیز دربر داشته باشد‪ .‬طوریکه قبال گفته شرد‪،‬‬
‫مترجم از تبصره ها صرف نظر نموده و از جملۀ بیانیه هرای‬
‫اجرائیوی نیز محسوب نمیگردد‪ .‬بخش تعاریف (‪ )Declaration section‬و‬
‫بخش اجرائیوی باید در بین قوس های بزرگ قرار گیررد‪ .‬هرر‬
‫بیانیه اجرائیوی توسط سیمی کولن (;) خرتم میگرردد( ‪Balagtas,‬‬
‫‪.)2006‬‬

‫فرعی (‪)Subroutine Section‬‬


‫‪ .VIII‬بخش توابع‬
‫روابعی‬ ‫رده تر‬ ‫ردا آنعر‬ ‫رت و در برگیرنر‬
‫راری اسر‬ ‫رش اختیر‬
‫رن بخر‬
‫ایر‬
‫میباشدکه توسط برنامه نویس معرفی گردیده (‪)User defined function‬‬
‫و از تابع اصلی )( ‪ main‬اجرامیگردد‪.‬‬

‫‪1.3‬‬ ‫مثال‬

‫‪/* Program to print a message */‬‬


‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫;”‪cout <<” Programming in C++ is fun!! \n‬‬
‫;‪return 0‬‬
‫}‬

‫‪Output‬‬
‫!!‪Programming in C++ is fun‬‬
‫نتیمۀ این برنامه عبارت است از‪:‬‬
‫!!‪Programming in C++ is fun‬‬
‫سررطر اول مثررال فررو مربرروط برره بخررش مسررتند سررازی‬
‫(‪)Documentation‬میشود‪.‬این بخش دربرگیرندا ممموعرۀ از تبصرره‬
‫‪22‬‬
‫های است که بررای معرفری نرام برنامره و توضریح کودهرای‬
‫برنامه استفاده میشود‪ .‬سطر دوم به نام بیانیه پیش پرداز‬
‫(‪ #include<iostream.h> )preprocessor‬یاد میگرددکه رابطه را با کتاب‬
‫خانه سیستم بره وجرود آورده و دسرتور خروجری ‪ cout‬را کمرک‬
‫نموده تا نتیمۀ برنامه را روی سکرین نمایش دهد‪ .‬سطر سوم‬
‫مربوط به تابع اصلی )‪(main‬میباشد‪ .‬تمرام برنامره هرای ‪C++‬‬
‫رد‪ .‬بخرش باقیمانرده تمامرا‬ ‫باید یک تابع اصلی داشته باشر‬
‫مربوط به بخش اجرایی میشودکه در آن بیانیه هرای اجرایری‬
‫قرار دارد‪ .‬بخش معرفی (‪ )declaration section‬و بخش اجرایی (‪section‬‬
‫‪ )executation‬باید در بین قوسرهای جفرت { } قررار گیررد‪ .‬هرر‬
‫بیانیه بخش معرفی و اجرایی با سیمی کولن اختتام مییابرد‪.‬‬
‫یک برنامه از قوس باز { که بعد از تابع اصلی ) ‪ (main‬قررار‬
‫دارد آغاز و با قوس بسته { که در اخیر تابع قررار دارد‬
‫ختم میگردد)‪.(Nawaz, 2006‬‬

‫تبصره در ‪)Comments in C++( C++‬‬


‫در ‪ C++‬دو نوع تبصره (‪ )comments‬وجود دارد‪.‬‬
‫‪ -‬تبصأأره یأأر سأأطری (‪ :)Singleline Comment‬هررر وقتیکرره‬
‫میخواهیددر برنامه خویش تبصره هرای یرک سرطری داشرته‬
‫باشید در آنصورت از ‪ singleline comments‬اسرتفاده میتوانیرد‪.‬‬
‫این نوع تبصره همیشه با دو سلش چپه (\\) آغازمیگردد‪.‬‬
‫مثرررررررررررررررررررررررررررررررررررررررررررررررال‪:‬‬
‫‪\\ This is my first program in C++‬‬

‫تبصره چنأد سأطری (‪ :)Multiline Comments‬زمانکره میخواهیرددر‬


‫برنامه خویش تبصره چند سطری داشته باشرید در آنصرورت‬
‫از ‪ multiline comments‬اسرتفاده نمروده میتوانیرد‪ .‬ایرن نروع‬
‫تبصره همیشه با استفاده از یک سلش و ستاره ( *‪ ) /‬آغاز‬
‫و به عالمرۀ سرتاره و سرلش ( ‪ )*/‬در اخیرر تبصرره بسرته‬
‫میگردد‪.‬‬
‫‪/* This is‬‬ ‫طور مثال‪:‬‬
‫‪my first‬‬
‫‪program in C++ */‬‬
‫تبصره قابل اجرا نیست (‪non-‬‬ ‫ززم به تذکراست که عبارتها‬
‫‪ )executable‬و توسط کمپرایلر صررف نظرر (‪ )Ignore‬میشرود‪ .‬یرک‬
‫برنامه نویس میتواندکه چندین تبصره را در برنامره خرویش‬
‫‪23‬‬
‫داشته باشد‪ .‬هدف تبصره این است که مفهوم عبرارات و کرود‬
‫های مختلف را برای دیگران واضح و روشن سازد‪ .‬کوشرش شرود‬
‫که تبصره ها مختصر و واضح باشد‪.‬‬

‫خروجی (‪)Output Operator - cout‬‬


‫عملگر‬
‫بیانیۀ ذیل را در نظر گیرید‪:‬‬
‫“ ‪cout << “ Programming in C++ is fun‬‬
‫در اینما عملگر ‪ cout‬برای اینکه قیمرت خروجری را بره بخرش‬
‫نمایش (مانند صفحه نمایش) ارسرال نمایرد‪ ،‬اسرتفاده شرده‬
‫است؛ ‪ cout‬مخفف ‪console output‬میباشد‪.‬‬
‫‪ cout‬به شکل (سی اوت (‪ ))C - Out‬تلفر مری گرردد و یکری از‬
‫عملگر های از قبل معرفی شده (‪ )pre - defined‬است که بره خراطر‬
‫نمایش نتایج استفاده میگردد(‪.)Nawaz, 2006‬‬
‫به صورت عموم‪ ،‬قیمت که غرض نمایش به ‪ cout‬ارسال میگرددبره‬
‫شکل سلسلۀ حروف تبدیل میشود‪.‬‬
‫عملگر >> به نام ‪ insertion‬یا ‪ put to‬یاد میشود که محتویات سمت‬
‫راست خود را به ‪ object‬سمت چس خویش ارسالمینماید‪ .‬شکل ذیرل‬
‫را مالحظه کنید‪:‬‬

‫‪cout‬‬ ‫شکل ‪ 2.3‬نمایش خروجی با استفاده از‬

‫مثال ‪ :2.3‬برنامۀ ذیل قیمت حروفی را با استفاده از ‪ cout‬روی سکرین نشان میدهد‪.‬‬

‫>‪#include <iostream.h‬‬
‫‪#include <string> // used for string data type‬‬
‫‪24‬‬
‫) ( ‪main‬‬
‫{‬
‫‪// Declaration‬‬
‫;" ‪string First_Name = "Habibullah‬‬
‫;" ‪string Last_Name = "Barakzai‬‬
‫;‪cout << "The Complete Name is : " << First_Name << Last_Name‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪The Complete Name is : Habibullah Barakzai‬‬

‫عملگر دخولی ( ‪) Input Operator – cin‬‬


‫بیانیۀ ذیل را در نظر گیرید‪:‬‬
‫‪cin >> marks‬‬ ‫;‬
‫رق‬‫را از طریر‬‫رودن دیتر‬‫رت وارد نمر‬ ‫ران ‪ C++‬جهر‬‫رر ‪ cin‬در لسر‬
‫عملگر‬
‫کیبورد استفاده میشود‪ Cin .‬مخفف ‪Console input‬میباشد‪ .‬عملگر ‪cin‬‬
‫سبب میشود که برنامۀ فو منتظر بماند تا استفاده کننرده‬
‫قیمت ‪ marks‬را از کیبورد وارد نماید‪ .‬قیمت وارد شده بعردا‬
‫در متحول به نام ‪ marks‬ذخیره میشود‪ cin .‬به شکل (سی إن ( ‪C -‬‬
‫میشود و یکی از عملگر های از قبل معرفی شده ( ‪pre‬‬ ‫‪ ))in‬تلف‬
‫رد‬‫رفحه کلیر‬‫را از صر‬
‫راطر ورود دیتر‬ ‫ره خر‬‫ردکه بر‬
‫ریباشر‬
‫‪ )- defined‬مر‬
‫(‪ )Keyboard‬استفاده میشود (‪.)Rama, 2012‬‬
‫عملگر >> به نام ‪ Extraction‬یا ‪ get from‬یاد میشود کره دیترا را‬
‫از کیبررورد میگیررردو آنرررا در متحررول سررمت راسررت خررود‬
‫ذخیرهمینماید‪ .‬شکل ذیل را مالحظه نمایید‪:‬‬

‫‪cin‬‬ ‫ورودی با استفاده از‬ ‫‪3.3‬‬ ‫شکل‬

‫‪25‬‬
‫مثال ‪ :3.3‬برنامۀذیل نام ‪ ،‬تخلص و عمر یک شخص را از صفحه کلید گرفته روی سکرین نشان میدهد‪.‬‬

‫>‪#include <iostream.h‬‬
‫‪#include <string> // used for string data type‬‬
‫) ( ‪main‬‬
‫{‬
‫‪// Declaration‬‬
‫;‪string FName‬‬
‫;‪string LName‬‬
‫;‪int Age‬‬
‫;" ‪cout <<" Enter your first and second name and your age please :‬‬
‫;‪cin >> FName >> LName >> Age‬‬
‫;"‪cout << "Your full name is :" << FName << " " << LName << "\n‬‬
‫;"‪cout << "You are " << Age << " years old‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter your first and second name and your age please : Asma Gul 8‬‬
‫‪Your full name is : Asma Gul‬‬
‫‪You are 8 years old‬‬

‫خروجی ( ‪)CASCADING OF I / O OPERATORS‬‬ ‫تکرار عملگرهای ورودی و‬


‫هرگاه عملگر>> و << چندین بار در یک بیانیه استفاده شود‬
‫این حالت به نام تکرارعملگر ها یاد میشود‪ .‬عملگر خروجری‬
‫>> می تواند به طور ذیل تکرار گردد (‪:)Halterman, 2018‬‬
‫; “ ‪cout << “ Simple Interest = “ << SI << “ \ n‬‬
‫میتواندچنین تکرار گردد‪:‬‬ ‫>>‬ ‫به طور مشابه‪ ،‬عملگر ورودی‬
‫; ‪cin >> Prin >> Rate >> Year‬‬
‫در دستور ورودی ‪ cin‬قیمت از سمت چس به راست بره متحرولهرا‬
‫توظیفمیگردد‪ .‬طور مثال‪ ،‬قیمت اول در متحول ‪ ،Prin‬قیمت دوم‬
‫در متحول ‪ Rate‬و قیمت سوم در متحول ‪ Year‬ذخیره مری گرردد‪.‬‬
‫بهتر است که بین عملگر >> و متحولها که در مقابرل آن در‬
‫میشود‬
‫به اندازه یک سپیس فاصله اضافه گردد ترا نتیمره را بره‬
‫طور واضح روی سکرین نشان دهد‪.‬‬

‫مثال ‪ :4.3‬برنامۀ ذیل مساحت مثلث قایم الزاویه را محاسبه مینماید‪.‬‬


‫‪// Program finds area of triangle‬‬
‫‪26‬‬
#include <iostream.h>
main ( )
{
double Base, Hight, Area;
cout << " Enter value for Base and Hight of a triangle: " ;
cin >>Base >> Hight;
Area = Base * Hight / 2;
cout << " The area of Triangle = " << Area;
{
Output
Enter value for Base and Hight of a triangle : 10 5
The area of Triangle = 25

)C++ Character Set( ‫مجموعۀ حروف‬


،‫ الفبرا‬:‫ ممموعرۀ سرمبول هرا ماننرد‬،‫ممموعۀ حروف حاوی‬
‫) میباشردکه بره خراطر‬Special symbols( ‫ارقام و سمبول های خاص‬
. (Rama, 2011) ‫ارایه معلومات استفاده میگردد‬
‫) و‬Z ‫ تا‬A( ‫حاوی حروف بزرگ‬ )Alphabets( ‫حروف الفبا‬
)z ‫ تا‬a( ‫حروف کوچک‬
)9 ‫ تا‬0( ‫حاوی ارقام‬ )Digits( ‫ارقام‬
tilde ~ ‫سمبولهایخاص‬
back quote ` Special (
exclation ! )symbols
hash #
percentage %
caret ^
ampersand &
double quote “
single quote (apostrophe) ‘
left parantheses (
right parantheses )
left braces {
right braces }
left bracket [
right bracket ]
plus sign +
minus sign - -
asterisk * -
slash / -
underscore _ -
equal sign = -
backslash \ -
27
‫; ‪semi colon‬‬ ‫‪-‬‬
‫‪colon :‬‬ ‫‪-‬‬
‫‪comma ,‬‬ ‫‪-‬‬
‫‪dot .‬‬ ‫‪-‬‬
‫< ‪less than‬‬ ‫‪-‬‬
‫> ‪greater than‬‬ ‫‪-‬‬
‫? ‪question mark‬‬ ‫‪-‬‬
‫| ‪vertical bar‬‬ ‫‪-‬‬
‫شامل خالیگاها (‪)\t, \v( ،tab ،)spaces‬‬ ‫فاصله های خالی‬
‫خط جدید (‪ \n‬و ‪)form feed‬‬ ‫(‪)White spaces‬‬
‫‪C++‬‬ ‫جدول ‪ 1.3‬مجموعۀ کرکتر های‬
‫اجزای ‪)C++ Token( C++‬‬
‫یک برنامۀ ‪ C++‬ممموعۀ عناصر است که بره نرام نشرانه هرا‬
‫(‪ )Token‬یادمیگردد‪ .‬نشانه در حقیقرت کروچکترین عنصرر یرک‬
‫برنامه است‪ .‬در ‪ C++‬انواع مختلف نشانه ها وجرود دارد کره‬
‫در جدول ذیل لست شده است‪ .‬یک نشانه از یک یا چند حرف ‪C++‬‬
‫ترتیب شده است‪.‬‬

‫موارد استفاده‬ ‫نشانه ها‬

‫شامل ‪ for ،int ،do‬و غیره میشود‬ ‫دستور های کلیدی (‪)Keywords‬‬
‫شامل نام های متحولها مانند ‪... number ،area ،sum‬‬ ‫شناسه (‪)identifiers‬‬
‫میشود‬ ‫ثابت ها (‪)Constants‬‬
‫شامل اعداد مانند ‪ -200 ،25.5 ،250‬و غیره میشود‬ ‫حروف (‪)String‬‬
‫شامل سلسله حروف مانند "‪ ”3+2" ،"College‬و غیره می‬ ‫عملگر ها (‪)Operators‬‬
‫شود‬ ‫سمبولهای خاص ( ‪Special‬‬
‫شامل عالمات مانند ‪ ++ ،/ ،* ،- ،+‬و غیره می شود‬ ‫‪)Symbols‬‬
‫شامل سمبولها مانند !‪ } ،{ ،[ ،] ،# ،‬و غیره می شود‬
‫نشانه ها‬ ‫‪2.3‬‬ ‫جدول‬

‫دستورهای کلیدی (‪)Keywords‬‬


‫دستورهای کلیدی عبارت از کلماتی است که برای اهداف خراص‬
‫استفاده میگردد‪ .‬کلمات ریزرف شده در ‪ C++‬وجرود دارد کره‬
‫از قبل معانی معیاری و مشخص دارند و آنرا میتوانیم تنهرا‬
‫برای اهداف مشخص استفاده نماییم‪ .‬تمام دسرتورهای کلیردی‬
‫باید بره حرروف کوچرک نوشرته گرردد‪ .‬ایرن دسرتور هرا را‬

‫‪28‬‬
‫‪)variable‬‬ ‫(‪names‬‬ ‫را‬
‫رولهر‬
‫رای متحر‬
‫رام هر‬‫رث نر‬
‫ره حیر‬ ‫بر‬ ‫روانیم‬
‫نمیتر‬
‫استفاده کرد )‪.(Buard, 2005‬‬
‫دستوری های کلیدی معیاری ‪ C++‬قرار ذیل است‪:‬‬
‫‪Asm‬‬ ‫‪Double‬‬ ‫‪Not‬‬ ‫‪Switch‬‬
‫‪Auto‬‬ ‫‪else‬‬ ‫‪operator‬‬ ‫‪Termplate‬‬
‫‪break‬‬ ‫‪enum‬‬ ‫‪private‬‬ ‫‪this‬‬
‫‪case‬‬ ‫‪extern‬‬ ‫‪protected‬‬ ‫‪throw‬‬
‫‪catch‬‬ ‫‪float‬‬ ‫‪public‬‬ ‫‪try‬‬
‫‪char‬‬ ‫‪for‬‬ ‫‪register‬‬ ‫‪typedef‬‬
‫‪class‬‬ ‫‪friend‬‬ ‫‪return‬‬ ‫‪union‬‬
‫‪const‬‬ ‫‪goto‬‬ ‫‪short‬‬ ‫‪unsigned‬‬
‫‪continue‬‬ ‫‪if‬‬ ‫‪signed‬‬ ‫‪virtual‬‬
‫‪default‬‬ ‫‪inline‬‬ ‫‪sizeof‬‬ ‫‪void‬‬
‫‪delete‬‬ ‫‪int‬‬ ‫‪static‬‬ ‫‪volatile‬‬
‫‪do‬‬ ‫‪long‬‬ ‫‪struct‬‬ ‫‪while‬‬
‫شناسه ها (‪)Identifiers‬‬
‫شناسه به نام های اطرال مری شرود کره بررای متحرولهرا‬ ‫‪‬‬
‫(‪ ،)variables‬توابع (‪ )functions‬و صف (‪ )array‬در برنامه استفاده‬
‫میشود ‪.‬‬
‫شناسه ‪ :‬سلسله یا ممموعۀ کرکتر های است که از حرروف‬ ‫‪‬‬
‫( ‪ ،)z – a( ،)Z – A‬ارقررام (‪ )9 – 0‬و انرردرسررکرررور( _ )‬
‫تشکیل گردیده باشد‪.‬‬
‫‪ C++‬یک لسران ‪ Case sensitive‬اسرت کره در آن ‪ alfa ،Alfa ،ALFA‬از‬ ‫‪‬‬
‫همدیگرمتفاوت اند‪.‬‬
‫سمبول اندرسکور(_) به طورکل در وسط نام ‪ Identifier‬استفاده‬ ‫‪‬‬
‫میگردد‪ .‬مثال‪F_Name :‬‬
‫طول نام شناسه یا ‪ idenftier‬به صورت متوسط میتواند برین ‪8‬‬ ‫‪‬‬
‫الی ‪ 10‬کرکتر باشد‪ .‬در قسمت طرول نرام ‪ identifier‬محردودیتی‬
‫وجود ندارد و میتواند طوزنی تر باشد‪.‬‬
‫نررام ‪ Idnetifiers‬برره حرررف آغرراز میگررردد و برره تعقیررب آن‬ ‫‪‬‬
‫میتواندحروف‪ ،‬ارقام و یا ترکیب هردو وجود داشته باشد‪.‬‬
‫نام ‪ Identifiers‬نمیتواند به عدد آغاز گردد‪.‬‬
‫‪ C++‬یررک لسررت دسررتورهای کلیرردی مشررخص دارد کرره آنرررا‬ ‫‪‬‬
‫نمیتوانیددر جای دیگرر بررای مقاصرد متفراوت اسرتفاده‬
‫کنید‪ .‬به طوری مثال‪ ،‬شما نمیتوانید ‪ int‬را به حیرث نرام‬
‫متحول استفاده کرد‪.‬‬
‫‪29‬‬
‫مثال ‪5.3‬‬
‫شناسه های مجاز عبارت اند از‪:‬‬
‫‪Sum, avg _ marks, x1, y2, PINCODE, Total‬‬
‫شناسه های غیر مجاز عبارت اند از‪:‬‬
‫‪10th , S.I, total amount, Std – no‬‬

‫ثابتها (‪)Constants‬‬
‫هر قیمت که در اثنای اجرای برنامه قابل تغییر نباشد بره‬
‫نررام ثابررت یررادمیگردد‪ .‬لسرران ‪ C++‬دارای چنرردین نرروع‬
‫ثابتهامیباشد‪.‬‬

‫ثابتها (‪)Types of Constants‬‬


‫انواع‬
‫به صورت عموم ثابتهای‪ C++‬به دو نوع تقسیم گردیده است کره‬
‫عبارت اند از‪:‬‬
‫‪ .1‬ثابتهای ابتدایی‬
‫‪ .2‬ثابتهای دومی‬
‫این ثابتهابه انواعی دیگر نیز تقسیم گردیده است که ذیرال‬
‫بیان میشود‪:‬‬

‫شکل ‪ 4.3‬انواع ثابتها‬


‫تام (‪)Integer Constants‬‬
‫ثابتهای‬
‫رددی (‪)Numarical Constant‬‬
‫رای عر‬
‫ره ثابتهر‬
‫روط بر‬ ‫رام مربر‬ ‫رای تر‬‫ثابتهر‬
‫میباشدکه از اعداد ثابت تام تشکیل گردیده است‪ .‬در کل سه‬
‫نوع ثابتهای تام وجود دارد که عبارت اند از‪:‬‬
‫‪ ‬قاعده ‪)Decimal system( 10‬‬
‫‪ ‬قاعده ‪)Octal system) 8‬‬

‫‪30‬‬
‫(‪)Hexa Decimal system‬‬ ‫‪16‬‬ ‫قاعده‬ ‫‪‬‬
‫‪16‬‬ ‫تام به قاعده‬ ‫‪8‬‬ ‫تام به قاعده‬ ‫‪10‬‬ ‫تام به قاعده‬
‫حاوی ارقام (‪ 0‬الی ‪ ) 9‬و حروف‬
‫(‪ A‬الی ‪ )F‬میباشدکه حروف‬
‫حاوی ارقام (‪ 0‬الی ‪) 7‬‬ ‫حاوی ارقام (‪ 0‬الی ‪) 9‬‬
‫اعداد ‪ 10‬الی ‪ 15‬را نمایش‬
‫میدهد‪.‬‬
‫با ‪ ox‬و یا ‪ OX‬آغاز گردد‬ ‫اولین رقم باید ‪ 0‬باشد‬ ‫حاوی حد اقل یک رقم باشد‬
‫عالمۀ اعشاری نداشته باشد‬ ‫عالمۀاعشاری نداشته باشد‬ ‫عالمۀ اعشاری نداشته باشد‬
‫میتواند حاوی اعداد مثبت و یا‬ ‫میتواند حاوی اعداد مثبت و یا میتواند حاوی اعداد مثبت و‬
‫منفی باشد‬ ‫یا منفی باشد‬ ‫منفی باشد‬
‫کامه و یا خالیگاه در بین ارقام‬ ‫کامه و یا خالیگاه باید بین ارقام کامه و یا خالیگاه باید بین‬
‫وجود داشته نباشد‪.‬‬ ‫ارقام وجود نداشته باشد‪.‬‬ ‫وجود نداشته باشد‬
‫مثال‪:‬‬ ‫مثال‪:‬‬
‫مثال‪:‬‬
‫‪ oxA1 ،oxa38 ،Ox1‬اعداد مجاز‬ ‫‪ 025 ،044+ ،051‬اعداد مجاز‬
‫‪ 5050 ،17+ ،426‬اعداد مجاز‬
‫است‬ ‫است‬
‫است‬
‫‪ OxEGG ،OABC ،ox2.5‬اعداد‬ ‫‪ 068،03.45 ،540‬اعداد مجاز‬
‫‪ 12.45 ،10.0‬اعداد مجاز نیست‬
‫مجاز نیست‬ ‫نیست‬
‫جدول ‪ 3.3‬خصوصیات ثابتهای تام‬

‫اعشاری (‪)Real Constants‬‬


‫ثابتهای‬
‫مقرردار عررددی کرره بخررش اعشرراری داشررته باشررد برره نررام‬
‫ثابتهایاعشاری یاد میگرددکه خصوصیات ذیل را دارد‪:‬‬
‫‪ ‬ثابت اعشاری حد اقل باید یک رقم داشته باشد‪.‬‬
‫‪ ‬دارای عالمه ی اعشاری باشد‪.‬‬
‫‪ ‬می تواند عدد مثبت و یا منفی باشد‪.‬‬
‫‪ ‬در بین عدد کامه و فاصله مماز نیست‪.‬‬
‫مثال ‪6.3‬‬
‫‪ +325.66, 45.0, -38.2, 124.6789‬از جمله ثابتهای مجاز اعشاری است در حالیکه‬
‫‪ 11, 530, -5E 10‬از جمله ثابتهای غیر مجاز اعشاری میباشد‪.‬‬

‫اگر عدد اعشاری بسیار بزرگ و یا کوچک باشد در آنصورت از‬


‫نمرادار (‪)exponential‬‬ ‫شیوا علمی (‪ )Scientific‬که به نرام شریوا‬
‫یاد میگردد‪ ،‬استفاده میشود‪ .‬در اینصورت عدد اعشراری در‬
‫دو بخش نمایش داده میشود‪.‬‬
‫قیمت که قبل از ‪ e‬قرار دارد به نام مرانتس )‪ (mantissa‬و بخرش‬
‫که بعد از ‪ e‬قرار دارد به نام نما یا توان (‪ )Exponent‬یراد‬
‫میشود‪ .‬طور مثال‪ ،‬عدد اعشراری ‪ 516.55‬را در نظرر گیریرد‪.‬‬
‫‪31‬‬
‫این عدد را میتوانیم به شکل ‪ 5.1655E2‬بره شریوا علمری یرا‬
‫‪ Scientific‬نوشت‪ .‬در ‪ E 2‬قیمت ‪ E‬مساوی به ‪ 10‬بروده و ‪ 2‬نمرا یرا‬
‫توان قاعدا ‪ E‬میباشد‪.‬‬
‫قواعد که جهت نمایش عدد اعشاری به شیوا علمری بایرد در‬
‫نظر گرفته شود عبارت اند از‪:‬‬
‫‪ ‬بخش مانتیس و بخش توان باید توسط حرف ‪ e‬از همدیگر جدا‬
‫شود‪.‬‬
‫‪ ‬بخش مانتیس میتواند مثبت و یا منفی باشد‪.‬‬
‫‪ ‬بخش توان باید حد اقل یک رقم باشد که ممکن یک عدد تام‬
‫مثبت و یا منفی باشد‪.‬‬
‫علمی برین ‪ 3.4 e38‬و ‪-‬‬ ‫‪ ‬ساحۀ قیمت اعداد اعشاری به شیوا‬
‫‪ 3.4 e38‬میباشد‪.‬‬
‫مثال ‪7.3‬‬
‫‪ +3.2e – 5, 4.5e8,- 0.5e + 3,- 2.4E - 5‬از جمله ثابت های نمادار(‪ )Exponentials constant‬مجاز در‬
‫حالیکه ‪ - 3E06, 4 .2e – 5.5‬ثابت های نمادار غیر مجاز می باشد‪.‬‬

‫ثابت های حرفی‬


‫(‪)Character Constants‬‬
‫‪ ‬ثابت حرفی عبارت از یک حرف اسرت کره برین قروس ناخنرک‬
‫یگانه (‪ )single quote‬قرار دارد‪.‬‬
‫‪ ‬یک ثابت حرفی نمیتواند بیشتر از یرک حررف یرا کرکترر‬
‫باشد‪.‬‬
‫‪ ‬عملیات حسابی را میتوان بازی ثابتهای حرفی انمام داد‬
‫به خاطر که تمام قیمت هرای آن بره شریوا عرددی ذخیرره‬
‫میشود‪.‬‬
‫‪ ‬لسرران ‪ C++‬کرکتررر هررای ‪ escape sequence‬ماننررد ‪ \b ،\n ،\t‬را‬
‫میشناسد‪.‬‬
‫مثال ‪8.3‬‬
‫’=‘ ‪ ‘\o’ , ‘a’ , ‘|’ ,‬از جمله ثابتهای مجاز حرفی میباشد در حالیکه‬
‫’‪ ‘xy’ , ‘a4’ , ‘26‬از جمله ثابتهای غیر مجاز حرفی میباشد‪.‬‬

‫توجه داشته باشید که ثابت حرفی ‘‪ ’2‬با عدد ‪ 2‬یکسان نیسرت‪.‬‬


‫هر حرف یا کرکتر یک کود ثابت کره بره نرام ‪ 3 ASCII code‬یراد‬
‫میشود‪ ،‬دارد‪.‬‬

‫‪3‬‬
‫‪American Standard Code for Information Interchage‬‬
‫‪32‬‬
‫ثابتهای حرفی و کودهای اسکی آنرا میدهد‬ ‫جدول ذیل تعداد‬
‫‪.‬‬
‫کود اسکی‬ ‫ثابت ها‬
‫‪65‬‬ ‫‘‪‘A‬‬
‫‪66‬‬ ‫‪‘B,‬‬
‫‪90‬‬ ‫‘‪‘Z‬‬
‫‪97‬‬ ‫‘‪‘a‬‬
‫‪122‬‬ ‫‘‪‘z‬‬
‫‪49‬‬ ‫‘‪‘1‬‬
‫‪50‬‬ ‫‘‪‘2‬‬
‫‪35‬‬ ‫‘‪‘#‬‬
‫حروفی (‪)String Constants‬‬
‫ثابتهای‬
‫ثابت های حروفی عبارت از ممموعۀ حروف های است که تعداد‬
‫آن بیشتر از یک حرف باشد و در داخل قروس ناخنرک دوگانره‬
‫میکردد‪ .‬این حروف یا کرکترها که داخرل‬ ‫(‪ )double quotes‬در‬
‫قوس های ناخنک دوگانه قرار دارد شاید حروف‪ ،‬اعداد و یرا‬
‫سمبولهای خاص و یا خالی باشد‪.‬‬
‫مثال ‪9.3‬‬
‫از جمله ثابت های مجاز حروفی می باشد‬ ‫“ “ ‪“Read” , “Phone : 334 – 5670”, “AFN 20.25”, “” ,‬‬
‫در حالیکه‬
‫’‪ “Line1 \n \ Line2 \n Line3’, “The Error‬از جمله ثابت های غیر مجاز حروفی است‪.‬‬
‫نوت‪ " " :‬به نام ثابت حروفی خالی (‪ )null string‬یادمیشود‪.‬‬
‫متوجه باشید که ’‪ ‘A‬با ”‪ “A‬یکسان نیسرت‪ .‬حرروف ثابتکره در‬
‫داخل دو قوس ناخنک (”‪ )“A‬وجود دارد در حقیقیت قیمرت ترام‬
‫عددی (‪ )ASCII code‬ندارد‪.‬‬
‫ثابتهای سمبولیک یا ماکرو )‪(Symbolic Constants‬‬
‫‪ #define‬از جملۀ رهنمودهای ‪ pre-processor‬اسرت کره غررض معرفری‬
‫ثابتهااستفاده میشود(‪.)Soulié ,2007‬‬
‫‪#define‬‬ ‫‪name‬‬ ‫‪replacement–string‬‬

‫در اینما (‪ )name‬متحول است که میتواندقیمت ثابت عددی یرا‬


‫حروفی را در خود ذخیره کنرد‪ .‬هرر وقتیکره برنامره اجررا‬
‫میشوددر هرجای که نام متحول (‪ )name‬وجود داشته باشد قیمت‬
‫که در آغاز برنامه به این متحول در نظر گرفته شده با آن‬
‫تعرروی میشررود قابررل یررادآوری اسررت کرره ایررن متحررول‬
‫ره در آغراز برنامره بررایش‬ ‫نمیتواندقیمتی متفاوت از آنکر‬
‫تعریف گردیده در خود ذخیره کند‪ .‬در اصل ‪ #define‬متحرول ‪name‬‬

‫‪33‬‬
‫را مقید میسازدتا قیمت که در آغاز برنامه توسط(‪ )user‬برای‬
‫آن تعریف گردیده در خود ذخیره نموده و هیچ قیمت متفراوت‬
‫نگیرد‪.‬‬
‫چند مثال ثابتهای سمبولیک‪:‬‬
‫‪#define‬‬ ‫‪Max_Marks 100‬‬
‫‪#define‬‬ ‫‪PI‬‬ ‫‪3.14159‬‬
‫‪#define‬‬ ‫‪University‬‬ ‫”‪“Kabul Education University‬‬

‫مثال ‪ :10.3‬برنامۀ ذیل شعاع یک دایره را دریافت مینمایددرصورتیکه قیمت مساحت موجود باشد‪.‬‬
‫‪// Program to find redius of a circle given area‬‬
‫>‪#include <iostream.h‬‬
‫‪# define PI 3.14159‬‬
‫) ( ‪main‬‬
‫{‬
‫; ‪float r, area‬‬
‫; ” ‪cout << “\n “ << “ Enter the area of circle :‬‬
‫; ‪cin >> area‬‬
‫; ) ‪r = sqrt ( area / PI‬‬
‫; ‪cout << “\n“ << “The radius of the given circle is : “ << r‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter the area of the circle : 12 . 57‬‬
‫‪The radius of the given circle is : 2. 0029‬‬

‫‪Enter the area of the circle : 19 . 3‬‬


‫‪The radius of the given circle is : 2.47‬‬

‫قواعد ک در اثنای معرفی ثابتهای سمبوهیر باید در نظر‬


‫گرفت شود‪:‬‬
‫‪ ‬ثابتهای سمبولیک معمروز در قسرمت آغراز برنامره تعریرف‬
‫میشوداما استفاده کننده میتوانددر هرر قسرمت برنامره‬
‫قبل از استفاده آنرا معرفی نماید‪.‬‬
‫‪ #define ‬با سیمی کولن ختم نمیگرردد‪ .‬اگرر سریمی کرولن در‬
‫اخیر این بیانیه اضافه گردد مترجم آنرا به حیث کرکترر‬
‫ثابت محسوب خواهد نمود‪.‬‬
‫‪ ‬گذاشتن سیمی کولن بین ‪ #‬و ‪ define‬مماز نیست‪.‬‬

‫‪34‬‬
‫بین ‪ #define‬و نام سمبولیک بهتر است به اندازه یک الی دو‬ ‫‪‬‬
‫سپیس فاصله در نظر گرفته شود‪ .‬به عین شکل بهتر است که‬
‫بین نام سمبولیک و قیمت آن فاصله مدنظر گرفته شود‪.‬‬
‫تعریف نام سمبولیک عین قواعد که برای معرفری نرام یرک‬ ‫‪‬‬
‫متحول در نظر گرفته میشودمراعت مینمایرد‪ .‬معمروز‪ ،‬نرام‬
‫سمبولیک به حرروف برزرگ نوشرته میشرودتا از نرام هرای‬
‫متحولهای عادی تفکیک گردد‪.‬‬
‫شما نمیتوانیدقیمت متفاوت از آنچه در ابتدای برنامره‬ ‫‪‬‬
‫برای نام سمبولیک مدنظر گرفته شده در نظر گیرید‪.‬‬
‫وقتیکه برنامه اجرا میشودهر جای که نام سمبولیک وجرود‬ ‫‪‬‬
‫دارد‪ ،‬قیمت خود را به طور اتومات از قسمتی کره تعریرف‬
‫شده میگیرد‪.‬‬

‫طور مثال‪:‬‬
‫‪#define PI 3.14159‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫; ‪Curricum = 2 * PI * Radius‬‬
‫‪…………………….‬‬
‫; ‪Cout <<”\n PI value = “ << PI‬‬
‫وقتیکه برنامه فو اجرا شود نام سمبولیک ‪ PI‬به قیمرت آن‬
‫تعوی میشودو بیانیه شکل ذیل را به خودمیگیرد‪:‬‬
‫; ‪Curricum = 2 * 3.14159 * Radius‬‬
‫فکر کنید که اگر ماکرو طوری ذیل معرفی شده باشد‪:‬‬
‫; ‪#define PI 3.14159‬‬
‫یعنی در اخیر نام ماکرو سیمی کولن اضافه شده باشد در‬
‫آنصورت بیانیه شکل ذیل را خواهد داشت‪:‬‬
‫;‪Curricum = 2 * 3.14159 ; * Radius‬‬
‫این کار سبب میشودکه برنامه به شکل درست اجرا نگردد‪.‬‬
‫بعضی از مثال های نادرست ماکرو قرار ذیل است‪:‬‬
‫‪# define‬‬ ‫‪SUM = 0‬‬
‫‪# define‬‬ ‫; ‪TOTAL 100‬‬
‫‪# defineA‬‬ ‫‪10 , B 20‬‬
‫‪# DEFINE‬‬ ‫‪COUNT 10‬‬

‫‪35‬‬
‫اگر یک جمله یا قیمرت حرروف طروزنی را در ‪ #define‬تعریرف‬ ‫‪‬‬
‫نماییم که چندین سطر را دربر گیرد‪ ،‬در آنصورت ززم است‬
‫که در اخیر هر جمله کرکتر \ (‪ )back slash‬را اضافه نمراییم‬
‫و جملۀ متباقی را در سطر جدید نوشته کنیم‪ .‬هدف نوشرتن‬
‫\ در اخیر جمله به این معنا است که به متررجم گروش زد‬
‫نماید که جمله جریان دارد‪.‬‬

‫مثال ‪ :11.3‬برنامۀ ذیل شعاع یک دایره را در صورتی دریافت میکندکه قیمت محیط دایره وجود دارد‪.‬‬
‫‪// Program to find radius of a circle given the circumference‬‬
‫>‪# include <iostream.h‬‬
‫‪# define PI 3.14159‬‬
‫) ( ‪main‬‬
‫{‬
‫; ‪float r, circum‬‬
‫; ” ‪cout << “\n “ << “ Enter the circumference of a circle :‬‬
‫; ‪cin >> circum‬‬
‫; ) ‪r = circum / ( 2 * PI‬‬
‫; ‪cout << “\n“ << “The radius of the given circle is : “ << r‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter the circumference of the circle : 8‬‬
‫‪The radius of the given circle is :‬‬ ‫‪1 . 27‬‬

‫فواید ماکرو‬
‫‪ ‬استفاده از مراکرو‪ ،‬برنامره هرا را سراده ترر و مرنظم‬
‫ترمیسازد‪.‬‬
‫‪ ‬نام ماکرو باید پر مفهوم باشد و استفاده کننده را کمک‬
‫کند که چه نوع قیمت را در خود ذخیره نموده است‪.‬‬
‫ررات‬
‫ررای آوردن تغییر‬
‫ره را بر‬
‫راکرو‪ ،‬برنامر‬
‫رتفاده از مر‬
‫‪ ‬اسر‬
‫آسانترمیسازد‪ .‬این کار آسان اسرت کره قیمرت مراکرو را‬
‫تغییر داد به جای اینکه در هر موقعیت‪ ،‬قیمت متحرول را‬
‫تغییر دهد‪.‬‬
‫‪ ‬استفاده از ماکرو برنامه را خواناترمیسازد‪.‬‬

‫‪36‬‬
‫مفهوم ‪Escape Sequences‬‬
‫بعد از کرکتر ‪ /‬که به نام(‪ )backslash‬یاد میگردد یک حرف خراص‬
‫وارد میشود و یک عمل خاص را انمام میدهرد؛ ترکیرب ایرن‬
‫کرکترها به نام ‪ escape sequence‬یاد میشود )‪.(Deitel, 2012‬‬
‫طور مثال‪:‬‬
‫; ”!! ‪cout << “ \n this is easy‬‬
‫بیانیۀ را در نظر گیرید‪.‬‬
‫در این بیانیه ‪ \n‬نمونۀ از ‪ escape sequence‬میباشد و به خراطر‬
‫استفاده شده که کرزر به سطر جدیرد انتقرال یابرد و بعرد‬
‫جملۀ ‪ this is easy‬را روی سکرین نشان دهد‪ .‬اگر خواسته باشرید‬
‫که یک قیمت حروفی را در چند سطر چاپ کنید در آنصرورت از‬
‫‪ \n‬استفاده کنید تا قیمت که بعرد از کررزر وجرود دارد در‬
‫سطر جدید چاپ نماید‪ .‬اگر قیمت حروف یا جمله در آخر خرود‬
‫‪ \n‬را نداشته باشد در آنصورت جملۀ بعدی نیرز بره ادامره‬
‫جملۀ قبلی در عین سطر ظاهر خواهد شد‪.‬‬
‫مثال ‪ :12.3‬برنامه ی ذیل استفاده ‪ /n‬را نمایش میدهد‪.‬‬
‫) ( ‪main‬‬
‫{‬
‫;“ ‪cout << “This \n string \n will \n be \n printed \n in \n 8 \n Lines.‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪This‬‬
‫‪string‬‬
‫‪will‬‬
‫‪be‬‬
‫‪printed‬‬
‫‪in‬‬
‫‪8‬‬
‫‪Lines.‬‬
‫اگر خواسته باشید که بخشی از جملۀ طوزنی در سرطر بعردی‬
‫ظاهر گردد در آنصورت ‪ \n‬را در آغاز همان بخش مطلوب جملره‬
‫‪escape‬‬ ‫بنویسید ‪ .‬به یاد داشته باشید کره تمرام سلسرله ی‬
‫‪ sequence‬با \ آغازمیشود‪ .‬دیگر ‪ escape sequence‬هرای کره در ‪C++‬‬
‫وجود دارد عبارت اند از‪:‬‬

‫‪37‬‬
‫وظیفه‬ ‫‪escape sequence‬‬
‫برنامه در اثنای اجرای به صدا در میآید‬ ‫‪\a‬‬
‫عالمه سوالیه‬ ‫?\‬
‫‪\b‬‬
‫برگشت به اندازه یک ‪ space‬به عقب‬
‫‪\r‬‬
‫برگشت به آغاز پیام خروجی‬ ‫‪\f‬‬
‫‪Form feed‬‬
‫‪\t‬‬
‫‪Tab‬‬ ‫جمپ به اندازه یک‬ ‫‪\v‬‬
‫‪ Tab‬عمودی‬ ‫‪\0‬‬
‫کرکتر خالی اسکی‬ ‫‪\n‬‬
‫رفتن به سطر جدید‬ ‫”\‬
‫عالمه ‪double quotation‬‬ ‫\\‬
‫‪Backslash‬‬ ‫‪\0‬‬
‫خالی‬ ‫’\‬
‫قوس ناخنک یگانه (‪)single quotation‬‬
‫جدول ‪ 4.3‬توضیح کرکترهای ‪escape sequence‬‬

‫متحولها (‪)Variables‬‬
‫متحول یک نام است که به قسمتی از حافظه ‪ RAM‬داده میشرودو‬
‫همان قسمتی از حافظه را تصررف (‪ )Reserve‬میکنرد‪ .‬وقتیکره‬
‫قیمت به متحرول داده میشروددر همران قسرمتی ریرزرف شردا‬
‫حافظه به شکل موقت ذخیره میشود)‪.(Klousen, 2017‬‬
‫متحول تنهرا یرک قیمرت را در عرین زمران در خرود ذخیرره‬
‫میتواند‪ .‬به این معنا‪ ،‬هر قیمت جدیدی کره در یرک متحرول‬
‫ذخیره میشوددر حقیقت جایگزین قیمت قبلی میشود‪ .‬این قیمرت‬
‫ممکن عددی و یا حروفی باشد‪ .‬متحرول میتوانرددر هرر برار‬
‫اجرای برنامه قیمتی مختلف را در خود ذخیره نماید‪.‬‬
‫‪13.3‬‬ ‫مثال‬

‫بخش ذیل برنامه ‪ C++‬را در نظر گیرید‪:‬‬


‫;‪int x, y, z‬‬
‫;‪char p‬‬
‫‪:‬‬
‫‪:‬‬
‫;‪X = 1‬‬ ‫‪/* value 1 is assigned to x */‬‬
‫;‪Y = 2‬‬ ‫‪/* value 2 is assigned to Y */‬‬
‫;‪Z = 3‬‬ ‫‪/* value 3 is assigned to Z */‬‬
‫;‪X = Y + Z‬‬ ‫‪/* value X changes to 5 */‬‬
‫’‪P = ‘A‬‬ ‫‪/* value 65 is assigned to P */‬‬
‫;‪Y = 6‬‬ ‫‪/* value of Y changes to 6 */‬‬

‫‪38‬‬
‫;‪Z = 7‬‬ ‫‪/* value of Z changes to 7 */‬‬
‫;’‪P = ‘a‬‬ ‫‪/* value of P changes to 97 */‬‬
‫از مثال فو معلوم میشودکه یک متحرول میتوانرد قیمتهرای‬
‫مخلتف را در عین برنامه ذخیره کند‪.‬‬
‫قواعد نامگذاری متحول در ‪C++‬‬
‫‪ ‬نام متحول باید به حرف آغاز گردد و به تعقیب آن حروف‪،‬‬
‫اعداد و یا ترکیب هردو میآید‪.‬‬
‫‪ ‬در ترکیب نام متحول بردون اندرسرکور( _ ) هریچ سرمبولی‬
‫دیگر اجازه نیست که استفاده شود‪.‬‬
‫‪ ‬زبان‪ C++‬در حقیقت ‪ case sensitive‬است‪ .‬به همین خراطر ‪، counter‬‬
‫‪ Counter‬و ‪ COUTNER‬سه متحول مخلتف اند‪.‬‬
‫رول‬‫رام متحر‬ ‫رث نر‬
‫ره حیر‬
‫ردی ‪ C++‬نمیتواندبر‬ ‫رای کلیر‬
‫رتور هر‬‫‪ ‬دسر‬
‫استفاده شود‪.‬‬
‫‪ ‬در بین حروف نام یک متحول اجازه گذاشتن فاصرله (‪)space‬‬
‫نیست‪.‬‬
‫‪ ‬بهتر است که نام متحول کوتاه و پرمفهوم باشد‪.‬‬
‫‪14.3‬‬ ‫مثال‬
‫‪ Sum_total, avg _ ht‬از جمله متحولهای مجاز بوده در حالیکه‬
‫‪ #No, 50th, Lotus 123‬از جمله متحولهای غیرمجازمحسوب میشود‪.‬‬
‫انواع دیتا ( ‪)Data Types in C++‬‬
‫زبان‪ C++‬چهرار نروع دیترا دارد کره عبرارت انرد از ‪(2012,‬‬
‫)‪:Backman‬‬
‫‪ ‬تام یا ‪.)int( Integer:‬‬
‫‪ ‬حرف یا ‪.)char( character:‬‬
‫‪ ‬اعشاری با دقت ساده ‪.)float( floating‬‬
‫‪ ‬اعشاری با دقت مضاعف (‪.)double‬‬
‫هر ‪ data type‬دارای خصوصیات و ظرفیت خاص میباشردکه در جردول‬
‫ذیل توضیح شده است‪.‬‬
‫ساحۀ تعریف‬ ‫اندازه به‬ ‫توضیح‬ ‫نوعیت دیتا‬
‫بایت‬ ‫(‪)Data Type‬‬
‫‪ -32768‬الی ‪32767‬‬ ‫‪2‬‬ ‫تنها اعداد تام را در خود ذخیره میکند‪.‬‬ ‫‪Int‬‬
‫‪ -128‬الی ‪127‬‬ ‫‪1‬‬ ‫تنها یک حرف را در خود ذخیره میکند‪.‬‬ ‫‪Char‬‬
‫اعداد اعشاری با دقت ساده که الی ‪ 7‬رقم‬
‫‪ 3.4E-38‬الی ‪3.4E+38‬‬ ‫‪4‬‬ ‫بعد از اعشاریه را نشان میدهددر خود‬ ‫‪Float‬‬
‫ذخیره میکند‪.‬‬
‫‪39‬‬
‫اعداد اعشاری با دقت مضاعف که الی‬
‫‪15‬‬
‫‪ 1.7E-308‬الی ‪1.7E+308‬‬ ‫‪8‬‬ ‫رقم بعد از اعشاریه را نشان میدهد در‬ ‫‪Double‬‬
‫خود ذخیره میکند‪.‬‬
‫جدول ‪ 5.3‬توضیح نوعیت دیتا‬
‫نوعیت دیتاهای تام (‪)Integer Data Types‬‬
‫این نوعیت دیتا (‪ )int‬تنها شامل اعداد کامل و تام میباشدو‬
‫اعداد اعشاری را در خود ذخیره نمیکند‪.‬‬
‫انواع مختلف ‪ integer‬قرار ذیل اند‪:‬‬
‫‪ .a‬عدد تام بدون عالمه (‪)unsigned int‬‬
‫معرفی گردد در حقیقت تمام بیت‬ ‫متحول که به شکل (‪)unsigned int‬‬
‫های خویش را غرض ذخیره نمرودن اعرداد ترام مثبرت آمراده‬
‫میسازد و کدام بیت را برای تشخیص نمودن عالمرۀ (مثبرت یرا‬
‫منفی) عدد ریزرف نمیکند‪.‬‬
‫‪ .b‬عدد تام کوچک عالمه دار (‪)short int‬‬
‫‪)short‬‬ ‫(‪int‬‬ ‫این نوعیت دیتا غرض ذخیره نمودن اعداد تام کوچک‬
‫استفاده میشود‪.‬‬
‫‪ .c‬عدد تام کوچک بدون عالمه (‪)unsigned short int‬‬
‫وقتیکه متحول از نوع (‪)unsigned short int‬معرفری گرردد بره ایرن‬
‫معناست که میتوانداعداد تام کوچک مثبت را در خود ذخیره‬
‫نماید‪.‬‬
‫‪ .d‬اعداد تام بزرگ (‪)long int‬‬
‫این نوعیت دیتا بررای اعرداد ترام برزرگ مرورد اسرتفاده‬
‫قرارمیگیرد‪.‬‬
‫‪ .e‬اعداد تام بزرگ بدون عالمه (‪)unsigned long int‬‬
‫این حالت بیت عالمه را از بین بررده و حافظره را دو چنرد‬
‫میسازدو میتواندکه اعداد تام بزرگ مثبت را در خود ذخیره‬
‫نماید‪.‬‬
‫جدول ذیل انواع دیتا (‪ ،)data types‬اندازا ظرفیرت (‪)size in bytes‬‬
‫( ‪integer‬‬ ‫رام‬
‫ردادی تر‬ ‫رف (‪ )range‬اعر‬‫راحۀ تعریر‬‫و سر‬
‫‪ )numbers‬را نشان میدهد‪:‬‬
‫ساحۀ تعریف‬ ‫اندازه به بایت‬ ‫نوعیت دیتا‬
‫(‪)Range‬‬ ‫(‪)Size in bytes‬‬ ‫(‪)Data Type‬‬
‫‪ 0‬الی ‪65535‬‬ ‫‪2‬‬ ‫عدد تام کوچک بدون عالمه )‪) unsigned short‬‬
‫‪ - 32768‬الی ‪+ 32767‬‬ ‫‪2‬‬ ‫(‪)signed short‬‬ ‫عدد تام کوچک عالمه دار‬
‫عدد تام‬
‫‪ 0‬الی ‪4294967295‬‬ ‫‪4‬‬
‫(‪)unsigned int‬‬
‫‪+ 2147483647‬‬ ‫‪4‬‬ ‫عدد تام‬

‫‪40‬‬
‫‪- 2147483648‬‬ ‫(‪)signed int‬‬
‫‪ 0‬الی ‪9.22337204E +18‬‬ ‫‪8‬‬ ‫(‪)long‬‬ ‫عدد تام بزرگ‬
‫حرفی بدون عالمه‬
‫الی ‪255‬‬ ‫‪0‬‬ ‫‪1‬‬
‫(‪)unsigned char‬‬
‫جدول ‪ 6.3‬توضیح نوعیت دیتا‬
‫ساده )‪(Float Point Data Types‬‬
‫نوعیت دیتای اعشاری با دقت‬
‫ما میتوانیم نوعیت دیترا برا دقرت اعشراری سراده را برا‬
‫استفاده از دستور کلیدی ‪ float‬تعریف نماییم‪ float .‬چهار بایت‬
‫حافظه را ریزرف میکندو تا شش خانره بعرد از اعشراریه در‬
‫اجرای عملیات دقیق است‪.‬‬
‫نوعیت دیتای اعشاری با دقت مضاعف )‪(Double Precision Data Types‬‬
‫ِیشرتر‬
‫این نوعیت دیتا میتواندبزرگترین اعداد را با دقت ب‬
‫‪ double‬هشت بایرت‬ ‫محاسبه نموده و نتیمه را محاسبه نماید‪.‬‬
‫از حافظه را ریزرف نموده و تا ‪ 14‬رقم بعد از اعشراریه را‬
‫بادقت عالی اجرا می نماید‪ .‬برای تعریف این نوعیرت دیترا‬
‫از دستور کلیدی ‪ double‬استفاده صورت میگیرد‪.‬‬
‫حرفی)‪(Character Data Type‬‬
‫نوعیت دیتای‬
‫این نوعیت دیتا میتواندیک حرف یا کرکتر ست ‪ ASCII‬را در خود‬
‫ذخیره نماید‪ .‬ظرفیت این نوع دیتا یرک بایرت بروده و برا‬
‫استفاده از دستور کلیدی ‪ char‬معرفی میشود‪ .‬اگر بیرت عالمره‬
‫را در نظر نگیریم این نوعیت دیتا میتواندعدد برین ‪ 0‬الری‬
‫‪ 255‬را در خود ذخیره نماید‪.‬‬
‫معرفی متحولها)‪(Declaring Variables‬‬
‫معرفی متحولهرا دربرگیرنرده نوعیرت دیترا و نرام متحرول‬
‫میباشد که در خرتم آن سریمی کرولن (;) در میگرردد‪ .‬ایرن‬
‫اعالمیه (‪ )declaration‬در حقیقت مترجم یا کمپایلر را در براره‬
‫نام و نوعیت متحول آگاه میسازد‪.‬‬
‫ساختار معرفی متحول طور ذیل است‪:‬‬
‫;‪data – type a1, a2, a3 , ……. an‬‬

‫رت و در‬
‫را اسر‬
‫رولهر‬‫رای متحر‬‫رام هر‬
‫را ‪ a3 ،a2 ،a1‬و ‪ an‬نر‬
‫در اینمر‬
‫قسمت ‪ data–type‬یکی از نوعیت دیتاهای که قربال معرفری گردیرد‬
‫(مانند ‪ float ،int‬و غیره) در میگردد‪ .‬اگر نوعیت دیتای بیشتر‬
‫از یک متحول معرفی گردددر آنصورت ‪ a3 ،a2 ،a1‬برا اسرتفاده‬
‫از کامه از همدیگر جدامیشود‪.‬‬

‫‪41‬‬
‫‪15.3‬‬ ‫مثال‬
‫; ‪int x, y, z‬‬
‫; ‪float avg, sum‬‬
‫; ‪char ans‬‬
‫; ‪double amount‬‬
‫در اینما ‪ y ،x‬و ‪ z‬از نروع ‪ avg ، int‬و ‪ sum‬از نروع ‪،float‬‬
‫‪ ans‬از‬
‫نوع ‪ char‬و ‪ amount‬از نوع ‪ double‬معرفی شده انرد‪ .‬متحرولهرای‬
‫فو را میتوانیم به شکل ذیل نیز معرفی نماییم‪:‬‬
‫; ‪int x‬‬
‫; ‪int y‬‬
‫; ‪int z‬‬
‫; ‪float avg‬‬
‫; ‪float sum‬‬
‫; ‪char ans‬‬
‫معرفی‬ ‫نیز‬ ‫ذیل‬ ‫شکل‬ ‫میتوانیم به‬ ‫را‬ ‫نوعیت متحولهای‬
‫نماییم‪:‬‬
‫; ‪short int count‬‬
‫; ‪long int fact‬‬
‫نیز‬ ‫‪ long int‬و ‪long‬‬ ‫اینکه ‪ short int‬و ‪ short‬یک مفهوم را دارا است و‬
‫عین مفهوم را دارد میتوانیم‬
‫بیانیه های فو را به طور ذیل معرفی نماییم‪:‬‬
‫; ‪short count‬‬
‫; ‪long fact‬‬

‫متحولها)‪(Assigning Values to Variables‬‬


‫توظیف قیمت ها در‬
‫شما میتوانیدبه سه طریرق قیمتهرارا در متحرولهرا ذخیرره‬
‫کنید‪:‬‬
‫‪ .1‬در بخش اعالمیه (‪)Declaration part‬‬
‫‪ .2‬در بخش اجرایی (‪ )Executable part‬برنامه با استفاده از عالمۀ‬
‫مساوی‬
‫‪ .3‬با استفاده از صفحه کلید (‪)Keyboard‬‬
‫بیانیه = )‪(Assignment Statement‬‬
‫وقتیکه میخواهیم قیمت را در یک متحرول ذخیرره نمراییم از‬
‫استفاده میکنیم‪.‬‬ ‫عالمه‬
‫شکل عمومی آن قرار ذیل است‪:‬‬
‫;‪Variable _name = Constants / Variable / Expression‬‬
‫بیانیه ذیل را در نظر گیرید‪:‬‬
‫‪42‬‬
‫; ‪Total = 0‬‬
‫این بیانیه نشان میدهدقیمت ‪ 0‬که در سمت راست = قرار دارد‬
‫در متحول سمت چس = یعنی ‪ Total‬ذخیره میشود‪ .‬در سمت راسرت =‬
‫میتواندقیمتی ثابت‪ ،‬متحول و یا عبرارت کره حراوی هرر دو‬
‫(ثابت و متحول) باشد قرار گیرد‪ .‬طورمثال‪:‬‬
‫; ‪Sum = marks 1 + marks 2‬‬
‫در این فورمول بخش سمت راست = مورد ارزیابی قرار گرفته و‬
‫بعدا ممموعۀ هر دو متحول ‪ marks1‬و ‪ marks 2‬در متحول سمت چرس‬
‫= یعنی ‪ Sum‬ذخیره میشود‪.‬‬

‫‪Count = Count + 1‬‬


‫در بیانیۀ فو ‪ ،‬عدد ‪ 1‬به قیمت متحول سرمت راسرت = اضرافه‬
‫گردیده و بعد نتیمه در متحول سمت چس = یعنری ‪ count‬ذخیرره‬
‫میشود‪ .‬اگر قیمت اولی متحول ‪ cout‬طور مثال ‪ 10‬باشرد قیمرت‬
‫جدید آن ‪ 11‬خواهد شد‪.‬‬
‫مثال ‪ :16.3‬دادن قیمت به متحولها در بخش اعالمیه (‪)Declration part‬‬
‫‪// Assigning value to variables in the declaration part‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫; ‪int x = 1 , y = 2, z = 3‬‬
‫; ‪float avg = 0.0 , pi‬‬
‫; ‘ ‪char opt = ‘ y‬‬
‫‪Examples of assigning values to variables in the executable part are :‬‬
‫دادن قیمت به متحولها در بخش اجرایی برنامه‬
‫; ‪pi = 3.14159‬‬
‫; ‪total = 0‬‬
‫; ’‪opt = ‘N‬‬
‫لسان ‪ C++‬به استفاده کننده (‪ )User‬اجازه میدهدکه عملگرهای‬
‫(‪ )Operators‬مخلتف را در یک بیانیه یا فورمول استفاده کند‪.‬‬
‫عده ی عبارات مماز قرار ذیل است‪:‬‬
‫;‪A=B=C=0‬‬
‫; ‪X1 = X2 = Large‬‬
‫نوت‪ :‬در سمت چس عالمه مساوی همیشه باید نام یک متحول‬
‫وجود داشته باشد‪.‬‬
‫مثال ‪ :17.3‬برنامۀ ذیل حاصل جمع دو عدد تام (‪ )int‬را دریافت مینماید‪.‬‬
‫‪// program to find sum of two integer numbers‬‬
‫>‪#include <iostream.h‬‬
‫{ ) ( ‪main‬‬
‫‪43‬‬
// Declaration and assignment
int N1 =200, N2 = 300, Sum;
Sum = N1 + N2;
cout << “\n “ << “ Total = “ << Sum;
return 0;
}
Output
Total = 500
.‫ برنامۀ ذیل محیط دایره را دریافت میکند‬:18.3 ‫مثال‬
// program to find circumference of a cricle
#include <iostream.h>
main ( )
{
// Declaration and assignment
float pi = 3.14150 , radius = 10 , circum ;
circum = 2 * pi * radius ;
cout << “\n “ << “ Circumference = “ << circum ;
return 0 ; }
Output
Circumference = 62 . 831802

.‫ برنامۀ ذیل مجموعه و اوسط نمرات چهار مضمون را دریافت میکند‬:19.3 ‫مثال‬
// Program to find total and average of marks obtained in 4 subjects.
#include <iostream.h>
main ( ) {
int m1, m2, m3, m4 ;
float total , avg ;
// assignment in executable part
m1 = 50 , m2 = 70 , m3 = 75 , m4 = 67 ;
total = m1 + m2 + m3 + m4 ;
avg = total / 4 ;
cout << “\n “ << “ The average marks = “ << avg ;
return 0 ;
}
Output
The average marks = 65 . 500000
.‫ برنامۀ ذیل مساحت دایره را محاسبه میکند‬:20.3 ‫مثال‬
// program to compute area of a circle
#include <iostream.h>
main ( )
{
// Declarations

44
‫; ‪float pi , r , area‬‬
‫‪// Assignment‬‬
‫; ‪pi = 3.14159‬‬
‫;‪r=5‬‬
‫‪// Calculation and printing‬‬
‫; ‪area = pi * r * r‬‬
‫; ‪cout << “\n “ << “ Area of circle = “ << area‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Area of circle = 78 . 539749‬‬
‫شیوا دیگر که با استفاده از آن میتوانیم قیمت هرا را در‬
‫متحولها ذخیره نماییم استفاده از دستور ورودی ‪cin‬میباشرد‪.‬‬
‫‪ cin‬دستور ورودی ‪ C++‬است که به استفاده کننده (‪ )user‬اجرازه‬
‫میدهدتا قیمت ها را مستقیما از ‪ keyboard‬وارد متحول سرازد‪.‬‬
‫برعکس‪ cout ،‬از جملۀ دستورهای خروجی ‪ C++‬است که نترایج را‬
‫روی سکرین نشان میدهد‪.‬‬

‫مثال ‪ :21.3‬برنامۀ ذیل حاصل جمع دو عدد تام (‪ )int‬که قیمت های آنرا با استفاده از دستور ‪ cin‬از صفحه کلید میگیرد ‪،‬‬
‫دریافت مینماید‪.‬‬
‫‪// program to find sum of two integer numbers inserted via keyboard‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫‪// Declaration of variables‬‬
‫;‪int N1, N2, Sum‬‬
‫;“ ‪cout << “Enter 2 Integer numbers to Sum :‬‬
‫;‪cin >> N1‬‬
‫;‪cin >> N2‬‬
‫;‪Sum = N1 + N2‬‬
‫;‪cout << “\n “ << “ The Sum is = “ << Sum‬‬
‫} ;‪return 0‬‬
‫‪Output‬‬
‫‪Enter 2 Integer numbers to Sum : 10 20‬‬
‫‪The Sum is = 30‬‬

‫مثال ‪ :22.3‬برنامۀ ذیل ‪ 3‬عدد را صفحه کلید گرفته‪ ،‬حاصل جمع‪ ،‬تفریق‪ ،‬ضرب و تقسیم آنرا دریافت نموده روی سکرین نشان‬
‫‪45‬‬
.‫میدهد‬
/* program to find sum, Minus, Product and Division of three float numbers inserted from
keyboard */
# include <iostream.h>
main) (
{
// Declaration
float N1, N2, N3, Sum, Min, Prod, Div;
cout << "Enter 3 Integer numbers to Sum, Minus, Product and Divide : ";
cin >> N1 >> N2 >> N3;
Sum = N1 + N2 + N3;
Min = N1 - N2 - N3;
Prod = N1 * N2 * N3;
Div = N1 / N2 / N3;
cout << "\n " << Sum;
cout << "\n " << Min;
cout << "\n " << Prod;
cout << "\n " << Div;
return 0; }
Output
Enter 3 Integer numbers to Sum, Minus, Product and Divide 20 10 5
35
5
1000
0.4

.‫ برنامۀ ذیل مفاد ساده را محاسبه میکند‬:23.3 ‫مثال‬


// program to calculate simple interest
#include <iostream.h>
main ( )
{
int year ;
float prin, rate, si ;
cout << “ Enter principle , rate and period : “ ;
cin >> prin >> rate >> year ;
si = prin * rate * year / 100 ;
cout << “\n “ << “ Simple interest = “ << si ;
return 0 ;
}
Output
Enter principle, rate and perios : 1000 5 2
Simple interest = 100. 0000000

46
.‫ برنامۀ ذیل شعاع یک دایره را در صورتی دریافت میکندکه قیمت محیط دایره وجود دارد‬:24.3 ‫مثال‬
Program to find radius of a circle given the circumference //
>include <iostream.h #
main) (
{
char x , y;
cout << "\n " << " Enter two characters separately : \t;"
cin >> x >> y;
cout << "\n" << "You entered " << x <<" and " << y << " characters ;"
return 0;
}
Output
Enter two characters separately : a b
You entered a and b characters

47
‫خـالصۀ فصل‬
‫در این فصل دستورهای کلیدی (‪ ،)keywords‬شناسه ها (‪،)identifiers‬‬
‫ثابت ها (‪ ،)constants‬متحولهرا(‪ )variables‬و انرواع دیترا ( ‪data‬‬
‫‪ )types‬مورد بحث قررار گرفرت و در نتیمره مفراهیم ذیرل را‬
‫آموختیم‪:‬‬
‫دستورهای کلیدی عبارت از کلمات است که برای اهرداف خراص‬
‫در یک زبان استفاده میشودو نمیتوانیم آنرا بره حیرث نرام‬
‫های متحولها استفاده نماییم‪ .‬امرا شناسره بره نرام اطرال‬
‫میشودکه برای متحولها‪ ،‬توابع و صرف در برنامره اسرتفاده‬
‫میگردد‪.‬‬
‫ثابت عبارت از قیمت است که در اثنای اجرای برنامه قابرل‬
‫تغییر نباشد‪ .‬ثابتهادر ‪ C++‬به دو نوع می باشد کره عبرارت‬
‫از ثابتهای اولی و ثابتهای دومی میباشد‪.‬‬
‫متحول نام است که به یک قسمتی از حافظه ‪ RAM‬داده میشرودو‬
‫همان قسمتی حافظه را ریزرف میکند‪ .‬هرر وقتیکره قیمرت بره‬
‫متحول داده میشود ‪ ،‬قیمت در قسمت ریزرف شردا حافظره بره‬
‫شکل موقت ذخیره میگردد‪ .‬به یاد داشته باشید وقتری متحرول‬
‫معرفی میشود‪ ،‬باید نوعیت دیتا آن نیز تعیین گرردد‪ .‬شرما‬
‫میتوانیدکه نوعیت متحول را عددی (تام و یا اعشاری) و یا‬
‫حروفی (یک حرفی و یا چند حرفی) تعریف کنید‪.‬‬

‫پرسشهای فصل‬

‫‪ .1‬هدف بیانیه >‪ #include<iostream.h‬چیست؟‬


‫‪ .2‬چرا متحولها در برنامه تعریف میگردد ؟‬
‫‪ .3‬شکل عمومی دستور ‪ cin‬و ‪ cout‬را بنوسید؟‬
‫‪ .4‬عملگر ‪ cin‬را در یک مثال توضیح دهید؟‬
‫‪ .5‬عملگر ‪ cout‬را در یک مثال ساده توضیح دهید؟‬
‫‪ .6‬تفاوت بین ‪ cout‬و ‪ printf‬چیست؟ توضیح دهید؟‬
‫‪ .7‬شناسه (‪ )Identifier‬چیست؟‬
‫‪ .8‬دستور های کلیدی (‪ )keywords‬چیست؟ چند دستور کلیدی را‬
‫نام بگیرید؟‬
‫‪ .9‬انواع دیتاهای ساده ‪ C++‬را مختصرا توضیح دهید؟‬
‫‪ .10‬ثابتهای عددی به چند نوع تقسیم شده است؟‬
‫‪ .11‬قواعد نامگذاری متحولها چیست؟‬
‫‪48‬‬
‫‪ .12‬تفاوت بین متحول و ثابت چیست؟‬
‫‪ .13‬چطور میتوانیدیک متحول را تعریف (‪ )declare‬نمایید‪ ،‬در یک‬
‫مثال توضیح دهید؟‬
‫فعالیت گروپی‬
‫عمومی یک برنامه ‪ c++‬را در یک مثال توضیح دهید؟‬ ‫‪ .1‬ساختار‬
‫‪ .2‬یک برنامه را بنوسید که در آن عملگر ورودی و خروجی‬
‫وجود داشته باشد؟‬
‫‪ .3‬تفاوت بین عملگر << و >> چیست ؟‬
‫‪ .14‬تفاوت بین متحولها و دستورهای کلیدی را با ذکر مثال‬
‫های آن بیان دارید؟‬
‫‪ .15‬تفاوت میان ثابت تام ‪ int‬و ثابت اعشاری ‪ float‬چیست؟‬
‫‪ .16‬تفاوت بین ثابت حرفی ‪ char‬و ثابت حروفی‪ string‬چیست؟‬

‫‪49‬‬
‫فصل چهارم‬
‫عملگرها و عبارت ها‬
‫‪Operators and Expressions‬‬

‫هدف عمومی‪ :‬باعملگرها (‪ )Operators‬و عبارات (‪ )Expressions‬در‬


‫برنامه نویسی آشنا شوند ‪.‬‬
‫اهداف آموزشی‪ :‬در پایان این فصل‪ ،‬محصالن قادر خواهند بود تا‪:‬‬
‫‪ .1‬عملگر (‪ )Operator‬را تعریف نمایند‪.‬‬
‫‪ .2‬انواع مختلف عملگرهای ‪ C++‬را بیان نمایند‪.‬‬
‫‪ .3‬فواید عملگرهای مختصر را توضیح دهند‪.‬‬
‫‪ .4‬عبارات ترکیبی را در مثالهای مناسب نمایش دهند‪.‬‬
‫‪ .5‬انواع مختلف بیانیه ها (‪ )statements‬را تشریح نمایند‪.‬‬

‫این فصل حاوی مفاهیم عملگرها‪ ،‬انواع عملگرها‪ ،‬عبرارات و‬


‫انواع عبارات میباشد یک هر یک از این مفاهیم بره تفصریل‬
‫مورد بحث قرار گرفته است‪.‬‬
‫زبان برنامه نویسی ‪ C++‬چندین عملگر را جهت اجرای عملیرات‬
‫سادا حسابی مانند‪ :‬جمع‪ ،‬تفریق‪ ،‬ضرب‪ ،‬تقسیم‪ ،‬باقیمانرده و‬
‫دیگر عملیات منطقی دارد‪.‬‬
‫عملگر (‪ )Operator‬عبارت از سمبولی است کره بره خراطر اجررای‬
‫عملیات خاصی حسابی و یا منطقی استفاده میشود‪ .‬دیترای کره‬
‫روی آن عملیه اجرا میگرددبه نام (‪ )Operands‬یادمیشود‪.‬‬
‫عبارت (‪ )Expression‬ترکیب عملگرها و (‪ )Operands‬های است کره در‬
‫نتیمه آن یک قیمت به دست میآید(‪.)Soulié ,2007‬‬
‫مثال ذیل را در نظر گیرید‪:‬‬
‫‪12 * 5‬‬
‫عبارت از (‪)operands‬میباشد‪.‬‬ ‫‪5‬‬ ‫‪،‬‬ ‫‪12‬‬ ‫* عملگر ضرب است و‬

‫به صورت عموم‪ ،‬عملگر ها به چهار دسته تقسیم گردیرده کره‬


‫عبارت اند از‪:‬‬
‫عملگر یکتایی(‪)Unary Operator‬‬ ‫‪.i‬‬
‫عملگر دوتایی (‪)Binary Operator‬‬ ‫‪.ii‬‬
‫عملگر سه تایی (‪)Ternary Operator‬‬ ‫‪.iii‬‬
‫عملگر خاص (‪)Special Operator‬‬ ‫‪.iv‬‬

‫‪50‬‬
‫عملگرهای یکتایی(‪)Unary Operators‬‬
‫عملگر یکتایی عبارت از عملگرری اسرت کره برازی یرک عنصرر‬
‫(‪ )operands‬اجرا میگردد‪ .‬ایرن عملگرر همیشره قبرل از ‪operand‬‬
‫ظاهرمیشود‪ .‬انواعی مختلف عملگرهای ‪ unary‬کره در ‪ C++‬وجرود‬
‫دارد عبارت اند از )‪:(Stroustrup, 1997‬‬
‫یکتایی مثبت )‪)Unary plus( – (+‬‬ ‫‪.i‬‬
‫یکتایی منفی)‪)Unary minus( – (-‬‬ ‫‪.ii‬‬
‫افزایش)‪)Increment( – (++‬‬ ‫‪.iii‬‬
‫کاهش)‪)Decrement( – (- -‬‬ ‫‪.iv‬‬
‫نفی منطقی)!( – (‪)Logical NOT‬‬ ‫‪.v‬‬
‫بیتی مکمل)~( – (‪)Bitwise complement‬‬ ‫‪.vi‬‬
‫آدرس)&( – (‪)Address‬‬ ‫‪.vii‬‬
‫عالمه یکتایی منفی ( ‪ ) -‬غرض تفریق استفاده میشود‪ .‬استفاده‬
‫این عالمه‪ ،‬عالمۀ مقدار سمت راست خود را تغییرمیدهد‪ .‬طرور‬
‫مثال‪ ،‬این عالمه مقدار موجود را ضررب ‪ -1‬میسرازد‪ .‬همچنران‬
‫عالمه یکتایی مثبت (‪ )+‬مقدار موجود خود را ضرب ‪+1‬میسازد‪.‬‬

‫مثال ‪ 1.4‬قیمت ‪ a‬را یک عدد اضافه میکند‪.‬‬

‫‪/* Program to print a message */‬‬


‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫;‪int a = 10‬‬
‫;‪a++‬‬
‫;‪cout <<"The Value of a is: "<< a << endl‬‬
‫;‪return 0‬‬
‫}‬

‫‪Output‬‬
‫‪The Value of a is: 11‬‬

‫عملگر های دوتایی (‪)Binary Operators‬‬


‫این عملگر ها بازی دو عنصر (‪ )operands‬اجرامیشود‪ .‬عملگر دو‬
‫تایی به پنج دسته تقسیم گردیده است (‪:)Oualline, 1995‬‬
‫‪ .i‬عملگر حسابی (‪)Arithmetic Operator‬‬
‫‪ .ii‬عملگر ارتباطی (‪)Relational Operator‬‬
‫‪ .iii‬عملگر منطقی (‪)Logical Operator‬‬
‫‪51‬‬
‫عملگر مساوی (‪)Assignment Operator‬‬ ‫‪.iv‬‬
‫عملگر بیتی (‪)Bitwise Operator‬‬ ‫‪.v‬‬

‫عملگرهای حسابی (‪)Arathematic Operators‬‬


‫حسابی دارد که در‬ ‫زبانبرنامه نویسی ‪ C++‬پنج نوع عملگرهای‬
‫جدول ذیل لست گردیده ‪.‬‬
‫هــــــــدف‬ ‫عملگر‬
‫جمع‬ ‫‪+‬‬
‫تفریق‬ ‫‪-‬‬
‫ضرب‬ ‫*‬
‫تقسیم‬ ‫‪/‬‬
‫باقیمانده‬ ‫‪%‬‬
‫جدول ‪ 1.4‬عملگر های حسابی‬
‫در ‪ C++‬هیچ عملگر برای محاسبۀ توان وجود ندارد اما ترابع‬
‫) ( ‪ pow‬است که غرض محاسبۀ توان در این لسان استفاده میشود‪.‬‬
‫تقسیم یک عدد تام بازی عدد تام دومی به نرام تقسأیم تأام‬
‫(‪ )Integer division‬یرراد میگرددکرره در آن بخررش اعشرراری صرررف‬
‫نظرمیشود‪ .‬عملگر ‪ %‬بررای دریافرت باقیمانرده (‪ )Remainder‬در‬
‫لسان ‪ C++‬مورد استفاده قرارمیگیرد‪.‬‬
‫و ‪ b = 3‬باشد نتیمه آن‪ a % b‬یرا = ‪10 % 3‬‬ ‫طور مثال‪ ،‬اگر ‪a = 10‬‬
‫‪1‬میشود‪ .‬در حرررالریرکه ‪10 / 3 = 3‬میشود‪.‬‬
‫قابل یادآوریست که عملگر ‪ %‬تنها روی اعداد تام قابل اجرا‬
‫است‪.‬‬

‫را از نوع اعداد تام یا ‪ int‬در نظر گیرید‬ ‫‪b‬‬ ‫مثال ‪ :2.4‬متحولها ‪ a‬و‬
‫‪a = 16 , b = 3.‬‬

‫نتیجه‬ ‫عبارت ها‬


‫‪16‬‬ ‫‪+ 16‬‬
‫‪-5‬‬ ‫‪-5‬‬
‫‪19‬‬ ‫‪a+b‬‬
‫‪13‬‬ ‫‪a-b‬‬
‫‪48‬‬ ‫‪a*b‬‬
‫‪( 5‬بخش اعشاری حذف گردیده است)‬ ‫‪a/b‬‬
‫‪( 1‬باقیماندهعملیه تقسیم)‬ ‫‪a%b‬‬

‫‪52‬‬
‫متحول ‪ C1‬و ‪ C2‬از نوع حروفی است و قیمت حروف ‪ P‬و ‪ T‬را در خود ذخیره نموده در نظر‬
‫گیرید‪.‬‬
‫‘ ‪C1 = ‘ A ‘ and C2 = ‘ a‬‬

‫‪C1 = 65 , and C2 = 97.‬‬


‫نتیجه‬ ‫عبارت ها‬
‫‪162‬‬ ‫‪C1 + C2‬‬
‫‪167‬‬ ‫‪C1 + C2 + 5‬‬
‫‪114‬‬ ‫’‪C1 + ‘1‬‬
‫به یاد داشته باشید که قیمت’‪ ‘1‬مساوی به ‪ 49‬است‪.‬‬
‫در تقسیم اعداد تام‪ ،‬اگر یکی از اعداد منفی باشد در‬
‫آنصورت نتیمه متعلق به کمپیوترمیشود‪.‬‬
‫طور مثال‪:‬‬
‫‪5 /6=0‬‬
‫‪-5 / -6 = 0‬‬
‫اما نتیمه ‪ -5 / 6‬ممکن ‪ 0‬و یرا ‪ -1‬شرود‪ .‬در ‪ (Turbo) C++‬نتیمره‬
‫‪0‬میشود‪ .‬اما در عملیه باقیمانده‪ ،‬عالمه عردد باقیمانرده‬
‫متعلق به عالمه عدد اول میباشد‪.‬‬
‫طور مثال‪:‬‬

‫‪- 20 % 5 = - 2‬‬
‫‪- 20 % - 6 = - 2‬‬
‫‪20 % - 6 = 2‬‬
‫اگر در یک عملیه هر دو عدد اعشاری باشد‪ ،‬چنین عملیره را‬
‫به نام )‪ ( Real Arathmatic‬یادمیکند‪ .‬در این نوع عملیره اعرداد‬
‫میتواندبه شکل اعشاری و یا توان دار باشد‪ .‬نتیمۀ محصرول‬
‫نیز به شکل اعشاریه دار ظاهرمیشود‪.‬‬
‫عملیات مختلط حسابی (‪)Mixed – Mode Arathmatic Operations‬‬
‫در عملیات مختلط حسابی یک عردد از نروع ترام (‪ )int‬و عردد‬
‫دومی از نوع اعشاری (‪)real‬میباشد‪ .‬وقتیکه یکری از ایرن دو‬
‫عدد اعشاری باشد نتیمه نیز شکل اعشراری را میگیررد ( ‪2002,‬‬
‫‪.)Prinz‬‬
‫طور مثال‪:‬‬
‫می شود‪.‬‬ ‫‪15 / 2.0 = 7.5‬‬ ‫و‬ ‫‪15 / 2 = 7‬‬
‫اولویت بندی عملگر های حسابی (‪)Precedence of Arathematic Operators‬‬
‫هر عبارت مطابق قواعد اوهویت مورد ارزیابی قرارمیگیرد‪.‬‬
‫طور مثال‪:‬‬

‫‪53‬‬
‫‪4*5/2‬‬
‫این عبارت از سمت چس به راست ارزیابی میشود‪ .‬در قدم اول‬
‫(‪ )20‬تقسریم ‪2‬میشرود‪.‬‬ ‫‪ 4*5‬گردیده و بعرد حاصرل ضررب‬
‫ترتیب اجرای عبارت بیشتر متکی به اولویت عملگر هرا اسرت‬
‫که در جدول ذیل بیان گردیده است‪.‬‬
‫جهت فعالیت‬ ‫عملگر‬ ‫حق اولویت بندی‬
‫چپ به راست‬ ‫( )‬ ‫‪1‬‬
‫راست به چپ‬ ‫‪Unary‬‬ ‫‪2‬‬
‫‪*, / , %‬‬ ‫‪3‬‬
‫چپ به راست‬
‫‪+,-‬‬ ‫‪4‬‬
‫چپ به راست‬
‫جدول ‪ 2.4‬توضیح حق اولویت بندی عملگرهای مختلف‬
‫در یک عملیۀ حسابی عبارت که در بین قوس قرار دارد اول‬ ‫‪‬‬
‫اجرامیگردد‪.‬‬
‫در صورتی که در یک عملیه چندین جوره قوسهاوجود داشرته‬ ‫‪‬‬
‫روس وجرود دارد اول اجررا‬‫باشد‪ ،‬عبرارتی کره در وسرط قر‬
‫میشودو به همین قسرم بره طررف بیررون یکری پری دیگرری‬
‫اجرامیشود‪.‬‬
‫اگر در یک عملیه دو یا بیشرتر عملگرهرا کره دارای حرق‬ ‫‪‬‬
‫اولویت مساوی باشد وجود داشته باشد در آنصرورت عملیره‬
‫از سمت چس به راست اجرامیشود‪ .‬به این معنا‪ ،‬آن عملگرر‬
‫که نزدیک مساوی قرار دارد اول اجرامیشود‪.‬‬
‫قوسها میتواند حق اولویت را تغییر دهند‪.‬‬ ‫‪‬‬
‫مثال ‪ :3.4‬معادلۀ ذیل را در نظر گیرید‪.‬‬
‫‪−b±√b2 −4ac‬‬
‫‪X1‬‬ ‫=‬
‫‪2a‬‬

‫اگر ‪ b = 4 ،a = 1‬و‬
‫‪c= 4‬‬
‫معادل معادله فوق در زبان‪ C++‬قرار ذیل است‪:‬‬
‫‪x‬‬ ‫) ‪= ( -b + sqrt ( b * b – 4 *a*c) / ( 2 * a‬‬
‫)‪= (( -4 ) + sqrt ( 4 * 4 – 4 *1 * 4 )) / ( 2 * 1‬‬
‫‪= ( -4 + sqrt (4 * 4 – 4 * 1 * 4 )) / ( 2 * 1 ) // Evaluation inner most prantheses‬‬
‫)‪= ( -4 + sqrt ( 16 – 4 * 4 )) / ( 2 * 1‬‬
‫)‪= ( -4 + sqrt (16 – 16 )) / ( 2 + 1‬‬
‫)‪= ( -4 + sqrt (0)) / ( 2 * 1‬‬
‫)‪= ( -4 + 0) / ( 2 * 1‬‬
‫‪= -4 / 2‬‬
‫‪x1 = -2‬‬

‫‪54‬‬
‫مثال ‪ :4.4‬عبارت ذیل را در نظر گیرید‪.‬‬

‫)) ‪( -5 * 2 / ( 6 + 4 - 2) + ( 2 / 3 + 5‬‬
‫ترتیب ارزیابی آن قرار ذیل میباشد‪:‬‬
‫)) ‪= ( -5 * 2 / ( 6 + 4 - 2) + ( 2 / 3 + 5‬‬
‫)) ‪= ( -5 * 2 / (10 – 2 ) + ( 2 / 3 + 5‬‬
‫))‪= ( -5 * 2 / 8 + (2 / 3+ 5‬‬
‫)) ‪= ( - 5* 2 / 8 + ( 0 + 5‬‬
‫)‪= ( -5*2 / 8 + 5‬‬
‫) ‪=(-10 / 8 + 5‬‬
‫‪= -1 + 5‬‬
‫‪=4‬‬
‫برنامۀ که عبارت ذیل را مورد ارزیابی قرارمیدهد‪:‬‬
‫‪// Program to Evaluate a given Expression‬‬
‫>‪#include <iostream.h‬‬
‫( ‪main‬‬
‫{‬
‫; ‪int result‬‬
‫; “ ))‪cout << “ \n “ << “The given expression is : (-5 *2/(6+4-2) + ( 2/3 + 5‬‬
‫;))‪result = (-5 * 2 / ( 6 + 4 -2 ) + ( 2/3+5‬‬
‫; ‪cout << “\n” << “Result of evaluation is : “ << result‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫))‪The given expression is : (-5 *2/(6+4-2) + ( 2/3 + 5‬‬
‫‪Result of Evaluation : 4‬‬
‫اگر بیشتر از یک جوره قوس ها در کنار یکدیگر ظاهر گرردد‬
‫در آنصورت ارزیابی آن از سمت چس به راست در نظرر گرفتره‬
‫میشود‪ .‬طور مثال‪ ،‬چس ترین ست قوسهرااول اجررا گردیرده و‬
‫جرروره قرروس هررای کرره در سررمت راسررت موقعیررت دارد آخررر‬
‫اجرامیشررود‪ .‬از قوسهرراوقتی اسررتفاده میشررودکه در قسررمت‬
‫اولویت عملگر ها شک و شربه وجرود داشرته باشرد‪ .‬همچنران‬
‫استفاده از قوسهابرنامه را خواناترمیسازد‪.‬‬
‫مثال ‪ :5.4‬عبارت ذیل را در نظر گیرید‪.‬‬
‫‪++x - y ++‬‬ ‫‪where x = 6 , y = 2‬‬
‫‪++x - 2‬‬ ‫)‪unary operators ( from right to left‬‬
‫‪7‬‬ ‫‪- 2‬‬ ‫‪uniary operators‬‬
‫)‪First x = 6 , x = 7 (pre-increment‬‬
‫‪5‬‬ ‫‪Substraction‬‬

‫‪55‬‬
‫ارتباطی)‪(Relational Operators‬‬
‫عملگرهای‬
‫این عملگر ها بیشتر در عملیات شرطی کره نتیمره آن درسرت‬
‫(‪ )True‬و یا نادرسرت (‪ )False‬میباشداسرتفاده میگرردد‪ .‬ایرن‬
‫عملگر ها نتیمۀ هر عبارت را به شکل تام نشان میدهد‪ .‬اگر‬
‫نتیمه عبارت نادرست باشد آنرا به ‪ 0‬نمایش میدهد ولی آگر‬
‫نتیمه درست باشد آنرا به قیمت تام که خالف ‪ 0‬باشد‪ ،‬نشران‬
‫میدهد‪.‬‬
‫طور مثال‪:‬‬
‫‪50 < 200‬‬
‫‪X >Y‬‬
‫( ‪relation‬‬‫عبارت های فرو را بره نرام عبرارت هرای ارتبراطی‬
‫‪ )expressions‬یاد میکنندکه نتیمۀ آن ممکن درست و یرا نادرسرت‬
‫باشد‪ .‬اگرر قیمرت ‪ X = 10‬و ‪ Y = 5‬باشرد در آنصرورت ‪X > Y = True‬‬
‫میشود‪.‬‬
‫به صورت عموم‪ ،‬شش نوع عملگر های ارتباطی وجود دارد‪.‬‬
‫معنی‬ ‫عملگر‬
‫بزرگتر از‬ ‫>‬
‫کوچکتر از‬ ‫<‬
‫برزگتر و یا مساوی‬ ‫=>‬
‫کوچکتر و یا مسای‬ ‫=<‬
‫مساوی‬ ‫==‬
‫نا مساوی‬ ‫=!‬

‫دوعملگر اخیر را به نام عمگرهای مساوی (‪ )equality operators‬نیز‬


‫یادمیکند‪.‬‬
‫‪6.4‬‬ ‫مثال‬
‫‪i = 1, j‬‬ ‫‪ 3‬متحول تام مقابل را در نظر گیرید‪:‬‬
‫‪=2,k=7‬‬
‫قیمت تام‬ ‫قیمت منطقی‬ ‫عبارت ها‬
‫‪1‬‬ ‫درست‬ ‫‪i.‬‬ ‫‪10.5 < = 12‬‬
‫‪0‬‬ ‫نادرست‬ ‫‪ii.‬‬ ‫‪i = = 20‬‬
‫‪0‬‬ ‫نادرست‬ ‫‪iii.‬‬ ‫‪5 > 20‬‬
‫‪0‬‬ ‫نادرست‬ ‫‪iv.‬‬ ‫‪(I+j)>k‬‬
‫‪1‬‬ ‫درست‬ ‫‪v.‬‬ ‫)‪(j + k + 1 ) > ( i + 5‬‬
‫‪0‬‬ ‫‪vi.‬‬ ‫‪k!=7‬‬
‫نادرست‬
‫در مثال دوم و سوم فو ‪ ،‬عبارت های حاوی عبارت هرای‬
‫حسابی میباشد‪ .‬به همین خاطر در عبارات ارتباطی > ) ‪( + j‬‬
‫‪ k‬اول عبارت داخل قوس اجرا میگرددو بعد نتیمه برا )‪k‬‬

‫‪56‬‬
‫(مقایسه میشود‪ .‬این عملگر های حسابی نسبت به عملگرر‬
‫های ارتباطی دارای اولویت بیشترمیباشد‪ .‬عملگرر هرای‬
‫ارتباطی برای مقایسه دو مقدار در بیانیه های تصرمیم‬
‫گیری استفاده میگردد‪.‬‬
‫مثال ‪ :7.4‬برنامۀ ذیل طریقه استفاده عملگرهای ارتباطی (‪ )Relational operators‬را نشان میدهد‪.‬‬

‫‪// Program to show usage of relational operators‬‬


‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫; ‪int i = 1, j = 2, k = 7‬‬
‫; ‪cout <<"\n" << " Value of " << 10 << " <= " << 12‬‬
‫; ‪cout <<"\n"<< " Value of i" <<" ==" << 2‬‬
‫;‪cout <<"\n"<< " Value of " << 4 << " < " << 5‬‬
‫; ‪cout <<"\n"<< " Value of " << i + j << " != " << k‬‬
‫; ‪cout <<"\n"<< "Value of " << j + k + 1 << " > " << i + 5‬‬
‫; ‪cout <<"\n"<< "Value of " << k << " == " << 7‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Value of 10 <= 12‬‬
‫‪Value of i == 2‬‬
‫‪Value of 4 < 5‬‬
‫‪Value of 3 != 7‬‬
‫‪Value of 10 > 6‬‬
‫‪Value of 10 == 7‬‬

‫عملگرهای منطقی (‪)Logical Operators‬‬


‫این عملگرها برای یکمانمودن دو یرا بیشرتر از دو عبرارت‬
‫منطقی استفاده میگردد‪ .‬به صورت عموم‪ ،‬سه عملگر منطقی در‬
‫‪ C++‬وجود دارد کره عبرارت از ‪ AND‬منطقری‪ OR ،‬منطقری و ‪Not‬‬
‫منطقی می باشد‪.‬‬
‫معنی‬ ‫عملگر‬
‫‪ Not‬منطقی‬ ‫!‬
‫‪ AND‬منطقی‬ ‫&&‬
‫||‬
‫‪ OR‬منطقی‬
‫جدول ‪ 3.4‬عملگر های منطقی‬

‫‪57‬‬
‫‪ ‬نتیمه )‪ (AND‬منطقی وقتی درست می برآید که هردو قیمرت‬
‫درست باشد اما اگر یکی از این دو قیمرت هرا نادرسرت‬
‫باشد نتیمه )‪ (AND‬منطقی نیز نادرست میشود‪.‬‬
‫‪ ‬نتیمه (‪)OR‬منطقی در صورتی نادرست می برآید که هر دو‬
‫قیمت نادرست باشد اما اگر یکی از ایرن دو قیمرت هرا‬
‫درست باشد نتیمه (‪ )OR‬منطقی نیز درست میشود‪.‬‬
‫‪ C++ ‬یک عملگر دیگری به نام عملگر یکانی (!) که معنای‬
‫‪ NOT‬را ارایه میکنددارد که نتیمه یک عبارت منطقی را‬
‫همیشه برعکس آن نشان میدهد‪.‬‬
‫مثال ‪ :8.4‬اگر ‪ c = ‘a’ ، x = 5.1 ، i = 8‬باشد درصورتکه ‪ i‬دارای دیتا‬
‫تایس تام یا ‪ ، int‬متحول ‪ x‬اعشاری و ‪ c‬دارای دیتا تایس‬
‫حرفی یا ‪ character‬باشد‪.‬‬
‫استفاده عملگرهای منطقی را ذیال مشاهده نمایید‪.‬‬

‫قیمت تام (‪)Integer value‬‬ ‫قیمت منطقی (‪)Logical value‬‬ ‫عبارت (‪)Expression‬‬
‫‪( 1‬خالف صفر)‬ ‫‪True‬‬ ‫)’‪) i > 6 ( && ( c = = ‘a‬‬
‫‪0‬‬ ‫‪False‬‬ ‫)’‪i < = 6 || ( c = = ‘b‬‬
‫‪1‬‬ ‫‪True‬‬ ‫)‪i >= 6 && ( c = = 97‬‬
‫‪1‬‬ ‫‪True‬‬ ‫)‪(x < 10) || ( I > 10‬‬
‫‪1‬‬ ‫‪True‬‬ ‫)‪! ( i < = 4‬‬
‫‪1‬‬ ‫‪True‬‬ ‫)’‪( c ! = ‘p‬‬
‫جدول ‪ 4.4‬جدول حقیقت (‪ )truth table‬برای عملگرهای منطقی‬
‫نتیجه شرط اول‬ ‫نتیجه‬ ‫نتیجه‬ ‫شرط دوم‬ ‫شرط اول‬
‫‪!a‬‬ ‫‪a || b‬‬ ‫‪a && b‬‬ ‫‪B‬‬ ‫‪A‬‬
‫)‪ (False‬نادرست‬ ‫)‪ (True‬درست‬ ‫)‪ (True‬درست‬ ‫)‪ (True‬درست‬ ‫)‪ (True‬درست‬
‫)‪ (False‬نادرست‬ ‫)‪ (True‬درست‬ ‫)‪ (False‬نادرست‬ ‫)‪ (False‬نادرست‬ ‫)‪ (True‬درست‬
‫)‪ (True‬درست‬ ‫)‪ (True‬درست‬ ‫)‪ (False‬نادرست‬ ‫)‪ (True‬درست‬ ‫)‪ (False‬نادرست‬
‫)‪ (True‬درست‬ ‫)‪ (False‬نادرست‬ ‫)‪ (False‬نادرست‬ ‫)‪ (False‬نادرست‬ ‫)‪ (False‬نادرست‬

‫جدول ‪ 5.4‬توضیح جدول حقیقت (‪ )truth table‬برای عملگرهای منطقی‬

‫عملگر = (‪)Assignment Operators‬‬


‫این عملگر ( ) وقتی استفاده میشودکه به یک متحول‪ ،‬ثابرت‬
‫و یا عبارت قیمت داده شود‪.‬‬
‫ساختار این عملگر قرار ذیل است‪:‬‬
‫;‪variable = variable / constant / expression‬‬
‫‪58‬‬
‫طور مثال‪:‬‬
‫; ‪ X = 10‬در این عبارت قیمت ‪ X‬عبارت از ‪10‬میباشد‪.‬‬
‫; ‪ B = X‬در این عبارت قیمت ‪ X‬کره عبرارت از ‪ 10‬اسرت توظیرف‬
‫میشود‪.‬‬
‫; ‪ Sum = X + B‬در این عبارت ممموعۀ ‪ X‬و ‪ B‬که عبارت از ‪ 20‬مری‬
‫شوددر متحول ‪ Sum‬ذخیره میشود‪.‬‬
‫مثال ‪ :9.4‬برنامۀ ذیل مجموعه ‪ 4‬عدد را دریافت نموده روی سکرین نشان میدهد‪.‬‬
‫‪// Program to print sum of 4 numbers‬‬
‫> ‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫; ‪int a, b, c, d, sum‬‬
‫; “ ‪cout << “\n “ << “ Enter 4 numbers :‬‬
‫;‪cin >> a >> b >> c >> d‬‬
‫; ‪sum = a + b + c + d‬‬ ‫‪// assignment statement‬‬
‫; ‪cout << “\n“ << sum‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter 4 numbers : 10 15 22 40‬‬
‫‪Sum = 87‬‬

‫; ‪Variable operator = expression‬‬


‫طور مثال‪:‬‬
‫‪N=N+5‬‬ ‫;‬
‫را میتوان به شکل مختصر چنین نوشت‪:‬‬ ‫بیانیۀ فو‬
‫;‪N+=5‬‬
‫=‪ +‬شکل اختصاریافتۀ بیانیۀ فرو (‪ )N = N + 5‬اسرت‬ ‫در این جا‬
‫عملگر ترکیبأی (‪ )compound operator‬یادمیشرود‪ += .‬بره‬ ‫که به نام‬
‫) اضرافۀ‬ ‫است که ‪ 5‬را با قیمت ‪( N‬سرمت راسرت‬ ‫معنای این‬
‫نهایت نتیمه در ‪( N‬سمت چس ) ذخیره میشود‪.‬‬ ‫میکندو در‬
‫قرار ذیل است‪.‬‬ ‫عملگرهای اختصار یافته‬ ‫تعدادی از‬
‫معنا‬ ‫عملگر‬ ‫= به شکل ترکیبی‬ ‫= به شکل عادی‬
‫=‬ ‫‪ +‬و‬ ‫=‪+‬‬ ‫‪n‬‬ ‫‪+=1‬‬ ‫‪n=n+1‬‬
‫=‬ ‫‪ -‬و‬ ‫=‪-‬‬ ‫‪n‬‬ ‫‪- = 50‬‬ ‫‪n = n – 50‬‬
‫=‬ ‫* و‬ ‫=*‬ ‫‪n‬‬ ‫‪* = 10‬‬ ‫‪n = n * 10‬‬
‫=‬ ‫‪ /‬و‬ ‫=‪/‬‬ ‫‪n‬‬ ‫‪/=6‬‬ ‫‪n=n/6‬‬
‫=‬ ‫‪ %‬و‬ ‫=‪%‬‬ ‫‪n‬‬ ‫‪%=5‬‬ ‫‪n=n%5‬‬

‫‪59‬‬
‫جدول ‪ 6.4‬توضیح عملگرهای اختصاریافته‬
‫فواید عملگرهای مختصر (‪)Advantages of shortened Assignment Operators‬‬
‫راسرت‬ ‫‪ .1‬متحول سمت چس ززم نیست که برار دوم در سرمت‬
‫نوشته شود‪.‬‬
‫عبرررارت کوتررراه و مختصرررر میگررررددو خوانررردن آن‬ ‫‪.2‬‬
‫آسانترمیشود‪.‬‬
‫دارای موثریت (‪ )efficient‬عالی میباشد‪.‬‬ ‫‪.3‬‬
‫تفاوت بین عملگر == و =‬
‫مساوی‬ ‫و به نام عالم‬ ‫‪ == .1‬از جملۀ عملگرهای مقایسوی است‬
‫برای مقایسه نمودن‬ ‫(‪ )equalityoperator‬یادمیشود‪ .‬این عملگر‬
‫دو قیمت استفاده میشود‪ .‬طور مثال‪:‬‬
‫)‪If (x = = 10‬‬
‫در حالیکه = عملگر توظیف (‪ )assignmen operator‬است که یرک‬
‫قیمت را در متحول توظیف مینمایرد‪ .‬عملگرر توظیأف (=)‬
‫قیمت که در سمت راست آن قرار دارد در متحول سمت چرس‬
‫= ذخیره میکند‪ .‬طور مثال‪:‬‬
‫; ‪Y = 20‬‬
‫عملگر (==) قیمت متحول را که در سمت چرس قررار دارد‬ ‫‪.2‬‬
‫تغییرنمیدهد‪ .‬در حالیکه = قیمت سرمت چرس عالمره = را‬
‫تغییرمیدهد‪.‬‬
‫چندین عملگر = (‪)Multiple Assignment‬‬
‫بیانیه‬ ‫یک‬ ‫در‬ ‫را‬ ‫چندین‬ ‫‪ C++‬به ما اجازه میدهدکه‬
‫استفاده نماییم مانند‪:‬‬
‫; ‪Variable = Variable1 = Variable2 = ……= Experssion‬‬

‫در اینمررا عالمررۀ = پرری یررکدیگراز سررمت راسررت برره چررس‬


‫به معنای ‪X = ( Y = ( Z = 10‬‬ ‫‪X = Y = Z = 10‬‬ ‫اجرامیگردد‪ .‬طور مثال‬
‫)))میباشد‪ .‬در اینما ‪ 10‬در قدم نخست در ‪ Z‬ذخیره می شود؛ در‬
‫قدم دوم قیمت ‪ Z‬که عبارت از ‪ 10‬میباشددر ‪ Y‬ذخیرره شرده و‬
‫به همین ترتیب قیمت ‪ Y‬در ‪ X‬ذخیره میشود‪ .‬در اخیر قیمت ‪،X‬‬
‫‪ Z ،Y‬مساوی به ‪ 10‬خواهد بود‪.‬‬
‫مثال ‪ :10.4‬برنامۀ ذیل عدد بزرگتر بین ‪ 2‬عدد وارد شده را دریافت مینماید‬
‫‪// Program to find Largest of 2 numbers‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫; ‪int n, m, big‬‬
‫; “ ‪cout << “\n“ << “Enter two integer numbers :‬‬
‫‪60‬‬
cin >> n >> m ;
big = ( n > m ) ? n : m ;
cout << “\n“ << “The Largest of “ << n <<” and “ << m << “ is : “ << big ;
}
Output
Enter two integer number : 10 56
The Largest of 10 and 56 is : 56

. ‫ برنامۀ ذیل عدد ورودی را چک نموده که تاق است و یا جفت‬:11.4 ‫مثال‬


// Program to find whether a numer is even or odd
# include <iostream.h>
main) (
{
int x ;

cout << "\n" << "Enter a number; " :


cin >> x;
) x % 2 == 0 ) ? cout << x << " is even " : cout <<x << " is odd ;"
}
Output
Enter a number : 17
17 is odd
Enter a number : 20
20 is even

.‫ مضمون وارد شده را دریافت مینماید‬4 ‫ برنامۀ ذیل بلندترین نمره بین نمرات‬:12.4 ‫مثال‬
//Program to find the highest marks of a student in 4 Exams
# include <iostream.h>
main) (
{
int m1, m2, m3, m4, highest;
cout << "\n " << "Enter the marks in 4 papers : " << "\n ";
cin >> m1 >> m2 >> m3 >> m4;
highest = m1 > m2 ? m1 : m2;
highest = highest > m3 ? highest : m3;
highest = highest > m4 ? highest : m4 ;
cout << "\n " << "Highest marks in 4 papers = " << highest;
}
Output
Enter the marks in 4 papers :
56 74 66 60
Highest marks in 4 papers = 74

61
‫عملگر بیتی (‪)Bitwise Operators‬‬
‫این عملگر هرا بخراطر کرار کردن روی بیرت هرا اسرتفاده‬
‫میشوند‪ .‬در ‪ C++‬این عملگر ها قرار ذیل اند‪:‬‬
‫عملگر بیتی )&(‪AND‬‬ ‫‪.i‬‬
‫عملگر بیتی )|(‪OR‬‬ ‫‪.ii‬‬
‫عملگر بیتی )^(‪XOR‬‬ ‫‪.iii‬‬
‫‪ .iv‬عملگر بیتی )~(‪NOT‬‬
‫عملگر بیتی تغیر مکان به سمت چس )<<(‪Shift left‬‬ ‫‪.v‬‬
‫‪ .vi‬عملگر بیتی تغیر مکان به سمت راست )>>(‪Shift right‬‬

‫عملگر بیتی (&) ‪AND‬‬


‫عملکرد عملگر بیتی ‪ AND‬شبیه عملگر منطقی ‪ AND‬است‪ .‬با این‬
‫تفاوت که عملگر بیتی کارش روی بیرت انمرام میدهرد‪ .‬اگرر‬
‫قیمت هردو طرف (‪ )1‬باشد پس نتیمه (‪ )1‬در غیر آن قیمت (‪)0‬‬
‫میشود‪.‬‬

‫عملگر بیتی (|) ‪OR‬‬


‫این عملگر نیز شبیه عملگر منطقری (‪ )OR‬اسرت‪ .‬اگرر تمرام‬
‫قیمت ها یکسان باشد قیمت (‪ )0‬در آنصورت قیمت (‪ )0‬در غیرر‬
‫آن قیمت (‪ )1‬میشود‪.‬‬

‫عملگر بیتی (~) ‪NOT‬‬


‫و‬ ‫‪0‬‬ ‫را‬ ‫‪1‬‬ ‫این عملگر مقدار بیت هارا معکوس میکنرد‪ (.‬قیمرت‬
‫قیمت ‪ 0‬را به یک تبدیل میکند)‬

‫عملگر بیتی (^) ‪XOR‬‬


‫در صورتیکه مقادیر های هردو طرف این عملگر هردو (‪ )0‬ویا‬
‫(‪ )1‬باشد قیمت (‪ )0‬در غیر آن قیمت (‪ )1‬میشود‪.‬‬

‫عملگر بیتی تغیر مکان به سمت چپ (<<) ‪Shift Left‬‬


‫را بره تعرداد ‪ n‬مکران‬ ‫این عملگر بیت های ‪ Operand‬سمت چرس‬
‫سمت چس منتقل میکند‪.‬‬ ‫مشخص شده توسط ‪ Operand‬سمت راست‪ ،‬به‬
‫‪10 = 00001010‬‬
‫‪10<<2 = 00101000‬‬

‫عملگر بیتی تغیر مکان به سمت راست (<<) ‪Shift Right‬‬


‫‪62‬‬
‫این عملگر شبیه به عملگر تغیر مکان به سمت چرس اسرت برا‬
.‫این تفاوت که بیت ها را به سمت راست انتقال میدهد‬
100 = 0110100
100>>3 =00000110
AND, OR, NOT, XOR ‫جدول درستی عملگر های‬
X Y ~X ~Y AND OR XOR
1 1 0 0 1 1 0
1 0 0 1 0 1 1
0 1 1 0 0 1 1
0 0 1 1 0 0 0
‫ درستی عملگر های بیتی‬7.4 ‫جدول‬

.C++ ‫ استفاده عملگرهای بیتی در‬:13.4 ‫مثال‬

#include <iostream.h>
main ( )
{
int And, Or, Not_a, Not_b, Xor;
int a = 8 , b=5;
And = a & b;
Or = a | b;
Not_a = ~a;
Not_b = ~b;
Xor = a ^ b;
cout <<"The Value of a&b is: "<< And << endl;
cout <<"The Value of a|b is: "<< Or << endl;
cout <<"The Value of a NOT is: "<< Not_a << endl;
cout <<"The Value of b NOT is: "<< Not_b << endl;
cout <<"The Value of a^b is: "<< Xor << endl; return 0;
}
Output
The Value of a&b is: 0
The Value of a|b is: 13
The Value of a NOT is: -9
The Value of b NOT is: -6
The Value of a^b is: 13

63
‫عملگر های سه تایی (‪)Ternary Operators‬‬
‫این عملگرها بازی سه عنصر دیترا اجرامیشرود‪ .‬عملگرر سره‬
‫تایی ( ‪ ) ? :‬به نرام عملگرر شررطی نیرز یرادمیگردد‪(.‬این‬
‫عملگر ها در فصل پنمم به بحث گرفته شده است)‬

‫عملگر های خاص (‪)Special Operators‬‬


‫‪Sizeof‬میباشد‪.‬‬ ‫این نوع عملگرها شامل کامه (‪ )،‬و‬

‫عملگر )‪(sizeof‬‬
‫را‬ ‫این عملگر اندازا قیمت وارد شده در سرمت راسرت‬ ‫‪.i‬‬
‫به شکل بایت نشان میدهد‪.‬‬
‫ساختار این عملگر قرار ذیل است‪:‬‬ ‫‪.ii‬‬
‫)‪sizeof (n‬‬
‫میتوانردمتحول‪ ،‬ثابرت و یرا دیترا تایرس‬ ‫در اینما‬ ‫‪n‬‬
‫باشد‪.‬‬
‫این یک عملگر یکتایی است که از راست به چرس در نظرر‬ ‫‪.iii‬‬
‫گرفته میشود‪.‬‬
‫این عملگر جهت تعیین و یا تشخیص نمرودن انردازا صرف‬ ‫‪.iv‬‬
‫(‪ )array‬و یا ‪ structure‬اسرتفاده میگرردد‪ .‬ایرن عملگرر را‬
‫میتوانیم جهت جابما نمرودن متحرول در حافظره متحرر‬
‫(‪ )dynamic memory‬نیز استفاده کرد‪.‬‬

‫مثال ‪ :14.4‬برنامۀ ذیل شیوه استفاده عملگر ‪ sizeof‬را نشان میدهد‪.‬‬

‫‪64‬‬
// Program to show usage of sizeof operator
#define STRING "Usage of sizeof Operator"
#include <iostream.h>
main ( )
{
char a = ' p ' ;
cout << "\n" << " The size of char is : " << sizeof (char) ;
cout << "\n" <<" Therefore the size of char a is :" << sizeof (a) ;
cout << "\n" <<" However the size of ' p ' is :"<< sizeof ( 'p');
cout << "\n\n" << "STRING Usage of sizeof Operator\n";
cout << " \n" << " The number of bytes in STRING IS :" << sizeof (STRING) ;
cout <<"\n" << "The size of short is :" << sizeof (short);
cout << "\n " << "The size of int is :" << sizeof (int) ;
cout << "\n " << "The size of long is :" << sizeof (long) ;
cout << " \n " <<"The size of float is :" << sizeof (float) ;
cout << " \n " << "The size of double is :" << sizeof (double) ;
}

Output
The size of char is : 1
Therefore the size of char a is : 1
However the size of ‘ p ‘ is : 1
STRING “ Usage of size Operator “
The number of bytes in STRING IS : 25
The size of short is : 2
The size of int is : 4
The size of long is : 4
The size of float is : 4
The size of double is : 8

)Expressions( ‫عبارت ها‬


)constants( ‫ ثابت ها‬،)operators( ‫عبارت های مماز شامل عملگرها‬
‫ اینهررا ممکررن حرراوی تررابع‬.‫)میباشررد‬vairables( ‫و متحولهررا‬
return ( ‫) نیز باشد که قیمتهارا بازگشرت‬function calls( ‫صداکننده‬
.)Rama, 2011(‫) میدهد‬values

‫وجرود دارد کره‬ C++ ‫به صورت عموم چهار نوع عبارت در لسان‬
:‫عبارت اند از‬
)Constant Expression ( ‫ عبارت ثابت‬

65
‫‪ ‬عبارت حسابی (‪)Arathematic Expression‬‬
‫‪ ‬عبارت ارتباطی (‪)Relational Expression‬‬
‫‪ ‬عبارت منطقی (‪)Logical Expression‬‬

‫عبارت که از ترکیب عبارت های فو به میان میآیدبره نرام‬


‫عبارت ترکیبی (‪ )Compound expression‬یادمیشود‪.‬‬
‫عباارت ثابات (‪ :)Constant Expression‬عبارت ثابت آن است که در تشکیل خویش‬
‫تنها قیمتهای ثابت را داشته باشد‪.‬‬
‫عباارت حساابی (‪ :)Arithmatic Expression‬آن است که در ترکیب خرویش متحولهرا‪،‬‬
‫ثابتهاو عملگر های حسابی را داشته باشد‪.‬‬
‫عبارت ارتبااطی (‪ :)Relational Expression‬آن است که در ترکیرب خرود متحولهرا‪،‬‬
‫ثابتها ‪ ،‬عملگر های حسرابی و مقایسروی را داشرته باشرد‪.‬‬
‫نتیمۀ این عبارتهابه شکل ‪ true‬یا ‪ false‬ظاهرمیگردد‪.‬‬
‫عبارت منطقی (‪ :)Logical Expression‬آن است کره در آن دو یرا بیشرتر از دو‬
‫عملگر ارتباطی به کمک عملگر های منطقی وصرل شرده باشرد‪.‬‬
‫نتیمۀ این عبارت به شکل (‪ )true‬و( ‪) false‬ظاهرمیشود‪.‬‬
‫بیانیه ها (‪)Statements‬‬
‫بیانیه بخش مهمی یک برنامه اسرت کره قابل یت اجررا شردن‬
‫(‪ )executation‬را داشته باشد (‪.)Overland, 2013‬‬
‫یک بیانیه مشخصات ذیل را داراست‪:‬‬
‫‪ ‬بیانیه یک بخش کوچکی از برنامه است کره قابلیرت اجررا‬
‫شدن را دارد‪.‬‬
‫‪ ‬تمام بیانیه ها باید به سیمی کولن (;) ختم گردد‪.‬‬
‫‪ ‬ممموعۀ دستورهای که در یک بال قرار دارد و یکما بایرد‬
‫اجرا گردد نیاز است که در بین یک جفرت قروس برزرگ { }‬
‫نوشته شود‪.‬‬

‫بیانی های انتخابی شامل ) ( ‪ if‬و ‪ switch‬میباشد‪.‬‬


‫بیانی هأای تکأراری شرامل حلقره ‪ for ، while‬و ‪do-while‬میباشرد‪.‬‬
‫اینها را به نام بیانیه های حلقوی نیز یادمیکند‪.‬‬
‫رررامل ‪ goto ، continue ،break‬و‬
‫بیانیأأأأ هأأأأای پأأأأر (‪ )Jump‬شر‬
‫‪return‬میباشد‪.‬‬
‫‪66‬‬
‫بیانی های ‪ label‬شامل ‪ default ،case‬و ‪ goto‬میباشد‪.‬‬
‫عبارت (‪ )Expression statement‬از عبارت هرای ممراز ترکیرب‬ ‫بیانی‬
‫شده اند‪.‬‬
‫بیانی های بالک که به نام بیانیره هرای ترکیبری نیرز یراد‬
‫میشوداز ممموعۀ بیانیه های است که در بین جوره قوسرهای‬
‫بزرگ (‪ )Braces‬نوشته میشود‪.‬‬

‫ارزیابی عبارت ها (‪)Evaluation of Expressions‬‬


‫اگرخواسته باشیم یک بیانیه را ارزیابی نماییم ززم است‬ ‫‪‬‬
‫تا افاده المبری را به افاده ‪ C++‬تبدیل نماییم‪.‬‬
‫ری ( ‪assignment‬‬‫رت = یعنر‬
‫ره فارمر‬
‫ررا بر‬
‫رد آنر‬‫ردم دوم بایر‬
‫در قر‬ ‫‪‬‬
‫‪ )statement‬نوشته نماییم‪.‬‬
‫رابی گرردد‬ ‫تمام متحولهای سمت راست قبل از اینکه ارزیر‬ ‫‪‬‬
‫باید قیمت داده شود‪.‬‬
‫در هر جای که نیاز به عملگر است باید ذکرگردد‪.‬‬ ‫‪‬‬
‫در زبان‪ C++‬عملگر خاص برای توان وجود ندارد و به همرین‬ ‫‪‬‬
‫میشود‬ ‫خاطر از تابع ‪ pow‬استفاده صورت‬
‫عبارت های ‪C++‬‬ ‫عبارت های حسابی‬

‫‪1. a * b +‬‬ ‫‪c‬‬ ‫*‬ ‫‪d‬‬ ‫‪1.‬‬ ‫‪ab + cd‬‬


‫) ‪2. ( a + b ) * ( a – b‬‬ ‫‪2.‬‬ ‫)‪(a+b)(a-b‬‬
‫𝑎‬
‫‪3.‬‬ ‫‪+d‬‬
‫‪3. ( a / b ) + d‬‬ ‫𝑏‬
‫‪2𝑥 2 + 3𝑥 − 1‬‬
‫‪4. ( 2 * x * x + 3 * x - 1) / 10‬‬ ‫‪4.‬‬
‫‪10‬‬
‫𝑐𝑎‪−𝑏±√𝑏2 −4‬‬
‫)‪5. root = (-b+sqrt (b*b –4*a*c) / (2*a‬‬ ‫‪5.‬‬ ‫= ‪root‬‬
‫𝑎‪2‬‬
‫𝑏‬
‫‪6. a * a – b / 2 + c * c‬‬ ‫‪6.‬‬ ‫‪2‬‬
‫‪a -‬‬ ‫‪+ c‬‬ ‫‪2‬‬
‫‪2‬‬

‫‪C++‬‬ ‫جدول ‪ 6.5‬نشان دهندۀ چند مثال حسابی و تبدیل آن به عبارات‬

‫‪67‬‬
‫حق اولویت عملگرها (‪)Precedence of Operators‬‬
‫حق اولویت عملگرها وقتری مطررح میشرودکه در یرک بیانیره‬
‫چندین عملگر وجود داشته باشد‪.‬‬
‫‪ ‬عملگررری کرره حررق اولویررت بیشررتر دارد اول اجرررا‬
‫میگردد(‪.)Oualline, 1995‬‬
‫‪ ‬اگرعملگررر هررا دارای حررق اولویررت مسرراوی باشررند در‬
‫آنصورت ‪ ،‬اول عملگرری اجررا مریگرددکره در سرمت چرس‬
‫بیانیه موقعیت دارد‪.‬‬
‫)‪(a<10 && a + b >15‬‬ ‫طور مثال‪:‬‬
‫اگر قیمت ‪ a = 20‬و ‪ b =1‬باشد‪.‬‬
‫در آن صورت اولویت بندی قرار ذیل میباشد‪:‬‬
‫‪ .i‬طوریکه ‪ +‬از بازترین اولویت در این عبارت برخروردار‬
‫است به همین خاطرعملیه جمع اول آنمام میشود‪.‬‬
‫‪a < 10 && 21 > 15‬‬
‫هر دو عملگر ارتباطی (< و >) در قدم دوم حق اولویرت‬ ‫‪.ii‬‬
‫بیشتر نظر به عملگرر منطقری (&&) دارد‪ .‬پرس‪ ،‬عملگرر‬
‫ارتباطی که در سمت چس وجود دارددوم و بره تعقیرب آن‬
‫عملگر سمت راست سوم اجرامیشود‪.‬‬
‫‪20 < 10 && 21 > 15‬‬
‫‪false && true‬‬
‫نادرست یا (‪ )false‬یا ‪0‬میشود‪.‬‬ ‫نتیمه عملگر منطقی (&&)‬ ‫‪.iii‬‬
‫حق اولویت بندی‬ ‫جهت فعالیت‬ ‫کتگوری عملگر‬ ‫عملگر‬
‫صداکردن تابع‪ ،‬قوسهای کوچک‬ ‫) (‬
‫‪1‬‬ ‫از چپ به راست‬ ‫عناصر صنف‬ ‫] [‬
‫انتخاب عناصر‬ ‫‪→,.‬‬

‫‪68‬‬
‫جمع یکتایی‬ ‫‪+‬‬
‫منفی یک‬ ‫‪-‬‬
‫تایی‬ ‫‪++‬‬
‫افزودن‬ ‫‪--‬‬
‫کاهش‬ ‫!‬
‫‪ Not‬منطقی‬ ‫~‬
‫‪One’s complement‬‬ ‫*‬
‫‪2‬‬ ‫از راست به چپ‬ ‫‪Pointer reference‬‬ ‫)‪Sizeof (type‬‬
‫آدرس یی‬
‫اندازه متحول‬
‫عملگر ‪cast‬‬

‫‪3‬‬ ‫از چپ به راست‬ ‫ضرب‪ ،‬تقسیم و باقیمانده‬ ‫‪*, / , %‬‬


‫‪4‬‬ ‫از چپ به راست‬ ‫جمع و تفریق‬ ‫‪+,-‬‬
‫‪5‬‬ ‫از چپ به راست‬ ‫شفت راست و شفت چپ‬ ‫>> ‪<< ,‬‬
‫‪6‬‬ ‫از چپ به راست‬ ‫عملگر های ارتباطی‬ ‫=> > ‪<, <=,‬‬
‫‪7‬‬ ‫از چپ به راست‬ ‫عملگر مساوی‬ ‫=! ‪== ,‬‬
‫‪8‬‬ ‫از چپ به راست‬ ‫‪ AND‬بیت وایز‬ ‫&‬
‫‪9‬‬ ‫از چپ به راست‬ ‫‪ XOR‬بیت وایز‬ ‫^‬
‫‪10‬‬ ‫از چپ به راست‬ ‫‪ OR‬بیت وایز‬ ‫|‬
‫‪11‬‬ ‫از چپ به راست‬ ‫‪ AND‬منطقی‬ ‫&&‬
‫‪12‬‬ ‫از چپ به راست‬ ‫‪ OR‬منطقی‬ ‫||‬
‫‪13‬‬ ‫از راست به چپ‬ ‫عملگر شرطی‬ ‫‪?:‬‬
‫‪14‬‬ ‫مساوی‬ ‫=‬
‫عملگر های ‪ AND‬به شکل سمبولها‬ ‫=*‬
‫مساوی‬ ‫=‪/‬‬
‫=‪%‬‬
‫=‪+‬‬
‫از راست به چپ‬ ‫=‪-‬‬
‫=&‬
‫=^‬
‫=!‬
‫=<<‬
‫=>>‬
‫‪15‬‬ ‫از چپ به راست‬ ‫عملگر کامه‬ ‫‪,‬‬
‫‪C++‬‬ ‫جدول ‪ 8.4‬توضیح حق اولویت بندی تمام عملگرهای‬

‫‪69‬‬
‫مثال ‪ :15.4‬در مثال ذیل چرا اوسط نمرات به شکل درست محاسبه نگردیده است؟‬

‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫;‪int Computer = 90‬‬
‫;‪int English = 60‬‬

‫‪float Average = Computer + English / 2 ; // Mistake of precendence order‬‬


‫;‪cout << " \n The Average = "<< Average‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪The Average = 120‬‬
‫در مثال فو دیده میشرودکه اوسرط نمررات بره شرکل درسرت‬
‫محاسبه نگردیده‪ .‬به خاطریکه در فورمول فرو عالمره ‪ +‬و‬
‫وجود دارد و تقسیم اول اجرا گردید‪ .‬نیاز اسرت کره قسرمت‬
‫صورت فورمول باید بین قوسهای کوچک در گردد ترا در قردم‬
‫اول قسمت صورت اجرا و بعد تقسیم مخر گردد‪.‬‬

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

‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫;‪int Computer = 90‬‬
‫;‪int English = 60‬‬

‫; ‪float Average =( Computer + English ) / 2‬‬


‫;‪cout << " \n The Average = "<< Average‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪The Average = 75‬‬
‫بعضی مسایل محاسباتی (‪)Some Computational Problems‬‬
‫در اثنای محاسبۀ عبارتهرامختلط (‪ )mixed mode expressions‬بعضری‬
‫مسایل رخ میدهدکه سبب بروز اشتباه در محاسبه میشود‪.‬‬
‫دو مشکل عمدا محاسباتی کره معمروز در اثنرای محاسربه رخ‬
‫میدهد قرار ذیل اند‪:‬‬
‫‪ ‬اگر یک عدد بازی ‪ 0‬تقسیم گردد یک مشکلی دیگر محاسباتی‬
‫بروزمینماید‪ .‬تقسریم یرک عردد برازی ‪ 0‬سربب میگرددکره‬
‫‪70‬‬
‫برنامه به شکل غیر عادی (‪ )abnormal‬اختتام یابد‪ .‬به همین‬
‫خاطر ززم است که هیچ عدد تقسیم ‪ 0‬نشود‪.‬‬
‫سرریز (‪ )overflow‬و پاریز (‪ )underflow‬مشرکل دوم اسرت کره در‬ ‫‪‬‬
‫محاسبات رخ میدهد‪ .‬به این خاطر ززم است که متحولها به‬
‫دیتاتایس درست تعریف شودو قیمتی که به همین متحرولهرا‬
‫وارد میشودنیز در رنج درست قرار داشته باشد‪.‬‬

‫مثال ‪ :17.4‬برنامۀ ذیل مجموعه سلسله ذیل را دریافت مینماید‪.‬‬


‫‪/* Program to find the summation of the series‬‬
‫‪S = 1 +1 / 2 + 1 + …….+ 1 / n using cast operator */‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫; ‪float s = 0‬‬
‫; ‪int n, i‬‬
‫; “ ‪cout << “ \n “ << “ Enter the value of n :‬‬
‫; ‪cin >> n‬‬
‫) ‪for ( i = 1 ; i < = n ; i ++‬‬
‫; ‪s = s + 1 / ( float ) i‬‬
‫; ‪cout << “ \n “ << “ Sum of series : “ << s‬‬
‫}‬
‫‪Output‬‬
‫‪Enter the value of n : 3‬‬
‫‪Sum of series : 1 . 833‬‬

‫توابع کتابخانه(‪)Library Functions‬‬


‫زبان‪ c++‬دارای توابع مختلف کتابخانه یی است که غرض اجرای‬
‫عملیات مختلف مورد استفاده قرارمیگیرد‪ .‬ایرن توابرع بره‬
‫شکل گروپی مانند ‪ object‬در کتابخانره هرای جداگانره قررار‬
‫دارد (‪.)Halterman, 2018‬‬
‫رابع دیگرر‬
‫‪ ‬یک تابع کتابخانه یی را وقتی میتوانیم از تر‬
‫به دسترس قرار دهیم که نام تابع و لست ‪ argument‬هرای کره‬
‫معلومات را به تابع بازگشت میدهددر تابع ذکر شود‪.‬‬
‫‪ ‬ارگومنتهاباید در داخل قوس در گردد اما توسط کامه از‬
‫همدیگر جدا گردد‪.‬‬
‫‪ ‬ارگومنت میتواندثابت‪ ،‬متحول و یا عبارت باشد‪.‬‬

‫تابع حسابی (‪)math.h‬‬


‫‪71‬‬
header ( ‫این تابع یکی از توابع مهم است که در فایرل صردری‬
.)Meyers, 2005(‫ ظاهر میشود‬math.h ‫) به نام‬file

.‫ برنامۀ ذیل جذر مربع هر عدد وارد شده از صفحه کلید را دریافت مینماید‬:18.4 ‫مثال‬

// program to find Square Root of any number inserted from keyboard


#include <iostream.h>
#include <math.h> // required for sqrt function
main ( )
{
// Declaration
double Number, SQR;
cout << "Enter a number to find its Square Root : ";
cin >> Number;
SQR = sqrt (Number);
cout << " The square root of "<< Number << " = " << SQR;
return 0;
}
Output
Enter a number to find its Square Root : 36
The square root of 36 = 6

.‫ برنامۀ ذیل هر عدد را به هر توان وارد شده دریافت مینماید‬:19.4 ‫مثال‬

#include <iostream.h>
#include <math.h> // required for pow function
main ( )
{
// Declaration
double Base, Exponent, Result;
cout << "Enter value for Base and Power : ";
cin >> Base >> Exponent;
Result = pow(Base, Exponent);
cout << Base <<" ^ " << Exponent << " = " << Result;
return 0;
}
Output
Enter value for Base and Power : 2 3
2^3=8

.‫ برنامۀ ذیل هر جذر هر عدد وارد شده را دریافت مینماید‬:20.4 ‫مثال‬

72
#include <iostream.h>
#include <math.h> // required for pow function
main ( )
{
// Declaration
double Base, Root, Result;
cout << "Enter value for Base and Root : ";
cin >> Base >> Root;
Result = pow(Base, 1/Root);
cout << Base <<" Jazar " << Root << " = " << Result;
return 0;
}
Output
Enter value for Base and Root : 32 5
32 Jazar 5 = 2

.‫ برنامۀ ذیل لوگاریتم هر عدد وارد شده را دریافت مینماید‬:21.4 ‫مثال‬

#include <iostream.h>
#include <math.h> // required for log function
main ( )
{
// Declaration
double Number, Log1, Log2;
cout << "Enter a number to find its logarithm : ";
cin >> Number;
Log1 = log10(Number); //Finds log of any number on base 10
Log2 = log(Number); //Finds log of any number on base e
cout << " Log10 " << Number << " = " << Log1;
cout << " LogE " << Number << " = " << Log2;
return 0;
}
Output
Enter a number to find its logarithm : 100
Log10 100 = 2
LogE 100 = 4.605

.‫ برنامۀ ذیل ساین هر زاویۀ که از نوع درجه باشد دریافت مینماید‬:22.4 ‫مثال‬

#include <iostream.h>
#include <math.h> // required for sin function
main ( )
{
// Declaration

73
double Number, SN;
cout << "Enter an angle size to find its Sin : ";
cin >> Number;
SN = sin(Number * 3.14159 / 180);
cout << " Sin " << Number << " = " << SN;
return 0;
}
Output
Enter an angle size to find its Sin : 30
Sin 30 = 0.5
‫) هر زاویه را میتوانیدبه شیوه فوق دریافت‬tan( ‫) و تانجانت‬cos( ‫قابل یاد آوری است که کوساین‬
.‫نمایید‬
.‫ برنامۀ ذیل کوتانجانت هر زاویۀ که از نوع درجه باشد دریافت مینماید‬:23.4 ‫مثال‬

#include <iostream.h>
#include <math.h> // required for Cotengent function
main ( )
{
// Declaration
double Number, cot;
cout << "Enter an angle size to find its Cotengent : ";
cin >> Number;
cot = 1/tan(Number * 3.14159 / 180);
cout << " Cotengent " << Number << " = " << cot;
return 0;
}
Output
Enter an angle size to find its Cotengent : 45
Cotengent 45 = 1
.‫) را به شیوۀ فوق دریافت نمایید‬1/sin( ‫کوسکینت‬ ‫) و‬1/cos( ‫شما میتوانیدکه سکینت‬

.‫ را به توان عدد وارد شده از کیبورد باالمیبرد‬e = 2.7182 ‫ برنامۀ ذیل قیمت‬:24.4 ‫مثال‬

#include <iostream.h>
#include <math.h>
main ( )
{
// Declaration
double Number, R;
cout << "Enter a number: ";
cin >>Number;
R = exp (Number);
cout << " Result = " << R;
74
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter a number : 2‬‬
‫‪Result = 7.389‬‬

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

‫>‪#include <iostream.h‬‬
‫>‪#include <math.h‬‬
‫) ( ‪main‬‬
‫{‬
‫‪// Declaration‬‬
‫;‪int N, R‬‬
‫;" ‪cout << "Enter a number:‬‬
‫;‪cin >>N‬‬
‫;)‪R = abs (N‬‬
‫;‪cout << " Result = " << R‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter a number : -200‬‬
‫‪Result = 200‬‬

‫خالصۀ فصل‬
‫در این فصرل عملگرهرا (‪ ،)Operators‬عبرارت هرا (‪ )Expressions‬و‬
‫بیانیه های (‪ C++ )Statements‬مورد بحث قرار گرفت و در نتیمه‬
‫مفاهیم ذیل را آموختیم‪:‬‬
‫عملگر عبارت از سمبول است که به خاطر اجرای عملیات خراص‬
‫حسابی و یا منطقی استفاده میشود‪ .‬در لسان ‪ C++‬چندین نروع‬
‫عملگر وجود دارد که عبارت اند‪:‬‬
‫عملگر یکتایی عملگر است که بازی یک عنصر اجررا میشرود ؛‬
‫عملگر دوتایی عملگر است که بازی دوعنصر اجرا میشود‪.‬‬
‫عملگر حسابی عملگر است که غرض اجرای عملیات حسابی مانند‬
‫جمع‪ ،‬منفی‪ ،‬ضرب‪ ،‬تقسیم و غیره عملیات استفاده میشود‪.‬‬

‫‪75‬‬
‫در حالیکه عملگرهای ارتباطی بیشتر در عملیرات شررطی کره‬
‫نتیمه آن درست و یا نادرست میباشرد ‪ ،‬اسرتفاده میگرردد‪.‬‬
‫این عملگر ها نتیمۀ هر عبارت را به شکل تام نشان میدهد‪.‬‬
‫اگر نتیمه نادرست باشد آنرا بره ‪ 0‬نمرایش میدهردولی اگرر‬
‫نتیمه درست باشد آنرا به قیمت تام که خرالف ‪ 0‬باشرد نشران‬
‫میدهد‪.‬‬
‫عملگر های منطقی غررض یکمرا نمرودن دو یرا بیشرتر از دو‬
‫عبارت منطقی استفاده میگردد‪ .‬به طرور عمروم‪ ،‬سره عملگرر‬
‫منطقی وجود دارد که عبارت اند از ‪ OR ،AND‬و ‪.NOT‬‬
‫همچنان باید گفت که عبارت شامل ‪:‬عملگرها‪ ،‬ثابتهاو متحول‬
‫ها میباشدکه به چند نوع تقسیم گردیده اسرت‪ :‬عبرارت هرای‬
‫ثابت‪ ،‬عبارت های حسابی‪ ،‬عبارت های ارتباطی‪ ،‬عبرارت هرای‬
‫منطقی‪ ،‬عبارت های پاینترها و عبارت های بیتی‪.‬‬
‫عبارت ثابت آن است که در ترکیب خود تنها قیمت های ثابرت‬
‫را داشته باشد‪ .‬عبارت حسابی آن اسرت کره در ترکیرب خرود‬
‫متحولها‪ ،‬ثابت هرا و عملگرهرای حسرابی را داشرته باشرد‪.‬‬
‫عبارت ارتباطی آن است که در ترکیب خود متحولها‪ ،‬ثابتهرا‬
‫‪ ،‬عملگرهای حسابی و مقایسوی را داشته باشد‪ .‬عبارت منطقی‬
‫آن است که در آن دو یا بیشتر از دو عملگرر ارتبراطی بره‬
‫راینتر قیمرت‬‫کمک عملگرهای منطقی وصل شده باشد‪ .‬عبرارت پر‬
‫آدرس حافظه را نشان میدهد‪ .‬و باآلخره‪ ،‬عبارت بیتی نتیمره‬
‫را برره شررکل بیررت هررا بررا اسررتفاده از ‪ AND‬و ‪ OR‬منطقرری‬
‫نشانمیدهد‪.‬‬
‫بیانیه بخش مهمی یک برنامه اسرت کره قابل یت اجررا شردن‬
‫(‪ )Execution‬را داشته باشد‪ .‬در زبان‪ C++‬چندین نوع بیانیه ها‬
‫وجود دارند که عبارت اند از‪ :‬بیانیه های انتخابی ( ‪Selection‬‬
‫‪ ،)Statements‬بیانیه های تکراری (‪ ،)Iteration Statements‬بیانیه های‬
‫پرررش (‪ ،)Jump Statements‬بیانیرره هررای لیبررل (‪،)Label Statements‬‬
‫بیانیه های عبارت (‪ )Expression Statements‬و بیانیره هرای برال‬
‫(‪.)Block Statements‬‬
‫حالیکره‬ ‫بیانیه هرای انتخرابی شرامل ‪ if‬و ‪ switch‬میباشرددر‬
‫بیانیره‬ ‫بیانیه های تکراری شامل ‪ for ،while‬و ‪ do-while‬میباشد‪.‬‬
‫بیانیره‬ ‫های پرش شرامل( ‪ goto ،continue ،break‬و ‪) return‬میباشرد‪.‬‬
‫رین‬
‫در بر‬ ‫ره‬
‫رت کر‬
‫ری اسر‬‫رای ترکیبر‬ ‫ره هر‬ ‫رامل بیانیر‬ ‫رال شر‬
‫رای بر‬
‫هر‬
‫‪76‬‬
‫قوسهایموره یی (‪ )Braces‬در می گرردد‪ .‬و براآلخره‪ ،‬بیانیره‬
‫های بال شامل ‪ default ،case‬و ‪ goto‬میباشد‪.‬‬

‫پرسشهای فصل‬

‫عبارت (‪ )Expression‬چیست؟‬ ‫‪.1‬‬


‫یک مثال عملگر یکتایی را ذکر کنید؟‬ ‫‪.2‬‬
‫مفهوم اولویت بندی عملگر ها (‪ )Operator precedence‬چیست‬ ‫‪.3‬‬
‫عبارت (‪ )Expression‬چیست و اجزای آنرا نام بگیرید؟‬ ‫‪.4‬‬
‫عبارت که چندین جفت قوس داشته باشد سلسله اجرای‬ ‫‪.5‬‬
‫عملیات چطور اجرا میگردد ؟‬
‫عملگر های مختلف ارتباطی (‪ )Relational operators‬را توضیح‬ ‫‪.6‬‬
‫دهید؟‬
‫عملگر های منطقی (‪ )Logical operators‬را توضیح نموده ‪ ،‬سلسله‬ ‫‪.7‬‬
‫حق اولویت اجرای آن را ذکر نمایید؟‬
‫سه تابع حسابی که در فصل فو ذکر نشده دریافت و در‬ ‫‪.8‬‬
‫لسان سی پلس پلس برنامه ریزی کنید؟‬
‫فعالیت گروپی‬
‫و ‪ %‬چیست؟‬ ‫‪ .9‬تفاوت بین عملگر‬
‫چیست؟‬ ‫و‬ ‫‪ .10‬تفاوت میان‬
‫تبدیل کنید؟‬ ‫‪ .11‬عبارات ذیل ریاضیکی را به عبارت ‪C++‬‬
‫‪Y = | (a + b) / (c -d) | 1/a‬‬
‫‪Y = √tan a / ab‬‬

‫‪77‬‬
‫فصل پنچم‬
‫بیانیه های تصمیم گیری یا شرطی‬
‫‪Conditional Statements‬‬

‫هدف عمومی‪ :‬با دستوهای شرطی آشنا شوند‪.‬‬


‫‪.‬‬
‫اهداف آموزشی‪ :‬در پایان این فصل‪ ،‬محصالن قادر خواهند بود تا‪:‬‬
‫‪ .1‬دستورهای شرطی را تعریف نمایند‪.‬‬
‫‪ .2‬موارد استفاده دستورهای شرطی را شرح دهند‪.‬‬
‫‪ .3‬دستور شرطی ‪ IF‬را تعریف نمایند‪.‬‬
‫‪ .4‬تفاوت بین ‪ if‬و ‪ switch‬را تشریح دهند‪.‬‬
‫در این فصل دستورهای شرطی‪ ،‬انواع دستورهای شرطی و موارد‬
‫استفاده آنها مورد بحث قرار گرفته که یکی پی دیگر به‬
‫تفصیل توضیح میگردد‪.‬‬
‫در لسان ‪ C++‬دستورها به طور عادی پی یکدیگر طورکه نوشته‬
‫شده اجررا (‪ )execute‬میشرود؛ ایرن نروع برنامره هرا دارای‬
‫ساختار مسلسل (‪ )Sequential Structure‬می باشد‪.‬‬
‫اما در بعضی موارد نیاز است که اجررای برنامره هرا شرکل‬
‫مسلسل را نداشته باشد و مطابق به شرایط خاص اجرا گرردد‪.‬‬
‫برنامه های که تصمیم گیری در آن مربوط به شرط باشرد بره‬
‫نام برنامره هرای انتخرابی (‪ )Selection Structure‬یادمیشرود‪ .‬پرس‬
‫میتوان گفت دستورات شرطی برای انمرام کرار هرا و تصرمیم‬
‫گیری های مختلف بر اساس شرایط مختلف به کار می روند‪.‬‬
‫لسرران ‪ C++‬بیانیرره هررای شرررطی دارد کرره در مواقررع نیرراز‬
‫میتوانیم از آن استفاده نماییم‪.‬‬
‫این بیانیه ها عبارت اند از (‪: )Rama، 2011‬‬
‫‪If‬‬ ‫بیانی‬ ‫‪.i‬‬
‫‪switch‬‬ ‫بیانی‬ ‫‪.ii‬‬
‫تایی‬ ‫عملگر س‬ ‫‪.iii‬‬
‫‪goto‬‬ ‫بیانی‬ ‫‪.iv‬‬
‫بیانیه (‪ )goto‬وقتی اسرتفاده میگرددکره یرک قسرمت خراص از‬
‫برنامه نظر به لزوم دید باید اجرا گردد‪.‬‬
‫بیانیۀ شرطی (‪)if‬‬
‫بیانیه شرطی (‪ )If‬یکی از قوی تررین بیانیره هرای زبانهرای‬
‫برنامه نویسی کمپیوترمیباشد‪ .‬این بیانیه شرط طررح شرده‬
‫‪78‬‬
‫را به شکل منطقی مورد ارزیابی قرار داده‪ ،‬در صرورت صرحت‬
‫بودن آن عمل اول که توسط برنامه نویس طرح گریده اجررا و‬
‫در صورت نادرست بودن شرط عمل دوم اجرامیگردد‪.‬‬
‫شکل سادا بیانیه (‪ )if‬قرار ذیل است‪:‬‬
‫)‪If (conditional expression‬‬
‫;‪S1‬‬
‫;‪S2‬‬

‫‪S2‬‬ ‫در (‪ )conditional expression‬شرط خویش را مطرح مینمراییم‪ S1 .‬و‬


‫دو بیانیه است که یکی از آن هرا بعرد از ارزیرابی شررط‬
‫توسط کمپیوتر اجرامیگردد‪.‬‬
‫‪ ‬به صورت عموم‪ ،‬هر (‪ )conditional expression‬دارای یک قیمت است‪.‬‬
‫‪ )conditional expression( ‬باید در داخل قوسهای خرورد ( ) نوشرته‬
‫شود‪.‬‬
‫‪ ‬بیانیه ‪ S1‬وقتی اجرا میشودکه شرط درست باشد‪.‬‬
‫‪ ‬اگر شرط نادرست باشد در آنصرورت بیانیره ‪ S1‬صررف نظرر‬
‫میشودو بیانیه دومی (‪ )S2‬اجرامیگردد‪.‬‬
‫بیانیه ‪ S1‬میتواندکه یک بیانیه ساده و یا ترکیبری باشرد‪.‬‬
‫بیانیه ساده حاوی یک سطر بوده در حالیکه بیانیه ترکیبری‬
‫شامل چندین سطرمیباشد‪.‬‬
‫اگر شرط درست باشد و قرار باشد که چندین سطر اجرا گرردد‬
‫در آنصورت تمام سطر ها باید داخرل قوسهرای برزرگ (‪)Braces‬‬
‫نوشته گردد ‪.‬‬

‫)‪If (Condition‬‬ ‫طورمثال‪:‬‬


‫قروس‬
‫{‬ ‫هرای داخرل‬ ‫در صورتیکه شرط درست باشد تمام بیانیره‬
‫;‪S1‬‬ ‫بزرگ‬
‫;‪S2‬‬
‫;‪S3‬‬
‫اجرامیشود‪.‬‬
‫رررطی ‪ If‬را‬
‫‪//‬‬ ‫شر‬ ‫شکل سراده دسرتور‬
‫فلوچررررارت‬
‫‪//‬‬ ‫میتوانیمررررررردر‬
‫}‬ ‫ذیل‬
‫;‪Sn‬‬
‫نمایش داد‪.‬‬

‫‪79‬‬
)if( ‫ فلوچارت بیانیۀ شرطی‬1.5 ‫شکل‬

.‫) را نشان میدهد‬if ( ‫ برنامۀ ذیل شیوه استفاده دستور شرطی‬:1.5 ‫مثال‬
/* Program to show usage of simple if () */
#include <iostream.h>
main ( )
{
int x , y = 10 ;
cout << “ \n Enter value of x : “ ;
cin >> x ;
if ( x > 0 )
cout << “ \n Sum = “ << x + y;
return 0 ;
}
Output
Enter value of x : 5
Sum = 15

.‫میسازد‬10 ‫ برنامۀ ذیل یک عدد را از صفحه کلید میگیرد ؛ اگر عدد وارد شده مثبت باشد آنرا ضرب‬:2.5 ‫مثال‬
/* Program multiply only positive number * 10 inserted from keyboard */
#include <iostream.h>
main ( )
{
int x ;
cout << “ \n Enter a number : “ ;
cin >> x ;
if ( x > 0 )
cout << “ \n Result = “ << x * 10;
return 0 ;
}
Output
Enter a number : 20
Result = 200
if ‫یک تعداد مثالهای ساده دیگر دستور شرطی‬
a) if ( balance = = 0)
cout << “ \n No more shopping !” ;
80
b) if ( a > b && a > c )
cout << “ \n Largest number is ” << a ;
c) int rain = 1;
if ( rain = = 1)
{
cout << “ \n Wear a raincoat!” ;
cout << “ \n or hold an umbrella ” ;
}

d) if ( a > 0 && b < 10 )


{
Sum = a + b ;
Diff = a - b ;
cout << “ \n Sum = ” << Sum ;
cout << “ \n Diff = ” << Diff ;
}

e) if ( dues > 0 )
{
cout << “ \n Account number is overdue ” << accno ;
creadit = 0 ;
}

f) if ( a = = b || a = = c || b = = c )
{
cout << “ \n It is an isosceles triangle ” ;
}
.‫ برنامۀ ذیل عدد بزرگتر بین دو عدد وارد شده را دریافت مینماید‬:3.5 ‫مثال‬
/* Program to find largest of two numbers */
#include <iostream.h>
main ( )
{
int a , b, large ;
cout << “ \n Type 2 numbers : “ ;
cin >> a >> b ;
// Assuming largest number is a
large = a ;
if ( b > large )
large = b ;
cout << “ \n Largest of “<< a << “ and “<< b <<” is “ << large ;
return 0;
}
Output
Type 2 numbers : 15 48
Largest of 15 and 48 is 48
81
‫مثال ‪ :4.5‬برنامۀ ذیل تفاوت بین = و == را در صورتکه دستور شرطی استفاده گردیده باشد نشان میدهد‪.‬‬
‫*‪*/Program to show what happens when = is given instead of == in if statement/‬‬
‫>‪#include <iostream.h‬‬
‫( )‪main‬‬
‫{‬
‫; ‪int x = 0‬‬
‫‪if ( x = 0) // condition becomes false since x = 0‬‬
‫‪cout << " x is 0, x==0 is true, but this statement will not be output /n‬‬ ‫";‬
‫(‪if (x!= 0‬‬
‫";‪cout << " x is 0, x!=0 is false, so this statement will not be output /n‬‬
‫‪if (x=15) // condition becomes true since value of x is not zero‬‬

‫;‪cout << " can you believe it, x is actually! " <<x‬‬
‫; ‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Can you believe it, x is actually! 15‬‬

‫در مثال فو )( ‪ if‬اول قیمت ‪ 0‬را به ‪ x‬انتقال میدهدو نتیمه‬


‫به ‪ false‬میانمامد و به همین دلیل بیانیۀ کره در داخرل ‪cout‬‬
‫قرار دارد نشان نمیدهد‪.‬‬
‫در )( ‪ if‬دومی قیمت ‪ x‬خالف ‪ 0‬تعریف گردیده اسرت و براز هرم‬
‫نیتمه به نادرستی مریانمامرد و بیانیره کره در داخرل ‪cout‬‬
‫نوشته شده نشان نمیدهد‪ .‬در ‪ if‬سومی قیمت ‪ x‬مساوی بره ‪ 15‬در‬
‫نظر گرفته شده که خالف ‪ 0‬میباشدو بره همرین خراطر نتیمرۀ‬
‫داخل ‪ cout‬را روی سکرین نشان میدهد‪.‬‬

‫بیانیۀ شرطی ‪THE IF ( ) ELSE STATEMENT‬‬


‫(‪.)Eckel, 2000‬‬
‫)‪If (Condition‬‬ ‫این دستور دارای پاسخ دو گزینه یی است‬
‫شکل عمومی آن قرار ذیل است‪:‬‬
‫;‪S1‬‬
‫‪else‬‬
‫اجررا‬
‫;‪S2‬‬
‫اجرا میگردد در غیرر آن ‪S2‬‬ ‫‪ ‬اگر شرط درست باشد‬ ‫‪S1‬‬
‫نادرسرت‬
‫;‪S3‬‬ ‫شرد (وقتیکره شررط‬ ‫خواهرد‬
‫باشد)‪.‬‬
‫‪ ‬در هر حالت تنها یک بیانیره (‪ S1‬و یرا ‪ )S2‬اجرامیشرود‪.‬‬
‫امکان ندارد که هردو بیانیه در عین زمان اجرا گردد‪.‬‬
‫‪ ‬اگر شرط درست و یا نادرست باشد یکی از بیانیه هرای ‪S1‬‬
‫میرسد‪.‬‬ ‫و یا ‪ S2‬اجرا میشودو نوبت به ‪S3‬‬
‫‪82‬‬
‫در فلوچارت ذیل نمایش‬ If () – else ‫شکل دستور شرطی‬
.‫داده شده است‬

if - else statement ‫شرطی‬ ‫ فلوچارت بیانیۀ‬2.5 ‫شکل‬


‫" و‬Positive" ‫ اگر عدد وارد شده مثبت باشد در آنصورت کلمه‬، ‫ برنامۀ ذیل یک عدد را از صفحه کلید میگیرد‬:5.5 ‫مثال‬
.‫" را روی سکرین نشان میدهد‬Negative" ‫اگر منفی باشد کلمه‬
/* Program finds whether the entered number is positive or negative */
#include <iostream.h>
main ( )
{
int N;
cout << " \n Enter a number to find whether it is positive or negative " ;
cin >> N ;
if ( N > 0 )
cout << " \n The Number is Positive ";
else
cout << " \n The Number is Negative ";
return 0 ;
}
Output
Enter a number to find whether it is positive or negative: 5
The Number is Positive

Enter a number to find whether it is positive or negative: - 5

83
The Number is Negative

You " ‫ باشد در آنصورت پیام‬A ‫ اگر حرف وارد شده‬، ‫ برنامۀ ذیل یک حرف را از صفحه کلید میگیرد‬:6.5 ‫مثال‬
.‫ " را نشان میدهد‬Wrong Character" ‫" و اگر خالف آن باشد کلمه‬Entered A
/* Program multiply only positive number * 10 inserted from keyboard */
#include <iostream.h>
main ( )
{
char chr ;
cout << " \n Enter an alphabit character : " ;
cin >> chr ;
if ( chr == 'A')
cout << " \n You Entered A ";
else
cout << " \n You Entered a Wrong Character ";
return 0 ;
}
Output
Enter an alphabit character : A
You Entered A

Enter an alphabit character : X


Wrong Character
.‫ را نشان میدهد‬if ( ) - else ‫ برنامۀ ذیل شیوه استفاده‬:7.5 ‫مثال‬
// Program to illustrate the usage of if ( ) - else
#include <iostream.h>
#include <stdlib.h> //srand , rand
#include <time.h> // time
main ( )
{
int magic, guess ;
srand (time (NULL)); //initialize random seed
magic =rand() % 5; // generate random number between 1 to 5
cout << " \n Guess the magic number : " ;
cin >> guess ;
if (guess == magic )
cout << "\n YOU got it ******* Right ******* " << magic;
else
cout << "\n Sorry ! Better luck next time. " << magic;
return 0;
}
Output
Guess the magic number: 2
Sorry ! Better luck next time. 1
84
.‫ برنامۀ ذیل عدد واردشده به برنامه را ارزیابی نموده که آیا جفت است و یا تاق‬:8.5 ‫مثال‬
// Program to determine if a given number is even or odd
#include <iostream.h>
main ( )
{
int num, remain ;
cout << “ \n Enter the number to be tested :“ ;
cin >> num ;
remain = num % 2 ;
if (remain == 0 )
cout << num << “ is Even” ;
else
cout << num << “ is Odd” ;
return 0;
}
Output
Enter the number to be tested : 1279
1279 is Odd
Enter the number to be tested : 38
38 is Even
Enter the number to be tested : 0
0 is Even ( Why ? )

.‫ برنامۀ ذیل سال وارد شده را ارزیابی نموده که سال کبیسه است یا خیر؟‬:9.5 ‫مثال‬
/* Program to check whether a given year is a leap year */
#include <iostream.h>
main ( )
{
int yr, rem_4, rem_100, rem_400 ;
cout << " \n Enter the 4 digit year to be checked :" ;
cin >> yr ;
// to find the remainders of division by 4, 100 & 400
rem_4 = yr % 4 ;
rem_100 = yr % 100 ;
rem_400 = yr % 400 ;
if ((rem_4 == 0 && rem_100!=0) || rem_400 ==0)
cout << "\n is a leap year " << yr ;
else
cout << "\n is not a leap year ok !" << yr ;
return 0;
}
Output
Enter the 4 digit year to be checked : 2004
2004 is a leap year
85
Enter the 4 digit year to be checked : 1998
1998 is not a leap year ok !
Enter the 4 digit year to be checked : 3000
3000 is not a leap year ok !
.‫ برنامۀ ذیل قیمت مطلقۀ عدد وارد شده را دریافت مینماید‬:10.5 ‫مثال‬
// Program to calculate absolute value of an integer
#include <iostream.h>
main ( )
{
int num ;
cout << “ \n Type a number :“ ;
cin >> num;
if (num < 0)
{
num = - num ;
cout << “\n The absolute value is “ << num ;
}
else
cout << “\n The absolute value is “ << num ;
return 0 ; }
Output
Type a number : -456
The absolute value is 456
Type a number : 360
The absolute value is 360
Type a number : 0
The absolute value is 0 (how ? )
.‫ برنامۀ ذیل دو قیمت وارد شده را به شکل نزولی ترتیب میکند‬:11.5 ‫مثال‬
// Program to display 2 numbers in descending order
#include <iostream.h>
main ( )
{
int num1, num2 ;
cout << “ \n Enter 2 numbers :“ ;
cin >> num1 >> num2;
cout << “ Number in Descending order are : “ ;
if (num1 >= num2)
cout << “\n “ << num1 << num2 ;
else
cout << “\n “ << num2 << “ “ << num1 ;
return 0 ; }
Output
Enter 2 numbers : 25 31
31 25
86
Enter 2 numbers : -40 10
10 - 40
.‫ عدد وارد شده را دریافت میکند‬4 ‫ برنامۀ ذیل بزرگترین و عدد بزرگتر بین‬:12.5 ‫مثال‬
/* Program to find the largest & second largest of 4 numbers and their average */
#include <iostream.h>
main ( )
{
int m1, m2, m3, m4, first, second ;
float avg ;
cout << “ \n Enter the marks obtained in 4 papers :“ ;
cin >> m1 >> m2 >> m3 >> m4;
if (m1 > m2)
first = m1, second = m2 ;
else
first = m2, second = m1 ;
if (m3 > first)
second = first, first = m3 ;
else if ( m3 > second )
second = m3 ;
if (m4 > first)
second = first, first = m4 ;
else if ( m4 > second )
second = m4 ;
cout << “\n “ << “Largest marks “ << first ;
cout << “\n “ << “Second Largest marks “ << second ;
avg = ( first + second ) / 2.0 ;
cout << “\n “ << “ Average of best two marks = “ << avg ;
return 0;
}
Output
Enter the marks obtained in 4 papers : 56 78 40 48
Largest marks = 78
Second Largest marks = 56
Average of best two marks = 67.00
.‫ برنامۀ ذیل نتایج هر مضمون را در چهار امتحان نشان میدهد‬:13.5 ‫مثال‬
/* Program to declare result in each subject in 4 papers */
#include <iostream.h>
main ( )
{
int m1, m2, m3, m4;
cout << " \n Enter the marks in 4 papers \n " ;
cin >> m1 >> m2 >> m3 >> m4;
if (m1 > 59)
cout << " FIRST CLASS in paper 1 \n";
87
else if ( m1 > 39 )
cout << " SECOND CLASS in paper 1 \n";
else
cout << " Fail in paper 1 \n" ;

if (m2 > 59)


cout << " FIRST CLASS in paper 2 \n";
else if ( m2 > 39 )
cout << " SECOND CLASS in paper 2 \n";
else
cout << " Fail in paper 2 \n" ;

if (m3 > 59)


cout << " FIRST CLASS in paper 3 \n";
else if ( m3 > 39 )
cout << " SECOND CLASS in paper 3 \n";
else
cout << " Fail in paper 3 \n" ;

if (m4> 59)
cout << " FIRST CLASS in paper 4 \n";
else if ( m4 > 39 )
cout << " SECOND CLASS in paper 4 \n";
else
cout << " Fail in paper 4 \n" ;
return 0;
}
Output
Enter the marks in 4 papers :
38 40 24 60
Fail in paper 1
SECOND CLASS in Paper 2
FAIL in paper 3
FIRST CLASS in paper 4

.‫ نشان میدهد‬if ( ) - else ‫ ) را در دستور شرطی‬char( ‫ برنامۀ ذیل شیوه استفاده‬:14.5 ‫مثال‬
// Program to show usage of char in if ( ) statement
#include <iostream.h>
#include <stdio.h>
main ( )
{
char wish;
cout << " \n Want to got to movie Y/ N ?:" ;
wish = getchar( );

88
if (wish == 'Y' || wish == 'N')
cout << "\n " << " Go and get ready quickly ! " ;
else
cout << "\n " << " Go and start studying ! " ;
return 0;
}
Output
Want to go to movie Y / N ? Y
Go and get ready quickly !
Want to go to movie Y / N ? n
Go and start studying !
Want to go to movie Y / N ? y
Go and start studying !
Want to go to movie Y / N ? A
Go and start studying !

NESTED IF ( ) STATEMENT ‫یک شرط داخل شرط دیگر‬


‫ دیگر قرار گیرد چنین بیانیه شرطی‬If ‫ داخل بال‬If ‫وقتیکه یک‬
‫ ) قررار‬NESTED IF(‫ شکل عمرومی‬.‫) یادمیکند‬Nested if( ‫را به نام‬
:(Soulié, 2007) ‫ذیل است‬

Nested if statement ‫شرطی‬ ‫ فلوچارت بیانیۀ‬3.5 ‫شکل‬

89
‫بیانیره هرا‬ ‫‪S4‬‬ ‫و‬ ‫‪S3‬‬ ‫‪،S2 ،‬‬ ‫‪S1‬‬ ‫شرروط و‬
‫در اینمرا‬ ‫‪e2‬‬ ‫و‬ ‫‪e1‬‬
‫هستند‪.‬‬
‫‪ ‬هرگاه شرط ‪ e1‬درست باشد مترجم به تعقیرب آن شررط ‪ e2‬را‬
‫چک میکند‪ .‬اگر شرط ‪ e2‬هم درست باشد در آنصورت بیانیرۀ‬
‫‪ s1‬اجرا میشودو کنترول به بیانیرۀ ‪ s4‬منتقرل میگرردد‪.‬‬
‫اگر شرط ‪ e2‬نادرسرت باشرد در آنصرورت بیانیرۀ ‪ s2‬و بره‬
‫تعقیب آن ‪ S4‬اجرامیگردد‪.‬‬
‫‪ ‬اگر شرط ‪ e1‬نادرست باشرد در آنصرورت بیانیرۀ ‪ S3‬و بره‬
‫تعقیب آن بیانیۀ ‪ S4‬اجرامیگردد‪.‬‬
‫‪ ‬امکان دارد که ‪ S3, S2, S1‬حراوی بیانیره هرای دیگرر ‪if – else‬‬
‫باشند که این حالت را به نام ‪ Multi – Layer Nesting‬یادمیکند‪.‬‬

‫مثال ‪ :15.5‬برنامۀ ذیل شیوه استفاده ) ( ‪ nested if‬را نشان میدهد‪.‬‬


‫) ( ‪// Program to show usage of nested if‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫;‪float hrs‬‬
‫; “‪cout << “ \n Type the line in hours :‬‬
‫; ‪cin >> hrs‬‬
‫)‪if (hrs >= 0.0 && hrs < 12.0‬‬
‫; “ ‪cout << “\n “ << “ Good Morning‬‬
‫‪else‬‬
‫) ‪if (hrs >= 12.0 && hrs < 17.0‬‬
‫; “‪cout << “\n “ << “ Good Afternoon‬‬
‫‪else‬‬
‫)‪if (hrs >= 17.0 && hrs<21.0‬‬
‫;“ ‪cout <<”\n Good Evening‬‬
‫‪else‬‬
‫)‪if (hrs >= 21.0 && hrs <24.0‬‬
‫;“ ‪cout << “\n Good Night‬‬
‫‪else‬‬
‫;“ ‪cout <<”\n Wrong Input‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Type the line in hours : 20.6‬‬
‫‪Good Evening‬‬
‫‪Type the line in hours : 5.0‬‬
‫‪Good Morning‬‬
‫‪90‬‬
Type the line in hours : 22
Good Night
Type the line in hours : 15
Good Afternoon
Type the line in hours : 50
Wrong Input

.‫ دریافت مینماید‬nested if ( ) ‫ عدد وارد شده با کمک‬3 ‫ برنامۀ ذیل بزرگترین عدد را بین‬:16.5 ‫مثال‬
// Program to find the largest of three numbers using nested if ( ) – else
#include <iostream.h>
main ( )
{
int a, b, c, large ;
cout << “ \n Enter 3 numbers :“ ;
cin >> a >> b >> c ;
if ( a > b )
if (a > c)
large = a;
else
large = c;
else
if (b>c)
large = b;
else
large = c;
cout << “\n Largest Number is “ << large; }
Output
Enter 3 numbers : 22 6 11
Largest Number is 22
Enter 3 numbers : 10 50 42
Largest Number is 50
Enter 3 numbers : 13 6 80
Largest Number is 80
،‫ برنامۀ ذیل کرکتر وارد شده به برنامه را میخواندو دریافت مینمایدکه کرکتر وارد شده حرف الفبا‬:17.5 ‫مثال‬
.‫) است‬special characters( ‫رقم و یا از جمله سمبولهای خاص‬
/* Program to read a character and determine whether it is an alphabet, digit or a special
character */
91
#include <iostream.h>
main ( )
{
char ch;
cout << " \n Enter a single character please :" ;
cin >>ch;
if ((ch>='a' && ch <='z') || (ch >= 'A' && ch <= 'Z'))
cout << "\n " << " It is an Alphabet" ;
else
if ( ch >='0' && ch <= '9' )
cout << "\n " << " It is a digit" ;
else
cout << "\n It is a special character ";
return 0; }
Output
Enter a single character please : u
It is an Alphabet
Enter a single character please : !
It is a special character
Enter a single character please : 7
It is a digit
‫برنامرۀ فرو بررای حرروف برزرگ و کوچرک مرورد اسرتفاده‬
‫ قیمت را در خود ذخیره کنرد کره آن‬ch ‫ وقتیکه‬.‫قرارمیگیرد‬
‫نه حرف و نه هم عدد باشد در آنصورت آنرا به حیرث سرمبول‬
.‫خاص قبول میکند‬
.‫ را دریافت میکند‬2 ‫ برنامۀ ذیل جذرهای معادالت یک مجهوله درجه‬:18.5 ‫مثال‬
/* Program to find the roots of a quadratic equaiton */
#include <iostream.h>
#include <math.h>
main ( )
{
float a, b, c,d;
float x, x1, x2;
float rpart, ipart;
cout << " \n Enter 3 numbers :" ;
cin >> a >> b>> c ;
// solution to equation of the form bx + c = 0
if (a==0)
{
x=-b/c;
cout << "\n Only root " << x ;
}
// Calculate discriminant d
92
d = b * b - 4 * a * c;
// Solution with real and distant roots
if (d > 0)
{
cout <<"\n Real and district roots are : " ;
x1 = (-b + sqrt (d)) / (2*a) ;
x2 = (-b - sqrt (d)) / (2*a) ;
cout <<"\n x1 = " <<x1 << ”\n” <<" x2 =" << x2;
}
else
if (d ==0)
{
// Solution with repeated roots
cout <<"\n Repeated Roots are : " ;
x1 = -b / (2*a) ;
x2 = x1 ;
cout <<"\n x1 & x2 = " <<x1 ;
}
else
{
// Solution with complex roots
d = sqrt(abs(d));
rpart = -b / (2 * a) ;
ipart = d / (2 * a );
cout <<"\n Complex roots are : " ;
cout << "\n x1 = " << rpart << " + i " << ipart; // Real part of a complex root
cout << "\n x2 = " << rpart << " + i " << ipart; // Imaginary part of a complex
root
}
x=-b/c;
cout << "\n Only root " << x ;
}
Output
Enter 3 numbers : 1 4 1
Real and district roots are :
x1 = -0.267
x2 = -3.732

Enter 3 numbers : 4 4 1
Repeated roots are :
x1 & x 2 = -0.5

Enter 3 numbers : 1 2 3
Complex roots are :
x1 = -1 + i 1.41421
93
x2 = -1 + i 1.41421

.‫) اجرأت میکند‬/ ،* ،- ،+( ‫ عدد را از کیبورد گرفته مطابق به عالمۀ وارد شده‬2 ‫ برنامۀ ذیل‬:19.5 ‫مثال‬
// Program to simulate the 4 arthmetic operations +, -, *, /
// for 2 real number depending on the operators
#include <iostream.h>
main ( )
{

float num1, num2 ;


char op;
cout << “ \n Enter an operator :“ ;
cin >> op;
cout << “ \n Enter 2 numbers :“ ;
cin >> num1 >> num2 ;
if (op==’+’)
cout << “\n Sum = “ << num1 + num2 ;
else
if (op == ‘-‘)
cout <<” \n Differnce = “ << num1 – num2 ;
else
if (op ==’*’)
cout <<” \n Product == “ << num1 * num2 ;
else
if ((op == ‘/’) && num1 != 0)
cout <<” \n Quotient = “ << num1 / num2 ;
else
cout <<” \n Error in Input “;
return 0;
}

94
Output
Enter an operator : +
Enter 2 nummbers : 5 4
Sum = 9.00
Enter an operator : -
Enter 2 nummbers : 5 8
Difference = -3.00
Enter an operator : *
Enter 2 nummbers : 12.4 6
Product = 74.40
Enter an operator : /
Enter 2 nummbers : 12 4
Quotient = 3.00
Enter an operator : &
Enter 2 nummbers : 2 3
Error in Input

.‫ عدد وارد شده دریافت مینماید‬3 ‫ برنامۀ ذیل بزرگترین ویا عدد بزگتر دوم را بین‬:20.5 ‫مثال‬
/* Program to find the largest & second largest of 3 numbers */
#include <iostream.h>
main ( )
{
int a, b, c, first, second ;
char op;
cout << “ \n Enter 3 numbers :“ ;
cin >> a >> b >> c ;
if (a > b)
if (a>c)
{
first = a ;
if (b > c)
second = b ;
else
second = c;
95
}
else
{
first = c;
second = a;
}
else
if (b > c)
{
first = b;
if (a>c)
second = a;
else
second = c;
}
else
{
first = c;
second = b;
}
cout << “\n Largest is = “ << first << “\n Second largest is = “ <<second;
}
Output
Enter 3 numbers 15 2 10
Largest is 15
Second Largest is 10
Enter 3 numbers 28 65 5
Largest is 65
Second Largest is 28
Enter 3 numbers 79 12 6
Largest is 79
Second Largest is 12

96
‫بیانیه ) ( ‪THE ELSE – IF‬‬
‫‪nested‬‬‫شریروا دیرگر کره برا اسرترفاده از آن میرتروانریم‬
‫‪ if () – else‬را توضیح دهریرم عرربرارت از )( ‪ else – if‬میباشدکه در‬
‫آن هر ‪ else‬بیانیه ‪ if‬را نیز با خود دارد (‪.)Nawaz, 2006‬‬
‫شکل عمومی )( ‪ else – if‬قرار ذیل است‪:‬‬

‫شرطی ‪else - if statement‬‬ ‫شکل ‪ 4.5‬فلوچارت بیانیۀ‬


‫بیانیرۀ‬ ‫‪sx‬‬ ‫و‬ ‫‪default‬‬ ‫بیانیه های‬ ‫‪sn, s2, s1‬‬
‫‪..e3, e2, e1‬‬ ‫شروط و‬ ‫‪en‬‬ ‫‪‬‬
‫عادی است‪.‬‬
‫در این فلوچارت شرایط از باز به پایین چک میگردد‪.‬‬ ‫‪‬‬
‫در مرحله اول ‪ e1‬امتحان میشود‪ .‬اگر درست باشد ‪ s1‬اجررا‬ ‫‪‬‬
‫رر آن ‪e2‬‬
‫رددر غیر‬
‫رال مییابر‬ ‫ره ‪ sx‬انتقر‬ ‫ررول بر‬‫رودو کنتر‬ ‫میشر‬
‫امتحان میگردد‪ .‬اگر درست باشد ‪ s2‬اجرا میگرددو کنتررول‬
‫به ‪ sx‬انتقال مییابدو تمام بیانیه های متبراقی را صررف‬
‫نظرمینماید‪.‬‬
‫اگر تمام شرایط نادرست باشد‪ e1‬و ‪ .... e2‬و ‪ en‬در آنصورت‬ ‫‪‬‬
‫بیانیه های عادی (‪)Default Statement‬اجرا گردیده و به تعقیب‬
‫آن بیانیه ‪ sx‬اجرامیگردد‪.‬‬
‫مثال ‪ :21.5‬برنامۀ ذیل عالمه عدد وارد شده را دریافت مینماید‪.‬‬
‫‪/* Program to find sign of a number */‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫‪97‬‬
‫{‬
‫;‪int num , sign‬‬
‫; “‪cout << “ \n Enter a number please :‬‬
‫;‪cin >> num‬‬
‫‪// check if number is negative‬‬
‫)‪if (num< 0‬‬
‫; ‪sign = -1‬‬
‫)‪else if (num==0‬‬
‫;‪sign = 0‬‬
‫‪else // number must be positive‬‬
‫;‪sign = 1‬‬
‫;‪cout <<” sign = “ << sign‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter a number please :-259‬‬
‫‪sign = -1‬‬
‫‪Enter a number please : 0‬‬
‫‪sign = 0‬‬
‫‪Enter a number please :5‬‬
‫‪sign = 1‬‬

‫یک اسرتاد ‪ ،‬سره امتحران (امتحران‪ ،1‬امتحران‪ 2‬و امتحران‬


‫نهایی) را از محصالن خود اخذ مینمایدکره هرر یرک از ایرن‬
‫امتحانات از ‪ 50‬نمره محاسبه میشود‪ .‬بلند ترین نمره از بین‬
‫امتحان‪ 1‬و امتحان‪ 2‬هر محصل انتخراب گردیرده و بره نمررات‬
‫امتحان نهایی جمع میشود‪ .‬قابل ذکر است که ممموعره از ‪100‬‬
‫نمره محاسبه میشود‪.‬‬
‫نمرات متباقی طور ذیل محاسبه میگردد‪:‬‬
‫‪Marks‬‬ ‫‪Grade‬‬

‫‪0‬‬ ‫‪- 39‬‬ ‫‪F‬‬


‫‪40‬‬ ‫‪- 49‬‬ ‫‪D‬‬
‫‪50‬‬ ‫‪- 59‬‬ ‫‪C‬‬
‫‪60‬‬ ‫‪- 74‬‬ ‫‪B‬‬
‫‪75‬‬ ‫‪- 100‬‬ ‫‪A‬‬
‫پروگرامرری را‬ ‫بررا اسررتفاده از لسرران برنامرره نویسرری‬
‫‪C++‬‬
‫بنویسید که نمرات هر سه امتحران را از کیبرورد بگیررد و‬
‫بعد از طی مراحل نمره نهایی را روی سکرین نشان دهد؟‬
‫مثال ‪ :22.5‬برنامۀ ذیل بادرنظرداشت قاعده فوق نمره نهایی یک محصل را دریافت نموده روی سکرین نشان‬
‫میدهد‪.‬‬
‫‪//Program to print the grade of a student‬‬
‫‪98‬‬
#include <iostream.h>
main ( )
{
int test1, test2, final, marks;
char grade;
cout << " \n Enter marks in Test1, Test2, final :" ;
cin>> test1 >>test2 >>final;
// calculate total marks out of 100
if (test1>test2)
marks = final + test1 ;
else
marks = final + test2 ;
// assigning grades
if (marks >= 0 && marks <40)
grade = 'F' ;
else if (marks <50 )
grade = 'D';
else if (marks <60 )
grade = 'C';
else if (marks <75 )
grade = 'B';
else if (marks <= 100 )
grade = 'A';
else
grade = 'X' ;
if (grade != 'X')
cout <<" Grade is = " << grade ;
else
cout << "Error in input !!";
return 0;
}
Output
Enter marks in Test1, Test2, final : 50 50 25
Grade is A
Enter marks in Test1, Test2, final : 20 10 30
Grade is C
Enter marks in Test1, Test2, final : 20 10 15
Grade is F
Enter marks in Test1, Test2, final : 40 39 80
Error in input !!
‫ پرداخت کرایه به آن‬.‫ کتگوری کارمندان دارد‬4 ‫یک کمپنی‬
:‫ها مطابق قاعده ذیل صورت میگیرد‬
Catagory1 → 30% of salary
Catoagory2 → 20% of salary
99
Catoagory3 → 15% of salary
Catoagory4 → 10% of salary
‫ بادرنظرداشت قاعده فو برنامه را بنوسید که‬:23.5 ‫مثال‬
‫معاش و کتگوری کارمند را در نظر گرفته مطابق آن‬
‫اندازه کرایه آنرا معلوم نماید؟‬
// Program to calculate rent allowance besed on employee category
#include <iostream.h>
main ( )
{
int cat ;
float sal, rent ;
cout << " \n Enter the category and salary of employee :" ;
cin >> cat >> sal ;
if (cat == 1)
rent = sal * 0.3 ;
else if (cat == 2)
rent = sal * 0.2 ;
else if (cat == 3)
rent = sal * 0.15 ;
else if (cat == 4)
rent = sal * 0.1 ;
else
{
cout << "\n Wrong Input " ;
}
cout << "\n The rent allowance = " << rent ;
return 0;
}
Output
Enter the citatory and salary of Employee : 1 35000
The rent allowance = 10500.00
Enter the citatory and salary of Employee :4 10000
The rent allowance = 1000.00
Enter the citatory and salary of Employee : 23 3000
Wrong Input
switch ‫بیانیۀ شرطی‬
‫ چنردین‬،‫ وقتی موثر اسرت کره در برنامره‬switch ‫استفاده از‬
‫بیانیه وجود داشته باشد و خواسرته باشریم که یرک عررده‬
‫ررده اجررررا‬ ‫بریانیه هرای خراص نرظر برره شرررط طرررح شر‬
if () – else ‫مرریتوانیم از بیانیره‬ ‫ برای چنین مسأله‬.‫گررردد‬
‫ امرا وقتری شررایط زیراد باشرد در‬.‫نیز استفاده نمراییم‬
‫ پیچیده تر میگرددبه خراطر‬if () – else ‫آنصورت موارد استفاده‬
100
‫که شما نیاز دارید تعداد زیاد از بیانیه ها را به منظور‬
‫حل چنین مسأله نوشته کنید‪ .‬در همچو حالت بهتر است که از‬
‫بیانیۀ شرطی ‪ switch‬استفاده صورت گیرد )‪.(Backman, 2012‬‬
‫شکل عمومی بیانیۀ ‪ switch‬قرار ذیل است‪:‬‬

‫) ‪switch ( variable or expression‬‬


‫{‬
‫‪case Val1‬‬ ‫‪:‬‬ ‫;‪s1‬‬
‫;‪break‬‬
‫‪case Val2‬‬ ‫‪:‬‬ ‫;‪s2‬‬
‫;‪break‬‬
‫‪…….....‬‬ ‫‪:‬‬
‫‪……….‬‬ ‫‪:‬‬
‫‪case Valn‬‬ ‫‪:‬‬ ‫‪sn‬‬
‫‪:‬‬ ‫;‪break‬‬
‫‪default‬‬ ‫‪:‬‬ ‫‪sd‬‬
‫;‪break‬‬
‫}‬
‫; ‪statement – x‬‬
‫شکل ‪ 5.5‬شکل بیانیه ‪switch‬‬
‫‪ switch‬یک دستور کلیدی است؛ قیمت متحول یا عبارت کره در‬ ‫‪‬‬
‫داخررل قوسهررا(‪ )Parenthesis‬نرروشرررررته شرررررده را چررررک‬
‫میکند‪ switch .‬به ادامره خرود لسرت قیمرت هرای ‪ case‬دارد‬
‫(‪ )case3 case2, case1‬که بره نرام لیبرل هرای کریس (‪)case labels‬‬
‫یادمیگردد‪.‬‬
‫قیمت متحول یا عبارت ) ‪ ( variable or expression‬باید ترام (‪ )int‬و‬ ‫‪‬‬
‫یا یک حرف (‪ )character‬باشد‪ .‬قیمت ‪ case label‬ماننرد (‪, ،case 1‬‬
‫‪ case3, case 2‬و غیره) باید ثابت باشد و نتیمه نیز به عردد‬
‫تام انمامد‪.‬‬
‫قیمت هر ‪ case‬باید یگانه (‪ )unique‬باشد‪ .‬قیمرت میتواندبره‬ ‫‪‬‬
‫هر ‪ order‬باشد‪.‬‬
‫بیانیه ‪ S1‬و ‪ S2‬میتواندیک سطر و یا بیشتر از آن باشد‪.‬‬ ‫‪‬‬
‫در آخر هر ‪ case label‬باید دو نقطه سر به سر یرا کرالن (‪):‬‬ ‫‪‬‬
‫گذاشته شود و تمام ‪ case‬ها در داخل یک جوره قوسها( ‪curely‬‬
‫‪ )braces‬نوشته ‪.‬‬
‫وقتیکه بیانیۀ ‪ switch‬اجرا گردد در آنصورت تمام بیانیره‬ ‫‪‬‬
‫های مربوط به ‪ case‬آن نیز اجرامیگردد‪ .‬اگر قیمت ‪ switch‬با‬

‫‪101‬‬
‫ صد نکند در آنصرورت تمرام بیانیره هرای‬case ‫هیچ قیمت‬
.‫ اجرامیگردد‬Default ‫مربوط به‬
‫ اگر وجود نداشته باشد‬.‫ اختیاری است‬default ‫نوشتن بیانیه‬ 
.‫ اجرا میگردد‬x ‫در آنصورت بیانیه‬
‫ ززمی است به خراطری کره‬case ‫ در اخیر بال هر‬break ‫نوشتن‬ 
‫رردد‬
‫رته نگر‬
‫رر نوشر‬‫ اگر‬.‫رد‬
‫ران میدهر‬ ‫رود را نشر‬‫ موجر‬case ‫رتم‬
‫خر‬
.‫ ها یکی پی دیگر اجرامیگردد‬case ‫درآنصورت تمام‬
.‫ مماز نیست‬case label ‫نوشتن قیمت اعشاری در‬ 
.‫ نیز استفاده کنید‬nested ‫ را به شکل‬switch‫شما میتوانید‬ 

:‫قرار ذیل است‬ switch ‫چند برنامه‬


.‫ را نشان میدهد‬Julian ‫ برنامۀ ذیل تاریخ‬:24.5 ‫مثال‬
4

/* Program to find the Julian Date */


#include <iostream.h>
main ( )
{
int dd, mm, yy;
int leap, julian = 0;
cout << " \n Enter a valid date :" ;
cin >> dd >> mm >> yy;
// To check for leap year
leap = (yy % 4 == 0 && yy % 100 != 0) || yy % 400 == 0;
julian + dd;
switch ( mm - 1) {
case 11: julian = julian + 30 ;
case 10: julian = julian + 31 ;
case 9: julian = julian + 30 ;
case 8: julian = julian + 31 ;
case 7 : julian = julian + 31 ;
case 6 : julian = julian + 30 ;
case 5 : julian = julian + 31 ;
case 4 : julian = julian + 30 ;
case 3 : julian = julian + 31 ;
case 2 : if ( leap );
julian += 29;
julian += 28;
case 1 : julian = julian + 31;
}
cout << "\n Julian day is : " << julian ;
return 0;

a 5 digit number, consisting of a 2 digit year and a 3 digit day-of-year number 4


102
}
Output
Enter a valid date : 23 4 2005
Julian day is : 119
.‫) اجرات مینماید‬/ ،* ،- ،+( ‫ عدد را از کیبورد گرفته مطابق به عالمه وارد شده‬2 ‫ برنامۀ ذیل‬:25.5 ‫مثال‬
/* Program to stimulate the 4 arithmetic operations +, -, *, / for 2 real numbers
depending on the operator */
#include <iostream.h>
main ( )
{
float num1, num2;
char op;
cout << “ \n Enter an operator :“ ;
cin >> op;
cout << “ \n Enter 2 numbers : “;
cin >> num1 >> num2 ;
switch ( op)
{
case ‘+’:
cout << “ \n Sum = “ << num1 + num2 ;
break;
case ‘-’:
cout << “ \n Difference = “ << num1 - num2 ;
break;
case ‘*’:
cout << “ \n Product = “ << num1 * num2 ;
break;
case ‘/’:
if (num1 != 0)
cout << “ \n Quotient = “ << num1 / num2 ;
else
cout << “ \n Division by zero ? “;
break;
default :
cout <<” \n Error in Input “ ;
return 0;
}
}

Output
Enter an operator : +
Enter 2 numbers : 6 9
Sum = 15.00

103
‫ بادرنظرداشت قاعده فوق برنامه را بنوسید که معاش و کتگوری کارمند را در نظر‬:26.5 ‫مثال‬
‫گرفته مطابق آن اندازه کرایه آنرا معلوم نماید؟‬
/* Program to calculate rent allowance based on employee atagory */
#include <iostream.h>
main ( )
{
int cat ;
float sal, rent;
cout << “ \n Enter the category and salary of Employee :“ ;
cin >> cat >> sal;
switch ( cat )
{
case 1:
rent = sal * 0.3;
break;
case 2:
rent = sal * 0.2;
break;
case 3:
rent = sal * 0.15 ;
break;
case 4:
rent = sal * 0.1;
break;
default :
cout <<”\n Wrong Input “;
break;
}
cout <<” \n The rent allowance = “ << rent;
return 0;
}
Output
Enter the category and salary of Employee : 2 36000
The allowance = 7200.00

.‫ را دریافت نموده روی سکرین نشان میدهد‬2 ‫ برنامۀ ذیل جذرهای معادله یک مجهوله درجه‬:27.5 ‫مثال‬
/* Program to find the roots of a quadratic equation using switch statement */
#include <iostream.h>
main ( )
{
104
int flag;
float a, b, c, d;
float x, x1, x2;
float rpart, ipart;
cout << " \n Enter 3 numbers :" ;
cin >> a >> b >> c;
// solution to equation of the form bx + c = 0
if (a==0)
{
x = -b / c;
cout << "Only root = " << x;
}
d=b*b-4*a*c;
if ( d > 0 )
flag = 1;
else if ( d == 0)
flag = 2;
else
flag = 3;
// Solution using switch-case default statement
switch ( flag )
{
case 1:
cout << "\n Real and distinct roots are : " ;
x1 = (-b + sqrt (d)) / (2 * a) ;
x2 = (-b - sqrt (d)) / (2 * a) ;
cout <<"\n x1 = " << x1 << "\n x2 = " << x2 ;
break;
case 2:
cout << "\n Repeated roots are : " ;
x1 = -b / (2 * a) ;
x2 = x1 ;
cout <<"\n x1 & x2 = " << x1 ;
break;
case 3:
d = sqrt (abs (d)) ;
rpart = -b / (2 * a) ; // real part of a complex root
ipart = -b / (2 * a) ; // imaginary part of a complex root
cout <<"\n complex root are :" ;
cout << "\n x1 = " << rpart;
cout << "\n x2 = " << ipart;
}
}
Output
Enter 3 numbers : 2 6 4
105
‫‪Real and distinct roots are :‬‬
‫‪x1 = -1.000‬‬
‫‪x2 = -2.000‬‬

‫عملگر شرطی (‪)The Conditional Operator‬‬


‫در اکثریت موارد این عملگرر بررای تصرمیم گیرری دوطرفره‬
‫استفاده میشود‪ .‬این عملگر ترکیب عالمه سوالیه ؟ و کرالن ‪:‬‬
‫نیاز به سه قیمت (‪ )Operands‬دارد (‪.)Overland, 2013‬‬ ‫میباشدو‬
‫شکل عمومی آن قرار ذیل است‪:‬‬
‫;‪Expression1 ? Expression2 ; Experssion3‬‬

‫‪ ‬شرط اول (‪ )Expression1‬در قردم اول امتحران میگرردد‪ .‬اگرر‬


‫درست بود ‪ Expression2‬اجرا میگرددو اگر شرط نادرسرت برود‬
‫در آنصورت‪ Expression3‬اجرامیگردد‪.‬‬
‫‪ ‬همیشه یکی از این دو شرط اجرامیگردد‪ .‬امکان ندارد کره‬
‫هردو شرط در عین زمان اجرا گردد‪.‬‬
‫‪ ‬شما میتوانیددستور ‪ if () – else‬را کره معرادل ‪conditional operator‬‬
‫است قرار ذیل استفاده نمایید‪:‬‬
‫)‪if (Expression1‬‬
‫;‪Expression 2‬‬
‫‪else‬‬
‫;‪Expression 3‬‬
‫نمایش‬ ‫‪6.5‬‬ ‫در شکل‬ ‫(‪)Conditional Operator‬‬ ‫فلوچارت عملگر شرطی‬
‫داده شده است‪:‬‬

‫‪Conditional‬‬ ‫شکل ‪ 6.5‬فلوچارت عملگر‬

‫‪106‬‬
.‫ را از کیبورد میگیردو معادالت ذیل را ارزیابی میکند‬x ‫ برنامۀ ذیل قیمت‬:28.5 ‫مثال‬
/* Write a program to read the value of x and evaluate the following function
y = x + 15 for x > 0
y = 1.92x + 5 for x = 0
and y = 2x + 10 for x < 0 */

// Program to show usage of ? : operator


#include <iostream.h>
main ( )
{
float x, y;
cout << " \n Enter a value of x :" ;
cin >> x;
y = ( x > 0 ) ? x + 15 : ((x<0) ? 2 * x + 10 : 1.92 * x + 5 ) ;
cout << "\n When x = " << x <<" y = " << y;
return 0;
}
Output
Enter a value of x : 3
When x = 3, y = 18
Enter a value of x : -5
When x = -5, y = 0
Enter a value of x : 0
When x = 0, y = 5

‫یک مغازا رخت فروشی برای مشتریان خویش به طور ذیل تخفیف‬
:‫را در نظر گرفته است‬
‫تخفیف‬ ‫مقدار خرید‬
Discount parchase amount
%5 100 – 0
%7.5 200 – 101
%10 300 – 201
%15 300 ‫بیشتر از‬
‫برنامۀ را بنوسید که قیمت خالص را بعد از وضع تخفیف‬
‫نشان دهد؟‬
:‫ مسأله فوق را طور ذیل برنامه ریزی مینماییم‬:29.5 ‫مثال‬
// A cloth showroom offers discount on parchase of items as follow:
#include <iostream.h>
main ( )
{
float amount, net;
107
‫; "‪cout << " \n Enter the purchase amount please :‬‬
‫; ‪cin >> amount‬‬
‫)‪if (amount <= 0‬‬
‫{‬
‫;" ‪cout << "\n Invalid amount‬‬
‫}‬
‫‪// computation of net amount‬‬
‫‪net = (amount <= 100 ) ? amount - amount * 0.05 :‬‬
‫‪(amount <= 200) ? amount - amount * 0.075 :‬‬
‫‪(amount <= 300 ) ? amount - amount * 0.01 :‬‬
‫;‪amount - amount * 0.15‬‬
‫;‪cout << "\n The amount after discount = " << net‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter the purchase amount please : 110‬‬
‫‪The amount after discount = 101. 75‬‬
‫‪Enter the purchase amount please : 542.9‬‬
‫‪The amount after discount = 461.47‬‬

‫بیانیه ‪goto‬‬
‫با اسرتفاده از ایرن بیانیره میتوانیردهر قسرمت دلخرواه‬
‫برنامه را اجرا کنید‪ .‬قابل ذکر است که ‪ goto‬بیانیرۀ شررطی‬
‫نیست‪ .‬شکل عمومی آن قرار ذیل است (عدلیار‪goto label; :)1381 ,‬‬

‫در اینما ‪ label‬ناماست که در آغاز سطر کره کررز بایرد بره‬


‫آنما برود نوشته میگردد‪.‬‬
‫‪ ‬نام لیبل باید تمام قواعد که برای تعریف نام یک متحول‬
‫در نظر گرفته میشودمراعت کنرد‪ .‬نرام لیبرل میتواندکره‬
‫حاوی حروف‪ ،‬ارقام و اندرسکور باشد اما اولین کرکتر آن‬
‫همیشه باید حرف باشد‪.‬‬
‫‪ ‬نام لیبل و به تعقیب آن دو نقطه ( ‪ ) :‬را در آغاز سطر‬
‫که میخواهیدبرنامه از آنما اجرا گردد تحریر نمایید‪.‬‬
‫‪ ‬شکل عمومی ‪ goto‬و لیبل آن قرار ذیل است‪:‬‬

‫‪108‬‬
‫شکل ‪ 7.5‬بیانیه ‪goto‬‬
‫وقتیکه لیبل بعد از بیانیه ‪ goto‬نوشته شود آن را به نام‬ ‫‪‬‬
‫جمپ ب پیش رو (‪ )Jump forward‬و اگر لیبرل قبرل از بیانیره‬
‫‪ goto‬معرفی شود آنرا به نام جمپ ب عقب (‪ )backward Jump‬یاد‬
‫میکندطوریکه در شکل ‪ 7.5‬نمایش داده شده است‪.‬‬
‫هر لیبل در یک برنامه باید یگانه (‪ )unique‬باشد‪ .‬به این‬ ‫‪‬‬
‫معنا که دو بیانیه مختلف در یرک برنامره نمیتوانردعین‬
‫نام را برای لیبل داشته باشد‪.‬‬
‫بیانیه ‪ goto‬را میتوانیدهمراه برا دسرتور شررطی )( ‪ if‬غررض‬ ‫‪‬‬
‫تکرار برنامه (‪ )loop‬استفاده کرد‪.‬‬
‫بعضی اوقات ‪ goto‬سبب تکرار برنامه به شکل زیتنراهی نیرز‬ ‫‪‬‬
‫میگرددکه این حالت را به نام ‪ infinite looping‬یادمیکند‪.‬‬

‫مثال ‪ :30.5‬برنامۀ ذیل شیوه استفاده بیانیه ‪ goto‬را نشان میدهد‪.‬‬


‫‪//Program to show usage of goto function‬‬
‫>‪#include <iostream.h‬‬
‫( )‪main‬‬
‫{‬
‫; ‪float r, circum‬‬
‫) ‪first : cout << "\n Enter Radius ( enter 0 to exit; " :‬‬
‫;‪cin >> r‬‬
‫)‪if ( r != 0‬‬
‫{‬
‫;‪circum = 2 * 3.14159 * r‬‬
‫;‪cout <<"\n Circumference = " <<circum‬‬
‫; ‪goto first‬‬
‫‪109‬‬
}
return 0;
}
Output
Enter radius (enter 0 for exit ) : 5
Circumference = 31.416
Enter radius (enter 0 for exit ) : 0

.‫ را نشان میدهد‬goto ‫ برنامۀ ذیل باز هم شیوه استفاده بیانیه‬:31.5 ‫مثال‬


//Program to show usage of goto statement
#include <iostream.h>
main) (
{
int a , b , big;
cout << "\n Enter a and b; "
cin >> a >> b;
if ( a > b(
{
big = a;
goto finish ;
}
if ( a <= b(
{
big = b;
goto finish;
}
finish:
cout << "\n Biggest of "<< a << " and " << b <<" is : " << big;
}
Output
Enter a and b : 14 38
Biggest of 14 and 38 is 38

.‫ عدد وارد شده را برعکس میسازد‬goto ‫ و‬if () ‫ برنامۀ ذیل با استفاده از‬:32.5 ‫مثال‬
// Program to reverse a number using if ( ) and goto
#include <iostream.h>
main) (
{
int n, rem, rev = 0;
cout << "\n Enter a number; " :
cin >> n;

start:
110
‫(‪if ( n == 0‬‬
‫‪// Terminate the loop when n = 0‬‬
‫;‪goto finish‬‬
‫;‪rem = n % 10‬‬
‫;‪rev = rev * 10 + rem‬‬
‫;‪n = n / 10‬‬
‫; ‪goto start‬‬
‫‪finish:‬‬
‫} ;‪cout << "\n The reverse number is : " << rev‬‬
‫‪Output‬‬
‫‪Enter a number : 1234‬‬
‫‪The reverse number is 4321‬‬
‫‪Enter a number : -8329‬‬
‫‪The reverse number is –9238‬‬

‫خـالصۀ فصل‬
‫در این فصل بیانیه های تصمیم گیری و یا شرطی مرورد بحرث‬
‫قرار گرفت و در نتیمه مفاهیم ذیل را آموختیم‪:‬‬
‫لسان ‪ C++‬بیانیه های شرطی دارد که در صورت نیاز میتوانیم‬
‫از آن استفاده نماییم‪ .‬این بیانیره هرا عبرارت انرد از‪:‬‬
‫بیانیۀ ‪ ،if‬بیانیۀ ‪ ،switch‬بیانیۀ سه تایی و بیانیۀ ‪. goto‬‬
‫بیانیۀ شرطی ‪ If‬یکی از قویترین بیانیره هرای ‪C++‬میباشرد‪.‬‬
‫این بیانیه شرط طرح شده را به شکل منطقی مرورد ارزیرابی‬
‫قرار داده‪ ،‬در صرورت صرحت برودن آن‪ ،‬عمرل اول کره توسرط‬
‫برنامه نویس طرح گردیده اجرا و در صرورت نادرسرت برودن‪،‬‬
‫شرط عمل دوم اجرامیگردد‪ .‬اگر در یک برنامه یک شرط داشته‬
‫باشیم در آنصورتاز) ( ‪ if‬استفاده مینماییم ولی اگرر دو شررط‬
‫داشته باشیم میتوانیم از ‪ if – else‬استفاده نماییم امرا اگرر‬
‫تعداد شرط ها بیشتر از دو باشد در آنصورت از بیانیرۀ ‪if -‬‬
‫)( ‪ else if –else‬استفاده مینماییم‪.‬‬
‫اگر تعداد شرط ها بیشرتر با شد در آنصرورت میتروانیم از‬
‫بیانیه شرطی ‪ switch‬نیز اسرتفاده نمراییم‪ .‬بره یراد داشرته‬
‫باشید تفاوت عمده بین ‪ if‬و ‪ switch‬در این است کره ‪ switch‬تنهرا‬
‫با نوعیت دیتای عددی تام (‪ )int‬و یک حرفی ‪ char‬کار میکنرددر‬
‫حالیکه ‪ if‬میتواندهر نوعیت دیتا را قبول کند‪.‬‬
‫عملگر سه تایی در اکثریت موارد برای تصمیم گیری دوطرفره‬
‫استفاده میگردد‪ .‬این عملگر متشرکل از عالمره سروالیه ؟ و‬
‫کالن ‪ :‬میباشدو نیاز به سه قیمت (‪ )Operands‬دارد‪.‬‬
‫‪111‬‬
‫و باآلخره‪ ،‬با اسرتفاده از بیانیره ‪ goto‬میتوانیردهر قیمرت‬
‫دلخواهی برنامه را اجررا کنیرد‪ .‬قابرل ذکرر اسرت کره ‪goto‬‬
‫بیانیه شرطی نیست ولی با استفاده از آن میتوانیدیک قسمت‬
‫خاص برنامه را نظر به یک شرط اجرا نمایید‪.‬‬
‫پرسشهای فصل‬
‫هدف دستور ‪ if‬چیست؟‬ ‫‪.1‬‬
‫هدف عملگر سه گانه (‪ )ternary operator‬چیست؟‬ ‫‪.2‬‬
‫بیانیه ‪ nested if‬را توضیح دهید؟‬ ‫‪.3‬‬
‫سلسله بیانیه ‪ if – else‬را بیان دارید؟‬ ‫‪.4‬‬
‫فلوچارت ‪ else – if‬را بیان دارید؟‬ ‫‪.5‬‬
‫تفاوت بین ‪ if‬و ‪ goto‬چیست؟‬ ‫‪.6‬‬
‫تفاوت بین ‪ if – else‬و ‪ switch‬چیست؟‬ ‫‪.7‬‬
‫فعالیت گروپی‬
‫را بنوسید که یک رقم وارد شده از کیبورد را‬ ‫‪ .8‬برنامۀ‬
‫بخواند و مترادف آنرا به شکل حروفی روی سکرین نشان‬
‫دهد (طور مثال‪ 2 ،‬وارد گردد و آنرا به شیوا حروفی ‪two‬‬
‫نشان دهد)؟‬
‫‪ .9‬برنامه را بنویسد که دو عدد را وارد نموده و این را‬
‫مشخص سازید که‪:‬‬
‫‪ .a‬عدد اول مثبت است ‪ ،‬منفی و یا ‪0‬‬
‫‪ .b‬عدد دوم مثبت است‪ ،‬منفی و یا ‪0‬‬
‫‪ .c‬عدد اول جفت است یا تا‬
‫‪ .d‬عدد دوم جفت است یا تا‬
‫‪ .10‬برنامۀ را بنوسید که باقیمانده‪ M‬تقسیم ‪ N‬را دریافت‬
‫نماید (سمبول ‪ %‬را استفاده نکنید)؟‬
‫‪ .11‬برنامۀ را بنوسید که قیمت فارنهایت را بگیرد و آنرا‬
‫به سانتی گرید تبدیل نماید‪ .‬اگر عدد ‪ 999‬وارد شود‬
‫برنامه ختم گردد؟‬

‫‪112‬‬
‫فصل ششم‬
‫حلقه ها‬
‫‪Loop Statements‬‬

‫هدف عمومی‪ :‬با بیانیه های حلقوی (‪ )Loop Statements‬آشنا شوند‪.‬‬


‫اهداف آموزشی‪ :‬در پایان این فصل‪ ،‬محصالن قادر خواهند بود تا‪:‬‬
‫‪ .1‬مفهوم حلقه (‪ )loop‬را توضیح دهند‪.‬‬
‫‪ .2‬انواع حلقه های زبان‪ C++‬را بیان دارند‪.‬‬
‫‪ .3‬تفاوت بین دستورهای حلقوی را شرح دهند‪.‬‬
‫‪ .4‬حلقه زیتناهی را توضیح نمایند‪.‬‬
‫‪ .5‬مفهوم ‪ break‬و ‪ continue‬را شرح دهند‪.‬‬
‫این فصل حاوی مفاهیم حلقه‪ ،‬انواع حلقه ها و اهمیت آن در‬
‫برنامه نویسی مورد بحث قرار گرفته که یکی پی دیگر به‬
‫تفصیل توضیح میگردد‪.‬‬
‫وقتیکه خواسته باشیم بیانیه های یک برنامه را چندین بار‬
‫روی اسرتفاده‬ ‫تکرار نماییم‪ ،‬نیاز است تا از دستورهای حلقر‬
‫نماییم‪ .‬طوریکه میدانیم کمپیوتر توانایی اجرای عبارتهای‬
‫مختلف یک برنامه را به شکل مکرر دارد‪ .‬این قابلیت به ما‬
‫اجازه میدهدکه عبارت های مختلف یرک برنامره را نظرر بره‬
‫لزوم دید چندین بار تکررار نمراییم‪ .‬اگرر کمیپروتر ایرن‬
‫خاصیت را نمیداشت در آنصورت ممبور بودیم که برای اجررای‬
‫بعضی مسایل به هزارها سطر کود را نوشته میکردیم‪.‬‬
‫ساختار حلقوی (‪ )Looping Structure‬عبارت از ساختار است کره در آن‬
‫تعداد از بیانیه ها ی یک برنامه تا وقتی مکرر اجررا مری‬
‫گردد که شرط مطرح شده به دست آید‪ .‬حلقه (‪ )Loop‬از دو بخش‬
‫تشکیل گردیده است که عبارت از بدنره حلقره(‪ )Body of the loop‬و‬
‫بیانیه های کنترول کننده (‪)Control statements‬میباشد‪.‬‬
‫بیانیۀ کنترول کننأده (‪ )Control Statement‬شرط را چک میکند که آیا‬
‫برآورده شده یا خیر و مطابق به آن ممموعۀ از بیانیه هرا‬
‫که در بدن همان حلقه وجود دارد اجرا مینماید)‪.(Horton, 2012‬‬
‫ساختار کنترول کننده را میتوان به دو بخش تقسیم کرد‪:‬‬

‫‪113‬‬
‫‪a) Entry-controlled loops‬‬
‫‪b) Exit-controlled loops‬‬

‫‪ 1.6‬فلوچارت ‪Entry- controlled‬‬ ‫شکل‬


‫‪loop‬‬

‫در حلقۀ که شررط اول ارزیرابی گرردد و بعردا ممموعرۀ از‬


‫بیانیه ها به شکل مکرر تکررار میشرود (‪ ،)Pre-test‬ایرن نروع‬
‫سرراختار برره نررام کنتأأرول دخأأوهی حلقأأ (‪)Entry – controlled Loop‬‬
‫یادمیشود‪ .‬در چنین صورت بدنۀ حلقه وقتی اجرا میگردد کره‬
‫شرط صد نماید در غیر آن بیانیه های کره در داخرل حلقره‬
‫وجود دارد‪ ،‬اجرا نمیگردد و اختیار به بیانیه هرای خرار‬
‫از بدنه واگذارمیگردد‪ .‬شکل فو این موضوع را توضیح داده‬
‫است‪ .‬پس در حالت فو ‪ ،‬بدنه برنامه تا وقتی اجرا میگرردد‬
‫که شرط صد میکند و به مح که شرط نادرست گردد حلقه ختم‬
‫میگردد‪.‬‬
‫در حلقۀ که شرط در اخیر چک گرردد ایرن سراختار بره نرام‬
‫کنترول خروجی حلق (‪ )Exit-controlled loops‬یادمیشود‪ .‬در ایرن حالرت‬
‫بدنه حلقه حد اقل یکبار اجرا میگردد به خاطر که شررط در‬
‫آخر قرار دارد و در آخر مورد ارزیابی قرار میگیررد (‪Post-‬‬
‫‪ .)test‬در این حالت باز هم بدنۀ حلقه تا وقتی مکررا اجررا‬
‫میگردد که شرط صد میکند و به مح که خالف شرط عمل گرردد‬
‫بدنه حلقه دیگر تکرارنمیشود‪.‬‬
‫‪114‬‬
‫را نشان میدهد‪.‬‬ ‫شکل ‪ 2.6‬طرز کار کنترول خروجی حلق‬

‫‪ 2.6‬فلوچارت ‪Exit - controlled‬‬ ‫شکل‬


‫‪loop‬‬
‫اگر برنامه طور عیار شده باشد که شرط هریچ وقرت نادرسرت‬
‫نگردد در آنصورت برنامه به طور زیتناهی اجرا میگردد کره‬
‫رای (‪)Infinite loop‬‬
‫ایررن نرروع حلقرره را برره نررام حلقررۀ زیتنهر‬
‫یادمیکند‪ .‬به این خاطر ززم است ترا در وقتری تعریرف یرک‬
‫حلقه احتیاط گردد که حلقه شکل زیتنهای را به خود نگیررد‬
‫)‪.(Nakov & Kolev,2013‬‬
‫به صورت عموم ساختار حلقوی حاوی مراحل ذیل میباشد‪:‬‬
‫سس‬

‫در قیمت اولی برای محاسب‬


‫(‪)Intitializing a counter‬‬ ‫‪)a‬‬
‫( ‪Executing the statements in the‬‬ ‫اجرای بیانیه هرا در بدنره حلقره‬ ‫‪)b‬‬
‫‪)domain of the loop‬‬
‫ارزیابی نمودن شرط برنامه ; به این معنا که آیا قیمرت‬ ‫‪)c‬‬
‫میکند یرا خیرر( ‪Testing the condition in the‬‬ ‫وارد شده با شرط صد‬
‫‪)control statement‬‬
‫بعد از هر بار اجرای حلقه‬ ‫(‪)couter‬‬ ‫اضافه شدن قیمت محاسب‬ ‫‪)d‬‬
‫(‪)Incrementing the counter‬‬

‫‪115‬‬
‫انواع حلقه (‪)Types of Looping Constructs‬‬
‫در لسان ‪ C++‬سه نوع ساختار حلقوی وجود دارد که عبارت اند‬
‫از )‪:(2004, Glassborow‬‬
‫‪a) The for ( ; ; ) Loop‬‬
‫‪b) The while ( ) Loop‬‬
‫‪c) The do – while ( ) Loop‬‬

‫بیانیه ) ; ; ( ‪THE FOR‬‬


‫‪ for‬یکی از مشهورترین حلقه های زبان‪ C++‬است که در برنامره‬
‫ها بیشتر مورد استفاده قرارمیگرد‪ .‬در این حلقه براز هرم‬
‫شرط در ابتدا مورد ارزیابی (‪ )pre-test‬قرار گرفته و در صورت‬
‫درست بودن آن بدنه حلقه (‪ )body of the loop‬اجرامیگردد‪.‬‬
‫شکل عمومی ‪ for‬قرار ذیل است‪:‬‬

‫شکل ‪ 3.6‬شکل عمومی حلقه ‪for‬‬


‫‪ .1‬متحول ‪ first_exp‬اولین قیمت که حلقه از آن آغاز میگردد در‬
‫خود ذخیره مینماید‪.‬‬
‫‪ .2‬متحول ‪ second_exp‬قیمت شرط حلقه است که در صورت صد بودن‬
‫آن بدنه حلقه اجرامیگردد‪.‬‬
‫‪ .3‬متحررول ‪ third_exp‬قیمررت افررزودن (‪ )increament‬و یررا کرراهش‬
‫(‪ )decrement‬را در خود ذخیره مینماید‪.‬‬
‫مثال ذیل را در نظر گیرید‪:‬‬
‫)‪for ( k = 1 ; k < = 10 ; k ++‬‬
‫; ‪cout <<”\ n “ << k‬‬
‫‪ 1‬قیمت میگیرد‪ .‬بخش دوم یعنی ‪ k < = 10‬مری‬ ‫در این مثال ‪ k‬از‬
‫مطرح گردیده که ‪ k‬مریتوانرد الری ‪10‬‬ ‫شرط‬ ‫باشد و در آن یک‬
‫‪116‬‬
‫قیمت بگیرد‪ .‬در بخش سوم دیده میشود که قیمت ‪ k‬بعد از هرر‬
‫بار اجرا به اندازه ‪1‬اضافه میشود‪ .‬پس گفته میتوانیم کره‬
‫برنامه از ‪ 1‬الی ‪ 10‬قیمت میگیرد و آنرا روی سرکرین نشران‬
‫میدهد و بعدا حلقه بسته میگردد‪.‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪10‬‬

‫را طوری ذیل نوشت‪:‬‬ ‫اگر مثال فو‬


‫)‪for ( k = 10 ; k > 0 ; k - -‬‬
‫; ‪cout <<”\ n “ << k‬‬
‫نتیمه طور ذیل خواهد بود‪:‬‬
‫‪10‬‬
‫‪9‬‬
‫‪9‬‬
‫‪.‬‬
‫‪.‬‬
‫‪1‬‬
‫‪ .4‬گذاشتن سیمی کرولن ( ; ) در برین بخرش اول و دوم ززمری‬
‫است‪.‬‬
‫‪ .5‬اگر قیمت کدام بخش در خود ساختار ‪ for‬موجود نباشرد براز‬
‫هم ززم است که سیمی کولن همران بخرش در سراختار وجرود‬
‫داشته باشد‪.‬‬
‫مثال ذیل را در نظر گیرید‪:‬‬
‫)‪for ( ; I > 10 ; ++‬‬
‫وجود ندارد اما سیمی‬ ‫دیده میشود که بخش اول در ساختار‬
‫‪for‬‬
‫کولن (;) دراین بخش نوشته شده است‪.‬‬
‫‪ .6‬بدنه ‪ for‬میتواند یک یا چند بیانیره داشرته باشرد‪ .‬اگرر‬
‫بیشتر از یک بیانیه باشد بیانیه ها باید داخل قوسهرای‬
‫بزرگ { } نوشته شود‪.‬‬
‫‪ .7‬خوبی حلقه ‪ for‬نسبت به ‪ while‬و ‪ do-while‬در این است که تمرام‬
‫بخشهای حلقه ‪ for‬در یک سطر ذکرمیشود (بیانیه ‪ for‬نسبت بره‬
‫دیگر بیانیه ها ساده تر است)‪.‬‬

‫‪117‬‬
‫) ‪for ( i = 1; i <= 10; i ++‬‬ ‫;‪i = 1‬‬ ‫;‪i=1‬‬
‫) ‪while ( i <= 10‬‬ ‫‪do‬‬
‫{‬ ‫{‬ ‫{‬
‫; ‪Statements‬‬ ‫; ‪Statements‬‬
‫; ‪Statements‬‬ ‫…‬ ‫…‬
‫…‬ ‫…‬ ‫…‬
‫…‬ ‫…‬ ‫…‬
‫…‬ ‫…‬ ‫…‬
‫…‬ ‫;‪i++‬‬ ‫;‪i++‬‬
‫}‬ ‫}‬ ‫}‬
‫)‪(a‬‬ ‫; )‪while ( i <10‬‬
‫)‪(b‬‬
‫)‪(c‬‬

‫شکل ‪ 4.6‬مقایسه ساختار هر سه حلقه‬


‫; ( ‪Comma Operator in for‬‬ ‫‪ .9‬عملگر سیمی کالن در بیانیه ) ;‬
‫دربیانیۀ ) ; ; ( ‪ for‬میتوانید چندین متحرول را در عرین زمران‬
‫قیمت اولیه دهید مشروط بر اینکه برین شران عملگرر سریمی‬
‫کالن را اضافه کنید‪ .‬وقتیکه کالن قیمت ها را جدا نمایرد‬
‫در آنصورت اجرای آن از سمت چس به راسرت مرورد ارزیرابی‬
‫قرارمیگیرد‪.‬‬
‫بخش ذیل برنامه را مشاهده کنید‪:‬‬
‫;‪x=2‬‬
‫)‪for ( i = 1 ; i <= 10 ; i++‬‬
‫{‬
‫…‬
‫…‬
‫…‬
‫; ‪x ++‬‬
‫}‬
‫را با استفاده از کالن به‬ ‫شما میتوانید مسأله فو‬
‫صورت ذیل نوشت‪:‬‬

‫)‪for ( x =2; i = 1; i <= 10 ; x++, i++‬‬


‫{‬
‫…‬
‫}‬
‫(‪ )Initilatzation Section‬و بخرش افرزودی‬ ‫در مثرال فرو بخرش اولری‬
‫(‪ )Incrementation Section‬دارای دو متحول اند‪.‬‬

‫‪118‬‬
‫‪ .10‬بخش ارزیابی حلقه ‪ for‬یا (‪ )test condition‬نیز میتوانرد دارای‬
‫چندین شرط به شکل ترکیبی باشد که یکی آن متحول داخلری‬
‫حلقه و دومی آن ممکن خارجی باشد‪ .‬در بخش ذیل ‪ I‬متحرول‬
‫داخل حلقه ‪ for‬و ‪ Sum‬متحول خارجی است‪.‬‬
‫; ‪sum = 0‬‬
‫) ‪for ( i = 1; i <= 10 && sum <= 100 ; i++‬‬
‫{‬
‫; ‪sum = sum + i‬‬
‫; ‪cout << i << sum‬‬

‫‪ .11‬حلقه ) ; ; ( ‪ for‬را میتوانید به حیث حلقره تراخیر (‪)delay loop‬‬


‫مورد استفاده قرار داد‪.‬‬
‫; ) ‪for ( x = 1; x < = 1500 ; x + +‬‬
‫این حلقه سبب تاخیر زمان میگردد و بررای ‪ 1500‬برار بردون‬
‫اینکه هیچ بیانیه را اجرا نماید تکرار میشود‪ .‬سیمی کولن‬
‫(;) در اخیر بیانیه حلقه ‪ for‬بره نرام بیانیره خرالی ( ‪Null‬‬
‫‪ )Statement‬نیز یادمیگردد‪ .‬پس در همچرو حالرت کمپرایلر ‪C++‬‬
‫این بیانیه را اشتباه نمیگیرد (یعنری وجرود سریمی کرولن در‬
‫اخیر حلقه ‪.)for‬‬
‫مثال ‪ :1.6‬برنامۀ ذیل عدد وارد شده را چک نموده که عدد اولیه است یا خیر؟‪.‬‬
‫‪/* program to check whether a number is prime or not */‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫; ‪int n, i‬‬
‫; " ‪cout << " \n Enter a positive number please :‬‬
‫;‪cin >>n‬‬
‫)‪if ( n <= 1‬‬
‫{‬
‫;‪cout << "\n The number is not prime : " << n‬‬
‫;)‪exit(0‬‬
‫}‬
‫) ‪for ( i = 2; i <= n/2; i++‬‬
‫{‬
‫) ‪if ( n % i == 0‬‬
‫{‬
‫;‪cout <<"\n The number is not prime : " << n‬‬
‫;)‪exit (0‬‬
‫}‬
‫) ( ‪} // end of for‬‬

‫‪119‬‬
cout <<"\n The number is prime : " << n;
return 0;
} // end of main ( )
Output
Enter a positive number please : 11
The number is prime : 11
Enter a positive number please : 10
The number is not prime : 10

.‫ برنامۀ ذیل مجموعۀ سلسله ذیل را دریافت نموده روی سکرین نشان میدهد‬:2.6 ‫مثال‬
// Program to find the sum of the series 1 + x + x ^2 + …. + x ^ n
#include <iostream.h>
#include <math.h>
main ( )
{
float i, x , sum = 1 ;
int n ;
cout << “ \n Enter the number of terms : “ ;
cin >>n;
cout <<” Enter the value of x “ ;
cin >> x;
for ( i = 1; i <= n ; i++ )
sum = sum + pow (x, i) ;
cout <<”\n Summation of series = “ << sum ;
return 0;
}
Output
Enter the number of terms : 10
Enter the value of x : 2
Summation of series : 2047

.‫ برنامۀ ذیل مجموعۀ سلسله ذیل را دریافت مینماید‬:3.6 ‫مثال‬


// Program to print the sum of the series S = 1 + 1/2 + 1/3 + ….+ 1/n
#include <iostream.h>
main ( )
{
int n, i ;
120
float sum = 0 ;
cout << “ \n Enter value of n : “ ;
cin >>n;
for ( i = 1; i <= n ; i++ )
sum = sum + 1.0 / i ;
cout <<”\n Summation = “ << sum ;
return 0;
}
Output
Enter value of n : 10
Summation = 2.929

.‫ برنامۀ ذیل عدد وارد شده به برنامه را بررسی نموده که یک عدد کامل است یا خیر؟‬:4.6 ‫مثال‬
// Program to find whether a given number is a perfect number or not
#include <iostream.h>
main ( )
{
int i , n, sum = 1;
cout << “ \n Enter a number : “ ;
cin >>n;
for ( i = 2; i <= n / 2 ; i++ )
{
if ( n % i ==0 )
sum = sum + i ;
}
if ( n == sum )
cout <<”\n This is a perfect number “ << n ;
else
cout <<”\n This is not a perfect number “ << n;
return 0;
}
Output
Enter a number : 6
This is a perfect number : 6
Enter a number : 5
This is not a perfect number : 5
:‫ باید در نظر گرفته شود‬for ( ; ; ) ‫نکات که در اثنای استفاده بیانیه‬
‫) یرک حلقره نظرر بره قیمرت‬Iinitial value) ‫اگر قیمت آغازین‬ .i
.‫آخرین آن بزرگتر باشد در آنصورت حلقه اجرانمیگردد‬
121
‫اگر در یک برنامه دو یا چند حلقه وجود داشرته باشرد‬ ‫‪.ii‬‬
‫متحولهای هر دو حلقه باید نرام هرای متفراوت داشرته‬
‫باشد‪.‬‬
‫تعداد اجرای یک حلقه نظر به فورمول ذیل محاسبه می‬ ‫‪.iv‬‬
‫گردد‪:‬‬

‫𝑡𝑖𝑚𝑖𝑙 𝑟𝑒𝑤𝑜𝑙‪𝑈𝑝𝑝𝑒𝑟 𝑙𝑖𝑚𝑖𝑡 −‬‬


‫‪n‬‬ ‫‪= int‬‬ ‫‪+1‬‬
‫𝑒𝑧𝑖𝑠𝑝𝑒𝑡𝑠‬
‫طور مثال در حلقه ذیل‪:‬‬
‫‪for example in the loop‬‬
‫) ‪for ( i = 0 ; i < 10 ; i = i + 2‬‬
‫{‬
‫‪………..‬‬
‫}‬
‫‪9−0‬‬
‫‪n = int‬‬ ‫‪+1=5‬‬
‫‪2‬‬

‫بیانیه ) ( ‪THE WHILE‬‬


‫ساختار حلقه ‪ while‬در ابتدا شرط را مورد ارزیابی قررار مری‬
‫دهد و از جملۀ حلقه های ‪ Pre-test‬محسوب میگردد‪.‬‬
‫شکل عمومی آن قرار ذیل است‪:‬‬

‫)‪while ( expression‬‬
‫{‬
‫; ‪Statements‬‬
‫…‬
‫…‬ ‫‪Domain of loop‬‬
‫…‬
‫}‬
‫;‪next _ statement‬‬

‫شکل ‪ 5.6‬حلقه ‪while‬‬


‫بیانیه ) ( ‪ while‬طور ذیل عمل می کند‪:‬‬
‫در قدم اول شرط ارزیابی میشود ‪ ،‬اگر صرد نمرود بدنره‬ ‫‪‬‬
‫حلقه اجرا میشود و دوباره شرط ارزیابی میگردد‪.‬‬
‫اگر شرط باز هم صد نمود بدنه حلقه مکررا اجرامیگردد‪.‬‬ ‫‪‬‬
‫اگر شرط صد ننمود در آنصورت بدنه حلقه اجرا نمیشرود‬ ‫‪‬‬
‫و بیانیه های بیرون از حلقه (‪ )next statement‬اجرامیگردد‪.‬‬
‫‪122‬‬
‫رک یرا چنردین بیانیره را‬ ‫حلقه میتواند در داخل خرود یر‬ ‫‪‬‬
‫داشته باشد‪ .‬اگر یک بیانیه باشد‪ ،‬نیاز نیست کره داخرل‬
‫قوس بزرگ (‪ )Braces‬نوشته شود اما اگر تعداد بیانیره هرا‬
‫بیشتر از یک باشد در آنصورت باید تمام این بیانیه هرا‬
‫در داخل یک جوره قوسهای بزرگ (‪ )Braces‬نوشته شود‪.‬‬
‫تا وقتیکه شرط صد میکند تمام بیانیه های داخل قوس که‬ ‫‪‬‬
‫به نام بدن حلق (‪ )loop body‬یراد میشرود بره شرکل مکررر‬
‫اجرامیگردد‪.‬‬

‫مثال ‪ :5.6‬برنامۀ ذیل اعداد طبیعی ‪ 1‬الی ‪ n‬را با استفاده از ) ( ‪ while‬روی سکرین نشان میدهد‪.‬‬
‫‪// Program to generate first N natural number‬‬
‫>‪#include <iostream.h‬‬
‫{ ) ( ‪main‬‬
‫; ‪int i, n‬‬
‫‪// initialize i to 1‬‬
‫;‪i = 1‬‬
‫; “ ‪cout << “ \n Enter the value of n :‬‬
‫;‪cin >> n‬‬
‫) ‪while ( i <= n‬‬
‫{‬
‫; ‪cout << “\n “ << i‬‬
‫;‪i++‬‬
‫}‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter the value of n: 5‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬

‫‪123‬‬
‫ میباشد و به تعقیب آن حلقره‬i = 1 ‫ اولین قیمت‬، ‫در مثال فو‬
‫ بره‬i ‫ هر بار که حلقه اجرا میشرودقیمت‬.‫ بار اجرامیگردد‬5
6 ‫ مساوی بره‬i ‫ هر وقتیکه قیمت‬.‫ واحد اضافه میشود‬1 ‫اندازه‬
‫گردد شرط حالت نادرسرت را بره خرود گرفتره و حلقره خرتم‬
.‫میگردد‬
.‫ را جمع و حاصل جمع آنرا روی سکرین نشان میدهد‬n ‫ الی‬1 ‫ برنامۀ ذیل اعداد طبیعی‬:6.6 ‫مثال‬
// program to find the sum of first n natural numbers 1 + 2 + 3 + …… + n
#include <iostream.h>
main ( ) {
int sum = 0, i = 1, n;
cout << “ \n Enter the value of n : “ ;
cin >> n;
while ( i <= n )
{
sum = sum + i;
i ++ ;
}
cout << “\n Sum = “ << sum;
return 0;
}
Output
Enter the value of n: 5
Sum = 15
Enter the value of n : 0
Sum = 0
Euclid’s ‫ برنامۀ ذیل کوچکترین و بزرگترین قاسم مشترک دو عدد را با استفاده از الگوریتم‬:7.6 ‫مثال‬
.‫دریافت مینماید‬
*/program to calculate the LCM and GCD of two positive integers using Euclid's
algorithm/*
#include <iostream.h>
main) (
{
int m, n, temp, remain, lcm, gcd;
cout << " \n Enter two integer m & n; " :
cin >> m >> n;
// Assign m * n to temp to retain the original value of m and n
temp = m * n;
remain = m % n;
while ( remain != 0(
{
m = n;
n = remain;
remain = m % n;

124
}
gcd = n;
lcm = temp/ gcd;
cout << "\n LCD = " <<lcm << " GCD = " << gcd;
return 0;
}
Output
Enter two integers m & n : 8 13
LCD = 104, GCD = 1
Enter two integers m & n : 12 8
LCD = 24, GCD = 4
.‫ برنامۀ ذیل کوچکترین مضرب و بزرگترین قاسم مشترک بین دو عدد را نشان میدهد‬:8.6 ‫مثال‬
/* program to calculate the LCM and GCD of two positive integers */
#include <iostream.h>
main ( )
{
int m, n, temp, lcm, gcd;
cout << “ \n Enter two integer m & n : “ ;
cin >> m >> n;
// Assign m * n to tem to retain the original value of m and n
temp = m * n ;
// Calculation of gcd
while ( m != n )
{
if ( m > n)
m=m–n;
else
n=n–m;
}
gcd = n ;
lcm = temp / gcd ;
cout << “\n LCM = “ <<lcm << “ GCD = “ << gcd ;
}
Output
Enter two integers m & n : 12 16
LCD = 48, GCD = 4

.‫ برنامۀ ذیل عدد وارد شده را برعکس میسازد‬:9.6 ‫مثال‬

125
/* program to reserve an integer number */
#include <iostream.h>
main ( )
{
int num, rev, remain; Dry Run
cout << “ \n Enter a number : “ ;
rev = 0, num = 678
cin >> num;
// initialize rev to 0
rev = 0;
while ( num != 0 ) remain rev num
{ 8 8 67
remain = num % 10; 7 87 6
rev = rev * 10 + remain ; 6 876 0
num = num / 10 ;
}
cout << “\n Reserved number is : “ << rev ;
return 0;
}
Output
Enter a number : 590
Reversed number is : 95
Enter a number : 678
Reversed number is : 876
.‫ را تهیه مینماید‬Fiabanocci ‫ برنامۀ ذیل سلسۀ اعداد‬:10.6 ‫مثال‬
// program to generate the first n Fiabanocci Number
#include <iostream.h>
main (
{
int i = 3, fib1 = 1, fib2 =1, fib, n;
cout << " \n How many Terms ? " ;
cin >> n;
cout<< fib1 << "\n" << fib2 <<"\n" ;
while ( i < n) {
fib = fib1 + fib2 ;
cout << fib <<"\n";
fib1 = fib2 ;
fib2 = fib ;
i++; }
return 0; }
Output
How many Term ? 5
1
1
2
126
3

.‫ برنامۀ ذیل تعداد ارقام جفت و تاق را در عدد وارد شده به برنامه حساب میکند‬:11.6 ‫مثال‬
/* program to count the number of even and odd digits in a number */
#include <iostream.h>
main ( )
{
int num, r, odd, even ;
cout << “ \n Enter an integer number : “ ;
cin >> num;
odd = 0, even = 0 ;
while ( num != 0)
{
r = num % 10;
num = num / 10 ;
if (r % 2 == 0)
even ++;
else
odd++;
}
cout <<”\n Number od Odd digits : “ << odd ;
cout <<”\n Number of Even digits : “ << even;
return 0 ;
}
Output
Enter an integer number : 1213
Number of Odd digits : 3
Number of Even digits : 1

THE DO - WHILE ( ) ‫بیانیه‬


‫ بعد از اینکه بدنه حلقه اجرا گردید شررط را‬do-while ‫بیانیۀ‬
.‫ محسوب میگردد‬Post-test ‫ارزیابی میکند و از جملۀ حلقه های‬
:‫شکل عمومی آن قرار ذیل است‬
do
{
Statements ;
… Body of Loop


}
while ( condition );
next _statement;

127
‫شکل ‪ 6.6‬حلقه ‪do-while‬‬
‫در ساختار ‪ ، do – while‬بدنۀ حلقه اول اجرامیگردد‪.‬‬ ‫‪‬‬
‫رد نمایرد‬‫شرط در مرحله دوم ارزیابی میشود‪ .‬اگر شرط صر‬ ‫‪‬‬
‫باز هم بدنه حلقه به شکل مکرر اجرامیشود‪.‬‬
‫اگر شرط صد نکند در آنصورت بدنه حلقه بره شرکل مکررر‬ ‫‪‬‬
‫اجرا نمریگرردد و بیانیره هرای بیررون از حلقره اجررا‬
‫میگردد‪.‬‬
‫مثال ‪ :12.6‬برنامۀ ذیل قیمت وارد شده را مورد ارزیابی قرارمیدهد‪.‬‬
‫‪// program to validate your input‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫;‪int num‬‬
‫‪do‬‬
‫{‬
‫; “ ‪cout << “ \n Input a positive number :‬‬
‫;‪cin >> num‬‬
‫}‬
‫;)‪while ( num <= 0‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Input a positive number : -10‬‬
‫‪Input a positive number : 0‬‬
‫‪Input a positive number : 5‬‬
‫برنامۀ فو تا وقتی تکرار میشود که عدد وارد شده ‪ 0‬و یا‬
‫عدد منفی باشد‪ .‬هر وقتیکه عدد مثبت وارد گرردد حلقره از‬
‫بین رفته برنامه دیگر قیمت نمیگیرد‪.‬‬
‫مثال ‪ :13.6‬برنامۀ ذیل جدول ضرب زبانی عدد وارد شده را روی سکرین نشان میدهد‪.‬‬
‫‪// program to print multiplication table of a given number‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫;‪int i, n, prod‬‬
‫;" ‪cout <<"\n Enter a number :‬‬
‫; ‪cin >> n‬‬
‫;‪i = 1‬‬
‫;"‪cout <<"\n Multiplication Table \n\n‬‬
‫‪do‬‬
‫{‬

‫‪128‬‬
prod = i * n ;
cout <<"\n " <<i <<" * " << n << " = " << prod;
i = i++;
}
while ( i <= 10);
return 0;
}
Output
Enter a number : 4
Multiplication Table
1 * 4 =4
2 * 4 =8
3 * 4 = 12
4 * 4 = 16
5 * 4 = 20
6 * 4 = 24
7 * 4 = 28
8 * 4 = 32
9 * 4 = 36
10 * 4 = 40

.‫ برنامۀ ذیل فکتوریل عدد وارد شده را دریافت مینماید‬:14.6 ‫مثال‬


// program to find the factorial of a number
#include <iostream.h>
main ( )
{
int i = 1, n;
long fact = 1 ;
cout <<”\n Input a number please :“;
cin >> n;
do
{
fact = fact * i ;
i ++;
}
while ( i <= n );
cout <<”\n Factorial of “ << n << “ = “ << fact ;
return 0;
}
Output
Input a number please : 6
Factorial of 6 = 720
Input a number please : 1
Factorial of 6 = 1
Input a number please : 0
129
Factorial of 6 = 1
.‫ برنامۀ ذیل مجموعۀ ارقام عدد وارد شده را دریافت مینماید‬:15.6 ‫مثال‬
// program to find the sum of digits of a number
#include <iostream.h>
main ( )
{
int num, sum = 0, rem ;
cout <<”\n Enter a positive number : “;
cin >> num;
do
{
rem = num % 10 ;
sum = sum + rem ;
num = num / 10 ;
}
while ( num > 0 );

cout <<”\n Sum of the digits = “ << sum ;


return 0;
}
Output
Enter a positive number : 246
Sum of the digits = 12
Enter a positive number: 0
Sum of the digits = 0
.‫ پوره قابل تقسیم اند روی سکرین نشان میدهد‬3 ‫ و‬2 ‫ هر عدد که به‬n ‫ الی‬1 ‫ برنامۀ ذیل بین‬:16.6 ‫مثال‬
// program to print all the numbers divisable by 2 and 3 between 1 and n
#include <iostream.h>
main ( )
{
int num= 1, n, rem2, rem3;
cout <<”\n Enter value of n : “;
cin >> n;
do
{
rem2 = num % 2 ;
rem3 = num % 3;
if (rem2 == 0 && rem3 == 0)
cout <<num << ”\n”;
num ++ ;
}
while ( num <= n );
return 0;

130
‫}‬
‫‪Output‬‬
‫‪Enter value of n : 20‬‬
‫‪6‬‬
‫‪12‬‬
‫‪18‬‬

‫حلقه در حلقه (‪)Nested FOR Loops‬‬


‫در داخل یک حلقه ‪ for‬دیگر قرار داشته باشد‬ ‫وقتیکه حلقه ‪for‬‬
‫نام ‪ Nested FOR Loop‬یادمیکند‪ .‬حلقرۀ داخلری‬ ‫این حالت را به‬
‫حلقۀ خارجی باید اجرا گردد (‪.)Nawaz, 2006‬‬ ‫‪ for‬برای هر ‪index‬‬
‫‪ Nested FOR Loop‬را نشان میدهد‪:‬‬ ‫شکل ‪ 7.6‬طرز کار‬

‫شکل ‪Nested for loop 7.6‬‬


‫در قدم اول قیمت ‪ i = 1‬در نظر گرفته شده و شرط ‪ i < = 5‬مورد‬ ‫‪‬‬
‫ارزیابی قرارمیگیرد‪ .‬اینکه در نخست شرط صحت دارد حلقه‬
‫اجرا میشود‪.‬‬
‫در قدم دوم قیمت ‪ j = 0‬در نظر گرفته شده و شرط ‪ j < = 9‬مورد‬ ‫‪‬‬
‫ارزیابی قرارمیگیرد‪ .‬طوریکه دیده میشودشررط صرحت دارد‬
‫پس بدنه حلقه داخلی اجرا میگردد و نتیمره ذیرل را روی‬
‫سکرین نشان میدهد‪:‬‬
‫‪0‬‬ ‫‪1‬‬
‫حلقه داخلی به شکل مکرر اجرا میشود ترا وقتیکره شررط‬ ‫‪‬‬
‫صحت داشته باشد‪ .‬وقرتریکه ‪ j = 10‬شود در آنصورت به قیمت‬
‫اولی حلقه خروجی ‪ 1‬اضافه شده و قیمت آن ‪2‬میگردد‪.‬‬
‫‪i‬‬ ‫‪j‬‬
‫‪1‬‬ ‫‪0‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪2‬‬
‫‪131‬‬
‫‪:‬‬
‫‪1‬‬ ‫‪9‬‬
‫‪2‬‬ ‫‪0‬‬
‫‪2‬‬ ‫‪1‬‬
‫‪:‬‬
‫‪5‬‬ ‫‪9‬‬
‫مرحله حلقه ها را داخل یکدیگر‬ ‫‪15‬‬ ‫شما میتوانید که تا‬
‫(‪ )nested loops‬قرار دهید‪.‬‬
‫مثال ‪ :17.6‬برنامۀ ذیل ضرب زبانی ‪ 2‬الی ‪ 10‬را با استفاده از ‪ nested if‬دریافت مینماید‪.‬‬
‫>‪#include <iostream.h‬‬
‫)(‪main‬‬
‫{‬
‫)‪for (int a = 2; a<=10; a++‬‬
‫{‬
‫)‪for (int b=1; b<=10; b++‬‬
‫{‬
‫;"‪cout <<b <<" * " << a <<" = " <<b *a <<"\n‬‬
‫)‪if (b>=10‬‬
‫;"‪cout <<"\n‬‬
‫}}‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪1*2=2‬‬
‫‪2*2=4‬‬
‫‪….‬‬
‫‪1*3=3‬‬
‫‪2*3=6‬‬
‫‪….‬‬
‫‪1*4=4‬‬
‫‪2*4=8‬‬
‫‪….‬‬
‫‪….‬‬
‫‪1 * 10 = 10‬‬
‫‪2 * 10 = 20‬‬
‫‪3 * 10 = 30‬‬
‫‪4 * 10 = 40‬‬
‫‪5 * 10 = 50‬‬
‫‪6 * 10 = 60‬‬
‫‪7 * 10 = 70‬‬
‫‪8 * 10 = 80‬‬
‫‪9 * 10 = 90‬‬
‫‪10 * 10 = 100‬‬

‫‪132‬‬
.‫ برنامۀ ذیل ساعت دیجیتل را به میان میآورد‬:18.6 ‫مثال‬
#include <iostream.h>
main()
{
int H, M, S;
for (H =1; H<=12; H++)
{
for (M =0; M<=59; M++)
{
for (S = 0; S<=59; S++)
{
for (int MS = 0; MS <2000 ; MS++) // used to slow down second speed
cout <<H <<" : " << M <<" : " << S <<"\n";
}}}

return 0;
}
Output
1 : 0 : 0
1 : 0 : 1
1 : 0 : 2
1 : 0 : 3
1 : 0 : 4
:
:
:
12 : 59 : 59

.‫ برنامۀ ذیل شکل هندسی را با استفاده از اعداد ترسیم میکند‬:‫ الف‬19.6 ‫مثال‬
// Program to generate a given pattern with numbers
#include <iostream.h>
main ( )
{
int r, c ; // r is row and c is column
cout << " \n \n Number Pattern :\n \n \n " ;
for ( r = 1; r <= 4; r ++ ) //Outer loop for rows
{
for ( c = 1; c <= r; c++ ) // Inner loop for column
cout << c << " " ;
cout <<"\n " ;
}
return 0;
}
133
Output
Number Pattern
1
1 2
1 2 3
1 2 3 4

.‫ برنامۀ ذیل شکل هندسی مورد نظر شما را با اعداد مختلف ترسیم میکند‬:‫ ب‬19.6 ‫مثال‬
// Program to generate a given pattern
#include <iostream.h>
main ( )
{
int r, c, num = 6 ; // r is row and c is column
cout << "\n \n \n Number Pattern : \n \n \n " ;
for ( r =num ; r >= 1; r -- ) //Outer loop for rows
{
for ( c = 1; c <= r; c++ ) // Inner loop for column
cout << r <<" ";
cout <<"\n " ;
}
return 0;
}
Output
Number Pattern
6 6 6 6 6 6
5 5 5 5 5
4 4 4 4
3 3 3
2 2
1

.‫ برنامۀ ذیل شکل هندسی مورد نظر را با استفاده از اعداد ترسیم میکند‬:‫ ج‬19.6 ‫مثال‬
// Program to generate a given pattern with numbers
#include <iostream.h>
main ( )
{
int r, c1, c2, n, m, p ; // r is row and c1, c2 are columns
cout << " \n Enter the number of rows : " ;
cin >> n;
cout <<"\n \n Number Pattern \n \n ";
p = 1;
for ( r =1 ; r <= n ; r++ ) //Outer loop for rows
{
134
for ( c1 = 1; c1<2*n-r; c1++ ) // Inner loop for column
cout << " ";
for ( c2 = 1; c2 <=r; c2++, p++)
cout <<p << " ";
for ( c2 = r-1; c2 >= 1; c2--, p--)
{
m = p-2;
cout <<m << " ";
}
cout <<"\n" ;
}
// return 0; }
Output
Enter the number of rows : 5
Number Pattern
1
2 3 2
3 4 5 4 3
4 5 6 7 4 5 4
5 6 7 8 9 8 7 6 5
n ‫ کوچکتراز‬m ‫ را دریافت نماید به شرطیکه قیمت‬n ‫ و‬m ‫ برنامۀ را بنوسید که اعداد اولیه بین‬:‫ د‬20.6 ‫مثال‬
.‫ باشد‬int ‫باشد و از نوع‬
// Program to find prime numbers in the range m to n where m and n are positive
integer and m < n */
#include <iostream.h>
main ( )
{
int m, n, i, j, isprime ;
cout << “ \n Enter Lower and Upper limit of the range m & n : “ ;
cin >> m >> n;
if ( m<= 1)
m=2; // starting value of the range is made 2
cout << “\n The prime numbers are : \n \n “ ;
for ( i =m ; i <= n ; i ++ )
{
isprime = 1;
// This loop checks I for a prime number
for ( j = 2; j<= i/2 ; j++ )
{
if ( i % j == 0 )
{
isprime =0 ;
break;
} // End of j loop
}
135
‫) ‪if ( isprime‬‬
‫; ‪cout <<”\n “ << i‬‬
‫}‬ ‫‪// End of i loop‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter Lower and Upper limit of the range m & n : 5‬‬ ‫‪25‬‬
‫‪The prime numbers are‬‬
‫‪5‬‬
‫‪7‬‬
‫‪11‬‬
‫‪13‬‬
‫‪17‬‬
‫‪19‬‬
‫‪23‬‬

‫پرش در حلقه ها (‪)Jump in Loops‬‬


‫وقتی میرسد که نیاز باشد تا‬
‫)‪:(Stroustrup, 1997‬‬
‫‪ )a‬اجرای حلقه را متوقف سازید‪.‬‬
‫‪ )b‬حلقه را از بین ببرید‪.‬‬
‫‪ )c‬یک بخش از حلقه را صرف نظر کنید‪.‬‬
‫‪ )d‬از حلقه داخلی خرار و بره حلقره بیرونری وارد گردیرد‬
‫البته نظر به یک سلسله شرایط‪.‬‬
‫طرو مختلف وجود دارد که برا اسرتفاده از آن مریتوانیرد‬
‫عملیات فو را انمام دهید‪:‬‬
‫شما میتوانید با اسرتفاده از دسرتور ‪ continue ، break ،goto‬و‬
‫‪ exit‬عملیات فو را انمام دهید‪.‬‬
‫‪ .i‬بیانیه ‪goto‬‬
‫بیانیه ‪ goto‬را میتوانید در داخرل ‪ do-while ،while‬و ‪ for‬بررای‬
‫اینکه اجرای یک بخش برنامه را متوقف و از یک جرای دیگرر‬
‫آغاز نمایید استفاده نمایید‪ .‬این بیانیره را مریتوانیرد‬
‫غرض خرو از حلقه های ‪ nested‬نیز مورد استفاده قرار دهیرد‬
‫)‪.(Bailey, 2007‬‬

‫از حلقه ها را با استفاده از ‪ goto‬نشان‬ ‫شکل ذیل طرز خرو‬


‫میدهد‪:‬‬
‫) ‪while ( condition‬‬ ‫; ( ‪for‬‬ ‫) ;‬

‫‪136‬‬
‫{‬ ‫{‬
‫)‪if (condition1‬‬ ‫; ( ‪for‬‬ ‫) ;‬
‫;‪goto finish‬‬ ‫{‬
‫………‬ ‫‪……….‬‬
‫‪……....‬‬ ‫‪……….‬‬
‫)‪if (condition2‬‬ ‫)‪if ( condition2‬‬
‫;‪goto loop‬‬ ‫;‪goto loop‬‬
‫‪………..‬‬ ‫‪exit from ………..‬‬
‫‪Jump‬‬
‫‪………..‬‬ ‫‪nested‬‬ ‫‪………..‬‬
‫‪within‬‬ ‫‪………..‬‬ ‫‪………..‬‬
‫‪loop‬‬ ‫‪loops‬‬
‫‪loop :‬‬ ‫‪Exit‬‬ ‫}‬
‫…………‬ ‫‪from‬‬ ‫}‬
‫…………‬ ‫‪loop‬‬ ‫‪loop:‬‬
‫…………‬ ‫‪………..‬‬
‫}‬ ‫‪………..‬‬
‫‪finish :‬‬ ‫‪………..‬‬
‫…………‬
‫…………‬
‫…………‬
‫شکل ‪ 8.6‬استفاده ‪ goto‬در داخل حلقه ها‬

‫بیانیه ‪break‬‬ ‫‪.ii‬‬


‫ایررن بیانیرره نرره تنهررا در ‪ switch‬مررورد اسررتفاده قرررار‬
‫میگیردبلکه در حلقه ‪ do-while ،while‬و ‪ for‬نیرز از آن اسرتفاده‬
‫میتوانید‪ break .‬به خاطر خرو از بیانیه ‪ switch‬و حلقه (‪)loop‬‬
‫مورد استفاده قرارمیگیرد‪ .‬باید گفت که ‪ break‬نمیتوانرد از‬
‫حلقه ‪ nested‬بیرون شود و تنها میتواند حلقۀ که در آن وجود‬
‫دارد از آن بیرون شود )‪.(Langtangen, 2006‬‬

‫قرار ذیل است‪:‬‬ ‫‪break‬‬ ‫شکل عمومی‬


‫; ‪break‬‬
‫چند نمونه بیانیه ‪ break‬را در شکل ذیل مشاهده کنید‪:‬‬

‫‪137‬‬
‫) ‪while ( condition‬‬ ‫‪do‬‬ ‫) ; ; ( ‪for‬‬
‫{‬ ‫{‬ ‫{‬
‫)‪if (condition‬‬ ‫‪……….‬‬ ‫) ; ; ( ‪for‬‬
‫;‪break‬‬ ‫‪……….‬‬ ‫‪{ ……...‬‬
‫‪…………..‬‬ ‫‪……….‬‬ ‫‪……..‬‬
‫‪exit‬‬
‫‪…………..‬‬ ‫)‪if (condition‬‬ ‫)‪if (condition‬‬
‫‪from‬‬ ‫‪…………..‬‬ ‫;‪break‬‬ ‫;‪break‬‬
‫‪loop‬‬ ‫‪exit ………..‬‬ ‫}‬
‫‪from ………..‬‬ ‫‪exit‬‬
‫‪from‬‬ ‫………‬
‫}‬ ‫}‪loop‬‬ ‫………‬
‫‪inner‬‬
‫;)‪while (condition1‬‬ ‫‪loop‬‬ ‫}‬

‫شکل ‪ 9.6‬استفاده ‪ break‬در داخل حلقه ها‬


‫‪ .iii‬بیانیه ‪continue‬‬
‫بیانیه ‪ continue‬اجررای حلقره را ادامره داده و یرا اینکره‬
‫اجرای حلقه را متوقف نمیکند‪.‬‬
‫شکل عمومی ‪ continue‬قرار ذیل است‪:‬‬
‫; ‪continue‬‬
‫شما میتوانید از این دستور در ‪ do-while ،while‬و ‪ for‬اسرتفاده‬
‫نمایید‪ .‬بیانیه ‪ goto‬باید در داخل بدنه حلقه (‪)body of the loop‬‬
‫تعریف گردد به خاطر که بیرون از حلقه بی فایده است‪.‬‬

‫در حلقه های مختلف طور ذیل بیان‬ ‫‪continue‬‬ ‫طرز استفاده‬
‫گردیده است‪.‬‬

‫‪138‬‬
‫) ‪while ( condition1‬‬ ‫‪do‬‬ ‫) ; ; ( ‪for‬‬
‫{‬ ‫{‬ ‫{‬
‫‪…………..‬‬ ‫‪……….‬‬ ‫‪……..‬‬
‫‪…………..‬‬ ‫‪……….‬‬ ‫‪……..‬‬
‫)‪if (expr2‬‬ ‫)‪if (expr1‬‬ ‫)‪if (expr1‬‬
‫;‪continue‬‬ ‫;‪continue‬‬ ‫;‪continue‬‬
‫‪………….‬‬ ‫‪………..‬‬ ‫………‬
‫‪………….‬‬ ‫‪………..‬‬ ‫………‬
‫}‬ ‫}‬ ‫}‬
‫;)‪while (condition1‬‬

‫شکل ‪ 10.6‬استفاده ‪ continue‬در داخل حلقه ها‬

‫تابع ) ( ‪exit‬‬
‫این تابع به شکل فوری سبب خاتمه برنامره مریگرردد‪ .‬شرکل‬
‫عمومی تابع ) ( ‪ exit‬قرار ذیل است (‪.)2000 ،Eckel‬‬
‫; ) ‪exit ( n‬‬
‫و‬ ‫این تابع سبب بسته شدن تمام فایل های براز گردیرده‬ ‫‪‬‬
‫قیمت ‪ n‬را به تابع که آنرا ‪ call‬نموده برمیگرداند‪.‬‬
‫‪ n‬از حالررت خرررو برنامرره (‪ )Exit status of program‬نماینرردگی‬ ‫‪‬‬
‫میکند‪ .‬پس اگر ‪ n = 0‬باشد‪ .‬این معنا را دارد که برنامره‬
‫عراری از اشرتباهات ‪ )Errors free‬اسرت و اگرر ‪ n != 0‬باشرد در‬
‫آنصورت این مفهوم را ارایه میکند که برنامه اشرتباهات‬
‫(‪ )has errors‬دارد‪.‬‬
‫قیمت ‪ n‬را میتوانیم غررض شناسرایی اشرتباهات اسرتفاده‬ ‫‪‬‬
‫نماییم‪.‬‬
‫قیمت ‪ default‬یا پریش فررض ‪ n‬عبرارت از ‪ 0‬اسرت‪ .‬بره همرین‬ ‫‪‬‬
‫خاطررر شرکل عررادی ترابررع ‪ exit‬عبرررارت از ;) ( ‪ exit‬مری‬
‫باشد‪.‬‬

‫‪139‬‬
‫مقایسه حلقه ) ( ‪ while‬و ) ( ‪do – while‬‬
‫) ( ‪while‬‬ ‫) ( ‪do – while‬‬
‫شرررط در اول حلقرره مررورد‬ ‫‪)1‬‬ ‫شرط در اخیر حلقره مرورد‬ ‫‪)1‬‬
‫ارزیابی قرارمیگررد‪ .‬ایرن‬ ‫ارزیابی قرارمیگرد‪ .‬ایرن‬
‫نوع حلقره بره نرام حلقره‬ ‫رام ‪Exit-‬‬
‫ره نر‬ ‫ره بر‬
‫روع حلقر‬ ‫نر‬
‫‪ Entry-controlled loop‬یرررا ‪pre-test‬‬ ‫‪ controlled loop‬یا ‪ post-test‬نیرز‬
‫نیز یادمیگردد‪.‬‬ ‫یاد میگردد‪.‬‬
‫حلقرره ‪ while‬ترراوقتی اجرررا‬ ‫‪)2‬‬ ‫تا وقتیکه شرط درست باشد‬ ‫‪)2‬‬
‫میشودکه شرط درست باشد‪.‬‬ ‫حلقه ‪ do-while‬اجرا میشود‪.‬‬
‫حلقررره ‪ while‬هررریچ اجررررا‬ ‫‪)3‬‬ ‫حلقه ‪ do –while‬حد اقل یرک‬ ‫‪)3‬‬
‫نمیشرروددر صررورتیکه شرررط‬ ‫باراجرا میگردددرصورتیکه‬
‫نادرست باشد‪.‬‬ ‫شرط نادرست باشد‪.‬‬
‫‪do-while‬‬ ‫جدول ‪ 1.6‬مقایسه حلقه ‪ while‬و‬

‫‪140‬‬
‫خـالصۀ فصل‬
‫در این فصل بیانیه های تصمیم گیری و حلقه ها مرورد بحرث‬
‫قرار گرفت و در نتیمه مفاهیم ذیل را آموختیم‪:‬‬
‫‪-‬ساختار حلقوی (‪ )Looping structure‬عبارت از ساختار است کره در‬
‫آن تعداد از بیانیه های یک برنامه تا وقتی مکرررا اجررا‬
‫میشودبه شرط شرط صحت داشته باشرد‪ .‬در زبران‪ C++‬سره نروع‬
‫ساختار حلقوی وجود دارد که عبارت انرد از‪ do-while ،while :‬و‬
‫‪.for‬‬
‫بیانیۀ ‪ while‬در ابتدا شرط را مورد ارزیابی قرار مریدهرد و‬
‫اما بیانیرۀ ‪do-while‬‬ ‫از جمله حلقه های ‪ pre-test‬محسوب میگردد‪.‬‬
‫بعد از اینکه بدنه حلقره اجررا گردیرد شررط را ارزیرابی‬
‫میکند و از جمله حلقه های ‪ post-test‬یاد میشود‪.‬‬
‫نوع سوم بیانیه های حلقوی به نام ‪ for‬یراد میشرودکه در آن‬
‫باز هم شرط در ابتدا مورد ارزیابی (‪ )Pre-test‬قرار گرفتره و‬
‫در صورت درست بودن آن‪ ،‬بدنره حلقره (‪ )Body of the loop‬اجرامری‬
‫گردد‪ .‬به یاد داشته باشید وقتیکه یک حلقره در داخرل یرک‬
‫حلقه دیگر قرار داشته باشد این حالت را به نرام ‪Nested Loop‬‬
‫یادمیکند‪.‬‬
‫بیانیه ‪ goto‬را مریتوانیرددر داخرل ‪ do-while ،while‬و ‪ for‬بررای‬
‫اینکه اجرای یک بخش برنامه را متوقف و از یک جرای دیگرر‬
‫آغاز نمایید استفاده کنید‪ .‬همچنان آمروختیم کره بیانیره‬
‫‪ break‬نه تنها در ‪ switch‬مورد استفاده قررار میگیردبلکره در‬
‫حلقه ‪ do-while ،while‬و ‪ for‬نیز از آن استفاده میشرود‪ break .‬بره‬
‫خاطر خرو از بیانیره ‪ switch‬و حلقره (‪ )loop‬مرورد اسرتفاده‬
‫قرارمرریگیرررد‪ .‬بیانیررۀ دیگررری کرره برره نررام ‪ continue‬یرراد‬
‫میشودجهت ادامه اجرای حلقه استفاده میشود‪ .‬و بآلخره تابع‬
‫‪ exit‬به شکل فوری سبب خاتمه برنامه میگردد‪.‬‬

‫‪141‬‬
‫پرسشهای فصل‬

‫مفهوم حلقه (‪ )loop‬را مختصرا توضیح دهید؟‬ ‫‪)1‬‬


‫در لسان ‪ C++‬چند نوع بیانیه برای حلقه وجود دارد؟‬ ‫‪)2‬‬
‫هدف بیانیه )( ‪ while‬چیست؟‬ ‫‪)3‬‬
‫هدف حلقه ) ( ‪ do-while‬چیست؟‬ ‫‪)4‬‬
‫در کدام موارد در حلقه ها باید از قوسهای جوره یی‬ ‫‪)5‬‬
‫بزرگ (‪ )braces‬استفاده گردد؟‬
‫حلقه زیتنهای (‪ )infinite loop‬چیست؟‬ ‫‪)6‬‬
‫تعداد دوره های که در یک حلقه اجرا میگردد چطور‬ ‫‪)7‬‬
‫محاسبه میشود ؟‬
‫مفهوم"حلقه داخل حلقه" (‪ )nested loop‬چیست؟‬ ‫‪)8‬‬
‫بیانیه های ‪ break‬و ‪ continue‬را مقایسه کنید؟‬ ‫‪)9‬‬

‫فعالیت گروپی‬
‫بین )( ‪ do-while () ،while‬و ) ( ‪ for‬را توضیح دهید؟‬
‫‪ )10‬تفاوت‬
‫‪ )11‬طرز کار ‪ do-while‬را دریک مثال توضیح دهید؟‬
‫‪ )12‬طرز کار ‪ while‬را دریک مثال توضیح دهید؟‬

‫‪142‬‬
‫فصل هفتم‬
‫‪Array‬‬ ‫صف یا‬

‫هدف عمومی‪ :‬با صف یا ‪ Array‬آشنا شوند‪.‬‬


‫اهداف آموزشی‪ :‬در پایان این فصل‪ ،‬محصالن قادر خواهند بود تا‪:‬‬
‫‪ .1‬صف (‪ )Array‬را تعریف نمایند‪.‬‬
‫‪ .2‬تفاوت بین صف و متحول عادی را بیان نمایند‪.‬‬
‫‪ .3‬انواع مختلف صف را توضیح دهند ‪.‬‬
‫در این فصل مفاهیم صف‪ ،‬انواع صف ها و موارد استفاده آن‬
‫مورد بحث قرار گرفته که یکی پی دیگر به تفصیل توضیح‬
‫میگردد‪.‬‬
‫بعضی برنامه ها نیاز دارد تا معلومرات متعردد کره دارای‬
‫عین نوعیت (‪ )Data type‬ماننرد ‪ xn... x3 ،x2 ،x1‬باشرد در خرود‬
‫ذخیره کند‪ .‬در همچو حالت بهترر اسرت کره از صرف یرا ‪array‬‬
‫استفاده گردد‪.‬‬
‫صف یا ‪ array‬یک نوع دیتاتایس خاص است و ممموعۀ عناصرر کره‬
‫دارای عین نوعیت (‪ )Data type‬باشد در خود ذخیره میکند‪.‬‬
‫چند خصوصیات مهم صف قرار ذیل است (‪:)Oualline, 1995‬‬
‫صف میتواند قیمت حرفی‪ ،‬عددی تام و اعشراری را در خرود‬ ‫‪.1‬‬
‫ذخیره نماید‪.‬‬
‫قیمت تمام عناصر صف باید دارای عین دیتاتایس باشد‪.‬‬ ‫‪.2‬‬
‫هر عنصر انفرادی داخرل یرک صرف بره نرام ‪Subscripted Variable‬‬ ‫‪.3‬‬
‫یادمیگردد‪.‬‬
‫هر عنصر صف دارای یک ‪ index‬میباشد‪.‬‬ ‫‪.4‬‬
‫در اثنای معرفی صف انردازا (‪ )range‬آن در داخرل قوسهرای‬ ‫‪.5‬‬
‫متوسط (‪ )square brackets‬تعیین میگردد‪.‬‬
‫‪ index‬صف همیشه از صفر(‪ )0‬آغازمیشود‪.‬‬ ‫‪.6‬‬
‫; ]‪int marks [50‬‬ ‫طور مثال‪:‬‬

‫در مثال فو ‪ mark‬نام صف است که ‪ 50‬موقعیرت مسلسرل را در‬


‫حافظه کمپیوتر ریزرف میکند تا ‪ 50‬قیمرت ترام در داخرل آن‬
‫ذخیره گردد‪.‬‬
‫هر عنصر صف را میتوان به شکل انفرادی طور ذیل نوشت‪:‬‬
‫]‪marks [0] , marks [1], marks [3] …. marks [49‬‬

‫‪143‬‬
‫عناصر یا قیمت های صف همیشه به شرکل مسلسرل در حافظره‬ ‫‪.7‬‬
‫ذخیره میشود‪.‬‬
‫ُ‬
‫تعداد زیرنویس (‪ )subscripts‬در حقیقت بعد یک صرف را تعیرین‬ ‫‪.8‬‬
‫میکند‪.‬‬
‫انواع صف (‪)Types of Array‬‬
‫به صورت عموم‪ ،‬سه نوع صف وجود دارد که عبارت اند از‪ :‬صف‬
‫بعدی (‪ ،)One Dimensional Array‬صنف دو ُ‬
‫بعردی (‪ )Two Dimensional Array‬و‬ ‫یک ُ‬
‫بعدی (‪ )Multi Dimensional Array‬کره هرر یرک آن ذیرال توضریح‬ ‫صف چند ُ‬
‫میگردد (‪.)Aitken & Jones, 2014‬‬
‫صف یک بُعدی (‪)One Dimensional Array‬‬
‫باشد بره نرام‬ ‫(‪)subscript‬‬
‫صف که عناصر آن دارای یک زیرنویس‬
‫صف یک ُ‬
‫بعدی یادمیشود‪.‬‬
‫مثال‪ :‬صف یک ُ‬
‫بعدی ذیل را در نظر گیرید‪:‬‬
‫]‪int marks [5‬‬
‫;‬
‫در مثال فو دیده می شود که یرک جروره قروس زیرنرویس ] [‬
‫بعدی‬‫وجود دارد و این نمایانگر این است که صف باز صف یک ُ‬
‫است‪.‬‬
‫صف تحت نام ‪ marks‬طور ذیل نمررات ‪ 5‬ترن محصرالن را در خرود‬
‫ذخیره مینماید‪:‬‬
‫]‪Marks [0‬‬

‫]‪Marks [1‬‬

‫]‪Marks [2‬‬

‫]‪Marks [3‬‬

‫]‪Marks [4‬‬

‫‪40‬‬ ‫‪38‬‬ ‫‪12‬‬ ‫‪44‬‬ ‫‪35‬‬

‫را میتوانیم طور ذیل در نظر گرفت‪:‬‬ ‫قیمت های فو‬


‫; ‪Marks [ 0 ] = 40‬‬
‫; ‪Marks [ 1 ] = 38‬‬
‫; ‪Marks [ 2 ] = 12‬‬
‫; ‪Marks [ 3 ] = 44‬‬
‫; ‪Marks [ 4 ] = 35‬‬
‫معرفی صف (‪)Array Defination‬‬
‫قبل از اینکه صف در برنامه اسرتفاده گرردد بایرد معرفری‬
‫شود‪ .‬صف را میتوان با معرفی نوعیت‪ ،‬نام متحول و سایز آن‬
‫معرفی کرد (‪.)Rama, 2011‬‬
‫صف به شکل عمومی قرار ذیل معرفی میشود‪:‬‬
‫; ] ‪data type array _ name [ size‬‬

‫‪144‬‬
‫‪ :data Type‬نوعیت متحول را تعیین میکندکه ممکرن از نروع‬ ‫‪‬‬
‫‪ char،float ،int‬و یا ‪ double‬باشد‪.‬‬
‫‪ :array – name‬نام صف است که از عین قواعد ‪ identifier‬پیروی‬ ‫‪‬‬
‫مینماید‪.‬‬
‫‪ :size‬حد اعظمی عناصررا کره در یرک صرف ذخیرره میشرود‬ ‫‪‬‬
‫تعیین میکند‪.‬‬
‫مثال ‪1.7‬‬
‫; ] ‪int x [ 100‬‬
‫; ] ‪char text [ 80‬‬
‫; ] ‪float sal [ 50‬‬
‫‪sal‬‬ ‫در مثال فو صف‪ x ،‬تا ‪ 100‬قیمت ترام‪ test ،‬الری ‪ 80‬حررف و‬
‫الی ‪ 50‬عدد اعشاری را میتوانددر خود ذخیره نمایند‪.‬‬
‫متوجه باشید که‪:‬‬
‫; ‪int max_stud = 50‬‬
‫‪int marks [ max _ stud ] ; // not allowed‬‬
‫در مثال فو بیانیۀ دوم درست نیست زیرا اندازا صف بایرد‬
‫به عدد تام تعیین گردد‪ .‬شما میتوانید‪ max _ stud‬را به شرکل‬
‫ثابت (‪ )Constant‬طور ذیل معرفی نمایید‪:‬‬
‫‪#define MAX_STUD 50‬‬
‫;]‪int marks [MAX _ STUD‬‬
‫مثال ‪ :2.7‬برنامۀ ذیل ‪ 3‬قیمت تام ار از کیبور میگیردو مجموعۀ آنرا روی سکرین نشان میدهد‪.‬‬
‫‪/* Program to insert 3 int values from keyboard and displays sum of them */‬‬
‫>‪#include <iostream.h‬‬
‫)(‪main‬‬
‫{‬
‫;]‪int Array [3‬‬
‫;"?‪cout <<"Enter 3 Integer values..‬‬
‫;]‪cin >> Array[0‬‬
‫;]‪cin >> Array[1‬‬
‫;]‪cin >> Array[2‬‬
‫;]‪cout <<”Total = ”<< Array [0] + Array [1] + Array [2‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫?‪Enter 3 Integer values..‬‬
‫‪5‬‬
‫‪10‬‬
‫‪20‬‬
‫‪Total = 35‬‬

‫‪145‬‬
.‫ برنامۀ ذیل تعداد حروف انگلیسی را روی سکرین نشان میدهد‬:3.7 ‫مثال‬
#include <iostream.h>
main ( )
{
char Array [ ]= {'a','b','c','d','e'};
cout <<Array[0] <<"\n";
cout <<Array[1] <<"\n";
cout <<Array[2] <<"\n";
cout <<Array[3] <<"\n";
cout <<Array[4]<<"\n";
return 0;
}

Output
a
b
c
d
e

.‫) وارد نموده و بعد آنرا روی سکرین نشان میدهد‬array( ‫ برنامۀ ذیل دیتا را به صف‬:4.7 ‫مثال‬
/* Program to write the data into an array and print them */
#include <iostream.h>
main ( ) {
int a [ 10 ] , i ;
/* Write the elements into the array */
cout << “ Enter five elements “ ;
for ( i = 0; i <5 ; i++)
cin >> a [i];
/* Output the data items of array a */
cout << “ \n Elements of the array are : \n “ ;
for ( i = 0; i < 5 ; i++)
cout << “\n “ << a [ i ] ;
return 0; }

146
Output
Enter five elements
2
10
25
15
72
Elements of the array are :
2
10
25
15
72

.‫ عدد وارد شده دریافت مینماید‬5 ‫ بزرگترین و کوچکترین عدد را بین‬،‫ اوسط‬،‫ برنامۀ ذیل مجموعه‬:5.7 ‫مثال‬
/* Program to find the Sum, Average, Largest and Smallest of n number */
#include <iostream.h>
main ( )
{
int a [ 10 ] , i, large, small, n ;
float avg, sum ;
/* Input elements into the array */
cout << " \n How many elements (n < 10) ? " ;
cin >> n ;
cout << " Enter the elements: "<< n;
for ( i = 0; i < n ; i++)
cin >> a [i];
/* Finding sum, largest and smallest */
large = a [ 0 ] ; small = a [ 0 ] ; sum = 0 ;
for ( i = 0; i < n ; i++)
{
sum = sum + a [ i ] ;
if ( a [ i ] < small )
small = a [ i ] ;
}
/* Finding average value */
avg = sum / n ;
/* output result */
cout << "\n sum = " << sum <<" Average = " <<avg ;
cout << "\n largest = " << large <<" Smallest = " << small ;
return 0;
}
147
Output
How many elements ( n < 10 ) ? 5

Enter the 5 elements :


67
25
40
33
6
Sum = 171.00 Average = 34. 20
largest = 67 smallest = 6

)Initializing of one Dimensional Array( ‫قیمت گذاری یک صف یک بعدی‬


‫رذاری‬‫رت گر‬‫ری قیمر‬‫رای معرفر‬
‫روانیم در اثنر‬
‫رف را میتر‬
‫رر صر‬
‫عناصر‬
Nawaz, ( ‫ شکل عمومی قیمت گذاری صف قررار ذیرل اسرت‬.‫نماییم‬
:)2006
static type array_name [ size ] = { list of values } ;
‫ نام‬array-name ،‫ نوعیت دیتا‬type ،‫ نوعیت ذخیره‬static ‫در اینما‬
‫ قیمررت یررا انرردازه اعظمرری عناصررر کرره ذخیررره‬size ‫صررف و‬
‫ در حقیقت لست قیمت هرای صرف‬list of values .‫نشان میدهد‬،‫میشود‬
.(Nakov & Kolev, 2013) ‫است که توسط کامه از همدیگر جدا شده است‬
6.7 ‫مثال‬
The statement static int primes [ 5 ] = { 2 , 3, 5, 7, 11 };
Will assign the values as follows:
primes [ 0 ] = 2, primes [ 1 ] = 3, primes [ 2 ] = 5, primes [ 3 ] = 7, and
primes [ 4 ] = 11
Similarly char color [ ] = “RED” ;
Will assign color [ 0 ] = “R”, color [ 1 ] = ‘E’, color [ 2 ] = ‘D’ and color [ 3 ] = ‘\0’
‘R’ ‘E’ ‘D’ ‘\0’

static int num [ 10 ] = { 1, 2, 3, 4} ;


will initialize the first 4 array elements to 1, 2, 3, 4 and the remaining 6 must be zero.

‫وارد گردد به طور ذیل‬ ‫اگر قیمت ها مطابق ترتیب فو‬


:‫نمایش داده خواهد شد‬
148
‫مثال ‪ :7.7‬اگر نمرات ‪ 5‬تن محصالن باالترتیب ‪ 66 ،70 ،45 ،89‬و ‪ 81‬باشد شما میتوانید با استفاده از حلقه ‪ for‬قیمت ها را‬
‫به عناصر صف طور ذیل در نظر گیرید‪:‬‬
‫‪consider the marks of 5 students to be 89, 45, 70, 66, and 81. A for ( ) loop‬‬ ‫‪can be used‬‬
‫‪to assign these values to the array elements as follow:‬‬
‫; ‪int marks [ 5 ] , i‬‬
‫; “ ‪cout <<” \ n Enter the marks:‬‬
‫) ‪for ( i = 0; i<5; i++‬‬
‫{‬
‫; ] ‪cin >> marks [ i‬‬
‫وارد برنامه گردد به عین شکل چنین‬ ‫دیتا که به شکل فو‬
‫نمایش داده میشود‪:‬‬
‫‪89‬‬ ‫‪45‬‬ ‫‪70‬‬ ‫‪66‬‬
‫‪81‬‬
‫دیتا باید همیشه به شکل حلقه (‪ )loop‬به صرف وارد شرود بره‬
‫خاطر که به هر ‪ cin‬قیمت زیرنویس (‪ i )subscript‬تغییر میکنرد‪.‬‬
‫بار اول ‪ cin‬قیمت ]‪ ، marks [0‬به تعقیب آن ]‪ marks [1‬و به همین‬
‫طور قیمت های باقی رامیخواند‪.‬‬
‫پروسس یک صف یک بعدی (‪)Processing of one Dimensional Array‬‬
‫یک عملیه حسابی را نمیتوانید بازی تمام صف اجرا نمایید‪.‬‬
‫طور مثال‪ ،‬اگر خواسته باشید که ‪ 2‬صف ‪ a‬و ‪ b‬که عرین سرایز‬
‫را دارد باهم جمع نمایید در اینصورت عملیره جمرع بایرد‬
‫بازی هر عنصر جداگانه صورت گیرد )‪.(Overland, 2013‬‬
‫مثال‪:‬‬
‫]‪c [0] = a [0] + b [0‬‬
‫]‪c [1] = a [1] + b [1‬‬
‫به همین خاطر‪ 2 ،‬صف که دارای عین دیتا تایس‪ ،‬عرین ُ‬
‫بعرد‪،‬‬
‫عین اندازه‪ ،‬عین عملیه‪ ،‬عرین عملگرر مقایسروی ‪ ...‬باشرد‬
‫نیاز است که براید عرنرصر بره عنصر اجرررا گررردد‪ .‬برای‬
‫اینکار میتوانیم از حلقۀ ) ( ‪ for‬استفاده نمود کره در هرر‬
‫بار اجرا میتواند یک عنصر صرف را پروسرس نمایرد‪ .‬تعرداد‬
‫اجرای حلقه و تعداد عناصر که پروسس میشود با هم مسراوی‬
‫خواهد بود‪.‬‬

‫مثال ‪ :8.7‬برنامۀ ذیل ‪ 3‬عدد را از صفحه کلید میگیرد و آنرا دوباره نشان میدهد‪.‬‬
‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫‪149‬‬
{
int Array [3];
cout <<"Enter 3 Integer values..?"; // Input from KEYBOARD Scanner
cin>> Array[0];
cin>> Array[1];
cin>> Array[2];
cout << Array [0] << "\n" << Array [1] << "\n" << Array [2];
return 0;
{
Output
Enter 3 Integer values..? 1 2 3
1
2
3

.‫ برنامۀ ذیل عناصر دو صف یک بعدی را جمع مینماید‬:9.7 ‫مثال‬

/* Programs to add Two 1-D array */


#include <iostream.h>
main ( )
{
int a [ 10 ], b [ 10 ], c [ 10 ] ;
int i ;
cout << " \n Enter 10 elements of array a : \n " ;
for ( i = 0; i < 10 ; i++)
cin >> a [i];
cout << " \n Enter 10 elements of array b : \n " ;
for ( i = 0; i < 10 ; i++)
cin >> b [i];
/* Finding sum of array a and b */
for ( i = 0; i < 10 ; i++)
c [ i] = a [ i ] + b [ i ] ; Dry Run
// Printing the resultant array c Finding sum of array a & b
cout <<"\n Resultant array:\n "; i a[i] b[i] c[i]
for ( i = 0; i < 10 ; i++)
0 a [0] =1 b [0] =2 c [0] =3
cout <<"\t" << c [ i ] ;
1 a [1] =2 b [1] =3 c [1] =5
return 0;
2 a [2] =3 b [2] =5 c [2] =8
}
3 a [3] =4 b [3] =7 c [3] =11
:
:
9 a [9] =10 b [9] =31 c [9]=41

150
Output
Enter 10 elements of array A
1 2 3 4 5 6 7 8 9 10
Enter 10 elements of array B
2 3 5 7 11 13 19 23 29 31
Resultant array :
3 5 8 11 16 19 26 31 38 41

.‫ را در یک صف تشکیل میدهد‬fabonocci ‫ سلسله‬n ‫ برنامۀ ذیل‬:10.7 ‫مثال‬

/* Programs to generate first n Fabonacci terms using an anrray */


#include <iostream.h>
main ( )
{
int fibo [50], i, n;
cout << “ \n How many terms of the series ? “ ;
cin >>n;
// Initialize the first and second term
fibo [0] = 0; fibo [1] =1;
for ( i = 2; i < n ; i++)
fibo [ i] = fibo [ i-2 ] + fibo [ i-1 ] ;
cout <<”\n The Fibonacci terms are “ ;
for ( i = 0; i < n ; i++)
cout << fibo [i] << “ “;
return 0;
}
Output
How many terms of the series ? 10
The Fibonacci terms are :
0 1 1 2 3 5 8 13 21 34

.‫) را به هر قاعده دلخواه تبدیل مینماید‬10( ‫ برنامۀ ذیل عدد قاعده اعشاری‬:11.7 ‫مثال‬

/* Programs to convert a Decimal number to Hexa Decimal */


#include <iostream.h>
main ( )
{
int num, rem, a[10], base, i=0, k;
cout << " \n Enter a number: " ;
cin >>num;
cout <<" \n Enter Base: ";
151
cin >> base;
cout <<"\n The output: ";
while (num > 0 )
{
rem = num % base ; // converting to base equivalent
a [i] = rem;
i++;
num = num / base ;
}
i--; // Print the converted number
for (k=1; k>=0; k--)
{
if ( a[k] <=9 )
cout << a[k];
else if (a[k] ==10)
cout << "A";
else if (a[k] ==11)
cout << "B";
else if (a[k] ==12)
cout << "C";
else if (a[k] ==13)
cout << "D";
else if (a[k] ==14)
cout << "E";
else if (a[k] ==15)
cout << "F";

else
{
cout << "\n Error ";
exit (0);
}
}
return 0;
}
Output
Enter a number : 105
Enter Base : 16
The Output : 69
)Two Dimensional Arrays( ‫صف دو بُعدی‬
‫ هر یرک از‬.‫)میباشد‬column(‫و ستون‬ )row(‫بعدی شامل سطر‬ ُ ‫صف دو‬
)subscripts( ‫ زیرنرویس‬2 ‫را میتروانیم برا‬ ُ ‫عناصر دو‬
‫بعردی‬
‫حاصل کرد که زیرنویس اول از سطر و زیرنویس دوم از سرتون‬
. (Lippman, 2002)‫نمایند گی میکند‬
152
‫; ] ‪type array – name [ row size ] [ col size‬‬
‫‪ ‬در اینما ‪ row size‬و ‪ col size‬نشاندهندا تعرداد اعظرم قیمرت‬
‫سطر و ستون میباشد که در خود ذخیره میکند‪.‬‬
‫‪ type ‬نشان دهنده نوعیت دیتا است‪.‬‬
‫‪ array – name ‬نام صف را در خود ذخیره میکند‪.‬‬
‫مثال ‪ :12.7‬تعریف یک صف دو بعدی که دارای ‪ 5‬سطر و ‪ 6‬ستون میباشد‪.‬‬
‫معرفی صف ‪ 2‬بعدی‬
‫;]‪float mat [5][6‬‬
‫به اندازه ‪ 120‬بایت حافظه را به شکل مسلسل ریزرف میکند‪ .‬به تعداد ‪ 30 = 6 * 5‬عناصر صف‬
‫وجود دارد که هر عنصر به اندازه ‪ 4‬بایت حافظه به شکل اعشاری غرض ذخیره شدن نیاز دارد‪.‬‬
‫عناصر انفرادی عبارت اند از‪:‬‬
‫]‪mat[0][0‬‬ ‫]‪mat[0][1] mat[0][2‬‬ ‫]‪mat[0][3‬‬ ‫]‪mat[0][4‬‬ ‫]‪mat[0][5‬‬
‫]‪mat[1][0‬‬ ‫]‪mat[1][1] mat[1][2‬‬ ‫]‪mat[1][3‬‬ ‫]‪mat[1][4‬‬ ‫]‪mat[1] [5‬‬
‫‪:‬‬
‫‪:‬‬
‫]‪mat[4][0‬‬ ‫]‪mat[4][1] mat[4][2‬‬ ‫]‪mat[4][3‬‬ ‫]‪mat[4][4‬‬ ‫]‪mat[4] [5‬‬
‫}‬
‫قیمت صف از ‪ 0‬آغاز و الی (‪ )size - 1‬ادامه مییابد‪.‬‬ ‫‪‬‬
‫]‪int a [2] [3‬‬ ‫مثال‬ ‫عناصر صف ‪ 2‬بعدی به شکل سطر ذخیره میگردد‪.‬‬ ‫‪‬‬
‫شیوۀ ذخیره آن قرار ذیل است ‪:‬‬
‫]‪a [0] [0‬‬ ‫]‪a [0] [1‬‬ ‫]‪a [0] [2‬‬ ‫]‪a [1] [0‬‬ ‫]‪a [1] [1‬‬ ‫]‪a [1] [2‬‬
‫قیمت گزاری صف دو بعدی (‪)Initializing Two Dimensional Arrays‬‬
‫در صف ‪ 2‬بعدی قیمت گزاری اولیه با درمیان گذاشرتن قیمرت‬
‫در بین قوسهای بزرگ { } معرفی میگردد(‪.)Horton, 2012‬‬
‫مثال‪:‬‬
‫;} ‪int mat [3][3] = { 19, 8, 11, 25, 4, 16, 0, 8, 5‬‬
‫‪mat [0] [0] = 19, mat [0] [1] = 8, mat [0] [2] = 11‬‬
‫‪mat [1] [0] = 25, mat [1] [1] = 4, mat [1] [2] = 16‬‬
‫‪mat [2] [0] = 0, mat [2] [1] = 8, mat [2] [2] = 5‬‬

‫را به طور مترکس به صورت ذیل‬ ‫میتوانید مثال فو‬


‫نوشت‪:‬‬

‫{ = ]‪int mat [3] [3‬‬


‫‪{ 19, 8, 11 },‬‬
‫‪{ 25, 4, 16 },‬‬
‫‪{ 0 , 8 , 5 },‬‬
‫;}‬

‫‪153‬‬
‫به یاد داشته باشید که بعد از ختم هرر جروره قروس کامره‬
‫باید اضافه گردد ‪ .‬به صورت عموم‪ ،‬برای اینکه هر عنصر در‬
‫یک صف دو بعردی پروسرس گرردد نیراز اسرت ترا از ‪Nested loop‬‬
‫استفاده صورت گیرد‪.‬‬
‫; ‪int a [ 5 ] [ 3 ], i‬‬
‫)‪for (i = 0; i <5; i++‬‬
‫)‪for (j = 0; j <5; j++‬‬
‫;‪a[i][j]=0‬‬
‫سرطر (‪ )Row‬و حلقره‬ ‫حلقۀ (‪ )Loop‬اول به خاطر تغییر قیمت‬
‫دوم به خاطر تغییر قیمرت سرتون (‪ )Column‬اسرتفاده میشرود‪.‬‬
‫شمامیتوانید عملیرات سراده ماننرد جمرع‪ ،‬تفریرق‪ ،‬ضررب و‬
‫باآلخره تبدیل سطر به سرتون و یرا سرتون بره سرطر را برا‬
‫استفاده از صف ‪ 2‬بعدی اجررا کنیرد‪ .‬قابرل ذکرر اسرت کره‬
‫سازگاری مترکس باید در نظر گرفته شود‪ .‬به این معنرا کره‬
‫تعداد سطر و ستون در بعضی موارد باید مساوی باشد در غیر‬
‫آن یک سلسله عملیات فو اجرانمیگردد‪.‬‬
‫مثال ‪ :13.7‬برنامۀ ذیل مترکس ‪ A‬و ‪ B‬را میخواند و مجموعه آنرا بعد از محاسبه روی سکرین نشان میدهد‪.‬‬

‫‪154‬‬
// Programs to read two matrices A and B and display their sum
#include <iostream.h>
main ( )
{
int a [ 10 ] [ 10 ], b [ 10 ] [ 10 ], sum [ 10 ] [ 10 ], i, j, n ;
cout << " \n Enter the order of matrix : " ;
cin >>n;
/* Reading the elements of matrices a and b */
cout <<"\n Enter the elements of matix a : \n";
for (i =0; i <n; i++)
for ( j=0; j<n; j++)
cin >> a[ i ][ j ] ;
cout <<"\n Enter the elements of matix b : \n";
for (i =0; i <n; i++)
for ( j=0; j<n; j++)
cin >> b[ i ][ j ] ;
// Finding the sum of the two matrices
for (i =0; i <n; i++)
for ( j=0; j<n; j++)
sum [ i ] [ j ] = a [ i ] [ j ] + b [ i ] [ j ] ;
/* Printing the resultant matrix */
cout <<"\n The Summation matrix : \n " ;
for ( i=0 ; i <n ; i ++ )
{
for ( j = 0; j <n; j++ )
{
cout << sum [ i ][ j ] << " " ;
}
cout << "\n" ; // generate line after each row
}
return 0;
{

Output
Enter the order to matix : 3
Enter the elements of matrix A:
1 2 3 4 5 6 7 8 9
Enter the elements of matrix B:
2 4 6 8 10 12 14 16 18
The summation matrix :

155
3 6 9
12 15 18
21 24 27
.‫ برنامۀ ذیل مترکس را میخواند و در نتیجه سطر را به ستون و ستون را به سطر تبدیل میکند‬:14.7 ‫مثال‬
// Program to read a matrix and output its transpose
#include <iostream.h>
main ( )
{
int a [ 10 ] [ 10 ], trans [ 10 ] [ 10 ] ;
int i, j, r, c;
cout << " \n Enter no of rows and no of columns of a matrix : " ;
cin >> r >> c ;
cout <<"\n Enter the matix elements of a : \n";
// Rending and assigning to trans matrix
for (i =0; i <r; i++)
for ( j=0; j<c; j++)
{
cin >> a [ i ] [ j ] ;
trans [ j ] [ i ] = a [ i ][ j ]; // Exchange rows and column positions
}
cout << "\n The given matix a : \n" ;
for ( i = 0 ; i<r ; i++)
{
for ( j=0; j <c ; j++ )
{
cout << a[ i ][ j ] << " ";
}
cout << "\n" ;
}
cout << "\n The Transposed matrix : \n" ;
for ( i=0; i <c ; i++ )
{
for (j=0; j<r; j++)
{
cout << trans [ i ] [ j ]<< " ";
}
cout<<"\n";
} }

156
Output
Enter no of rows and no of columns of a matrix : 3 2
Enter the matrix elements of a :
1 3
5 7
9 11
The given matrix A:
1 3
5 7
9 11
The Transposed matrix :
1 5 9
3 7 11

.‫ برنامۀ ذیل دو مترکس را میخواند و حاصل ضرب آنرا دریافت میکند‬:15.7 ‫مثال‬

// Program to read two matrices and find their product


#include <iostream.h>
main ( )
{
int a [ 10 ] [ 10 ], b [ 10 ] [ 10 ], prod [ 10 ] [ 10 ], i , j , k, n ;
cout << " \n Enter the order of matrix: " ;
cin >> n;
cout <<"\n Enter the elements of matrix a : \n";
for (i =0; i <n; i++)
for ( j=0; j<n; j++)
cin >> a [ i ][ j ];

cout <<"\n Enter the elements of matrix b : \n";


for (i =0; i <n; i++)
for ( j=0; j<n; j++)
cin >> b [ i ][ j ];

// Compute product of matrix a & b


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

{
prod [ i ][ j ] = 0 ;
for (k=0; k <n; k++)
prod [ i ][ j ] = prod [ i ][ j ] + a [ i ][ k ] * b [ k ][ j ];
}
cout << "\n The product of a and b matrix : \n" ;
for ( i=0; i<n; i++)

157
{
for ( j=0; j<n; j++)
{
cout << prod [ i ] [ j ] <<" ";
}
cout <<"\n" ;
}
return 0;
}
Output
Enter the order of matrix : 3
Enter the elements of matrix a :
1 2 3
1 2 3
1 2 3

Enter the elements of matrix b :


2 4 6
2 4 6
2 4 6

The product of a and b matrix :


12 24 36
12 24 36
12 24 36

.‫ برنامۀ ذیل مجموعۀ اعداد مایل را در مترکس مربعی دریافت مینماید‬:16.7 ‫مثال‬

// Program to print the sum of the diagnoals of a squar matrix


#include <iostream.h>
main ( )
{
int mat [ 10 ] [ 10 ], i , j , n ;
int dsum1 = 0, dsum2 = 0; // sum of diagonals
cout << " \n Enter the order of matrix: " ;
cin >> n;
cout <<"\n Enter the elements of matrix a : \n";
for (i =0; i <n; i++)
for ( j=0; j<n; j++)
{
cin >> mat [ i ][ j ] ;
// To calculate sum of left to right diagonal elements
if ( i == j )
dsum1 = dsum1 + mat [ i ] [ j ] ;
// T o calculate sum o right to left diagonal elements
158
‫) ‪if ( i + j == n-1‬‬
‫; ] ‪dsum2 = dsum2 + mat [ i ] [ j‬‬
‫}‬
‫;‪cout <<"\n Sum of left to right diagonal = " <<dsum1‬‬
‫;‪cout <<"\n Sum of right to left diagonal = " <<dsum2‬‬
‫;‪return 0‬‬
‫}‬
‫‪Output‬‬
‫‪Enter the order of matrix : 3‬‬
‫‪Enter the elements of matrix :‬‬
‫‪1 5 9‬‬
‫‪2 3 7‬‬
‫‪6 8 10‬‬
‫‪Sum of left to right diagonal = 14‬‬
‫‪Sum of right to left diagonal = 18‬‬
‫صف چند بُعدی (‪)Multi-Dimensional Arrays‬‬
‫وقتیکه یک صف بیشتر از ‪ُ 2‬‬
‫بعد داشته باشد به نام صف چنرد‬
‫ُ‬
‫بعدی (‪ )Multidimention Array‬یاد میشود‪.‬‬
‫شکل عمومی آن قرار ذیل است‪:‬‬
‫; ] ‪data – type array – name [ S1] [ S2] ….. [Sn‬‬
‫در اینما ‪ Sn.... ،s2 ،s1‬عبارت از اعداد تام مثبت است که‬
‫نشاندهندا تعداد عناصر در یک صف میباشدو هر یک آن دارای‬
‫یک زیرنویس(‪)subscript‬میباشرد‪ Data type .‬نوعیرت متحرول و ‪array-‬‬
‫ردی دو‬ ‫رف ‪ُ 2‬‬
‫بعر‬ ‫راطر در صر‬
‫رین خر‬ ‫ره همر‬
‫رد‪ .‬بر‬
‫رام صفمیباشر‬ ‫‪ name‬نر‬
‫بعردی ‪ 3‬زیرنرویس و در صرف ‪n‬‬ ‫زیرنویس (‪ )subscripts‬در صرف ‪ُ 3‬‬
‫بعدی ‪ n‬زیرنویس وجود دارد‪.‬‬ ‫ُ‬
‫مثال ‪ :17.7‬سه نمونه تعریف صف چند بعدی‪.‬‬
‫; ] ‪int lamps [ 3 ] [ 3 ] [ 4‬‬
‫; ] ‪float tri [ 3 ] [ 3 ] [ 3‬‬
‫; ] ‪int table [ 4 ] [ 4 ] [ 5] [ 2‬‬

‫‪36‬‬ ‫بعدی است کره حراوی‬


‫‪4 * 3 * 3‬‬ ‫در مثال فو ‪ lamps‬یک صف‪ُ 3‬‬
‫‪27‬‬‫بعدی اسرت کره حراوی‬‫عنصر تام میباشد‪ tri .‬نیز یک صف ‪ُ 3‬‬
‫بعدی است که شرامل ‪ 160‬عنصرر از نروع‬‫عنصر و ‪ table‬یک صف ‪ُ 4‬‬
‫تام (‪)int‬میباشد‪.‬‬
‫بعدی را میتوانیم طور ذیل نشان دهیم‪:‬‬ ‫صف ‪ُ 2‬‬
‫; ] ‪int boat [ 5] [ 5‬‬

‫‪159‬‬
‫ُعدی ذیل را نیز در نظر گیرید‪:‬‬
‫صف ‪ 2‬ب‬
‫; ] ‪int std [ 50 ] [ 5‬‬
‫در این مثال نمرات ‪ 50‬تن محصالن در ‪ 5‬مضمون نمایش داده شده‬
‫است‪ std [0] [0] .‬نمرات محصرل اول کره در مضرمون اول بره دسرت‬
‫آورده نشان میدهد‪ std [ 0 ] [ 1 ] .‬نمرات محصل اول در مضمون دوم‬
‫را نشان میدهد و به همینطور الی اخیر‪ std [49] [4] .‬نمرات کره‬
‫توسط محصل ‪ 50‬م در مضمون پنمم کسب نموده نشان میدهد‪.‬‬
‫‪Marks‬‬
‫‪Sub 0‬‬ ‫‪Sub 1‬‬ ‫‪Sub 2‬‬ ‫‪Sub 3‬‬ ‫‪Sub 4‬‬
‫‪Students 0‬‬
‫‪Students 1‬‬
‫‪Students 2‬‬
‫‪:‬‬
‫‪:‬‬
‫‪Students 49‬‬
‫عناصر صف در حافظه کمپیوتر طور ذیل ذخیره میگردد‪.‬‬

‫همچنان صف ‪ 3‬بعدی‬
‫; ]‪int lamps [3] [3] [4‬‬
‫‪160‬‬
‫به طور ذیل نشان داده میشود‪:‬‬

‫خـالصه فصل‬
‫در این فصل صف یا ‪ Array‬و انواع آن مورد بحث قرار گرفرت و‬
‫در نتیمه مفاهیم ذیل را آموختیم‪:‬‬
‫صف یک دیتاتایس خاص است و ممموعۀ عناصری کره دارای عرین‬
‫نوعیت (‪ )Data type‬باشد در خود ذخیرهمیکند‪.‬‬
‫به صورت عموم‪ ،‬سه نوع صف وجود دارد که عبارت اند از صرف‬
‫بعردی (‪)Two Dimensional Array‬‬ ‫بعدی (‪ ،)One Dimensional Array‬صف دو ُ‬
‫یک ُ‬
‫بعدی (‪ )Multi Dimensional Array‬که هر یک آن به طور خلص‬ ‫و صف چند ُ‬
‫ذیال بیان گردیده است‪:‬‬
‫صف که عناصر آن تنها به شکل سطر و یا ستون باشد به نرام‬
‫بعدی یادمیگردد‪ .‬اما صف که شامل سطر (‪ )row‬و سرتون‬ ‫صف یک ُ‬
‫بعدی یادمیگردد‪.‬‬ ‫(‪ )column‬باشد به نام صف دو ُ‬
‫بعرد (سرطر و سرتون)‬ ‫و باآلخره وقتیکه یک صف بیشرتر از ‪ُ 2‬‬
‫داشررته باشررد برره نررام صررف چنررد ُ‬
‫بعرردی (‪)Multidimention Array‬‬
‫یادمیگردد‪.‬‬

‫‪161‬‬
‫پرسشهای فصل‬
‫‪ array‬را تعریف نمایید؟‬ ‫‪ .1‬صف یا‬
‫بین صف و متحول عادی چیست؟‬ ‫‪ .2‬تفاوت‬
‫بعدی (‪ )one dimensional array‬را تعریف نمایید؟‬ ‫‪ .3‬صف یک‬
‫را تعریف نمایید که ‪ 10‬عدد اعشاری در آن ذخیره‬ ‫‪ .4‬یک صف‬
‫گردد؟‬
‫‪ .5‬صف دو بعدی (‪ )two dimensional array‬را تعریف نمایید و شکل‬
‫عمومی آنرا بیان دارید؟‬
‫‪ .6‬صف چند بعدی (‪ )multi dimensiuonal array‬را تعریف و شکل عمومی‬
‫آنرا بیان دارید؟‬
‫‪ .7‬تفاوت بین صف یک بعدی و دو بعدی چیست‪ ،‬بیان دارید؟‬
‫‪ .8‬پروگرامی را بنوسید که ‪ 10‬عدد را از کیبورد بگیرد‪ ،‬اول‬
‫اعداد تا و بعد اعداد جفت آنرا روی سکرین نشان دهد؟‬
‫‪ .9‬پروگرام را بنوسید که بزرگترین و کوچکترین عنصر در یک‬
‫مترکس را دریافت نماید؟‬
‫‪ .10‬پروگرام را بنوسید که ممموعۀ عناصر سطر و ممموعۀ‬
‫عناصر ستون را در صف ‪ 2‬بعدی دریافت و روی سکرین نشان‬
‫دهد؟‬
‫فعالیت گروپی‬
‫مترکس را دریافت‬ ‫‪2‬‬ ‫را بنوسید که حاصل ضرب‬ ‫‪ .11‬پروگرام‬
‫نماید؟‬
‫‪ .12‬پروگرام را بنوسید که مثلث پاسکال را ترسیم نماید؟‬
‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪1‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪1‬‬

‫‪1‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪4‬‬ ‫‪1‬‬


‫‪1‬‬ ‫‪5‬‬ ‫‪10‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪1‬‬

‫‪162‬‬
‫فصل هشتم‬
‫تابع )‪(Function‬‬

‫هدف عمومی‪ :‬با تابع )‪ (Function‬در برنامه نویسی ‪C++‬آشناشوند‪.‬‬


‫‪.‬‬
‫اهداف آموزشی‪ :‬در پایان این فصل‪ ،‬محصالن قادر خواهند بود تا‪:‬‬
‫‪ .1‬تابع را تعریف نمایند‪.‬‬
‫‪ .2‬روش ایماد کردن تابع راتوضیح دهند‪.‬‬
‫‪ .3‬روش صدا یا ‪ Call‬نمودن تابع راتشریح نمایند‪.‬‬
‫‪ .4‬قیمت ها )‪ (Values‬را به تابع ارسال کنند‪.‬‬
‫‪ .5‬قیمت ها )‪ (Values‬را از تابع برگردان کنند‪.‬‬

‫این فصل حاوی مفاهیم مرتبط به تابع مانند‪ :‬ایماد تابع‪،‬‬


‫استفاده از تابع‪ ،‬ارسال قیمت به تابع و برگرداندن قیمت‬
‫ها از تابع میباشد‪.‬‬
‫توابع که تا کنون نوشته شدند فقط شامل یک تابع اصلی‬
‫بنام )‪ (main‬بوده اند‪ .‬در برنامه های طوزنی و پیچیده که‬
‫شامل چندین بخش منطقی و مستقل از هم هستند‪ ،‬بهتر است‬
‫برای هر قسمت منطقی‪ ،‬برنامه جداگانه ای نوشته شود‪.‬‬
‫برنامه که برای هر یک از بخشها نوشته میشود‪ ،‬تابع نام‬
‫دارد‪ .‬در واقع تابع برنامه ای است که برای حل بخشی از‬
‫مسهله نوشته میشود‪.‬‬
‫یک تابع عبارت است از تعدادی از دستور های برنامه که در‬
‫یک واحد گرد آمده اند و یک کار مشخص را انمام میدهند‪.‬‬
‫هر برنامه در زبان ‪ C++‬حداقل دارای یک تابع بوده که‬
‫همان تابع )(‪ main‬است‪ ،‬اما یک برنامه میتواند شامل هر‬
‫تعداد تابعی باشد‪ .‬تابع )(‪ main‬نقطه آغاز یک برنامه است‪.‬‬
‫در زبان برنامه نویسی ‪ C++‬به صورت کلی توابع به دو دسته‬
‫تقسیم میشوند‪:‬‬
‫‪ .1‬توابع کتابخانه ای‬
‫‪ .2‬توابع تعریف شده توسط کاربر‬

‫‪163‬‬
‫توابع کتاب خانه ای‬
‫تعدادی از توابع که در اغلب برنامه ها مورد استفاده‬
‫قرار میگیرند و کاربرد زیادی دارند‪ ،‬از قبل نوشته شده‪،‬‬
‫به همراه کامپایلر ‪ c‬ارائه میشود‪ .‬مثل توابع )(‪ sin(), cos‬که‬
‫برای محاسبه زاویه به کار میروند و یا تابع )(‪ clrscr‬که‬
‫صفحه نمایش را پا میکند‪ .‬این توابع را توابع کتابخانه‬
‫ای میگوییم‪ .‬این توابع از قبل در هرفایلی موجود است که‬
‫ما همواره آنرا در ابتدای برنامه ضمیمه میکنیم‪ .‬تنها‬
‫کافی است نام تابع را نوشته و با یک دستور زبان مناسب‬
‫بکار گیریم‪.‬‬
‫مثال ‪ :1.8‬برنامۀ ذیل با استفاده از تابع کتابخانه یی >‪ <iostream.h‬پیام "!‪ "hello world‬را نمایش میدهد‪.‬‬

‫‪// program to Print “Hello World!” using Library Function‬‬


‫>‪#include <iostream.h‬‬
‫) ( ‪main‬‬
‫{‬
‫;" !‪cout << " Hello World‬‬
‫;‪return 0‬‬
‫}‬

‫‪Output‬‬
‫!‪Hello world‬‬

‫مثال ‪ :2.8‬برنامۀ ذیل جذر مربع هر عدد وارد شده از صفحه کلید را با استفاده از تابع کتابخانه یی >‪ <math.h‬دریافت میکند‪.‬‬

‫‪// program to find Square Root of any number inserted from keyboard‬‬
‫>‪#include <iostream.h‬‬
‫‪#include <math.h> // required for sqrt function‬‬
‫) ( ‪main‬‬
‫{‬
‫‪// Declaration‬‬
‫;‪double Number, SQR‬‬
‫;" ‪cout << "Enter a number to find its Square Root :‬‬
‫;‪cin >> Number‬‬
‫;)‪SQR = sqrt (Number‬‬
‫;‪cout << " The square root of "<< Number << " = " << SQR‬‬
‫;‪return 0‬‬
‫‪164‬‬
‫}‬

‫‪Output‬‬
‫‪Enter a number to find its Square Root : 36‬‬
‫‪The square root of 36 = 6‬‬

‫توابع تعریف شده توسط کاربر‬


‫تابع تعریف شده توسط کاربر‪ ،‬تابعی است که بدنه آن را‬
‫نوشته و موقع نیاز به انمام عملیات در برنامه خود‪ ،‬آنرا‬
‫صدا کردن )‪ (call‬میکنیم‪ .‬برای ایماد یک تابع در ‪ C++‬تابع‬
‫را به مثل تابع )(‪ main‬در یک قسمت برنامه معرفی میکنیم و‬
‫ٌ آنرا در بدنه تابع اصلی )(‪ main‬در قسمت دلخواه )(‪call‬‬ ‫بعدا‬
‫میکنیم‪.‬‬

‫شکل ‪ 1.8‬کارکرد یک تابع‬

‫مثال ‪ :3.8‬برنامۀ ذیل "!‪ "Hello World‬را با استفاده از تابع معرفی شده توسط کاربر نمایش میدهد‪.‬‬

‫‪// program to Print “Hello World!” using user defined function‬‬


‫>‪#include <iostream.h‬‬
‫{ )(‪void greet‬‬
‫;”!‪cout <<”Hello World‬‬
‫}‬

‫‪165‬‬
‫) ( ‪main‬‬
‫{‬
‫‪// calling the function‬‬
‫;)(‪greet‬‬
‫;‪return 0‬‬
‫}‬

‫‪Output‬‬
‫!‪Hello World‬‬

‫نوشتن توابع‬
‫هر تابع چهار بخش متفاوت دارد که عبارتند از‪:‬‬
‫‪ .1‬اعالن تابع (‪)function declaration‬‬
‫‪ .2‬تعریف تابع (‪)function definition‬‬
‫‪ .3‬قیمت های برگشتی تابع (‪)return value‬‬
‫‪ .4‬صدا کردن تابع (‪) call function‬‬

‫اعالن تابع (‪)Function Declaration‬‬


‫برای آنکه کامپایلر بداند که چه توابعی در یک برنامه‬
‫وجود دارد و به نوعی با شناسایی این توابع امکان‬
‫استفاده از این توابع در توابع دیگر برنامه که از قبل‬
‫تعریف تابع مذکور قرار دارند‪ ،‬از جمله داخل تابع )(‪main‬‬
‫فراهم شود باید توابع را قبل از تابع )(‪ main‬اعالن کرد‪.‬‬
‫اعالن تابع به کمپایلر در مورد نام تابع‪ ،‬نوعیت قیمت‬
‫بازگشتی تابع و نوعیت پارامتر های تابع میگوید‪.‬‬
‫‪ -‬نام تابع‪ :‬هر تابع باید دارای یک نام باشد‪ .‬نامگذاری‬
‫توابع از قوانین نامگذاری متغیرها پیروی میکند‪ .‬از‬
‫آنما که صدا کردن توابع توسط نام توابع صورت‬
‫میگیرد‪ ،‬بهتر است نام تابع معرف عملیاتی باشد که آن‬
‫تابع انمام میدهد‪ ،‬تا کد برنامه برای دیگری که آن‬
‫را می خوانند روشن و بدون ابهام باشد‪ .‬به عنوان‬
‫مثال اگر تابعی عملیات جمع را انمام میدهد بهتر است‬
‫نام آن را ‪ add‬یا ‪ sum‬انتخاب کنید‪.‬‬

‫‪166‬‬
‫‪ -‬نوعیت قیمت های بازگشتی تابع‪ :‬هر تابع باید با دریافت قیمت های‬
‫ورودی خود‪ ،‬نتیمه حاصل از عملیات بر روی ورودی ها‬
‫را به فراخواننده خود بازگرداند‪ .‬هر تابع متواند‬
‫هیچ قیمت‪ ،‬یک قیمت و یا چند قیمت را بازگرداند‪ .‬اما‬
‫توابع که هیچ قیمت را برنمی گردانند از نوع ‪void‬‬
‫میباشند و توابعی که یک مقدار را توسط دستور ‪return‬‬
‫باز می گردانند همنوع با نوع بازگشتی خود میباشند‪.‬‬
‫به عنوان مثال اگر تابعی یک عدد ‪ int‬را باز گرداند‪،‬‬
‫از نوع ‪ int‬میباشد‪.‬‬
‫‪ -‬نوع پارامتر های تابع‪ :‬هر تابع در ریاضیات ممکن است یک یا چند‬
‫ورودی داشته باشد‪ .‬اما در ‪ c++‬تابع حتی میتواند بدون‬
‫هیچگونه قیمت ورودی باشد‪ .‬چیزی که در اعالن تابع‬
‫بسیار مهم است‪ ،‬تعیین تعداد و نوع قیمت های ورودی‬
‫(‪ )arguments‬تابع است‪ .‬در ‪ c++‬استاندارد تأکید شده که‬
‫اگر تابعی هیچ قیمت ورودی ندارد‪ ،‬کلمه ‪ void‬را به‬
‫عنوان (‪ )argument‬های آن تابع ذکر کنیم‪ ،‬تا عدم وجود‬
‫(‪ )argument‬های تابع به شکل واضح تر مشخص شود‪ .‬شکل‬
‫کلی اعالن یک تابع به صورت ذیل است‪:‬‬
‫) ‪return_type function_name( parameter list‬‬

‫تعریف تابع(‪)Function Definition‬‬


‫این بخش بدنه اصلی تابع را شکل میدهد و تمام دستورات‬
‫که باید یک تابع انمام دهد درین بخش معرفی میشود‪.‬‬
‫{ ) ‪return_type function_name( parameter list‬‬
‫‪//Function Definition‬‬
‫‪body of the function‬‬
‫}‬
‫قیمت های برگشتی تابع (‪)Function Return Value‬‬
‫قیمت مشخصی که از یک تابع برگشت میکند بنام قیمت برگشتی‬
‫تابع یاد میشود‪ .‬وقتی بیانیه برگشتی اجرا شد‪ ،‬قیمت‬
‫برگشت کننده از تابع به صدا کننده تابع برگشت میکند‪ .‬یک‬
‫تابع میتواند هیچ قیمتی را برگشت ندهد یا یک و چند قیمت‬
‫را برگشت دهد‪.‬‬

‫‪167‬‬
‫ً در برنامه از توابعی استفاده‬‫توابعی که هیچ مقداری را بر نمی گردانند‪ :‬بعضا‬
‫میکنیم که آن توابع پس از صدا کردن عملیات مورد نظر را‬
‫انمام دهند و خروجیهای مورد انتظار را تولید و چاپ‬
‫نمایند و هیچ مقداری را به تابع فراخوان تحویل نمیدهند‪.‬‬
‫مثال ‪ :4.8‬برنامۀ ذیل تابع بدون ورودی و خروجی را نشان میدهد و فقط پیام را در تابع ساخته شده توسط کاربر پرنت میکند‪.‬‬

‫‪// Function that return no value‬‬


‫>‪#include <iostream.h‬‬
‫;)‪void print(void‬‬

‫)(‪int main‬‬
‫{‬
‫;)(‪print‬‬
‫;‪return 0‬‬
‫}‬
‫) ‪void print( void‬‬
‫{‬
‫;"!‪cout << " No value Function‬‬
‫}‬

‫‪Output‬‬
‫!‪No value Function‬‬

‫توابعی که یک مقدار را برمی گردانند‪ :‬این توابع پس از صدا شدن یک قیمت را‬
‫به تابع صدا کننده بازگشت میدهند‪.‬‬
‫مثال ‪ :5.8‬برنامۀ ذیل قیمت متحول ‪ X‬به تابع )(‪ Scope‬ارسال نموده و برگشت میدهد‪.‬‬

‫)(‪// program to Program to return value of A from function Scope‬‬


‫>‪#include <iostream.h‬‬

‫;)‪void scope(int‬‬

‫)(‪int main‬‬
‫{‬
‫;‪int x = 10‬‬
‫;"‪cout << "first value of A=" << x << "\n‬‬
‫;)‪scope(x‬‬
‫;‪cout << "third value of A=" << x‬‬

‫‪168‬‬
return 0;
}
void scope(int a)
{
a++;
cout << "second value of A=" << a << "\n";
}

Output
first value of A= 10
second value of A= 11
third value of A= 10

.‫ فکتوریل آنرا دریافت نموده دوباره برگشت میدهد‬factorial() ‫ برنامۀ ذیل یک عدد را دریافت نموده در تابع‬:6.8 ‫مثال‬

// Program to Find Factorial using user define Function


#include <iostream.h>
int factorial(int);
int main()
{
int n;
cout<<"Enter a number to find factorial: ";
cin >> n;
cout << "Factorial of " << n <<" = " << factorial(n);
return 0;
}
int factorial(int n)
{
if (n > 1)
{
return n*factorial(n-1);
}
else
{
return 1;
}
}

169
‫‪Output‬‬
‫‪Enter a number to find factorial: 5‬‬
‫‪Factorial of 5 = 120‬‬

‫صدا کردن تابع(‪)Function Call‬‬


‫زمانی که میخواهیم از تابع استفاده کنیم (در برنامه‬
‫اصلی) باید با استفاده از نام تابع آن را صدا کنیم‪ .‬به‬
‫این صورت که نام تابع مورد نظر را مینویسیم و در جلوی‬
‫نام تابع داخل پرامتر مقادیری که میخواهیم برای تابع‬
‫ارسال کنیم را مینویسیم‪ .‬تا اکنون توابع زیاد کتابخانه‬
‫یی را در ‪ C++‬صدا کرده ایم‪ .‬هر تابع قادر است تابع‬
‫دیگری را صدا یا ‪ call‬کند‪ ،‬به شرط آنکه اعالن تابع صدا شده‬
‫قبل از تابع صدا کننده موجود باشد‪ .‬لذا از نقطه ای که‬
‫اعالن یک تابع قرار دارد این تابع برای تمامی توابع دیگر‬
‫برنامه قابل شناسایی و صدا شدن است‪ .‬و همچنان هر تابع‬
‫فرعی را می توان از داخل تابع فرعی دیگری صدا کرد‪ ،‬و‬
‫تنها تابع )(‪ main‬است که توسط توابع برنامه نمیتوانند‬
‫آنرا صدا کند‪.‬‬
‫مثال ‪ :7.8‬برنامۀ ذیل کوچکترین عدد بین دو عدد را در یک فنکشن معرفی شده توسط کاربر نمایش میدهد‪(.‬نحوه صدا کردن تابع)‬

‫‪// program to the minimum number using function‬‬


‫>‪#include <iostream.h‬‬

‫;)‪int minimum(int a , int b‬‬


‫)(‪int main‬‬
‫{‬
‫;‪int num1 , num2 , result‬‬
‫;‪cout<<"Enter 2 numbers to find the minimum : "<<endl‬‬
‫;‪cin>>num1>>num2‬‬
‫;)‪result=minimum(num1 , num2‬‬
‫;‪cout<<"the minimum number between "<<num1<<" and "<<num2<<" is "<<result<<endl‬‬
‫;)"‪system("pause‬‬
‫;‪return 0‬‬
‫}‬

‫)‪int minimum(int a , int b‬‬


‫{‬
‫‪170‬‬
‫)‪if(a<b‬‬
‫;‪return a‬‬
‫)‪if(b<a‬‬
‫;‪return b‬‬
‫;‪return 1‬‬
‫}‬

‫‪Output‬‬
‫‪first value of A= 10‬‬
‫‪second value of A= 11‬‬
‫‪third value of A= 10‬‬

‫روشهای ارسال پارامتر ها به توابع‬


‫پارامتر ها را به دو طریق میتوان از تابع فراخوان به‬
‫تابع صدا شونده ارسال کرد‪ .‬این روش عبارتند از‪:‬‬
‫‪۱‬ر روش صدا کردن با قیمت )‪(call by value‬‬
‫‪۲‬ر روش صدا کردن با آدرس )‪(call by reference‬‬

‫صدا کردن با قیمت(‪)Call by Value‬‬


‫در این روش‪ ،‬یک کاپی از آن پارامتر در حافظه کامپیوتر‬
‫قرار می گیرد و تغییرات برروی آن متغیر در تعریف تابع‬
‫از تابع تاثیری‬ ‫به هیچ عنوان در مقدار آن در خار‬
‫نخواهد داشت‪.‬‬
‫مثال ‪ :8.8‬برنامۀ ذیل عدد ‪ 10‬را مربع میکند و در خروجی نشان میدهد‪.‬‬

‫‪// Call by Value‬‬


‫>‪#include <iostream.h‬‬
‫;)‪int sqr(int x‬‬

‫)(‪int main‬‬
‫{‬
‫;‪int num = 10‬‬
‫;‪cout << "square = " << sqr(num) << "and number = " << num‬‬
‫;‪return 0‬‬
‫}‬
‫;)‪int sqr(int x‬‬
‫{‬
‫;‪x = x * x‬‬
‫‪171‬‬
return x;
}

Output
square = 100 and number = 10

.‫ را برمیگرداند‬X ‫ برنامۀ ذیل قیمت‬:9.8 ‫مثال‬

// Call by value
#include <iostream.h>

int returnEight()
{
return 8; // return the specific value 8 back to the caller
}
int main()
{
cout <<"return value is: "<< returnEight() << '\n';
cout <<"return value +2 is: "<< returnEight() + 2 << '\n';

returnEight();
return 0;
}
Output
return value is: 8
return value +2 is:10

)Call by reference(‫صدا کردن با آدرس‬


‫ تغییرات در متغیر در آدرس موجود کاپی شده و‬،‫در این روش‬
‫تغییرات مربوط به پارامتر در خار از تابع هم وابسته به‬
.‫تغییرات متغیر در درون تابع می باشد‬

.‫ را با هم تعویض میکند‬y ‫ و‬x ‫ برنامۀ ذیل قیمت های‬:10.8 ‫مثال‬

// Call by reference
#include<iostream.h>
void swap(int *x, int *y)
{
int swap;
swap=*x;

172
*x=*y;
*y=swap;
}
int main()
{
int x=500, y=100;
swap(&x, &y); // passing value to function
cout<<"Value of x is: "<<x<<endl;
cout<<"Value of y is: "<<y<<endl;
return 0;
}

Output
Value of x is: 100
Value of y is: 500

‫ دقیقه و ثانیه تبدیل نموده در اسکرین نشان‬،‫ برنامه ذیل زمان را بر حسب ثانیه میگیرد و توسط یک تابع آنرا به ساعت‬:11.8 ‫مثال‬
.‫میدهد‬
// The program change the seconds from integer to Clock format
#include <iostream.h>
void convert(int s);

int main()
{
int seconds;
cin>> seconds;
convert(seconds);
return 0;
}
void convert(int s)
{
int second,h,m;
second = s % 60;
h= s/3600;
m=(s/60) % 60;
cout<< "Time is: " << h<< ":"<< m << ":" << second;
}
Output
2500
0:41:40

173
‫ برنامه ذیل بزرگترین عدد بین دو عدد وارد شده از کیبورد را با استفاده از یک تابع معرفی شده توسط کاربر نشان‬:12.8 ‫مثال‬
‫میدهد‬
// The program find the maximum number between two numbers
#include <iostream.h>
int max(int num1, int num2);

int main () {
int a;
int b;
int ret;
cout<<"Enter two values for a and b \n";
cin>>a>>b;
ret = max(a, b);
cout << "Max value is : " << ret << endl;

return 0;
}
int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Output
Enter two values for a and b
560 500
Max value is : 560

.‫ ارسال میکند و بعدا ٌ جمع آنها را به تابع اصلی ارسال میکند‬sum ‫ برنامه ذیل دو عدد را از کیبورد گرفته به تابع‬:13.8 ‫مثال‬
// The program take to numbers sum them in a function and return the sum
#include <iostream>
using namespace std;
float sum(float, float); // = float sum(float num1, float num2);

int main()
{
float num1, num2 ,numSum;
cout << "Enter first number :" ;
cin >> num1;

174
cout << "Enter second number :" ;
cin >> num2;
numSum = sum(num1, num2);
cout <<”The sum is: “ <<numSum;

return 0;
}
float sum(float f1, float f2) // float sum(float num1, float num2);
{
float fSum = f1 + f2;
return fSum;
}

Output
Enter first number: 20
Enter second number: 25
The sum is: 45

175
‫خالصه فصل‬
‫درین فصل درمورد مفهوم تابع معلومات حاصل نمودیم‪ .‬در‬
‫ادامه با انواع تابع در ‪ C++‬و طریقه استفاده از آن‬
‫معلومات حاصل کردیم‪ .‬هر تابع یک برنامه کوچک یا یک‬
‫زیربرنامه است‪ .‬انواع توابع‪ ،‬توابع کتابخانه ای و توابع‬
‫تعریف شده توسط کاربر هستند‪ .‬یک تابع شامل اعالن‪ ،‬بدنه‬
‫تابع و بخش صدا کردن تابع میباشد‪ .‬اعالن تابع و بدنه‬
‫تابع بخش های ضروری تابع هستند و صدا کردن تابع در یک‬
‫برنامه اختیاری است‪ .‬برنامه های ‪ c++‬حداقل یک تابع دارند‬
‫که این تابع‪ ،‬تابع )(‪ main‬میباشد‪ .‬هر تابع باید در برنامه‬
‫‪ c++‬تعریف و اعالن شود‪.‬‬
‫‪.‬‬
‫پرسش های فصل‬
‫‪ .12‬تابع چیست؟ شرح دهید‪.‬‬
‫‪ .13‬بخش های ضروری در ایماد یک تابع کدام ها اند؟‬
‫‪ .14‬در مورد اعالن تابع معلومات ارایه کنید‪.‬‬
‫‪ .15‬در مورد قیمت های برگشتی تابع معلومات ارایه کنید‪.‬‬
‫‪ .16‬چگونه تابع را صدا مینمایم؟ معلومات دهید‪.‬‬
‫‪ .17‬به چند نوع به تابع قیمت ارسال میتوانیم؟ شرح دهید‪.‬‬

‫فعالیت گروپی‬
‫‪ .1‬پروگرامی را بنویسید که مکعب یک عدد را در یک تابع‬
‫جدا گانه دریافت و حاصل آنرا به تابع )(‪ main‬ارسال‬
‫کند‪.‬‬
‫‪ .2‬برنامه بنویسید که دو عدد را در یک تابع ضرب و در‬
‫تابع دگر تقسیم نموده و نتایج را به تابع )(‪main‬‬
‫انتقال دهد‪.‬‬
‫‪ .3‬برنامه بنویسید که در یک تابع جذر دوم و در تابع‬
‫دیگر همان عدد را بتوان ‪ 4‬باز ببرد و نتیمه آنرا به‬
‫تابع اصلی انتقال دهد‪.‬‬

‫‪176‬‬
‫مآخذ‬

.‫پوهنتون کابل‬: ‫افغانستان‬, ‫کابل‬, ‫کابل‬++C. ‫لسان پروگرام نویسی پیشرفته‬. (1381). ‫ح‬. ‫س‬, ‫ عدلیار‬.1
2. Backman, K. (2012). Structured Programming with C++. Trollhattan, Trollhattan,
Sweden: Ventus Publishing Aps.
3. Bailey, T. (2005). An Introduction to the C Programming Language and Software
Design. United States: Prentice-Hall.
4. Balagtas, F. T. (2006). Introduction to Programming 1. Pepper Pike, Ohio, United
States: Ursuline .
5. Buard, B. (2005). Beginning Programming with Java (2nd Edition ed.). Indianapolis,
Indiana, United States: Wiley Publishing .
6. Deitel, H. M. (2007). JAVA How to Program (7th Edition ed.). Upper Saddle River,
New Jersey, United States: Pearson.
7. Deitel, P., & Deitel, H. (2012). JAVA How to Program (9th ed.). Boston,
Massachusetts, United States: Peason.
8. Eckel, B. (1999). Thinking in C++ (2nd Edition ed.). Upper Saddle River, New
Jersey, United States: Prentice Hall.
9. Gaddis, T. (2008). Starting out with JAVA From Control Structures through Object5
(5th ed.). Upper Saddle River, New Jersey, United States: Pearson.
10. Gemmell, M. (2002). Introduction to Programming. Scotland, Scotland, Scotland:
Sams.
11. Gilster, R. (2001). PC Hardware : A Beginner's Guide. NY, New York, United
States: McGraw-Hill.
12. Glassborow, F. (2004). A Beginner's Introduction to Computer Programming .
Chichester,, Chichester,, England: John Wiley.
13. Halterman, R. L. (2018). Fundamentals of C++ Programming. TN, Tennessee,
United States: Southern Adventist.
14. Horton, I. (2012). Beginning C (5th Edition ed.). Belgium: Apress.
15. Jones, B., & Aitken, P. (2014). Sams Teach Yourself C++ in One Hour a Day (7th
Edition ed.). Indianapolis, Indiana, United States: Sams Publishing.
16. Klousen, P. (2017). JAVA 1 Basic Syntax and Semantics. NA: BookBone.
17. Langtangen, H. P. (2006). Introduction to C++ Programming. Oslo, Oslo2, Narvey:
Simula.
18. Lippman, S. B. (1996). Inside the C++ Object Model. New York, New York, United
States: Addison Wesley.
19. Lippman, S. B. (2002). Essential C++. MA, Massachusetts, United States: Addison
Wesley.
20. Love, T. (2011). Advanced Programming with C++. London, UK: Murrell.
21. Meyers, A. (2002). Introduction to Computer & Programming. New York, New
York, United States: Deluxe.

177
22. Meyers, S. (2005). Effective C++ (3rd Edition ed.). Boston, Massachusetts, United
States: Addison Wesley.
23. Nakov, S., & Kolev, V. (2013). Fundamentals of Programming with C#. Sofia, Sofia,
Bulgarian: Teodor Bozhikov.
24. Nawaz, A. (2006). Programming in C++ (3rd ed.). Peshawar, Peshawar, Pakistan:
Discount Book Shop.
25. Oualline, S. (1995). Practical C++ Programming. MA, Massachusetts, United States:
O'Reilly & Associates, Inc.
26. Overland, B. (2013). C++ without Fear: A Beginner's Guide to Make you Feel Smart.
NA, NA: Overland.
27. Prinz, P. (2002). A Complete Guide to Programming in C++. Bjorkliden,,
Bjorkliden,, Sweden: JONES AND BARTLETT PUBLISHERS.
28. Rama, M. A. (2011). Programming Concepts Using C++. Malleswaram, Bangalore,
India: Subhas.
29. Soulié, J. (2007). C++ Language Tutorial. NA, NA: cplusplus.
30. Stroustrup, B. (1997). The C++ Programming Language (3rd Edition ed.). Murray
Hill, New Jersey, United States: AddisonWesley.
31. Stroustrup, B. (2013). A Tour of C++. College Station, Texas, United States:
Addison-Wesley.

178

You might also like