بـــــــه نـــــــام خـــــدا
خــــب سلام دوستان گرامی و عزیز و خوانندگان محترم .
سعی کردم برای به روز شدن این وبلاگ ، یک برنامهی شاید کارامد به عنوان مثال قرار بدم تا شما دوستان بزرگوار ازش بهره ببرید .
با برنامهی MMB مسلما نمیشه برنامههای مهندسی و پیشرفته و اینجور چیزارو درست کرد ، چرا که خودش هم همچین مایهای نیست و خودشم نیازمند کمکه !! ولی میشه ازش بعضی چیزارو به زورم که شده در اوورد !!!!
یه نوع از همین چیزا همین پیاده سازی الگوریتم تبدیل تاریخ تقویم میلادی به شمسی است . البته برعکسشم به همون سادگی خودشه ولی در اینجا فقط انتسابمون یه طرفست یعنی تبدیل از میلادی به شمسی .
گفتنی است که من خودم قصد به روز کردن این وبلاگ رو نداشتم ولی یکی از دوستان عزیز خواننده و دوستدار MMB عنایت کردند در ضمن نامهای مسئلهی درست کردن چنین برنامهای با MMB رو از طریق پست الکترونیکی من (توی صفحهی اصلی وبلاگ) با من در میان گذاشتند و خوشبختانه تونستم پاسخشون رو بدم .
این یه عکس از محیط برنامهی مذکور هستش :
لینک دانلود منبع (Source) به همراه فایل کامپایل شدش (exeاش) :
حجم :
رمز بسته (Password) :
در این قسمت هم الگوریتم تبدیل تاریخ تقویم میلادی به شمسی ، قمری به میلادی و برعکس رو قرار دادم :
برای تبدیل تاریخ شمسی به میلادی و برعکس باید تعداد روزهای سپری شده از ابتدای هر کدام از این تاریخها را از مبدا خود به دست بیاوریم. اگر میخواهیم تاریخ شمسی را به میلادی تبدیل کنیم ابتدا باید روزهای سپری شده از مبدا تاریخ شمسی تا کنون را حساب کنیم و آن را به اضافهی 226899 بکنیم. عدد به دست آمده تعداد روزهای گذشته از ابتدای تاریخ میلادی تا کنون است و با استفاده از آن میتوانیم تاریخ میلادی را حساب کنیم. برای تبدیل تاریخ میلادی به شمسی همین کار را باید برعکس انجام بدهیم و عدد 226899 را باید از تعداد روزهای تاریخ میلادی کم بکنیم و در این قسمت عدد به دست آمده تاریخ شمسی است.
همین روش نیز برای تبدیل تاریخ قمری به شمسی و برعکس نیز قابل استفاده است. ولی در این مورد دیگر عددی که باید اضافه یا کم بشود 226899 نیست.
شاید از خود بپرسید که عدد 226899 را از کجا به دست آوردهام. برای به دست آوردن این عدد باید تاریخ شمسی و میلادی یک روز را در اختیار داشته باشید. به عنوان مثال 13/4/1383 شمسی طبق تقویم برابر 3/7/2004 میلادی است. کاری که باید الان بکنیم این است که این دو تاریخ را به روز تبدیل کنیم و در این تبدیل باید تعداد سالهای کبیسهای که این دو تاریخ پشت سر گذاشتهاند نیز فراموش نکنیم. برای اینکه تعداد سالهای کبیسه را در دو تقویم میلادی و شمسی بخواهیم محاسبه کنیم باید 1382 را برای تقویم شمسی و 2003 را برای تقویم میلادی تقسیم بر 4 کنیم. خارخ قسمت این دو تقسیم به ترتیب تعداد سالهای کبیسهی تقویم شمسی و میلادی است که از ابتدای شروع به کار این تقویمها تا کنون پشت سر گذاشتهاند. البته این اعداد مطابق واقعیت نیستند! ولی به محاسبات ما اشکالی وارد نمیکنند.
در تقسیم 1382 بر 4 خارج قسمت برابر 345 میشود و این عدد برای تقویم میلادی برابر 500 است.
خب پس تا کنون بر اساس تقویم شمسی 345 سال کبیسه بوده و بر اساس تقویم میلادی 500 سال برابر سال کبیسه بودهاند. (البته همان طور که دید به کبیسه بودن سالی که در آن هستیم هنوز توجهی نکردیم.)
خب برگردیم به مسالهی خودمان که میخواستیم دو تاریخ 13/4/1383 و 3/7/2004 به روز تبدیل کنیم.
برای این کار باید از عدد سال یکی کم کرده و در 365 ضرب کنیم. و از عدد ماه نیز باید یکی کم کرده و بر اساس نوع تقویم باید عدد ماه را ضرب در عدد خاصی بکنیم. مثلا وقتی در تاریخ شمسی از عدد ماه یکی کم کنیم حاصل 3 میشود. همان طور که میدانید در تقویم شمسی 3 ماه اول سال 31 روز دارند، پس 3 را در 31 ضرب میکنیم. ولی در تاریخ شمسی وقتی از 7 یکی کم کینم برابر 6 میشود. خب باید در این مورد ببینیم که 6 ماه اول سال میلادی چند روزه هستند.
[January]=ماه اول میلادی = 31 روز
[February]=ماه دوم میلادی = 28 روز (در سال کبیسه 29 روز)
[March]=ماه سوم میلادی = 31 روز
[April]=ماه چهارم میلادی = 30 روز
[May]=ماه پنجم میلادی = 31 روز
[June]=ماه ششم میلادی = 30 روز
[July]=ماه هفتم میلادی = 31 روز
[August]=ماه هشتم میلادی = 31 روز
[September]=ماه نهم میلادی = 30 روز
[October]=ماه دهم میلادی = 31 روز
[November]=ماه یازدهم میلادی = 30 روز
[December]=ماه داوزدهم میلادی = 31 روز
طبق جدول بالا 6 ماه اول سال 2004 میلادی برابر 182 روز میباشد. (فراموش نکنید که سال 2004 سال کبیسه است.) خب تا حالا عدد سال و ماه را به روز تبدیل کردیم و این دو عدد را باید به اضافهی عدد روز کنیم و در آخر به اضافهی تعداد سالهای کبیسه گذشته بکنیم. داریم A = (1382*365)+(3*31)+13+345 = 504881 B= (2003*365)+(31+29+31+30+31+30)+3+500=731780 B-A = 226899
با محاسبات فوق خواستم نشان بدهم که عدد 226899 که در اول بحث گفتیم را از کجا آوردیم. همان طور که احتمالا تا حالا فهمیدید این عدد (226899) تفاوت مبداهای دو تقویم میلادی و شمسی به روز هستند.
حال مثالی میزنم برای تبدیل تاریخ شمسی به تاریخ میلادی. فرض کنید که میخواهیم که تاریخ 15/4/1383 شمسی را به تاریخ میلادی نظیر آن تبدیل کنیم. در ابتدا باید این تاریخ را به روز تبدیل کنیم. طبق روش گفته شده در بالا مینویسیم: C =[(1383-1)*365]+[(4-1)*31]+15+345 = 504883
خب این عدد را باید به اضافهی 226899 بکنیم:
504883+226899 = 731782
حال باید 731782 را به تاریخ میلادی متناظر آن تبدیل کنیم.
ابتدا باید تعدا سالهای کبیسهی تقویم میلادی را از این عدد کم کنیم، در بالا دیدیم که تقویم میلادی تا کنون 500 سال کبیسه را پشت سر گذاشته است.
731782-500=731282
حال 731282 را بر 365 تقسیم میکنیم و خارج قسمت آن را به اضافهی یک میکنیم و عدد به دست آمده عدد سال است :
731282 / 365 = 2003
2003 + 1= 2004
باقیماندهی تقسیم فوق برابر 187 میباشد. حال با استفاده از جدول تعداد روزهای تقویم میلادی شروع میکنیم از 187 کم میکنیم و باز هم فراموش نمیکنیم که سال 2004 میلادی سال کبیسه است :
187-31=156
156-29=127
127-31=96
96-30=66
66-31=35
35-30=5
خب تفریقهای فوق را تا جایی ادامه میدهیم که عدد به دست آمده کمتر از تعداد روزهای یک ماه باشند. در بالا 6 مرحله تفریق انجام دهیم به عدد 6 باید یک بیافزاییم تا تعداد ماهها به دست آید. و عدد ظاهر شده در تفریق آخر نیز برابر عدد روز میباشد. پس با محاسبات فوق دیدیم که تاریخ 15/4/1383 شمسی برابر 5/7/2004 است.
این روش کلی تبدیل دو تاریخ به یکدیگر است. و برای تبدیل انواع تقویم به هم باید این مراحل را انجام داد ولی با توجه به نوع تقویمها عددهایی که باید اضافه یا کم بشود طبعا فرق میکند.
موفق باشید.
منبع: سایت تبیان
موفق و مؤید و سربلند باشید.
قاهر .