صفحه نخست  •  فهرست تالارها  •  نگارخانه  •  لیست اعضا  •  گروه‌ها  •  جستجو  •  ورود
 
1
ارسال موضوع جدیدپاسخ به موضوع
نویسنده پیغام
mhajiآفلاين
آخر آدم بيکار!
آخر آدم بيکار!

آواتار

تاريخ عضويت: دوشنبه 19 خرداد 1382
مجموع ارسالها: 3420
اعتبار کسب شده: 3000
محل سکونت: Montreal
جنسيت: مرد
ارسال جمعه 09 دي 1384، ساعت 23:48
 2 سال و 11 ماه پيش
#1
 
اگه يادتون باشه، سال قبل يک معماي برنامه نويسي مطرح کردم با عنوان if x != x که کوتاه و عجيب و حتي سرکاري به نظر ميرسيد.
امشب يک معماي مشابه ولي سخت تر طرح کردم: عبارت x + 0 (حداقل در زبان ++ C ) چه کاربردي ميتونه داشته باشه (البته بجز وقت تلف کردن)؟
خودم تا حالا يک کاربرد جالبش رو پيدا کردم Dancing

سه روز وقت داريد فکر کنيد d'oh! Mr. Green
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
رندآفلاين
سال صفري!
سال صفري!

آواتار

تاريخ عضويت: سه‌شنبه 15 مهر 1382
مجموع ارسالها: 57
اعتبار کسب شده: 3000
محل سکونت: کلبه اي در دوردست بر روي دريا...
جنسيت: نامشخص
ارسال شنبه 10 دي 1384، ساعت 3:47
 2 سال و 11 ماه پيش
#2
 
و در جواب mhaji:
من فکر میکنم به دو دلیل ممکنه ما از x+0 استفاده کنیم:
1: برای binding کردن:
چون 0+و 0- هم مثل NaN در ++VC، در گروه مقادیر special به حساب میان، و ما ميتونيم براي static Initialization و aggregate initialization از 0+ يا 0- استفاده کنيم(x+0 or x-0).

2- floating points optimization :
از اونجا که کامپايلر هاي ++C براي کاهش حجم برنامه و افزايش سرعت اون از روش هاي مختلف فشرده سازي و optimization بر روي متغير هاي floating point استفاده ميکنند که باعث تغيير نتيجه و دقت محاسبه اعشاري ميشه و 0+ , 0- هم باعث optimizatiion در محاسبه ميشه يعني x+0 ممکنه مقدار اوليه x رو تغيير بده.
حالا اگه ما در تنظيمات کامپايلر رفتار floating point رو عوض کنيم و اعمال optimization و precision رو غير فعال کنيم، عبارت x+0 ممکنه باعث raise شدن يک exception بشه.
شايد اينجاMSDN: specify floating point behavior اطلاعات به درد به خور بيشتري پيدا بشه.

اينم فقط به خاطر اين که mhaji ! هستي سعي کردم کمتر از سه روز فکر کنم.

_________________
شادي از خرد عاقل تر است..
Will. Durant
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
mhajiآفلاين
آخر آدم بيکار!
آخر آدم بيکار!

آواتار

تاريخ عضويت: دوشنبه 19 خرداد 1382
مجموع ارسالها: 3420
اعتبار کسب شده: 3000
محل سکونت: Montreal
جنسيت: مرد
ارسال شنبه 10 دي 1384، ساعت 14:32
 2 سال و 11 ماه پيش
#3
 
رند نوشته بود:


1- برای binding کردن
...
2- floating points optimization
...
رو غير فعال کنيم، عبارت x+0 ممکنه باعث raise شدن يک exception بشه.
...


اولي رو که متوجه نشدم d'oh! اگه ميشه اين کاربرد رو با يک مثال توضيح بديد Pray
در مورد دومي هم، من يک کاربرد x + 0 رو خواسته بودم نه يک روش پرتاب استثنا Brick wall

بيشتر فکر کنيد. من يک کاربرد واقعي x + 0 رو ميخوام
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
احسانآفلاين
آخر آدم بيکار!
آخر آدم بيکار!

آواتار

تاريخ عضويت: دوشنبه 19 خرداد 1382
مجموع ارسالها: 4997
اعتبار کسب شده: 6467
محل سکونت: شيراز
سن: 27
جنسيت: مرد
ارسال شنبه 10 دي 1384، ساعت 15:06
 2 سال و 11 ماه پيش
#4
 
mhaji نوشته بود:
اگه يادتون باشه، سال قبل يک معماي برنامه نويسي مطرح کردم با عنوان if x != x که کوتاه و عجيب و حتي سرکاري به نظر ميرسيد.
امشب يک معماي مشابه ولي سخت تر طرح کردم: عبارت x + 0 (حداقل در زبان ++ C ) چه کاربردي ميتونه داشته باشه (البته بجز وقت تلف کردن)؟
خودم تا حالا يک کاربرد جالبش رو پيدا کردم Dancing

