الگوریتم دستی تبدیل تاریخ روی کاغذ

1,894 views
Skip to first unread message

Amir Farsi

unread,
Oct 31, 2014, 11:36:38 AM10/31/14
to persian-co...@googlegroups.com
سلام دوستان.
اگربخواهیم روی کاغذ(بدون وجود کامپیوتر)، یک تاریخ میلادی را به طور دقیق و بدون خطا به هجری شمسی و بلعکس تبدیل کنیم، چه کار باید بکنیم؟ به صورت مرحله به مرحله بگویید.
لطفاْ به کدها و الگوریتمهای آماده که پر از متغیر و... است لینک ندهید. چون میخواهیم روش و زیر بنای انجام کار را بداینم، و به قولی ماهی گیری یاد بگیریم نه اینکه ماهی بگیریم!
من پس از خواندن کدها و الگوریتمهای متعدد موجود در اینترنت که هرکدام پر از متغیر و ایراد و ابهام بود هنوز این سوال در ذهنم نقش بسته!
برای تبدیل تاریخ قمری به شمسی و بلعکس چطور؟
البته مورد اول در اولویت است.
متشکرم.

Saleh Souzanchi

unread,
Oct 31, 2014, 1:20:22 PM10/31/14
to persian-co...@googlegroups.com
خوب بعید می دونم بدون محاسبه بشه همچین کاری رو به راحتی انجام داد.
تو تبدیل باید سالهای کبیسه / تفاوت روزها در ماه های مختلف رو محاسبه کرد و این خودش پیچیدگی داره.

Amir Farsi

unread,
Oct 31, 2014, 1:23:57 PM10/31/14
to persian-co...@googlegroups.com
محاسبه که صد در صد است. امّا چگونه و به چه ترتیبی؟

Saleh Souzanchi

unread,
Oct 31, 2014, 1:53:44 PM10/31/14
to persian-co...@googlegroups.com
تا اونجا که یادم هست سه روش یا لگوریتم بری این محاسبات وجود دارد . به چه ترتیبی رو باید سرچ کنید و در مورد مطالعه کنید توضیح یک خط و دو خط نیست.

Behdad Esfahbod

unread,
Oct 31, 2014, 5:25:24 PM10/31/14
to Amir Farsi, persian-co...@googlegroups.com
On 14-10-31 08:36 AM, Amir Farsi wrote:
> اگربخواهیم روی کاغذ(بدون وجود کامپیوتر)، یک تاریخ میلادی را به طور دقیق و بدون
> خطا به هجری شمسی و بلعکس تبدیل کنیم، چه کار باید بکنیم؟ به صورت مرحله به مرحله
> بگویید.

در تئوری خیلی ساده است. یک تاریخ مرجع را به دو تقویم در نظر می‌گیری، تعداد
روزهای گذشته از تاریخ مرجع تا تاریخ مورد نظر میلادی را حساب می‌کنیم، و اون
تعداد روز رو از تاریخ شمسی معادل تاریخ مرجع جلو می‌آی.‏

اگر تاریخ مرجع رو بدونی، باقیش روی کاغذ انجام‌شدنی هست. کافیست قوانین سال
کبیسه‌ی دو تقویم، و تعداد روزهای هر ماه رو بدونی:‏

‏- در تقویم میلادی سال‌هایی کبیسه هستند که مضرب ۴ باشند، و مضرب ۱۰۰ نباشند، یا
مضرب ۴۰۰ باشند.‏

‏- در تقویم شمسی، قوانین قانونا پیچیده است چون نجومی است، ولی در عمل می‌توان
به این ساده کرد که: ۷ دوره کبیسه‌ی ۴ ساله داریم، یک دوره کبیسه‌ی ۵ ساله. یعنی
سیکل کلی هست ۷×۴+۵=۳۳. و اینکه مثلا، سال ۱۳۷۰ و ۱۳۷۵ هردو کبیسه بودند.‏

- در تقویم شمسی شش ماه اول ۳۱ روز و پنج ماه بعد ۳۰ روز و ماه آخر ۲۹ روز دارند،
و ماه آخر ماه کبیسه است.‏

- در تقویم میلادی روزهای ماه‌ها به ترتیب ۳۱، ۲۸، ۳۱، ۳۰، ۳۱، ۳۰، ۳۱، ۳۱، ۳۰،
۳۱، ۳۰ ،۳۱ روز دارند، و ماه دوم کبیسه است.‏

- روز تولد من ۵ مهر ۱۳۶۱، معادل ۲۷ سپتامبر ۱۹۸۲ هست.‏

با این اطلاعات می‌‌تونم مثلا حساب کنم تولد پنجاه‌سالگی‌م به تقویم میلادی چه
روزی خواهد بود:‏

- تا تولد ۵۰ سالگیم، تعداد روزها هست ۵۰×۳۶۵ بعلاوه‌ی تعداد روزهای کبیسه بین ۵
مهر ۱۳۶۱ تا ۵ مهر ۱۴۱۱. اگه بشمری می‌شه :

- ۱۳۶۲ ۱۳۶۶ ۱۳۷۰
- ۱۳۷۵ ... ۱۴۰۸ (یک دوره‌ی کامل)

یعنی ۱۱ روز. پس کلا می‌شود ۱۸۲۶۱ روز.‏

حالا می‌خواهیم بدونیم ۱۸۲۶۱ روز از ۲۷ سپتامبر ۱۹۸۲ کی میشه.‏ اگه دقت کنیم،
قوانین کبیسه‌ی میلادی طوری هست که از سال ۱۹۰۴ تا ۲۰۹۶ دقیقا هر چهار سال کبیسه
است. هر کدوم این چهار سال‌ها ۱۴۶۱ روز دارد. پس ۱۸۲۶۱ رو به ۱۴۶۱ تقسیم
می‌کنیم. می‌شود ۱۲ و خوردی. ۱۲ دوره‌ی کامل می‌شود ۱۷۵۳۲ روز. پس ۱۲ دوره‌ی
چهار ساله جلو برویم می‌رسیم به ۲۷ سپتامبر ۲۰۳۰، و ۷۲۹ روز باقی می‌ماند. ۷۲۵
می‌شود دقیقا دو سال غیر کبیسه و یک روز کم. پس جواب می‌شود ۲۶ سپتامبر ۲۰۳۲.‏

احتمالا اشتباهاتی کردم . ولی کلیت جریان همینه: الگوریتم خاصی غیر از شمردن
نداره. ولی این شمردن رو می‌شه به فرمول‌های ساده‌ی ریاضی تبدیل کرد.‏

بهداد




--
behdad
http://behdad.org/

moh....@gmail.com

unread,
Aug 24, 2018, 6:47:20 PM8/24/18
to محاسبات فارسی
سلام. روش زیر می تونه مفید باشه

الگوريتم تبديل تاريخ ميلادی به تاريخ شمسی:

تبديل تاريخ ميلادی (mm -dd- yyyy) به شمسی بسيار راحت تر از تبديل تاريخ شمسي به ميلادي است. براي نوشتن اين الگوريتم به اختلاف روزهای ميان اولين روز سال ميلادی و اولين روز سال شمسی نيازمندیم. اين اختلاف روز ( چه سال میلادی کبيسه باشد، چه نباشد) "79" روز است.

در تاریخ میلادی داده شده، مشخص می کنيم چند روز از سال سپری شده است. تعداد روزهای هر ماه میلادی مطابق آرایه زیر می باشد. در سال کبیسه میلادی، ماه دوم (فوریه) 29 روز دارد:

Days of month array = (31, 28 [29], 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

براي تشخيص کبيسه بودن يا نبودن سال میلادی از روش زير استفاده می کنيم:

اگر سال بر100و 400 بخشپذير باشد يا بر 100 بخشپذير نباشد و بر 4 بخشپذير باشد آن گاه سال کبيسه است، در غير اين صورت سال کبيسه نيست.

اکنون سه حالت پيش مي آيد:

1.        تعداد روزهای سپری شده سال بزرگتر مساوی 79 و کوچکتر مساوی 186 است:

يعنی در 6 ماه اول سال شمسی قرار داري؛ زیرا 6 ماه اول در سال شمسي 31 روزه است (6*31=186) و اگر تعداد روزهای سپری شده بیشتر از  79 باشد وارد فروردین شده ایم.

اکنون تعداد روزها را بر "31" تقسيم مي کنيم اگر باقيمانده اين تقسيم صفر شود خارج قسمت تقسيم برابر با ماه شمسی شده و روز شمسی برابر با 31 می شود. اگر باقيمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه يک شده و روز شمسی همان باقيمانده است.

2.       تعداد روزهای سپری شده سال بیشتر از 186 است:

"186" روز از تعداد روزها کم کرده و آن را بر 30 تقسيم می کنيم. اگر باقيمانده اين تقسيم صفر شود خارج قسمت تقسيم به اضافه 6 ماه شمسی شده و روز شمسی برابر با30 می گردد. اگر باقيمانده صفر نشود ماه شمسی برابر با خارج قسمت به اضافه 7 شده و روز شمسی همان باقيمانده است.

در هر دو حالت 1 و 2 سال شمسی از تفاضل سال ميلادی با 621 بدست می آيد.

3.       تعداد روزهای سپری شده سال کمتر از 79 است:

در روزهايی بين اولين روز سال ميلادی تا اولين روز سال شمسی (ماههای دی، بهمن و اسفند) قرار داريم.

در سال کبیسه میلادی، تحویل سال بعدی 12 دی ماه رخ می دهد ولی در سال های میلادی دیگر 11 دی ماه تحویل سال رخ می دهد. در این الگوریتم باید اختلاف تعداد روزهای بین اولين روز سال ميلادی قبل از سال داده شده و اولين روز دی ماه در سال شمسی را بدانیم؛ برای سال کبيسه میلادی 11 و براي سال میلادی غير کبيسه 10 است.

***دقت کنيد در اين قسمت برای مشخص کردن اين اختلاف کبیسه بودن سال میلادی قبل از  سال داده شده را بررسی می نماییم زيرا سال قبل بر روی اولين روز سال ميلادی در دی ماه تاثير می گذارد***

به بیان ساده تر، از سال میلادی داده شده یک سال کم کرده و تعیین می کنیم کبیسه است یا خیر. سپس با توجه به آن، اختلاف را تعیین کرده و با تعداد روز سپری شده جمع و بر30 تقسيم می کنيم (3 ماه آخر سال شمسي 30 روزه است.)

اگر باقيمانده اين تقسيم صفر شود خارج قسمت تقسيم به اضافه 9 برابر ماه شمسی شده و روز شمسی برابر با 30 می گردد. اگر باقيمانده صفر نشود ماه شمسی برابر با خارج قسمت  به اضافه 10 شده و روز شمسی همان باقيمانده است.

در اين حالت سال شمسی از تفاضل سال ميلادی با 622 بدست می آيد (زيرا در سال قبل قرار داريم.)

با تشکر از دوست عزیزمان http://iranbefa.blogfa.com/page/shamsi.aspx

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

makeb...@gmail.com

unread,
Feb 1, 2019, 1:49:20 AM2/1/19
to محاسبات فارسی
فکر می کنم همون اول یه اشتباهی باشه. اختلاوف اولین روز از سال میلادی با اولین روز از سال شمسی همواذه عدد 79 نیست!! گاهی اوقات 78 میشه. با تشکر

در شنبه 25 اوت 2018، ساعت 3:17:20 (UTC+4:30)، moh....@gmail.com نوشته:
Reply all
Reply to author
Forward
0 new messages