ورود

View Full Version : دلیل پاسخ این قطعه کد



kiani2012
شنبه 01 آبان 1395, 19:17 عصر
سلام خروجی این تکه کد 132 میشه
چرا ؟
int x=10
cout<<(++x)*(x++)

مگر اینطور نیست که خط دوم یک دستور محاسبه میشه و ++x بعد از این خط اجرا میشه؟

pe32_64
شنبه 01 آبان 1395, 22:25 عصر
سلام خروجی این تکه کد 132 میشه
چرا ؟
int x=10
cout<<(++x)*(x++)

مگر اینطور نیست که خط دوم یک دستور محاسبه میشه و ++x بعد از این خط اجرا میشه؟
جواب کل میشه 121.
جواب پرانتز اول و دوم :11
اگه ++ رو مثل یک تابع در نظر بگیری:
در صورتی که قبل متغییر بیاد : متغییر یکی بهش اضافه میشه و همون متغییر که با یک جمع شده بازگردانده میشه.
در صورتی که بعد متغییر بیاد : متغییر یکی بهش اضافه میشه ولی متغییر بدون تغییر بازگردانده میشه.

kiani2012
یک شنبه 02 آبان 1395, 04:59 صبح
جواب کل میشه 121.
جواب پرانتز اول و دوم :11
اگه ++ رو مثل یک تابع در نظر بگیری:
در صورتی که قبل متغییر بیاد : متغییر یکی بهش اضافه میشه و همون متغییر که با یک جمع شده بازگردانده میشه.
در صورتی که بعد متغییر بیاد : متغییر یکی بهش اضافه میشه ولی متغییر بدون تغییر بازگردانده میشه.


سلام تست کردم جواب 132 میشه

Symbian Master
یک شنبه 02 آبان 1395, 13:48 عصر
سلام خروجی این تکه کد 132 میشه
چرا ؟
int x=10
cout<<(++x)*(x++)

مگر اینطور نیست که خط دوم یک دستور محاسبه میشه و ++x بعد از این خط اجرا میشه؟
سلام
به این دلیل 132 میشه:
اولویت پرانتز، بیشتر از ضرب"*" هست.

kiani2012
یک شنبه 02 آبان 1395, 16:15 عصر
سلام
به این دلیل 132 میشه:
اولویت پرانتز، بیشتر از ضرب"*" هست.

منظور من اینه که مگر ++ که بعد از متغیر می آمد تاثیرشو در دستور بعدی نمیگذاشت؟

Symbian Master
یک شنبه 02 آبان 1395, 17:56 عصر
منظور من اینه که مگر ++ که بعد از متغیر می آمد تاثیرشو در دستور بعدی نمیگذاشت؟
یه نکته جالب در مورد کامپایلرها این که جواب این قطعه کد در CodeBlocks شد 132 و در Visual Studio شد 121 (که این به خاطر اولویت های هر کامپایلر هست).


به نظر میرسه ویژوال استودیو با نظر شما منطبق باشه.
اول x سمت چپ رو افزایش میده (مقدار x میشه 11) و بعد 2 تا 11 رو با هم ضرب میکنه.

kiani2012
یک شنبه 02 آبان 1395, 18:31 عصر
یه نکته جالب در مورد کامپایلرها این که جواب این قطعه کد در CodeBlocks شد 132 و در Visual Studio شد 121 (که این به خاطر اولویت های هر کامپایلر هست).


به نظر میرسه ویژوال استودیو با نظر شما منطبق باشه.
اول x سمت چپ رو افزایش میده (مقدار x میشه 11) و بعد 2 تا 11 رو با هم ضرب میکنه.

حالا کدومشون درست تره.

T.R.G.T
یک شنبه 02 آبان 1395, 21:29 عصر
از لحاظ استاندارد c++ جواب 11 × 11 اما ظاهرا در این مورد جواب 12 × 11
با این حال جواب برای من با vs 2013 مساوی با 121 بود

Symbian Master
یک شنبه 02 آبان 1395, 21:56 عصر
حالا کدومشون درست تره.
دوست عزیز
فکر میکنم بحث درست تر بودن نیست. بلکه تفاوت در IDE ها هست و اینکه هر برنامه نویس، با توجه به تجربه و شناختی که از این قبیل رفتار کامپایلر پیدا میکنه، با محیطی که راحت تر هست و عکس العملش رو میشناسه، کد مینویسه.


بنده با وجود مبتدی بودن، ولی احساس میکنم محیط VS تجاری تر و جهت بازار، مناسب تر باشه و پشتیبانی مایکروسافت هم داره. این سلیقه ی بنده ی مبتدی هست.


درضمن توی VS ، جای دو تا پرانتز رو عوض کردم و جواب یکسان بود (121)
اما توی CodeBlocks، جای دو تا پرانتز رو عوض کردم و جواب فرق کرد! (132 و 120)

ScienceLover
یک شنبه 02 آبان 1395, 21:58 عصر
درود اول x برابر با 11 میشه بعد محتوای پرانتز دومی که 12 است ضرب می شه چون اولویت با پرانتز است نه ضرب. حاصلضرب 11 در 12 می شه 132:چشمک: