آکادمی سیم پاور

تابع نویسی C++

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

متغيری که دریافت می کنند ، انجام می دهند .

 

همانطور که گفته شد توابع دو گروهند :

-1 توابعی پيش ساخته و از قبل به همراه کمپایلر ++C ارائه شده اند که به آنها توابع کتابخانه ای می گویند . مثل تابع cos

-2 توابعی که کاربر بر حسب ضرورت و نياز آنها را می نویسد و در برنامه ی خود استفاده می کند .

 

 

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

-1 مقدار دهی اوليه برای ورود به تابع

-2 مجموعه ای از دستور العمل ها که روی مقدار ورودی انجام می شوند .

-3 مقدار خروجی بعد از انجام عمليات روی مقدار ورودی

 

 

با توجه به سه قسمت بالا ، هر تابع را به صورت زیر ، در خارج از تابع ()main تعریف خواهيم کرد :

Return-type function-name ( parameter-type parameter-Name , …)

{

statements;

return value;

}

 

به این مثال ساده توجه کنيد :

می خواهيم برنامه ای بنویسيم که در آن تابعی را تعریف کنيم که عددی را به عنوان ورودی بگيرد و مربع آن را به ما بازگرداند :

-1 مثل روال گذشته ابتدا می نویسيم :

 

 

#include <iostream.h>

 

 

-2 برای مثال اسم تابعمان را sqr در نظر می گيریم و کار آن را تعریف می کنيم :

 

int sqr(int x)

{

return x*x;

}

 

-3 متن اصلی برنامه :

 

int main()

{

int a;

cin>>a;

cout << sqr(a) << endl;

return 0;

}

برنامه ی ما حالا کامل است :

 

 

#include <iostream.h>

int sqr(int x)

{

return x*x;

}

int main()

{

int a;

cin>>a;

cout << sqr(a) << endl;

return 0;

}

 

 

یکبار دیگر به برنامه ی بالا برگردید ! می خواهيم نکات و ریزه کاری های آن را بررسی کنيم ! (پس خوب بخوانيد ! ):

 

 

-کامپایلر برنامه را به این صورت می خواند :

… ابتدا در قسمت بالا تابع را شناسایی می کند و به ترتيب به پایين می آید ، تا اینکه به تابع اصلی می رسد و در نهایت آنرا اجرا می کند .

و چون در بالا ، شناخته است که تابعی با نام sqr معرفی کرده ایم ، هر جا که در متن برنامه نام تابع را ببيند ، سریعا برگشته و از روی

دستورات تابع ، عمليات را انجام می دهد . در واقع ساختار استفاده ی ما ، از تابع ، در حالت کلی بدین صورت است :

تابع 1

 

تابع 2

 

 

تابع n

 

بدنه ی اصلی برنامه

 

اما در صورتی که بخواهيم ، ابتدا تابع اصلی برنامه را بنویسيم و بعد سایر توابع را ، ابتدا باید قبل از تابع ()main یک اشاره ی کوچک به آن

تابع دشته باشيم . بدین صورت :

int ali(int x);

int main()

{

}

int ali(int x)

{

}

 

یعنی قبل از اینکه کامپایلر به تابع ()main برسد ، به آن اطلاع می دهيم که تابعی با این نام و مشخصات داریم ، اگر فراخوانی شد ،

دستورات آن در زیر تابع اصلی است . توجه کنيد که هميشه بعد از اشاره به تابعی حتما ; فراموش نشود .

– به ساختار تعریف تابع sqr نگاه کنيد . در اولين قسمت قبل از نام تابع نوع مقدار خروجی نوشته می شود . یعنی اینکه ما که در بالا int

نوشته ایم ، بدین معنا است که مقداری که تابع آن را بازگشت خواهد داد ، یک عدد و از نوع int می باشد. در واقع می توان این قسمت

را بر حسب نياز به مقدار بازگشتی از انواع دیگری مثل long int , char و یا … تعيين کنيد .

 

– در ادامه خواهيم دید یک نوع از تابع ها هستند که هيچ مقداری را بر نخواهند گرداند . این نوع از تابع ها از نوع void هستند . در صورتی

که تابعی را از نوع void تعریف کنيم دیگر نيازی به نوشتن return نيست . البته می توان آنرا نوشت و جلوی آن را خالی گذاشت :

void ali(int x)

{

Statement;

}

یا :

void ali(int x)

{

Statement;

Return ;

}

 

در مورد توابعی که هيچ مقداری بر نمی گردانند ، بيشتر بررسی خواهيم کرد .

 

– در انتخاب نام تابع (مثلاsqr ) سعی کنيد نام تابع با کاری که می کند ، همخوانی داشته باشد . چون در برنامه های چند صد خطی ، دیگر

فرصتی برای اتلاف وقت برای بازخوانی کد ها یا حفظ کردن نام ها و … نخواهيد داشت . همچنين دقت کنيد نامی که در قسمت معرفی تابع

معرفی می کنيم ، در بدنه ی اصلی برنامه ، تابع را با همان نام فراخوانی می کنيم .

 

– در هنگام معرفی تابع در داخل پرانتز ، نوع و تعداد مقدار هایی که تابع به عنوان ورودی خواهد گرفت را معرفی می کنيم . مثلا در این تابع که

نوشتيم ، تابع یک مقدار عددی از نوع int می گيرد .

 

– ممکن است در بعضی برنامه ها ، نياز باشد که یک تابع ، چندین مقدار را دریافت کند . در اینصورت به عنوان مثال می توانيم بنویسيم :

int ali(int x, int y , int z)

{

}

 

که در اینصورت در برنامه ی اصلی می توانستيم تابع را به این صورت فراخوانی کنيم :

Cin>>a>>b>>c;

Cout<< ali(a,b,c)<<endl;

 

– یک نکته ی جالب : (default value) : اگر برای مثال ، من ، در معرفی تابعی بدین صورت بنویسم :

 

int ali(int x, int y , int z=2)

{

}

 

من در این حالت به z یک مقدار پيش فرض نسبت داده ام . یعنی اینکه ، در صورتی که در هنگام فرخوانی تابع در متن اصلی برنامه ،

مقداری را به عنوان عدد سوم به تابع بفرستم ، که مثل حالت معمولی در z قرار خواهد گرفت . وگرنه اگر هيچ مقداری به آن نفرستم ، مقدار

2 z برابر با خواهد بود . به یاد داشته باشيد که هميشه مقدار اوليه متغير ها در هنگام معرفی آنها هميشه در سمت راست ترین قسمت

نوشته می شوند . یعنی اینکه حالت معرفی زیر اشتباه است :

int ali(int x, , int z=2, int y)

{

}

مقدار نتيجه ای که تابع به عنوان خروجی پس خواهد داد ، با استفاده از دستور return باز گردانده می شود . مثلا در مثال قبلی داریم :

 

return x*x;

 

یعنی اینکه پس از فراخوانی و اجرای دستورات تابع مقدار 2 توان ی x را به عنوان خروجی بازميگرداند . اگر می خواستيم که خروجی یک تابع

همواره 2 باشد :

 

return 2;

 

و یا…

سعید عربعامری
من سعید عربعامری نویسنده کتاب 28 گام موثر در فتح متلب مدرس کشوری متلب و سیمولینک و کارشناس ارشد مهندسی برق قدرتم . بعد از اینکه دیدم سایتهای متعدد یک مجموعه کامل آموزش متلب و سیمولینک ندارند به فکر راه اندازی این مجموعه شدم
http://sim-power.ir

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

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