PDA

View Full Version : تاریخ میلادی و شمسی به زبان c



saya joon
سه شنبه 26 مهر 1390, 22:08 عصر
سلام.دوستان سوال من درباره تبدیل دو تاریخ شمسی و میلادی بهم است.من جستجو کردم .کد زیر را که به زبان++c ولی خیلی کم فهمیدم منظورش چیه؟کسی میتونه توضیحات مفیدی بده.


#include<iostream.h>
#include<math.h>
// barnameye tabdile tarikh.
void main(){
cout<<”enter salo maho rozo be sorate 3 namber va dar sorati ke tarikh miladi ast dar akhar 1 vared konid va agar shamsi bod 2 vared konid > “;
int sal , mah , roz , noetarikh;
cin>>sal>>mah>>roz>>noetarikh;
if(noetarikh == 1){
int s=sal-1;
int m=mah-1;
int r;
if (sal%4==0){
if(m==0) r=(s*365.25)+roz;
if(m==1) r=(s*365.25)+31+roz;
if(m==2) r=(s*365.25)+31+29+roz;
if(m==3) r=(s*365.25)+31+29+31+roz;
if(m==4) r=(s*365.25)+31+29+31+30+roz;
if(m==5) r=(s*365.25)+31+29+31+30+31+roz;
if(m==6) r=(s*365.25)+31+29+31+30+31+30+roz;
if(m==7) r=(s*365.25)+31+29+31+30+31+30+31+roz;
if(m==8) r=(s*365.25)+31+29+31+30+31+30+31+31+roz;
if(m==9) r=(s*365.25)+31+29+31+30+31+30+31+31+30+roz;
if(m==10) r=(s*365.25)+31+29+31+30+31+30+31+31+30+31+roz;
if(m==11) r=(s*365.25)+31+29+31+30+31+30+31+31+30+31+30+roz;
}
else {
if(m==0) r=(s*365.25)+roz;
if(m==1) r=(s*365.25)+31+roz;
if(m==2) r=(s*365.25)+31+28+roz;
if(m==3) r=(s*365.25)+31+28+31+roz;
if(m==4) r=(s*365.25)+31+28+31+30+roz;
if(m==5) r=(s*365.25)+31+28+31+30+31+roz;
if(m==6) r=(s*365.25)+31+28+31+30+31+30+roz;
if(m==7) r=(s*365.25)+31+28+31+30+31+30+31+roz;
if(m==8) r=(s*365.25)+31+28+31+30+31+30+31+31+roz;
if(m==9) r=(s*365.25)+31+28+31+30+31+30+31+31+30+roz;
if(m==10) r=(s*365.25)+31+28+31+30+31+30+31+31+30+31+roz;
if(m==11) r=(s*365.25)+31+28+31+30+31+30+31+31+30+31+30+roz;
}
r=r-226899;
int sa=(r/365.25)+1 ;
int ss=r/365.25;
r=r-(ss*365.25)+.25;
int ma,ro;
if (sa%4==3) r=r+1;
if(r>336) ma=12,ro=r-336;
else if(r>306) ma=11 ,ro=r-306;
else if(r>276) ma=10 ,ro=r-276;
else if(r>246) ma=9 ,ro=r-246;
else if(r>216) ma=8 ,ro=r-216;
else if(r>186) ma=7 ,ro=r-186;
else if(r>155) ma=6 ,ro=r-155;
else if(r>124) ma=5 ,ro=r-124;
else if(r>93) ma=4 ,ro=r-93;
else if(r>62) ma=3 ,ro=r-62;
else if(r>31) ma=2 ,ro=r-31;
else if(r>0) ma=1,ro=r;
else if(r==0){
if(sa%4!=0)sa=sa-1,ma=12,ro=29;
else sa=sa-1,ma=12,ro=30;
}
cout<<sa<<”/”<<ma<<”/”<<ro<<endl;
}
else{
int s=sal -1;
int m=mah -1;
int r=roz;
if(m<=6 ) r=(s*365.25)+(m*31)+r+.25;
else r=(s*365.25)+(m-6)*30+186 + r+.25;
r=r+226899;
int sa=(r/365.25)+1;
int ss=r/365.25;
ss=ss*365.25;
r=r-ss;
int ma,ro;
if(sa%4==0){
if(r==0) sa=sa-1,ma=12,ro=31;
if(r<=31) ma=1, ro=r;
else if(r<=60) ma=2, ro=r-31;
else if(r<=91) ma=3, ro=r-60;
else if(r<=121) ma=4, ro=r-91;
else if(r<=152) ma=5, ro=r-121;
else if(r<=182) ma=6, ro=r-152;
else if(r<=213) ma=7, ro=r-182;
else if(r<=244) ma=8, ro=r-213;
else if(r<=274) ma=9, ro=r-244;
else if(r<=305) ma=10, ro=r-274;
else if(r<=335) ma=11, ro=r-305;
else if(r<=366) ma=12, ro=r-335;
}
else{
if(r==0) sa=sa-1,ma=12,ro=31;
else if(r<=31) ma=1, ro=r;
else if(r<=59) ma=2, ro=r-31;
else if(r<=90) ma=3, ro=r-59;
else if(r<=120) ma=4, ro=r-90;
else if(r<=151) ma=5, ro=r-120;
else if(r<=181) ma=6, ro=r-151;
else if(r<=212) ma=7, ro=r-181;
else if(r<=243) ma=8, ro=r-212;
else if(r<=273) ma=9, ro=r-243;
else if(r<=304) ma=10, ro=r-273;
else if(r<=334) ma=11, ro=r-304;
else if(r<366) ma=12, ro=r-334;
else if (r=366) sa=sa+1,ma=1 , ro=1;
}
cout<<sa<<”/”<<ma<<”/”<<ro<<endl;
}
}










