رفتن به مطلب

الگوريتمي براي تقويم جلالي


moein_13

ارسال های توصیه شده

الگوريتمي براي تقويم جلالي

 

الگوريتم پيشنهاد شده بر پايه ليست شرح داده شدهٔ سالهايي است كه شكافي درچهارمين سال رايجي كه بعد از ۲۸ يا ۳۶ سال(نه ۳۲ سال) دوره‌هاي ۴ ساله ازوقوع قبلي چهار سال رايج پي در پي.در طول ۳۰۰۰ سال تنها در حدود ۲۰ شكاف وجود دارد و آنها اجازهٔ يك بازسازي راحت با ترتيب كامل سالهاي كبيسه جلالي را مي‌دهند.

 

براي مشخص كردن اينكه يك سال جلالي معمولي است يا كبيسه ، تعداد سالهايي را كه از آخرين شكاف جدول 1 گذشته‌است، پيدا مي‌كنيم كه آن را N مي ناميم.با يك استثنا، سال مورد نظر كبيسه‌است اگر۱- باضافه باقي مانده N + ۱)/۳۳ )، بر ۴ بخشپذير باشد يا

lp = MOD[MOD(N + ۱٬۳۳) - ۱٬۴] برابر با صفر شود، در اينجا MOD عمل پيدا كردن باقي مانده در حالتيكه اولين نشانوند بر دومي تقسيم مي‌شود را برعهده دارد،استثنا مربوط به موردي كه سال مورد نظردر داخل۵ سال پيرو شكاف قرار مي‌گيرد . در اين مورد به جاي N + ۱ در بالامقدار N + ۱ ± ۴ بايد استفاده شود، كه علامت + زماني كه سال مطرح شده به يك دورهٔ ۲۹ ساله وابسته باشد و در غير اين صورت علامت - استفاده مي‌شود(به عبارتي در دوره‌هاي ۳۷ ساله )

 

با استفاده از علم حساب اعداد صحيح اين الگوريتم به دو خط فورترن(بخش ليست سالهايي كه شكاف ايجاد مي‌كنند لازم است.) كاهش مي‌يابد. براي سالهاي معمولي باقي مانده تقسيم به ۴ به عبارتي lp تعداد سالهايي كه از آخرين سال كبيسه گذشته‌است را مشخص مي‌كند.به عنوان مثال باقي مانده ۱ (۲ يا ۳ ) به اين معني است كه سال كبيسه يك سال پيش(۲ يا ۳ سال پيش ) بوده‌است .بديهي است كه اين ممكن است كه بگويد كه آيا سال مطرح شده يكي ازچهارمين‌هاي رايج است.اين مورد زماني كهN + ۱ (در مورد استثنا N + ۱ ± ۴) بر ۳۳ بخشپذير باشد.

 

براي تبديل سال‌هاي شمسي به ميلادي لازم است تا شماره سال‌هاي كبيسه را از يك مبدا زماني در هر دو تقويم بيابيم.در تقويم جلالي شماره سال‌هاي كبيسه ميان دو شكاف مجاور در جدول ۲ را مي‌گوييم ميانyiو yj هست

 

lj = ۸ INT(Nj/۳۳) + INT[MOD(Nj,۳۳)/۴]

كه Nj = yj - yi وINT تابعي است كه قسمت صحيح نشانوند داده شده را بر مي‌گرداند.عددهاي lj بايد تا زماني كهyj كمتر از سال سوال شده شود جمع شوند. باقي بماند پس مجموع بايد اضافه شود به

 

 

۸ INT(N/۳۳) + INT{[MOD(N,33) + ۳]/۴} + k

عدد سال كبيسه از آخرين شكاف.k تنها زمانيكه سال مطرح شده ۴ سال قبل از شكاف متوالي(yj) قرار بگيرد ،۱ است و در گروه رايج ۳۷ ساله است در غير اين صورت ۰ است.

 

