PDA

نسخه کامل مشاهده نسخه کامل : عبارت محاسباتی



star462
11-01-2009, 20:23
سلام
میشه برای من توضیح بدین چرا جواب عبارت زیر وقتی کامپایل میکنم 5 میشه از نظر من جواب باید 9 باشه .
من با tcc کامپایل کردم




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

Mehran NZ
11-01-2009, 22:13
سلام
میشه برای من توضیح بدین چرا جواب عبارت زیر وقتی کامپایل میکنم 5 میشه از نظر من جواب باید 9 باشه .
من با tcc کامپایل کردم




برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چه سوالی پرسیدید بسیار بسیار عجیب هست!!! بنظر من هم باید 9 بیاد
و اگر در بورلند و VS عبارت به همان صورتی که دوستمون نوشته, نوشته بشه جواب 5 و اگر بصورت زیر نوشته بشه 9 میاد!!!!

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

و اگه خودمون هم بخوایم مقدار عددی بصورت پایین بدیم جواب 9 می شه!!
d=6*2/2*2-3;

star462
11-01-2009, 22:21
دقیقا دوستمون درست میگه
تمام مشکل سر c ++ آخریست یعنی اگه به جا ++c , c بزاریم جواب میشه 11
ولی ++c میزارم باز میشه 9
جدا هم بنویسیم درست میشه
حالا چرا این جوری میشه!!!!!!!

humphry
11-01-2009, 22:47
جواب این موضوع رو با معرفی اپراتور تک اپرتندی پلاس پلاس شروع میکنم.
این دستور شامل دو بخش می شه
preincrement: ++x
این دستور قبل از آغاز عملیات در سطر متغیر را یک واحد اضافه کرده و سپس عملیات رو انجام می ده و حاصل رو اساین می کنه
در واقع در سوال شما در خط سوم ابتدا مقدار سی برابر 3 قرار داده می شه و بعد حاصل عبارت حساب میشه. اگر شما در یک خط از یک متغیر چند بار استفاده کنید و یکی از انها را به این شکل پلاس پلاس کنید در نهایت تغییر در همه جا اعمال می شه.
++postincrement: x
این عملگر پس از انجام محاسبات و پایان سطر بازگشته و مقدار متغیر رو یکی زیاد می کنه. و به خط بعد می ره.

humphry
11-01-2009, 22:50
دلیل تفاوت بین دو کدی که مهران عزیز هم کامپایل کرده مشخص شد...

Mehran NZ
11-01-2009, 22:56
عجب چیز مسخره ای مگر همچین چیزی ممکن هست؟ دو کدی که در c# و c++ نوشته شدند - c# عبارت 9 و c++ عبارت 5 رو نتیجه می ده!!!
(if رو برداشتم که در c# هم کامپایل شه ولی در اصل موضوع هیچ فرقی نداره)
کد در c#

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

کد در c++


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

mahdi7s
11-01-2009, 23:40
كامپايلر من مقدار 9 رو چاپ مي كنه(microsoft visual c++6)

اون 2 تا كامپايلر(سي شارپ و خودم) مال يه شركت معتبر هستن(مايكروسافت) ولي اون نه!

Mehran NZ
11-01-2009, 23:46
كامپايلر من مقدار 9 رو چاپ مي كنه(microsoft visual c++6)

اون 2 تا كامپايلر(سي شارپ و خودم) مال يه شركت معتبر هستن(مايكروسافت) ولي اون نه!

اصلا هم عجيب نيست.
Microsoft Visual Studio 2008 هم مقدار 5 رو چاپ می کنه
به هر حال باگی هستش که پیدا شده و کاریش هم نمی شه کرد
فعلا

star462
12-01-2009, 08:53
میشه بیشتر توضیح بدین؟!
من دقیق نگرفتم چی شد :41:
عبارت ما به خاطر اینکه c++ آخرش داره از سمت راست محاسبه میشه؟
اگه c خالی بود یا ++c از چپ شروع میشد
مرسی

humphry
12-01-2009, 13:38
اما به نظر من هنوز هم این موضوع باگ و مشکل نیست اگه توضیحی که دادم بخونی متوجه می شی. در خطی که عبارات نوشته شده قبل از انجام هر محاسبه ای مقدار سی برابر 3 قرار داده می شه و بعد سایر محاسبات انجام می شه.توی کامپایلر های غیرمعتبر هر جا ++ باشه با +1 عوض می شه و دلیل این اشکال هم همینه ...

humphry
12-01-2009, 13:43
البته اضافه می کنم که با اپراتور ++ توی سی شارپ اشنایی ندارم اما توی سی پلاس پلاس این طوره

Mehran NZ
12-01-2009, 14:18
مثل اینکه دیشب p30 قاطی کرده بود من اصلا پستهای جناب humphry و star462 رو ندیده بودم و مثل این بود که 2 تا پست پشت سر هم زده باشم - با تشکر از humphry جان الان متوجه شدم که چطور حساب می شه
در واقع کامپایلر کد رو به این صورت تبدیل می کنه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که بعد از postfix شدن بصورت پایین می شه و جواب بدست میاد و محاسبه می کنه (ولی باز هم از نظر من اشتباهه و مال c# درست تره)


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

star462
13-01-2009, 12:31
منم گرفتم چی شد!!!:20:

humphry
13-01-2009, 23:48
خب بالاخره اگه نواقصی نبود که دولوپی هم در کار نبود