PDA

View Full Version : کمک- ارسال به تابع



f_cpuf
شنبه 25 اردیبهشت 1389, 16:06 عصر
با سلام
کسی هست که کمک کنه که چرا این برنامه این جواب را میده؟


int f(int n){
cout<<n;
}

main()
{
clrscr();
int x=-5,y=-2;
f(2*x++-3*x++);
x=-5;y=-2;
f(x + y+ ++x);
cout<<'\n';//--------------------
x=-5;y=-2;
f(2*x++-3*x++);
f(x + y+ ++x);
getch();
}خروجی قسمت اول هست: 11-2
خروجی قسمت دوم هست: 7-2

میشه توضیح بدید که چگونه محاسبه میکنه؟
مورد بعدی این که چرا مقدار داخل xو y نگه داشته میشه با این که محلی است نه استاتیک؟ و باید دوباره مقداردهی کرد؟

f_cpuf
شنبه 25 اردیبهشت 1389, 16:26 عصر
main()
{
clrscr();
int x=-5,y=-2;
int i=(x + y+ ++x);
cout<< i<<endl; // Out ==> -11
x=-5;
i=(x + y+ ++x);
cout<< i<<endl; // Out ==> -10

getch();
}


*******************************


main()
{
clrscr();
int x=-5,y=-2;
int i=(x + y+ ++x);
x=-5;
int j=(x + -2+ ++x);
cout<< i<<endl; // Out ==> -11
cout<< j<<endl; // Out ==> -10

getch();
}


چرا اینطور جواب میده؟:گریه::عصبانی++:
به نظرتوم من قاطی کردم یا این سیه؟:اشتباه::عصبانی++:

f_cpuf
شنبه 25 اردیبهشت 1389, 21:47 عصر
main()
{
clrscr();
int x=-5,y=-2;
int i=(x + y+ ++x);
cout<< i<<endl; // Out ==> -11
x=-5;
i=(x + y+ ++x);
cout<< i<<endl; // Out ==> -10


getch();
}کسی نیست که بگه چرا این نتیجش متفاوته؟ چطوری محاسبه میکنه آخه؟
:افسرده::عصبانی++:

tdkhakpur
شنبه 25 اردیبهشت 1389, 22:29 عصر
کسی نیست که بگه چرا این نتیجش متفاوته؟ چطوری محاسبه میکنه آخه؟


nt x=-5, y=-2;
int i=(x + y + ++x);
cout<< i<<endl; // Out ==> -10

x=-5;
i=(x + y + ++x);
cout<< i<<endl; // Out ==> -10

درسته نتیجه هر دو -10 میشه برای چی شما اعداد را متفاوت میگیرید؟کد پایینی یک کپی از بالای شده تغییر داخل عملگر ها هم نیست که نتیجه متفاوت دیده بشود!

f_cpuf
شنبه 25 اردیبهشت 1389, 23:28 عصر
{
clrscr();
int x=-5,y=-2;
int i=(x + y+ ++x);
cout<< i<<endl; // Out ==> -11
x=-5;
i=(x + y+ ++x);
cout<< i<<endl; // Out ==> -10

getch();
}
*******************************


main()
{
clrscr();
int x=-5,y=-2;
int i=(x + y+ ++x);
x=-5;
int j=(x + -2+ ++x);
cout<< i<<endl; // Out ==> -11
cout<< j<<endl; // Out ==> -10

getch();
}
چرا اینطور جواب میده؟:گریه::عصبانی++:
به نظرتوم من قاطی کردم یا این سیه؟:اشتباه::عصبانی++:




nt x=-5, y=-2;
int i=(x + y + ++x);
cout<< i<<endl; // Out ==> -10

x=-5;
i=(x + y + ++x);
cout<< i<<endl; // Out ==> -10
درسته نتیجه هر دو -10 میشه برای چی شما اعداد را متفاوت میگیرید؟کد پایینی یک کپی از بالای شده تغییر داخل عملگر ها هم نیست که نتیجه متفاوت دیده بشود!
من که -10 و-11 میده!:متعجب:
چرا اینطوریه؟ شما تو چه کامپایلری امتحان کردی؟ جواب مساوی شد. من با Turbo C++‎‎ امتحان کردم. هم 3 و هم 4.5

جالبش اینجاست که کد زیر درست جواب میده! انگار گیرش رو x++ هست:افسرده:

main()
{
clrscr();
clrscr();
int x=-5,y=-2;
int i=(x + y+ x);
cout<< i<<endl; // Out ==> -12
x=-5;
i=(x + y+ x);
cout<< i<<endl; // Out ==> -12

getch();
}
گیج شدم! :گریه::عصبانی++::افسرده:
شما نمیدونید چرا جوابها متفاوته؟

tdkhakpur
شنبه 25 اردیبهشت 1389, 23:56 عصر
شما نمیدونید چرا جوابها متفاوته؟
آخر دوست گرانمایه کجای کد شما با هم تفاوت داره که خروجی متفاوت بده؟
ب

f_cpuf
یک شنبه 26 اردیبهشت 1389, 00:36 صبح
آخر دوست گرانمایه کجای کد شما با هم تفاوت داره که خروجی متفاوت بده؟
ب

دوست عزیز شما تو کامپایلرتون امتحان کردید یا تنها از روی کد دارید جواب میدید؟
این برنامه رو ببینید:



#include<conio.h>
#include<iostream.h>
int f1(int n){
int i;
i=(++n-((n*n)/n)+n++);
return i;
}
int f2(int n){
return (++n-((n*n)/n)+n++);
}
main()
{
clrscr();
cout<<f1(2);// Out ==> 3;
cout<<endl;
cout<<f2(2);// Out ==> 4

getch();
}

sh4mid
یک شنبه 26 اردیبهشت 1389, 03:03 صبح
توی vc2008 جفتش 3 هست

hercool
یک شنبه 26 اردیبهشت 1389, 09:55 صبح
دوست من تغییری در دو تابعت نیست هر دو مثل هم هستن تغییری نداره اگر n اخرت پیش افزایشی بود یه چیزی ولی هر دو پس افزایشی هستند و در مرحله اول تغییری ایجاد نمی کنن و بنابراین خروجی تو تو هر دو تاشون هم 3 هست
البته برای تابع main هم باید نوع مشخص کنی

f_cpuf
یک شنبه 26 اردیبهشت 1389, 14:12 عصر
توی vc2008 جفتش 3 هستتو 2008 شاید درستش کردن!:متعجب:
شما 3 و 4.5 ندارید که امتحان کنید؟


دوست من تغییری در دو تابعت نیست هر دو مثل هم هستن تغییری نداره اگر n اخرت پیش افزایشی بود یه چیزی ولی هر دو پس افزایشی هستند و در مرحله اول تغییری ایجاد نمی کنن و بنابراین خروجی تو تو هر دو تاشون هم 3 هست
البته برای تابع main هم باید نوع مشخص کنی

شما امتحان کردید یا فقط از روی ظاهر کد جواب دادید؟:متفکر:
من هم از همین تعجب کردم! مربوط به main هم نیست.
شما نمی تونید تو 3 یا 4.5 امتحان کنید؟

نکته جابش اینجاست که اگر پیش افرایشی (n++) را بردارم جواب یکسان میده!:افسرده:
یعنی:


#include<conio.h>
#include<iostream.h>
int f1(int n){
int i;
i=(n-((n*n)/n)+n++);
return i;
}
int f2(int n){
return (n-((n*n)/n)+n++);
}
int main()
{
clrscr();
cout<<f1(2);// Out ==> 2
cout<<endl;
cout<<f2(2);// Out ==> 2

getch();
return 0;
}