تابع چيست؟

تابع

تابع چيست؟

فرض کنيد شما فردا امتحان رياضي داريد و در حال انجام محاسبات پيچيده رياضي هستيد، در قسمتي از محاسبات، نياز داريد که جذر عدد 6574 را بدست آوريد. براي پيدا کردن ريشه يک عدد بزرگ ميتوانيد وقت زيادي صرف کنيد و خودتان محاسبه کنيد، علاوه بر اين ممکن است در ادامه دادن عمليات اصلي سردرگم شويد. بهتر اين است که محاسبه کردن جذر را با استفاده از ماشين حساب انجام دهيد. در اين مثال، محاسبات پيچيده رياضي را ميتوان به تابع اصلي (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 را نخواهيم داشت.


مثال: برنامه اي بنويسيد که يک عدد بين 1 تا 5 دريافت کند و توسط يک تابع، معادل حرفي آن اعداد را چاپ کند.


#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 خروجي هاي مورد نظر را چاپ کرده ايم.


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


#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;
}

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


#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

تلفن: 09361089892

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

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

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

7 + 11 =