PDA

View Full Version : سوال: خاصیت بازگشت پذیری ؟ void ?



DR.HTML
چهارشنبه 23 فروردین 1391, 19:35 عصر
سلام دوستان من حدود چند ماهیه دارم c++ کار میکنم اما شاید باور نکنید هنوز نفهمیدم کار void و بازگشت پذیری چیه
کلی جستجو کردم و فهمیدم یکی از خاصیت های vodi اینه که به شی خاصیت بازگشت پذیری میده اما نمیدونم خاصیت بازگشت پذیری اصلا چیه
میشه پایه ای و اساسی یکی برای من توضیح بده کلی جستجو کردم به نتیجه مطلوب نرسیدم
ممنون

Felony
چهارشنبه 23 فروردین 1391, 20:33 عصر
کلی جستجو کردم و فهمیدم یکی از خاصیت های vodi اینه که به شی خاصیت بازگشت پذیری میده
خدا خیر نده افرادی رو که اینطور کتاب ترجمه میکنن ، خاصیت بازگشت پذیری !

ببین ما 2 نوع تابع داریم ، یکسری از توابع هستند که یکسری پارامتر دریافت میکنن و بسته به اون پارامترها کار انجام میدن و چیزی برگشت نمیدن ، مثلا یک متن رو میگیره و مستقیما چاپش میکنه ، پس چیزی رو به روال صدا زننده این تابع برگشت نمیده ، در این مواقع از void برای اینکه بگیم تابع چیزی برگشت نمیده استفاده میکنیم .

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

MAN_UNITED
چهارشنبه 23 فروردین 1391, 20:55 عصر
من به توضیحات دوستمون یک موضوعی رو اضافه کنم که توابع void علاوه بر اینکه به کامپایلر میفهمونه که این تابع ممکنه خروجی نداشته باشه بلکه برعکس با استفاده از این توابع می توان 2 و یا بیشتر از 2 خروجی داشته باشیم.

DR.HTML
چهارشنبه 23 فروردین 1391, 21:26 عصر
خدا خیر نده افرادی رو که اینطور کتاب ترجمه میکنن ، خاصیت بازگشت پذیری !

ببین ما 2 نوع تابع داریم ، یکسری از توابع هستند که یکسری پارامتر دریافت میکنن و بسته به اون پارامترها کار انجام میدن و چیزی برگشت نمیدن ، مثلا یک متن رو میگیره و مستقیما چاپش میکنه ، پس چیزی رو به روال صدا زننده این تابع برگشت نمیده ، در این مواقع از void برای اینکه بگیم تابع چیزی برگشت نمیده استفاده میکنیم .

یکسری توابع هم هستن که یکسری پارامتر ورودی میگیرین و یکسری پردازش روشون انجام میدن و در آخر باید مقداری رو به روال صدا زننده خودشون برگردونن ، مثلا تابعی که 2 عدد میگیره و حاصل جمعشون رو به روال صدا زننده برمیگردونه ، در این نوع موارد از نوع داده ای که قراره اون تابع برگشت بده به عنوان نوع خروجی تابع استفاده میشه ، حالا ممکنه نوع داده خروجی یک نوع داده ای استاندارد مثل int و char و ... باشه یا ممکنه یک نوع داده ای شخصی باشه که برنامه نویس تو برنامه تعریفش کرده .
ممنون دوست من بخاطر توجهت من تا حدی دستگیرم شد اگر ممکنه میشه یه مثال ساده برای بنده بزنید ؟

حامد مصافی
چهارشنبه 23 فروردین 1391, 22:18 عصر
اگر نوع یک تابع void باشد یعنی آن تابع چیزی را بر نمیگرداند
اگر در داخل پرانتز‌های یک تابع void نوشته شده باشد یعنی تابع پارامتری دریافت نمیکند.
اگر اشاره‌گری از نوع void تعریف شود میتواند به هرچیزی اشاره کند.
مثال: تابع زیر می‌تواند هر چیزی را برگرداند.


void *sampleFunc(){
//return 'c';
//return "salmple string";
//return 0;
//return 1.0;
//int *n; return n;
}

vistacali
پنج شنبه 24 فروردین 1391, 12:43 عصر
در ادامه تکمیل صحبت دوستان
"تابع بازگشتی" ، تابعی است که در بدنه اش، همان تابع فراخوانی شده است. به عبارت بهتر، تابعی که خود را فراخوانی می کند. البته این فراخوانی می تواند غیر مستقیم نیز باشد؛ یعنی تابع اول ، تابع دیگری را فراخوانی می کند که در آن، تابع اول فراخوانی شده است. استفاده از توابع به صورت بازگشتی در بسیاری از مواقع موجب کاهش کد نویسی می شود ولی باید در هنگام استفاده از انها دقت کرد. معمولا هنگامی که با حلقه های نا مشخص طرف هستیم یکی از راه ها استفاده از توابع بازگشتی است. برای مثال حالت کلی توابع بازگشتی به صورت زیر است :




TYPE Function_Name (Arguments Declaration)
{
// Code / Condition

Function_Name (new Arguments);

// Code / Condition
}


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

int Fact (int a)
{
if (a > 1)
return a*Fact(a-1);
else
return 1;
}

در تابع بالا شرط a > 1 برای کنترل تابع استفاده شده است، اگر عدد 1 یا کوچکتر از آن به تابع ارسال شود، مقدار 1 بازگشت داده می شود و در غیر این صورت، تا زمانی که این شرط برقرار باشد، تابع Fact خود را فراخوانی می کند و در نهایت با رسیدن a به عدد 1، این حلقه یا "خود فراخوانی" خاتمه می یابد و تابع مقدار حاصل را باز می گرداند.

در اخر دوست گرامی میشه اسم اون کتاب و نام مترجم و نام نویسنده که این توابع را خاصیت برگشت پذیری گذاشته رو ذکر کنی ممنون میشم این کار رو اینجام بدی