المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : لغز بالـ c++ << اللي يحله يحصل .....


عالم الحاسوب
25 - 02 - 2009, 14:56
مساء / صباح الورد

عندي هنا لغز بسيط .. عباره عن كود بلغة الـC++ .. اذا وجد تفاعل .. راح تكتمل السلسله على فترات :ev: .. و الحلول ترسل ع الخاص << عشان محد يغش من الثاني :vertag:

عندنا هذا الكود

#include<iostream.h>
#define SQ(x) (x*x)
int main()
{
int a,b=4;
a=SQ(b+2);
cout << ("a=%d\n",a) << endl;
return 0;
}

في هذا الكود تم تعريف ماكرو لحساب مربع العدد .. و من ثم تم استدعاؤه في الـ main
نلاحظ في الـmain أن قيمة المتغيرات a,b عرفت بـ 4
و عند استدعاء الماكرو في الـmain نقوم بإرسال قسمة b مضافا إليها 2 و هنا يكون الناتج 2+4 =6
و عليه تكون ناتج التربيع 36 .. و لكن نجد ان الناتج من البرنامج هو الرقم 14 !!!
كيف ظهر هذا الرقم و ما هو التغيير الذي يجب عمله للوصول للناتج الصحيح !!

بإنتظار إجاباتكم

تحياتي ... عالم الحاسوب

حسين الغافري
25 - 02 - 2009, 17:16
شكله اصدار قديم هذا :icon_wink:
<iostream.h>

احيده بدون H :cg:

CS.Student
25 - 02 - 2009, 17:31
شكله اصدار قديم هذا :icon_wink:
<iostream.h>

احيده بدون H :cg:


مع الاتــش >> مب ســتاندر :biggrinclarifils:!!

اي كــومبــايلــر ممكن يقـبل الصيغـتين
بس الكومبــايلــرات ^^ العتـيجه ماراح تـقبل الثنتـين !!

ولما تــكتب دوت اتــش
مايحتــاي تعــرف النــيم سبــيس :lu:

:bt: <<< بــقايا السـي بلس بلس .. سنه أولــى !!

حسين الغافري
25 - 02 - 2009, 18:10
مع الاتــش >> مب ســتاندر :biggrinclarifils:!!

اي كــومبــايلــر ممكن يقـبل الصيغـتين
بس الكومبــايلــرات ^^ العتـيجه ماراح تـقبل الثنتـين !!

ولما تــكتب دوت اتــش
مايحتــاي تعــرف النــيم سبــيس :lu:

:bt: <<< بــقايا السـي بلس بلس .. سنه أولــى !!

فهمت شوية :icon_wink:

بحاول احله :biggrinclarifils:





:lw:<<<<<<<<<<<<<<ياخي ينزقني هذا لما اشوفه :confused:

Irkan
25 - 02 - 2009, 19:12
#include<iostream.h>
#define SQ(x) (x*x)
int main()
{
int a,b=4;
a=SQ( (b+2) );
cout << ("a=%d\n",a) << endl;
return 0;
}

عالم الحاسوب
25 - 02 - 2009, 19:18
شكرا اركان الحل صحيح << قلنا ترسله ع الخاص عشان الشعب بعدهم يحاولون :vertag:


بس بعد في حل ثاني :mt:


بإنتظار المشاركات و بعدين بشرح الفكره للشعب

Mazin
25 - 02 - 2009, 19:29
#include<iostream.h>
#define SQ(x) (x*x)
int main()
{
int a,b=4;
a=SQ( b+2 );
cout << b+2*b+2 << endl; //equals 14
cout << ("a=%d\n",a) << endl;
return 0;
}

الشرح:

في حالة وضع الاقواس مثل ما عمل اركان في الرد السابق SQ بترسل b+2 بعد الجمع وبيصير الناتج 6*6 يساوي 36
اما في الحالة الاولى وهي ارسال b+2 قبل الجمع سيكون الناتج b+2*b+2 واحنا دارسين في زمان ++c ان الضرب يكون قبل الجمع يعني 2*b يساوي 8 وبعد ذلك 8+2 يساوي 10 وبعد ذلك 10+b يساوي 14

CS.Student
25 - 02 - 2009, 19:54
ماشــاء الله
شطاااار الشــعب
:ay:

>> كل التوفيق للجميع ..

عالم الحــاسوب .. نتــريا اللغز الثـاني

عالم الحاسوب
25 - 02 - 2009, 22:49
#include<iostream.h>
#define SQ(x) (x*x)
int main()
{
int a,b=4;
a=SQ( b+2 );
cout << b+2*b+2 << endl; //equals 14
cout << ("a=%d\n",a) << endl;
return 0;
}

الشرح:

في حالة وضع الاقواس مثل ما عمل اركان في الرد السابق SQ بترسل b+2 بعد الجمع وبيصير الناتج 6*6 يساوي 36
اما في الحالة الاولى وهي ارسال b+2 قبل الجمع سيكون الناتج b+2*b+2 واحنا دارسين في زمان ++c ان الضرب يكون قبل الجمع يعني 2*b يساوي 8 وبعد ذلك 8+2 يساوي 10 وبعد ذلك 10+b يساوي 14

شرحك صحيح .. شكرا أخ مازن :ay:

يعطيك العافيه

admin
16 - 03 - 2009, 09:31
موضوع حلــو... و أفكار رائعه منج عزيزتي

و بانتظار المـــــــــزيـــد :ay:

:: لمسات ::
16 - 03 - 2009, 14:27
:icon_wink::icon_wink:

الله يعيني !! :nosweat:

عالم الحاسوب
16 - 03 - 2009, 16:17
موضوع حلــو... و أفكار رائعه منج عزيزتي

و بانتظار المـــــــــزيـــد :ay:

شكرا ادمن


:icon_wink::icon_wink:

الله يعيني !! :nosweat:

:ec::ec::ec: