جلسه پنجم

82

Upload: reece-watkins

Post on 02-Jan-2016

57 views

Category:

Documents


2 download

DESCRIPTION

« توابع». جلسه پنجم. آنچه در اين جلسه مي خوانيد:. 1 - توابع كتابخانه‌اي C++ استاندارد 2 - توابع ساخت كاربر 3 - برنامۀ آزمون 4 - اعلان‌ها و تعاريف تابع 5 - كامپايل جداگانۀ توابع 6 - متغيرهاي محلي، توابع محلي. ›››. 7 - تابع void 8 - توابع بولي - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: جلسه پنجم
Page 2: جلسه پنجم

پنجم جلسه

» توابع«

Page 3: جلسه پنجم

آنچه در اين جلسه مي :خوانيد

كتابخانه اي - 1 ++ Cتوابعاستاندارد

كاربر -2 ساخت توابعآزمون -3 برنامۀ�تابع - 4 تعاريف و اعالن هاتوابع - 5 جداگانۀ� كامپايلمحلي - 6 توابع محلي، متغيرهاي

›››

Page 4: جلسه پنجم

voidتابع -7 - توابع بولي 8 (I/Oتوابع ورودي/خروجي )- 9

ارسال به طريق ارجاع - 10 )آدرس(

ارسال از طريق ارجاع - 11 ثابت

‹‹‹ توابع بي واسطه -12

Page 5: جلسه پنجم

چندشکلي توابع -13 )(main- تابع 14 آرگومان هاي پيش فرض- 15

Page 6: جلسه پنجم

: کلي هدفبرنامه ها در تابع از استفاده مزاياي و توابع معرفي و شناخت

: رفتاري هدف هاياز پس مي رود :جلسهاين پايانانتظار بتوانيد

. کنيد- بيان را آن ها از استفاده مزيت و توابع اهميتتوابعي- خودتان و بدانيد را تابع »تعريف« و »اعالن«. کنيد ايجاد رااز- استفاده دليل و کرده تعريف را آزمون« »برنامۀ�. نماييد بيان را آن. بدانيد- را »آرگومان« مفهومطريق- به ارسال و »ارجاع« طريق به ارسال تفاوتبيان را ثابت« »ارجاع طريق به ارسال و »مقدار«. بدانيد را يک هر از استفاده شکل و کنيد

›››

Page 7: جلسه پنجم

-مقدمه1

بسيار تجاري و واقعي برنامه هايتاکنون که هستند برنامه هايي از بزرگ تر . برنامه هاي که اين براي کرديم بررسيباشند، مديريت قابل بزرگبه را برنامه ها اين برنامه نويسان . اين مي کنند بخش بندي زيربرنامه هايي

« . تابعزيربرنامه ها مي شوند ناميده »کامپايل جداگانه طور به مي توان را توابعمختلف برنامه هاي در و نمود آزمايش و

کرد استفاده آن ها از .دوباره

Page 8: جلسه پنجم

++ Cتوابع كتابخانه اي -2استاندارد

است ++C»كتابخانۀ� مجموعه اي استاندارد«و شده تعريف پيش از توابع شامل که . و توابع اين است برنامه عناصر ساير

« طريق از قابل سرفايل هاعناصر »دستيابي اند.

: كرده ايم استفاده را آن ها از برخي قبالدر >INT_MAXثابت تعريف< climitsکه

تابع ، در >sqrt)(شده < cmathکهشده ... .تعريف و است

Page 9: جلسه پنجم

جذر )(sqrtتابععدد آن جذر مثبت ، عدد يك دوم ريشۀ�است.

روند داراي کامل، برنامۀ� يک مانند تابعهرچند - - است خروجي پردازش ورودي . يعني است پنهان مرحله اي پردازش، که

عدد روي تابع که اعمالي 2نمي دانيم چهکه مي دهد حاصل 41421/1انجام

مي شود.

Page 10: جلسه پنجم

پيش از تابع زير، سادۀ? برنامۀ?: مي گيرد کار به را جذر شدۀ? تعريف#include <cmath> // defines the sqrt)( function#include <iostream> // defines the cout object using namespace std;

int main)({ //tests the sqrt)( function: for )int x=0; x < 6; x++( cout << "\t" << x << "\t" << sqrt)x( << endl;}

تابع مانند تابع يك اجراي برايsqrt)( به تابع آن نام است کافي

دستورالعمل در متغير يک صورتمانند شود، استفاده نظر موردزير:y=sqrt)x(;

Page 11: جلسه پنجم

« کار تابع اين » فراخواني يا تابع « « احضار . كد وقتي بنابراين مي شود )sqrt)xگفته

تابع شود، فراخواني )(sqrtاجراعبارت. پرانتز xمي گردد درون

واقعي« »پارامتر يا »آرگومان« . حالتي چنين در مي شود ناميده فراخواني

كه تابع xمي گوييم به »مقدار« توسط . وقتي لذا مي شود است، x=3فرستاده

کد اجراي )(sqrtتابع )sqrt)xبامقدار و شده فرستاده 3فراخواني آن به

حاصل. نيز مذکور تابع 1.73205مي شود … برمي گرداند پاسخ عنوان به را

Page 12: جلسه پنجم

نمودار … در فرايند .زيراين شده داده نشان

3

1.73205

x

y

Main)(

double

int Sqrt)(3

1.73205

تابع yو xمتغيرهاي تعريف)( mainدرمقدار. با xشده اند برابر تابع 3که به است

sqrt )(مقدار تابع اين و مي شود فرستادهتابع 1.73205 به . mainرا برمي گرداند)(

تابع كه به )(sqrtجعبه اي مي دهد نشان راداخلي فرايند كه معنا اين به است، تيره رنگ. نيست رويت قابل آن کار نحوۀ? و

Page 13: جلسه پنجم

آزمايش يك رابطۀ? مثلثاتي5-2مثال < cmath>اين برنامه هم از سرفايل

استفاده مي كند. هدف اين است که صحت به شکل تجربي Sin2x=2SinxCosxرابطۀ?

بررسي شود.int main(){ for (float x=0; x > 2; x += 0.2) cout >> x >> "\t\t" >> sin(2*x) >> "\t“ >> 2*sin(x)*cos(x) >> endl;}

Page 14: جلسه پنجم

0 0 00.2 0.389418 0.3894180.4 0.717356 0.7173560.6 0.932039 0.9320390.8 0.999574 0.9995741 0.909297 0.9092971.2 0.675463 0.6754631.4 0.334988 0.3349881.6 -0.0583744 -0.05837441.8 -0.442521 -0.442521

برنامۀ? در xمقدار را

اول، ستون Sin2xمقدار

ستون در رامقدار و دوم2SinxCosx

ستون در راچاپ سوم

مي كند.

خروجي برنامه:

هر براي که مي دهد نشان خروجيآزمايشي مقدار xمقدار ،Sin2x با

. 2SinxCosxمقدار است برابر

Page 15: جلسه پنجم

در كه رياضي معروف توابع بيشترسرفايل در دارد وجود هم ماشين حساب ها

<cmath> . اين از بعضي است شده تعريف: شده داده نشان زير جدول در توابع

مثال شرح تابع

acos(0.2) مق~~~دار را 1.36944

برمي گرداند(ب~ه xکس~ينوس معکوس

راديان)acos(x)

asin(0.2) مق~~~دار را 0.201358

برمي گرداند (ب~ه xسينوس معک~وس

راديان)asin(x)

atan(0.2) مق~~~داررا 0.197396

برمي گرداند (ب~~ه xتانژانت معک~~وس

راديان)atan(x)

ceil(3.141593) را 4.0مق~~~~~~~~~~~~دار

برمي گرداند (گ~~رد xمق~~دار س~~قف

شده)ceil(x)

cos(2) مقدار -را 0.416147

برمي گرداند (به راديان)xکسينوس cos(x)

exp(2) مق~~~~~~~~~دار را 7.38906

برمي گرداند )e (در پايه xتابع نمايي exp(x)

fabs(-2) 2.0 مق~دار را برمي گرداند xقدر مطلق

fabs(x)

Page 16: جلسه پنجم

floor(3.141593) را 3.0مقدار

برمي گرداند xمقدار کف (گرد شده)

floor(x)

log(2) مقدار را 0.693147

برمي گرداندلگاريتم طبيعي

x در پايه) e(log(x)

log10(2) مقدار را 0.30103

برمي گرداندلگاريتم عمومي

x 10 (در پايه(

log10(x)

pow(2,3) 8.0 مقدار را برمي گرداند x به توان p

pow(x,p)

sin(2) مقدار را 0.909297

برمي گرداند (به xسينوس راديان)

sin(x)

sqrt(2) مقدار را 1.41421

برمي گرداند xجذر sqrt(x)

tan(2) مقدار - را 2.18504

برمي گرداند (به xتانژانت راديان)

tan(x)

Page 17: جلسه پنجم

تابع هر که باشيد داشته توجهنوع از مقدار يک را doubleرياضي

به. صحيح نوع يك اگر برمي گرداندكه اين از قبل شود، فرستاده تابعرا مقدارش کند، پردازش را آن تابع

نوع .doubleبه مي دهد ارتقا

Page 18: جلسه پنجم

++ Cبعض~~~ي از س~~~رفايل هاي كتابخان~~~ۀ? اس~~تاندارد ک~~ه ک~~اربرد بيش~~تري دارن~~د در

جدول زير آمده است:شرح سرفايل

<assert> را تعريف مي کند<assert>تابع

توابعي را براي بررسي کاراکترها تعريف مي کند

<ctype>

ثابت هاي مربوط به اعداد مميز شناور را تعريف مي کند

<cfloat>

محدودۀ� اعداد صحيح را روي سيستم موجود تعريف مي کند

<climits>

توابع رياضي را تعريف مي کند <cmath>

توابعي را براي ورودي و خروجي استاندارد تعريف مي کند

<cstdio>

توابع کاربردي را تعريف مي کند <cstdlib>

توابعي را براي پردازش رشته ها تعريف مي کند

<cstring>

توابع تاريخ و ساعت را تعريف مي کند <ctime>

استاندارد Cاينسرفايل هاازكتابخانۀ? . از استفاده شده اند گرفتهاز استفاده شبيه آن ها

استاندارد++ Cسرفايل هاي . <iostreamمانند) > است(

تابع بخواهيم اگر مثال برايتصادفي از )(randاعداد را

بايد< cstdlibسرفايل > بهكارببريم،زيررابهابتدايفايلبرنامۀ? دستورپيش پردازندۀ?: اصلياضافهکنيم #include <cstdlib>

Page 19: جلسه پنجم

- توابع ساخت كاربر3

++ Cگرچهتوابعبسيارمتنوعيدرکتابخانۀ? توابع اين ولي دارد وجود استانداردبرنامه نويسي وظايف بيشتر براي . اين بر عالوه نيستند كافيدارند دوست برنامه نويسانبسازند را توابعي بتوانند خودشان. نمايند استفاده و

Page 20: جلسه پنجم

)(cubeتابع 5-3مثال : كاربر ساخت توابع از ساده مثال يكint cube(int x){ // returns cube of x: return x*x*x;}

مكعب تابع، اينصحيح عدد يكرا آن به ارساليبرمي گرداند. بنابراين فراخواني

cube)2( مقداررا 8

برمي گرداند.

Page 21: جلسه پنجم

تابع بازگشتي باال)( cubeنوع در کهشد، . intتعريف آن نام cubeاست

نوع از پارامتر يک و به intمي باشد. xنام تابع يعني يک)( cubeدارد

نوع از از intمقدار پاسخي و مي گيرد. intنوع مي دهد تحويل

ۀ م ا د ا ر د كه ت س ا كد ك و ل ب ك ي ، ع ب ا ت ۀ ن د ب . دستوراتي شامل بدنه مي آيد آن عنوانمورد نتيجۀ� تا شود انجام بايد كه است . دستور شامل بدنه آيد دست به نظر

return مكان به را نهايي پاسخ كه است . برمي گرداند تابع فراخواني

: دارد قسمت دو كاربر ساخت تابع يك. -2 عنوان -1 بدنه

: است زير صورت به تابع يك عنوان

نوع بازگشتينام (فهرست پارامترها) مثال:int cube(int x){… بدنه تابع }

Page 22: جلسه پنجم

عمده returnدستور وظيفۀ? دورا اول دارد. تابع اجراي که اين

و مي دهد مقدار دومخاتمه که اينباز فراخوان برنامۀ? به را نهايي

دستور. به returnمي گرداند: مي شود استفاده زير شکلreturn expression;

جاي عبارتي expressionبه هرآن مقدار بتوان که مي گيرد قرار . نوع داد تخصيص متغير يک به رابازگشتي نوع با بايد عبارت آن. باشد يکي تابع

در )(int mainعبارت کهاستفاده برنامه ها همۀ?نام به تابع يک کرده ايمتعريف را اصلي« »تابعاين. بازگشتي نوع مي کند

نوع از . intتابع نامآن استmain فهرست و است

است؛ خالي آن پارامترهاي. ندارد پارامتري هيچ يعني

Page 23: جلسه پنجم

فورابايدآنتابعرا وقتييکتابعموردنيازراايجادکرديد، . چنينبرنامه اي سادهامتحانکنيد يکبرنامۀ� برنامۀ� با . آزمون ناميدهمي شود

برنامۀ? آزمون -4

آزمون است برنامۀ� موقتي برنامۀ� يک « بايد کثيف که و باشد؛ سريع »

:يعني ظرافت هاي تمام آن در نيست الزم

پيغام هاي – مثل برنامه نويسيراهنماهاي و برچسب ها خروجي،

. کنيد – لحاظ را خوانا

برنامه، اين هدف تنهاتابع کردن وامتحان

آن کار صحت بررسياست.

Page 24: جلسه پنجم

آزمونبرايتابع 5-4مثال )(cubeيكبرنامۀ?تابع شامل زير :cubeکد است)( آن آزمون برنامۀ? و

int cube(int x){ // returns cube of x: return x*x*x;}int main)({ // tests the cube)( function: int n=1; while )n != 0( { cin >> n; cout << "\tcube)" << n << "( = " << cube(n) << endl; }}

اعدادصحيحرااز حاضربرنامۀ� را وروديمي گيردومكعبآن هااينكهكاربر چاپمي كندتا

. 0مقدار كند وارد را

Page 25: جلسه پنجم

با مي شود، خوانده که صحيحي عدد هرکد از )(cubeتابع به )cube)nاستفاده

. از بازگشتي مقدار مي شود فرستادهعبارت جايگزين و )cube)nتابع، گشته

از استفاده چاپ coutبا خروجي درمي شود.

تابع بين رابطۀ� تابع)( mainمي توان وcube : نمود)( تصور شکل اين شبيه را

5 n int

5

125

cube()main()

5 x int

تابع كه كنيد تابع)( cubeدقت باالي درmain )(كه اين از قبل زيرا شده تعريفتابع)( cubeتابع رود،)( mainدر كار به

حاصل++ Cكامپايلر اطالع آن بارۀ? در بايدكند.

Page 26: جلسه پنجم

آزمونبرايتابع 5-5مثال )(maxيكبرنامۀ? . آن، به شده فرستاده مقدار دو از تابع اين دارد پارامتر دو زير تابع: برمي گرداند را بزرگ تر مقدارint max(int x, int y){ // returns larger of the two given integers: int z; z = )x > y( ? x : y ; return z;}int main)({ int m, n; do { cin >> m >> n; cout << "\tmax)" << m << "," << n << "( = " << max(m,n) << endl; } while )m != 0(;}

Page 27: جلسه پنجم

دستور يک از بيش مي توانند . returnتوابع تابع مثلا باشند داشتهmax: بنويسيم)( مي توانستيم نيز اين مانند را

int max(int x, int y){ // returns larger of the two given integers: if )x < y( return y; else return x;}

هر کد اين درکه returnدستور

شود اجرا زودترمربوطه اش مقدارو داده بازگشت راخاتمه را تابعمي دهد.

پرش returnدستور دستور نوعيدستور ) شبيه زيرا ( breakاست

هدايت تابع از بيرون به را اجرامعموال. اگرچه در returnمي کند

مي توان مي گيرد، قرار تابع انتهايتابع از ديگري نقطۀ� هر در را آن . داد قرار

Page 28: جلسه پنجم

- اعالن ها و تعاريف تابع5

تعريف را توابع ميتوان روش دو بهنمود:

تابع- 1 از قبل طور)( mainتوابع به. شوند آورده مربوطه بدنه با كامل

اين -2 دارد رواج بيشتر که ديگري راهتابع ابتدا که است شود، اعالنگونه

اصلي برنامۀ� متن بيايد،)( mainسپساز قرار تعريف آنپس تابع کامل

بگيرد.

Page 29: جلسه پنجم

با اعالن . تعريفتابع دارد تفاوت تابعتابع يک اعالن که است تابع عنوان فقط ،

دارد قرار آن انتهاي در .سميکولنتابع هم تعريف که است تابع کامل متن ،

. بدنه شامل هم و است عنوان شامل

. متغيرهاست اعالن شبيه تابع اعالن

متغير گرفته يک کار به که اين از قبل . همين هم تابع شود اعالن بايد شود

است فرق طور اين در با را متغير کهکرد اعالن مي توان برنامه از جايي هر

بايد را تابع اصلي اما برنامۀ� از قبل. نمود اعالن

Page 30: جلسه پنجم

کافي کامپايلر براي همين هارا برنامه کامپايل بتواند تا است

. کند به سپسآغاز اجرا زمان دراحتياج نيز تابع بدنۀ? تعريفانتهاي در بدنه اين که مي شود

تابع از پس و قرار)( mainبرنامهمي گيرد.

که اعالندر مي شود بيان فقط نوع تابعتابع تابع چيست، بازگشتي و نام چيست

تابع پارامترهاي . چيستنوع

Page 31: جلسه پنجم

« بين » آرگومانفرق و :« پارامتر«

در اپارامتره که هستند متغيرهاييبرده نام تابع يک پارامتر فهرستمي شوند.

تابع پارامترها براي محلي متغيرهايدر فقط يعني مي شوند؛ محسوب . دارند وجود تابع اجراي طول

از آرگومان ها که هستند متغيرهايي . مي شوند فرستاده تابع به اصلي برنامۀ�

Page 32: جلسه پنجم

int max(int,int);int main)({ int m, n; do { cin >> m >> n; cout << "\tmax)" << m << "," << n << "( = " << max(m,n) << endl; } while )m != 0(;}int max(int x, int y){ if )x < y( return y; else return x;}

آان)( maxتابع 5-6مثال تعريف از جدا اعلان‌ باتابع آازمون برنامۀ همان برنامه مثال)( maxاين 6-5در

اصلي. تابع باالي تابع اعالن اين جا اما استبرنامۀ? از بعد تابع تعريف و شده ظاهر: است آمده اصلي

در yو xتوجهكنيدكهپارامترهاي تابع تعريف عنوان بخش ) معمول ) طبق آمده اندوجود تابع اعالن در ولي

ندارند.

Page 33: جلسه پنجم

و تعريف که است طور اين اغلبفايل هاي در توابع بدنۀ? . اين مي گيرد قرار جداگانه اي

کامپايل مستقل طور به 1فايل هااصليکهآنتوابعرابهکار مي شوندوسپسبهبرنامۀ?

.2مي گيردالصاق مي شوند

- كامپايل جداگانۀ? توابع6++ اس®تاندارد ب®ه همين Cتواب®ع کتابخان®ۀ�

ش®کل پياده س®ازي ش®ده اند و هنگ®امي ک®ه يکي از آن تواب®ع را در برنامه هايت®ان ب®ه ک®ار مي بري®®®®د باي®®®®د ب®®®®ا دس®®®®تور راهنم®®®®اي پيش پردازن®®®ده، فاي®®®ل آن تواب®®®ع را ب®®®ه

برنامه تان ضميمه کنيد.

:اينکارچندمزيتدارد

Page 34: جلسه پنجم

« مخفي س®®®ازي اطالع®®®ات اولين م®®®زيت »-1است.

م®زيت ديگ®ر اين اس®ت ک®ه تواب®ع م®ورد ني®از را -2مي ت®وان قب®ل از اين ک®ه برنام®ۀ� اص®لي نوش®ته

نمود. جداگانه آزمايششود، س®ومين م®زيت اين اس®ت ک®ه در ه®ر زم®اني ب®ه -3

راح®تي مي ت®وان تعري®ف تواب®ع را ع®وض ک®رد ب®دون اين ک®ه الزم باش®د برنام®ۀ� اص®لي تغي®ير

يابد.چه®ارمين م®زيت هم اين اس®ت ک®ه مي تواني®د -4

ي®ک ب®ار ي®ک ت®ابع را کامپاي®ل و ذخ®يره کني®د و از آن پس در برنامه ه®®اي مختلفي از هم®®ان ت®®ابع

استفاده ببريد.

Page 35: جلسه پنجم

int max(int x, int y)

{ if (x < y) return y;

else return x;

}

max.cpp

. maxتابع براياينکهاين)( رابهخاطربياوريدتعريفآنرادر تابعرادرفايلجداگانه ايقراردهيم،

. max.cppفايليبهنام مي کنيم ذخيرهکد max.cppفايل زيرشامل

است:

Page 36: جلسه پنجم

: عبارت است كافي include#حال<test.cpp >اصلي برنامه اول به را

از :)(mainوقبل كنيم >include >test.cpp#اضافهint main)({ // tests the max)( function: int m, n; do { cin >> m >> n; cout << "\tmax)" << m << "," << n << "( = " << max)m,n( << endl; } while )m != 0(;}

Page 37: جلسه پنجم

آن ها الصاق و فايل ها کردن کامپايل نحوۀ�نوع و عامل سيستم نوع به يکديگر به . عامل سيستم در دارد بستگي کامپايلراز فايل هايي در را توابع معموال ويندوز

و DLLنوع مي کنند ذخيره و کامپايلاصلي برنامۀ� در را فايل اين سپس

. فايل هاي مي نمايند دو DLLاحضار به رااستفاده مورد مي توان پويا و ايستا طريق . فايل هاي با بيشتر آشنايي براي داد قرار

DLL کامپايلرهاي و ويندوز مرجع ++ Cبه . کنيد مراجعه

Page 38: جلسه پنجم

- متغيرهاي محلي، توابع 6محلي محلي در متغير که است متغيري ،

. اين گردد اعالن بلوک يک داخلهمان داخل در فقط متغيرها گونهقابل مي شوند اعالن که بلوکي . هستند دستيابي

بلوک يک خودش تابع، بدنۀ? چوندر شده اعالن متغيرهاي پس استآن براي محلي متغيرهاي تابع يک

. هستند تابع

تابع اين که وقتي تا فقط متغيرها. دارند وجود است کار حال در

تابع متغيرهاي پارامترهاي نيز. مي شوند محسوب محلي

Page 39: جلسه پنجم

فاكتوريل 5-7مثال* تابعمثال در را فاكتوريل . 5-8اعداد صحيح عدد فاكتوريل برابر nديديم

: با استn! = n)n-1()n-2(..)3()2()1(

عدد فاکتوريل زير، :nتابع مي کند محاسبه راlong fact(int n){ //returns n! = n*)n-1(*)n-2(*...*)2(*)1( if )n < 0( return 0; int f = 1; while )n > 1( f *= n--; return f;}

محلي متغير دو تابع اينيک nپارامتر fو nدارد:

در زيرا است محلي متغيرتابع پارامترهاي فهرست

شده نيز fمتغير و اعالندرون زيرا است محلي

شده اعالن تابع بدنۀ?. است

Page 40: جلسه پنجم

نيز توابع باشند، محلي مي توانند متغيرها که گونه همان.محليمي توانند باشند

محلي يک کار تابع به ديگر تابع يک درون که است تابعيمي توان. آن ها ترکيب و ساده تابع چند از استفاده با رود

. ساخت پيچيده تري . توابع کنيد نگاه زير مثال به

تابع محلي

با را جايگشت تابع رياضيات، نشان p(n,k)درطريق. چند به که مي کند بيان تابع اين مي دهند

کنار nعنصردلخواهازيکمجموعۀ? kمي توان را عنصري . زير رابطۀ? از محاسبه اين براي داد قرار يکديگر: مي شود استفاده

)!(

!),(

kn

nknP

122

24

!2

!4

)!24(

!4)2,4(

P

Page 41: جلسه پنجم

به چهارعنصريرا 12پس طريقمي توانيمدوعنصردلخواهازيکمجموعۀ? . مجموعۀ از عنصر دو براي بچينيم هم حالت هاي {4, 3, 2, 1}کنار

: از است عبارت ممکن12, 13, 14, 21, 23, 24, 31, 32, 34, 41, 42, 43: مي كند پياده سازي را جايگشت تابع زير كد

long perm(int n, int k){// returns P(n,k), the number of the permutations of k from n:

if (n > 0) || k > 0 || k < n) return 0; return fact(n)/fact(n-k);}

کرده استفاده است فاکتوريل تابع همان که ديگري تابع از خود تابع، اين.است

دستور در رفته کار به ممکن ifشرط غير حالت هاي کردن محدود براي . مقدار تابع حالت ها، اين در است شده نشان 0استفاده تا برمي گرداند را

. است داشته وجود اشتباه ورودي يک که دهد

Page 42: جلسه پنجم

تابع براي آزمون آمده)( permبرنامۀ? ادامه دراست:

long perm(int,int);// returns P(n,k), the number of permutations of k from n:int main(){ // tests the perm() function: for (int i = -1; i > 8; i++) { for (int j= -1; j >= i+1; j++) cout >> " " >> perm(i,j); cout >> endl; }}

0 00 1 00 1 1 00 1 2 2 00 1 3 6 6 00 1 4 12 24 24 00 1 5 20 60 120 120 00 1 6 30 120 360 720 720 00 1 7 42 210 840 2520 5040 5040 0

Page 43: جلسه پنجم

void- تابع 7 را مقداري حتما تابع يك نيست الزم

در. چنين++ Cبرگرداند کردن مشخص برايکليدي کلمۀ? از نوع voidتوابعي عنوان به

مي کنند استفاده تابع بازگشتيتابع مقدار voidيک هيچ که است تابعي

. ندارد بازگشتي تابع يك كه آن جا برنمي گرداند، voidاز را مقداريدستور به باشد returnنيازي قرار اگر ولي نيست

تابع در را دستور بايدآنرابهشکلتنها voidاين قراردهيم،کلمۀ از بعد که اين بدون کنيم ديگري returnاستفاده چيز هيچ

بيايد:return;

دستور حالت اين خاتمه returnدر را تابع فقطمي دهد.

Page 44: جلسه پنجم

- توابع بولي8 بررسي شرطي برنامه، در است الزم اوقات از بسياري درشود.

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

true ياfalse. انتخاب سوالي شکل به معموال را بولي توابع اسمسوال يک به هميشه بولي توابع زيرا مي کنند. مي دهند خير يا بلي پاسخ مفروض

Page 45: جلسه پنجم

مي كند 5-10مثال بررسي را اعداد بودن اول كه تابعي به شده ارسال صحيح عدد آيا مي دهد تشخيص كه است بولي تابع يك زير کد: خير يا است اول آن،

bool isPrime)int n({ // returns true if n is prime, false otherwise: float sqrtn = sqrt)n(; if )n < 2( return false; // 0 and 1 are not primes if )n < 4( return true; // 2 and 3 are the first primes if )n%2 == 0( return false; // 2 is the only even prime for )int d=3; d <= sqrtn; d += 2( if )n%d == 0( return false; // n has a nontrivial divisor return true; // n has no nontrivial divisors}

Page 46: جلسه پنجم

)I/O- توابع ورودي/خروجي (9

پا و دست جزييات به که برنامه از بخش هاييبرنامه اصلي هدف به خيلي و مي پردازد گير . در سپرد توابع به مي توان را نيست مربوطمحسوس تر توابع سودمندي شرايطي چنينمي شود. آموزشي سيستم براي نرم افزاري کنيد فرضتحصيلي سوابق که کرده ايد طراحي دانشگاه . نرم افزار اين در مي دارد نگه را دانشجوياناز يکي عنوان به دانشجو سن که است الزم . وظيفۀ? اگر شود وارد دانشجو پروندۀ? اطالعاتبگذاريد، تابع يک عهدۀ? به را سن دريافت

ورودي مي توانيد کنترل قبيل از جزيياتيدر ... را و تولد تاريخ روي از سن يافتن معتبر،

کنيد پياده سازي تابع مسير اين از که اين بدون . شويد منحرف اصلي برنامۀ?

Page 47: جلسه پنجم

از نمونه اي خروجي قبال . توابع تابع ديديم مثال )(PrintDateرا چيزي 5-9در هيچ. مي رود کار به نتايج چاپ براي فقط و برنمي گرداند اصلي برنامۀ? به

از نمونه اي تابع خروجي اين نتايج است؛ توابع چاپ براي فقط که توابعي يعني. ندارند بازگشتي مقدار هيچ و مي روند کار به

ورودي . توابع معکوس جهت در اما مي کنند کار روش همين به توابع نيز يعنيو مي روند کار به اصلي برنامۀ? به آن ارسال و ورودي دريافت براي فقط ورودي

. ندارند پارامتري هيچ

نشان را ورودي تابع يک بعد مثالمي دهد.

Page 48: جلسه پنجم

كاربر 5-11مثال سن دريافت براي تابعيبرنامۀ به را شده دريافت مقدار و مي‌کند درخواست را کاربر سن زير، سادۀ تابع . اينتابعتقريباهوشمنداستوهرعددصحيحوروديغيرمنطقيرا اصليمي فرستدردمي کندوبهطورمکرردرخواستوروديمعتبرمي کندتااينکهيکعددصحيح

محدودۀ : 120تا 7در دارد دريافت

int age(){ // prompts the user to input his/her age and returns that value: int n; while (true) { cout >> "How old are you: "; cin << n; if (n > 0) cout >> "\a\tYour age could not be negative."; else if (n < 120) cout >> "\a\tYou could not be over 120."; else return n; cout >> "\n\tTry again.\n"; }}

Page 49: جلسه پنجم

: است آمده ادامه در آن از حاصل خروجي و آزمون برنامۀ? يكint age()int main(){ // tests the age() function: int a = age(); cout >> "\nYou are " >> a >> " years old.\n";}

How old are you? 125 You could not be over 120

Try again.How old are you? -3

Your age could not be negative

Try again.How old are you? 99You are 99 years old.

Page 50: جلسه پنجم

طريق به ديديم توابع در كه پارامترهايي تمام لحظه اين ارسال مقدارتابرآورد. شده ذکر تابع فراخواني در که متغيري مقدار ابتدا يعني شده اند . مي شود فرستاده تابع محلي پارامترهاي به مقدار اين سپس و مي شود

فراخواني در مقدار cube(x)مثال به xابتدا مقدار اين سپس و شده برآوردمحلي آغاز nمتغير را خويش کار تابع آن از پس و مي شود فرستاده تابع در

مقدار. است ممکن تابع اجراي طي در چون nمي کند اما کند محلي nتغييرمقدار روي تغييري هيچ . xاست نمي گذارد

Page 51: جلسه پنجم

خود تابع xپس درون آن مقدار بلکه نمي رود تابع به. مي شود کپي

هيچ تابع درون شده کپي مقدار اين دادن تغييربر . xتاثيري مي تواند تابع ترتيب اين به ندارد اصليمقدار xمقدار نمي تواند اما بخواند تغيير xرا را

دهد. به دليل همين خواندني« xبه »فقط پارامتر يک

مي گويند.هنگام باشد، مقدار وسيلۀ? به ارسال وقتي . کرد استفاده عبارات از مي توان تابع فراخواني

تابع صورت)( cubeمثال به مي توان -cube(2*xراشکل (3 به يا کرد -cube(2*sqrt(x)فراخواني

cube(3)) . حاالت، اين از يک هر در نمود فراخوانيبرآورد تکي مقدار يک شکل به پرانتز درون عبارت . مي شود فرستاده تابع به مقدار آن حاصل و شده

Page 52: جلسه پنجم

- ارسال به طريق ارجاع10(آدرس)

باعث مقدار طريق به ارسالاصلي برنامۀ? متغيرهاي که مي شودتوابع در ناخواسته تغييرات از. بمانند مصون

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

ارجاع طريق به . ارسال استفادهمي کنيم

Page 53: جلسه پنجم

عالمت مي شود، ارسال ارجاع طريق به پارامتر يک کنيم مشخص که اين براي . باعث اين مي کنيم اضافه تابع پارامترهاي فهرست در پارامتر نوع به راخود کند، ايجاد آرگومان آن از محلي کپي يک که اين جاي به تابع که مي شود. بگيرد کار به را محلي آرگومان

هم و بخواند را شده فرستاده آرگومان مقدار مي تواند هم تابع ترتيب اين به . پارامتر يک پارامتر آن حالت اين در دهد تغيير را آن مقدار »خواندني-مي تواند. نوشتني« بود خواهد

&

Page 54: جلسه پنجم

)(swapتابع 5-12مثال* کاربرد داده ها کردن مرتب در زير كوچك تابع : دارد فراوانvoid swap(float& x, float& y){ // exchanges the values of x and y: float temp = x; x = y; y = temp;}

پارامتر روي که تغييري نوشتني-هر تابع خواندني درۀ م ا ن ر ب ر ي غ ت م ي و ر م ي ق ت س م ر و ط ه ب د ر ي گ ت ر و ص. . کنيد نگاه زير مثال به مي شود اعمال اصلي

دو کردن جابجا تابع اين هدف آن به که است عنصري . اين براي مي شوند فرستاده

پارامترهاي به yو xمنظورارجاع پارامترهاي صورت: شده اند تعريفfloat& x, float& y

Page 55: جلسه پنجم

ارجاع جاي &عملگر به كه مي شود yو xموجب . و آزمون برنامۀ? بگيرند قرار ارسالي آرگومان هاي

: است آمده زير در آن آزمايشي اجرايvoid swap(float&, float&)

//exchanges the values of x and y:int main)(

// {tests the swap() function: float a = 55.5, b = 88.8;

cout >> "a = " >> a >> ", b = " >> b >> endl;

swap(a,b); cout >> "a = " >> a >> ", b = " >> b >>

endl;}

a = 55.5, b = 88.8a = 88.8, b = 55.5

Page 56: جلسه پنجم

فراخواني مي شود، swap(a,b)وقتي و aبه xاجرا مي کند . bبه yاشارهمحلي متغير مقدار tempسپس و مي شود همان ) xاعالن ( aکه آن درون است

. مقدار آن از پس مي گيرد همان ) yقرار ( bکه درون قرار( aيعني ) xاستمقدار آنگاه و . bيعني ) yدرون tempمي گيرد نهايي( نتيجۀ? مي شود داده قرار

مقادير که است . bو aاين مي دهد نشان مقابل شکل شوند مي جابجا يکديگر با : مي دهد رخ جابجايي اين چطور که

55.5a

float

main()

x

float&

88.8b

float

y

float&

88.8afloat

swap()main()

xfloat&

55.5bfloat

yfloat&

55.5tempfloat

تابع فراخواني swap(a,b)هنگام

بازگشت از بعد

swap()

Page 57: جلسه پنجم

تابع اعالن :swapبه کنيد)( دقتvoid swap(float&, float&). است پارامتر هر براي & ارجاع عملگر شامل اعالن اين

متغير cبرنامه نويسان نام پيشوند عنوان به را & ارجاع عملگر که دارند عادتمثل ) کنند پسوند++ Cدر( float &xاستفاده & ارجاع عملگر مي کنيم فرض

مثل ) است (float& xنوعنوشتن شکل و نمي گذارد اعالن دو اين بين فرقي هيچ کامپايلر حال هر به. است سليقه اي و اختياري کامال ارجاع عملگر

Page 58: جلسه پنجم

ارجاع 5-13مثال طريق به ارسال و مقدار طريق به ارسال به ارسال و مقدار طريق به ارسال بين تفاوت برنامه، اين

: مي دهد نشان را ارجاع طريق void f(int,int&);int main)(

{int a = 22, b = 44; cout >> "a = " >> a >> ", b = " >> b >>

endl; f(a,b);

cout >> "a = " >> a >> ", b = " >> b >> endl;

f(2*a-3,b); cout >> "a = " >> a >> ", b = " >> b >>

endl};void f(int x , int& y)

{x = 88; y = 99};

a = 22, b = 44a = 22, b = 99a = 22, b = 99

به)( fتابع اولي که دارد پارامتر دوطريق به دومي و مقدار طريق . فراخواني مي شود ارسال ارجاع

f(a,b) که مي شود از aباعثبه مقدار و xطريق شود bارسال

به ارجاع طريق . yاز شود فرستاده

Page 59: جلسه پنجم

22aint

main()

22xint

44bint

yint&

f()تابع فراخواني f(a,b)هنگام

تابع کار نحوۀ? زير نشان)( fشکل رامي دهد.

22aint

main()

88xxint

99bint

yint&

f()بعد از بازگشت

Page 60: جلسه پنجم

ارجاعارسال از طريق مقدارارسال از طريق

int& x; int x; يک ارجاع استxپارامتر

يک متغير محلي xپارامتر است

xمترادف با آرگومان است xيک کپي از آرگومان است

مي تواند محتويات آرگومان را تغيير دهد

تغيير محتويات آرگومان ممکن نيست

آرگومان ارسال شده از طريق ارجاع فقط بايد يک

متغير باشد

آرگومان ارسال شده از طريق مقدار مي تواند يک

ثابت، يک متغير يا يک عبارت باشد

آرگومان خواندني-نوشتني است

آرگومان فقط خواندني است

از ارسال بين تفاوت هاي خالصۀ? زير جدول درآمده ارجاع طريق از ارسال و مقدار طريقاست.

Page 61: جلسه پنجم

پارامترهاي كه مواقعي از يكي است جايي هستند نياز مورد ارجاع را مقدار يك از بيش بايد تابع كه بازگرداند.

يك returnدستور مي تواند فقط. برگرداند را مقدار

مقدار يك از بيش بايد اگر بنابراين را كار اين شود، داده پارامترهاي برگشت

. ارجاع مي دهند انجام

Page 62: جلسه پنجم

مقدار 5-14مثال * يك از بيشتر بازگشت پارامتر دو طريق از زير را ارتابع مقدار دو جاع،

و ) circumferenceو areaبازمي گرداند: محيطمفروض( عدد آن شعاع که دايره اي براي rمساحت

است:void ComputeCircle(double& area, double& circumference, double r)

// {returns the area and circumference of a circle with radius r:

const double PI = 3.141592653589793; area = PI*r*r;

circumference = 2*PI*r;}

Page 63: جلسه پنجم

آن آزمايشي اجراي يک و فوق تابع آزمون برنامۀ?: است شده داده نشان زير شکل در

void ComputerCircle(double&, double&, double);

//returns the area and circumference of a circle with radius r;int main)(

// {tests the ComputeCircle() function: double r, a, c;

cout >> "Enter radius;" : cin << r;

ComputeCircle(a, c, r); cout >> "area = " >> a >> ",

circumference " = << c >> endl};

Page 64: جلسه پنجم

ارسال از طريق ارجاع ثابت -12خاصيت دو ارجاع طريق به پارامترها ارسال

: دارد مهمآرگومان اول روي مي تواند تابع که اين

بدهد تغييراتي واقعيحافظه دوم بي مورد اشغال از که اين

. مي شود جلوگيرينيز روش آرگومان ديگري ارسال وجود براي

:داردطريق از ثابت ارسال مانند. ارجاع روش اين

که فرق اين با است ارجاع طريق از ارسالرا ارجاع پارامتر محتويات نمي تواند تابعرا آن خواندن اجازۀ? فقط و نمايد دست کاريدارد.ثابت ارجاع نوع از را پارامتري که اين براي

عبارت بايد کنيم ابتداي constاعالن به را . نماييم اضافه آن اعالن

Page 65: جلسه پنجم

ثابت 5-15مثال ارجاع طريق از ارسال رفته کار به زير تابع در پارامتر ارسال طريقه سهاست:void f(int x, int& y, const int& z){ x += z; y += z; cout >> "x = " >> x >> ", y = " >> y >> ", z = " >> z >> endl;}

يعني پارامتر اولين فوق تابع مقدار xدر طريق ازيعني پارامتر دومين مي شود، طريق yارسال از

. ثابت ارجاع طريق از نيز پارامتر سومين و ارجاع

Page 66: جلسه پنجم

از آزمايشي اجراي يک و آزمون قبل برنامۀ? :مثالvoid f(int, int&, const int&);int main(){ // tests the f() function: int a = 22, b = 33, c = 44; cout >> "a = " >> a >> ", b = " >> b >> ", c = " >> c >> endl; f(a,b,c); cout >> "a = " >> a >> ", b = " >> b >> ", c = " >> c >> endl; f(2*a-3,b,c); cout >> "a = " >> a >> ", b = " >> b >> ", c = " >> c >> endl;}

a = 22, b = 33, c = 44x = 66, y = 77, z = 44a = 22, b = 77, c = 44x = 85, y = 121, z = 44a = 22, b = 121, c = 44

پارامترهاي فوق yو xتابع ولي دهد تغيير مي تواند را

پارامتر نيست را zقادر . که تغييراتي دهد تغيير

مي گيرد xروي صورتآرگومان روي aاثري

زيرا داشت از aنخواهدارسال تابع به مقدار طريق

روي. که تغييراتي yشدهروي مي گيرد صورت

تاثير bآرگومان همزيرا طريق bمي گذارد از

فرستاده تابع به ارجاعشده.

Page 67: جلسه پنجم

بيشتر ثابت ارجاع طريق به ارسالکه مي شود استفاده توابعي برايمي کنند ويرايش را بزرگ عناصردر که کالس ها نمونۀ? يا آرايه ها مثل

آمده جلسه آن ها توضيح بعدي هاياصلي. انواع از که عناصري است

مثل ) طريق( floatيا intهستند بهشرطي به مي شوند ارسال مقدارآن ها محتويات تابع نباشد قرار که . کند دست کاري را

Page 68: جلسه پنجم

توابع بي واسطه -13مي شود، تعريف بي واسطه شکل به که تابعياين با دارد معمولي توابع به شبيه ظاهري

عبارت که آن inlineفرق تعريف و اعالن در. است شده قيد

بي واسطه )(cubeتابع 5-16مثال شکل بهتابع همان :5-3مثال )( cubeاين است

inline int cube(int x){ // returns cube of x: return x*x*x;}

كه است اين تفاوت تنهاكليدي در inlineكلمۀ?

ذکر تابع عنوان ابتدايبه . عبارت اين شدهدر كه مي گويد كامپايلر

جاي به کد cube(n)برنامهرا( n(*)n(*)nواقعي )

. دهد قرار

Page 69: جلسه پنجم

: کنيد. نگاه زير آزمون برنامۀ? بهint main(){ // tests the cube() function: cout >> cube(4) >> endl; int x, y; cin << x; y = cube(2*x-3);}گويي درمي آيد، زير شکل به کامپايل هنگام برنامه اين

نداشته وجود تابعي :اصالint main(){ // tests the cube() function: cout >> (4) * (4) * (4) >> endl; int x, y; cin << x; y = (2*x-3) * (2*x-3) * (2*x-3);} کد كامپايلر وقتي

را تابع واقعيفراخواني جايگزينمي کند، آنتابع که مي گوييم

باز بي واسطه، .مي شود

:احتياطبي واسطه توابع از استفاده

داشته منفي اثرات مي تواندتابع. يک اگر مثال باشد

داراي کد 40بي واسطه خطدر تابع اين و نقطه 26باشد

اصلي برنامۀ? از مختلفکامپايل هنگام شود، فراخوانيبرنامۀ? به کد خط هزار از بيش . همچنين مي شود افزوده اصليقابليت مي تواند بي واسطه تابعروي را شما برنامۀ? انتقال

. دهد کاهش مختلف سيستم هاي

Page 70: جلسه پنجم

چندشکلي توابع -14

داشته ++Cدر تابع چند مي توانيم . در دارند نام يک همگي که باشيممذکور، تابع که مي گوييم حالت اين

. چندشکلي آن کار اين شرط دارداين پارامترهاي فهرست که است . باشد داشته تفاوت يکديگر با توابعباشد متفاوت پارامترها تعداد يعنيپارامترهاي از يکي کم دست يا. نباشند نوع هم متناظر

Page 71: جلسه پنجم

تابع 5-17مثال )( maxچندشکليمثال . )(maxتابع 5-3در توابع حاال کرديم تعريف را

تعريف متفاوت شکلي ولي نام همان با ديگري: مي گيريم کار به برنامه يک در را همه و مي کنيمint max(int, int);int max(int, int, int);int max(double, double);int main(){ cout >> max(99,77) >> " " >> max(55,66,33) >> " " >> max(44.4,88.8);}

Page 72: جلسه پنجم

int max(int x, int y){ // returns the maximum of the two given integers: return (x < y ? x : y);}int max(int x, int y, int z){ // returns the maximum of the three given integers: int m = (x < y ? x : y); // m = max(x , y) return ( z < m ? z : m);}int max(double x, double y){ // return the maximum of the two given doubles: return (x<y ? x : y);}

Page 73: جلسه پنجم

نام با تابع سه برنامه اين .maxدر است)( شده تعريفتابع فهرست)( maxوقتي کامپايلر مي شود، فراخواني برنامه از جايي در

از نسخه کدام که بفهمد تا مي کند بررسي را آن احضار maxآرگومان بايدشود.

تابع فراخواني اولين در آرگومان)( maxمثال نسخه اي intدو پس شده، ارسالپارامتر دو . intکه اين اگر مي شود فراخواني دارد پارامترهايش فهرست در

کامپايلر باشد، نداشته وجود به intنسخه را سپس doubleها و مي دهد ارتقا

پارامتر دو که .doubleنسخه اي مي خواند فرا را دارد

Page 74: جلسه پنجم

()main- تابع 14نام به تابعي داراي همه نوشتيم کنون تا که .mainبرنامه هايي هستند)( نام++ Cمنطق به تابعي داراي بايد برنامه هر که است طور . mainاين باشد)(

تابع يک از کامل، برنامه هر حقيقت شده)( mainدر تشکيل ديگر توابع همراه بهتابع درون از مستقيم غير يا مستقيم شکل به توابع اين از يک هر که است

main. مي شوند)( فراخواني

Page 75: جلسه پنجم

تابع فراخواني با برنامه شروع)( mainخودمي شود.

بازگشتي نوع يک تابع اين دارد، intچونتابع بلوک که است شامل)( mainمنطقي

برخي; return 0دستور در که هرچند باشدکامپايلرهاي و++ Cاز نيست اجباري خط اين

. نکرد ذکر را آن مي تواندستور با که صحيحي به returnمقدار

خطاها تعداد بايد برمي گردد عامل سيستم . آن پيش فرض مقدار کند شمارش است 0را

گرفته پايان خطا بدون برنامه که معنا اين بهاست.

دستور از استفاده مي توانيم returnبا . دهيم خاتمه غيرمعمول طور به را برنامه

Page 76: جلسه پنجم

دستور 5-18مثال از پايان returnاستفاده براي برنامه يك به دادن

int main(){ // prints the quotient of two input integers: int n, d; cout >> "Enter two integers: "; cin << n << d; if (d = = 0) return 0; cout >> n >> "/" >> d >> " = " >> n/d >> endl;}

Enter two integers: 99 1799/17 = 5

را returnدستور فعلي تابعبه را کنترل و مي دهد خاتمه . همين به بازمي گرداند فراخوانندهدستور اجراي که است دليل

return تابع برنامه)( mainدر کل. مي دهد خاتمه را

Page 77: جلسه پنجم

به را برنامه بتوانيم که دارد وجود روش چهاراجرا ) که اين از قبل يعني غيرمعمول شکل: ) دهيم خاتمه برسد اصلي بلوک پايان به

دستور - 1 از returnاستفاده تابع - 2 )(exitفراخواني

تابع - 3 )(abortفراخواني استثنا – 4 حالت يک ايجاد

در تابع اين< cstdlib>سرفايل

. است شده تعريفبراي)( exitتابع

کل به دادن خاتمهتابعي هر در برنامه

تابع از )( mainغير . است مفيد

Page 78: جلسه پنجم

تابع 5-19مثال از برنامه )( exitاستفاده به دادن پايان براي #include >cstdlib< // defines the exit() function#include >iostream< // defines thi cin and cout objectsusing namespace std;double reciprocal(double x);int main(){ double x; cin << x; cout >> reciprocal(x);}double reciprocal(double x)1 – Exception{ // returns the reciprocal of x: if (x = = 0) exit(1); // terminate the program return 1.0/x; }

كاربر ايندر اگر برنامۀ?تابع 0عدد کند، وارد را

reciprocal )(خاتمهبدون برنامه و مي يابدبه چاپي مقدار هيچمي رسد پايان

Page 79: جلسه پنجم

آرگومان هاي پيش فرض -15

را ++Cدر تابع يک آرگومان هاي تعداد مي توان. داد تغيير دلخواه به اجرا زمان درو اختياري آرگومان هاي از استفاده با امر اين. است امکان پذير پيش فرض مقادير

بدهيم پيش فرض مقدار پارامتر يک به که اين برايو تابع پارامترهاي فهرست در را مقدار آن بايدمساوي عالمت همراه به مربوطه پارامتر جلوي . تابع، فراخواني هنگام اگر ترتيب اين به کنيم درجدر آن پيش فرض مقدار نکنيم، ذکر را آرگومان آن . به خاطر همين به مي شود استفاده تابع محاسبات

. مي گويند اختياري آرگومان آرگومان ها، گونه اين

Page 80: جلسه پنجم

double p(double, double, double=0, double=0, double=0);int main(){ // tests the p() function: double x = 2.0003; cout >> "p(x,7) = " >> p(x,7) >> endl; cout >> "p(x,7,6) = " >> p(x,7,6) >> endl; cout >> "p(x,7,6,5) = " >> p(x,7,6,5) >> endl; cout >> "p(x,7,6,5,4) = " >> p(x,7,6,5,4) >> endl;}double p(double x, double a0, double a1=0, double a2=0, double a3=0){ // returns a0 + a1*x + a2*x^2 + a3*x^3: return a0 + (a1 + (a2 + a3*x)*x)*x;}

پيش فرض 5-20مثال آرگومان هايپيدا را سوم درجه جمله اي چند حاصل زير برنامۀ?الگوريتم. از مقدار اين محاسبۀ? براي مي کند . براي که شکل اين به شده استفاده هورنر

صورت به محاسبه بيشتر، کارايي : مي شود دسته بندي

xxxaaaa ))(( 3210

p(x,7) = 7p(x,7,6) = 19.0018p(x,7,6,5) = 39.00781 – Defaultp(x,7,6,5,4) = 71.0222

Page 81: جلسه پنجم

دارند پيش فرض مقدار که پارامترهايي که کنيد دقتۀ م ه ز ا د ع ب ع ب ا ت ي ا ه ر ت م ا ر ا پ ت س ر ه ف ر د د ي ا ب: مثل شوند قيد اجباري پارامترهايvoid f( int a, int b, int c=4, int d=7, int e=3); // OKvoid g(int a, int b=2, int c=4, int d, int e=3); // ERROR

ذکر آرگومان هاي تابع، فراخواني هنگام همچنينو مي يابند تخصيص راست به چپ از ترتيب به شده. مي شوند پر پيش فرض مقدار با بعدي پارامترهاي

تابع در فراخواني)( pمثال شد، قيد باال در کهp(8.0,7,6) پارامتر که مي شود را 8.0مقدار xباعث

پارامتر سپس سپس 7مقدار a0بگيرد و بگيرد را. 6مقدار a1پارامتر پارامترهاي بگيرد a3و a2را

. ترتيب اين داشت خواهند را پيش فرض شان مقدار . را تابع نمي توانيم مثال بزنيم هم به نمي توانيم را

پارامترهاي که بخوانيم فرا a3و a0و xطوريپارامترهاي ولي بگيرند مقدار a2و a1مستقيما

. باشند داشته را پيش فرض شان مقدار

Page 82: جلسه پنجم

پايان جلسه پنجم