مشاهدة النسخة كاملة : لغز بالـ 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:
vBulletin® v3.8.4, Copyright ©2000-2012, TranZ by Almuhajir