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

عدد أيام السنة غير ثابته ! فما هو الحل؟

بدأه LED في 21 يناير 2013 · 9 رد · 3,254 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

انا بصدد عمل برنامج بحيث يصدر تقرير شهري وسنوي

 

الية عمل البرنامج, على سبيل المثال:

 

يطلب البرنامج من المستخدم إدخال عدد المنتجات بالمخزون

 

مثلا 20 الف منتج بالمخزون

 

يقوم البرنامج بتقسيم الـ20 الف على عدد الايام او الاسابيع او الشهور ( حسب الطلب)

 

النتيجة النهائية للبرنامج , يعطي المستخدم تقرير بالايام او الاسابيع او الشهور

 

مثال للتقرير

كل شهر يتم توزيع 1500 منتج , وبعد سنة المخزون سيكون فارغ , وهكذا

 

الخلاصة: يخبرك البرنامج كم مقدار المنتجات المراد توزيعها شهريا او اسبوعيا

 

المشكلة:

عدم ثبات الايام في السنة تؤثر على البرنامج

الشهر ممكن يكون 30 يوم او 28 او 29 او 31

وكل سنة تختلف عدد الايام بالشهر حسب الدورة القمرية وكبيسة ومدري شو , وووالخ

 

يعني انا اقسم الـ 20 الف على 30 يوم او 28 او 29 أو 31 ؟؟؟؟؟

واذا قسمت على 30 راح يختلف هذا الشهر في السنة القادمه وهكذا , خطأ تراكمي

 

محاولاتي بالحل : لكن حل غير لائق

بحيث عند بداية تشغيل البرنامج يطلب البرنامج من المستخدم إدخال التقويم لهذة السنة

فيقوم البرنامج بالقسمة على حسب عدد الايام الموجوده بالتقويم المدخل من قبل المستخدم

 

أسعفونا بالحل

#2

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

 

في التقويم الميلادي عدد أيام الشهر لا تختلف من سنة إلى أخرى، ما عدا شهر فبراير حيث يكون 29 يومًا إذا كانت السنة كبيسة.

1

سبحان الله وبحمده ... سبحان الله العظيم

#3

السلام عليكم،

أخي المراد من برنامجك غير واضح تماماً، أرجو أن توضحه أكثر وبالتفصيل الممل.

 

وشكراً لك

هذه الجملة خاطئة  :wacko: 


#4

إذا كنت تستخدم لغات دوت نت فالصنف DateTime  فيه مناهج تغنيك عن الفحص حيث تمرر له أي تاريخ فيعيد لك كل ما يتعلق بذاك التاريخ هل السنة كبيسة أم لا

 

فيما يخص استفسارك بإمكانك التقسيم على عدد أيام السنة الفعلية فنحن نعلم أن عدد أيام السنة هو 365.25

و مسألة السنة الكبيسة هي فقط  للابتعاد عن الكسور ولهذا جعلوا كل أربع سنوات يوم إضافي أي كل أربع أرباع يتشكل يوم

 

المهم عندما تقسم منتجاتك على 365.25 فهي الحصة الحقيقية لليوم الواحد

 

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

 

وهكذا تضمن توزيع لكل شهر حصته المناسبة لعدد أيامه

 

ولعمل دالة تحسب عدد أيام شهر ما قم بتمرير تاريخ الأول من ذاك الشهر إلى متحول من نوع DateTime  ثم أضف شهر له واطرح منه يوم فيعيد تاريخ آخر يوم من نفس الشهر

بغض النظر كان شهر 31 أو 30 أو 28 أو 29 فهي مهمة الصنف في الحساب

ثم تأخذ قسم الأيام فيكون هو عدد أيام الشهر الممرر

ثم تضرب بالحصة اليومية فتحصل على حصة ذاك الشهر

1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#5

قمت بعمل الدالة التي شرحتها لك قبل قليل بلغة السي شارب

 

// لإرجاع عدد أيام الشهر للتاريخ الممر
        public static int GetDaysOfMonth(DateTime Date)
        {
            var baseDate = new DateTime(Date.Year, Date.Month, 1); // تشكيل تاريخ بداية الشهر
            var nextMonth = baseDate.AddMonths(1); // تشكيل بداية الشهر التالي
            var lastDay = nextMonth.AddDays(-1); // تشكيل اليوم السابق لبداية الشهر التالي وهو نفسه آخر يوم في الشهر الحالي
            return lastDay.Day; // إرجاع عدد الأيام
        }
حيث أي تاريخ تمرره له يعيد لك عدد أيام شهر ذاك التاريخ ولو كان شهر شباط في سنة كبيسة سيعيد 29

 

        // لإرجاع عدد أيام السنة للتاريخ الممر
        public static int GetDaysOfYear(DateTime Date)
        {
            var baseDate = new DateTime(Date.Year, 1, 1); // تشكيل تاريخ بداية السنة
            var nextYear = baseDate.AddYears(1); // تشكيل بداية السنة التالية
            var lastDay = nextYear.AddDays(-1); // تشكيل اليوم السابق لبداية السنة التالية وهو نفسه آخر يوم في السنة الحالية
            return lastDay.DayOfYear; //  إرجاع عدد الأيام
        }
 

حيث أي تاريخ تمرره له يعيد لك عدد أيام السنة لذاك التاريخ أي 365 أو 366 في السنة الكبيسة

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 25 يناير 2013 في 04:40

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#6

كنت عاوز أشرح لك بس أبو محمد كفى ووفى

#7

ترجمة أكواد أخونا أبو محمد لل VB.Net :

 

 

 

اقتباس
Public Shared Function GetDaysOfMonth([Date] As DateTime) As Integer Dim baseDate = New DateTime([Date].Year, [Date].Month, 1) Dim nextMonth = baseDate.AddMonths(1) Dim lastDay = nextMonth.AddDays(-1) Return lastDay.Day End Function

 

 

 

 

 

اقتباس
Public Shared Function GetDaysOfYear([Date] As DateTime) As Integer

	Dim baseDate = New DateTime([Date].Year, 1, 1)

	Dim nextYear = baseDate.AddYears(1)

	Dim lastDay = nextYear.AddDays(-1)

	Return lastDay.DayOfYear

End Function

 

 

هذه الترجمة قمت بها بنفسي لذلك أي خطأ في الأكواد (إذا كنت تستخدم VB.net) راسلني على الخاص

تم تعديل هذه المشاركة بواسطة Xese في 25 يناير 2013 في 05:27

#8
المبرمج أحمد كتب:

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

 

في التقويم الميلادي عدد أيام الشهر لا تختلف من سنة إلى أخرى، ما عدا شهر فبراير حيث يكون 29 يومًا إذا كانت السنة كبيسة.

 

جزاك الله خير على المعلومه التي كنت اجهلها , ماذا لو كان بالتاريخ الهجري هل هو ثابت؟

 

 

Abboodd كتب:

السلام عليكم،

أخي المراد من برنامجك غير واضح تماماً، أرجو أن توضحه أكثر وبالتفصيل الممل.

 

وشكراً لك

شكرا لك ومحاولتك للمساعدة  , أنحلت المشكلة تقريبا . بفضل الله ثم مجهود الاعضاء الكرام

 

 

أبو أحمد المبرمج كتب:

إذا كنت تستخدم لغات دوت نت فالصنف DateTime  فيه مناهج تغنيك عن الفحص حيث تمرر له أي تاريخ فيعيد لك كل ما يتعلق بذاك التاريخ هل السنة كبيسة أم لا

 

فيما يخص استفسارك بإمكانك التقسيم على عدد أيام السنة الفعلية فنحن نعلم أن عدد أيام السنة هو 365.25

و مسألة السنة الكبيسة هي فقط  للابتعاد عن الكسور ولهذا جعلوا كل أربع سنوات يوم إضافي أي كل أربع أرباع يتشكل يوم

 

المهم عندما تقسم منتجاتك على 365.25 فهي الحصة الحقيقية لليوم الواحد

 

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

 

وهكذا تضمن توزيع لكل شهر حصته المناسبة لعدد أيامه

 

ولعمل دالة تحسب عدد أيام شهر ما قم بتمرير تاريخ الأول من ذاك الشهر إلى متحول من نوع DateTime  ثم أضف شهر له واطرح منه يوم فيعيد تاريخ آخر يوم من نفس الشهر

بغض النظر كان شهر 31 أو 30 أو 28 أو 29 فهي مهمة الصنف في الحساب

ثم تأخذ قسم الأيام فيكون هو عدد أيام الشهر الممرر

ثم تضرب بالحصة اليومية فتحصل على حصة ذاك الشهر

 

يعجز لساني عن الشكر , كلام رائع وجميل ومفهوم

 

 

Xese كتب:

ترجمة أكواد أخونا أبو محمد لل VB.Net :

 

 

 

 

 

 

 

 

 

 

هذه الترجمة قمت بها بنفسي لذلك أي خطأ في الأكواد (إذا كنت تستخدم VB.net) راسلني على الخاص

 

شكرا لك لمحاولاتك ودعمك للموضوع , وجزاك الله خير

 

 

------------

 

أكرر شكري لكم جميعا

#9

تفضل أخي بإمكانك أيضا من معرفة كيفية العمليات على التاريخ من خلال شيفرة مايكروسوفت

 

/index.php/topic/274856-%D8%A7%D9%84%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D9%8A%D8%A9-%D9%84%D9%80%D9%85%D9%83%D8%AA%D8%A8%D8%A7%D8%AA-dont-net-framework-45/

ستجد ملف DateTime  بلغة السي شارب في مرفقات الموضوع المذكور

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 26 يناير 2013 في 14:22

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#10
أبو أحمد المبرمج كتب:

تفضل أخي بإمكانك أيضا من معرفة كيفية العمليات على التاريخ من خلال شيفرة مايكروسوفت

 

/index.php/topic/274856-%D8%A7%D9%84%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D9%8A%D8%A9-%D9%84%D9%80%D9%85%D9%83%D8%AA%D8%A8%D8%A7%D8%AA-dont-net-framework-45/

ستجد ملف DateTime  بلغة السي شارب في مرفقات الموضوع المذكور

 

جزاك الله خير , جاري الاطلاع

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