ايران ويج

نسخه‌ی کامل: برنامه اي مي خواهم به زبان c سال ميلادي را به شمسي تبديل
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام اين برنامه را مي خوام ودرست اجرا شود
تا چند روز دیگه برنامه تبدیل تاریخ میلادی به شمسی به زبان C و اسمبلی AVR رو تو همین سایت می زارم منتظر باش Biggrin
با سلام
برنامه تبدیل تاریخ از کتاب آقای ره افروز تقدیم میشود
Amaze
flash unsigned char shmtable[6][12]={
{11,10,10,9,9,9,8,9,9,10,11,9},
{20,20,21,21,22,22,22,22,21,21,20,19},
{11,10,10,9,9,9,8,9,9,10,11,10},
{20,20,21,21,22,22,22,22,21,21,20,19},
{12,11,11,10,10,10,9,10,10,11,12,10},
{19,19,20,20,21,21,21,21,20,20,19,18}};

flash unsigned char miltable[6][12]={
{20,19,19,19,20,20,21,21,21,21,20,20},
{10,11,10,12,11,11,10,10,10,9,10,10},
{19,18,20,20,21,21,22,22,22,22,21,21},
{11,12,10,11,10,10,9,9,9,8,9,9},
{20,19,20,20,21,21,22,22,22,22,21,21},
{10,11,9,11,10,10,9,9,9,8,9,9}};

struct date{
unsigned char day;
unsigned char month;
unsigned char year;
};
struct date shmdate,mildate ;
/*************************************************************************/
void miltoshmcv(unsigned char ym,unsigned char mm,unsigned char dm)
{
unsigned char k,t1,t2;
k=ym%4;
if(k==3)
k=2;
k*=2;
t1=miltable[k][mm-1];
t2=miltable[k+1][mm-1];
if(mm<3 || (mm==3 && dm<=miltable[k][mm-1]))
shmdate.year = ym + 78;
else
shmdate.year = ym + 79;

if(dm<=t1)
{
shmdate.day=dm+t2;
shmdate.month=(mm+8)%12+1;
}
else
{
shmdate.day=dm-t1;
shmdate.month=(mm+9)%12+1;
}
}
/**********************************************************************/
void shmtomilcv(unsigned char ys ,unsigned char ms,unsigned char ds)
{
unsigned char k,t1,t2;
k = ys%4;
if( k == 0)
k = 2;
else
k = k + k;
t1 =shmtable[k - 2][ms-1];
t2 = shmtable[k-1][ms-1];
if(ms<10 || (ms==10 && ds <= shmtable[k-2][ms-1]))
mildate.year = ys - 79;
else
mildate.year = ys - 78;

if(ds <= t1)
{
mildate.day = ds + t2;
mildate.month = (ms + 1)%12 + 1;
}
else
{
mildate.day= ds - t1;
mildate.month= (ms + 2)%12 + 1;
}
}
دوباره سلام
اینم یه برنامه دیگه Amaze

منبع
http://radcom.ir/weblog/fatemeh/archive/...7/244.aspx


کد:
typedef struct _SHAMSIDATE
{
int iYear;
int iMonth;
int iDay;
}SHAMSIDATE;


SHAMSIDATE MiladiToShamsi(int iMiladiMonth,int iMiladiDay,int iMiladiYear)
{


int shamsiDay, shamsiMonth, shamsiYear;
int dayCount,farvardinDayDiff,deyDayDiff ;
int sumDayMiladiMonth[] = {0,31,59,90,120,151,181,212,243,273,304,334};
int sumDayMiladiMonthLeap[]= {0,31,60,91,121,152,182,213,244,274,305,335};
SHAMSIDATE shamsidate;


farvardinDayDiff=79;


if (MiladiIsLeap(iMiladiYear))
{
dayCount = sumDayMiladiMonthLeap[iMiladiMonth-1] + iMiladiDay;
}
else
{
dayCount = sumDayMiladiMonth[iMiladiMonth-1] + iMiladiDay;
}
if((MiladiIsLeap(iMiladiYear - 1)))
{
deyDayDiff = 11;
}
else
{
deyDayDiff = 10;
}
if (dayCount > farvardinDayDiff)
{
dayCount = dayCount - farvardinDayDiff;
if (dayCount <= 186)
{
switch (dayCount%31)
{
case 0:
shamsiMonth = dayCount / 31;
shamsiDay = 31;
break;
default:
shamsiMonth = (dayCount / 31) + 1;
shamsiDay = (dayCount%31);
break;
}
shamsiYear = iMiladiYear - 621;
}
else
{
dayCount = dayCount - 186;
switch (dayCount%30)
{
case 0:
shamsiMonth = (dayCount / 30) + 6;
shamsiDay = 30;
break;
default:
shamsiMonth = (dayCount / 30) + 7;
shamsiDay = (dayCount%30);
break;
}
shamsiYear = iMiladiYear - 621;
}
}
else
{
dayCount = dayCount + deyDayDiff;


switch (dayCount%30)
{
case 0 :
shamsiMonth = (dayCount / 30) + 9;
shamsiDay = 30;
break;
default:
shamsiMonth = (dayCount / 30) + 10;
shamsiDay = (dayCount%30);
break;
}
shamsiYear = iMiladiYear - 622;


}
shamsidate.iYear = shamsiYear;
shamsidate.iMonth = shamsiMonth;
shamsidate.iDay = shamsiDay;


return shamsidate ;
}


// the function check a miladiyear is leap or not.
BOOL MiladiIsLeap(int miladiYear)
{
if(((miladiYear % 100)!= 0 && (miladiYear % 4) == 0) || ((miladiYear % 100)== 0 && (miladiYear % 400) == 0))
return TRUE;
else
return FALSE;
}
ممنون :wink:
این هم یک برنامه تبدیل تاریخ میلادی به شمسی به زبان C
مقادیر تاریخ میلادی را در متغیر های year,month,day گذاشته و تاریخ شمسی را در همان مکانها بخوانید.
کد:
/////////////////////////////////////////////////////////////////////////////////////
[size=18]//;{flash unsigned char mon[]={0,10,11,9,11,10,10,9,9,9,8,9,9
//;unsigned char year,month,day
//////////////////For Example :2008/02/08 --->1386/11/19 /////////////////
// ;year=8
// ;month=2
// ;day=8
//////////////////////////////////////////////////////////////////////////////////
if(year%4==0 & month>2)day++; //miladi leap year: increase day
if(year%4==1 && month==3 && day==20){day=30;month=12;goto yearcal;} // shamsi leap year
if(year%4==1 && (month<3 || (month==3 && day<20)))day++; // miladi leap year remain: increase day
day=day+mon[month]; //calculate shmsi day
month=month+9; //calculate shamsi month
if (month>12)month=month-12; //adjust month
if(month<7){if(day>31){day=day-31;month++;}} //adjust shamsi day with related month
// {{;++if(month<12){if(day>30){day=day-30;month
// {{;if(month==12){if(day>29){day=day-29;month=1
                                                                      :yearcal
year=year+79; //calculate shamsi year
// ;if(year >= 100)year=year-100
if(year%4==3){if(month>10 || (month==10 && day>11 )) year--;} //adjust shmasi year
{{;--else {if(month>10 || (month==10 && day>10 )) year  
                  [/size][size=18][/size][size=12][/size]
سلام دوست عزیز خیلی راحت میتونید دانلودش کنید 
karait.com