الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة - شغل مخك (9)

مغلق
بدأه هاني الأتاسي في 10 مايو 2002 · 9 رد · 2,065 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف توجد القيمة الوسطى لعددين من غير جمع وقسمة ..

أي أريد حساب

(a+B)/2

Coding on the Cloud and for the Cloud!

My Blog

#2

:confused: :confused: :confused: :confused: :confused: :confused: :confused:

(yess)

#3

ممكن استخدام ازاحات بس لا أريد عملية جمع .. لأن الجمع ممكن أن ينتج عنه overflow ..

Coding on the Cloud and for the Cloud!

My Blog

#4

:mad: :mad: :mad: :mad: :mad: :mad: :mad: :mad:

الإزاحة هي قسمة على 2

#5

[Code2]

إذا كان a>b

(a+B)/2 = (a - b +2b)/2 = (a-B)/2 + b

[/Code2]

بهالطريقة ما رح ينتج عندك overflow

:P

كمل لحالك :P :P :P

#6

:) محاولة جيدة وتفكير منطقي حلو ...

بس جرب هذا

a = -2147483647;

b = 5;

avg = ((a-B)>>1) + b;

cout ;)

يفضل التعامل على مستوى البتات

Coding on the Cloud and for the Cloud!

My Blog

#7

مساعدة :

الحل يعتمد على تركيب دارة الجامع ... ;)

Coding on the Cloud and for the Cloud!

My Blog

#8

الحل ياشباب ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

بدي أحط الحل بعدين وأخصركم محاولة تشغيل المخ ؟؟ :P

Coding on the Cloud and for the Cloud!

My Blog

#9

حسنا تأخرتو كثيرا بالحل لذلك سوف أضع الحل :::

دارة الجامع النصفي عبارة عن التالي : ( دخلها a , b ) وخرجها ( s , c )

a و b عبارة عن البتين الذان نريد جمعهما وال s عبارة عن نتيجة الجمع و c عبارة عن الحمل الذي سوف نجمعه مع ال البتين التاليين ..

معادلة s هي أن النتيجة واحد عندما يكون أحد البتين 1 أو :

s = a XOR b

والحمل ينتج لدينا إذا كان البتين هما واحد أي ببساطة هذه هي المعادلة :

c = a AND b

الآن من أجل تطبيق دارة الجمع كاملة يجب أن نجمع الحمل مع البتات التالية وهذا يقتضي ازاحة كالتالي :

sum32 = a XOR b + ((a AND B) SHL 1)

الازاحة على اليمين هب عبارة عن ضرب ب 2 كما نعرف . الآن من أجل أخذ المتوسط نكتفي بقسمة القيمة السابقة على 2 فتختفي الازاحة على اليمين وينتج عندنا ازاحة أخرى كالتالي :

sum32/2 = ((a XOR B) SHR 1) + a AND b

وهي المعادلة التي نحصل من خلالها على متوسط من غير أن نحصل على أي overflow .. وممكن أن نكتبها بالسي كالتالي :

avg = (a^b >> 1) + a&b;

:):)

Coding on the Cloud and for the Cloud!

My Blog

#10

100%(f)

هذا الموضوع مغلق.

مواضيع مشابهة