PDA

View Full Version : سوال: اگر بخواهيم يك تابع دو مقدار برگرداند بايد با چه دستوري اينكار را انجام دهيم؟



soheila24
دوشنبه 07 بهمن 1387, 19:47 عصر
جواب فوري ميخوام

Nima_NF
دوشنبه 07 بهمن 1387, 20:06 عصر
دوست گرامی لطفا به موارد زیر توجه کنید:
1- از عناوین کوتاه (اما مرتبط با سوال خود) استفاده کنید و سوال خود را در داخل آن مطرح کنید (به جای نوشتن جواب فوري ميخوام یا کمک یا ... )
2- درخواست انجام تمرینات دانشجویی نیز ممنوع است.

و اما پاسخ شما:
شما باید از یک struct استفاده کنید و داخل آن متغیر های خود را تعریف کنید و سپس آن را return کنید.



struct NumName
{
int x;
char name[10];
};

NumName myfunction( )
{
// ...
return NumName;
}

saeed-kh
سه شنبه 08 بهمن 1387, 13:03 عصر
وهمچنین میتونی از اشاره گر استفاده کنی دوست عزیز
وقتی آدرس چند تا پارامتر رو به تابع پاس بدی،وقتی مقادیرشون توی تابع عوض بشه ،این مقدیر توی تابع اصلی هم عوض میشه ،میشه همون برگشت مقدار

main()
{
func(&a,&b,&c,...);
}
func(* a, * b,...)
{

}

subsub
سه شنبه 08 بهمن 1387, 20:56 عصر
جواب فوري ميخوام

می تونی از ارجاع هم استفاده کنین به صورت زیر:

main()
{
func(a,b,c,...);
}
func( type1 &a,type2 & b,...)
{

}
type1 و type2 همون نوع های مورد نظر شما مثل int و char و ... هستند.


در صورتی که از ++C استفاده کنین نه C.

linux
چهارشنبه 09 بهمن 1387, 08:38 صبح
جواب فوري ميخوام

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

xman_dj
پنج شنبه 10 بهمن 1387, 16:56 عصر
می تونی از آرایه کمک بگیری...............


int* get_number()
{
int number[100];
return number;
};

azarakhshl
جمعه 11 بهمن 1387, 10:12 صبح
متغیرهای سراسری هم می تونه راه حل باشه

shask00l
جمعه 11 بهمن 1387, 12:34 عصر
متغیرهای سراسری هم می تونه راه حل باشه

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

روش مناسبتر استفاده از struct هست که دوستان اشاره کردن .

linux
جمعه 11 بهمن 1387, 13:10 عصر
روش مناسبی نیست . اما بعضی جاها مجبوریم از این روش استفاده کنیم . بقول دوستان جاده خاکی محسوب میشه .

روش مناسبتر استفاده از struct هست که دوستان اشاره کردن .

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

subsub
جمعه 18 بهمن 1387, 02:05 صبح
ببینید مشکل از آنجاست که دوستان در حل یک مساله یک راه اشتباهی را انتخاب می کنند و به یک روش اشتباه می رسند مثلا به این نقطه می رسند که حالا باید تابع ما 2 تا متغیر برگرداند ، و اینجا این سوال را مطرح می کنند ، اگر از اول صورت مساله را بگویند می فهمید که این بنده خدا اصلا کل روشی که انتخاب کرده نادرست بوده که به همچین جایی رسیده. اینجا باید پرسید که شما چی کار می خواهی انجام بدهی که به اینجا رسیدی!

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

یا تابع sort و یا کلاً توابعی که به صورت با ارجاع با آرایه‌ها کار می‌کنند، همگی نیاز به چندین خروجی دارند.

البته ممکنه شما دو یا چند خروجی رو تحت یک ساختار خروجی بدین ولی باز هم دو خروجی دارین که تنها به ظاهر آنرا یکی کرده‌اید.:لبخند:

Ali_Sam
شنبه 19 بهمن 1387, 18:18 عصر
شما باید از اشاره گرها استفاده کنید.برای این کار باید در هنگام صدا زدن تابع، آدرس آرگومان ها را وارد کنید.(به عنوان مثال اگر آرگومان p باشد،باید p& را وارد کنید.)
همچنین در تابع برای تعریف کردن پارامترهای آن باید از * استفاده کرد.(مثل p*)
با روش میتوان چند مقدار را از تابع مورد نظر به تابع main برگشت داد.
اگر نیاز به توضیح بیشتری دارید،بهم pm بزنید.

