تابعتابع چیست؟

فرض کنید شما فردا امتحان ریاضی دارید و در حال انجام محاسبات پیچیده ریاضی هستید، در قسمتی از محاسبات، نیاز دارید که جذر عدد ۶۵۷۴ را بدست آورید. برای پیدا کردن ریشه یک عدد بزرگ میتوانید وقت زیادی صرف کنید و خودتان محاسبه کنید، علاوه بر این ممکن است در ادامه دادن عملیات اصلی سردرگم شوید. بهتر این است که محاسبه کردن جذر را با استفاده از ماشین حساب انجام دهید. در این مثال، محاسبات پیچیده ریاضی را میتوان به تابع اصلی (main) و ماشین حساب را به یک تابع کمکی (function) در برنامه نویسی تشبیه کرد.

در برنامه نویسی نیز گاهاً ممکن است برنامه اصلی ما (main) خیلی طولانی و پیچیده شود. بنابراین برای اینکه از تکرار برخی کدها جلوگیری کنیم و برنامه را کمی ساده تر کنیم، اجرای برخی دستورات را به توابع مختلف می‌سپاریم.


مثال: برنامه ای بنویسید که دو عدد را از ورودی بگیرد و به کمک یک تابع عملیات جمع را انجام دهد. سپس حاصل را در خروجی نمایش دهید.

#include <iostream>
using namespace std;
int add(int x, int y);
int main()
{
	int a, b;
	cin >> a >> b;
	int sum = add(a, b);
	cout << sum;
    	return 0;
}
int add(int x, int y)
{
	int z = x + y;
	return z;
}

در مثال بالا، دو عدد a و b را از کاربر دریافت کرده ایم. سپس a و b را به عنوان پارامترهای ورودی به تابـع add ارسال میکنیم (که درون تابع جایگزین x و y میشوند). تابـع add دو عدد دریافت شده با هم جمع میکند و در متغیر z ذخیره میکند و z را به عنوان خروجی تابع بازگشت میدهد. در تابع اصلی مقدار z جایگزین sum میشود و در نهایت با استفاده از دستور cout مقدار sum را در خروجی نمایش میدهیم.

نکته: در مثال قبل، تابـع add را قبل از main یکبار تعریف کرده ایم سپس بعد از تابـع main نیز بدنه تابع add را نوشته ایم. در C++ اگر تابعی را بخواهید بعد از main بنویسید باید یکبار آن تابع را قبل از main تعریف کنید. اما اگر بدنه تابع را قبل از main بنویسید دیگر نیازی به تعریف مجدد آن نخواهید داشت.


کارکرد توابع:

به طور کلی تابـع ها به این صورت عمل میکنند که به عنوان پارامترهای ورودی، یک یا چند مقدار (عدد یا کاراکتر) را دریافت میکنند و عملیاتی را روی آن مقادیر انجام میدهند سپس یک مقدار را به عنوان خروجی با استفاده از دستور return بازگشت میدهند. نوع داده ای که میخواهیم بازگشت دهیم را باید قبل از نام تابـع بنویسیم. برای مثال اگر تابـع قرار است دو عدد صحیح را با هم جمع کند و یک عدد صحیح را به عنوان خروجی نمایش دهد، میبایست قبل از نام تابـع int بنویسیم (برای مشخص کردن نوع خروجی) و در داخل پرانتز جلوی نام تابـع دو متغیر از نوع int تعریف کنیم (مقادیری که تابع میگیرد اعداد صحیح هستند)

نحوه فراخوانی توابع:

زمانی که میخواهیم از تابـع استفاده کنیم (در برنامه اصلی) باید با استفاده از نام تابـع آن را فراخوانی کنیم. به این صورت که نام تابع مورد نظر را مینویسیم و در جلوی نام تابع داخل پرانتز مقادیری که میخواهیم برای تابع ارسال کنیم را مینویسیم.

توابع void:

در صورتی که قبل از نام تابع از کلمه void استفاده کنیم یعنی نوع خروجی را هیچ مشخص کرده ایم بنابراین تابـع اجرا میشود اما مقداری را برگشت نمیدهد. بنابراین کلمه return را نخواهیم داشت.


مثال: برنامه ای بنویسید که یک عدد بین ۱ تا ۵ دریافت کند و توسط یک تابع، معادل حرفی آن اعداد را چاپ کند.

#include <iostream>
using namespace std;

void equivalent(int x);

int main()
{
	int a;
	cin >> a;
	equivalent(a);
return 0;
}

void equivalent(int x)
{
	if (x == 1)
		cout << "One";
	else if (x == 2)
		cout << "Two";
	else if (x == 3)
		cout << "Three";
	else if (x == 4)
		cout << "Four";
	else if (x == 5)
		cout << "Five";
	else
		cout << "out of range";
}

همانطور که مشخص است، تابـع equivalent از نوع void تعریف شده است بنابراین مقداری را برگشت نمیدهد. اما درون تابـع ، با استفاده از دستور cout خروجی های مورد نظر را چاپ کرده ایم.


مثال: برنامه ای بنویسید که ۳ عدد صحیح را از کاربر دریافت کند سپس با استفاده از یک تابع، میانگین آنها را محاسبه و سپس در خروجی نمایش دهد.

#include <iostream>
using namespace std;

double avg(int x, int y, int z);

int main()
{
	int a, b, c;
	cout << "Please enter numbers: "; cin >> a >> b >> c;
	double average = avg(a, b, c);
	cout << average;
return 0;
}

double avg(int x, int y, int z)
{
	double w = (x + y + z) / 3;
	return w;
}

در مثال فوق، تابع avg سه عدد از نوع int به عنوان ورودی میگیرد، و به عنوان خروجی یک عدد از نوع double برمیگرداند. دلیل اینکه نوع خروجی را double مشخص کرده ایم این است که ممکن است میانگین سه عدد صحیح، مقداری اعشاری شود بنابراین نمیتوانیم از int استفاده کنیم زیرا int فقط یک مقدار صحیح به ما میدهد. (برای درک بهتر کارکرد اعداد صحیح و اعشاری آموزش انواع داده و متغیرها را مطالعه فرمایید)


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

#include <iostream>
using namespace std;

void convert(int s);

int main()
{
	int seconds;
	cin >> seconds;
	convert(seconds);
return 0;
}

void convert(int s)
{
	int second, h, m;
	second = s % 60;
	h = s / 3600;
	m = (s / 60) % 60;
	cout << "Time is: " << h << ":" << m << ":" << second;
}

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

#include <iostream>
using namespace std;

int mod(int x);

int main()
{
	int number;
	cin >> number;
	int yekan = mod(number);
	cout << yekan;
return 0;
}

int mod(int x)
{
	int m = x % 10;
	return m;
}

مثال: برنامه ای بنویسید که یک کلمه ۵ حرفی را از ورودی دریافت کند، سپس توسط یک تابع، معکوس آن را در خروجی نمایش دهد

#include <iostream>
using namespace std;

void Reverse(char a[]);

int main()
{
	char word[5];

	for (int i = 0; i < 5; i++) cin >> word[i];

	Reverse(word);
return 0;
}

void Reverse(char a[])
{
	for (int j = 4; j >= 0; j--)
		cout << a[j];
}

 

 

 

انجام پروژه های دانشگاهی پذیرفته میشود.

کانال تلگرام: https://t.me/cproject

وبسایت: http://teach-programming.ir

تلفن: ۰۹۳۶۱۰۸۹۸۹۲

آموزش کار با تابع در C++
Tagged on:                     

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نوزده − شش =