الثلاثاء، 23 ديسمبر، 2008

كم عمرك بالثواني؟

لا زلت مع كتاب Learn to Program، في لغة روبي يجب أن تخبر مترجم اللغة إن كنت تريد إجراء عملية حسابية بالأرقام الصحيحة أو بالأرقام العشرية، لأن عملية تقسيم 9 على 2 ستكون 4، بينما قسمة 9.0 على 2.0 ستكون 4.5 وهي الإجابة الأكثر دقة.

لكن ما الفائدة من إجراء عملية حسابية بالأرقام الصحيحة؟ الكاتب يطرح مثالاً فيقول بأن دار للسينما تعرض أفلاماً مختلفة وكل فيلم يكلف دولارين، وهو يملك 9 دولارات، فكم فيلماً يمكنه مشاهدته؟ 4 أفلام، لأنه لا يستطيع أن يشاهد 4 أفلام ونصف فيلم! إما أن يدفع تكلفة الفيلم بالكامل أو لا يدفع، هناك أشياء لا يمكن تقسيمها.

في نهاية الفصل الثاني وضع الكاتب تمارين مختلفة، الأول كم ساعة في العام؟ هذه بسيطة، كل يوم يحوي 24 ساعة تقريباً، وكل عام يحوي 365 يوماً - 366 في السنة الكبيسة - وهذا يعني 8760 ساعة في العام.

كم دقيقة في العقد؟ 60 دقيقة × 24 ساعة × 365 يوماً × 10 سنوات = 5256000 دقيقة.

كم عمرك بالثواني؟ حسناً هذا سؤال متعب من ناحية معرفة وقت ولادتي والوقت الذي أكتب فيه الإجابة وكذلك حساب السنوات الكبيسة، أعرف الإجابة لكنها ستكون طويلة، فمن يملك إجابة؟

شخصياً رأيت أن أجري عمليتين حسابيتين، واحدة تتعلق بالسنوات الكبيسة والأخرى ببقية السنوات ثم جمع النتيجتين، فهل هناك حل أفضل من ذلك؟

سؤال أخير لكنه يعكس العمليات الحسابية، يقول الكاتب بأن عمره 912 مليون ثانية، فكم عمره بالسنوات؟ مرة أخرى تأتي مسئلة السنوات الكبيسة، هل هناك طريقة لإجراء عملية حسابية بسيطة تأخذ في عين الاعتبار السنوات الكبيسة؟

ربما أن أعقد الإجابة أكثر من اللازم، فيمكن ببساطة فعل التالي: 921 مليون ÷ 60 دقيقة ÷ 60 ثانية ÷ 24 ساعة ÷ 365 يوماً = 29 عاماً، هذه إجابة تقريبية، فهل هناك إجابة أفضل.

سأكتفي بهذا اليوم، أتمنى أن تشاركوني بحلول أفضل.

7 تعليقات:

BoHSaiN يقول...

جرب تخلي السنوات تساوي 365.25

ahmedalaa يقول...

راسي بتعورني من التفكير. ..

شكرا لك ..

................

منتديات الابداع و التميز
http://ebdaa.yoo7.com

عزوز الحسني يقول...

محمد
هذه الطريقة دقيقة جداً، ولدي طريقة أسرع بكثير، وأقل دقة بقليل، هذه الطريقة هي أن تحسب أن في السنة 365.25 يوم لكنك ستحتاج إلى متغيرات من نوع float/double.

محمد من المغرب يقول...

إليك فكرتي:
بعد التعرف على سنة البداية و سنة النهاية، مثلا 1985 و 2008، نقوم بحصر الحساب داخل عملية حسابية متكررة، ثم نضيف دالة تأكد من السنة الكبيسة:
لأجل(من س=1985، إلى س=2008، س++)
إذا كانت السنة كبيسة،
الأيام=365+الأيام (أي الأيام التي تساوي 0 تستقبل 365)
إذا لم تكن كذلك،
الأيام=366+الأيام (إذا لم تكن كبيسة فسيستقبل المتغير الأيام العدد 366)
--
و هكذا، كل سنة يتم داستها و إرسال قيمتها من الأيام للمتغير "الأيام"، تكون قيمته 0 في البداية، بعدها تصبح 365 أو 366، بعدها 730 أو.. إلى أن يصل "س" ل2008، حينها يتوقف الحساب.
ها نحن عرفنا عدد الأيام، الآن يمكن تحويله بسهولة لمعرفة عدد الساعات، الدقائق، و الثواني:
الساعات=الأيام*24 (القيمة النهائية للأيام مضروبة في 24، و سنحصل على عدد الساعات).
بنفس الطريقة نحصل على الدقائق و الثواني.

هذا يعطي قيمة دقيقة 100%.
يمكن تطبيق الطريقة في c++ للحصول على نتيجة، لم أجرب فهذه فكرة فقط :)

mostafa kamal يقول...

بالتاكيد ليس لدى علم بالبرمجه فنا محاسب حتى الان جديث التخرج وان كنت ناوى التفكير فىتعلم لغة برمجه عل الاقل اما بالنسبة للحل فعندى طريفة حاول انت ان تدخلها عل لغة برمجة
معروف طبعا ان السنوات الكبيسة تاتى كل اربع سنوات واعتقد دا مفتاح الحل طبعا هنحدد الاول عدد السنوات ثم نحدد عدد السنوات الكبيسة ونفصله بحيث يكون بالشكل التالى السنوات العادية +السنوات الكبيسة تلك النوات الكبيسة نعيد اضافتها الى السنوات العادية +الايام الزياده وهى تساوى عدد السنوات الكبيسه نكون بذلك حددنا جميع الايام والباقى سهل هل ازعجتك؟؟

عابر سبيل يقول...

كما قال الأخ ابوحسين في الرد الأول
لأن السنة أصلا هي عبارة عن 356.25
لكن يتم اختصار ال0.25 من الثلاث سنوات الأولى ودمجها مع السنة الرابعة لتصبح لدينا سنة كبيسة ب 366 يوم وتستمر الحسبة هكذا 3 سنوات ب356 وسنة ب366

مسك الحياة يقول...

كبرمجة أذكر كان الكود مقارب لفكرة الأخ محمد من المغرب كثيراً..

بالتوفيق ^.^