You are on page 1of 11

‫توابع‬

‫نیمسال دوم ‪1400‬‬


‫علمدار‬
‫توابع (‪)functions‬‬
‫‪ ‬توابع‬
‫‪ -‬برنامهنویسان‪ ،‬برنامهها را به زیربرنامههایی به نام تابع بخشبندی میکنند‪.‬‬
‫‪ -‬هر تابع میتواند جداگانه کامپایل و آزمایش شود‪.‬‬
‫‪ -‬هرتابع میتواند در برنامههای مختلف بارها مورد استفاده قرار گیرد‪.‬‬

‫‪ ‬توابع در ‪C++‬‬

‫توابع کتابخانه‌ای‬

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

‫‪2‬‬
‫توابع کتابخانهای در ‪C++‬‬
‫‪ ‬کتابخانه ‪cmath‬‬
‫‪ -‬شامل توابع ریاضی موجود در ماشین حساب‪ ،‬مانند )‪،cos(x) ،sin(x‬‬
‫)‪ pow(x,p) ،log2(x) ،log(x) ،fabs(x‬و ‪...‬‬
‫‪ -‬نوع برگشتی توابع ریاضی ‪double‬‬

‫‪ ‬دیگر کتابخانه‌ها‬

‫‪ string ،iomanip ،ctime ،iostream‬و ‪....‬‬

‫‪5‬‬
‫استفاده از توابع ساخت برنامه نویس‬
‫مثال‪‌:‬تعریف و استفاده از تابع مکعب‬
‫>‪#include<iostream‬‬
‫;‪using namespace std‬‬
‫)‪int cube (int x‬‬ ‫پارامتر‬
‫{‬ ‫تعریف تابع‬
‫;‪return x*x*x‬‬
‫}‬ ‫خروجی‪:‬‬
‫)(‪int main‬‬ ‫‪0:‬‬ ‫‪0‬‬
‫{‬ ‫‪1:‬‬ ‫‪1‬‬
‫فراخوانی تابع‬ ‫‪2:‬‬ ‫‪8‬‬
‫)‪for (int n = 0; n<=5 ; n++‬‬ ‫‪3:‬‬ ‫‪27‬‬
‫;‪cout<<n<<“:\t”<<cube(n)<<endl‬‬ ‫‪4: 64‬‬
‫;‪return 0‬‬ ‫آرگومان‬ ‫‪5:‬‬ ‫‪125‬‬
‫}‬
‫‪4‬‬
‫استفاده از توابع ساخت برنامه نویس‬
‫روش دوم‬
‫اعالن تابع‬ ‫روش سوم‬
‫روش اول‬ int func1(int);
‫تعریف تابع‬
‫تعریف تابع‬ int main() int func1(int x)
int func1(int x) {int x, N; {return x*x*x;
{return x*x*x; ….. }
} N = func1(x)
…… #include “cube.h”
int main() return 0; int main()
{int x, N; } {int x, N;
….. …..
N = func1(x) ‫تعریف تابع‬
N = func1(x)
…… int func1(int x) ……
return 0; {return x*x*x; return 0;
} } }
5
‫مثال توابع‬
𝑛!
𝑃(n, k) = ‫‌تابع جایگشت‬:‫مثال‬
(𝑛−𝑘)!
int fact (int n){
if (n<0)
return 0;
int f = 1;
while (n>1)
{f *= n; f *= n--;
n--;}
return f;}
int perm (int n, int k) ‫حالتهای غیرممکن‬
{ if (n<0 | | k<0 | | k>n )
return 0;
return fact(n)/fact(n-k);
}
6
‫روشهای ارسال پارامترها به توابع‬
‫‪ ‬ارسال با مقدار (‪)Pass by value‬‬
‫‪ -‬پارامتر کپی از متغیر ارسالی (آرگومان) است‪.‬‬
‫‪ -‬تابع نمیتواند آرگومان را تغییر دهند‪.‬‬

‫‪ ‬ارسال با ارجاع (‪)Pass by reference‬‬

‫‪ -‬پارامتر خود آرگومان است‪ ،‬یعنی تابع مستقیماً خود آرگومان را بهکار میگیرد‪.‬‬
‫‪ -‬تابع میتواند آرگومان را تغییر دهند‪.‬‬

‫‪7‬‬
‫مثال روشهای ارسال پارامترها به توابع‬
×‌‫ نسخه‌نادرست‬:)‫ (جابهجایی محتویات دو مقدار‬swap ‫‌تعریف و استفاده از تابع‬:‫مثال‬
void swap (int, int);
int main()
:‫خروجی‬
{ int a = 5, b = 7;
‫ ارسال با‬cout<<“a = ”<<a<<“, b = ”<<b<<endl; a = 5, b = 7
a = 5, b = 7
‫مقدار‬ swap(a, b);
cout<<“a = ”<<a<<“, b = ”<<b<<endl;
return 0; main() swap(int x, int y)
}
a 5 x 57
void swap (int x, int y)
{ int temp = x;
b 7 y 57
x = y; ‫تا‬ ‫بزنید‬ Enter
‫روند تابع را ببینید‬
y = temp; temp 5
}
8
‫مثال روشهای ارسال پارامترها به توابع‬
‫ نسخه‌درست‬:)‫ (جابهجایی محتویات دو مقدار‬swap ‫‌تعریف و استفاده از تابع‬:‫مثال‬
void swap (int&, int&);
int main()
{ int a = 5, b = 7; :‫خروجی‬
‫ ارسال با‬cout<<“a = ”<<a<<“, b = ”<<b<<endl; a = 5, b = 7
a = 7, b = 5
‫ارجاع‬ swap(a, b);
cout<<“a = ”<<a<<“, b = ”<<b<<endl;
return 0; main() swap(int& x, int& y)
}
void swap (int& x, int& y) a 75 x
{ int temp = x;
x = y; b 75 y
y = temp; temp 5
}
9
‫روشهای ارسال پارامترها به توابع‬
‫ارسال‌با‌ارجاع‌(‪)Pass by reference‬‬ ‫ارسال‌با‌مقدار‌(‪)Pass by value‬‬

‫‪• int& x‬‬ ‫‪• int x‬‬


‫• پارامتر ‪ x‬یک ارجاع است‪.‬‬ ‫• پارامتر ‪ x‬یک متغیر محلی است‪.‬‬
‫• ‪ x‬مترادف با آرگومان است‪.‬‬ ‫• ‪ x‬یک کپی از آرگومان است‪.‬‬
‫• تغییر محتویات آرگومان ممکن نیست‪ • .‬میتواند محتویات آرگومان را تغییر‬
‫دهد‪.‬‬
‫• آرگومان ارسال شده از طریق مقدار‬
‫میتواند یک ثابت‪ ،‬یک متغیر یا یک • آرگومان ارسال شده از طریق ارجاع‬
‫فقط میتواند یک متغیر باشد‪.‬‬ ‫)‪func(2‬‬ ‫عبارت باشد‪.‬‬
‫)‪func(a‬‬ ‫)‪func(a‬‬
‫)‪func(a+b‬‬
‫• آرگومان خواندنی و نوشتنی است‪.‬‬ ‫• آرگومان فقط خواندنی است‪.‬‬

‫‪10‬‬
‫بازگشت بیش از یک مقدار از تابع‬
‫‪ -‬دستور ‪ return‬فقط میتواند یک مقدار را برگرداند‪.‬‬
‫‪ -‬در مواقعی که الزم است بیش از یک مقدار برگردانده شود‪ ،‬این امر توسط پارامترهایی‬
‫که به صورت ارجاع ارسال شدهاند‪ ،‬انجام میگیرد‪.‬‬
‫‪ -‬میتوان عالوه بر پارامترهایی که به صورت ارجاع ارسال شدهاند‪ ،‬پارامترهایی به صورت‬
‫مقدار نیز به تابع ارسال کرد‪.‬‬
‫‪ -‬بهطور قراردادی پارامترهایی که از طریق ارجاع ارسال میشوند در ابتدای فهرست‬
‫پارامترها قرار میگیرند‪.‬‬
‫مثال‪ :‬تابعی برای محاسبه محیط و مساحت دایره‬
‫)‪void compute (float& s, float& p, float r‬‬
‫;‪{s = 3.14*r*r‬‬
‫;‪p = 2*3.14*r‬‬
‫}‬
‫‪11‬‬

You might also like