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

دالة لنحديد السنة البسيطة من السنة الكبيسة

مغلق
بدأه MohamedElSadany في 19 ديسمبر 2006 · 6 رد · 6,970 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

بالطيع من الممكن أن تستغنى عن قراءة هذا الموضوع بكتابة سطر واحد من الكود مثل

Dim LeapYear As Boolean = System.DateTime.IsLeapYear(2006)

وسوف يؤدى نفس الغرض

ولكن

هل تعلم ما وراء هذا السطر

وكيف تم تحديد النسة البسيطة من السنة الكبيسة؟

إن هذا الموضوع ليس برمجياً بالدرجة الأولى بقدر ما هو ثقافي

فالتقويم الميلادي يقوم على أساس أن كل ثلاث سنوات بسيطة تكون بمعدل

365

يوما

والسنة الرابعة تكون كبيسة بمعدل

366

يومًا

واستمر هذا التقويم إلى سنة

1582

ميلادياً ، وبالضبط في تاريخ

4/10/1582

حيث لاحظ الفلكيون في هذا السنة في عهد البابا الثالث عشر جريجوري أن دوران الأرض حول الشمس في السنة الواحدة ليس

365.25

يومًا

إنما أقل بقليل من ذلك

حيث أن دوران الأرض حول الشمس في السنة الشمسية أو السنة المدارية الواحدة يساوي

365.24219878

وهذه الفترة الزمنية التي هي بمقدار

0.0078

من اليوم في السنة الواحدة قد غيرت فصول السنة على مدى السنين المنصرمة

لذا أمر البابا جوريجوري بإجراء إصلاح على التقويم المقدم من الفلكيين حول هذا الفرق

فتقرر إصلاح التقويم كالآتي

1-

تغييرالتاريخ بعد يوم

4/10/1582

إلى

15/10/1582

بدلاً من

5/10/1582

وذلك حتى يتلاقى فارق السنين المُنصرمة مع الزيادة

2-

تبقى السنوات الكبيسة كما هي

أي أن أي سنة تقبل القسمة على رقم

4

بدون باقي فهي كبيسة، وما عداها يكون سنة بسيطة

باستثناء (رؤوس القرون) أي السنوات التي يكون آحادها وعشراتها (00) لا تكون كبيسة إلا إذا قبلت القسمة على رقم

400

بدون باق

أو إذا كانت السنة واقعة في رأس قرن يُحذف الصفران في آحادها وعشراتها وباقي رقم السنة إذا قبل القسمة على رقم

4

من دون باق تكون كبيسة

وعلى هذا يكون في كل

400

سنة شمسية يوجد

97

سنة كبيسة

في حين ان التقويم الأصلى قبل ذلك كان يُوجد

100

سنة كبيسة كل

400

سنة

ولكى نترجم ما سبق إلى دالة برمجية فإننا سوف نقوم بالآتى

إذا كانت السنة لا تقبل القسمة على

4

بدون باقى فهى سنة بسيطة

If year Mod 4 <> 0 The

Return False

End If

ونخرج من الإجراء

أما فى حالة كونها تقبل القسمة فهناك حالتين

الحالة الأولى

أن تقبل القسمة على

100

بدون باقى

فإذا قيبت أيضاً القسمة على

400

بدون باقى تصيح سنة كبيسة

If year Mod 100 = 0 Then

Return year Mod 400 = 0

أما الحالة الثانية فهى دوما كبيسة

Else

Return True

End If

وفى النهاية هذا هو الشكل الأخير للدالة

#Region " IsLeapYear "

		''' <summary>
		''' Returns an indication whether the 
		''' specified year is a leap year.
		''' </summary>
		''' <param name="year">
		''' A 4-digit year. 
		''' </param>
		''' <returns>
		''' True if year is a leap year; otherwise, false.
		''' </returns>
		Public Shared Function IsLeapYear(ByVal year As Integer) As Boolean
			If year Mod 4 <> 0 Then
				Return False
			End If
			If year Mod 100 = 0 Then
				Return year Mod 400 = 0
			Else
				Return True
			End If

		End Function 'IsLeapYear
#End Region

والله المُستعان

#3

شكراً لك أخى العزيز على المرور والمشاركة

#4

جزاك الله خيرا

و الى الامام يا اخي الكريم.

في المثال يتضح المقال

#5

جزانا الله خيراً وإياكم

#6

معلومات قيمة جازاكم الله خيرا

لا تَقُولن لِشيءٍ ذَا نَاقِصٌ ... وَلَكن أَعمل وَقُل ذَا أكملُ

#7

جزانا الله خيراً وإياكم يا أخي العزيز

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

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