در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

استفاده از توابع در برنامه نویسی

استفاده از توابع در برنامه امری ضروری است با استفاده از توابع می توان راحت تر برنامه را مدیریت کرد یا اگر برنامه بزرگ باشد می توان با استفاده از توابع برنامه را به صورت گروهی نوشت تا کار برنامه نویسی سریع تر انجام شود . با استفاده از توابع برنامه ما زیبا تر و قابل فهم تر می شود

ما در مقاله به آموزش استفاده از توابع می پردازیم :

معرفی تابع به صورت زیر است و از قسمت های زیر تشکیل شده است:

استفاده از توابع در برنامه نویسی

type اولی نوع خروجی تابع مشخص می کند و یکی از موارد (int - float - void(without return و ... است و بستگی به خروجی تابع دارد

name می تواند هر اسمی باشد که معرف اسم تابع است

type value1 نشان دهنده ی آرگومان ورودی به تابع است و type نشان دهنده نوع این آرگومان است البته این تابع که در بالا نوشته شده دو آرگومان ورودی دارد که می تواند بیشتر یا کمتر باشد

و در نهایت دستورات مربوط به تابع را در داخل دو اکلاد قرار می دهیم

یک مثال ساده از توابع : تابعی که دوعدد میگیرد و حاضل ضرب آن ها را برمیگرداند

int zarb (int a, int b)	
{
	int c;
	a*b;
	return (c);
}

حال می توان از توابع با نام های مشترک در برنامه استفاده کرد البته نوع ورودی های این توابع باید فرق داشته باشد و با توجه به نوع ورودی های آن برنامه اجرا می شود به این عمل سربارگزاری توابع یا (function overloading ) می گویند مانند برنامه زیر :

int chap ( int a, int b){ return a+b;}
int chap (float a, float b){return a*b;}
int main ()	
{
	int a=2 , b=5;
	float c=3.0 , d=4.0;
	cout<<chap(a,b)<<endl;
	cout<< chap(c,d)<<endl;
	return 0;
}

استفاده از توابع در برنامه نویسی

حال به سراغ توابع بازگشتی می رویم که برنامه ها را کوتاه تر می کند در این نوع توابع ابتدا یک شرط برای پایان تابع می گذاریم و در ادامه دوباره تابع را فراخوانی کرده تا به آن شرط اولیه برسیم

مثال زیر برنامه ایست که یک عدد از کاربر گرفته و به آن تع داد ستاره چاپ می کند:

void chap (int n)
{
	if (n==0)
	return;
	cout<<"*"<<endl;
	return chap (n-1);
}

یا مثال زیر یک عدد (n ) را گرفته و !n را به دست آورد

int fact (int n)
{
	if (n==1)
	return 1;
	return fact(n-1) * n;
}

فراخوانی توابع در برنامه به این صورت است که اسم تابع را نوشته و اگر پارامتر ورودی دارد پارامتر ورودی آن را حساب می کنیم در برنامه زیر این فراخوانی نشان داده شده است ( با فرض اینکه توابع بالا را در برنامه داریم )

int main()
{	
	int x,m;
	cin >>x;
	m=fact(x);
	chap(x);
	cout <<"x! ="<<m;
}

خروجی برنامه فوق با ورودی 6 به صورت زیر است :

استفاده از توابع در برنامه نویسی

تابع زیر که تابع جست وجوی باینری یا دودویی است یکی از پرکاربرد ترین مسایل در C++ است و به صورت زیر نوشته می شود :

در این برنامه باید آرایه که می خواهیم در آن به دنبال عددی یا حرفی بگردیم به صورت صعودی مرتب باشد در این تابع ما به دنبال عدد x می گردیم و باید شماره خانه آن را برگردانیم:

int binary search (int a[] , int l , int h , int x )
{
	int m;
	if (l>h)
	return -1;
	m = (l+h)/2;
	if (x==a[m])
	return m;
	else  if ( x<a[m])
	return (a,l,m-1,x);
	return (a,m+1,h,x);
}	

<left>

این برنامه هم به صورت بازگشتی است .

دو نوع فراخوانی برای توابع داریم : 1- فراخوانی با ارجاع call by reference 2 -فراخوانی با مقدار call by value

در فراخوانی با مقدار ، مقدار آرگومان تغییر کرده در تابع به برنامه بر نمیگردد ولی در فراخوانی با ارجاع مقداری که در تابع تغییر می کند به تابع برمیگردد

برنامه زیر نشان دهنده ی این موضوع است

void a1 (int a)    // call by value
{
    a++;
}
void a2 (int &a)  // call by reference
{
    a++;
}
int main()
{
    int a;
    cin>>a;
    a1(a);
    cout<<"call by value="<<a<<endl;
    a2(a);
    cout<<"call by reference="<<a;
    return 0;
}

<left>

#فراخوانی_توابع #توابع_بازگشتی #فراخوانی_با_مقدار #تابع_در_برنامه_نویسی #سر_بارگذاری_توابع #فراخوانی_با_ارجاع #توابع
9 نظر
فرهاد خانلری

با سلام

مهندس جان ممنونم از آموزش خوبت

برنامه اولت

int zarb (int a, int b) 
{
    int c;
    a*b;
    return (c);
}

نباید مقدار a*b رو ریخت داخل c تا مقدار c برگرده؟

c=a*b;
فرهاد خانلری

تو عنوان ارسال مطلب میگفتید (استفاده از توابع در برنامه نویسی در c++) بهتر بود.

ممکنه مثال مرتب کردن رو به صورت کامل ارائه کنید؟

متد main هم باشه

تو این مثال فرض شده که مرتب شده هست اگه مرتب نبود چی؟ خود مرتب سازی هم بگید لطفاً.

محسن آرمان منش

برنامه مرتب سازی حبابی :

void sort (int a[] , int n )
{
	int  i,j,t;
	for (j=n-1 ; j>0 ; j--)
	    for(i=0 ; i<j ; i++ )
	       if ( a[i] > a[i+1])
	          {
		t = a[i];
		a[i]=a[i+1];
		a[i+1] = t;
	           }
} 

فرهاد خانلری

مهندس main رو فراموش کردید بگید

به نظر شما binary search که بالا تر توضیح دادید نباید سر هم باشه؟

چون کلمه سثشقزا یک کلمه کلیدی هست برای کامپایلر و نمیشه از نام گذاری از اون ها استفاده کرد

بازم نظر شما قابل احترام هست.

لطفاً در خصوص سی پلاس پلاس مطلب و آموزش بیشتری قرار بدید.

با تشکر

محسن آرمان منش

کلمه binary search اسم تابع است و می تواند هر چیزی باشد مثل a یا binary و ....

فرهاد خانلری

من دقیقاً عین کد شما رو تو برنامه کپی کردم

همون خط اررور داشت کلمه search سبز رنگ شده وقتی فاصله بین binary و search رو برداشتم کل کلمه به هم چسبیده و مشکی رنگ شد و موقع کامپایل اررور نداد.

درسته که اسم تابع میتواند هر چیزی باشد مثل abbas یا farhad اما من فکر میکنم نباید از کلمات رزرو شده استفاده کرد

باز هم نظر شما محترم هست.

متد main رو هم لطفاً کامل کنید

با تشکر از راهنمایی تون.

محسن آرمان منش

منظور از متد main رو متوجه نمیشم

فرهاد خانلری

شما زحمت کشیدید sort رو نوشتید

همچنین search رو

اینا هر دو تا میشن function یا در سی شارپ method یا متد

در تابع main هم باید کد نوشت تا به صورت کامل بشه از search استفاده کرد دیگه.

مثل مثال خودتون

int main()
{
    int a;
    cin>>a;
    a1(a);
    cout<<"call by value="<<a<<endl;
    a2(a);
    cout<<"call by reference="<<a;
    return 0;
}
محسن آرمان منش

در برنامه فقط تابع فراخوانی می شود و کار خاصی ندارد مثلا تابع مرتب سازی و جست و جو در تابع main به صورت زیر است :

int main ()
{
	int b;
	int x[6]={3,5,2,9,4,1};
	sort (x,6);
	b = binarysearch (x,0,5,9);
	if (b==-1)
	cout<<"dont exist"<<endl;
	else
	cout<<"9="<<b<<endl;
	return 0;
}

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....