سه روز وقت داريد فکر کنيد d'oh! Mr. Green


من هيچ کاربردي از اين عبارت توي C به ذهنم نرسيد، اما توي بعضي از زبانها از اين عبارت ميشه براي cast کردن متغير به int استفاده کرد.

_________________
» تنهايي خيلي خوب است... ... ... اما دونفره‌اش!
» برنج را با وام بانکي ميخريم، نان را قسطي و ديگر هيچ!
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
رندآفلاين
سال صفري!
سال صفري!

آواتار

تاريخ عضويت: سه‌شنبه 15 مهر 1382
مجموع ارسالها: 57
اعتبار کسب شده: 3000
محل سکونت: کلبه اي در دوردست بر روي دريا...
جنسيت: نامشخص
ارسال شنبه 10 دي 1384، ساعت 15:24
 2 سال و 11 ماه پيش
#5
 
Mhaji،
منظور من از مورد دوم لزوماً پرتاب کردن استثنا نبود. مثلاً x=<x+0 باعث عمل optimization روي عدد اعشاري ميشه.
روش اول هم binding بود که باز مثلاً x=<x+0 متغير x رو BIND مي کنه(راستش ولي خودم نمي دونم به چي بايد BIND کنه!). مثل عمل casting که احسان هم بهش اشاره کرد. اينجا رو هم نگاه کن: IEEE 754 Support in C99
قسمت binding special Values

_________________
شادي از خرد عاقل تر است..
Will. Durant
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
mhajiآفلاين
آخر آدم بيکار!
آخر آدم بيکار!

آواتار

تاريخ عضويت: دوشنبه 19 خرداد 1382
مجموع ارسالها: 3420
اعتبار کسب شده: 3000
محل سکونت: Montreal
جنسيت: مرد
ارسال شنبه 10 دي 1384، ساعت 22:37
 2 سال و 11 ماه پيش
#6
 
يک روز گذشت...

و جوابها البته تا حالا بد نبوده Applause
يک راهنمايي: کاربردي که من از x + 0 سراغ دارم در ++ C هست نه C ! (در سوال هم ننوشته بودم ++ C / C !)
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
رندآفلاين
سال صفري!
سال صفري!

آواتار

تاريخ عضويت: سه‌شنبه 15 مهر 1382
مجموع ارسالها: 57
اعتبار کسب شده: 3000
محل سکونت: کلبه اي در دوردست بر روي دريا...
جنسيت: نامشخص
ارسال يکشنبه 11 دي 1384، ساعت 14:10
 2 سال و 11 ماه پيش
#7
 

Im afraid, I cant write farsi at present because of lack of farsi font in the computer Im working with,
But, ..
Mhaji! Im realy wondered if you have another solution for mentioned question, and intrested in finding out the answer of the question and that would be kind if you give some help regard this problem.
I think this will be a k ind of trick! in your answer!

_________________
شادي از خرد عاقل تر است..
Will. Durant
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
mhajiآفلاين
آخر آدم بيکار!
آخر آدم بيکار!

آواتار

تاريخ عضويت: دوشنبه 19 خرداد 1382
مجموع ارسالها: 3420
اعتبار کسب شده: 3000
محل سکونت: Montreal
جنسيت: مرد
ارسال يکشنبه 11 دي 1384، ساعت 22:10
 2 سال و 11 ماه پيش
#8
 
دو روز گذشت...

هيچ کلکي تو کار نيست Laughing
من يک برنامه ++ C ميخوام که کاربرد اين عبارت رو نشون بده.
وقتي جواب رو بگم تعجب و شايد تحصن کنيد Anxious به هر حال جواب احسان نقطه شروع خوبيه.
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
mhajiآفلاين
آخر آدم بيکار!
آخر آدم بيکار!

آواتار

تاريخ عضويت: دوشنبه 19 خرداد 1382
مجموع ارسالها: 3420
اعتبار کسب شده: 3000
محل سکونت: Montreal
جنسيت: مرد
ارسال دوشنبه 12 دي 1384، ساعت 23:24
 2 سال و 11 ماه پيش
#9
 
سه روز گذشت...

قرار بود جواب رو الان بنويسم، اما چون دوست دارم حلش کنيد يک روز ديگه وقت ميدم
راهنمايي: Generic فکر کنيد!!!
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
رندآفلاين
سال صفري!
سال صفري!

آواتار

تاريخ عضويت: سه‌شنبه 15 مهر 1382
مجموع ارسالها: 57
اعتبار کسب شده: 3000
محل سکونت: کلبه اي در دوردست بر روي دريا...
جنسيت: نامشخص
ارسال سه‌شنبه 13 دي 1384، ساعت 12:09
 2 سال و 11 ماه پيش
#10
 


