مشاهده نسخه کامل
: عبارت محاسباتی
سلام
میشه برای من توضیح بدین چرا جواب عبارت زیر وقتی کامپایل میکنم 5 میشه از نظر من جواب باید 9 باشه .
من با tcc کامپایل کردم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Mehran NZ
11-01-2009, 22:13
سلام
میشه برای من توضیح بدین چرا جواب عبارت زیر وقتی کامپایل میکنم 5 میشه از نظر من جواب باید 9 باشه .
من با tcc کامپایل کردم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چه سوالی پرسیدید بسیار بسیار عجیب هست!!! بنظر من هم باید 9 بیاد
و اگر در بورلند و VS عبارت به همان صورتی که دوستمون نوشته, نوشته بشه جواب 5 و اگر بصورت زیر نوشته بشه 9 میاد!!!!
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و اگه خودمون هم بخوایم مقدار عددی بصورت پایین بدیم جواب 9 می شه!!
d=6*2/2*2-3;
دقیقا دوستمون درست میگه
تمام مشکل سر c ++ آخریست یعنی اگه به جا ++c , c بزاریم جواب میشه 11
ولی ++c میزارم باز میشه 9
جدا هم بنویسیم درست میشه
حالا چرا این جوری میشه!!!!!!!
جواب این موضوع رو با معرفی اپراتور تک اپرتندی پلاس پلاس شروع میکنم.
این دستور شامل دو بخش می شه
preincrement: ++x
این دستور قبل از آغاز عملیات در سطر متغیر را یک واحد اضافه کرده و سپس عملیات رو انجام می ده و حاصل رو اساین می کنه
در واقع در سوال شما در خط سوم ابتدا مقدار سی برابر 3 قرار داده می شه و بعد حاصل عبارت حساب میشه. اگر شما در یک خط از یک متغیر چند بار استفاده کنید و یکی از انها را به این شکل پلاس پلاس کنید در نهایت تغییر در همه جا اعمال می شه.
++postincrement: x
این عملگر پس از انجام محاسبات و پایان سطر بازگشته و مقدار متغیر رو یکی زیاد می کنه. و به خط بعد می ره.
دلیل تفاوت بین دو کدی که مهران عزیز هم کامپایل کرده مشخص شد...
Mehran NZ
11-01-2009, 22:56
عجب چیز مسخره ای مگر همچین چیزی ممکن هست؟ دو کدی که در c# و c++ نوشته شدند - c# عبارت 9 و c++ عبارت 5 رو نتیجه می ده!!!
(if رو برداشتم که در c# هم کامپایل شه ولی در اصل موضوع هیچ فرقی نداره)
کد در c#
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد در c++
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كامپايلر من مقدار 9 رو چاپ مي كنه(microsoft visual c++6)
اون 2 تا كامپايلر(سي شارپ و خودم) مال يه شركت معتبر هستن(مايكروسافت) ولي اون نه!
Mehran NZ
11-01-2009, 23:46
كامپايلر من مقدار 9 رو چاپ مي كنه(microsoft visual c++6)
اون 2 تا كامپايلر(سي شارپ و خودم) مال يه شركت معتبر هستن(مايكروسافت) ولي اون نه!
اصلا هم عجيب نيست.
Microsoft Visual Studio 2008 هم مقدار 5 رو چاپ می کنه
به هر حال باگی هستش که پیدا شده و کاریش هم نمی شه کرد
فعلا
میشه بیشتر توضیح بدین؟!
من دقیق نگرفتم چی شد :41:
عبارت ما به خاطر اینکه c++ آخرش داره از سمت راست محاسبه میشه؟
اگه c خالی بود یا ++c از چپ شروع میشد
مرسی
اما به نظر من هنوز هم این موضوع باگ و مشکل نیست اگه توضیحی که دادم بخونی متوجه می شی. در خطی که عبارات نوشته شده قبل از انجام هر محاسبه ای مقدار سی برابر 3 قرار داده می شه و بعد سایر محاسبات انجام می شه.توی کامپایلر های غیرمعتبر هر جا ++ باشه با +1 عوض می شه و دلیل این اشکال هم همینه ...
البته اضافه می کنم که با اپراتور ++ توی سی شارپ اشنایی ندارم اما توی سی پلاس پلاس این طوره
Mehran NZ
12-01-2009, 14:18
مثل اینکه دیشب p30 قاطی کرده بود من اصلا پستهای جناب humphry و star462 رو ندیده بودم و مثل این بود که 2 تا پست پشت سر هم زده باشم - با تشکر از humphry جان الان متوجه شدم که چطور حساب می شه
در واقع کامپایلر کد رو به این صورت تبدیل می کنه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که بعد از postfix شدن بصورت پایین می شه و جواب بدست میاد و محاسبه می کنه (ولی باز هم از نظر من اشتباهه و مال c# درست تره)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خب بالاخره اگه نواقصی نبود که دولوپی هم در کار نبود
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.