PDA

View Full Version : ایراد در الگوریتم



kitten
جمعه 26 اسفند 1390, 09:36 صبح
سلام دوستان
من دارم از یه الگوریتم تبدیل تاریخ شمسی به میلادی استفاده می کنم ولی مثلا امروز که 26 اسفند و 16 / 3/ 2012 است وقتی تبدیل می کنه یه روز کمتر یعنی 15 / 3/ 2012 تبدیل می شه
می خواستم ببینم شما می تونید کمک کنید ببینم کجای کارش ایراد داره؟
D jalali_to_milady (int year,int month,int day)
{
int gy,gm,gd;
gy= gm= gd = 0;
long int j_day_no;
long int g_day_no = j_day_no ;
long int leap=0;

int jy = year-979;
int jm = month-1;
int jd = day-1;
j_day_no = 365*jy + (jy/33)*8 + (jy%33+3)/4;
int i = 0;
while (i<jm)
{
j_day_no += monthDays[i];
i +=1;
}
j_day_no += jd;
g_day_no = j_day_no+79;

gy = 1600 + 400*(g_day_no/146097) ;
g_day_no = g_day_no % 146097;
leap = 1;
if (g_day_no >= 36525)
{
g_day_no -=1;
gy += 100*(g_day_no/36524);
g_day_no = g_day_no % 36524;

if (g_day_no >= 365)
g_day_no +=1;
else
leap = 0;
}
gy += 4*(g_day_no/1461);
g_day_no %= 1461;
if (g_day_no >= 366)
leap = 0;

g_day_no -=1;
gy += g_day_no/365;
g_day_no = g_day_no % 365;

i=0;
while (g_day_no >= monthdays[i] + (i == 1 & leap))
{
g_day_no -= monthdays[i] + (i == 1 & leap);
i+=1;
}
gm = i+1;
gd = g_day_no+1;
D d;
d.y=gy;
d.m =gm;
d.d = gd;
return d;
}
int monthDays[]={31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};
int monthdays[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

barnamenevisforme
جمعه 26 اسفند 1390, 09:44 صبح
سلام
اگه هدف اصلی شما از طرح این الگریتم نتیجه ی اصلی اونه،نیازی به این کار نییست.شما میتونید system.globalization رو به برنامتون اضافه کنید.بعد از یه متغیر از نوع persiancalender استفاده کنید.تمامی تبدیل ها و توابع مربوط به تاریخ شمسی رو به همراه داره.

kitten
جمعه 26 اسفند 1390, 09:59 صبح
دوست عزیز من از سی شارپ استفاده نمی کنم و همچنین مشکل الگوریتم رو هم پیدا کردم
ممنون