linux
شنبه 19 بهمن 1387, 22:51 عصر
اینکه از یک تابع تعدا بیشتری خروجی بخواهیم الزاماً دلیل بر اشکال راه ما نیست. مثلاً برای تابع Swap نیاز به دو خروجی داریم. حالا شما این رو هر جوری پیاده کنین، نیاز داره که دو چیز رو برگردونه. (گفتم تابع. یه وقت نگین از ماکرو استفاده می‌کنیم دو خروجی هم نمی‌خواد.)

یا تابع sort و یا کلاً توابعی که به صورت با ارجاع با آرایه‌ها کار می‌کنند، همگی نیاز به چندین خروجی دارند.

البته ممکنه شما دو یا چند خروجی رو تحت یک ساختار خروجی بدین ولی باز هم دو خروجی دارین که تنها به ظاهر آنرا یکی کرده‌اید.:لبخند:

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

Reza_A7b
یک شنبه 20 بهمن 1387, 00:15 صبح
اگه از استراکچر ها سر در میاری که حله. در غیر اینصورت دو تا متغییر عمومی تعریف میکنی مقدار اونا رو داخل تابع خاصی مشخص می کنی یا یک متغییر تعریف کن یکی رو هم برگردون به خواد تابع .

Salar Ashgi
یک شنبه 20 بهمن 1387, 12:23 عصر
سلام ، دوستان به نظر من روی یه مبحث ساده (البته سوال دوستمون برای ما محترمه) وقتی که جوابش

پیدا شده ، اینهمه وقت نذارین ، به جای این روی مباحث پیشرفته ++C بحث کنید !!!

موفق و پیروز باشید !!!

Mehdi Asgari
یک شنبه 20 بهمن 1387, 12:44 عصر
به هر حال کسی که میخواد به جاهای بالاتر برسه باید مفاهیم رو بلد باشه
حق با جناب linux هست
در زبان هایی مثل سی برای رسیدن به این هدف از ساختار ، ارایه ، لیست ، اشاره گر و ارجاع و ... استفاده می کنن.
وقتی یه ساختار برمی گردونیم که 100 تا عضو داره ، در واقع خروجی مون یکی هست : یک ساختار
در زبان های تابعی و/یا پویا (پایتون ، روبی ، F# ، haskell و ...) برای این کار یک tuple (چندتایی) میشه بر گردوند. (این ساختار در C++0x اضافه خواهد شد)
حتی در زبان هایی که بر اساس توابع ایجاد شدن (زبان های تابعی) و ساختار اصلیشون تابع هست (و بالطبع مفهوم تابع رو درست تر از بقیۀ زبان های همه منظوره پیاده سازی کردن) می بینیم که یک تابع فقط می تونه یه آرگومان بگیره و یکی برگردونه. (اگه فکر می کنید این یه ضعفه ، در مورد Currying سرچ کنید)

linux
یک شنبه 20 بهمن 1387, 13:05 عصر
به هر حال کسی که میخواد به جاهای بالاتر برسه باید مفاهیم رو بلد باشه
حق با جناب linux هست
در زبان هایی مثل سی برای رسیدن به این هدف از ساختار ، ارایه ، لیست ، اشاره گر و ارجاع و ... استفاده می کنن.
وقتی یه ساختار برمی گردونیم که 100 تا عضو داره ، در واقع خروجی مون یکی هست : یک ساختار
در زبان های تابعی و/یا پویا (پایتون ، روبی ، F# ، haskell و ...) برای این کار یک tuple (چندتایی) میشه بر گردوند. (این ساختار در C++0x اضافه خواهد شد)
حتی در زبان هایی که بر اساس توابع ایجاد شدن (زبان های تابعی) و ساختار اصلیشون تابع هست (و بالطبع مفهوم تابع رو درست تر از بقیۀ زبان های همه منظوره پیاده سازی کردن) می بینیم که یک تابع فقط می تونه یه آرگومان بگیره و یکی برگردونه. (اگه فکر می کنید این یه ضعفه ، در مورد Currying سرچ کنید)
یک تابع بیشتر از یک ورودی هم می تواند بگیرد ولی الزاما یک خروجی دارد

Mehdi Asgari
یک شنبه 20 بهمن 1387, 13:51 عصر
یک تابع بیشتر از یک ورودی هم می تواند بگیرد ولی الزاما یک خروجی دارد
مرسی. منظورم فقط زبان های تابعی بود (اگه آف تاپیک نبود بیشتر در موردش بحث می کردیم)