اين الگوريتم نوشته شده به زبان فورترن، زير روال( JalCal(Jy,leap,Gy,March, كه در جدول ۳ نشان داده شده‌است، كه براي يك سال جلالي Jy اطلاعات يك سال كبيسه را در متغيرleapبر مي‌گرداند كه از ۰ تا ۴ در نظر گرفته شده‌است، كه در بالا توضيح داده شده‌است. اين روال همچنين تاريخ ميلادي مطابق با اولين روز سال جلالي در متغيرGy(سال ميلادي)و مارس(چندمين روز مارس) برمي گرداند.بنابراين ازآن مستقيما براي بازگوكردن شروع تقويم ايراني براي هر سالي در ميان حدود ۳۰۰۰ سال ، با تقوم ميلادي استفاده كرد.

جدول1: سالهاي ميلادي(Gy) كه پايان يك دورهٔ ۲۹ يا۳۷ ساله رانشان مي‌دهند كه شكافي درقانون معتبر ۳۳ ساله ايجاد مي‌كنند. در حدود ۲۰ مارس سال ميلادي چهارمين سال رايج تمام مي‌شود و سال كبيسه شمسي آغاز مي‌شود(Jy)

 

 

Gy Jy Gy Jy Gy Jy Gy Jy ۵۶۰ -۶۱ ۱۳۰۷ ۶۸۶ ۱۸۳۱ ۱۲۱۰ ۲۸۸۳ ۲۲۶۲ ۶۳۰ ۹ ۱۳۷۷ ۷۵۶ ۲۲۵۶ ۱۶۳۵ ۲۹۴۵ ۲۳۲۴ ۶۵۹ ۳۸ ۱۴۳۹ ۸۱۸ ۲۶۸۱ ۲۰۶۰ ۳۰۱۵ ۲۳۹۴ ۸۲۰ ۱۹۹ ۱۷۳۲ ۱۱۱۱ ۲۷۱۸ ۲۰۹۷ ۳۰۷۷ ۲۴۵۶ ۱۰۴۷ ۴۲۶ ۱۸۰۲ ۱۱۸۱ ۲۸۱۳ ۲۱۹۲ ۳۷۹۹ ۳۱۷۸

 

جدول2:

 

subroutine JalCal(Jy,leap,Gy,March)

c This procedure determines if the Jalaali (Persian) year is

c leap (۳۶۶-day long) or is the common year (۳۶۵ days), and

c finds the day in March (Gregorian calendar) of the first

c day of the Jalaali year (Jy)

c Input: Jy - Jalaali calendar year (-۶۱ to 3177)

c Output:

c leap - number of years since the last leap year (۰ to 4)

c Gy - Gregorian year of the beginning of Jalaali year

c March - the March day of Farvardin the 1st (۱st day of Jy)

integer breaks(۲۰),Gy

c Jalaali years starting the ۳۳-year rule

data breaks/-۶۱٬۹,۳۸٬۱۹۹٬۴۲۶٬۶۸۶٬۷۵۶٬۸۱۸٬۱۱۱۱٬۱۱۸۱,

* ۱۲۱۰٬۱۶۳۵٬۲۰۶۰٬۲۰۹۷٬۲۱۹۲٬۲۲۶۲٬۲۳۲۴٬۲۳۹۴٬۲۴۵۶٬۳۱۷۸/

Gy=Jy+۶۲۱

leapJ=-۱۴

jp=breaks(۱)

if(Jy.lt.jp.or.Jy.ge.breaks(۲۰)) print'(a,i5,a,i5,a)',

*' Bad year number:',Gy,' Gregorian =',Jy,' Jalaali'

c Find the limiting years for the Jalaali year Jy

do 1 j=۲٬۲۰

jm=breaks(j)

jump=jm-jp

if(Jy.lt.jm) go to 2

leapJ=leapJ+jump/۳۳*۸+MOD(jump,33)/۴

۱ jp=jm

2 N=Jy-jp

c Find the number of leap years from AD 621 to the beginning

c of the current Jalaali year in the Persian calendar

leapJ=leapJ+N/۳۳*۸+(MOD(N,33)+۳)/۴

if(MOD(jump,33).eq.۴.and.jump-N.eq.۴) leapJ=leapJ+۱

c and the same in the Gregorian calendar (until the year Gy)

leapG=Gy/۴-(Gy/۱۰۰+۱)*۳/۴-۱۵۰

c Determine the Gregorian date of Farvardin the 1st

March=۲۰+leapJ-leapG

c Find how many years have passed since the last leap year

if(jump-N.lt.۶) N=N-jump+(jump+۴)/۳۳*۳۳

leap=MOD(MOD(N+۱٬۳۳)-۱٬۴)

if(leap.eq.-۱) leap=۴

en

 

 

اين قبيل زير روال مي‌تواند براي تبديل كل تاريخ از تقويم ايراني به كار رود اگر ما به خاطر داشته باشيم كه به ازايm (ماه ) و d (روز) تاريخ جلالي

 

۳۱(m - ۱) - (m - ۷) INT(m/۷) + d

 

روز از شروع هرسال جلالي(شمسي)سپري شده‌است.

 

برنامه كاربردي زير براي تبديل تاريخ شمسي،ابتدا به روزهاي جولين(JD)، سپس به ميلادي يا جولين وهمچنين به صورت معكوس،از اين تاريخ‌ها به تاريخ شمسي نوشته شده و تست شده‌است رويه‌هاي ذيل درفورترن كه اين كارها را انجام مي‌دهند از طرف نويسنده قابل دسترسي هستند.

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

تابع(Jal2JD(Jy,m,d ----- تاريخ شمسي را به روزهاي جولين براساس ظهر گرينويچ تبديل مي‌كند.

 

تابع(JG2JD(JGy,m,d,۱/۰-----تاريخ‌هاي ميلادي /جولين را به روزهاي جولين تبديل مي‌كند.

 

تابع(JD2Jal(JDN,Jy,m,d-----------روزهاي جولين را به تاريخ شمسي تبديل مي‌كند

 

تابع(JD2JG(JDN,JGy,m,d,۱/۰---------روزهاي جولين را به تاريخ‌هاي ميلادي/جولين تبديل مي‌كند.

 

بحث خطا‌ها

 

 

به علت تقريب طبيعي جدول نجومي كه نتيجهٔ آن زمان اعتدالي است ممكن است خطايي در حدود ۱ دقيقهٔ زمان وجود داشته باشد. نا مشخص بودنTD به نتيجه نهايي اين خطا اضافه مي‌كند.اين پارامترها از مشاهدات مستقيم تنها براي قبل از ۱۶۳۰ بعد از ميلاد بسيار واضح هستند.

 

جدول 3: سال‌هاي بحراني در تقويم جلالي كه بيشتر احتمال دارند تا ترتيب شكاف‌ها را تغيير دهند . چهار ستون اول تاريخ ميلادي در مارس ، نقطه اعتدالي بهار به زمان متوسط تهران (به ساعت و دقيقه) و متغيرT = TT-UT۱Dرا نشان مي‌دهد. سپس روز اول سال شمسي( اولين روز فروردين) بر حسب روزهاي مارس و سال شمسي مربوطه وجود دارد. در ستون آخر امكان افزايش به(+) و كاهش(-) از شكاف‌هاي موجود در جدول ۲ آمده‌است.

Year Day of Teheran DT ۱st Jalaali Effect of AD March time [min] Farv. year actual error ۶۲۶ ۲۱ ۱۲:۰۰٫۴ ۶۱٫۸ ۲۲ ۵ -۹ -۳۸ ۶۵۹ ۲۱ ۱۱:۵۶٫۶ ۵۷٫۹ ۲۱ ۳۸ -۳۸ +۷۱ ۸۸۶ ۲۰ ۱۱:۵۷٫۷ ۳۵٫۶ ۲۰ ۲۶۵ +۲۶۹ +۲۹۸ ۱۱۱۳ ۲۱ ۱۱:۵۸٫۵ ۲۰٫۰ ۲۱ ۴۹۲ +۴۹۶ +۵۲۵ ۱۳۷۳ ۲۰ ۱۲:۰۱٫۳ ۷٫۷ ۲۱ ۷۵۲ -۷۵۶ +۷۸۹ ۲۱۲۴ ۲۰ ۱۲:۰۰٫۳ ۳٫۹ ۲۱ ۱۵۰۳ +۱۵۰۳ +۱۵۴۰ ۲۳۲۲ ۲۱ ۱۱:۵۸٫۰ ۱۱٫۰ ۲۱ ۱۷۰۱ +۱۷۰۵ +۱۷۳۴ ۲۶۸۱ ۲۰ ۱۱:۵۹٫۶ ۳۲٫۴ ۲۰ ۲۰۶۰ -۲۰۶۰ -۲۰۹۷ ۲۷۸۰ ۲۰ ۱۲:۰۴٫۸ ۴۰٫۲ ۲۱ ۲۱۵۹ +۲۱۵۹ -۲۱۹۲ ۲۸۱۳ ۲۰ ۱۱:۵۶٫۳ ۴۳٫۰ ۲۰ ۲۱۹۲ -۲۱۹۲ +۲۲۲۵ ۲۸۴۶ ۲۰ ۱۱:۵۹٫۱ ۴۵٫۹ ۲۰ ۲۲۲۵ +۲۲۲۹ -۲۲۶۲ ۲۸۷۹ ۲۰ ۱۲:۰۳٫۵ ۴۸٫۹ ۲۱ ۲۲۵۸ -۲۲۶۲ +۲۲۹۵ ۲۹۱۲ ۲۰ ۱۲:۰۳٫۳ ۵۲٫۰ ۲۱ ۲۲۹۱ +۲۲۹۱ -۲۳۲۴ ۳۰۱۱ ۲۱ ۱۲:۰۰٫۹ ۶۱٫۷ ۲۲ ۲۳۹۰ -۲۳۹۴ +۲۴۲۷ ۳۰۴۴ ۲۰ ۱۲:۰۲٫۲ ۶۵٫۲ ۲۱ ۲۴۲۳ +۲۴۲۳ -۲۴۵۶ ۳۱۷۶ ۲۰ ۱۱:۵۶٫۷ ۷۹٫۹ ۲۰ ۲۵۵۵ +۲۵۵۹ +۲۵۸۸ ۳۲۰۹ ۲۰ ۱۱:۵۹٫۹ ۸۳٫۸ ۲۰ ۲۵۸۸ +۲۵۹۲ +۲۶۲۱ ۳۳۷۰ ۲۰ ۱۲:۱۱٫۰ ۱۰۴٫۲ ۲۱ ۲۷۴۹ +۲۷۴۹ +۲۷۸۶ ۳۴۷۳ ۲۰ ۱۱:۴۸٫۲ ۱۱۸٫۴ ۲۰ ۲۸۵۲ +۲۸۵۶ +۲۸۸۵ ۳۵۰۲ ۲۱ ۱۲:۱۰٫۴ ۱۲۲٫۵ ۲۲ ۲۸۸۱ +۲۸۸۱ +۲۹۱۸ ۳۶۳۴ ۲۰ ۱۲:۰۴٫۵ ۱۴۲٫۴ ۲۱ ۳۰۱۳ +۳۰۱۳ +۳۰۵۰ ۳۶۶۷ ۲۰ ۱۲:۰۳٫۸ ۱۴۷٫۶ ۲۱ ۳۰۴۶ +۳۰۴۶ +۳۰۸۳

لینک به دیدگاه
×
×
  • اضافه کردن...