:چشمک::چشمک::چشمک:

S.Reza
چهارشنبه 27 مهر 1390, 11:44 صبح
اینجور که این نوشته اگر خودش هم بیاد نمیتونه این کد رو توضیح بدهد

saya joon
چهارشنبه 27 مهر 1390, 12:07 عصر
یعنی نمیشه توضیح خوبی کسی راجع به این کد بده؟؟؟

glassysmart
چهارشنبه 27 مهر 1390, 13:30 عصر
سلام
می توانی از این (http://barnamenevis.org/showthread.php?289780-%D9%88%DB%8C%D8%AC%D8%AA-%D8%AA%D9%82%D9%88%DB%8C%D9%85-%D8%B4%D9%85%D8%B3%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%DB%8C%D9%88%D8%AA%D8%9F%21/page2) پروژه کمک بگیری برای تبدیل تاریخ

saya joon
چهارشنبه 27 مهر 1390, 21:37 عصر
کسی میتونه نحوه کارکرد این کد را به صورت الگوریتم بیان نماید؟؟؟
با تشکر

#include <stdio.h>
#include <conio.h>
#include <dos.h>
main()
{
//start/variables
int m_day_mon[12] = {31,0,31,30,31,30,31,31,30,31,30,31};
int s_day_mon[12] = {31,31,31,31,31,31,30,30,30,30,30,30};

int m_year , s_year;
int m_month , s_month;
int m_day , s_day;
int m_day_sum , s_day_sum;
//end/variables
struct date d;
getdate(&d);
m_year = d.da_year;
m_month = d.da_mon;
m_day = d.da_day;
// number of past day from m_year
if(m_year % 4 == 0)
m_day_mon[1] = 29;
else m_day_mon[1] = 28;
for(int i = 1 ; i <m_month ; i++)
m_day_sum += m_day_mon[i - 1];
m_day_sum += m_day;
// convert m_date to s_date
if(m_day_sum > 79)
{
s_day_sum = m_day_sum - 79;
s_year = m_year - 621; //s_year
if((s_year + 1) % 4 == 0)
s_day_mon[11] = 30;
else s_day_mon[11] = 29;
if (s_day_sum > 186)
{
s_month = ((s_day_sum - 187) / 30) + 7;
s_day = (s_day_sum - 186) % 30;
if(s_day == 0) s_day = 30;
}
else
{
s_month = ((s_day_sum - 1) /31) + 1;
if(s_month == 0) s_month = 1;
s_day = s_day_sum % 31;
if(s_day == 0) s_day = 31;
}
}
else
{
s_year = m_year - 622;
if((s_year + 1) % 4 == 0)
{
s_day_mon[11] = 30;
s_day_sum = m_day_sum + 287;
}
else
{
s_day_mon[11] = 29;
s_day_sum = m_day_sum + 286;
}
s_month = ((s_day_sum -187) / 30) + 7;
s_day = (s_day_sum - 186) % 30;
if(s_day == 0) s_day = 30;
}
printf("TODAY IN GREGORIAN CALENDAR IS : %d/%d/%d\n" , m_year,m_month,m_day);
if((m_month == 1) && (m_day == 1))
printf("HAPPY NEW GREGORIAN YEAR\n");
printf("\nTODAY IN PERSIAN CALENDAR IS : %d/%d/%d\n" , s_year,s_month,s_day);
if((s_month == 1) && (s_day == 1))
printf("HAPPY NEW PERSIAN YEAR");
getch();
}