جلسه پنجم
DESCRIPTION
« توابع». جلسه پنجم. آنچه در اين جلسه مي خوانيد:. 1 - توابع كتابخانهاي C++ استاندارد 2 - توابع ساخت كاربر 3 - برنامۀ آزمون 4 - اعلانها و تعاريف تابع 5 - كامپايل جداگانۀ توابع 6 - متغيرهاي محلي، توابع محلي. ›››. 7 - تابع void 8 - توابع بولي - PowerPoint PPT PresentationTRANSCRIPT
پنجم جلسه
» توابع«
آنچه در اين جلسه مي :خوانيد
كتابخانه اي - 1 ++ Cتوابعاستاندارد
كاربر -2 ساخت توابعآزمون -3 برنامۀ�تابع - 4 تعاريف و اعالن هاتوابع - 5 جداگانۀ� كامپايلمحلي - 6 توابع محلي، متغيرهاي
›››
voidتابع -7 - توابع بولي 8 (I/Oتوابع ورودي/خروجي )- 9
ارسال به طريق ارجاع - 10 )آدرس(
ارسال از طريق ارجاع - 11 ثابت
‹‹‹ توابع بي واسطه -12
چندشکلي توابع -13 )(main- تابع 14 آرگومان هاي پيش فرض- 15
: کلي هدفبرنامه ها در تابع از استفاده مزاياي و توابع معرفي و شناخت
: رفتاري هدف هاياز پس مي رود :جلسهاين پايانانتظار بتوانيد
. کنيد- بيان را آن ها از استفاده مزيت و توابع اهميتتوابعي- خودتان و بدانيد را تابع »تعريف« و »اعالن«. کنيد ايجاد رااز- استفاده دليل و کرده تعريف را آزمون« »برنامۀ�. نماييد بيان را آن. بدانيد- را »آرگومان« مفهومطريق- به ارسال و »ارجاع« طريق به ارسال تفاوتبيان را ثابت« »ارجاع طريق به ارسال و »مقدار«. بدانيد را يک هر از استفاده شکل و کنيد
›››
-مقدمه1
بسيار تجاري و واقعي برنامه هايتاکنون که هستند برنامه هايي از بزرگ تر . برنامه هاي که اين براي کرديم بررسيباشند، مديريت قابل بزرگبه را برنامه ها اين برنامه نويسان . اين مي کنند بخش بندي زيربرنامه هايي
« . تابعزيربرنامه ها مي شوند ناميده »کامپايل جداگانه طور به مي توان را توابعمختلف برنامه هاي در و نمود آزمايش و
کرد استفاده آن ها از .دوباره
++ Cتوابع كتابخانه اي -2استاندارد
است ++C»كتابخانۀ� مجموعه اي استاندارد«و شده تعريف پيش از توابع شامل که . و توابع اين است برنامه عناصر ساير
« طريق از قابل سرفايل هاعناصر »دستيابي اند.
: كرده ايم استفاده را آن ها از برخي قبالدر >INT_MAXثابت تعريف< climitsکه
تابع ، در >sqrt)(شده < cmathکهشده ... .تعريف و است
جذر )(sqrtتابععدد آن جذر مثبت ، عدد يك دوم ريشۀ�است.
روند داراي کامل، برنامۀ� يک مانند تابعهرچند - - است خروجي پردازش ورودي . يعني است پنهان مرحله اي پردازش، که
عدد روي تابع که اعمالي 2نمي دانيم چهکه مي دهد حاصل 41421/1انجام
مي شود.
پيش از تابع زير، سادۀ? برنامۀ?: مي گيرد کار به را جذر شدۀ? تعريف#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(;
« کار تابع اين » فراخواني يا تابع « « احضار . كد وقتي بنابراين مي شود )sqrt)xگفته
تابع شود، فراخواني )(sqrtاجراعبارت. پرانتز xمي گردد درون
واقعي« »پارامتر يا »آرگومان« . حالتي چنين در مي شود ناميده فراخواني
كه تابع xمي گوييم به »مقدار« توسط . وقتي لذا مي شود است، x=3فرستاده
کد اجراي )(sqrtتابع )sqrt)xبامقدار و شده فرستاده 3فراخواني آن به
حاصل. نيز مذکور تابع 1.73205مي شود … برمي گرداند پاسخ عنوان به را
نمودار … در فرايند .زيراين شده داده نشان
3
1.73205
x
y
Main)(
double
int Sqrt)(3
1.73205
تابع yو xمتغيرهاي تعريف)( mainدرمقدار. با xشده اند برابر تابع 3که به است
sqrt )(مقدار تابع اين و مي شود فرستادهتابع 1.73205 به . mainرا برمي گرداند)(
تابع كه به )(sqrtجعبه اي مي دهد نشان راداخلي فرايند كه معنا اين به است، تيره رنگ. نيست رويت قابل آن کار نحوۀ? و
آزمايش يك رابطۀ? مثلثاتي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;}
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مقدار است برابر
در كه رياضي معروف توابع بيشترسرفايل در دارد وجود هم ماشين حساب ها
<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)
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)
تابع هر که باشيد داشته توجهنوع از مقدار يک را doubleرياضي
به. صحيح نوع يك اگر برمي گرداندكه اين از قبل شود، فرستاده تابعرا مقدارش کند، پردازش را آن تابع
نوع .doubleبه مي دهد ارتقا
++ Cبعض~~~ي از س~~~رفايل هاي كتابخان~~~ۀ? اس~~تاندارد ک~~ه ک~~اربرد بيش~~تري دارن~~د در
جدول زير آمده است:شرح سرفايل
<assert> را تعريف مي کند<assert>تابع
توابعي را براي بررسي کاراکترها تعريف مي کند
<ctype>
ثابت هاي مربوط به اعداد مميز شناور را تعريف مي کند
<cfloat>
محدودۀ� اعداد صحيح را روي سيستم موجود تعريف مي کند
<climits>
توابع رياضي را تعريف مي کند <cmath>
توابعي را براي ورودي و خروجي استاندارد تعريف مي کند
<cstdio>
توابع کاربردي را تعريف مي کند <cstdlib>
توابعي را براي پردازش رشته ها تعريف مي کند
<cstring>
توابع تاريخ و ساعت را تعريف مي کند <ctime>
استاندارد Cاينسرفايل هاازكتابخانۀ? . از استفاده شده اند گرفتهاز استفاده شبيه آن ها
استاندارد++ Cسرفايل هاي . <iostreamمانند) > است(
تابع بخواهيم اگر مثال برايتصادفي از )(randاعداد را
بايد< cstdlibسرفايل > بهكارببريم،زيررابهابتدايفايلبرنامۀ? دستورپيش پردازندۀ?: اصلياضافهکنيم #include <cstdlib>
- توابع ساخت كاربر3
++ Cگرچهتوابعبسيارمتنوعيدرکتابخانۀ? توابع اين ولي دارد وجود استانداردبرنامه نويسي وظايف بيشتر براي . اين بر عالوه نيستند كافيدارند دوست برنامه نويسانبسازند را توابعي بتوانند خودشان. نمايند استفاده و
)(cubeتابع 5-3مثال : كاربر ساخت توابع از ساده مثال يكint cube(int x){ // returns cube of x: return x*x*x;}
مكعب تابع، اينصحيح عدد يكرا آن به ارساليبرمي گرداند. بنابراين فراخواني
cube)2( مقداررا 8
برمي گرداند.
تابع بازگشتي باال)( cubeنوع در کهشد، . intتعريف آن نام cubeاست
نوع از پارامتر يک و به intمي باشد. xنام تابع يعني يک)( cubeدارد
نوع از از intمقدار پاسخي و مي گيرد. intنوع مي دهد تحويل
ۀ م ا د ا ر د كه ت س ا كد ك و ل ب ك ي ، ع ب ا ت ۀ ن د ب . دستوراتي شامل بدنه مي آيد آن عنوانمورد نتيجۀ� تا شود انجام بايد كه است . دستور شامل بدنه آيد دست به نظر
return مكان به را نهايي پاسخ كه است . برمي گرداند تابع فراخواني
: دارد قسمت دو كاربر ساخت تابع يك. -2 عنوان -1 بدنه
: است زير صورت به تابع يك عنوان
نوع بازگشتينام (فهرست پارامترها) مثال:int cube(int x){… بدنه تابع }
عمده returnدستور وظيفۀ? دورا اول دارد. تابع اجراي که اين
و مي دهد مقدار دومخاتمه که اينباز فراخوان برنامۀ? به را نهايي
دستور. به returnمي گرداند: مي شود استفاده زير شکلreturn expression;
جاي عبارتي expressionبه هرآن مقدار بتوان که مي گيرد قرار . نوع داد تخصيص متغير يک به رابازگشتي نوع با بايد عبارت آن. باشد يکي تابع
در )(int mainعبارت کهاستفاده برنامه ها همۀ?نام به تابع يک کرده ايمتعريف را اصلي« »تابعاين. بازگشتي نوع مي کند
نوع از . intتابع نامآن استmain فهرست و است
است؛ خالي آن پارامترهاي. ندارد پارامتري هيچ يعني
فورابايدآنتابعرا وقتييکتابعموردنيازراايجادکرديد، . چنينبرنامه اي سادهامتحانکنيد يکبرنامۀ� برنامۀ� با . آزمون ناميدهمي شود
برنامۀ? آزمون -4
آزمون است برنامۀ� موقتي برنامۀ� يک « بايد کثيف که و باشد؛ سريع »
:يعني ظرافت هاي تمام آن در نيست الزم
پيغام هاي – مثل برنامه نويسيراهنماهاي و برچسب ها خروجي،
. کنيد – لحاظ را خوانا
برنامه، اين هدف تنهاتابع کردن وامتحان
آن کار صحت بررسياست.
آزمونبرايتابع 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مقدار كند وارد را
با مي شود، خوانده که صحيحي عدد هرکد از )(cubeتابع به )cube)nاستفاده
. از بازگشتي مقدار مي شود فرستادهعبارت جايگزين و )cube)nتابع، گشته
از استفاده چاپ coutبا خروجي درمي شود.
تابع بين رابطۀ� تابع)( mainمي توان وcube : نمود)( تصور شکل اين شبيه را
5 n int
5
125
cube()main()
5 x int
تابع كه كنيد تابع)( cubeدقت باالي درmain )(كه اين از قبل زيرا شده تعريفتابع)( cubeتابع رود،)( mainدر كار به
حاصل++ Cكامپايلر اطالع آن بارۀ? در بايدكند.
آزمونبرايتابع 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(;}
دستور يک از بيش مي توانند . 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مي کند
مي توان مي گيرد، قرار تابع انتهايتابع از ديگري نقطۀ� هر در را آن . داد قرار
- اعالن ها و تعاريف تابع5
تعريف را توابع ميتوان روش دو بهنمود:
تابع- 1 از قبل طور)( mainتوابع به. شوند آورده مربوطه بدنه با كامل
اين -2 دارد رواج بيشتر که ديگري راهتابع ابتدا که است شود، اعالنگونه
اصلي برنامۀ� متن بيايد،)( mainسپساز قرار تعريف آنپس تابع کامل
بگيرد.
با اعالن . تعريفتابع دارد تفاوت تابعتابع يک اعالن که است تابع عنوان فقط ،
دارد قرار آن انتهاي در .سميکولنتابع هم تعريف که است تابع کامل متن ،
. بدنه شامل هم و است عنوان شامل
. متغيرهاست اعالن شبيه تابع اعالن
متغير گرفته يک کار به که اين از قبل . همين هم تابع شود اعالن بايد شود
است فرق طور اين در با را متغير کهکرد اعالن مي توان برنامه از جايي هر
بايد را تابع اصلي اما برنامۀ� از قبل. نمود اعالن
کافي کامپايلر براي همين هارا برنامه کامپايل بتواند تا است
. کند به سپسآغاز اجرا زمان دراحتياج نيز تابع بدنۀ? تعريفانتهاي در بدنه اين که مي شود
تابع از پس و قرار)( mainبرنامهمي گيرد.
که اعالندر مي شود بيان فقط نوع تابعتابع تابع چيست، بازگشتي و نام چيست
تابع پارامترهاي . چيستنوع
« بين » آرگومانفرق و :« پارامتر«
در اپارامتره که هستند متغيرهاييبرده نام تابع يک پارامتر فهرستمي شوند.
تابع پارامترها براي محلي متغيرهايدر فقط يعني مي شوند؛ محسوب . دارند وجود تابع اجراي طول
از آرگومان ها که هستند متغيرهايي . مي شوند فرستاده تابع به اصلي برنامۀ�
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توجهكنيدكهپارامترهاي تابع تعريف عنوان بخش ) معمول ) طبق آمده اندوجود تابع اعالن در ولي
ندارند.
و تعريف که است طور اين اغلبفايل هاي در توابع بدنۀ? . اين مي گيرد قرار جداگانه اي
کامپايل مستقل طور به 1فايل هااصليکهآنتوابعرابهکار مي شوندوسپسبهبرنامۀ?
.2مي گيردالصاق مي شوند
- كامپايل جداگانۀ? توابع6++ اس®تاندارد ب®ه همين Cتواب®ع کتابخان®ۀ�
ش®کل پياده س®ازي ش®ده اند و هنگ®امي ک®ه يکي از آن تواب®ع را در برنامه هايت®ان ب®ه ک®ار مي بري®®®®د باي®®®®د ب®®®®ا دس®®®®تور راهنم®®®®اي پيش پردازن®®®ده، فاي®®®ل آن تواب®®®ع را ب®®®ه
برنامه تان ضميمه کنيد.
:اينکارچندمزيتدارد
« مخفي س®®®ازي اطالع®®®ات اولين م®®®زيت »-1است.
م®زيت ديگ®ر اين اس®ت ک®ه تواب®ع م®ورد ني®از را -2مي ت®وان قب®ل از اين ک®ه برنام®ۀ� اص®لي نوش®ته
نمود. جداگانه آزمايششود، س®ومين م®زيت اين اس®ت ک®ه در ه®ر زم®اني ب®ه -3
راح®تي مي ت®وان تعري®ف تواب®ع را ع®وض ک®رد ب®دون اين ک®ه الزم باش®د برنام®ۀ� اص®لي تغي®ير
يابد.چه®ارمين م®زيت هم اين اس®ت ک®ه مي تواني®د -4
ي®ک ب®ار ي®ک ت®ابع را کامپاي®ل و ذخ®يره کني®د و از آن پس در برنامه ه®®اي مختلفي از هم®®ان ت®®ابع
استفاده ببريد.
int max(int x, int y)
{ if (x < y) return y;
else return x;
}
max.cpp
. maxتابع براياينکهاين)( رابهخاطربياوريدتعريفآنرادر تابعرادرفايلجداگانه ايقراردهيم،
. max.cppفايليبهنام مي کنيم ذخيرهکد max.cppفايل زيرشامل
است:
: عبارت است كافي 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(;}
آن ها الصاق و فايل ها کردن کامپايل نحوۀ�نوع و عامل سيستم نوع به يکديگر به . عامل سيستم در دارد بستگي کامپايلراز فايل هايي در را توابع معموال ويندوز
و DLLنوع مي کنند ذخيره و کامپايلاصلي برنامۀ� در را فايل اين سپس
. فايل هاي مي نمايند دو DLLاحضار به رااستفاده مورد مي توان پويا و ايستا طريق . فايل هاي با بيشتر آشنايي براي داد قرار
DLL کامپايلرهاي و ويندوز مرجع ++ Cبه . کنيد مراجعه
- متغيرهاي محلي، توابع 6محلي محلي در متغير که است متغيري ،
. اين گردد اعالن بلوک يک داخلهمان داخل در فقط متغيرها گونهقابل مي شوند اعالن که بلوکي . هستند دستيابي
بلوک يک خودش تابع، بدنۀ? چوندر شده اعالن متغيرهاي پس استآن براي محلي متغيرهاي تابع يک
. هستند تابع
تابع اين که وقتي تا فقط متغيرها. دارند وجود است کار حال در
تابع متغيرهاي پارامترهاي نيز. مي شوند محسوب محلي
فاكتوريل 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متغير و اعالندرون زيرا است محلي
شده اعالن تابع بدنۀ?. است
نيز توابع باشند، محلي مي توانند متغيرها که گونه همان.محليمي توانند باشند
محلي يک کار تابع به ديگر تابع يک درون که است تابعيمي توان. آن ها ترکيب و ساده تابع چند از استفاده با رود
. ساخت پيچيده تري . توابع کنيد نگاه زير مثال به
تابع محلي
با را جايگشت تابع رياضيات، نشان p(n,k)درطريق. چند به که مي کند بيان تابع اين مي دهند
کنار nعنصردلخواهازيکمجموعۀ? kمي توان را عنصري . زير رابطۀ? از محاسبه اين براي داد قرار يکديگر: مي شود استفاده
)!(
!),(
kn
nknP
122
24
!2
!4
)!24(
!4)2,4(
P
به چهارعنصريرا 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استفاده تا برمي گرداند را
. است داشته وجود اشتباه ورودي يک که دهد
تابع براي آزمون آمده)( 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
void- تابع 7 را مقداري حتما تابع يك نيست الزم
در. چنين++ Cبرگرداند کردن مشخص برايکليدي کلمۀ? از نوع voidتوابعي عنوان به
مي کنند استفاده تابع بازگشتيتابع مقدار voidيک هيچ که است تابعي
. ندارد بازگشتي تابع يك كه آن جا برنمي گرداند، voidاز را مقداريدستور به باشد returnنيازي قرار اگر ولي نيست
تابع در را دستور بايدآنرابهشکلتنها voidاين قراردهيم،کلمۀ از بعد که اين بدون کنيم ديگري returnاستفاده چيز هيچ
بيايد:return;
دستور حالت اين خاتمه returnدر را تابع فقطمي دهد.
- توابع بولي8 بررسي شرطي برنامه، در است الزم اوقات از بسياري درشود.
داشته نياز زيادي دستورات به شرط اين بررسي اگر . اين دهد انجام را بررسي اين تابع يک که است بهتر باشد،مي شود استفاده حلقه ها از که هنگامي مخصوصا کار. است مفيد بسيار : برمي گردانند را مقدار دو فقط بولي توابع
true ياfalse. انتخاب سوالي شکل به معموال را بولي توابع اسمسوال يک به هميشه بولي توابع زيرا مي کنند. مي دهند خير يا بلي پاسخ مفروض
مي كند 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}
)I/O- توابع ورودي/خروجي (9
پا و دست جزييات به که برنامه از بخش هاييبرنامه اصلي هدف به خيلي و مي پردازد گير . در سپرد توابع به مي توان را نيست مربوطمحسوس تر توابع سودمندي شرايطي چنينمي شود. آموزشي سيستم براي نرم افزاري کنيد فرضتحصيلي سوابق که کرده ايد طراحي دانشگاه . نرم افزار اين در مي دارد نگه را دانشجوياناز يکي عنوان به دانشجو سن که است الزم . وظيفۀ? اگر شود وارد دانشجو پروندۀ? اطالعاتبگذاريد، تابع يک عهدۀ? به را سن دريافت
ورودي مي توانيد کنترل قبيل از جزيياتيدر ... را و تولد تاريخ روي از سن يافتن معتبر،
کنيد پياده سازي تابع مسير اين از که اين بدون . شويد منحرف اصلي برنامۀ?
از نمونه اي خروجي قبال . توابع تابع ديديم مثال )(PrintDateرا چيزي 5-9در هيچ. مي رود کار به نتايج چاپ براي فقط و برنمي گرداند اصلي برنامۀ? به
از نمونه اي تابع خروجي اين نتايج است؛ توابع چاپ براي فقط که توابعي يعني. ندارند بازگشتي مقدار هيچ و مي روند کار به
ورودي . توابع معکوس جهت در اما مي کنند کار روش همين به توابع نيز يعنيو مي روند کار به اصلي برنامۀ? به آن ارسال و ورودي دريافت براي فقط ورودي
. ندارند پارامتري هيچ
نشان را ورودي تابع يک بعد مثالمي دهد.
كاربر 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"; }}
: است آمده ادامه در آن از حاصل خروجي و آزمون برنامۀ? يك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.
طريق به ديديم توابع در كه پارامترهايي تمام لحظه اين ارسال مقدارتابرآورد. شده ذکر تابع فراخواني در که متغيري مقدار ابتدا يعني شده اند . مي شود فرستاده تابع محلي پارامترهاي به مقدار اين سپس و مي شود
فراخواني در مقدار cube(x)مثال به xابتدا مقدار اين سپس و شده برآوردمحلي آغاز nمتغير را خويش کار تابع آن از پس و مي شود فرستاده تابع در
مقدار. است ممکن تابع اجراي طي در چون nمي کند اما کند محلي nتغييرمقدار روي تغييري هيچ . xاست نمي گذارد
خود تابع xپس درون آن مقدار بلکه نمي رود تابع به. مي شود کپي
هيچ تابع درون شده کپي مقدار اين دادن تغييربر . xتاثيري مي تواند تابع ترتيب اين به ندارد اصليمقدار xمقدار نمي تواند اما بخواند تغيير xرا را
دهد. به دليل همين خواندني« xبه »فقط پارامتر يک
مي گويند.هنگام باشد، مقدار وسيلۀ? به ارسال وقتي . کرد استفاده عبارات از مي توان تابع فراخواني
تابع صورت)( cubeمثال به مي توان -cube(2*xراشکل (3 به يا کرد -cube(2*sqrt(x)فراخواني
cube(3)) . حاالت، اين از يک هر در نمود فراخوانيبرآورد تکي مقدار يک شکل به پرانتز درون عبارت . مي شود فرستاده تابع به مقدار آن حاصل و شده
- ارسال به طريق ارجاع10(آدرس)
باعث مقدار طريق به ارسالاصلي برنامۀ? متغيرهاي که مي شودتوابع در ناخواسته تغييرات از. بمانند مصون
مي خواهيم عمدا اوقات گاهي اما . يعني دهد رخ اتفاق اينمحتويات بتواند تابع که مي خواهيمرا آن به شده فرستاده متغير . از حالت اين در کند دست کاري
ارجاع طريق به . ارسال استفادهمي کنيم
عالمت مي شود، ارسال ارجاع طريق به پارامتر يک کنيم مشخص که اين براي . باعث اين مي کنيم اضافه تابع پارامترهاي فهرست در پارامتر نوع به راخود کند، ايجاد آرگومان آن از محلي کپي يک که اين جاي به تابع که مي شود. بگيرد کار به را محلي آرگومان
هم و بخواند را شده فرستاده آرگومان مقدار مي تواند هم تابع ترتيب اين به . پارامتر يک پارامتر آن حالت اين در دهد تغيير را آن مقدار »خواندني-مي تواند. نوشتني« بود خواهد
&
)(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
ارجاع جاي &عملگر به كه مي شود 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
فراخواني مي شود، 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()
تابع اعالن :swapبه کنيد)( دقتvoid swap(float&, float&). است پارامتر هر براي & ارجاع عملگر شامل اعالن اين
متغير cبرنامه نويسان نام پيشوند عنوان به را & ارجاع عملگر که دارند عادتمثل ) کنند پسوند++ Cدر( float &xاستفاده & ارجاع عملگر مي کنيم فرض
مثل ) است (float& xنوعنوشتن شکل و نمي گذارد اعالن دو اين بين فرقي هيچ کامپايلر حال هر به. است سليقه اي و اختياري کامال ارجاع عملگر
ارجاع 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از شود فرستاده
22aint
main()
22xint
44bint
yint&
f()تابع فراخواني f(a,b)هنگام
تابع کار نحوۀ? زير نشان)( fشکل رامي دهد.
22aint
main()
88xxint
99bint
yint&
f()بعد از بازگشت
ارجاعارسال از طريق مقدارارسال از طريق
int& x; int x; يک ارجاع استxپارامتر
يک متغير محلي xپارامتر است
xمترادف با آرگومان است xيک کپي از آرگومان است
مي تواند محتويات آرگومان را تغيير دهد
تغيير محتويات آرگومان ممکن نيست
آرگومان ارسال شده از طريق ارجاع فقط بايد يک
متغير باشد
آرگومان ارسال شده از طريق مقدار مي تواند يک
ثابت، يک متغير يا يک عبارت باشد
آرگومان خواندني-نوشتني است
آرگومان فقط خواندني است
از ارسال بين تفاوت هاي خالصۀ? زير جدول درآمده ارجاع طريق از ارسال و مقدار طريقاست.
پارامترهاي كه مواقعي از يكي است جايي هستند نياز مورد ارجاع را مقدار يك از بيش بايد تابع كه بازگرداند.
يك returnدستور مي تواند فقط. برگرداند را مقدار
مقدار يك از بيش بايد اگر بنابراين را كار اين شود، داده پارامترهاي برگشت
. ارجاع مي دهند انجام
مقدار 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;}
آن آزمايشي اجراي يک و فوق تابع آزمون برنامۀ?: است شده داده نشان زير شکل در
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};
ارسال از طريق ارجاع ثابت -12خاصيت دو ارجاع طريق به پارامترها ارسال
: دارد مهمآرگومان اول روي مي تواند تابع که اين
بدهد تغييراتي واقعيحافظه دوم بي مورد اشغال از که اين
. مي شود جلوگيرينيز روش آرگومان ديگري ارسال وجود براي
:داردطريق از ثابت ارسال مانند. ارجاع روش اين
که فرق اين با است ارجاع طريق از ارسالرا ارجاع پارامتر محتويات نمي تواند تابعرا آن خواندن اجازۀ? فقط و نمايد دست کاريدارد.ثابت ارجاع نوع از را پارامتري که اين براي
عبارت بايد کنيم ابتداي constاعالن به را . نماييم اضافه آن اعالن
ثابت 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ارسال از
. ثابت ارجاع طريق از نيز پارامتر سومين و ارجاع
از آزمايشي اجراي يک و آزمون قبل برنامۀ? :مثال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مي گذارد از
فرستاده تابع به ارجاعشده.
بيشتر ثابت ارجاع طريق به ارسالکه مي شود استفاده توابعي برايمي کنند ويرايش را بزرگ عناصردر که کالس ها نمونۀ? يا آرايه ها مثل
آمده جلسه آن ها توضيح بعدي هاياصلي. انواع از که عناصري است
مثل ) طريق( floatيا intهستند بهشرطي به مي شوند ارسال مقدارآن ها محتويات تابع نباشد قرار که . کند دست کاري را
توابع بي واسطه -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واقعي )
. دهد قرار
: کنيد. نگاه زير آزمون برنامۀ? به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باشد
اصلي برنامۀ? از مختلفکامپايل هنگام شود، فراخوانيبرنامۀ? به کد خط هزار از بيش . همچنين مي شود افزوده اصليقابليت مي تواند بي واسطه تابعروي را شما برنامۀ? انتقال
. دهد کاهش مختلف سيستم هاي
چندشکلي توابع -14
داشته ++Cدر تابع چند مي توانيم . در دارند نام يک همگي که باشيممذکور، تابع که مي گوييم حالت اين
. چندشکلي آن کار اين شرط دارداين پارامترهاي فهرست که است . باشد داشته تفاوت يکديگر با توابعباشد متفاوت پارامترها تعداد يعنيپارامترهاي از يکي کم دست يا. نباشند نوع هم متناظر
تابع 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);}
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);}
نام با تابع سه برنامه اين .maxدر است)( شده تعريفتابع فهرست)( maxوقتي کامپايلر مي شود، فراخواني برنامه از جايي در
از نسخه کدام که بفهمد تا مي کند بررسي را آن احضار maxآرگومان بايدشود.
تابع فراخواني اولين در آرگومان)( maxمثال نسخه اي intدو پس شده، ارسالپارامتر دو . intکه اين اگر مي شود فراخواني دارد پارامترهايش فهرست در
کامپايلر باشد، نداشته وجود به intنسخه را سپس doubleها و مي دهد ارتقا
پارامتر دو که .doubleنسخه اي مي خواند فرا را دارد
()main- تابع 14نام به تابعي داراي همه نوشتيم کنون تا که .mainبرنامه هايي هستند)( نام++ Cمنطق به تابعي داراي بايد برنامه هر که است طور . mainاين باشد)(
تابع يک از کامل، برنامه هر حقيقت شده)( mainدر تشکيل ديگر توابع همراه بهتابع درون از مستقيم غير يا مستقيم شکل به توابع اين از يک هر که است
main. مي شوند)( فراخواني
تابع فراخواني با برنامه شروع)( mainخودمي شود.
بازگشتي نوع يک تابع اين دارد، intچونتابع بلوک که است شامل)( mainمنطقي
برخي; return 0دستور در که هرچند باشدکامپايلرهاي و++ Cاز نيست اجباري خط اين
. نکرد ذکر را آن مي تواندستور با که صحيحي به returnمقدار
خطاها تعداد بايد برمي گردد عامل سيستم . آن پيش فرض مقدار کند شمارش است 0را
گرفته پايان خطا بدون برنامه که معنا اين بهاست.
دستور از استفاده مي توانيم returnبا . دهيم خاتمه غيرمعمول طور به را برنامه
دستور 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در کل. مي دهد خاتمه را
به را برنامه بتوانيم که دارد وجود روش چهاراجرا ) که اين از قبل يعني غيرمعمول شکل: ) دهيم خاتمه برسد اصلي بلوک پايان به
دستور - 1 از returnاستفاده تابع - 2 )(exitفراخواني
تابع - 3 )(abortفراخواني استثنا – 4 حالت يک ايجاد
در تابع اين< cstdlib>سرفايل
. است شده تعريفبراي)( exitتابع
کل به دادن خاتمهتابعي هر در برنامه
تابع از )( mainغير . است مفيد
تابع 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 )(خاتمهبدون برنامه و مي يابدبه چاپي مقدار هيچمي رسد پايان
آرگومان هاي پيش فرض -15
را ++Cدر تابع يک آرگومان هاي تعداد مي توان. داد تغيير دلخواه به اجرا زمان درو اختياري آرگومان هاي از استفاده با امر اين. است امکان پذير پيش فرض مقادير
بدهيم پيش فرض مقدار پارامتر يک به که اين برايو تابع پارامترهاي فهرست در را مقدار آن بايدمساوي عالمت همراه به مربوطه پارامتر جلوي . تابع، فراخواني هنگام اگر ترتيب اين به کنيم درجدر آن پيش فرض مقدار نکنيم، ذکر را آرگومان آن . به خاطر همين به مي شود استفاده تابع محاسبات
. مي گويند اختياري آرگومان آرگومان ها، گونه اين
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
دارند پيش فرض مقدار که پارامترهايي که کنيد دقتۀ م ه ز ا د ع ب ع ب ا ت ي ا ه ر ت م ا ر ا پ ت س ر ه ف ر د د ي ا ب: مثل شوند قيد اجباري پارامترهاي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مستقيما
. باشند داشته را پيش فرض شان مقدار
پايان جلسه پنجم