صفحه 1:
بسم الله الرحمن الرحيم
صفحه 2:
مقد مه
زبان ۶ یک زبان همه منظوره است.
دستورالعملهاى اين زبان بسيار شبيه
رس مر رت ات
ار le een
میشود که ۶) یک زبان سطح بالا
باشد که برنامهنویسی در آن آسان
|1 اند ونا
صفحه 3:
++0 3 از سر الت صاد ريز كر ساق
رابه ارث برده است. امابرتری فنی
ذيكرى هم ذارد: 295 اكنون «شىكراء
از ی تا رال رس
برنامههای شی گرا تولید نمود. برنامههای
es mari a aes 1۳
ترس سل سر
و قابليت اطمينان و يايدارى ييشترى دارند.
صفحه 4:
: اهم مطالب این کتاب
جلسه اول: «مقدمات برنامهنویسی با (60++»
جلسه دوم: «انواع اصلى»
«جلسه سوم: «انتخاب
aes سك
«جلسه پنجم: «توابع
رس
صفحه 5:
«جلسه هفتم: «اشارهگرها و ارجاعها
جلسه هشتم: «رشتههاي كاراكتربي و فايلها در +04 استاندارد»
جلسه نهم: «شيئكرايي»
«جلسه دهم: «سربار گذاري عملگرها
جلسه بازدهم: «ترکیب و ورائت»
صفحه 6:
اد
مقدمات برنامهنویسی با )1
+
صفحه 7:
:آنجه در اين جلسه مى خوانيد
© 5
۳- 060
ار ار
۴- شروع کار با ۶++
۳
ع- ليترالها و كاراكترها
yee ا
۸- مقداردهی اولیه به متغیرها
- ثابتها
۰ -عملگر ورودی
صفحه 8:
:هدفهای رفتاری
0 مىرود 2000 يايان 525 9 بتوانید:
- مزاياى زبان ()2++ رابر زبانهاى مشابه ذكر كرده و
REy Cg ل ا
Perey ae ا ا ل ال oa caeT e dae
رابيان كرده و مشكلات هر دوره را به اختصار شرح
دهید.
- مزایای شی گرایی در تولید نرمافزار را برشمارید.
-اصول سهكانة ا ات لك
Wr erry] ev-ve4| ۱ >>
صفحه 9:
Reem LS TY edad ل
کوچک را نوشته و آزمایش کنید.
- عملگر ورودی و خروجی را در (6++ شناخته و از آنها در
Freee Ay ۳[
- نحوة اعلان متفیرها و شیوةٌ مقداردهی به آنها را بدانید.
۱ od ا لا rel eg
Bur Sy eee!
- علت و شيوههاى افزودن توضيح به كد برنامه را شرح دهيد.
- علت و شيوةٌ معرفى ثابتها در برنامه را شرح دهيد.
)
by
صفحه 10:
56
در آزمايشكادهاى بل زبانى به نام © ايجاد 1917٠١ در دهه
PEM Ley ne Boe) a BEKO) Soe Bier ened
۱ Se eM Cae eto BRAM
ا ا ا ا ل B)
جلب نمود.
۱ ا ا ا Cape cory
رونق یافت. زبان () که قابلیت شیگرایی نداشت ناقص به
| Oe Bey نظر میرسید تا این که
6 OL a RC a aC ee enone
GB) )) SS oes
صفحه 11:
0 سم 9 see
به همین دلیل در سال ۱۹۹۸ زبان (6++ توسط موسسة
erie ما 0000
aye
صفحه 12:
$4+4+Clye—-1
*زبان ۵ یک زبان همه منظوره است
a این زبان عطلکرهایی تعببه شده که بر نامه نویسی
سطح يايبن و به زبان ماشين رانيز امكانيذير
مى سازد
سر ار در ار رت ۳
در اين زبان بسيار كوتاه است
صفحه 13:
* - زبان © برآي اجراي بسياري از دستور انش از توایم کتابخانهاي
eent teste See Spee te ee Ton] 0ك
توابع و اگذار مينماید.
برنامه مقصدي که توسط کامپایلر هاي () ساخته ميشود بسیار
Pope oy ee ee
< وهب كداز نسل0 لست تمام ويزكيهايجذلب0 را به ارث
بردم 2
و سرانجام آخرین دلیل استفاده از ا 6 كا
صفحه 14:
+46 4550 6 —Y
در دهه ١917١ در آزمايشكاهدهاى بل زبانى به نام © ايجاد
PE mae Lepr enone wes erie) sie) es) pee
were kA. We ee ال الاك الا ا 2
از این زبان منتشر شد و به سرعت نظر برنامه نویسان حرفهای
keer ا ا ا ل ل 00
ل ۱۳
نداشت ناقص به نظر مىرسيد تا اين كه در اوايل دهة ۱۹۸۰
دوباره شر کت بل دست به کار شد و 27116[ظ
5101151112 0 23903
صفحه 15:
صفحه 16:
Bel pe ل ا را oe py eee pe ree
و ey Up ey acd ال wrt yy
برنامه به یک «ویرایش گر متن» و یک ی
داریم.
۱
نمونههاى جالبى از محيط مجتمع توليد براى زبان ن)ج+
به شمار میروند.
صفحه 17:
A 2 كارن اك
۶ ( 46 نسیتیه حروف(حساسبه حالله لستیعنی() و و
را سر
مثال : اولین برنامه
۱
ميدهد:
1ل ل 02
يي ل لا لام
O هم
{
صفحه 18:
اولین خط از کد بالا یک «راهنمای پیشپردازنده»
ret more] ل 5
۱- کاراکتر # که نشان میدهد این خط. یک راهنمای
يب شيردازنده است. اين كاراكتر بايد در ابتداى همة
خطوط راهنمای پیش پردازنده باشد.
0
< نام یک فایل کتابخانهای» که مبان دو علامت < >
یرل راز
صفحه 19:
خط دوم برنامه نیز باید در همه برنامههاي 0++
وجود داشته باشد.
این خط به کامپایار ميگوید که «بدنه اصلی برنامه» از گجا شروع
ميشود. اين خط داراي اجزاي زیر است:
- عبارت ز که یک نوع عددي در (6++ است.
© - عبارت وو كه به آن «تابع اصلي» در 0++ ميكويند.
© - دو يرانتز () كه نشان ميدهد عبارت «-- يك «تابع» است.
صفحه 20:
دستورات برنامه از خط سوم شروع شده است.
دستور خط سوم با علامت سميكولن : يايان يافته است.
صفحه 21:
توضيع
<توضیم. متتی است که به منظور راهنمایی و
درك بهتر به برنامه اضافه مى شود و تاثيرى
در اهرای بزنامة نذارد. ٠ كامتاتتر توضيمات
برنامه را قبل از اجرا حذف مىكند.
" استفاده از توضيم سبب مىشود كه ساير
افراد كد برنامة شّما را راحتتر درك كنند.
صفحه 22:
تلا رت رب( و
jl sled Lb - 1? 99 كر
متنی که بعد از دو علامت اسلش بیلیدتا پایان
با
< -با استفاده از حللت 2): هر متنی که با
۰(
یابد یک توضیح تلقی میشود.
صفحه 23:
۵- عملکر خیوجی
علامت << عملكر خروجى در 0+ نام دارد (به تن عملكر
درج نیز میگویند).
۱
ey] ۳
۳
|
؛ 66 >> ۱
مقدار عع را به خروجى الج مىفرستد كه الجن معمولا به
صفحهنمايش اشاره دارد. در نتيجه مقدار *؟ روى صفحه نمايش
درج مى شود.
صفحه 24:
ع -ليترالها و كاراكتيها
يك « »> رشتداى از حروف. ارقام يا علايم جايى استحد كه
ميان دو علامت نقل قول " "' محصور شده باشد.
یک« » یک هرف. رقم یا علامت قابل چاپ است که
ميان دونشانة '' محصور شده باشد. يس 'سرذ و '!' و '٠' هر
رل تاراكتر است
به تفاوت سه موجوديت «عدد» و «كاراكتر» و «ليترال
رشتهاى» دقت كنيد: ») يك عدد اسح '' يك كاراكتر اسحءدو
"؟" يك ليترال رشتداى است.
صفحه 25:
4 تعريف آنها:
«متغير» مكانى در حمافظه است كه ههار مشخصه دارد:
.20202020600606 .وقتى متغيرى را تعريف
مىكنيم. ابتدا با توجه به نوع متغير. ادرسى از حافظه
در نظر كرفته مىشود. سيس به آن آدرس يك نام
تعلق میگیرد.
صفحه 26:
در 0++ قبل از اين كه بتوانيم از متغيرى استفاده كنيم,
بايد آن را اعلان نماییم.
۱ رت ae eee)
ل IN ee Deed ۱2
متفیر به کامپایلر اطلاع میدهد که این متفیر چه
مقاديرى مى تواند داشته باشد و جه اعمالى مىتوان
روى آن 5 ea
@)) ))S
صفحه 27:
se— 1 مر در
عبارت وحم نام متغیر را نشان میدهد. این نام مداکثر
مىتواند الا كاراكتر باشد. نبايد با عدد شروع شود. علايم
رياضى نداشته باشد و همهنين «كلمة كليدى» نيز نباشد.
مقداردهى اوليه
عبارت عددادةه: عبارت «مقداردهى اوليه» نام دارد. با استفاده
از این عبارت میتوان مقدار اولیهای در متغير مورد نظر قرار
داد.
دستور زير تعريف يك متغير صحيح را نشان مىدهد:
SOs < ۰ 1۱
صفحه 28:
- مقدار دهی اولبه ده منغیر ها
در بسیاری از موارد بهتر است متغیرها را در همان محلی که اعلان
میشوند مقداردهی کنیم. استفاده از متغیرهای مقداردهی نشده
ممکن است باعث ایجاد دردسرهایی شود.
دردسر متغیرهای مقداردهی نشده وقتی بزرگتر میشود که سعی کنیم
متغير مقداردهى نشده را در يك محاسبه به كار ببريم. مثلا اكر »را كه
مقداردهى نشده در عبارت © + ,د > عرز به كار ببريم. حاصل برغير
قابل ييشيبينى خواهد بود. براى اجتناب از جنين مشكلاتى عاقلانه است
که متغیرها را هميشه هنگام تعريف. مقداردهى كنيم.
ay
به حرم
tat p=O;
صفحه 29:
اور
01 ا ا كت se NESE WATE
1 STALE ا ا ا
مىماند. مثلا در يك برنامهً محاسبات رياضى. متغيرى به نام 2“ تعريف
1 ل ا ا WC Grey
ا ل ا ا لت ا ل |
يك يك نوع متغيراست كه فقط يك بار مقداردهى مىشود
و سيس تغيير دادن مقدار آن در ادامة برنامه ممكن نيست.
تعريف ثابتها مانند تعريف متغيرهاست با اين تفاوت كه كلمه
TSO) ال ا ل 0
صفحه 30:
صفحه 31:
Bend لك
براي این که بتوانیم هنگام اجراي برنامه مقاديري را وارد کنیم از
ل 0
ا 3 CaN) DU
باطو دور << واو
ce cd يكستغير لست
صفحه 32:
مثال ١ - ٠١ استفاده از عملكّر ورودى
ا 7 22000
ere نمايش مى دهد:
MO Mace ا pera aCe
مت
Pet ak (one ی
رج << واو
لعج >> بو ک> ۲ نها ل >> لور
۲۰ 0:
صفحه 33:
ا ا ا م ا
رفتار مىكند. يعنى همان طور که [ees Deere
0
به صورت يشت سر هم جاب كنيم: در عملكر ورودى نيز
میتوانیم با استفاده از چند عملگر 0
lard od et el tera سل
دستور:
2 << رر << عر << وهم
سه مقدار »و برو > به ترتيب از ورودى دريافت مى شوند. براى
Be Cea. eles Sea
صفحه 34:
مثال ۱۱ - ۱ چند ورودی روی یک خط
برنامة زير مانند مثال ٠ - ٠١ است با اين تفاوت كه سه عدد را
از ورودى كرفته و همان اعداد را دوباره در خروجى نمايش
مى دهد:
)وه بر
Re Mc oN cera marca CH 00000 1
عجارو ادا
We تحصاویی Pa Re
:ج << سر << وي << وم
الل ا 0
to
alee ere ا
1
صفحه 35:
پایان جلسه اول
صفحه 36:
جلسه دوم
«انواع اصلى»
صفحه 37:
:آنچه در این جلسه می خوانید
- انواع دادة عددی
۲- بشتییر کرد صییم
' - محاسبات اعداد صحيح
TESS etn 0[
۰ - عملگرهای مقدار گذاری مر کب
انواع ممبز شتاور (
صفحه 38:
7 a ae
Dy سییز lla gels Joh
برلين أصصط 2‘
77 نوع کاراکتری -
سر مر 2
2 [0| [01101 1ك
2)
صفحه 39:
Cs) See ee ار
ا -سرریزی عددی
۱۵-خطای گرد کردن
EI Sey) 7
صفحه 40:
هدف
هدفهای ea
امعدرفىر زواع يتخب جايرنجر ۳
| ضشكشحيح در ( )++ رانام ببريدو
Seared رات rer رادر برنامهها به كار ببريد.
- انواع عددی ممیز شناور در ()++را نام ببرید و
متغيرهايى از اين نوع ها را در برنامهها به كار ببريد.
- نوع بولین را تعریف کرده و متفیرهایی از این
نوع رادر برنامهها به كار ببريد.
<<<
صفحه 41:
م اك
i رد 0
«تبدیل نوع» و «گسترش نوع؛ را شناخته
و انواع مختلف را به یکدیگر تبدیل نمایید.
[0 CTE CaTS Sperone roe ee
00 ل es Soe EE ay)
عملكرهاى حسابى و افزايشى و كاهشى و -
ENS ras seri) رع ى
2 (
صفحه 42:
7 3 مقدمه
ما در زندگی روزمره از دادههای مختلفی استفاده
مىكنيم: اعداد . تصاويرء نوشتهها يا حروف الفباء
صداهاء بوها و ... . بايردازش اين دادهدها
مى توانيم تصميماتى اتخاذ كنيم, عكس العم لهايى
نشان دهيم و مسالهاى را حل كنيم. رايانهدها نيز
قراراست همين كر راانجام دهند. يعنى
دادههایی را بگیرند. آنها رابه شکلی که ما تعیین
میکنیم پردازش کنند و در نتیجه اطلاعات مورد
نیازمان را استخراج کنند. .. .
صفحه 43:
۱-انواع داده عددی
در ()++ دو نوع اصلى داده وجود ۱
صحیح» و «نوع 9 لاه دیگر
از روى اين دو ساخته مىشوند (به شكل زير
دقت كنيد).
صفحه 44:
نوع صحبح
2 براى نكهدارى اعداد
صحيح (اعداد ٠ و ١ و " و...) استفاده
ey te) ل Ce RC
به کار میروند و دامنه محدودی دارند.
صفحه 45:
صفحه 46:
نوع مميد شناور بای نگهداری اعداد اعشاری اسستفاده میشود.
اعداد اعشاری بیشتم برای اندازه گیمی دقیق به کار میروند و
Als بر رگ تری دارند. یک عدد اعشاری مل ۳6۲/۱۸۷ را
میتوان به شک[ ۷۳۵۲/۱۸*۷۰ ۸۷۳۲/۱۱۰۲ با"
" بهاین ترتیب باکم و زیاد کردن
اعداد اعشارى «اعداد مميز شناور» مى
صفحه 47:
| ne eee
Poet ee Canny] BY oe ey Se pee rant fae اا
0 Rene ele ah ee
محدودةٌ م قادیریلس نک ه هر کلم مرتولنند
دلشته باشند
۱ rupee pe)
سس eens BIS ere RCL RP a)
Tear Soe Sere ee aN A
كا دو بايت از حافظه را اشغال كند در حالى كه روى
0000 eee eee Bee
520011006
صفحه 48:
صفحه 49:
)++ مانند اغلب (بانهاى
برنامهنتويسى براى محاسبات از
عملترسان جمع (+) : تفريق (-):
(x) Ops . تقسیم (/) ر پاقیمانده
استفاده میکند.
صفحه 50:
۴ - عملکرهای افزایشی و کاهشی
برلیدستکاریمقدار متفیرهایصحیح دو عملگر
جالیگر دارد:
عملکر نب ۰
مقدار يك متغير را يك واحد افزايش مىدهد.
اک
اماهر كدام ازاين عملكرها دو أن
صفحه 51:
در شکل رس رترر» عملگر قبل از نام متفی می آید
ل ا اك د و سور ری ار
بعد از نام متعس مى آيد مثل =k Fry ۰
در شکل بترنرر ابتدا متغیر متناسبا عملگر»
بافزایش يا کاهش مییابد و پس ا زآن مقدار متفیر
.برای محاسبات دیگر استفاده میشود
در شكل م مقدار متغير در محاسبات به
BI adh هم ا ل ا اه A wl
صفحه 52:
ف - عملكرهاى مقدا ركذارى مركب
+4+O عملكرهائديكرىئدارد كه مقداركذارئىدر
ا GJ
عملكر +- میتولنیمهشنولحدبه « لضافه
t= 9 0 eee eee rend ووز
SLC) py eores) اا ل 5
اين تفاوت كه كوتاهتر است. به عملكر +- «عملكر
مرکب» میگویند زیرا ترکیبی از عملگرهای + و -
06
صفحه 53:
۱ CC mn Ce ry lr Bua lwy
قبلا از عملكر - براى مقدارتذارى در متغيرها
استفاده كرديم. ب+ عملگرهای دیگری دارد که
مقداركذارى در متغيرها را تسهيل مئنمايند.
عملكر مركب در +O
۵ 2 ۵ 7 8 ار
صفحه 54:
لت
ا كك 6 ا 0
5
w -= 09 => Ni 9
w*=0; — w=w" 9;
w /=0; رب < |
w %= 6 29520 0:
صفحه 55:
درن).. سه نوع ممیز شناور وجود دارد:
. انواع ممیز شناور
eS 1
—_
نوع جاط حك از هشت بایست بررای
نگهداری عدد استفاده 4
معمولا نوع ]از چهار بایست برای
logs _J ل ل کند. 0 ا
صفحه 56:
۷- تعریف متغیر ممیز شناور
تفاوت نوع بانوع ۱
Fe از حافظه استفاده
1 مى كند. يس نوع 00 دقتى بسيار بيشت از ۱
3 دارد. به همین دلیل محاسبات double
وفتک درا سا ات
mac io
double x,v=O;
صفحه 57:
اعداد مميز شناور به دو صورت > م
نشان داده میشوند: به شکل.«ساده» و به شکل
«علمی».
سادم 5 علمى 8
مك 1( 9097
مشخص است که i
دادن اعداد خيلى کوک و همينين اعداد
خیلی بزرگ. کارآیی بیشتری دارد.
3
صفحه 58:
٩ - نوع بولین اسسا
ل ل م0 ما ات هط
را clea oe
معنى نادرست است.
اما اين مقادير در اصل به صورت ١ و - درون
رايانه دخبره میشوند: ۱ برای 9۲۲ , براى
سح(
صفحه 59:
۰- نوع کاراکتری جات
یک کاراکتر یک حرف. رقم يا نشانه است که یک
شمارةٌ منحصر به فرد دارد. به عبارت عامیانه, هر
کلیدی که روی صفحه کلید خود میبینید یک
کاراکتر را نشان میدهد.
سد مسر بت از مرف 0( ‘a 1 9 VG تا ای و هر
یک از اعداد "۰ تا سنك eG
روی صفحه کلید را یک کاراکتر 236“
صفحه 60:
برای تعریف متغیری از نوع کاراکتر از کلمه
مرا رب ور 1
درون دو علامت آيستروف () محصور شده
باشد. پس () یک کاراکتر است؛ همچنین ۸"
یک کاراکتر است اما ۸ جک کارا کتر دست نلک
سس تحص لت
متال:
thar ع >:
صفحه 61:
الا
کاربر مشخکص میشود. نو تعریف یک نوع
شمارشی به شکل زیر است:
که مر طلمهای علیدی است. مر ررمم نام نوع
جديداست كه كارير مشخص مىكندو
ام مرن مب رم 0
نوع جدید میتواند داشته باشد.
صفحه 62:
به عنوان مثال به تعريف زير دقت كنيد:
ran Og{SOT CGOO,O000, TOC OCO,T1Y, CRT
حالا مر یک نوع جدید است و متغیرهاد > و
DES OST ee arab aa es)
کی مس رس رحس اس مت
جَدَيَدَ بسازيم. در كد بالا متعيرهاى ).و
گر .از نوع ر را تعریف شدهاند. آنگاه ار
2۳۵۱, بامقدار 6/۷ و 2ر - با مقدار
مقداردهی شده است.
صفحه 63:
همچنین دو با چند شمارشگر در یک
فهرست میتوانند مقادیر یکسانی داشته
در یدحا
(01-0 01,0 ور مت
منوالی بعدی را خواهند رکرفت:
Buus
١ CD: fGOD=d, GOV VOU, POE CEO, MLO, Paty
صفحه 64:
تحوه انتخاب نام شمارشگرها آزاد است اما بیشک
00 0 نامههایشان استفا مد
۲ ۰ ۱ ار
js 59 > رن
إن - اولين حرف از نام
ٍ نوع شمارشی را با حرف
1
ae 0
ما 0-5-7
نشانههای ریاضی نیز هبش
صفحه 65:
شمارشگرهای ۰ نبایسد در محدودههای
مشترک استفاده شوند. برای مثال تعر یفهای زیر
را در نظر بگیرید:
ean (۱
pun Croup, B,C}
PEN SD) be er ee keen)
هر دو تعر یف 7 و 7) آمده است.
صفحه 66:
بلح بر برای تولید رد جرد مت به کار
میروند. بعنی کدی که به راحتی درک شود و نیاز
به توضبحات اضافی نداشته باشد.
te) ا و ۰( زار
نام و نوع کاربرد و محدوده مقادیرشان درک
شود:
rn Cob {REO, CREED CLOE CLOCK OROVGE}
Preve(SCCODD MOONE AOOR} میج
ex Dete(WPY DOOD, VCOR}
penser Loerprce{O OGLPW IPOM,PERL}
ran Crader (MOLE, PEOOLE}
صفحه 67:
۳۲ - تبدیل نوع» گسترش نوع
در محاسباتی که چند نوع متغیر وجود دارد.
جواب همیشه به شکل متفیری است که دقت
بالاترى دارد. يعنى اكر يك عدد صحيح رابا
عرد مر تست و ياسخ به
0
براى اين كه مقدار يك متغير از نوع مميز
شناور را به نوع صحیح تبدیل کنیم از عبارت
) استفاده میکنیم به این عمل 2
گفته می شود
صفحه 68:
مثال گسترش نوع
برنامة زير يك عدد صحيح را با يك عدد مميز شناور جمع مىكند:
DO)
ao tot vdlue wi a double ude: ۱۱
ktu= CC;
double p = 9.0P6;
و ردير
ا ek a ee nn
retura O;
صفحه 69:
ل ۳
«فطای زمان کامپایل»
Oec ioe] 0
توسط a9 Sg AAs Ute راحتی میتوان
آنها 7 رفع نمود.
«فطای زمان اجرا»
کشف اینگونه خطاها به راحتی ممکن نبست و
کامپایلر المت به آن نمىداند. . برخىاز
خطاهای زمان اجرا سبب میشوند که برنامه به طور
eee ey ae Tomas
صفحه 70:
-١5 سرريزى عددى
يك متغير هر قدر هم كه كنجايش داشته
mere PR Om STS Reo ges) Creer
آآن متفیر بیشتر باشد. اگر سعی کنیم در یک
متغير مقدارى قرار دهيم كه از كنجايش ۱0۹
aan) ا ل ل BEL
ا ا ی
داده است.
صفحه 71:
مثال ٠ - ١1 سرريزى عدد صحيح
اير sbi Sa rob as aol ا ا ا 2 |
ا ope 0
طن كا كر تك ريه يى
۳ ۳ منفی «گردانیده» مى شود
اما وقتی Lone عدد ممیز شناور
ney oboe
بىنهايت را به دست مىدهد.
3
۳
صفحه 72:
4 - خطاى كرد كردن
خطاى كرد كردن نوع ديكرى از خطا ت كه
كت ال ل ل لا لاا
7# از متغیر ممیز شناور براي مقایسه
برابري استفاده نكنيد» زيرا در متغيرهاي مميز
شناور خطاي گرد کردن سبب ميشود که پاسخ
al سس
محاسبه را به جاى جنين اعدادى منظور مى كند.
صفحه 73:
هوزةُ متغيرها - 08
اصطلاح ۱5۳ در ()++ واه مناسبى
است که میتوان به وسیلةً آتن حوزة متغیر
را مشخص نمود. یک بلوک برنامه. قسمتی
از برنامه است که درون یک جفت علامت
کروشه }{ محدود شده است.
2 حا كد ده
2
صفحه 74:
oe Ree a ere rea Sie
میشود و تا پایان همان بلوک ادامه میپابد.
خارج از لآن يلوك نمى توان به متغير دسترسى
داشت. همجنين قبل ازاين كه متغير اعلان
ل |
مى توانيم در يى برنامه. جند متغير متفاوت يا
صفحه 75:
پایان جلسه دوم
صفحه 76:
جلسه سوم
«انتجاب»
صفحه 77:
:آنچه در این جلسه می خوانید
دستور 1
7 درمز حواو. .1۳
۰ - عملکرهای مقایسهای
-بلوکهای دستورالعمل
-شرطهای مر کب
- ارزیابی مبانبری >»
صفحه 78:
- عبارات منطقى
٠ - دستورهاى انتخاب تودرتو
eek, 6 رس
noe ee لد
ae عبارت شرطی
- كلمات كليدى
صفحه 79:
هوفیای رفتاری:
0 مى رود ae يايان 0 جلسه بتوانید:
لجف لوسر جرس ا
0 0 ی پیچیده استفاده کنید.
oe لا ا ا ل 0 ل 2
ewes)
- بلوک دستورالعمل را تعریف کنید.
pee PN De Peay eee ee IT ewe IGE BCS ete
شرطی به کار ببرید.
-از شرطهاى مركب استفاده كرده و ارزيابى ميانبرى را شرح دهيد.
- «كلمة كليدى» را تعريف كنيد. >>>
صفحه 80:
مقد مه
1 در oes
شکل ترتیبی اجرا میشوند. یعنی دستورات برنامه به
تريب از بالا به پایین و هر کدام دقیقا یک نار اجرا
Dee By eS ا ا ge] BER ey Pe)
Pepesere te ommnreed Wan =| 8 Pes pce
پیشتر برنامه استفاده کنیم. همچنین در این جلسه
انواع صحيح كه در (0)++ وجود دارد بيشتر يررسى
مى كردد.
صفحه 81:
سر را
شود. نحو ان به كونة زير است:
هر رهز 2-00
oes Crzercdlirer تا رد ار
صحیح است (عبارتی که با یک مقدار صحیح براورد
le eke 9 (52.55 ددر قرواك تابال اسر
با ۳۱ س لد لد و 3
رم ری مقدار غیر صفر داشته باشد. دفت کنید که
شرط باید درون پرانتز فرار داده شود.
صفحه 82:
و
ا Reb مى شود بسته به اين كه
Ben) ال ل ال ا 37
فرعى اجرا كردد. نحو اين دستور به شكل زير
است:
Be (erchiizc) سود
هماننرطمساه
صحيح موباشد و و ۳۳۳
pore pea reyes eer geal ee
صفرباشد ... . لجرا خولهدشد
صفحه 83:
مثال یک آزمون قابلیت تقسیم
1 7700
1 را
Tce ECA ceca ea ez
171 << ۷ << ٩
Ce (Si) J رت Sa
Fe EN 2 2 رس 2 ور رن
/
صفحه 84:
۴- عملگوهای مقایسهای
در ل)++ شش عملگر مقایسهای وجود دارد: و
Ca eas =! == 5 = 5 ==5 >
شش عملگر به شکل زیر به کار میروند:
« کوچکتر از رلستاا ... .
«<بزردگتر از بالستا 1
كوجكتر بامساوى ءا لسمنا| 0
بز ركشر يامساوىء | لست// 5
> مساوويا بالستتا| 0
مساووئيسا درنيسيتا] 00
صفحه 85:
اینها میتوانند براى مقايسة مقدار عبارات با
هر نوع ترتیبی استفاده شوند. عبارت حاصل به
عنوان يى شرط تفسير مىشود. مقدار اين
pened Now) ges pe) ا 0
ge 2) ا 00
عارك . . . . . براير با صفر ارزیابی
مىشود.ء به اين معنى كه اين شرط نادرست
است.
صفحه 86:
| ne eee
Poet ee Canny] BY oe ey Se pee rant fae اا
0 Rene ele ah ee
محدودةٌ م قادیریلس نک ه هر کلم مرتولنند
دلشته باشند
۱ rupee pe)
سس eens BIS ere RCL RP a)
Tear Soe Sere ee aN A
كا دو بايت از حافظه را اشغال كند در حالى كه روى
0000 eee eee Bee
520011006
صفحه 87:
دقت كنيد كه در ++!)عملكر با
eee ا
يك مساوى تكى " -" است ولى عملكر
ee CSB ا ل
مثلا دستور DO = «۶ مقدار ۳۳را در JS x
x == 99 oy ees) iad بررسى مى كند
که آیا مقدار «با ۲۳ برابر است یا خیر. درک این
تفاوت اهمیت زیادی دارد.
صفحه 88:
۴- بل کهای دستورالعمل
يك بلوك دستورالعمل زنجيرةاى از
دستورالعملهاست كه درون براكت ١ محصور
شدهء مانند 0
} عدك ۳ ۱۳۷۸
map
1 = tewp
صفحه 89:
روئند یک بلوک دستورالعمل درون یک
A aa
WEES Ay es eee
لله Tali pay S
لا و = x
my
v = twp,
1 ۱/۸7
لح >> رر >> ۲ > ۲ >> در ک> الوم
1
صفحه 90:
int woia()
و
pout << "Gc =" <<a << puch}
fata {
A CCN an EN Ca a
Nien
pe a ee ee }
{ mnie wel” Bee 2> salt ۲
ki
PN Rn ee ee ۲
کب ها bea
صفحه 91:
SEC ae een)
شرطهايى ۱۵4 2 مىتوانند به صورت يك
شرط مرکب با هم ترکیب شوند. این کار با استفاده
۱ و)©-( ٠ ىقطنم ازعملكرهاى
۰
Ee
درستلستاگر و تنهالگرهم. و هم .هردو درستهاشند
نادرستلستگر و تنهالگرهم و هم هر دو نادرستتباشند .
درست است اگر و تنها اگر نادرست باشد
۱ ey Hl Ene BOT I
bp jl SoS x 9 po ply wd اكر
صفحه 92:
۱ eee Spe Pear
استفاده از جداول درستی به گونةً زير بیان میشوند:
!ا م Ply هو م 886۲ ٩ م
۶ ۳۱ ۱ ۰۲ ۱۳۳۱" ۴ كنرك
فا 4 جک اد 4
) ۲۱ 4) oe Aj
FE لا
۳ oaunae cue aay
درست است.
صفحه 93:
ارزیابی میانبری
صفحه 94:
۷- عبارات منطقی
یک عبارت منطقی شرطی است که یا درست است
per sree Fay Park ROE
or ee Red tt E ah SOLE oa eae
معناى نادرست و هر مقدار غير صفر به معناى
درست است. به عبارات منطقى «عبارات بولى» هم
مى كو يند.
صفحه 95:
چون همه مقادیر صحیح ناصفر به معنای
درست تفسیر میشوند. عبارات منطقی اغلب
۱
P (a) vou << "ats wt zero";
Loe wt gerp | et ۳
چاپ میکند زیرا عبارت منطقی وقتی
Ferre ROWER Wu) prea rirtowe |e We Oras Be
Sey)
صفحه 96:
کد زیر را نگاه کنید:
oP d طلی هس cout << "ats (۰9۵4) ۷ ز
دستور خروجی فقط وقتی که اصفر
است اجرا مى كردد و 20 وقتى ناصفر
Cel ل ال 0
ممكن است فراموش كنيم كه عبارات منطقى
مقادير صحيح دارند و اين فراموشى باعث
ایجاد نتایج غیر منتظره و نامتعارف شود.
صفحه 97:
یک خطای منطقی دیگر. اين برنامه خطادار است:
( )كدض ict
1 11 ال ا
ae SR ا ا cae cece
0 ا ا ا ل
OS ei ete) As Sen UH
/
منشأ خطا در برنامة بالا اين اصل است كه عبارات
منطقى مقدارهاى عددى دارند.
صفحه 98:
هستورهایانتخابقوهیتو 0
دستورهاى انتخاب مى توانند مانند
دستورالعملهاى مركب به كار روند. به اين
Pa ee ons Dyce ار
۱ eae peer) ese) BT Conn NUL BD)
foo ok at aoe ated ae oe
صفحه 99:
مثال ۲-۱۲ دستورهای انتجاب تودرتو
ال 0
1
كار مىرودء كاميايلر از قانون زير جهت
تجزيه اين دستورالعمل مركب استفاده
میکند:
د هر جحاح با آخرين جفت مى شود.»
۳ ا ات a
صفحه 100:
-٩ ساختار 8 ححاد
دستور يي تودرتو اغلب برای بررسی
مجموعهای از حالتهای متتاوب باموازی بسه
کار میرود. در این حالات فقط عبارت ebe
الل ل ال 0
کدها را معمولا با ساختار م , _ میسازند.
صفحه 101:
1 SES eT iets aot ee NE]
برنامة زير يى نمرة امتحان را به ذرجة حرفى مقادل تبذيل مى كند:
م
1 بوصو اه
ل ات ما eed a
ا ا ل ل الا تب
ما مر
را ot nC uc
۱ ۱ ence ae on OMe ef
۶۳ رات مت at رم 2 ۱۱
Pe ceed) eet tact ar ane eel ear Fi
۱۳ دح در مر ay
صفحه 102:
)= دستور العمل زرد
دسنور ,__ مینواند به جای ساحار « مر برای
بررسى مجموعهداى از حالتهاى متناوب و موازى
به كار رود. تحو دستور ,. , به er) ا رت
صفحه 103:
این دستور ابتدا جوم را برآورد مى كند
وس میات گاتها. سم 4 .۰۱۱ م۰۱ Ol
یعنی میتوانیم در دستور . آنراقید .
نکنیم. .... باید به شکل یک نوع
صحيح ارزيابى شود و ١ 2 ۱
i ۱
Poise
Ce
صفحه 104:
لازد الست در اتناق هر دص« Creda
قرار بگیرد. بدون این دستور, اجرای برنامه
دستور عاد ie نمى شودء .2
هاى زيرين راهم خط به خط میپیماید
و دستورات مقابل آنهارا اجرا میکند. به
eT ee
oil eyes کر زر رز سر
صفحه 105:
زیر استفاده مى كند:
صفحه 106:
مثلا در دستور انتساب زیر:
Qxiv } ركم ) = wia
اكر .>:: باشد مقدار :: را درون JS sritt
میدهد و اگر ,--: نباشد مقدار .را درون
als <i مىدهد. يعنى به همین سادكى و
اختصار مقدار کمینة ::و :درون متغير
SESS قرار میگیرد.
صفحه 107:
0 PE Dg
©) el eal ol eS ne ills oy
Te) te و eee
:برنامهنويسى كلمهاى است كداز قبل»
Peres PEE TOD ار
j ,منظور شده است.
لردت 2p map خا ل
صفحه 108:
لها
delete
صفحه 109:
wt_ey
۲7۷
(9
۱:
۱۱۱۱۱۱
۲۲۱۲۱۳۲۲۳۲۳۲۱ ۲۲۷
static ost
fexvphate
DPROE
صفحه 110:
+115 1
صفحه 111:
دو نوع كلمة کلیدی وجود دارد:
0rd gj) GladS5 —\
۲-شناسههای استاندارد.
ار ار
خاص از آن زبان را نشان مىدهد. كلمة كليدى “او
و ACC RO
يك شناسة استاندارد كلمهاى است كه يك نوع دادة
استاندارد از زبان را مشخص مى كند. كلمات كليدى
rie ا 0
صفحه 112:
پایان جلسه سوم
صفحه 113:
جلسه جهارم
«تکرار»
صفحه 114:
: آنچه در این جلسه می خوانید
Way Py need) =)
- خانمه دادن به بک حلقه
رم
)= مزر For
)= دستور 5
7 در ام
ee يد
ا 2
صفحه 115:
مدذوهاىر رفتارى:
jl (Cotes td 0112 مطالعة 56 9 بتوانید:
-شخاخستینانواع! فناخاخهاز های اقکیوار چتنهتوآکها 9
toy artes aye re واگ ر| شناخته و تفاوت آن با دستور
while را بيان كنيد.
م ا ا ل 00
كوناكون بسازيد.
- حلقههاى فوق را به يكديكر تبديل كنيد.
- علت استفاده از «دستورات يرش» را ذكر كرده و تفاوت
Laas ea ل ل ل
- اهميت اعداد تصادفى را بيان كرده و نحوةٌ توليد «اعداد
شبه تصادفى» را بدانید.
صفحه 116:
و
عاجراى يى دريى يك دستور يا بلوكىاز
ie cen ot en an nye pcan ا
تكرار مى توانيم كنترل برنامه را مجبور كنيم تابه
خطوط قبلی بر گردد و آنها را دوباره اجرا نماید.
ee are ا ا ل
تسس( gw
0 eaters le Le Serre Sera
06
سح
صفحه 117:
١ - دستور عازار
نحو دستور :۱ 000
while (costiio) stotecect;
بهجای 0١ .یک شرط قرار میگیرد و به جای
20300 دستورى كه بايد تكرار شود قرار مى كيرد.
ee re Sey ber ey 7
ee BSCE ۱
Bee BCT CR ESCO Ie Seana 052
Oe) . اجرا شده و دوباره مقدار شرط بررسی
میشود. این تکرار آنن قدر ادامه میيابد تا اين که مقدار
شرط صفر شود.
صفحه 118:
مثال ۲-۱ محاسبه حاصل جمع اعداد صحبح متوالی با حلقه ارب
اين برنامه مقدار | - 7 بر + رابرای عدد ورودی » محاسبه میکند:
buses)
۱-۲ ۱ ۲
len cree ا زا
۱
ار
زد چا سر
pre} ديل Busy
ا ۱ ۱ ۰ ا 7 A ا
بو >>
صفحه 119:
اس اند دادن پد یت سل
001 ee eye at OM BCE)
یت at aad Cae ia دستورالعمل
1
۱
١ a) breck;
بلججر دم ويج
i
ا AOA oA ao IS I الل تا
i
صفحه 120:
: مثال ۴-۴ اعداد فببوناچی
ا اا ااا ا ااا لي لكات ا
معادلههاى زير تعر يف مى شوند:
ا ا ال اا ۰ الى ا
مثلا براى 11-2 داريم:
F,=F,,+F,,=F,+F,=0+1=1
يا براى 11-3 داريم:
F,=F,,+F,,=F,+F,=1+1=2
رت
F,=F,,+F,,=F,+F,=2+1=3
صفحه 121:
۱
دريافت مىشود. محاسبه و جاب مى كند:
int main()
{ long bound;
cout << "Enter a positive integer: ";
cin >> bound;
cout << “Fibonacci numbers < " << bound << “:\n0, 1";
long f0=0, f1=1;
while (true)
{ long f2 = f0 + fl;
if (f2 > bound) break;
ل زر تحت تا
9 2
11552:
ی که(
صفحه 122:
مثال ۴-۵ استفاده از تابع (6610)0
0 یت 1
1 dh
int wain()
) تلحر رجا
۱
رم
۱ SS OD
بحطا "0-00, 20-0
whi (re)
{ bo PO = PO + FG;
P (PO > boverd) ext();
pout <<", "<<PO;
۹
aC here
صفحه 123:
Bre eerie e ب yer
با فشردن کلیدهای ()*۲۱() سیستم عامل یک
Rae are Cee SiPr eee rer Age
نگه داشته و کلید () روی صفحه کلید خود را فشار
دهيد تا برنامة فعلی خاتمه پیدا کند.
صفحه 124:
ور سا
۱
صورت زير است:
ce
ad اين دستور ابتدا 25-7264 را اجرا م ى كند و
شرط درست بود حلقه دوباره تكرار مى شود
00 وگرنه حلقه پایان
۷
7
صفحه 125:
دستور عاكإنب..جك مانند دستور داألكانهااست.
0 این
ع ل CR ا ل ل
ا ل توجه به مقدار
Bes ا Soe eed) eee
م_ اما حلقةّ عانطار میتواند اصلا اجرا نشود.
زگ ون
آن تنظیم دردد.
صفحه 126:
Co) ]0 اه
erg 1
مر
۱
ee Sk (oh eile ere Vidi oat ee
كنك
مس
2
00
:( 0
Se لاي هت
صفحه 127:
مثال ۴-۸ اعداد فاکتوریال
eC ا Fer TH Peo
زیر تعریف میشوند:
(ممه اه , ۵۱-4
ل ل ل ا 0
a! = 4011 1 - 400( = 4
۱
60-۰ 600 - 664 - 6۱
|
6 را
صفحه 128:
1 py inne ا F ey
میکند:
لیس
تس اسر
FE NAC oan a
0
۱
0 ,۳24 بجساز
ت
joo > ۲ جک
برع
1
زا سرا
صفحه 129:
عبارت !برای پیشبردن متفیر کنترل
حلقه به کار میرود. این عبارت پس از اجرای
2۱0۳۳۷۱ ارزیابی میگردد.
—
درست باشد دستور 207720 اجرا میشود.
صفحه 130:
بنابراین زنجيرة وقایعی که تکرار را ایجاد میکنند
عبارتند از:
Keay) an OD a سينا
۳ - بررسى ار و از ار Pao)
حلقه خاتمه مي,یابد.
صفحه 131:
|۷9 on heen Mule)
Sy EM ed Be ope cre ee Cpe eeT|
fat wata()
لديا
ا ا
كك
اي (OH
ار سنت ونا tS ne ee ao
ل ات ۳ | ora مىشود (مانند ادر مثال بالا) حوزة
مى كر دد. يعنى آنتكحتكك ر"نتلح واف بيرق 55 طلغ رح متا
نتيجة ديكر اين است كه مىتوان از نام مشابهى در خارج از حلقة ع0
yee ا pe)
7
صفحه 132:
eS ae Hermon es hav cry
برنامة زير ده عدد صحيح مثبت را به ترتيب نزولى جاب مى كند:
)كدض اما (
{ Por (‘ct HD; i > O; i--)
pout << ""<<i
صفحه 133:
مثال ۴-۱۵ بیشتر از یک متغیر ؟
با رل نس سنا
brat eae COS ac tieg
3 209, سرت سس نت
۱ parca >> oo Se ae
0
26
صفحه 134:
۳ hae ats Cen edb ary) Fy
Teel Lee Sees oie
|
1 oa NS aS Pad AN
{ Por (tot لك
Por (it v=0; p <= 00; p++)
pout << sein (PF) << xy;
ابر >> ane
i
i
صفحه 135:
x
aa ay en dee)
i وقتى دستور 5-ج7ادرون
فا
روی حلقهای که مستقیما درون آن
قرار كرفته تاثير مىكذارد.
حلقههاى بيرونى بدون هيج تغييرى
دهد.
صفحه 136:
۶- دستور ماه
ا Jos
ل : ١
io
if دید ستورهای درون
ed / a 9
: » ؛ 4(
wer) 4olol pi are
۰ | > را خاتمه
Fe ee
ال كناك a
صفحه 137:
مثال ۴-۱۹ استفاده از دستورهای و صجهمرس
۱
زج << وو
Ln (cael) aa
صفحه 138:
-Y دستور صاص-
۱9 enw ne ete Roy ae)
است. مقسد اين يرش تورسط يت ب رعسب
py ct
شناسهای است که جلوی آن علامت
eels 7
سس
بیک مزیت دستور ۳ این است که با استفاده
از آ-ن میتوان از همه حلقههای تودرتو خارج
شد و به مکان دلخواهی در برنامه پرش نمود.
صفحه 139:
مثال ۲۰ ۴ استفاده از دستور صحب برای خارج شدن از حلقههای نودر تو
بر
۱9 {
ie) ار تام
ا مس ۱
(sil ine (Denes (Du rau} مر ۷۲
eee ca cece للكت نض
ا 0
vont <<"
i
ال ا ا
ا
}
صفحه 140:
۸- تولید اعداد شبه تصادفی
ال ل ا
ا ل اال ل
تحقیقات و توسعههای بسیار پیشرفته به این
راهکار خیلی وابسته است. به وسيلةً شبیهسازی
میتوانیم رفتار سیستمهای مختلف را مطالعه
كنيم بدون اين كه لازم باشد واقعا ا نهارا
م ل كد
«اعداد ات توسط رایانهها توليد شود Ls
نادانستههاى دنياى واقعى مدلسازى شود.
صفحه 141:
رایانهها «ثابتکار» هستند یعنی با دادن دادههای.
تولید میشود. با وجود این میتوان اعدادی تولید
0 52-62 7
ce) ا ا Pet
هیچ کدام الگوی مشخصی وجود ندارد. چنین
اعدادی. ee مینامیم.
5 © 7ه
صفحه 142:
ا ا م
زب دبیم رل بل ال BOSE See se
#Include<cstdlib>//defines the fand() and
RAND MAX
# include <iostream>
Int meayn()
{ // prints pseudo-random numbers:
fOr (int 1 = OF | = BF ie)
cout > > ۱۵۱۱۵۱( >> 2۲۳
cout << "RAND_MAX ال و << endl;
J
هر بار كه برنامة بالا اجرا شود. رایانه هشت عدد صحیح
:2 توليد مى كند كه به طور يكنواخت در فاصلة ٠ تا
ROOOD_OOX كسترده شدهداند. 8090(0(_)00816) در اين
رابانه برایر با ۲:۱۲۴۷,۴۸۳:۶۴۷ است.
صفحه 143:
هر عدد شبهتصادفی از روی عدد قبلی خود ساخته
میشود.
ng my) مقدار داخلى
كه د22 »2 كفته مى شود ايجاد مىكردد.
er awe eeye-d pes Peper Care Pes ار
پیش فرض بار گذاری میشود.
براى حذف اين اثر نامطلوب كه از تصادفى بودن
أعداد مى كاهدء مى توانيم با استفاده از تابع ١
خودمان مقدار هسته را انتخاب ل
صفحه 144:
۳3 دعر له Vanes.) | طور
محاورداى
اين كه مىتوان هستة توليدكنندةٌ اعداد
تصادفى را به شكل محاورداى وارد نمود:
صفحه 145:
يايان جلسه جهارم
صفحه 146:
3
توابع»
صفحه 147:
:آنچه در این جلسه می خوانید
57 توابع ا
- توابع ساخت كارير
- برنامةً آزمون
- اعلانها و تعاریف تابع
eed ie مات رت
ا متفیرهای محلی. توابع محلی . .
صفحه 148:
a زر
Ce ae
- توابع ورودی/خروجی (1/0)
لا 0
۲
۱ -توابع بیواسطه
2
صفحه 149:
ا ne ene
تابع 09785
۰ -آرگومانهای پیشفرض
صفحه 150:
هدفهای رفتاری:
انهلار ضی رکالییی از پایان این جلسه بتوانید:
PPB serials veh mire gt ak eee
me Rie SEE) i را بدانيد و خودتان توابعی را ایجاد
- دبرنامة آزمون» را تعريف كرده و دليل استفاده از آن را بيان
- مفهوم «آر گومان» dle Ib
|
| re a sp eee
یک را بدانید.
(
صفحه 151:
۳ Lee apn ee ee le
بدانید.
ee a 8
۱۳ aC Or aN ST ELT =
zr
۱ یس ) )®@
صفحه 152:
apdbo—)
ا الل ا ا ا ل
اا ال ال ل 0
)40 ل ا 1 000
db 2 ا ا ال ا ل
اام ا ل ل
زیربرنامهها «تابسع» Te Eeele ا ا
ee) 1
در برنامههای مختلف دوباره از آنها استفاده
كر 2
)
0
صفحه 153:
٠ توابع كتابخانداي ++ استاندارد
«كتابخانة ()++استاندارد» مجموعهای است که
eee Le he eee ee ei eerie) |
برنامه است. این توابع و عناصر از طریق «. . . »
قابل دستیابیاند.
قبلا برخی از آنهارا استفاده کردهایم: ثاببت
لت ري | 4 Breve rer ar ee
تابع 7۷710 که در < . > تعريف شده است
wed
صفحه 154:
00
00 ESC te] OE Mowe Sere Se TELE)
Sate ESCO RUC el Ske macro
هرجتد که پرذازش, me umes ١ يردازش
7 oer rel Tae egy
الع زعر /١ عدد يا ران ادام رودو اكه
@) ) ©
صفحه 155:
برای اجرای یک تابع مانند تابع اجح() کافی
reas ee ae a) eel i noe |
00 ا ESL oe USER TONG Ces py eery
2۹۲۷۱)
صفحه 156:
ال ل ان ان كل الما ار وال
ORES ee ا ۱
۱() فراخوانی میگردد. عبارت درون يرانتز
۳۳ گومان» أياديارامتر واقعىء» فراخوانى ناميده
مىشود. در جنين حالتى مى كوييم كه « توسط
ل ل ل ل ل 0000
ل a Osan ao
ا ل ل IE See
نيز حاصل 2-2 رابهعنان ياسسخ
برمى كرداند. as
صفحه 157:
0
9
9 (CN
FRCS eee See een) EUS eT at gee)
DEC SCS Te ae RO gin) eo
)(<۷ را به تابع ۵() برمی گرداند. جعبهای که تابع ۵
را نشان مىدهد به رنك تيره است,ء به اين معنا كه فرايند داخلى و
نحوةٌ كار آن قابل رويت نيست.
صفحه 158:
مثال 'ا-ه آزمايش بكم رابطة مثلثاتى
اين برنامه هم از سرفايل <> استفاده مىكند. هدف اين
لس لد رت رائظة ترا دیب رک رت - ۱ تجربی
بررسی شود.
زر بر
(09 97:۶ > 7 2« 0۱)) 2 {
رت ره را
eee eo و
صفحه 159:
خروجی برنامه:
خروجى نشان مىدهد كه براى هر مقدار
ا DNC
>ود 708510 برابر است.
1
١
اهر
ل -0.0E P9-—” US—~ JD
O.PPOSEI 0. چاپ میکند.
aed
0
در
ae
۳3
ع
صفحه 160:
۱ ao)
0.201358 ,1
بسرمیگردلند
۱ ۳
6.را
00
ceil(3.141593)
sib S21, 4.0 suis
- مقبار »05)2(
۱0
بسرمیگردلند
(0)2كا© مقدار
or ae ee ae 7
ar) (به رادیان) PE رز hy
سیئوس معکوس ۲ (به رادیان)
تانؤانت معكوس < (به راديان)
(odd 25) X itn jlaie
كسينوس 5 (به راديان)
asin(x)
atan(x)
ceil(x)
cos (x)
صفحه 161:
(3.141593) ۲۱۵۵۲
مقئار 3.0 را برميكردلند
۱۳۵
7 را
بسرمیگردلند
(10010)2 مقدار
ab $2 |, 0.30103
(2,3) 00۷ مقنار 8.0 را
۳
۳۳۱۵
7 را
بسرمیگردلند
7۳0
1 را برمیگردلند
fim ی fot
مقدار کف ۲ (گرد
eres
2) K tab لكاريتم
(Cre
By area لگاریتم
)10 پایه
* به تولن2[
سينوس : (به راديان)
رذج
floor(x
/
ةا
0
)
pow(x,p
/
sin(x)
sqrt(x)
صفحه 162:
7 ar Stet reser er Tere
۱ Son نوع ا
ان را يردازش 7
gg BI) ۳.۳ recy ارتقا مىدهد.
صفحه 163:
23
1
0:
این سرفایلها از کتابخانةٌ د) استاندارد گرفته
شدهاند. استفاده از آنها شبیه استفاده از
سرفایلهای )++ استاندارد (مانند
> >> ) الست. براى مثال اكر
بخواهیم تابع اعداد تصادفی له را از
سرفایل <2ت> به کار ببریم. باید
دستور پیشپردازندةٌ زیر را به ابتدای فایل
برنامة اصلی اضافه کنیم:
۸ ۱۸ ۱۸ ۱۸ ۱۸ ۱/۸
Nad <vstdlib>
صفحه 164:
po col توایع -۳
كرجه توابع بسيار متنوعى در كتابخانة )++
استاندارد وجود دارد ولى اين توابع براى بيشتر
وظایف برنامهنویسی os نيستند. علاوه بر 1
برنامهنویسان دوست دارند خودشان بتوانند
توابعی را بسازند و استفاده نمایند.
صفحه 165:
eat ee Oley
يكه مثال ساده از توابع ساخت كاربر:
tot دك )عطي
1 ac acca ate ee
ad ان
کر return
صفحه 166:
بدنهٌ تابع. یک بلوک کد است که در ادامهً عنوان
ان میآید. بدنه شامل دستوراتی است که باید
انجام شود تا نتیجةٌ مورد نظر به دست آید. بدة
شامل دستور ely 45 Cowl retur 5 را به
و مکان فراخوانی تابع برمی گرداند.
صفحه 167:
اي ae عمده 1
اجراء ل 35 ل * اه م 5 1 ae 0
نها eee 7 ور
۳ استفاده كرددايم يك تابع به نام eh»
اصلى» را تعريف مى كند. نوع باز كشتى
اين تابع از نوع 9 است. نام آلن 5د
ا ا كه
ست؛ يعنى هيج يارامترى ندارد. وع
سس
= 3 As
صفحه 168:
بسرنامة آزمون-6۳
تنها هدف این برنامه. امتحان
كردن تابع و بررسی صحت
کار ان است.
بر = 3 >
برچسبها و راهنماهای خوانا - را لحاظ کنید.
صفحه 169:
مثال ۵-۴ یک برنامهةً آزمون برای تابع عطلح()
3 ۱
fol vube(tat x)
Cll A ene Faeroe le)
returns حص 2۳۰
رااز ورودى مى كيرد و
retire ورد Pe peau) eee
} Pee ا err
fat waic() مقدار ۰ را وارد کند.
) ۱۱ مس ()عطلی سا عوها
0ه مز
white (a |= O)
9
pou << a Se 9 i ae :المج >> مت a
صفحه 170:
هر عدد صحيحى كه خوانده مىشود. با استفاده از
ماه تابع اا 0
صفحه 171:
CRT on ener Se coy تسس
تابع زیر دو پارامتر دارد. اين تابع از دو مقدار فرستاده شده به آن. مقدار بزرگتر را برمی گرداند:
تسیا
en teat ۱
ea
aa ( <<
سر
1
۵ ۱
۷۲ )
do
زو << سن << وم {
( تلعج >> (م >> "د (" >> و >> "" >> بن >> ")رورونا" >> بوت
while (7 != 0((
صفحه 172:
توابع ا ا ل ال وت سم را مانند اين
نيز مى توانستيم بنويسيم:
رم Dy ا ا ی 1
(شبيه دستور )زيرااجرارابه
ee و ی اگرچه
I ۱۳ 7 درانتهاقى تابع قرار
مر آسن را در هر نقطه
دیگری از تابع قرار داد.
سس
صفحه 173:
به دو روش میتوان توابع را تعریف نمود:
-توابع قبل از تايع 0325 () به طور كامل با بدنه
مربوطه اورده شوند.
حراه ديكرى كه بيشتر رواج دارد اين كونه
Fea peel moe) 1 00
0
قرار بگیرد.
صفحه 174:
aR رت ی زره
در انتهای آن قرار دارد.
یک متیر زر ب .با بر نرب .
nD Ne ee ee nl eee) ead ۱
كه متغير را در هر جایی از برنامه میتوان اعلان
ترداد ناب را با قبل از برنامة اصلی ار
صفحه 175:
عد = re) ۳ باز گشتی
تابع چیست نام تابع چیست و . . پارامترهای تابع
همينها براى كاميايلر كافى است تا بتواند
ا را
به تعريف بدنة تابع نيز احتياج مى شود كه اين
بدنه در انتهاى برنامه و يس از تابع ۵۰( قرار
می گیرد.
صفحه 176:
te ge gg G8
امتغیرهایی هستند که در فهرست
يارامتر يى تابع نام برده مى شوند.
Rear Car NCD
میشوند؛ یعنی فقط در طول اجرای تابع وجود
۳
20202020 متغیرهایی هستند که از برنامةٌ
صفحه 177:
۱ :(اكاراك) ص 1
این ا ا 0 ١
اما اینجا اعلان تابع بالای تابع اصلی ظاهر شده و تعریف تابع مسد
Rom seine ee be
رس )
Ned
۱
ک> و << )م۲ >> نسم ۲۳ >> a << ")="
0 لي eo; }
oe OO
tat wor tat x, tot)
{ P(x <p) retry;
سا ام
صفحه 178:
ابر
رت
Sy
دارد:
صفحه 179:
۱- اولین مزیت «مخفیسازی اطلاعات» است.
٠-مزيت ديكر اين است که توابع مورد نیاز را میتوان قبل
از این که پرنامة اصلى نوشته شود. جداكانه آزمايش
نمود.
۳سومین مزیت این است که در هر زمانی به راحتی
میتوان تعریف توابع را عوض کرد بدون اين كه لازم
باشد برنامةٌ اصلی تغییر یابد.
۴-چهارمین مزیت هم این است که میتوانید یک بار یک
تابع را کامپایل و ذخیره کنید و از آنن پس در برنامههای
مختلفی از همان تابع استفاده ببرید.
صفحه 180:
صفحه 181:
ا لل
اول بر نامه اصلی ۳ كع اضافه كنيم:
Pare se
سس
0000000
د مسن
0
زو << 0
۲( >> >> ۳ ک> رن << )م۲ ک> لو
تس AO) Bs سس ده
سیر
۱ )
ا ا 1۱
صفحه 182:
alo erg pea enti
Gehan ۳7 ر
aol al 191) Sa oe 9
Heth ARH TEN
0 Se ere پوبا
مرجع ویندوز و Sel بیشتر با فایلهای
0
3ر١ ©
صفحه 183:
۶- متغیرهای محلی» توابع محلی
پارامترهای تابع
صفحه 184:
5550006
.اعداد فاكتوريل را در مثال .6-1 ديديم. فاكتوريل عد صحيح © برابر است باه
ا 00
2ك
0
9
Pa CeO
}
تابع زيرء فاكتوريل عدد »را محاسبه مىكند:
صفحه 185:
همان گونه که متغیرهام تواند 7
باشند.
Ce Sy} تابعى است كه درون يك تابع ديكر به كار رود. با
ا ا ا Pee
ساخت. به مثال زير نكاه كنيد.
ey ا ل ا ا Polar Sree
مىكند كه به جند طريق مىتوان >اعنصر دلخواه از يك مجموعة WT
عنصرى را كنار يكديكر قرار داد. براى اين محاسبه از رابطة زير
ا
11
(n- إه
4
(4-2)!
كك ورم
- 4 _4_24_
P{4,2) = 2
صفحه 186:
این تابع. خود از تابع دیگری که همان تابع فاکتوریل
است استفاده كرده است.
شرط به كار رفته در دستور “ابراى محدود كردن
per ate yen Co ل ا ا اا 0
حالتهاء تابع مقدار ٠ را برمى كرداند تا نشان دهد
كه يك ورودى اشتباه وجود داشته است.
ال م رم
00 ا ا ا oP k Prow 3!
F(a <Q) || k<© || k> 5) retro O;
retura Pact(a)/Pact(e-k);
صفحه 187:
ا ل 0
ا يي نا
هه 10
۰۵
توا سم ص۱9
)++ ;© < 1 0 ۱۳
Td ote El ba a}
Ta (8H مت
vou << pod;
صفحه 188:
۷- تابع لس
۱
CR eSB Re ieece AULD Meee) ل FRO
باز گشتو تابع استفاده مى كنند
يك تابع 2 تابعى است كه هيج مقدار بازكشتى ندارد.
ا ی
نيست ولى اكر قرار باشد اين دستور را در تابع أو قرار دهيم: بايد لن را
به شکل تنها استفاده کنیم بدون این که بعد از کلمةٌ له مات
دیگری بیاید:
۳۳۵
۱
صفحه 189:
۸- توابع بولی
در بسيارى از اوقات لازم است در برنامه. De شود.
اگر بررسی این شرط به دستورات زیادی نیاز داشته باشد. بهتر است که
eC ey es | ee yrion Fa gee) 0
حلقهها استفاده میشود بسیار مفید است.
SADC Ne OneL wry ال كن
اسم توابع بولى را معمولا به شكل سوالى انتخاب مىكنند زيرا
Gene |
مى د هند.
صفحه 190:
ad لا
Pet ome Daven [een rel ee eer aoe PTS tears
Ce aan)
0000000000
۱۱ read a. <M OR KR acd
Bo <@)retrsine, | onl O ae te Prot priven
oe lO) a CoM RoR a a a
وجوج -> ل 6ع م ل 9 6(
۱
مسا true Tea
0 ۵ yy oe
صفحه 191:
)00( توابع ورودی /خروجی -٩
g ean] pen F igre ل ار ا ا رك ا ل
به هدف اصلى برنامه مربوط نيست را مىتوان به توابع سيرد. در
جنين شرايطى سودمندى توابيع محسوس تر مى شود.
ee ا زر BSS Se eer e Se)
کردهاید که سوابق تحصیلی دانشجویان را نگه میدارد. در این
نرمافزار لازم است كه سن دانشجو به عنوان يكى از اطلاعات يروندة
دانشجو وارد شود. اكر وظيفة دريافت سن را به عهدةٌ يك تابع
جزییاتی از قبیل کنترل ورودی معتبر. يافتن سن 200
- .. ... از روی تاریخ تولد و ... را در این تابع پیادهسازی کنید
صفحه 192:
قبلا نمونهای از . . . . . رادیدیم. تابع ,راما
در مثال 2-9 هيج جيزى به برنامة اصلی برنمی گرداند و
فقط براى جاب نتايج به كار مىرود.
ee ern roel
فقط برای چاپ نتایج به کار میروند و هیچ مقدار باز گشتی
ندارند.
ا .ساسا یز به همین روش کار میکنند اما در جهت
معکوس- یعنی توابع ورودی فقط برای دریافت ورودی و
ارسال لن به برنامة اصلى به كار مىروند و هيج يارامترى
ندارند.
صفحه 193:
مثال ١١-ه تابعى براى دريافت سن كاربر
on ی
ar ل ۱
ورودى غير منطقى را ee
reer nee ۳ در 1
۱
تسه
Her CEA Oth cette he]
ea
rere
ea
کت ( 6
صفحه 194:
513
۱۳ ا oon
CS ena
OD) د
Dry acpi
eee na ate
Deen cee Re Acme cae Pod
صفحه 195:
۱ eee Scope ee es Reel and
epee ea ee ee See] Se ا e
که در فراخوانی تابع ذکر شده ب رآورد میشود و سپس
الو 0[
Perrier Se.) Me Bed
الل ae er a eB eed oe
000 ا 1
000 0 Reser ee es
۰ محلی است هیچ تغییری روی مقدار » نمی گذارد.
@)) CS
صفحه 196:
By eter TDL SS eet aE St caea
2 aS an 970 90d iS lade sh alo pl
بت 0 ered
PU een hes خواندنی» میگویند.
ae ws تسس و و
ey tee a a Ra ener As مثلا
ra Kone
0 0
حالات؛ عبارت در رون برانتز به شكل يك مقدار تكى بر آورد شده و حاصل
صفحه 197:
۰- ارسال به طریق ارجاع (آدرس)
ارسال به طریق مقدار باعث میشود که متغیرهای
۵
بمانند.
ل لل ل 2
دهد. يعنى مىخواهيم كه تابع بتواند محتويات
متغير فرستاده شده به ا-ن را دست كارى كند. در
eC ag
میکنیم.
صفحه 198:
برای این که مشخص کنیم یک پارامتر به طریق ارجاع
ارسال مىشودء. علامت رابه نوع يارامتر در فهرست
يارامترهاى تابع اضافه مى كنيم. اين باعث مى شود كه تابع
Me ita ل ا ا ای
خود اركومان محلى را به كار بكيرد.
به این ترتیب تابع هم میتواند مقدار آر گومان فرستاده
FEC Soares Repel rere Peele ay Se
naan) ke eee pres koe erga
خواهد بود.
صفحه 199:
هر تغييرى كه روى يارامتر در تابع صورت گیرد به
طور مستقيم روى متغير برنامة اصلى اعمال مىشود. به مثال زير نكاه
* مثال 1١-ه (ea a
تابع كوج زير در مرتب كردن داددها كاربرد فراوان دارد:
(مر مار سرت ۱
تبر لجو da Co ae || 1
هدف این تابع جابجا کردن دو عنصری است اع
كه به آنن فرستاده مىشوند. براى اين منظور كه
پارامترهای «و مربه صورت پارامترهای
ارجاع تعر یف شدهاند:
7 نا )
صفحه 200:
عملگر ارجاع »6 90 50 GE & S doh > و بر آركومانهاى ارسالى
ترا را را
مها سر
oP x ocd p // مر
تمه
1 حاجطة
ا 0
الا ا
hd) مد
b="<<b << ocd ی م۳
ب ةله ممم ةا
صفحه 201:
وقتی فراخوانی ۱۳۳ مىشودء عدبه رن
ees da و
رات وب
swap
جابجايى رح مى دهذ: )مويو بعد از بازگشت
ais
بل 1
100
را
float
صفحه 202:
اين اعلان شامل عملكر ارجاع 8 براى هر يارامتر است.
برنامهنويسان جعادت دارند كه عملكر ارجاع 86 را به
لله با لین
ce ean,
اه سر هيج فرقى 0 Cre
ee ee ee گر ارجاع. کاملا اختیاری و
صفحه 203:
۱ ل
5 SUN eC ae ee en oO tao ا we Te)
mes ۳ 0 pea e Ons)
1 ٠ ارسال شود و طاز طريق ارجاع به برفرستاده
شود. سيدا
-ط ,66 دممر 606 (
two << "G="<<u <<" b="<<b << ecd
(طرع:
> اک >> >> ۲ 2 و" >> لس
ارت وت
oS را
Dee he (seems ۶ج و ,9 <ه
jx = 60 1 ات tal 6©
pee ۰-00, ۰20
صفحه 204:
0 RIN Cod
eer coy ان
10
د
10
۷
amine
0 بعد از بازگشت
XX 88
فا
ما y
زا
صفحه 205:
در جدول زیر خلاصةٌ تفاوتهای بین ارسال از طریق مقدار و ارسال
ل
00
jint x
پارامتر > یک ارجاع است
*مترادفبا آركومازلست
ل 0
آركومان ارسال شده از طمريق ارجاع فقط بايد
يك متغيى باشد
آرگومان خواندنی-نوشتنی است
ارسال از ریق
1101 4
بارامتى ايك متخي محلى است
*يككبواز آركومازلست
0 ا oe werd
آركومان ارسال شده از طرريق مقدار مىتواند
يك ثابت» يك متفیر یا یک عبارت باشد
لت
صفحه 206:
يكى از مواقعى كه يارامترهاى ارجاع مورد نياز
هستند جايى است كه تابع بايد بيش از يك مقدار را
بازكرداند.
7 0 ( مىتواند يك مقدار را
۳
بنابراین اگر باید پیش از یک مقدار برگشت داده
اپارامترهای ارجاع ۰
صفحه 207:
|
تابع زیر از طریق دو پارامتر ارجاع. دو مقدار را بازمیگرداند: مه و
هوجو (محیط و مساحت) براى دايرهاى كه شعاع آسن عدد
0
تا تور ی[
ae.
ل مسا
صفحه 208:
eager Le تست تست
CO aT میدب
صفحه 209:
ve 5 3 ۰
لوسللز طویولوجاع نابت 06
ارسال پارامترها به طریق ارجاع دو خاصیت مهم دارد:
این که تابع میتواند روی آر گومان واقعی تغییراتی بدهد
اين كه از اشغال بى مورد حافظه جلو كيرى مى شود.
Deen SENET) ل ل ل كك
. اين روش مانند ارسال از طريق
ارجاع است با این فرق که تابع نمیتواند محتویات ترا ره
ار را سر ای ارت
براى اين كه يارامترى رااز نوع ارجاع ثابت اعلان كنيم بايد
iru eae be Ta Rey es ۱
صفحه 210:
SNe رب ارت
سه طریقه ارسال پارامتر در تابع زیر به کار رفته است:
cn
2 +۷
a ۱
لمم >> د >>
صفحه 211:
PA Pca ا Te Ree reyes Hee
۱ ee a
میا
Ra ae hon تم
ا oho ala
0 و iy
ل ات
ل لمم >> م >>
تغيير دهد. تغييراتى كه روى :صورت انا
مى كيرد اثرى روى آركومان » نخواهدر " >> 0 >> " < 0ه" >> نوم
داشت زيرا از طريق مقدار به تابع لمم >>ج >>
ارسال شده. تغييراتى كه روى ب صورت سر ان
مى كيرد روى آركومان ا الي ا لي
مى كذارد زيرا طاز طريق ارجاع به تابع هو
فرستاده شده. i
صفحه 212:
ا ل ا
ا Fane ea ey بزرگ 0
Te) 9
جلسههاى بعدى توضيح آنها آمده است. عناصرى
۱
Sl Lal ita a gar ae تابع
aia ات
.© 7ه
صفحه 213:
تولبع ببهلسطه -09
تابعى كه به شكل بیواسطه تعریف میشود. ظاهری شبیه به تولبع
معمولی دارد با این فرق که عبارت ۲ در اعلان و تعریف OT
قید شده است.
ها
eel ی 000
اس مرا
ما ۱ {
aa
ار انم اندها
صفحه 214:
:احتياط
صفحه 215:
٩6- چندشکلیولیع
در )+ میتوانیم چند تابع داشته باشیم که
همگی یک نام دارند. در این حالت COT ee)
تابع مذكور. جندشكلى دارد. شرط اين كار ان
ACS eee Ome Ero
تفاوت داشته باشد. يعنى تعداد يارامترها متفاوت
باشد يا دست كم يكى از يارامترهاى متناظر هم
نوع نباشند.
صفحه 216:
مثال ۵-۱۷ چندشکلی تبع ۳0()
۳0|
ولى شكلى متفاوت تعريف مىكنيم وهمه رادر يك برنامه به كار
0
لد سن
tH 0000
ایتک
و 1
0 @®) ys Co
صفحه 217:
v) ۱ ود مامت با
1) 1| wontury oP the fluo qed iiecers:
retura (x > py? x ip);
}
fel cenr( fot x, fat y, tat z)
وه مورف وا سا اه the woxtou بو | )
,ی برد دوجم
zi w); 2 ۰ << ) مسب
}
fal qrax(double x, double y)
تال the tue sven ۴ مریمب ها بو || 1
زا :2 رم مار
1
صفحه 218:
es 595 در ار راو بی میشود..
pn ome ۳۳ ن را بررسى مى كند تا بفهمد
ال REN
۱ tel eee eae ree Ee
ee ee ee eR pene te
مس all aah ae
صفحه 219:
۴- تابع عمم()
۱ LAC oe Sent Rey Me OM pele Doles
۳۳۳۳7۷ (oazvakt
منطق ()++ اين طور است كه هر برنامه بايد داراى تابعى
HCH مر
در حقيقت هر برنامه كاملء از يى تابع 2-5 () به همراه
توابع ديكر تشكيل شده است كه هر يك از اين توابع به
شكل مستقيم ياغير مستقيم از درون تابع 2-5()
فراخوانی میشوند.
صفحه 220:
l eeS ا ل
ee eee Son Web) Re resto mer ered
Fe eee teak eR ero
ag 0++اين خط اجبارى نيست و مىتوان آسن را
رد.
fee re EN لي ا
Hee ۱ eae]
به اين معنا که برنامه بدون خطا پایان گرفته است..
Pr ee eer eta. a MO eee DES melon)
eo - ف
2 ( ۵
صفحه 221:
مثال ۵-۱۸ استفاده از دستور مه برای پایان دادن به یک برنامه
tei cain)
Rad A fa a a
۳
>> نوم
Peed
P (d= =O) reten O;
pat <<a << "/" << d << "=" << dd << eco
صفحه 222:
۱
لت Cee ere See edd ev PU nec?)
دهیم:
۱ - استفاده از دستور ....-.
۲ - فراخوانی تابع ا#«ج()
۳- فراخوانی تابع ۰7۱
۴ - ایجاد بک حالت استثنا
صفحه 223:
ا ل ل
مخ ات سا یج | شود لیا
لي ا
اي يي ا
يي يي يي
سم
fat od
:د << وم
ed >> نوم
/
double reviprovd (double x) — Cxcepion
۱9 دس مت are tes
ل ان ان
he ار سس
صفحه 224:
آیکومارهاوبیثض رض-19
در 6++ میتوان تعداد آر گومانهای یک تابع را در زمان اجرا به
دلخواه تغییر داد.
ee eRe Ta) ests Yeeros are ee er
امكانيذير است.
برای این که به یک پارامتر مقدار پیشفرض بدهیم باید آن مقدار را در
هت
درج کنیم. به این ترتیب اگر هنگام فراخوانی تابع. آنن آرگومان را ذکر
BIDS eT cel 9
cme oe ed ا tere ae ye el erce li
صفحه 225:
مثال ۵-۲۰ راهان ولو ,0-صام ,حاطح ,عاط ل
Si 000000 و
everest stb beter ۱۳
ار نيه +یه) +ه) + x
ee er eee 7 ی
vot << "p(x,P,Q) = "<< p(x,P,Q) << ead;
EEE CY) eaten ۱
ا ا ال a
1
WD, dnb MEO, dnb WO=O, dnb ا 0
wO=0)
Rea. li te ko BR aoe
وت tee
) »= }
by
صفحه 226:
ی
پارامترهای تابع بعد از همه پارامترهای اجباری قید شوند مثل:
Pee ee ena eee ae Tod
۱ es a) OCC
ع سما ل لماه لع ور مل
است تخصيص مىيابند و يارامترهاى بعدى با مقدار بيش فرض ير
0 ا ل ل ا BED
DNA Ber ese ا Cys ie
eae و oe ee 0
7
0 a ce
صفحه 227:
پایان جلسه پنجم
صفحه 228:
جلسه ششم
۳17 بل
صفحه 229:
آنچه در این جلسه می خوانید
- پردازش آرایهها
- مقداردهى آرايهها
- ایندکس بیرون از حدود آرایه
- ارسال آرایه به تابع
۱
Pee Cy | ree eae )>>
PPT SS EC Cc ye ee
صفحه 230:
ae ا ا
- تعریف انواع
1
صفحه 231:
هدف کلی: هدفهای رفتاری:
انتظا > از پایان
Ter at ee PEON rg I ume Pre
ا از آرایهها را بدانيكرويعوانيد آنها را در برنامهها به كار
- آرايههاى ديك بعدى, و «جندبعدى» را تعريف كنيد.
- مفهوم «ایندکس؛ را بدانید و خطای «اثر همسایگی» را تعريف و شناسايى
ا ال
LES NCS cree el concer tae ل ۱
- دمرتبسازى حبابى» را به اختصار شرح دهيد.
صفحه 232:
مقدمه:
در برنامههايى كه دادهدهاى قراوانى را يردازدش میکنند
استفاده از متغیر های معمولی کار عافلانهای نیست زبرا
7 0 صورت
سس
همین js feb بيشتر زبانهای اط را اسان
ندارک دیده شدهاند.
صفحه 233:
يك آرايه. يك زنجيره از متغيرهايى است كه همه از
یک نوع هستند.
Sco Wh top
1 ene eS aD) ا
dS coc he bales
عناصر یک آرایه در خانههای پشت سر هم در حافظه
epee eer Te re 0
حافظه تصور كرد كهاين بخش خود به قسمتهاى
Dec rare MES eee) ل ل ل ۱
دارد.
صفحه 234:
شكل مقابل آراية 3 كه ينج عنصر دارد را نشان مىدهد.
0 لل ل ل لات Ferree OTT
[2]4 حاوی مقدار ۱۸۰۰ است.
O| d7.SO
۱ 00
اث
ات
لك ان
صفحه 235:
پسردلزش]ولیهها -6
ام عناصر آرايه
De eet PTE Te Dita ea ee ELL oe
پر رن سر
را 7 ی سر
مرکب است و برای دستیابی به هر یک از خال فا آ
(ea. yee ل
-]0[ - 9
Fan (ec
37 >> []۰ >> ۰ 2 [0]ه" >> نوم
تا
ا
صفحه 236:
تم ار ال زرا سس زر
اس مسب مت مر
عبارت ey pe عناصر آرايه رامشخص مى كند.
00
عداك_بومه تعداد عناصر آرايه را نشان مىدهد.
beg ا ا ا ات ال م
باید داخل کروشه قرار بگیرد.
صفحه 237:
i مقداردهی آرایهها
OES RAS) lee Syren ee eye eye ier a OP)
How af] = (80.0, 69.9}:
See eee Dele eee TU a ee ere ee lice}
۳ شدهداند درون عناصر زر قرار مى كير ند. اندازه آرايه
با تعداد عناصر موحود در فهرست خواهد بود.
پس همین خط مختصر. آرایهای از نوع , , وبانام وبا تعداد
aa a aaa ae aed
فهر ستء مقداردهى مى كند.
0 6
a Ce
8 6.6
صفحه 238:
مثال ۶-۳ مقداردهی آرایه با استفاده از فهرست مقداردهیٍ
1
int main()
float a[] = { 22.2, 44.4, 666 1 {
int size = sizeof(a)/sizeof(float),
for (int i=0; i<size; i++)
cout << "\ta[" << i << "] =" << ali] << —
endl;
صفحه 239:
هنكام استفاده از فهرست مقداردهى براى اعلان آرايه.
میتوانیم تعداد عناصر آرایه را هم به طور صریح ذکر
كنيم. در اين صورت اكر تعداد عناصر ذكر شده از تعداد
عناصر موجود در فهرست ی بيشتر باشد,
خانههای بعدى با مقدار po 20 میشوند
float a[7] = { 55.5, 66.6, 77.7 };
دقت کنید که تعداد مقادیر موجود در فهرست 1 o
مقداردهی نباید از تعداد عناصر آرایه ۱
باشد: =
float a[3] = { 22.2, 44.4, 66.6, 88.8 }; / ERROR: too many 2
values!
0D 8
OD €
صفحه 240:
یک آرایه را میتوانیم به طور کامل با صفر مقداردهی اولیه کنیم.
برای مثال سه اعلان زیر با هم برابرند:
float ۵1 [ < ) 0,0, 0, 0,0, 0,0, 7۶
float a[9] = { 0, 0};
float a[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
اما مطلب فوق اصلا به این معنی نیست که از فهرست مقداردهی
استفاده نشود.
درست مثل یک متفیر معمولی. اگر یک آرایه مقداردهی اولیه
ney etul ew mayer) 00
صفحه 241:
02000
7
0
int main()
{ const int SIZE=4; // defines the size N for 4
Cth ay
ms a[SIZE]; // declares the array’s elements as _
for (int i=0; i<SIZE; i++)
cout << "\ta[" >> i << "] =" << afi] <<
تامع ١
صفحه 242:
آرابهها را میتوان با استفاده از عملگر جایگزینی مقداردهی
رل ا 0 لك
۲ ان سر
se ee فك د زات مم
05007 11
همچنین نمیتوانیم یک آرایه را به طور مستقیم برای
مقداردهى به آرابه دیگر استفاده كت
Poa of] = 4 96.6, PPP, 89.9 };
Row b[P] = 3; ۱ 9090:0089: wreps oon be wed w اوه
صفحه 243:
۴- ایند کس بیرون از حدود آرایه
در بعضی از زبانهای برنامهنویسی. ایندکس آرایه
نمیتواند از محدودهٌ تعریف شده برای آن بیشتر باشد.
. در پاسکال اگر ll 3 با تعداد پنج عنصر
تعریف شده باشد و آنگاه [ 7 ]2 دستیابی شود. برنامه از
515 ادن سيستم حناطتى در ©2049" وَجَود نذارد.
مثال بعدى نشان مىدهد كه ايندكس يك آرايه هنكام
دستيابى مى تواند بيشتر از عناصر تعريف شده براى آن
باشد و باز هم بدون این که خطایی گرفته شود. برنامه
ادامه یابد.
صفحه 244:
۱ ae anv)
برنامة زیر یک خطای زمان اجرا دارد؛ . . . از حافظه دستيابى مىكند
كه از محدودة ارايه بيرون است:
۰۵
{ weet ot GILG=F;
meen (Sick oe له dng [a rg NY a a اد
صفحه 245:
۰ اثر همسایگی
ا ا ل ا ا ا ا
a ed 00
int main()
7 int SIZE=4;
float al] = { 22.2, 44.4, 66.6 };
float x=11.1;
ا يا ae endl;
J ERROR: index is out of bounds!
cout << "x =" << x << endl;
سح
2-0
صفحه 246:
صفحه 247:
59 52070700
برنامة زير از کار میاقتد ژیرا ایندکس آرایه خیلی بزرگ است:
fot win)
vvcet et 611/2: {
Pou uf] = ) 66.6, © .6©, 66.6 (:
:200.0 ۳
mot << "x =" << x << ech;
2ب 6۵ ۵6 [ومووز
Tt << "x=" << x << och;
صفحه 248:
ل ا الا ا ال ا ا لل
ped] م شده
روی صفحه ظاهر میشود.
این پنجره بیان میکند که برنامه تلاش دارد به نشانی
310040108e حافظه دستیابی کند. این مکان خارج از
ا ل reat open |
US 20 WAS 920 |) dol ole pia ppl ply
صفحه 249:
پردارشکر (ستئنا
Oe oO eh Cpr ل
2 » ناميده مى شود زيرا كدى وجود ندارد كه بهاين
استثنا پاسخ دهد.
در :)++ مىتوانيم كدهايى به برنامه اضافه كنيم كه
هنكام رخ دادن حالتهاى استثناء از توقف برنامه
جلوكيرى کند. تلع py a NY «
میگویند.
صفحه 250:
لوسل[آيليه به تليع -5
كد 01١0022 كدآرايه 3رااعلانمىكنددوجيزرابه
كاميايلر مى كويد:
-١ اين كه نام آرايه 3 است
۲- عناصر آرایه از نوع ]1031] هستند.
سمبل 3 نشانى حافظة آرايه را ذخيره مىكند. 1 -
ee ا ا ل | 0
oa ا ا
..یعنی فقط نوع آرایه و نشانی حافظةً
BYES SCE ees] Nee rel
صفحه 251:
1 ا ا
int sum(int[],int);
int main()
{ int af] = { 11, 33, 55, 77 };
int size = sizeof(a)/sizeof(int);
cout << "sum(a,size) = "<< sum(a,size) << endl;}
فهرست پارامتر تابع فوق به هکل 1080 int sum(int a[], int n) int al],
gal 4S Lime gal Cal (1 تابع یک آرایه از نوع fi int sum=0;
int 9 یک متفیر از نوع 111 دریافت میکند.
for (int i=0; i<n; i++) _— ص
Cee ee ناشع در الاق ela
نكاه كنيد. نام يارامتردها
return sum;
حذف شده است.
صفحه 252:
فقط نام آرایه
پس ارسال آرایه به تابع شبیه ارسال متغیر به
طریق ارجاع است.
صفحه 253:
مت
در این برنامه از ثابع ,مر استفاده میشود تا مفادیری به داخل
آرایه وارد شود. سپس با استفاده از تابق . ,۱ مقادیر داخل آرایه
حاب سر سر
void read(int[],int&;)
void print(int[],int);
int main()
۱0 WV cr4ses lot
int ل ع مات size
read(a,size);
Celt >> ۳۲۵۵ ۵۳۳۵۷ ۳۵5 ۲ >> :عاصهصعاه ۰ >> 2و
print(a,size); 1 =
(frm
5 0
صفحه 254:
و ۱۸۰۱۱۰۱۱۱۱
- cout << "Enter integers. Terminate
35
OF
do
{ cout—=— کت ۱ > ۲و | ene
cin >> a[n];
{ while (a[n++] !=0 && n < MAXSIZE);
--n; // don't count the 0
صفحه 255:
i
بتواند Qread چون ۲۱ یک متفیر است. برای اين كه تابع
مقدار تن را تفییر دهد این متغیر باید به شکل ارجاع ارسال
شود.
همچنین برای این که تابع مذکور بتواند مقادیر داخل آرایه
را تغییر دهد. آرایه نیز باید به طریق ارجاع ارسال شود. 3
اما ارحاع ارابهها کم متفاوت است.
صفحه 256:
7
بنابراین به منظور ارسال آرایهها به تابع از استفاده میشود:
۱ - آدرس اولین خانة آرایه
۲ - تعداد عناصر آرایه
-۳ عناصر آرایه
تابع با استفاده از اين سه عنصر مىتواند به تىك تى
Fp ee 74 ا م
صفحه 257:
آدرس اولين خانة آرايه. همان نام آرایه است.
پس وقتی نام آرایه را به تابع بفرستیم آدرس اولین خانه
50050
ل 0
بنابراين با اين دو مقدارء تابع میتواند به آرايه دسترسى
داشته باشد.
صفحه 258:
1
پر زیر ار را را را
satin
:( 66,88 ,22,44 4 - []وغمز 4
ات او
0
۱
1
ا تم بای
Peete OPE) ۱ NH
اه ره موم رشن ماه هس لو
صفحه 259:
۶- الگوریتم جستجوی خطی
آرایهها بیشتر برای پردازش یک زنجیره از دادهها به
لاد 2
اغلب لازم است كه بررسى شود آيا يك مقدار خاص
درون يى آرايه موجود است يا خير. سادهترين راه اين
Cee ل Se eS yee
همهٌ عناصر آرایه را جستجو نماییم تا بفهمیم که مقدار
nM Die ey tr CMD EBS TIES TC) ۱
«جستجوی خطی» .. -.
صفحه 260:
ا
ا ان
ile tee ae ie
int main()
4 []ق غأمز > 4 22, 44, 66, 88, 44, 66, 55(:
ِ a << "index(44,a,7) = "<< index(44,a,7) <<
aa << "index(50,a,7) = " << index(50,a,7) <<
endl; ۲ ۲
i
int index(int x, int af], int n)
{ for (int i=0; i<n; i++)
Ut یت زر
صفحه 261:
تابع ۰ ۰۰ سه پارامتر دارد:
۱. پارامتر 2 مقداری است که قرار است جستجو شود.
۲.پارامتر 3 آرایهای است که باید در آن جستجو صورت گیرد
۳. و پارامتر . هم ایندکس عنصری است که مقدار مورد نظر در
OT پیدا شده است.
0000 per Se ل مت
شده و مقدار هر عنصر با . مقايسه مىشود. اكر اين مقدار با
ا ا م ا ل
مى يابد.
صفحه 262:
1
مقداری خارج از ایندکس آرایه بازگردانده میشود که به
این معناست که مقدار . در آرایةً موجود نیست.
در اولین اجرای آزمایشی. مشخص شده که مقدار ۴۴ در
ell ee RoI) a[1] دوم مشخص شده
که رك 2 موجود نيست (يعنى مقدار 515 در
0 واقع است واز آنجا كه آراية 2 فقط تا :۱ -
عنصر دارد. مقدار لا نشان مىدهد كه ٠١ در آرايه موجود
Borer)
صفحه 263:
عمتساو هبلدى- 7
۱
است.
|
۱
ST PC Gren By ie ree) Be) ۱
مرتبة بعدى يكى كاسته مى شود.
در يايان همة يويشهاء آرايه مر تب شده است.
صفحه 264:
طريقة يافتن بزركترين عنصر و انتقال آن به بالاى عناصر ديكر به اين شكل است
.١ اولين عنصر آرايه با عنصر دوم مقایسه میشود.
۳ اگر عنصر اول بزركتر بود. جاى اين دو با هم عوض مى شود.
۳ سپس عنصر دوم با عنصر سوم مقایسه میشود.
۴ اگر عنصر دوم بزرگتر بود. جای این دو با هم عوض میشود
و به همین ترتیب مقایسه و جابجایی زوجهای همسایه ادامه مییابد تا وقتی به انتهای
آرایه ر بزرگترین عضو آرایه در خانة انتهایی قرار خواهد گرفت.
2:۱۱ محدودهٌ جستجو یکی کاسته میشود
ا ل ل ا ا ال ل ل ل ۱
و میت ی ترس اه وب تن
وقتى محدوده جستجو به عنصر اول محدود شدء ارايه مرتب شده است.
صفحه 265:
مثال ”2-11 مد
برنامة زير تابعى را آزمايش مىكند كه اين تابع با استفاده از مرتبسازى
حبابى يك آرايه را مرتب مینماید:
int main()
{float a[]={55.5,22.2,99.9,66.6,44.4,88.8,33.3, 77.7};
print(a,8);
sort(a,8);
print(a,8);
صفحه 266:
void sort(float af], int n)
{ // bubble sort:
for (int i=1; i<n; i++)
// bubble up max{a[0..n-i]}:
for (int j=0; j<n-i; j++)
if (a[j] > alj+1]) swap (alj],alj+1]);
/ANVARIANT: a[n-1-i..n-1] is sorted
صفحه 267:
تابع ۶( از دو حلقة تودرتو استفاده میکند.
۱- حلقه 0۲) داخلی زوجهای همسایه را با هم مقایسه
با هم عوض میکند.
وقتى for داخلی به پایان رسید. بزرگترین عنصر
موجود در محدودة فعلى به انتهاى آن هدايت شده است.
۲-سپس حلقةً 0 بیروتی محدودة جستجو را يكى كم
میکند و دوباره 10۲ دا را راه میاندازد تا
بزرگترین عنصر بعدی به سمت بالای آرایه هدایت
شود.
صفحه 268:
۸- الگوریتم جستجوی دودویی
در روش جستجوی دودویی به یک آراية مرتب نیاز است.
Pea | geese aan mee (re meer cst
پایینی تقسیم میشود.
4 رن
J) تب با اجحرین UR) PMR 0<
21001111
rend ا ل ا ل 0
بالايى به دنبال آن كشت.
صفحه 269:
دوباره بخش بالایی به دو بخش تقسیم می گردد و
گامهای بالا تکرار میشود.
سرانجام محدودةٌ جستجو به یک عنصر محدود
ee eT ee re Ln ere)
و عنصر مذکور یافت شده و يا این که آن عنصر با
سب سس در مه سس
ارايه وجود ندارد.
rd en ee OL De eS DEE}
به جواب میرسیم. eee
صفحه 270:
ره تست وی
پرنامة آزمون زیر با برنامة آزمون مثال ۶-۱۲ یکی است اما تابعی که در
۲ 1 سك
ل ی دار درون آرايه ery,
‘int index(int, int[],int);
int main()_
{ int al] = { 22, 33, 44, 55, 66, 77, 88 };
eae << "index(44,a,7) = " << index(44,a,7) <<
| Gale Se ene ee ee eee
endl;
> .© ته 0
صفحه 271:
ی ات ی تیا کت یکی
رای ی ۱ص 1۱ سلطا ل نی
8
//
la a ل لا
while (lo <= hi)
{ i= (lo + hi)/2; Muir Melero von MoneIneN I
if (ali] == x) return i;
Seiichi) ل ا اس 01 ور ای زا
اه
else hi = i-1; 1s Som alnlts و
1
we
صفحه 272:
براى اين كه بفهميم تابع جطور كار م ىكند. فراخوانى
(۱۱060)44,۵,7 ۱
ل pa | 24و ۲۱27 و ۵<0او ۱۱26
است.
|| مقدار ١ 0/000 > ارات كيرد شن عنضر )اج عتظر
avian Pape pened ne) EXP ea FI I= |
مقدار . بزرگتر است. پس در نيمة بالايى نيست و جستجو
CY ا SCP م لال
مى شود و حلقه تكرار مى كردد.
صفحه 273:
حالا 2--۱] و 0-0 است و دوباره عنصر وسط آرايةٌ
3٩10..2[ یعنی 3111 با < مقایسه میشود. [ 311 برابر
با ۲۳ است که کوچکتر از * میباشد. پس این دفعه 0
در سومین دور حلقه. ghi=2 922 است. پس عنصر
وسط آراية [3]2..2 كه همان [3]2 است با ا مقایسه
میشود. [ 212 برابر با ۴۴ است كه يا ا برابر است. يس
مقدار " بازكشت داده میشود؛ یعنی مورد نظر در
a[2] وجود دارد.
صفحه 274:
۹
144
44
‘ee
2111
55
33
44
hi
lo
صفحه 275:
(7 060 2
رجا مى شودء en=7 »x=60 00(
0 رس ارات [9]0..6 سر
ا ا jl 4S ۱
PN Coe vy re ل Roar EY
۰-۰ ار ۰-۱۵24 ررر ۱(
الق 55-1 ۲۸۸ صال-است که بر رک راز کر
میباشد. پس به . تغيير مىيابد و دوباره حلقه
۱ 4داطن 4عها اب سر
ار [4..4]ه عددر 66-[20]41 دق هه
بزرگتر از ۲ میباشد. لذا به کاهش
۷
صفحه 276:
60
60
600
2
>
<
<
a[i]
55
9
66
4
hi
1
10
اکنون شرط حلقه غلط میشود زیرا . . .
است. بنابراين 0 " رابرمیگرداند
يعنى عنصر مورد نظر در آرايه موجود نيست.
صفحه 277:
در تابع فوق هر بار كه حلقه تكرار مى شود. محدودة
ل تا ا لا Por
روش جستجوى دودويى حداكثر به مقایسه
نياز دارد تا به ياسخ برسد.
Feel COE Can ل CMe Ny eo
است.
صفحه 278:
رس ا 0
Fore aS Cee | ا ااا اا
Gll> puate dm 5145 Cul yal ys lai دومین
مقادیر یکسانی باشند. آنگاه جستجوی خطی هميشه
EST Pe ee SIE See release roe
Reese he ل ا تر
بازكردانده مى شود.
)© 000 دودویی فقط
0 ب ا Ce
Be nengey 0 دودويى ياسخ غلط اتن
ولی جستجوی خطی هميشه پاسخ صحیح خواهد داد.
صفحه 279:
| eS SONE ee on NOE
ee Tene SLE nee aE ee ا تت
داده شده غیر نزولی است یا خیر:
bool isNondecreasing(int a[], int n);
int main()
{ int a[] = { 22, 44, 66, 88, 44, 66, 55 };
DOUKS<"eDrudeoreusty(aP) =" << pOvadeorewieni(a,P)<< ewe;
DOUKS<"ipDorderreusnn(a,P) = "<< pOoudevrewstag(a,/?) << end;
}
صفحه 280:
bool isNondecreasing(int a[], int n)
1 // returns true iff a[0] <= a[1] <=... <=
۳۳
for (int i=1; i<n; i++)
if (a[i]<a[i-1]) return false;
return true;
I
صفحه 281:
این تابع یک بار کل آرایه را پیمایش کرده و زوجهای
ali] 9 a[i-1] رامقايسه مى كند.
اگر زوجی یافت شود «wb ali]<ali-1] oT ps5
مقدار ۲3156 را بر میگرداند به این معنی که آرایه
مرتب نیست.
ببينيد که مقادیر ۲۱16و ۲۵156 به شکل اعداد )9 +
در خروجی چاپ میشوند زیرا مقادیر بولی در حقیقت به
شکل اعداد صحیح در حافظه ذخیره میشوند.
صفحه 282:
اکر پیششرط مثال ۶-۱۴ بعنی مرب بودن آرایه
رعایت نشود. جستجوی دودویی پاسخ درستی نمیدهد.
به این منظور ابتدا باید این پیششرط بررسی شود.
با استفادهاز تابع ٠ 2 مىتواناجراى يك
اح تابع كك آر گومان cs میپذیرد. اکر مقدار
false OlegS y1 باشد. برنامه را خاتمه داده و موضوع را
به سیستم عامل گزارش میکند. اگر مقدار آر گومان
اا Pe EPH) pore
<i <5 <cassert> 2). s(asset (2/5
شاد ات
صفحه 283:
مثال ۶-۱۶ استفاده از تابع . . . برای رعایت
ا ۱
برنامةً زیر نسخة بهبودیافتهای از تابع ۰ .. . . مثال
1١-ء را آزمايش مىكند. دراين نسخه .از تابع
۵ ایا( شاد من
تا مشخص ore regear tpi eyed 10
ات تابع به تابع . . . . . ارسال میگردد تا
اگر آرایه مررتب نباشد برنامه به بیراهه نرود.
صفحه 284:
#include <cassert> // defines the assert()
function
#include <iostream> // defines the cout object
using namespace std;
int index(int x, int a[], int n);
int main()
{ int al] = { 22, 33, 44, 55, 66, 77, 88, 60 };
cout<<"index(44,a,7) = " << index(44,a,7) <<
endl;
cout<<"index(44,a,8) = " << index(44,a,8) <<
endl;
cout<<"index(60,a,8) = " << index(60,a,8) <<
صفحه 285:
bool isNondecreasing(int a[], int n);
int index(int x, int a[], int n)
{ assert(isNondecreasing(a,n));
int lo=0, hi=n-1, i;
while (lo <= hi)
{ i= (lo + hi)/2;
iam) ON ee الاأع: ()ا 1:
if (a[i] < x) lo = i+1;
-ح نط عواء 1-1:
return ۶
سکس 111 ] 1
صفحه 286:
1 fo epee] Bee CMa Opt
DEN pe ema 00 ا 0) ean se T |
20 606 2 0 فراخوانی(06۷)44,۵,7
و برنامه ادمه مى يابد. MS go Joy]
06044 3,8( SOP e|
6ف8اهرب نا 0500۱066۲68۵61۴9
كندكهدر اين كت برنامه متوقف (0 ۰
پنجرة | میدهد. 00
صفحه 287:
سلستفاده از لنواع سطلیشیور آیلیه -9
صفحه 288:
به خاطر بیاورید که انواع شمارشی به شکل مقادیر عددی ذخیره
میشوند.
اندازة آرايه. 5881-1 است زيرا 58:7 مقدار صحيح ۶ را
ا ا 0
0 2 ا ا ل peepee L114
استفاده از انواع شمارشی در برخی از برنامهها باعث میشود که
See precy 22 » شود. مثلا در مثال ۶-۷ کنترل حلقه به
شک
for (int day = SUN; day <= SAT;
day++)
باعث مىشود كه هر بينندهاى حلقة 5017 بالا رابه خوبى
صفحه 289:
تعپینانیاع -10
انواع شمارشى يكى از راههايى است كه كاربر مىتواند نوع ساخت خودش را تعريف
meee ا 0000
RED,ORANGE,YELLOW, GREEN, BL
یک نوع جدید به نام ۰ تعریف میکند که متفیرهایی از این نوع میتوانند
LORANGE pote ۱ ۱9
Re rePO nee er Fur care Reet tc Sea ۱
ا ل FDO SY ا Poa per
levee wo 14) 9:1 eel l| Reeeey
ان اس areca داز (elites
yas VIOLET+1
0
01
صفحه 290:
در . . میتوان نام انواع استاندارد را تغییر داد.
۱
استاندارد موجود تعريف مى كند.
نحو استفاده از آن به شكل زير است:
:5ةأات typedef ١
ل ا ل PC
wl Yl
صفحه 291:
ا 0 رآابه شكل زير بكار 1167ز
ببریم میتوانیم آرایهها را بدون علامت a
Pa
۹ ۶
tyr typedef
نات
بود
Inte
sos frequency[64]
صفحه 292:
per ل ا ان ل ean oy
به یک نوع موجود نام مستعاری را نست میدهد.
CRW ا ل ل Ce ye ST Reo toy
yee roe ae Ona oper ely
۷ كداز ا ل
به عنوان یک نوع استفاده ۰...» pe rae)
SO CPL e Sa ome era scien ss
در تابع 1 د رفته است:
صفحه 293:
typedef float Sequence[];
void sort(Sequence, int);
void print(Sequence, int);
int main()
{ Sequence a = {55.5, 22.2, 99.9, 66.6, 44.4,
88.8, 33.3, 77
print(a,8);
sort(a,8);
print(a,8);
a
صفحه 294:
void sort(Sequence a, int n)
SO رك ل ۱ (
for (int j=0; j<i; j++)
if (alj] > alj+1))
swap(alj],a[j+1]);
: دوباره به دستور 6016۴ 2۷0 نگاه کنید:
ee float Seguence
علامت براکتها [ eee! چیزی که از نوع 560016166 تعریف
شود سک ارانه است و ارت ۱۳ Sen aaa
صفحه 295:
آیلیههایچند بسعدی-11
همه آرایههایی که تاکنون تعریف کردیم. یک بعدی
SAD tp evow) ا
میتوانیم آرایهای تعریف کنیم که از نوع آرایه باشد.
eae ee 1
Srey eee een HP LIN Corl
يك آراية دو بعدی آرایهای است که هر خانه از آن. خود
يك آراية يك بعدى باشد.
یک آرايةهٌ سه بعدی آرایهای است که هر خانه از آن یک
ارابهة دو بعدی باشد.
صفحه 296:
صفحه 297:
ل Re emere ee toe 1۱
برنامهٌ زیر نشان میدهد که یک آرايةٌ دوبعدی چگونه پردازش میشود:
void read(int a[][5]);
void print(int a[][5]);
int main()
{ int a[3][5];
read(a);
print(a);
}
صفحه 298:
void read(int a[][5])
{ cout << "Enter 15 integers, 5 per row:\
n ۳
for (int i=0; i<3; i++)
{ cout << "ROW " <<j <<":";
for (int j=0; j<5; j++)
cin >> alilll =
صفحه 299:
void print(const int a[][5])
{ for (int i=0; i<3; i++)
{ for (int j=0; j<5; j++)
cout <<"" << afil[j];
cout << endl;
}
}
صفحه 300:
ee Ta RMT Tc Ta) | اا
row 0: 44 77 33 11 44
row 1: 60 50 30 90 70
row 2: 65 25 45 45 55
44 77 33 11 4
60 50 30 90 0
65 25 45 45 5
<<
صفحه 301:
1۱ ne ا Hp] Recap y)
ديكر بايد مشخص باشند.
ل 22
const NUM_STUDENTS = 3;
const NUM_QUIZZES = 5;
typedef 1915 Score[NUM_STUDENTS]
[NUM_QUIZZES];
void read(Score);
void printQuizAverages(Score);
void printClassAverages(Score);
صفحه 302:
int main()
Cae a ل
5 << "quiz scores for each student:\
read(score);
۹ نله averages 2۳۵
print 4 x ۱ ١ 2 rages(score);
ea ات
صفحه 303:
void read(Score score)
{ for (int s=0; s<NUM STUDENTS;
اروت
{ cout << "Student "<<s <<":
ny
۷
for(int q=0; q<NUM QUIZZES;
qt++)
cin >> score[s][q];
صفحه 304:
void printQuizAverages(Score score)
-) 10۲ (+جو :5۲0۴۱۲۲5 5۴۱۷۲ :0و ا)
{ float sum = 0.0;
for (int q=0; q<NUM_QUIZZES; q++)
sum += score[s][q];
الا۳0 Rats ير ا ع 1 6) cae OE
<< sum/NUM_QUIZZES.
<< endl; ’
11 @) ©
صفحه 305:
void printClassAverages(Score score)
{ for (int q=0; qa<NUM_QUIZZES; q++)
{ float sum = 0.0;
for (int s=0; s<NUM_STUDENTS; s++)
sum += score[s][q];
cout << "\tQuiz "<< q <<": "<<
sum/NUM_STUDENTS << endl;
0
صفحه 306:
7 eae)
ات۱۱۱۱ ۱۳ دوبعدى 0*7 نام
انتخاب شده. این باعث 6 ace
د که توابع خواناتر باشند. هر تابع از دو
تودرتو استفاده كرده كه حلقة 07 ۳۹
بيرونىء بعد اول را ييمايش مىكند و حلقة
SO Eee ey SPC ELE
printQuizAverages تلبع
هر سطر از نمرات را محاسبه و چاپ مینماید و
printClassAverages =
میانگین هر ستون از نمرهها را چاپ میکند.
صفحه 307:
۱ S| FOO ont a C2)
اين برنامه تعداد صفرها را در يك آراية سه بعدى مى شمارد:
اما = = = (int afJ[4][3], int ni, int n2, int
n3);
int main()
۱ ine ات ۱4۵,02۳ {0,0,9},{4,1,0};,
15777 211200179850
120,001 2091
cout << "This array has " <<
numZeros(a,2,4,3)
<<" zeros:\n";
صفحه 308:
مآ ,2ص غما ,1م غصا ,[2]1]41]3 الا ا
a
{ int count = 0;
for (int i = 0; i < nl; i++)
for (int j = 0; j < n2; j++)
for (int k = 0; k < n3; k++)
if (afi[jJ[k] == 0) ++count;
Kove
04
a
صفحه 309:
توجه كنيد كه آرايه جكونه مقداردهى شده است. اين
قالب مقداردهى به خوبى نمايان مىكند كه آراية مذكور
يى آرايه دو عنصرى است كه هر عنصرء خود يى آراية
Cone IY yer ل ل |
میباشد. پس این آرایه در مجموع ۲۴ عنصر دارد. آراية
۱۱13-۳۱
Reet eee
۱ - ۳۱۳۹۱۳ کار
{3,0,0,8,5,0,0,0,0,2,0,9}}; 8
هر سة اين قالبها براى كاميايلر يك مفهوم را دارند اماابا
نكاه كردن به دو قالب اخير به سختى مىتوان فهميد كه
كداء عتصر از ارانه: كدوام للق[ الجواهد داشت.
صفحه 310:
مب مس سر
صفحه 311:
جلسه هفتم
,اشارهگرها و ارحاعها «
صفحه 312:
آنجه در این جلسه می خوانید
ا 2
- ارجاعها
۰- اشارهگرها
ا
- حب مقدارهاء راست مقداره
- بازكشت از نوع ارجاع
ea 0 >>>
صفحه 313:
-عملکر ۱۱6۷۷
delete Si.c-_
ِا
- اشاره گر ثابت
-آرايهاى از اشارهكرها
ا FESS
ا لك
NULL; NUL-
صفحه 314:
هدف کلی:
آشنایی با اشاره گرها و نحوةٌ کار با آدرسهای حافظه
هدفهای رفتاری:
انتظار میرود پس از پایان این جلسه بتوانید:
- «ارجاع» را تعریف کنید و با استفاده از عملگر ارجاع به
متغیرها دستیابی کنید.
- «اشاره كر» ا 0 ا 1
مختلف ايجاد كرده و آنها را مقداريابى كنيد.
>> »
صفحه 315:
از یکدیگر تمیز دهید.
۱
- طريقة ۳ ۳9 ح ات۲۳۳2
pew SESS
Piro LONE eE SSCs 0
0 ا
-آرایههای پویا را در برنامههایتان ایجاد کرده و مدیریت
to
© زفاهونت وت -
صفحه 316:
(arene ry
رايانه را میتوان به صورت يك آراية بزرگ 00
9000 ا 29,5 »bi yo
در حقيقت حاوى آرايهاى به اندازة 0
خانه است که اندازة هر )۲۲۸-( An ey a
بايت است. So als
اين خانهدها داراى ايندكس صفر تا هضع هنع رعنا
هستند. به ا Bey CH Tres anes esa
صفحه 317:
آدرسهاى حافظه را با اعداد شانزدهدهی نشان
میدهند. پپس رايانة مذکور دارای محدوده آدرس
۲۳۳۱۱۳۱ 1
هر وقت كه متغيرى را اعلان 50 ۳
اساسی به آّن متفیر نسبت داده میشود: اس(
UE ان
مثلا اعلان 1١ ]1: نوع ]0 ونام 0و آدرس چند
خانه از حافظه كه 7
یکدیگر مرتبط میسازد. فرض کنید آدرس این متغیر
ها 5
شکل مقابل محسم کنیم:
صفحه 318:
1201 نام متغير,
در بالای جعبه است و آدرس متفیر در سمت جب
جعبه و نوع متغير, :]11 در زير جعبه نشان داده شده.
eer ل ل
Tee ا ا ا 0
داده شده استء متغير !١ يك بلوك جهاربايتى از حافظه.
را اشغال میکند که شامل بایتهای 00050660160
53 ا 2 ۳ ae
صفحه 319:
اكر متغير فوق به شكل 7-32 11أ: مقداردهى اوليه
شود. آنگاه بلوک اكات ريا ی زير خواهد بود. مقدار
۳ در چهار بایتی که برای الن متفیر منظور شده ذخیره
سم
لا نيدن
00050600۱
0200506060 5
0x0050cdc1 MOT Cee | 32 |
(۹۱۱4 0
۱ int
0x0050cdc4
0x0050cdc5
صفحه 320:
عملگر لوجاع -2
در ++ برای بدست آوردن آدرس یک متفیر میتوان از
عملگر ارجاع ۱ 60 استفاده نمود. به این عملگر «علمگر
آدرس, نیز میگویند. عبارت reOE SMAI S ۳ او
int main() a rie
int n=44; {
cout << "n=" <<n << endl;
cout << "&n =" << &n << endl;
}
صفحه 321:
۱ PLES ODL eye Lelckt toed
512*710 PON IC aeeTh
0* داده شده. اعداد شانزدهدهی را از روی علامت
1
میباشد. ۷۹
26 >
صفحه 322:
hed كد
یک «ارجاع» یک اسم مستعار یا واژهٌ مترادف برای متفیر دیگر است.
نحو اعلان يك ارجاع به شكل زير است:
type& ref_name = var_name;
0 en pe ay yan oe
Fete Sue en are ا
برلیآننام مستعار بسازیيم برلیم ثالهر لعلان
int& rn=n; // ۱5 asynonym for n
. یکارجاع یبانام مستعار برلی لستالته ٠
بايد قبلالعلانشده باشد
صفحه 323:
و
et aie 70 ا a
نیز کاسته شده و لگر ۰ : لفزلیشبابد
نیز لفزلیشب افته لست
صفحه 324:
همانند ثابتها. ارجاعها باید هنگام اعلان مقداردهی
Are eer cron reel ree pea Ay) 1
hee ۱( بنابراین کد زیر اشتیاه است:
Jf ERROR: 44 is not a variable
FED ep yen roe nye eens Sell ec aeie ge ce acy
بدانند ولی با نشان دادن یک هشدار اعلام میکنند كه یک
متفیر موقتی ایجاد شده تا ۰ . به حافظةٌ آن متغیر. ارجاع
داشته باشد.
صفحه 325:
درست است كه ارجاع با یک متغير مقداردهی میشود.
ا م م - ال نیست.
۱
حال آنن که ارجاع از فضای ذخیرهسازی و نشانی متغیر
دیزی نهر مبرد
صفحه 326:
ل هایمستقل_یستند *
int main()
) 1۳0۲ ۱۶4۲
int& rn=n; // rn is a synonym for n
cout <<" &n="<<&n <<", &n=" << &mn <<
endl;
int& rn2=n; // rn2 is another synonym
forn
int& rn3=rn; ~—// rn3 is another synonym
forn
cot cae "frn
صفحه 327:
۸۱ Se EVES CT Wee neem erty Or et eeey
.دنتسها١ ارجاعهايى به ١3 و1١2 است. (1او
۲03 خروجی نیز تایید میکند که آدرس ۲۳ و ۲02و
با آدرس ۲۱ یکی است.
ارجاعها بيشتر براى ساختن يارامترهاى ارجاع در توابع
به كار میروند. roid میتواند Rv-7) 1 0 راكه
صفحه 328:
010000
مىدانيم كه اعداد صحيح را بايد در متغيرى از نوع int
نكهدارى كنيم 0000 را در متغيرهايى از نوع
float
به همين ترتيب كاراكترها را بايد در متغيرهايى از نوع
16 وف ا ا FL ee ee
bool. |
صفحه 329:
عملگر ارجاع آ درس حافظةٌ یک متفیر موجود comp)
دست مىدهد. مىتوان اين درس |
ذخیره نمود.
یک ادرس در ان ذخیره میشود
براى اين كه يك اشارهكر اعلان كنيم, ابتدا بايد
مشخص کنیم که آدرس چه نوع دادهای قرار است در
آن ذخیره شود. سپس از عملگر اشاره * استفاده
میکنیم تا اشارهگر را اعلان کنیم.
صفحه 330:
برای مثال دستور :
- آدرس يك و 7
اشارهكرى از نوع * ذخيره كرد و آدرس
يك شوازنوع 93]6]رافقط مىتوان در
اشارهكرى از نوع yee no ل ل ام
ECY ا و 6 025500 00
اده
كه نوع متغيرهايى است كه اين اشاره كر آدرس
آنها را نگهداری میکند و نام
ار
صفحه 331:
Com به كار كيرى اشارهكرها
ا ل ل ل ان
0
int main()
1 اس
کیک ۰ - ۸ کی کک ۰ سل <<< Goult
&n << endl;
0 pn=&n; // pn holds the address
زو
cout<<" = pn = "<< pn << endl;
م يل ا
صفحه 332:
متغیر ۲۱بامقدار ۴۴ مقداردهى
oP ree) |
dO] 0Lor-Afolo Le 00
7( 0
]١ ۳ مقداردهى شده. يس
مقدار درون Lig ply PN
6 0 است (خط دوم
و
كو
00064100
int
0x0064fded
بآ "۱
int
صفحه 333:
اما . یک متفیر مستقل است و آدرس مستقلی دارد.
ا ph سم خط سوم
دارد.
وقتی میگوییم ۰ 0
به 2 آشارهمىكند» an
pn لك
it قرار دارد. ror
صفحه 334:
حفللیبلیی5
فرض کنید ۱ دارای مقدار ۲۲ باشد و PN اشارهگری به ۲۱
باشد. با اين حساب بايد بتوان از طريق 01١ به مقدار PY
رسید. با استفاده از * میتوان مقداری که اشارهگر به آن
اشاره دارد را به دست آورد.
به اين ا ۱
صفحه 335:
| eee Op Re
FEY Re RC anew York a ant Oa Pepe eae Pepe]
int main()
{ int n=44;
cout << "n="<<n <<", &n =" << &n <<
endl;
۲ - ۱ ۱
هر دو یک مقدار دارند.
52 0 ited 5 عرس الى سد ol
cout << "*pn =" << *pn << endl;
صفحه 336:
{ int n=44;
cout<<" n="<<n << endl;
cout<<" &n=" << &n << endl;
int* pn=&n; // pn holds the address of n
cout <<" pn =" << pn << endl;
cout <<" &pn =" << &pn << endl;
cout <<" *pn =" << *pn << endl;
int** ppn=&pn; // ppn holds the address of pn
cout <<" ppn =" << ppn << endl;
cout << " &ppn = " << &ppn << endl;
cout << "*ppn = " << *ppn << endl;
cout << "**ppn = " << **ppn << endl;
صفحه 337:
Aid
int م
ES
0
در برنامهٌ بالا متفیر ۱ از نوع ]0 تعریف
شده. 0۲۱ اشاره گری است که به ۱ اشاره
دارد. پس نوع 0۲ باید ]10 باشد. 001
آشارهگری است که به 01 اشاره میکند.
پس نوع 00۲ باید ]10:* باشد. همچنین
چون 0۲ به 0۲۱ اشاره دارد. پس
۴ مقدار 01۱ را تشان میدهد و چون
0 به ۲۱ اشاره دارد. پس *۲۱( مقدار ۲۱
fa) <
&n
0x0064fd78
مم
0x0064fd78
&pn
0x0064fd7c
*0۲0 < 4
ppn
020064107
&ppn
0x0064fd80
صفحه 338:
TES ی
0 00
صفحه 339:
es ae
باشد (مثل 4012) بك اشارهكر به أن نوع را
تعريف مىكند واكر ييشوند يك اشارهكر
ie 2 ne ۳ اشد ول
صفحه 340:
اا ان
يى دستور جايكزينى دو بخش دارد: بخشى كه در سمت
چپ علامت جایگزینی قرار میگیرد و بخشی که در سمت
ال OED CES VOCS BU MPe Be] e rune) Corner إن
55 متفیر 0 در سمت چپ قرار گرفته و مقدار ۵۵ در
سمت راست. اين دستور را نمىتوان به شكل 628 -١1ر
نوشت زيرا مقدار ه20 يى ثابت است و نمى تواند مقدار
بكيرد. يس هنكام استفاده از عملكر جايكزينى بايد دقت
كنيم که چه چیزی را در سمت چپ قرار بدهيم وجه
چیزی را در سمت راست.
صفحه 341:
ee ela See ned Teeth anes
peel eae eas ee ene BE)
Pete ele Toe Oren Ty aaa el Soc
0 ا Ep Com eeprom pc
كلى اشنا) جبامقدار هستند وليترالها 0
(مثل ١0 و "886") راست مقدار هستند.
eye =
صفحه 342:
1 Lawl yo Coll SL
const int MAX = 65535; // MAX is an
Ilvalue
oN ا oe are) epee e pe oe] |
استفاده کرد:
MAX = 21024; // ERROR: MAX is
constant
Ceri Sebel per Sa sey Berio Me DRC elec ac oy Caner eo
میشود. مثل آرایهها:
int a[] = {1,2,3}; // >ا.0
صفحه 343:
مابقی چپٍمقدارها که میتوان آنها را تفییر داد. چپمقدارهای «تفییر
ea cer ney eed Ser Sane) 0/7 |
رز
int& r =n; //O.K. nis an lvalue
pert Dee CM rt USD Deca Dee PRU Te) enc
int& r = 44; // ERROR: 44 is not an Ivalue
int® r = n++; // ERROR: n++ is not an
lvalue
int& r = cube(n); // ERROR: cube(n) is not
anlvaluel—L_values 2-R_values
Sealy ey Sani] cose یک تابع چپمقداز
SONS ey eee Seem ا Te)
صفحه 344:
Ame: 5-9 ۰
بليكشلز نوع لوجاع -7
۷
ارجاع را ديديم. اين دو شيوةٌ تبادل در مورد بازذكشت از
تابع نيز صدق مى كند:
بازكشت از طريق مقدار و بازكشت از طريق ارجاع
توابعى كه تاكنون ديديم بازكشت به طريق مقدار داشتند.
میتوانیم تابع را طوری تعریف کنیم که به جای مقدار.
Ree ل 2 ان
را بازكشت دهد., يك ارجاع به 117 را بازكشت دهد.
صفحه 345:
1
ل لك
مقدارند. به اين ترتيب تابع را فقط در سمت راست
یک جایگزینی میتوان به کار برد مثل:
کی
ولتي و سس ۳
خواهد بود زيرا ارج ندار هستند. در این حالت
ا قرار داد مثله
TiS 85: ب©)
صفحه 346:
Sea ho eee Dl ee eee سس
ارجاع را به عنوان يسوند نوع باز كشتى درج كنيم.
ea ea ا
eM Ce aL aD)
return (m>n?m:n);} {
int main()
و اك ل لكر 01
کر الم
endl;
max(m,n) = 55;
cout "," << max(m,n)
<<e
صفحه 347:
بت متا از بين 100 و2 Lao ۳ بيدا اكرده
رجاعى به آن را باز مى كرداند.
ال زر 500
ل 0
أو يمسي بيم 55 ت 6لا ی Je
یش ماه رضم PP ern)
> a> \ ly >
صفحه 348:
اخطار:.
وقتی یک تابع پایان مییابد. متفیرهای محلی آتن نابود
م ال ا ك2
الت ا ل ا 00
۱
داده شده ممکن است به یک مقدار دا ار
ا ل ينا
ا ۱
onpeemrel Sen ees FCS) 0
ees EO Bs eo @*
2 ( ۴
صفحه 349:
و
int& max(int& m, int& n)
AUS SSIES Bee eew) ES oe ees eels
یک ارجاع درآمده است.
۷-٩ 3 به کارگیری یک تابع به عنوان عملگر
eet ee
صفحه 350:
float& component(float* v, int k)
{ return v[k-1];}
int main()
{ float v[4];
for (int k = 1; k <= 4; k++)
component(v,k) = 1.0/k;
for (int i = 0; i < 4; i++)
athe cata AY ere cae) SY Se Mle
endl;
>
صفحه 351:
تابع 601908010610۴ باعث میشود که ایندکس
Shy eae ae 000
م ا ل rT
bre Eoen ah C2 ل 0
eye =
صفحه 352:
ET
گرچه اشاره گرها از انواع عددی صحیح نیستند اما بعضی
1 |e
حاصل اين مىشود كه اشارهكر به خانة ديكرى از حافظه
اشاره مىكند. اشاره كرها را مىتوان مثل اعداد صحيح
افزايش و يا كاهش داد و مىتوان يك عدد صحيح را به
0 ا cen Fry
كاهش اشارهكر بستكى به نوع دادهاى دارد كه اشاره كر
به آن اشاره دارد.
مثال ۷-۱۰ پیمایش آرایه با استفاده از اشاره گر
این مثال نشان میدهد که چگونه میتوان از اشاره گر بزاي پیمایش یک آرایه استفاده نمود:
صفحه 353:
int main()
{ const int SIZE = 3;
short a[SIZE] = {22, 33, 44};
cout << "a =" <<a << endl;
cout << "sizeof(short) = " << sizeof(short) << endl;
۳ end = a + SIZE; // converts SIZE to
:0 ع سند غتمطد
for (short* p = a; p < end; p++)
{ sum += *p;
cout << "\tp
cout << "\t *
cout << "\t si
1
cout << "end =
}
صفحه 354:
این مثال نشان میدهد که هر گاه یک اشاره گر افزایش
يابد. مقدار كن به اندازة تعداد بإيتهاى شيئى كه به كن
ا 0
RPI eC Chi peer ota
reed ae a cee tre itoel) ۱
Eee Ron ton StS) r
eye =
صفحه 355:
۱1
float* p =a; //p points to a[0]
++); // increases the value of p by sizeof(float)
eye =
صفحه 356:
اكر 1ج
03
ها ابا
00
eee 1
نگاه
سس
مقدار
۱
تس 1
د ae
om ۱ ee
ا
3 مى
ose ae
۱:6 ‘
Dye.
@)
صفحه 357:
ene SBE م ااا اا gre re
float* م = a; // p points to a[0]
۳ // now p points to
a[5]
eee ee neey ا لك
دارد: اكر اشاره كر را بيش از ايتدكس آرايه افزايش
دهيم: ممكن است به بخ شهايى از حافظه برويم كه
هنوز تخصيص داده نشدهاند يابراى كارهاى ديكر
تخصیص یافتهاند. تغییر دادن مقدار اين بخشها باعث
بروز خطا در برنامه و کل سیستم میشود. هميشه باید
اه ای و
صفحه 358:
کد زیر نشان میدهد که چطور این اتفاق رخ میدهد. .
float a[8];
عط ما غمعمعاء غدها 6ا عامادم // ([8]7 > م ee)
۰ ید 000 Cees
= 222 // TROUBLE!
eal 00
ره ا وجود دارد. نام آرايه در حقيقت يك
0-000 660050 کر يت
صفحه 359:
* مثال -١١ يبمايش عناصر آرايه از طريق آدرس
int main()
{ short a[] = {22, 33, 44, 55, 66};
عت امن کی ۰ - ۷2 رل ey ce سک ۲ ey کت ۱۵0۳۵۲
endl;
for (short* p = a; p <a +5; p++)
a = Ox3fffd08, *a = 22 - 30 <<
Ve p = Ox3fffd08, *p = 22
p = Ox3fffd0a, *p = 33
} p = Ox3fffd0c, *p = 44
p = Ox3fffd0e, *p = 55
p = Ox3fffd10, *p = 66
p = Ox3fffd12, *p = 77
صفحه 360:
’ ۳
صفحه 361:
5 [] مثل عملگر مقداریابی + رفتار میکند. هر دوی
ةا رن درس ی
1190 <<
a[1] == *(a + 1)
a[2] == *(a + 2)
پس با استفاده از کد زیر نیز میتوان آرایه را پیمایش نمود. .
for (int i= 0; i < 8; i++)
OS انلسارم
صفحه 362:
مثال ۷-۱۲ مقايسة الگو
در این مثال, تابع 0106 در 7 ا 0 ۳ be
ee era 1 برمیگرداند که 32 از آن
sre eestor Ev ona Pa Le)
1م + 31 > 1لمع *رمطه 4
for (short* p1 = al; pl <end1; pl++)
Lo) eV)
for (int j = 0; j <n2; j++) {
s لاسن
Da emu cd
5
۳ (۵
صفحه 363:
ان
{ short a1[9] = {11, 11, 11, 11, 11, 22, 33, 44, 55};
DeVoe Coase eS PPE Se
0 ا ل
Coa ا ا ا on a Pea
ا ل 1 لت
coe
) نم >> NEY co Moe cle EERE << p << endl;
oN se a) a)
امع ار
ا oa 1 (( SS
صفحه 364:
Array al begins at location Ox3fffd12
Array a2 begins at location Ox3fffdos
Array a2 found at location Ox3fffd16
Ox3fffd16: 11 Ox3fffd08: 11
Ox3fffd18: 11 Ox3fffd0a: 11
Ox3fffdla: 11 Ox3fffdOc: 11
Ox3fffdic: 22 Ox3fffd0e: 22
Ox3fffdle: 33 Ox3fffd10: 33
صفحه 365:
ث 0
وقتی یک اشاره گر شبیه اين اعلان شود:
۲1081۴ 0: // pis a pointer to a float
یک فضای چهاربایتی به ۵ تخصیص داده میشود (معمولا
1
0 cede
قرار نگرفته. به چنین اشاره گری اشارهگگر س رگردان
مقداریابی با ارجاع کنیم با خطا مواجه میشویم.
صفحه 366:
مثلا دستور:
در نا
has been allocated for *P
.زیرا 0 به هیچ آدرسی اشاره نمیکند و سیستم عامل
Ve Ce Fae Oper re heer رفع اين
Ey ey no a Cee SE eke Tee cece
float x = 0; // x cintains the value 0
float* p = &&« 9 ای
*0 < 3.14159: I کف
value to addr: ۱
صفحه 367:
۱
۱
اختصاصی د و در ترتیب از سر گردانی.
خارج میشود. این : ربا استفاده از عملگر ی
float* p;
P = new float; // allocates storage for 1
float
غ03 6غ علدنا كلطا ك5موادكة .0 // (3.14159 ۳
دقت کنید که عملگر Ts فقط 0 0 قدردهی میکند ته os
0 0 میکند میتوايم سا خط فوق را با هم ترکیب کرده و
صفحه 368:
۱ seca ter
| oe fee eee ee nero)
آدرس آسن به 0 تخصيص مىيابد و همجنين مقدار
a Va Ve Seve tee eT Lt
10111010 0-7 ea
لك tear Teel ad برمی گرداند. ی
صفحه 369:
با استفاده از كد هوشمند زير مى توانيم مراقب باشيم كه
اشارهكر تهى ايجاد رح
double* p = new double;
if (p == 0) abort(); // allocator
failed: insufficent memory
else *p = 3.141592658979324;
در اين قطعه كدء هر كاه اشاره كرى تهى ايجاد شد.ء تابع
a3 لل ا 0
صفحه 370:
۱ eee Re Te Ce Bee ate cece ey Ld
مقداردهى كرد. روش اول:
float x = 3.14159; // allocates
named memory
و روش دوم:
float* p = new float(3.14159); ih
allocates unnamed memory
Perera ا ا ا ل ل Comp)
مى يابد. در حالت دوم حافظة مورد نياز در زمان اجرا و به يك
ع م اا |
0
صفحه 371:
delete عملكر -٠١
عملگر -.. - ۰ عملی برخلاف عملگر .۰۰ : دارد. كارش اين است
كه حافظة اشغال شده را آزاد كند. وقتى حافظهاى آزاد شود. سيستم
ب ل ا ل 0000
CCE Foe ا | الل ل 3
کار برد که با دستور 6۷۷ ایجاد شدهاند. وقتی حافظة يكى اشاره كر
ال ا ا ا Ree ome peony
eg 0210000
float* p = new float(3.14159);
delete p; // deallocates q
۲۱ ۱99 0 8۳۵۰ نس نس ۱«
deallocated
صفحه 372:
RO گر + مد امرس
آسن تخ Lae lene
2 ل
anaes EO ۳ و
ETD doen re See SS) ان ۱۳2
میگویند.
اشارهكر به يكد شىء ثابت را نمىتوان آزاد كرد:
const int* p = new int;
ععصی ما عونمم عنعاع۵ خمهمی :۴8۴۵8 ۸۱ :0 fell lk
صفحه 373:
۱
foes Pp cage] eevecene\erowi ie (-] (=| epee bey Pee] |S) prover
ا RC pee ape er]
ی ۸ تاه ری ۰ ۱ 3.141597= float x
3.14159
> ff p contains the address of x
= /f WARNING: this will make x
free
کد بالا باعث میشود که حافظةً تخصیص یافته برای ۱6 آزاد شود. این
ا ا ا ل ل رك
صفحه 374:
آوليدهاوبويا -11
نام آرايه در Care ROM Cr Fea ا 0
'تخصيص داده مى شود:
١ 0 0 ل رت ا ا ا 0
floats
float* const p = new float[20];
os Cree ae ل ل ا e e- me)
Rear ل ora or. me) Ca eee ep PES eon (el- Le
Seren eel Mel SPERM eB CST ke eg Sie Teter
شود. وقی برنامه اجرا شود. به هر حال حافظة مربوطه تخصیص خواهد
یافت حتی اگر از آن هیچ استفادهای نشود.
صفحه 375:
میتوانیم با استفاده از اشاره گر. آرایةٌ فوق را طوری تعریف
ONE e Tone MEST er ete Rarency ۱9
يابد:
float* p = new float[20];
Pepa ies eee Cone lear Fen acm] pyar)
0 Meee yen ead BCs
EC Bp ree heme t fe Tia ل
بستهیندی پویا ۳ یا «بستهبندی زمان جرا» میگویند.
صفحه 376:
ee irae ی انا و
ید ماه pee 9
۵ ره
صفحه 377:
مثلل ۷-۱۵ استفاده از آرایههلی پویا-
0
تا خفن دا سییر war
01 a SS
ناه << وه ِ
1
Rear Clo Beat}
Pea en ao
cout rae حك = ae a ۹ 7
صفحه 378:
int main()
0 اا Mer MC Shae TT] Let |
pointer
int n;
get(a,n); 1۱/ now a is an array of n doubles
print(a,n);
85۱6۶55 || — J] now a is simply an unallocated pointer
again
get(a,n); // now a is an array of n doubles
print(a,n);
}
صفحه 379:
Enter number of items: 4
Enter 4 items, one per line:
1: 4
2:77.7
» نمه عدم
ل
44.4 77.7 22.2 88.8
Enter number of items: 2
Enter 2 items, one per line:
1: 3.33
2: 9.99
9 د3.د
سس مت 7 EELS
صفحه 380:
۱ 9 kes Solid
۳ ثابت» با 7 ثابت» تفاوت ro Sy «اشاره كر به
این تفاوت در قالب مغال زیر نشیان داده شده است:
ثابتها
دراين كد جهار 0(
اشارهكر ثابت 0ع. اشاره به يك ثابت ©0,: اشاره كر
ثابت به يى ثابت 066 :
صفحه 381:
Man int ل
Or //a pointer to an int و تلا
TR att * پر یی
ی fone 10K: increm
ی al eo تا ی
aac ‘// OK: increments int *cp_
cena ی سس Rac
/ را
ا نايع د عم * غم غعممء
illegal: int *pc is const /1 0
So : 1
مس وی سم تس عم غعموء اس
: : صر ا
صفحه 382:
صفحه 383:
ee yeureren by Fe ve
میتوانیم آرایهای تعریف کنیم که اعضای آن از نوع
000
float* p[4];
اشارهكرى El Lets ewe ay ap)
به 11938])اعلان مىكند. عناصر اين آرايهرامثئل
اشاره كرهاى معمولى مى توان مقداردهى كرد:
new float(3.14159); = [0]م
p[1] = new float(1.19);
صفحه 384:
1
مثال بعد نشان میدهد که آرایهای از اشارهگرها به چه
دردى مىخورد. از اين آرايه مىتوان براى مرت بكردن
یک فهرست نامرتب به روش حبابی استفاده کرد. به جای
ا 1۱۳
_— 5
double
ol a)
/
double
صفحه 385:
مثال ۷-۱۷ مرتبسازی حبابی غیر مستقیم.
sort(float* p[], int n) لت
ی 9
for (int i= 1; i <n; i++)
for (int j = 0; j < n-i; j++)
if (*pEj] > *plj+1))
۱9 :انام - لت
Cie tara
لي الل
1
۵ ( ته 7
صفحه 386:
تابع 050۳6 آرایای از اشارهگرها را میگیرد. سپس درون
حلقههای تودرتوی 80۴ بررسی میکند که آیا مقادیری که
Sree SIS Es] |
ere SEDC Srv eer ereeye es]
Pen eee Tompe Tee Rte ttea elt Bice
باشیم. آرایهای داریم که اشاره گرهای درون آنن به ترتیب
قرار گرفته اند.
۵ ( 2
صفحه 387:
14-7 اشارهگریب داشاره گر هیگر
۱۱ CCID Fo ا CED Fo Oe)
char c = 't';
char* pc = &c;
char** ppc = &pc;
char*** pppc = &ppc;
*oppc = 'w'; // changes value of c to
0
2 | ome SecA CNet =A BET Scr SF] oLom) es
اشاردكر ©0است و اشارفكر 0006 هم به اشاردكر 006 اشارة دارد.
صفحه 388:
pppc | ~
PPE)
cs
pe
ki
با این وجود میتوان با اشارهگر 20۳] مستقیما به
متغیر > رسید.
صفحه 389:
ل ل
owe gC oe Ngee TT ا 1 0 002
این است که نام یک تابع مثل نام یک آرایه. یک
ones Row eer 9 | رز
ere oa BEE mel ROT PEN SCN mc ieee
گرفتهاند. پس بنابر قسمت قبل اگر اشاره گری به تابع
اعلان کنیم. در اصل اشارهگری به اشاره گر دیگر
تعريف كرددايم. اما اين تعريف. نحو متفاوتى دارد:
int f(int); // declares function f
int. (*pf)(int); // declares function
pointer pf
صفحه 390:
یچ تسس ما
این که 0۴ اشارهگری به یک تابع است. بعد از آن یک
تا Po
که 0۴ به آن اشاره مینماید. پارامتری از نوع 10 دارد.
pee Dice ed Tedd ioc
(6 ۳
صفحه 391:
فايدة اشارهكر به توايبع ايناست كهبهاين طريق
میتوانیم توابع مرکب بسازیم. یعنی میتوانیم یک تابع را
به عنوان ار كومان به تابع ديكر ارسال كنيم! اين كار با
استفاده از اشاره گر به تابع امکان پذیر است. 6 .
۷
اد
nS
70
«8
صفحه 392:
مثال ۷-۱۸ تابع مرکب جمع
تابع 051060) در این مثال دو پارامتر دارد: اشارهگر تابع 0۴] و عدد صحیح 0:
int sum(int (*)(int), int);
2 pea ال
‘cout << sum(cube,4) << oe
} 3 ( ۵
صفحه 393:
دیگری به عنوان آر گومان به آن ارسال شده. هنگامی که
(511101)500376,4 فراخوانسی شود مقدار
square(1)+square(2)+square(3)
eyes STEELE C Oe
ca COTS: TL Le-1 4 fopes ۳
فراخوانی ۰ (5۳0۵)500۵۲6,4 مقدار
ا
را ی از الم نس زور ركه
صفحه 394:
int sum(int (*pf)(int k), int n)
>) // returns the sum f(0) + f(1) + f(2) + ... + f(n-1):
int s = 0;
for (int i = 1; i <= n; i++)
s += (*pf)(i);
ica Hy
y
int square(int k)
calc}
1
int cube(int k)
}
صفحه 395:
ue 5 ink 50010 56 0 علبلا
dil Foo در رتايع 2
ap oo erase ee eran aed
EOE Ree ee ee SELLS
27 هد
aes
صفحه 396:
اب
تب یا
ROTC Ce) Neen
ا POROUS (TCL Beaver ana
اشارهگر 8۴] فرستاده میشود. با استفاده از عبارت
۱
am: eS eee
صفحه 397:
0
ثابت صفر (۰) از نوع 1108 است اما این مقدار را به هر نوع بنیادی دیگر
مى توان تخصيص داد:
char c = 0; // initializes c to the char '\O'
short d = 0; // initializes d to the short int
0
int n = 0; // initializes n to the int 0
unsigned u = 0; // initializes u to the unsigned
int 0
float x = 0; // initializes x to the float 0.0
dnithle 7 — nN: Tl initializveac 7 tr the doiihla
صفحه 398:
۳ e
مت oe Coe PRES SB Cease
اشياى كاراكترى به كار رودء به
الالا است. اللا معادل كاراكتر ۳۹ ees
9
صفحه 399:
re ey CLL mies en Kees Te eee tee) و
که ادا آن را 1 لالا! كنيم تا مقدار زبالة آن پاک شود. اما هميشه باید
cpeel eee Se 1
int*p = 0; //p points to NULL
1D ee ۱/۵ ea ae
fo OS لوو ERI 1
1
حالا دستور 10222 oe la eet صفر نباشد. میدانید که
en 2
1 ta 7
صفحه 400:
اشارهكرها را نمىتوان ناديده كرفت.
آنها سرعت يردازش را زياد مىكنند و كدنويسى را
کم
با استفاده از اشارهگرها میتوان به بهترین شکل از
حافظه استفاده کرد.
Peri eee Me ede Tene PED edn eee Do ney
کارآمدتر ساخت.
صفحه 401:
صفحه 402:
جلسه هشتم
3 استاندار۵»
chan,» کاراکتری و فابلها در C++ و
صفحه 403:
آنجه دراين جلسه مىخونيد
"| مروری بر اشارهگرها
0
|
1 ات اش ما
0
| آرايهاى از رشتهها
2) oe See on ee
صفحه 404:
0 1
aoe 1 به تبادل دادهها
ری عونت
سك
سها و اصولاولیة به کر گیری
© 5000-0
آنوع a ۱
3
©
صفحه 405:
هدف کلی:
معرفی رشتههای کاراکتری به سبک و 2بب+و
نحوةّ ایجاد و دستکاری آنها و همچنین نحوةٌ
استفاده از فايلهاى متنى براى ذخيره سازى و
بازيابى اطلاعات.
صفحه 406:
Seon eke Sees See Eg STC ere
en ENEMY ا Re Noes
تولبع معرفی شده عضو 70 و 7۷ را شناخته و وظیفةً هر یک را -
شرح دهيد.
رشتههاى كاراكترى به سبى 0)++ استاندارد را ايجاد نماييد.
مفهوم دورودی قالببندی شده؛ و دورودی قالببندی نشده را -
1 ToBI DT FO CR Ley
نوع 2ات را شناخته و رشتههايى الم دع لجان لاك ريا -
rc 1 ل be feat a
ory ایل متدی نوشته یا از
0 > هارت
صفحه 407:
:مقدمه
دادههايى كه در رايانهها يردازش مىشوند هميشه
ا نیستند. معمولا لازم است که .۰ ۰
تا
= زارت و a عر Sinan شردند:
ود 0 Se eee
در اين خلشه بررسى مى كنيم كه محر اطلاعات
ترا
شكل دلخراد باه شروبتي 0 در همين راستا
توابعى معرفى مى كنيم كه انجام اين كارها را آسان
می کنند.
صفحه 408:
Le TSE.) ان
یک اشاره گر متغیری است که حاوی یک آدرس از
حافظه مىباشد. نوع اين متغير از نوع مقدارى است
كه در آن آدرس ذخيره شده. با استفاده از عملكر
ره
ee ieee nga sy را
مقداری که در بک درس قرار دارد را مشخص
کنیم. به تعاریف زیر نگاه کنید:
۰2 ۱
ل
صفحه 409:
رشتههاى كاراكترى در 0
در زبان ++ یک درشتة کاراکتری آرايهاى از
کاراکترهاست که این آرایه دارای ویژگی مهم زیر است:
۱- یک بخش اضافی در انتهای آرایه وجود دارد که مقدار
آن. کاراکتر 424 بعنی ۰۱۱ است بس تعذاد کل
ا ل ا ا
٠” - رشتة كاراكترى را مىتوان با ليترال رشتهاى به طور
مستقيم مقدا ركذارى كرد مثل:
beet] = “are:
Pay Ripe were rep] uel ie Cam vecer ety
_ 9 HN gir 9 i و ot و ا
صفحه 410:
[۱ LTS eo Pee Cee
جاب کرد. مثل:
عوك >> الور
orl ee) ا ل ا ل 0 یکی
يكى به خروجى مىروند تا وقتى كه به كاراكتر انتهايى ١١
ا
© - يى رشتة كاراكترى را مىتوان مثل يك متغير معمولى از
ورودى دريافت كرد مثل:
عه << وأو
در اين صورت. همة كاراكترهاى وارد شده يكى يكى درون 2
cIP TIC ال aS ee ete Ree
Sen ST Sy) ا See
براى دريافت همة کاراکترهای وارد شده جا دارد.
صفحه 411:
۵ - توابع تعریف شده در سرفایل <72:0> را
0 One roe
Cee Oana Shes
توابع الصاق رشتدها Oe ae RO aa
توابع مقايسة رشتهها 2۷۰۲() و 2۲()
0
صفحه 412:
رشتههاى كاراكترى با كاراكتر ١ خاتمه مىيابند
ا کوچک زیر نشان میدهد که کاراکتر به رشتههای کاراکتری الصاق میشود:
QOist wort
دي اك دم
Por (iti = O; 1 < SG; i++)
Pout << "s[" <<i << "] =" << 5[i] << “lu
۱
صفحه 413:
رشتة کاراکتری < دارای پنج عضو است که
سس لا کاراکتر ۲ مى باشد. تصوير
خروجى اين مطلب را تاييد مىنمايد.
ا لي
میشود. هیچ چیز چاپ نمیشود. حتی
ا 0
خط آخر خروجی. عضو پنجم را نشان می
دهد كه ميان دو علامت ايستروف هيج
جيزى جاب نشده.
5 ۰
© د 0 0 ه
صفحه 414:
ورودی /خروجی رشتههای کاراکتری:
PRU TRUS DIC ae eas Ome) 52
رادريافت كرده يا نمايش داد.
یک ا ا 3
در بخشهای بعدی به آن خواهیم پرداخت.
CEE TD) ل Pe)
IBY ا 0
صفحه 415:
سل سیر رزش ساده درراثت ز نمایش رشههای 1g ASUS
در برنامة زير يى رشتة كاراكترى به طول 9 كاراكتر اعلان شده و
کلماتی که از ورودی خوانده میشود در آن ا ل 0
Vc
24
0 aes
۱ cout << "WW" << word << "\"\a
Avda ca) it
۱
صفحه 416:
0 ل ro) nd
Pe Te ee TCS Oe era |
ore ع
تست
pi. 5
ا ا ل ةا
Te) ا ل ل et ge
eevee, EM y Cr NO Una رت
عضو را در ادامه خواهیم دید.
فراخوانى CA coca) باعث لمع یت
درون 7 خوانده شود و مابقى كاراكترهاى وأرزد شده تاديده
0
صفحه 417:
ceo لد ار
:ابن برنامة ورودى راخط به خط به خروجى مى فرستد
0
۱ W|;
le
گر باس بت ۱۱
1 ) (۱/۷ > ۷۳ ۶۱ >
لسار
j
صفحه 418:
سم باسه بارامتر
آتابع نا ۱ |
ی Bye) 0غ
ee
نما موز
3
oO
eos
2116 محا ی ۱
١ (١ 5
صفحه 419:
تابع للا
ES TO) ee alee Sel
من كلدت وق ».٠ل كاراكترفارا ب موظيت درون
( حاص دز
0
صفحه 420:
ال
برنامة زیر اولین حرف از هر کلمة ورودی را به حرف بزرگ تبدیل
كرده و آن را مجددا در خروجى جاب مى كند:
مس
se ae son ۱
|
۱
ی
و
6١ ( 49
صفحه 421:
رب اس م8
با استفاده از برنامة زير» تابعى آزمايش مى شود كه اين تابع اعداد صحيح را از ورودى استخراج
re
تس درا
۱0
لل 00
و اه او سس || DH تا
jan $< q7 << "+ "<< << "=" << te << eel
t
ماس(
ae
et
re Ac (a)
9 رت ۱
عمس مد ناما ةقح // Sona
اما جارجدحت 3 I read os به << وم
صفحه 422:
۱ الل LB Tel)
Qist ext tsi
اس
vin 0
(() ممه -
او
> << موز
۱
0
حون
١ (SS
@)) )) ‘SS
صفحه 423:
1 UT
در مثال 8-5 به تابع 2007 اشاره شد.اين فقط يكى
از توابعى است كه براى دست كارى كاراكترها استفاده
hb pw 9 4S pila lw dg 50 كم
"- .. . تعریف شده به شرح زیر است:
cue 2
int isalnum(int c);
لگر > کاراکتر الفبلیییا عددی باشد مقدار غيرصفر وكينفه صفر 101132[ 152()
را برمیگرداند
int isalpha(int c);
ee en ere Te bs eae Ll لمق
برمی گرداند
صفحه 424:
شرح
1 ETT ee
۱ اكر © كاراكتر
ESTES eed
int isdigit(int c);
اگر 6 کاراکتر عددی باشد. مقدار غیرصفر و در غیر ن.
ل
int isgraph(int c);
اگر 6 کاراکتر چاپی و غیرخالی باشد مقدار غیرصفر
SS eye a ee)
int islower(int c);
Pope Ie pee as Re eC ere peo ۳
صفر را برمى كردائد
int isprint(int c);
اگر > کاراکتر قلبل چاپ باشد مقدار غیرصفر و در غیر
آنه صفر را برمی گرداند
نام تابع
Oiscntrt
Qisdigit
QOisgraph
QOislower
QOisprint
صفحه 425:
ار
int ispunct(int c);
اگر > کاراکتر چلپی به غیر از حروف و اعداد و فضای خللی باشد. مقدار غیرصفر
برمی گرداند وگرنه مقدار صفر را برمی گرداند
int isspace(int c);
ال res Cae a Lee een eC
۱ EE Deel) en
ا اي ل a
int isupper(int c);
ل رن coda LS Lal nl dB alc RSS ea ee
int isxdigit(int c);
OI erry eee re Peary Pe a ONC Pe CeCe
Dr ier cana cy Cece anne COC
باشد. مقدار غیرصفر برمی گرداند و گرنه مقدار صفر را برمی گرداند
int tolower(int c);
اكر © حرف بزرك باشد. كاراكتر كوجك معادل آَن را برمى كردلند وكرئه خود © را
برمى كرد اند
int toupper(int c);
اكر © حرف كوجك باشد. كاراكتر بزرك معادل آن را برمى كردلند وكرنه خود © را
برمى كرد اند
نام تابم
Qispunct
Qisspace
Qisupper
Qisxdigit
Qtolower
Qtoupper
صفحه 426:
۱
در يافت مى كنند ويك مقدار 4 را برمى كردانئذ. علت
oe ا ل ل ا ا
در عمل وقتى توابع فوق را به كار مىبرندء يك مقدار
»كات به تابع مى فرستند و مقدار بازكشتى را نيز در
IE yest. ree ا ae
صفحه 427:
به خاطر دارید که گفتیم یک آرايةٌ دوبعدی در حقیقت
آرایهای یک بعدی است که هر کدام از اعضای لن یک آراية
oe gee ۱
اعلان شده باشد:
راکنا
این آرایه در اصل پنج عضو دارد که هر عضو میتواند پیست
ا etree eae pera
ت۱۳ ف تچ این یشوه که راید بلاق
آراية پنج عنصری است که هر عنصر آن یک رشتة کاراکتری
بيست حرفى است. اين آرايه eee ep
تصور كنيم.
صفحه 428:
صفحه 429:
آرایهای از رشتههای کاراکتری
Ue SOL UE rere Ce I ese SECS
ee a Ue Leer eae)
Fiera aD)
aN ل Rc ل ar ec
pwhile (vic-getioe(cae[pruatt++], SD))
FAS ied
cea لل ا لله
ی ينا
الج >> "[" >> [اإصصم >> "] ." >> ز>ك> "يا" >> ووز
۱
صفحه 430:
يك آراية رشتهاى يويا
اين برنامه نشان مىدهد كه جكونه مىتوان از كاراكتر
و
و ار ال دا ار
مجموعهای از اسامی را میخواند. طوری که هر اسم روی
یک خط نوشته میشود و هر اسم با کاراکتر ۱ پایان
Ry ea Oe Scie mee on] I eee ge) Be FP
سپس نامهای ذخیره شده در آرايةٌ 77777 چاپ میشوند:
صفحه 431:
0 > مسجم داز
Por (cha* p=bPPer; “p !'\O'; pt+)
سس لب | مكلك
عم مه ما || ی
8 مامه وسح سالا" 22 مد
hie eer | ee
صفحه 432:
مقداردهی یک آرايهةٌ رشتهای
ery Te ee oy Eo Te) 1
تس ی
سم
johor* مخ ) اس Okxoraa", "Debd Detarckka", "Bbrobico ا[ مسا
نز >> ۲ onves حاتصه
Por (iat i = 0:۱ D; i++)
1 << [تإعدههه >> ۳ ,"<< ,<< "را" << "oot
je > >
{
صفحه 433:
5 5 اكه مه
eel er POLLY) ا انك
سرفايل <2200> كه به آن «كتابخانة رشتههاى
ورد 99 هم مى كويند. 200 ۳ توابعى | fever
ا ا ل ل م
ene een | ا ا ا ا ل ل
نشان مىدهد. اين تابع. طول يى رشتة كاراكترى
:اك :302 (يعنى تعداد كاراكترهاى لن رشته)
را برمی گر داند.
صفحه 434:
:) رای( et
rove ee URC bee ney oI eRe eT ee
۱
قبل از کاراکتر ,06 قرار گرفتهاند. باز گشت داده میشود:
<iochide <cstricept
(ict كدص
;"chor s[] = 0۵۵ 1
want <<" ("<<a <<")="<< (5) << eet
sont << "5 (\"\") = << اک(
har buPPer [OO]
joout << "Boter striac مم ؛" << buPPRer
انيور >> " | ("<< buPPer <<") = "<< - 0. (buPPer) << المج
{
صفحه 435:
نذا كمد رل ملصعند رل) ملع معط ) 2
۱
رتیت
Ort ots
Pa MN OE eta
eA
Lai لل am)
COR a Me ةا
eo AD ا Hen <> ae
وز
>> و -م ک> و ط ط ( ۳ رجا ۲ >> a,
ار ی زا
CR A ca اا
Mall" >>
5م جمر
Ml td (كاظ"ا )5, " >> يوم
2
(s, \"b") ret — اناك
OO\a
صفحه 436:
°()eropy eG
Pe ea eo) er caper om ere eT ne)
Stoke <pererowt
> عم >
وم ()
660000860008" - 0 هر
< [] هع سداد"
ها :( 0د راد )تسود جراد 8" >> نحو" ز
(0)مسلوه >> 2۲ bagi ,]" << 4و >> ] < 94" ک> سح
<< لمودرزر
(©م) ماه >> ۲ < سا ,7 >> 6 >> "] د 6" >> فیح
jeud >>
ieevpy (oe)
+( )سب ۳" >> فسه ز
pou << "Wel = [" << ol <<", موه >> ۲ = ام )0(
4 <<
nt << "We = [" << 20 <<"), emt =" << (©م) ام
jou >>
صفحه 437:
(pirswopy: 2
ESIC S ne <b See eon rE Hist
(et are
joka 0-۲۵۵00۵60 ۱
Moke CD = "KYL
jot << "BePore ما( صور )موه
prt << "\l = [" << sl << "], eats = "<< stteu(s()
ied >>
wand << "WO =f << 20 << "], bag =" << orbuloS)
لور <<
)رز ,6(
pou << "Per sraopi(o(,2O,6):\a
mn >> تك وها" ff >> يسما ,|" عه إل - * Hot etl)
لور <<
(حع)مجله >> " - عدا |" >> هو >> "] د هم" >> تجو
اسر <<
1
1
صفحه 438:
تابخ الصاق رشنه ؛یییی()
م ل لل ا
(ast
Fiat ال C (Ca
۷
ت۱۳
ا اليك aS a Me 0
Bea eed
mnt << "Wwe = [" << sO <<"), leah =" << sirleu(s@)
از <<
Peas alae)
۱ ری مس تحت
را بت
jew >>
Ton oo teal Ste a on eR Seca (ce)
jen >>
4
صفحه 439:
مه oy
yep) رل یر زر
0 ee oye le MTS ME Sey)
و البته بخش
مهمی از نیز محسوب میشوند زیرا وسيلةً مفیدی برای پردازش
سریع دادهها
هستند. اما اين سرعت يردازشء هزينهاى هم دارد: خطر خطاهاى زمان
Abed
۱ Coney e- Sipe ا rae]
Che S ie me)
تكيه مىشود.1١0 رشتدهاى كاراكترى خاصى نيز دارد كه امنتر و
مطمئن تر هستند.
Oe ا ا ا ا ا ل ا ل
ا رك
برای مشخص نمودن انتهای رشته اکتفا نمیشود.
صفحه 440:
نگاهی دقیقتر به تبادل دادهها
وقتی میخواهيم دادههلیی را وارد کنيم لین دادمها
ل ی
eed ea ا 1
برنامه بفرستيم این نتایج در قالب محموعهای از
کاراکتر ها نملیش داده میشوند. لازم است که لین
كاراكترها به نحوى براى برنامه تفسير شوند. مثلا
ee eer) 2 ل لل Ree TOD
كاراكتر عددى تايب مى كنيم
صفحه 441:
صفحه 442:
صفحه 443:
20000000000
ع ra ae i
صفحه 444:
استفاده از عملگر بیرون کشی برای کنترل کردن یک حلقه :
هی
0 0 (
while (via >> <1)
wot << "a =" <<a << ect
i
صفحه 445:
ورودی قالببندی نشده:
200-875 مر رو موز > تولبع مختلفى براى 59959( BS)
لين تومبع براى وارد كردن كاراكترها و رشتههاى كاراكترى
OTe ۱
ذمى كير ند.
رایجتیین آنهاء نلبع . . برای دربلفتیک کاراکتر
تکی و تلبع . . .. . برای درتلفتسیک رشته کاراکتری
است.
صفحه 446:
دریافت گاراگترها با استفاده از قایق بستنم
رت 0 طبن
[ او | زو - 0 حوع )'7'=< oe 68 0 << م) ثر
jout.put()
}
صفحه 447:
وارد کردن یک رشنة کاراکتری به وسیلة تابع +ع۵ب()
برنامة زیر نشان میدهد که چطور میتوان دادههای متنی را خط به خط از ورودی خوانده و
ES TOL ae Tey
post rot LBO=908; UPsescint ua ل
fo وب مس
۱
بز
0 م oir road atic ae Once
jet =O
she (ct. cpttoe(worrfat+], LED) && «<GOI1LC)
ws
Por (tat HRD; ta; ++)
جر >> ارا" >> جوز <<". "<< carr] << ech
صفحه 448:
فوع بمنيد در 0+1 استاندارد:
در . استاندارد نوع دادهای خاصی به نام .۰۰ ۰ وجود دارد که مشخصات این نوع
ee 0 ea Se) ا ل ل
Pepe pee eee Sa SI Por cP ee eee SSC EO)
میتوانند اعلان و مقداردهی شوند:
Hs }5 رسد
strip SO = "POO Oaiversiy";
5O(OO, ™"); ره
م | SP = sO; رسد
جات تحن / ;)© SO(sC, F, برد
صفحه 449:
استفاده از نوع 2۷
كد زير يك مجموعه كاراكتر رااز ورودى م ىكيرد و سيس بعد از هر كاراكتر
"<)"' يك علامت ويركول ',' اضافه مى نمايد.
Nis ey eb.)
'COETOORE COOCO COM 5 beaaa
lee She Us She TSU)
Te COETOORE, DOOEC, OC OTs began
teed 0 تس یی یز
stalks
۱
0
1
ال ال سا
ete eae ol
صفحه 450:
bbb
SA Seder Ce ee)
حجیم است. فابلها لین قدرت رلبه رابلنه میدهند.
دا ad
ال اد را
نمی کردند.
ا ل ل ا ۱
دایند»یک برنامهنییس لازم است کمبا فلیل آشنا
ere ee an) eee ee ee
eh ۳۳ 2 را ۳ odd
صفحه 451:
پردازش فایل در بسسیار شسبیه تراکنشهای
پر سس
Pe Sa en ego
Se ee ee ee TO!
00 ال Soy see
تقسيم مى شود.
جريان 200 براى خواندن اطلاعات ازيك فليل
ا لت
اطلاعات درون یک فایل استفاده میشود.
@®) ) @
صفحه 452:
دای عم که این جرا هه مر مرلو ریت
ela ا eee Tir تس
Ce Ce et BC nee eer rene)
شكل زير تعريف كنيدة
Fema ac Ada ا
Fee ees Red NCO ane chy
طبق کدهای فوق» عنصری استکه دادهها را از فلیلی به نام
۱ میخولند و .۱ .. نیز عنصری است که
ما |
اکنون میتوانبا استفاده از عملگر > > دادهها را به درون . ....
ی
صفحه 453:
cal th یک
ار eee be .ce ee ee Cees)
GMS Gab els IS در ۱۱۱۱ ۱ SU 8,
ابه ورودي بايد عدد (0 را تايب كند. Ean oe Sonny
یه ساس >
0
یه از
سب نیت
(قج ۳ 0) سر اس ۳ امه ه ۵" >> نج ز
صفحه 454:
اين برنامه؛ فايل تولید شده توسط برنامة قبل را به کار ميگیرد
Pee Soe 0 sae ah
ee SS مه طعاه >
۱۳۵
عم ()
Folch ییاز
pisces
مر
eee ۳
لصتاديب صدصدام 25 لطم FRC aR Ae
ie
ea teh
رةس طن
ra)
pee)
ee ee) 2 سب > بو
۹
oe
ie wot to this phowrbovk." << ead" >>
صفحه 455:
پایان جلسه هشتم
صفحه 456:
508
«شى كرايى»
صفحه 457:
: آنچه در این جلسه می خوانید
- اعلان کلاسها
- سازنددها
- فهرست مقداردهی در سازندهها
- توابع دستیابی
|
- سازندهة کپی )»
صفحه 458:
لد لد
- آشیای ثابت
ا
اعضای دادهای ابستتا
- توابع عضو ایستا
صفحه 459:
هدف کلی :
آشنایی با کلاسها و اصول اولیةً
به کار گیری آنها.
صفحه 460:
- تفاوت بين اعضاى «عمومى» و دخصوصىء را شرح داده و نحوة اعلان هر
كدام را بيان كنيد.
- «تابع سازنده» را شناخته و وظيفةٌ آن را شرح دهید.
...ی
ی
صفحه 461:
مقد مه
_ رهیافت جدیدی بود که برای
پاره ای از مشکلات برنامه نویسی راه حل
داشت. این مصمون از دنبای فلسفه به جبان
و
اك
اشیا را میتوان با توجه به مشخصات ورفتار
آنها دسته بندى كرد.
صفحه 462:
eS Caen On pn Be ene SIE
0000 ee ec ye ae ety np
گفته میشود.
مشخصات هر شی را . . . مینامند و به
رفتارهای هر شی ...۰ . ۳
صفحه 463:
برنامهنویسی شی گرا بر سه ستون استوار است:
we :يعنىاين Gloosls aS
مرتبط. با هم ترکیب شوند و جزییات
پیادهسازی مخفی شود.
OD) Ls س Sls 9 ot
معناست که یک شی وقتی متولد میشود.
خصوصيات و ويزكىهايى را از والد خود به
همراه دارد .
صفحه 464:
امتياز وراثت در اين است كهاز كدهاى
مشترى استفاده مى شود و علاوه بر اين
كه مى توان از كدهاى قبلى استفاده مجدد
Ylej 42 03S تت 0
استحكام منطقی برنامه هم ysl
مى يابد.
صفحه 465:
gi aya سب
میگویند به معنای یک چیز بودن و چند
شكل داشتن است. هندريفتى بيشتر در
5005
صفحه 466:
اعلان کلاسها
كد زير اعلان يك كلاس را نشان مىدهد.
هت رس
:لس )
void ussica(tct, iat);
viod prici();
۳۳۱
۱
اعلان كلاس با كلمةً كليدى -دهات شروع
مى شودسيس نام كلاس مىايد.
صفحه 467:
اعلان اعضای کلاس درون یک بلوک انجام میشود
لح رت
pe) كلاس يايان يافته است.
عبارت ...۰ و عبارت "۰۰.۰ .هر عضوی که
eee) عبارت تاجانم اعلان eye) يى «عضو عمومی»
محسوب مىشود و هر عضوى كه ذيل عبارت
a AN od الل 00ل TS eee ۳ ۳ خصوصی»
محسوب مى شود.
صفحه 468:
سازندهها
ee eral 4abs است كه حافظة لازم را برای
| داده و آن را مقداردهى نمايد
و با اجراى وظايفى كه در تابع سازنده منظور شده.
شىء SCO Ts pe pee ees 2
هر es لك 99 سازنده داشته pare) در
حقیقت تابع سازنده میتواند چندشکلی داشته
poe by
صفحه 469:
1 BITS SCS Om
۰ از يكذ رم
مثال ٩-۵ افزودن چند تابع سازندهٌ دیگر به کلاس ۲؟)
هک
بط )
ا 0ك
cast (PY 00 كا
(SRSA) Oscar ا
Prete OR aa eae
tog Ua
POs Ans anh
B
صفحه 470:
این نسحه از کلاس توا ر ر سازنده دارد:
ار هیع بارامتری ندارد و ضی اعلان ده (
با مقدار پیشفرض ۰ و ۱ مقدار میکند.
۰ نازنده یک پارامدر ار نع داز 9
ی اعلان ده را طوری مقداردهی میکند که
حاصل کسر با مقدار آن پارامتر برایر باشد.
در رم سازنده نیز همان سازنده متال ۲-۱۶
است.
صفحه 471:
یک کلاس میتواند سازندههای مختلفی داشته
باشد. سادهترین آنهاء سازندهای است که هیچ
ار زر ۰( << ٩
578
اگر در یک کلاس. سازندة پیشفرض ذكر
نشوذء كاميايلر به طور خودكار لَن زا بزاى
كلاس مذكور ايجاد م ىكند.
صفحه 472:
فهرست مقدار دهی در ساز ندهها
سازندهها اغلب به غیر از مقداردهی دادههای
ا penned
همین دلیل در )++ یک واحد دستوری
7(
تسهیل مینماید. این واحد دستوری . . ..
مقداردهى ناد دارد.
صفحه 473:
به سومین سازنده در مثال ٩-۵ دقت کنید. این سازنده ر
میتوانيم با استفاده از ذهرست مقداردهی به شکل زیر
قلاصه کنیم:
Rutio(ict o, td) > num(n), den(d) { }
مثال ٩-۶ استفاده از فهرست مقداردهی در Ruta polS
فسات رت
atc
OR OL (ODER 2s (OR
ل امد كيديا لدان يكنا
ca) و واه
aa ow ot
DAR cast
1
صفحه 474:
توابع دستیابی
دادههای عضو یک کلاس معمولا به صورت
خصوصی (,<) اعلان میشوند تا دستیابی به
آنها محدود باشد آها همین اهر باعث میشود
كه نتوانيه در مواقع لزوه به اين دادهها
دسترسى داشته باشيم. براى حل اين مشكل از
توابعى باعنوانت 2 استفاده
میکنيم.
صفحه 475:
تابع دستیابی یک تابع عمومی عضو کلاس است و
به همین دلیل اجازة دسترسی به اعضای دادهای
خصوصى را دارد.
با استفاده از توابع دستيابى فقط مى توان اعضاى
دادهای خصوصی را خواند ولی نمیتوان آنها را
دستکاری کرد.
صفحه 476:
مثال 9-8 افزودن توابع دستيابى رصن
میات
تاج )
۱
رت
} 7ك كال و1 { snverutvr() زر
ام
سل ۳
در اينجا توابع 2202020١ ١85 ١ مقدير موجود
در دادههاى عضو خصوصى را نشان مى دهند.
صفحه 477:
توايع عضو خصوصى
توابع عضو را كاهى مئتوانيم به شکل یک عضو
فصوصى كلاس معرفى كنيم. واضع است كه هنين
تابعى از دافل برنامةً اصلى به هيج عنوان قابل
دستيابى نيست. اين تابع فقط مىتواند توسط ساير
توابع عضو كلاس دستيابى شود. به هنين تابعى يى
ا ل
صفحه 478:
در بر 1
تابع عضو خصوصی به نام ۳۵۱() است.
وظيفة تابع مذكور اين است كه معادل
ممیز شناور یک عدد کسری را بر گرداند
( زاج >> ())/ه >> اه
2 زير. كلاس ieas ۳
اين تابع فقط درون بدنة تابع عضو
مجحصخج() استفاده شده و به م
انجام وظيفة آن کمک مینماید و
هيج نقشی در برنامةً اصلی ندارد.
صفحه 479:
2
Se Meteo ا ل ل ا
۱ 3>
fot :جاتو
ا ا ل الك ل
در 2 همهمين كار انجام مى كيرد بااين
سارت كه en از اا > مقدار موجود در متغير >ا كه
از قبل وجود داشته درون “< ٠ مىشود. اصطلاحا ><
یک . از ااست.
صفحه 480:
Rae vs);
۱ تام از نوع 0057 زر
س0 و تمام مشخصات شیب «را درون
رل لا اكردر تسر عت كلا
سازندة ذ ف
ow قبلی) Sy ae pp
ee ee ccc os ce لل
صفحه 481:
مثال ٩-۱۰ افزودن یک سازنده کپی به کلاس ۲9
2127
ار( ۰( ۱۱ ,۲۰۳۱۱ }{
(} Peal ret ی( کف a(x)
void prici() { rout << cue << |’ << de [
PAS
jit uray, der
1
در مثال بالاه تابع سازنده کی طوری تعریف شده که
عنصرهای 7و از پارامتر -«به درون عنصرهای
متناطر در شی جدبد کبی شوند.
صفحه 482:
سازندة کیی در سه وضعیت فرا خوانده میشود:
۱ - وقتی که یک شی هنگام اعلان از روی شیء دیگر تیر.
07
ا ۱
0
٠" - وقتى که یک شی به وسبله .. ار از یک تبع بر
داده شود .
صفحه 483:
صفحه 484:
مثال ٩-۱۲ اقزودن یک نابودکننده به کلاس 7ك
کم
۲
ne { aut << “OBIECT 16 CORD.\
Ss
~Ruato() { at << "OOIECT O1EG \s"; }
Faas at
7 ان[
},
صفحه 485:
اشياى ثابت
اشيا را نيز مى توان با استفاده از
عبارت 24 به صورت یک شىء
ثابت اعلان کرد:
:(۱)99,۲<) ۵۳؟) اوه
ne oF ۱۹۹۱۹۹۱/۱5
دك كاي الل PS (Zac
صفحه 486:
baal ay اشارهگر
داشته ral از رتم یسک کلاس
میتواند اشیای دادهای متنوع و متفاوتتی
داشته باشد.ء اشاره كر به اشيا بسيار
سودمند و مقید است.
رد به__برای ساختن فهرستهای
پیوندی و درختهای دادهای ببسه کار
oye)
صفحه 487:
0 <0
Go eto cM Dente cet en toicn
Ceca nella ا aetna!
مل<-م <
ه وس دح ۳
2 (۵
صفحه 488:
در این مثال. . اشاره گری به شی-ء « است. پس
ae را عضنو
آن شى را دستيابى م ىكند.
حتماباید هنگام استفاده از . آن را درون
ee. ۳
تقدم بالاتری نسبت به عملگر مقداریابی ()
دارد.
اکر برانتزها قید نشوند و فقط .. . , نوشته
2 ۱ ۲
er ioe CISC IEC pe ape ۱
صفحه 489:
مثال بعدى اهميت بيشترى دارد و كاربرد اشارهكر به اشيا را بهتر
هر
مثال ٩-۱۴ فهرستهای پیوندی با استفاده از کلاس «()
ار
ماک مر
تانج 1
tata(d), م 410000
1(
ee رز
درک 9(
i
صفحه 490:
عبارت بالا LO arn epee ce رت
که اشیای این کلاس دارای دو عضو دادهای
ا 0
ey 0
كار واقعا ممكن است و باعث میشود بتوانیم
بيك شى رابا استفاده از همين اشارهكر به شىء
ديكر ييوند دهيم و يك زنجيره بسازيم.
eye =
صفحه 491:
اکر اشیای و و از نوع ۵( باشند. میتوانیم
پیوند این سه شی رابه صورت زير مجسم کنیم:
۲ 1
صفحه 492:
به تابع سازنده نيز دقت كنيد كه جطور هر دو عضو دادهای شی--
جديد را مقداردهى مى كند.
0-0
De ihe 1
Ovde* 5
Ovde* =O;
while (via >> 1)
)9 ,)عله () سصه p= {
7
i
(لجه<دم ا ا لم ۳
يي PS a
:۲ > > انس
صفحه 493:
شکل زیر روند اجرای برنامه را نشان میدهد.
الف - قبل از شروع حلقه و
ب - پس از اولین تکرار
ale
wm رن كر 3! ED
صفحه 494:
اعضاى دادهاى استا
هر وقت که شیثی از روی یک کلاس ساخته میشود. آتن
EEC BI coed ا Oey er
رادارد. كاهى لازم است كه مقدار يك عضو دادهاى در
همة اشيا يكسان باشد. اكر اين عضو مفروض در همة اشيا
تكرار شود. هم از كارايى برنامه مى كاهد و هم حافظه را
tC peers) ا 2 ل 0 0
2111011111111
صفحه 495:
عضو ایستا عضوی است که فقط یک نمونه از آتن ایجاد میشود و همه اشیا از همان
ل ل ل ا اك
le Leora kel per Teel er ee oer cd ااا Be
باید به طور مستقیم و مستقل از اشیا مقداردهی نمود. کد زیر نحوة اعلان و مقداردهی.
یک عضو دادهای ایستا را بیان میکند:
اماك
:عاطم )
Sd ee ER
۷
|
* جر دح
© ©
صفحه 496:
و
مرت رک ویک سار مر
pasate سس
صفحه 497:
۹
Ore ens)
ل ا
سيا
0
يي ان
(
0
ا ل ل
OS es
Ck Le Re MS TS a
1
CC aR Ie RT
مت
CST aR ا SEL تس
ار
صفحه 498:
ل ل ا ل
ا ا ل
بلوى خارج مى شودء اين اشيا نابود مى شوند و لذا تعداد
Id ع به ١ تقليل مى يابد.
ل 0 2
'تعداد شى از آسن كلاس موجود باشد. از آنجا كه عضو
متا عضو ae fei
صفحه 499:
9
اس هت
1 2 (6 ۳
صفحه 500:
ل ا لان
آل
ااا
۱
aes 19۹
ا ار inne ire me eo سر
1
ا تي Sree Oe hE,
5-0
|
@ ۵
صفحه 501:
9 pean
ايستاى احج به شكل يى عضو خصوصى اعلان شده وو به
همين دليل به تابع دستيابى حاص ل:(1)صى() نياز داريم تا
م ا ال اا ا ل ل
و ۳ | re باشيم.
مقابل تصور کنیم:
صفحه 502:
AS al peel or a
بادقت در مثال قبلى به دو ايراد بر مىخوريم: اول اين كه كرجه
hour] pe ree Ot pre ال ۱
Tee ee LL ree an) ۱
ار
cece at oe tere pees ۱
الان موجود است فراخوانى شود.
صفحه 503:
* مثال ٩-۱۷ یک تابع عضو ایستا.
ie et dele Ena coe ee eee ey
اي للك
تسه
ا
صفحه 504:
زاس
OC Aas ل اا
sO aes
FO ل ل MLA
۲ ِ
ا ا 286
1
۱
وت
CeO SL
2 ( ۵
صفحه 505:
ام رس مر مهم
Teenie tel ۹
Dice eee ee ETO iO eed
فراخوانى كرد..
2 ( ۵
صفحه 506:
بایان حلسه نهم
صفحه 507:
جلسه دهم
Ben ل
صفحه 508:
آنچه در این جلسه می خوانید
"- توابع دوست
- سربار گذاری عملگر جایگزینی (-)
۰ اشارهگر سا
- سربار گذاری عملگرهای حسابی
edit aC oc RCD) Dorie
- سربار گذاری عملگرهای رابطهای
- سربار گذاری عملگرهای افزایشی و کاهشی
صفحه 509:
هدف کلی:
بیان اهمپت سربار گذاری عملگرها برای یک
کلاس و نحوة انجام این کار.
صفحه 510:
رسد دا
- «سربا ركذارى» را تعريف كرده و اهميت آن را شرح دهيد.
ري ae لس لت
ene سا ل
نماييد.
ا 1
- نحوة سربار گذاری عملگرهای حسابی را بیان کنید.
۱ LE oka
Se ye
صفحه 511:
:مقدمه
در 0۵++ مجموعهای از ر.ر - 7 مختلف وجود دارد که برای کارهای
سس رز در رد
چادی ( زر سور مت سارکاری دار
هنگامی که کلاسی را تعریف میکنیم. در حقبقت یک نوع جدید را به
pesroms ocou ene uC e mB ve renal ۱
محاسبات ریاضی به کار بیریم.
آسا چون عملکرهای رباصی (-ر .- - ,. چبری راجم به اشیای
کلاس جدید نمیدانند. نمیتوانند به درستی کار کنند. 0++ براى رفع
اين مشکل جاره اندیشیده و امکان سربا رگذاری عملکره) را تدارک دیده
از ود 9 وا ار نار
جدیدی اضافه کنیم تا بتوانند با اشبای کلاس مورد نظر به درستی کار
كت
صفحه 512:
5
انم سپس لض
به کد زیر نگاه کنید: a 7 30
Bi ١
استایر از كلاس ده به سل ترس Merrie)
Pa rang) Care POS es Oe eye oy
دستباییاند و از بیرون كلاس (درون gel a
امکان دستر سی به آنها 0111100(
اما يى استتنا وجود ادارد 2 قی اسر
که عضو یک کلاس تیمت اما ساره شاد > مگ
خصوصی آن دسترسي داشگ تشه زرم درو
ass | >>( >> از
1
صفحه 513:
۲-سربار گذاری عملگر جایکزینی(ع):
ار ا ا شاید
بيشترين كاريرد را داشته باشد.
اهرت ليان عسلكرء كبى كردن بيك شى ادر شي يكار
رازن سازنده uP ee سازنده کیی )| PIES OU
00 ينى نيز به طور خودكار براى يك
كلاس ايجاد sacs له یت رت رس تس
صریح درون كلاس اعلان تعابیم.
صفحه 514:
0 Ee Pearce St) ata
Baijbe Jol 4S cul lye GollS bul) Sa aj 0
پیش فرض, سازندة کپی و عملگر جایگزینی میباشد:
dese (ip
۱
(۱ لك در
13۳) ۳۵
رت ی ام مار ما را
asics
۳
صفحه 515:
VE ا
0 oer =ppercior — ees ین
(0 eco | یک eed ار سازندة کپی میباشد
تلبت 0 pe mer دارد كه از نوع همان کلاس
Boe eel Tee Sle en aay ve eed
۳ (Ss ppersior= (cout Retir& r)
{ UW = 1.7,
NA in ac
}
صفحه 516:
۲-اشارهکر :-ذا
ا ار Rye Nea
زیر به کار ببریم:
:0.0064 < و < رر عر
اجراى كد بالا از راست به جب صورت مى كيرد.
ee 7 5 ا 00
سيس مقدار درون كيى مىشود و سرانجام
مقدار لا درون "2 قرار داده مىشود. عملكر
جايكزينى كه در مثال قبل ذكر شد. نمى تواند به
ed ل ۱
صفحه 517:
مثال ۱۰-۲ سربارگذاری عملگر جایگزینی به شکل صحیح:
مات تا
اه
Ruto(tct =O, tet =); ۱/۳ 2
اس مس امس دا ۱۸ a a
Rute& vperder=(coet Rutv&); // westqawedt vpercior
۱ رت و 4
رم
FRO al
/ وم مت ور
71
Mee RON ات (
مسب
مط - مطل
Haag
صفحه 518:
توجه داشته باشید که عمل جایگزینی با عمل
مقداردهى تفاوت دارد. هر جند هر دواز عملكر
يكسانى استفاده مى كنند. مثلا در كد زير:
Ratio x(22,7); // this is an initialization
Ratio y(x); // this is an initialization
a // this is an initialization < 2 ۸3110
Ratio w;
this is an assignment // إلا
7g 222 ارم
میفواند ولی دسلوز .. PAS A
(افرافوانى مىكند.
صفحه 519:
ارجا یگزلو وه ملگر ها یعسابی #۶
Oe ee eae Me eee cee) Td ا EOD ct Rend eC)
همه انواع بنيادى به كار كرفته م شوند. قصد داريم سربارى را به اين عملكرها
on 0 تا بتوانيم با استفاده از آنّهاء اشياى ساخت خودمان را در محاسبات
رياضى به كار ببريم.
عملكرهاى حسابى به دو عملوند نیاز دارند. مثلا عملگر ضرب :.) در رابطة زير:
Cee
72-۳
بر
ea رت
بازكشتى از نوع همان كلاس داشته باشد. يس انتظار داريم قالب سرباركذارى
عملكر ضرب براى كلاس .به شكل زير باشد:
(بر () مد )سم 25
RR ase ee Sic econ tects
jretwraz
1
صفحه 520:
۱ en COC era 2) CO
AE orey Series FDIC pine cme nes (Ree ip rar
تابع سرباركذارى عملكر ضرب را بايد به عنوان تابع
سربار گذاری عملگر ضرب درون کلاس مفروض آبه
رس
a Roce T operator*(const T&, const
public members ری
یت 80۳۷۵ // = 5
>» )
صفحه 521:
3 سربار گذاری عملگرهای حسابی +و-و/نيزاز )
قالبهاى كلى فوق استفاده مىكنيم با اين تفاوت كه
در نام تابع سربار گذاری, به جاى علامت ضرب «
باید علامت عملگر مربوطه را قرار دهیم و دستورات
= Fle اا
/ required operations for z
صفحه 522:
مثال ۱۰-۳ سربار گذاری عملگر ضرب برای کلاس :۲7
Dah od
Aen eee a)
tbe
(0 ده ,© - م)مدمر
۳
9 eer)
ver deckaraices yo here | /
رسد
deo ره از
/ | اي ساب pher
71
eens er ea
۱ mT
فوصت
0
|
eroded و مج | تس
ei) ی
اس موم موی || رود
ات
1
صفحه 523:
۵-سربارگذاری عملگرهای جایگزینی حسابی:
ee ele ec Ne Re eed ela Se ECO Cs dedi}
Ree OD a ee eee oe Se eae ace
مم ا ا 1۱9
css ا ا 7000
سربار گذاری عملگرهای جایگزینی حسابی بر خلاف عملگرهای حسابی. میتواند عضو
StS) Sa ا ل OE ere lone
NC eS CMS CD) Sone Mee Me nents Behe See 30000
ا 00 ۲
( سس
Aeon cali (acc 9)
el AC aCe ah
32222
31
صفحه 524:
بدنة تابع سربار گذاری به قالب زیر است:
DP ippersior*= (crust ۳4 x) ۳
returct *his;
}
ااستادر از (داررتر راد رن شرد که پسراز yet 2b
در يك رابطة زنجيرهاى به كار ببريم. در ٠ جهار عملكر
جایگزینی حسابی .. و .و .و . وجود دارد. قللب کلی برای
سربار کذاری همه این عملکرها به شکل قالب بالا است فقط در نام
تابع به جای .. باید علامت عملگر مربوطه را ذکر کرد و
دستورات بدنة تابع را نيز به تناسبء تغيير داد. مثال بعدى نشان
مىدهد كه عملكر حكونه براى كلاس 242 سرباركذارى
00
صفحه 525:
مثال ۱۰-۴ کلاس عه؟) با عملگر ۴*- سربار گذاری شده:
صفحه 526:
۶-سربارگذاری عملگرهای رابطهای؛
شش عملگر رابطهای در . .. وجود
دارد که عبارتند از: < 9 ae نو by) >=
)=
pCeee age | را
حسابى: يعنى به شكل 0 5-0
سربار گذاری میشوند. اما نوع
باز گشتیشان فرق میکند.
صفحه 527:
حاصل عبارتی که شامل عملگر رابطهای باشد.
همواره یک مقدار بولین است. یعنی اگر آن عبارت
درست باشد. حاصل 2٠ است واكر آن عبارت
ا ل 50118156
جون نوع بولين در حقيقت یک نوع عددى صحيح
است. میتوان به جای - م مقدار ۱ و به جای
رت رد
بازکشتی را برای توابع سربارکذاری عملکرهای
رابطهای. از نوع ۰ ۱ فرار دادهاند.
صفحه 528:
قالب كلى براى سربا ركذارى عملكر رابطهاى ... به شكل زير است:
class ‘TY
operctor==(cocst T&, oocst T&). } ادا Priead
رد 2
اد مارم رز
{
صفحه 529:
همچنین قالب کلی تعریف بدنةٌ این تابع به صورت زیر میباشد:
int operator==(const T& x,const T&
y)
RSMO Ree KC ole eeh akon
Result
Aas ieee ie
كه به جاى لأدحك: يك مقدار بولين يا يك عدد صحيح قرار)
مى كيرد. ساير عملكرهاى رابطداى نيز از قالب بالا ييروى
مى كنند.
صفحه 530:
ات تا
COONS US sll y
| نک بای ۶س صورت تم وی هت سا ی
انس پم دا ame AC et Oe ence trad
معادل بررسى Satna Gly 4S Cul 1
اين تسا ١ ١ ی
ی ل ل مار 200000
v) ») را بررسی کنیم. بدنةه Eee ee ee)
تلبع سربار گذاری در مثال eed
ل :
۱ ليم RON BD)
يي يي ل
{
صفحه 531:
۷-سربار گذاری عملگرهای افزایشی و کاهشی:
عملگر افزایشی ++ و کاهشی -- هر کدام دو شکل
دارند:
| شكل ييشوندى.
" شکل پسوندی.
هر کدام از این حالتها را میتوان سربار گذاری
3S
صفحه 532:
قالب کلی برای سربارگذاری عملگر پیشفزایشی به شکل زیر است:
(4+ Titpperaior
required pperciogs // }
jretura “this
f
{
| زر نت ۱۳۶ استفاده شده. علت هم
این است که مشخص نیست چه چیزی باید
باز گشت داده شود. به همین دلیل اشارهگر به
كار رفته تا شيئى كه عمل يبشافزايش روى ان
صورت كرفته. بازكشت داده شود.
صفحه 533:
۳۹1 . بيك شى از كلاس Rati - و عبارت . ارزیابی
كرددء مقدار به افزوده مىشود اما جون يك عدد
em re ا 0
ا ا - باشد. حالا داریم:
22 22+7 29
صفحه 534:
ا الا 1
rr carere eee ا ا 000
اشارهگر . به شی جاری (مالک فراخوانی) اشاره دارد. کافی است مقدار این اشارهگر
ا 7 1
ا ا ال ل ال
ye Te Pee Dee bole an Cae)
2 aed
pete ee oro a
00 ie Tal) كيدي oD)
Com ee ORME Ta Uae ae
CAS ی aL
۱ << '/' << dec $< pot }
از at
ا
11
صفحه 535:
See ا ان نیز به
همين شيوةٌ عملكرهاى يبشافزايشى و
پب 0
اينهاء عملكرهاى ديكرى نيز مثل عملكر
خروجى (<<). عملكر ورودى )<<(
reer ا لت yee a errr
دارند که میتوان آنها را برای ساز گاری
برای کلاسهای جدید سربار گذاری کرد.
صفحه 536:
پابان جلسه دهم
صفحه 537:
Prey ape es
«تر کیب و ورائت»
صفحه 538:
«قرکیب و ورائت»
مقدمه
رس
ورائت
اعضاى حفاظت شد
غلبه كردن بر ورائت
۱
توابع مجازی و چندریختی
رز
صفحه 539:
کلاسهای پاية انتزاعی
۱
پرسشهای تشریحی
۱
ال :پاسخنامة پرسشهای گزینهای
ee ae ee
22 :كلمات كليدى 2 استاندارد
:عملكرهاىب استندارد
Fre eee et eae ومأخذ
صفحه 540:
هدف کلی:
بیان اهمیت ترکیب و وراشت در
شی گرایی و چگونگی انجام اين کارها.
هدفهای رفتاری
انتظار میرود پس از پایان این خلسه بتوآناد:
- علت استفاده از «ترکیب» و «ورائت ت» را در برنامههای شی گرا
ی
- نحوةٌ تركيب دو يا جند كلاس را براى ايجاد كلاس جديد,
بدانید.
وراتت را تكر لف كد
صفحه 541:
صفحه 542:
3
مق مد
ات
که همه چیز از اول طراحی شود. میتوانیم برای ایجاد
کلاس مورد نظر. از تعاریف کلاس-هایی که قبلا
ساختهايم: استفاده نماييم.
eu باعث صرفهجويى در وقت و استحکام منطق برنامه
سس
در شى كرايى به دو شیوه میتوان این کار را انجام داد:
. . .در این جلسه خواهیم دید که
چگونه و چه مواقعی میتوانیم از اين دو شيوه بهره
ore yee)
صفحه 543:
"ركيب
تركيب كلاسسها (يا تجميع كلاس.ها) يعنى استفاده
از يى يا جند كلاس ديكر در داخل تعريف يك
كلاس جديد.
هنكامى كه عضو دادداى كلاس جديد. شيئى از
كلاس ديكر باشدء مىكويبم كه اين كلاس جديد
ترصبی از سایر کلاسهاست.
به تعریف دو کلاس زیر نگاه کنید.
صفحه 544:
Date pS
کد زیر. کلاس ۱(:::7) را نشان میدهد که اشیای این کلاس برای نگهداری تاریخ استفاده
و
vhs Dot
ای
۱۹ tot =O, rt PEO)
لت eC)
(ك م رك اه ,نر Fee ee One
cas ail
Ove hee Oke
{ jota >> pear >> covets >> day }
Oye ORS
He a a a Se
priv
jit pear, wots, day
i
صفحه 545:
Bovk pW
Beare caer ek Cae م
00 0 اا ae oy
chiss (ook
publ |
:@vvk(cha* a =", tot i = ©, تمه DO)
) [ cerve(s), (i), poe(r)
void privKDeawe() { aut << uae; }
vod pricfld() { :لك >> نحد
void privtPage() { mt $< poe; }
pride
author وه مسر
عدم رل از
1
1
صفحه 546:
wold dog كلاس حامم8)
0 سای
Drs ار
gable
:@vok(chat a=", ti = O, ety =O)
ل ار نا
aE اي ا لل ا
( لاک )9 لس
هت هس لت
ete Ola ۰, اد (
wv, d) } ,بوه )سد طاطم : )
Pee er eats aero ara
رو
سس سم
ععمم بلك لماز
cates
1
صفحه 547:
ورائت :
0 Tae Ty Toe Ir
oles روى كلاس قبلى است. ۳3 نه ورانت
ا ا ا ened
آشنايى مختصر داشته باشيد, احتمالا عبارت
یی << _ ااوراوان دیدهاید. این موضوع
Rover RTC 1۱
صفحه 548:
اعضای حفاظت شده:
للا ا م ل
خصوصی کلاس والدش دسترسی داشته باشد. اما با استفاده از
ی
اعضاى خصوصى 1 كلاس دستيابى كند. اين محدوديت بز ركى
كلاس فرزند را براورده نسازندء كلاس فرزند ناكارا مد مىشود.
اوضاع زمانی وخیمتر میشود که هیچ تابع عمومی برای دسترسی
ا ا ل ا لت ل
صفحه 549:
غلبه كردن بر وراثت :
اگر زیر کلاسی از باشد. آنگاه اشیای همه اعضای عمومی و
7
۱۳ siete ISTEP) Oe CaN) Pc
رابه ارث میبرند. به تابع .... ... یکد«عضو موروثی» 200
باشيم.
يعنى كلاس فرزند. عضوى هم نام با عضو موروثى داشته باشد كه
مخصوص به خودش باشد و ارثى نباشد. براى مثال فرض كنيد
كلاس .2 يك عضو عمومى به نام داشته باشد و كلاس زير
كلاس باشد.
صفحه 550:
پا
حال اگر یک عضو به همان نام ا كك
1
۳
به این عضو جدید. «عضو غالب» میگوییم. بنابراین اگر )یک
شی از کلاس : باشد. ۲۱.7 به عضو « غالب اشاره دارد نه به 7
موروثى.
on ee aera Tete eee]
Sa ca Xp
@) ( ©
صفحه 551:
هم مى توان اعضاى دادهاى موروثى را مغلوب كرد و
هم اعضاى تابعی موروثی ۳
یعنی اگر کلاس دارای یک عضو تابعی عمومی به
نام “() باشد و در زیرکلاس نیز تابع ۴ را به
Pa] Fae Pica POC Cod POC SD Co Ora Cos
اشاره دارد و ۱.2::۴/() به تابع موروثی اشاره دارد.
در برخی از مراجع به توابع غالب . . میگویند
0 ا 000
ا Carrer ene. eae
میبریم. به مثال زیر نگاه کنید.
صفحه 552:
اعضای دادهای و تابعی الب :
۲ حون
public }
زب :اس( >> مج { vord P()
امار
۴
class ‘7: public X
aprile }
void P() {out << "Dow ۲: ز مامح ع [
Oihie P() overrides CP //
از ۲
ول نع ۸
21
صفحه 553:
سازندهها و نابودکنندههای والد:
EEO BQ) hae Se ل
3
)ا عاطم : لا عدات
ات
>> مج ) ۷
0 ا
3
0
ایو
المج ممصي رو 11" 22 ار
ا ا
:
Ort و
( (6)« راز
0
صفحه 554:
اشارهگرها در ورائت :
رهکرها در ورانت ؛
در wren ree ev PETES Wen creer ean pte اشارهكرى از نوع كلاس
FCS RCH PUN IEE D1 ks ا ا hire) rea py ل
کنید:
کت
bh
لت
/
0 IVS? ts 0 subchiss oP X
publics
ال
/
1
تسس ۱۱
»ا وصمات عصمجا خام جامجزحاه صا عجامم د كا 7 // 0-7
م
۲ < موم || زب dy با نونمم objets oP subckiss 4
f
صفحه 555:
اشارهگری از کلاس والد به شیئی از کلاس فرزند؛
ا ا ا د Spey Caneel sy Sipe
دارای یک عضو تابعی به نام هستند و 7 اشارهگری از نوع 06
ا تست
0
Teno Rene لل ot ine
7
ا
عاج
0 eNO ere)
۱
لت
نگ
94
0
toutes XP() bern p beer type X ]1 زج
ببة - مز
ean OF I tewobves XP () beware p Kos ype X
1
صفحه 556:
توابع مجازی و چندر یختی :
تابع مجازى ۱
مشخص میشود. وقتی یک تابع به شکل مجازی
PAUSE Ce CNN cep epe rere eae ea]
فرزند نيز تابعى با همين نام وجود دارد. توايع
مجازى امكان مىدهند كه هنكام استفاده از
ا et Dae eR ee
ا eC ee eo
مثال زیر > ESTES
صفحه 557:
استفاده از توابع مجازی:
vhs X
publics] — Ofrtual Pucwtion }
ete eels t) tee Cra ements ce
eH 520
رم
ما۱ pan
۱
Re:
4
9۹
سس | )حم
ا
S/F سم | ۱
i
صفحه 558:
چندریختی از طریق توابع مجازی :
سه کلاس زیر را در نظر بگیرید. بدون استفاده از توابعمجازی, برنامه آن طور
كه مورد انتظار است كار نم ىكند:
ای
لع اف ۳
پم ال ا لطر
ea 7
<< |" 2 0 ۲
صفحه 559:
"نابودکنندة مجازی
با توجه به تعريف توابع مجازىء به نظر مىرسد كه نمى توان توايع
سازنده و نابود كننده را به شكل مجازى تعريف نمود زيرا سازنددها
و نابود گرها Mts eo) aE) ل ا ا 01
SCRE eas |e an Coro Fe Ppa DU Tey 0
دیگری دارند.
مثال بعدی ایراد مهلکی را نشان میدهد که با مجازی کردن
نابود كر. برطرف مى شود.
صفحه 560:
حافظة گم شده :
به برنامة زیر دقت کنید: ان
صاطج
5 .0»” >> نحم ز[]م سح - م ) 0د
-( "م () اد" >> فحد زم [] حاط ) (260
ل ا ل ا ا
مسق
0
prints
“مر
مسر
Por (tot =O; <0; ++) }
are Naa
از
صفحه 561:
کار
MESON EN Ope) Cae A seas res Pe CROW OM oes EIB 19
Pe pee een Nero oar Tey
BOOK
صفحه 562:
پایان جلسه باز دهم