ورود

نسخه کامل مشاهده نسخه کامل : کسی میدونه توابع چیه و چطور تعریف میشه؟



judaki
06-11-2010, 23:15
سلام دوستان خوبید

ببخشید من توابع رو سر کلاسمون یاد نگرفتم و کتاب هم خوندم زیاد چیزی متوجه نشدم.
مثل این که توابع 4 نوع اند .1 توابع با ورودی با خروجی 2 توابع با ورودی بدون خروجی و ...

کسی میتونه کامل توضیح بده یا لینکی معرفی کنه که توابع رو خوب توضیح داده باشه و چند تا مثال هم از هر مدل به صورت خیلی ساده و مفهومی بده.

کلا چند تا مثال با توضیح خوب از توابع . خواهشا مثل کتابهای آموزشی نباشه .
ممنون

dewdrops
12-11-2010, 09:56
در حالت کلی تعریف تابع به شکل زیر هست:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


که بر اساس این تعریف چهار حالت بوجود میاد:



1- تابع پارامتر ورودی نداره و خروجی هم نداره



2- تابع هم پارامتر ورودی داره اما فقط یه خروجی میتونه داشته باشه



3-تابع یک خروجی داره اما هیچ پارامتر ورودی ای نداره



4-تابع خروجی نداره اما یک پارامتر ورودی داره



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




خب حالا بر مبنای هر کدوم از این حالات یه مثال میزنم .

1-برنامه ای بنویسید که با فراخوانی تابع print پیغام hello,welcome رو به کاربر نشون بده .

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


2- برنامه ای بنویسید که عددی را گرفته به تابع بدهد اگر عدد زوج بودپیغامی مبنی برزوج بودن و اگر فرد بود پیغامی مبنی بر فرد بودن را چاپ کند.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


نکته 1 : حتما باید توابع در همه 4 حالت prototype داشته باشند. یعنی چی ؟ یعنی قبل تابع main() یه الگویی از تابع رو تعریف کنیم تا زمانی که کامپایلر به این خط رسید بفهمه ما جلوتر تابعی با اون مشخصات داریم . نوشتن این قسمت هم خیلی کار سختی نیست فقط باید خط اول توابع که شامل نوع خروجی و نام تابع و انواع پارامترها هست رو کپی بگیری وبیاری تو این قسمت قرار بدی . البته بهتر هست که تو قسمت پارامترهاش فقط نوع رو قرار بدی .
نکته2: ما در دو حالت مقدار رو به تابع ارسال میکنیم
1- call by value:
2-call by refrence
البته نمیدونم اینا رو به شما گفتن یا نه . اگر گفتن و شما هم درک کردید که هیچ اگر نه که بگید تا بیشتر توضیح بدم .
نکته 3 : وقتی یه مقداری رو به یه تابعی ارسال میکنیم این مقدار نامش تو خط اول میتونه تغییر کنه یا نکنه. مثلا تو مثال بالا وقتی متغیر با نام num رو فرستادم به تابع میتونستم تو خط اول تابع اسمش رو بذارم هر چیزی غیر از num .

3- برنامه ای بنویسید که داخل تابعی دو عدد را گرفته و جمع حاصل را به برنامه اصلی برگرداند.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

4-بر نامه ای بنویسید که عددی را از کاربر گرفته به تابعی ارسال کند تا به تعداد آن برای شما * را چاپ کند.

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

judaki
12-11-2010, 18:55
سلام

ببخشید جناب dewdrops اگه ممکنه یه مقداری هم درمورد اون نکته ی 2 توضیح بدید.

dewdrops
14-11-2010, 21:05
برای توابع در c++ به 3 روش میشه مقدار ارسال کرد .

1-call by value:ارسال با مقدار
2- pass-by-reference by reference argument: ارسال با ارجاع با آرگومان ها ارجاعی
3-pass-by-reference with pointer arguments:ارسال با ارجاع با آرگومان های اشاره گر

وقتی آرگومانی از طریق ارسال با مقدار به تابعی پاس داده میشه ، یک کپی از مقدار آرگومان ساخنه میشه و تابع مورد نظر ارسال میشه .حالا اگر شما داخل تابع مقدار این متغیر رئ تغییر بدید هیچ تاثیری روی مقدار متغیر در تابع فراخواننده نداره .

اما تو حالت دوم و سوم هر تغییری روی مقدار متغیر بدی رو مقدار متغیر در تابع فراخواننده تاثیر میذاره.

نکته: ارسال با ارجاع یا اشاره گری از نظر کارایی بر ارسال با مقدار برتری داره چون در این حالت سربار مربوط به کپی کردن داده های بزرگ وجود نداره .

ارسال با ارجاع با ارسال با اشاره گر هیچ فرقی باهم ندارن .ولی ما ارسال با ارجاع رو فقط تو c++ داریم و تو C این روش وجود نداره.

خب حالا میریم سر مثال:

چون شما هنوز اشاره گر نخوندی من از کتاب دایتل یه مثال در رابطه با دو روش اول میذارم.




برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


موفق باشید.