Smile .... d'oh! .. Think .... Pray
maybe you dont mean a technical trick. maybe it is about a program t use this statement wisely!.
Im thinking generic but nothing appears !
I no longer can think so missed up.
But if I had more time I would solve it.

_________________
شادي از خرد عاقل تر است..
Will. Durant
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
nobodyآفلاين
سال صفري!
سال صفري!

تاريخ عضويت: يکشنبه 19 مهر 1383
مجموع ارسالها: 33
اعتبار کسب شده: 3000
محل سکونت: شب
جنسيت: نامشخص
ارسال سه‌شنبه 13 دي 1384، ساعت 17:44
 2 سال و 11 ماه پيش
#11
 

+ like any other operators or functions can do any thing you want, with its operands as arguments. I think x is the unknown part of the expression not +

_________________
آن کس که ايمان ندارد، چگونه قدم برمي دارد؟
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
mhajiآفلاين
آخر آدم بيکار!
آخر آدم بيکار!

آواتار

تاريخ عضويت: دوشنبه 19 خرداد 1382
مجموع ارسالها: 3420
اعتبار کسب شده: 3000
محل سکونت: Montreal
جنسيت: مرد
ارسال سه‌شنبه 13 دي 1384، ساعت 22:49
 2 سال و 11 ماه پيش
#12
 
و جوابي که منتظرش بوديد:


template <class T>
class LabelNumerical : public ...
{
private:

T val;

public:

...

virtual const char* toString() const
{
std::ostringstream ss;
ss<< ( val + 0 );

static string s;
s.clear();
s.append(ss.str());

return s.c_str();
}

}; // end of class

// Ok, val will be treated as an integer and so toString has the desired effect here:
typedef LabelNumerical<unsigned char> LabelUChar;

typedef LabelNumerical<int> LabelInt; // Ok, + 0 has no effect

// BUT NOT: typedef LabelNumerical<string> LabelString; ! Compile time error !


اين قطعه کد، کاربرد واقعي عبارت val + 0 رو نشون داد. دقت کنيد که val + 0 علاوه بر اينکه داره يک نوع ضعيف (weak type) رو تحميل ميکنه (يعني جمع با 0 بايد براي T تعريف شده و بي اثر باشه)، عددهايي از جنسchar رو با cast کردن به int به درستي تبديل به رشته عددي ميکنه. نکته جالب اينه که در اينجا عباراتي مثل
(int) x
يا
(double) x
در حالت کلي غلطند!
و حدس (فقط حدس!) ميزنم x * 1 قابل استفاده نيست چون ممکنه کامپايلر بهينه اش کنه Sad (براي اطلاعات بيشتر ميتونيد به مرجعي که رند داد بود مراجعه کنيد)
البته با توجه به قابليتهاي منحصر به فرد ++ C از قبيل operator overloading، automatic type conversion و از همه مهمتر template، به سادگي ميشه برنامه هايي نوشت که در اونها عبارت x + 0 يک کار دلخواه انجام بده، و من در اينجا nobody رو تشويق ميکنم Applause احتمالا اگه باز هم وقت اين معما رو تمديد ميکردم، احسان يا رند ميتونستند جواب کامل رو پيدا کنند. به هر حال جايزه اي که در نظر گرفته بودم يک 206 آبي بود که متاسفانه برنده نداشت Laughing
 
1
1
0
پاسخ به صورت نقل قول بازگشت به بالای صفحه
نمایش پیغامهای ارسال شده قبلی:      
ارسال موضوع جدیدپاسخ به موضوع
موضوعات مرتبط
هيچ پيغام جديدي ارسال نشده است معما!
1
پاسخها: 127 بیننده: 3459 نویسنده: mhaji
هيچ پيغام جديدي ارسال نشده است دوست داريد باچه کسي ازدواج کنيد؟
3
پاسخها: 147 بیننده: 8680 نویسنده: مسافر کوير
هيچ پيغام جديدي ارسال نشده است ابتکارات باورنکردني!
2
پاسخها: 11 بیننده: 379 نویسنده: احسان
هيچ پيغام جديدي ارسال نشده است نفس خود را نگه داريد!
1
پاسخها: 13 بیننده: 455 نویسنده: armoazn

مشاهده موضوع قبلی مشاهده موضوع بعدی
قبلی تالار بعدی

 پرش به:   

شما نمی‌توانید در این تالار موضوع جدیدی ارسال کنید
شما نمی‌توانید به موضوعات این تالار پاسخ دهید
شما نمی‌توانید پیغامهای ارسالی خود در این تالار را، ویرایش کنید
شما نمی‌توانید پیغام های ارسالی خود در این تالار را حذف کنید
شما نمی‌توانید در نظرسنجی‌های این تالار شرکت کنید
قوانين تالارهاي گفتمان گزارش خطا
سوال در مورد تالارهاي گفتمان پيشنهاد
تمام ساعات و تاریخها بر حسب 4.5+ ساعت گرینویچ می‌باشند
تبليغات: