صراحة الكود طويل وقد يبدو مخيف عند النظر اليه للمرة الأولى لكنه ليس صعب جدا
لذا قسمته الى أربعة دوال :
دالة للتحويل من ميلادي الى هجري hejri()
دالة لمراقبة الأرقام التي يقوم المستخدم بإدخالها لمنع إدخال أرقام خاطئة
(تتبع للتحويل من ميلادي الى هجري ) con _hejri ()
دالة للتحويل من هجري الى ميلادي meladi()
دالة لمراقبة الأرقام التي يقوم المستخدم بإدخالها لمنع إدخال أرقام خاطئة
(تتبع للتحويل من هجري الى ميلادي) con _meladi()
ثم استدعيت هذه الدوال في البرنامج الأصلي
لاحظ كود دالة التحويل من ميلادي الى هجرى وقارنه بالمعادلات في المشاركة السابقة
كود:
sub procedure hejri()
if mon<=2 then
mon=mon+12
yer=yer-1
end if
gem=yer / 100
dal=yer / 400
aen=2-gem+dal
waw=floor((yer+4716)*365.25 )
zay=floor((mon+1)*30.6001 )
ha=yaom+zay+waw+aen-1524
ta=floor(ha-1937806.5)
kaf=(ta-1)/10631
lam=floor((ta+354)-10631*kaf )
mem=floor((10985-lam)/5316 )
non=floor((50*lam)/17719)
sen=floor(lam/5670)
fa=floor((43*lam)/15238)
qaf=mem*non+sen*fa
sad=floor((30-qaf)/15)
ra=floor((17719*qaf)/50)
shen=floor(qaf/16)
tta=floor((15238*qaf)/ 43)
tha=lam-(sad*ra)-(shen*tta)+29
shahr=floor((24*tha)/709)
gen=floor((709*shahr)/24)
ayam=tha-gen
sana=30*kaf+qaf-30
wordToStr(ayam,rxr)'
delay_ms(10)
wordToStr(shahr,rxr1)
delay_ms(10)
WordToStr(sana,rxr2)
ltrim(rxr)
ltrim(rxr1)
ltrim(rxr2)
Lcd_Out(2,1,"HJRI:")
delay_ms(10)
Lcd_Out(2,6,rxr)
Lcd_Out(2,8,":")
delay_ms(10)
Lcd_Out(2,9,rxr1)
Lcd_Out(2,12,":")
Lcd_Out(2,13,rxr2)
end sub
مجرد تحويل المعادلات الى كود برمجي مع إضافة أوامر عرض النتائج على شاشة LCD
وفي الختام أقول صراحة البرنامج أخذ مني جهدا ووقتا لذلك لاتستغرب أن رأيت بعض المقارنات التي يمكن الاستغناء عنها أو بعض الأوامر التي يمكن اختصارها ..فقد كتبته بقلة تركيز وبنية الحصول على أفضل نتائج وليس الحصول على أقصر برنامج
لتحميل البرنامج وملف بروتس تفضل الرابط التالي
http://www.4shared.com/file/vYigLQ7I/hejri.html
وأطلب ممن يستفيد من الموضوع أن لا ينساني من الدعاء
وشكرا