📄 yijingsuanfa.cpp
字号:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int year,month,day;
double hour;
int m_gua,m_guaup,m_guadown,m_hugua,m_huup,m_hudown,m_bgua,m_bup,m_bdown;
int m_bhugua,m_bhuup,m_bhudown,bpt,bptup,bptdown,bpthu,bpthuup,bpthudown;
int mpt,mptup,mptdown,mpthu,mpthuup,mpthudown,y;
int dz,_hour,smd=0,yyzq;
void hu_gua(int *m,int *n);
void yao_bian(int *m,int *n,int y);
void bpt_sf(int *m,int *n);
cout<<"请输入您的生辰八字:"<<endl;
cout<<"出生年份:";
cin>>year;
cout<<endl<<"出生月份(农历):";
cin>>month;
if(month<=0||month>12)
{
cout<<"输入月份错误,请重新输入:";
cin>>month;
}
cout<<endl<<"出生日期(农历):";
cin>>day;
if(day<=0||day>31)
{
cout<<"输入日期错误,请重新输入:";
cin>>day;
}
cout<<endl<<"出生时间(24小时制,若不是整点,请用小数表示):";
cin>>hour;
if(hour<0||hour>24)
{
cout<<"输入时间错误,请重新输入:";
cin>>hour;
}
cout<<endl;
_hour=(hour+1)/2+1;
if(hour>=23||hour<1)
_hour=1;
dz=(year-3)%12;
if(dz==0)
dz=12;
m_guaup=(dz+month+day)%8; //主卦的上卦数//
if(m_guaup==0)
m_guaup=8;
m_guadown=(dz+month+day+_hour)%8; //主卦的下卦数//
if(m_guadown==0)
m_guadown=8;
y=(dz+month+day+_hour)%6; //求爻变//
if(y==0)
y=6;
m_gua=m_guaup+m_guadown; //计算主卦数//
m_huup=m_guaup;
m_hudown=m_guadown;
hu_gua(&m_huup,&m_hudown);
m_hugua=m_huup+m_hudown; //计算主卦的互卦数//
m_bup=m_guaup;
m_bdown=m_guadown;
yao_bian(&m_bup,&m_bdown,y);
m_bgua=m_bup+m_bdown; //计算变卦数//
m_bhuup=m_bup;
m_bhudown=m_bdown;
hu_gua(&m_bhuup,&m_bhudown);
m_bhugua=m_bhuup+m_bhudown; //计算变卦的互卦数//
bptup=m_bup;
bptdown=m_bdown;
bpt_sf(&bptup,&bptdown);
bpt=bptup+bptdown; //计算变旁通//
bpthuup=bptup;
bpthudown=bptdown;
hu_gua(&bpthuup,&bpthudown);
bpthu=bpthuup+bpthudown; //计算变旁通的互卦数//
mptup=m_guaup;
mptdown=m_guadown;
bpt_sf(&mptup,&mptdown);
mpt=mptup+mptdown; //计算主旁通//
mpthuup=mptup;
mpthudown=mptdown;
hu_gua(&mpthuup,&mpthudown);
mpthu=mpthuup+mpthudown; //计算主旁通的互卦数//
int smd_[12]={m_gua,m_hugua,y,m_bgua,m_bhugua,y,bpt,bpthu,y,mpt,mpthu,y};
int i;
cout<<endl<<"您的生命点为:"<<endl;
for(i=0;i<12;i++)
{
smd+=smd_[i];
cout<<smd<<" ";
if(i>0&&(i+1)%4==0)
cout<<endl;
}
yyzq=smd;
cout<<endl<<"您的一元周期为:"<<yyzq<<endl;
return 0;
}
void hu_gua(int *m,int *n) //求互卦数的函数//
{
int a=0,b=0,c=0,d=0,e=0,f=0;
if(*m==1)
{
a=b=c=0;
}
if(*m==2)
{
a=1;
b=c=0;
}
if(*m==3)
{
a=c=0;
b=1;
}
if(*m==4)
{
a=b=1;
c=0;
}
if(*m==5)
{
a=b=0;
c=1;
}
if(*m==6)
{
a=c=1;
b=0;
}
if(*m==7)
{
b=c=1;
a=0;
}
if(*m==8)
{
a=b=c=1;
}
if(*n==1)
{
d=e=f=0;
}
if(*n==2)
{
d=1;
e=f=0;
}
if(*n==3)
{
d=f=0;
e=1;
}
if(*n==4)
{
d=e=1;
f=0;
}
if(*n==5)
{
d=e=0;
f=1;
}
if(*n==6)
{
d=f=1;
e=0;
}
if(*n==7)
{
e=f=1;
d=0;
}
if(*n==8)
{
d=e=f=1;
}
*m=d*2*2+c*2+b+1;
*n=e*2*2+d*2+c+1;
}
void yao_bian(int *m,int *n,int y) //求主卦经爻变后所得变卦数的函数//
{
int a=0,b=0,c=0,d=0,e=0,f=0;
int t;
if(*m==1)
{
a=b=c=0;
}
if(*m==2)
{
a=1;
b=c=0;
}
if(*m==3)
{
a=c=0;
b=1;
}
if(*m==4)
{
a=b=1;
c=0;
}
if(*m==5)
{
a=b=0;
c=1;
}
if(*m==6)
{
a=c=1;
b=0;
}
if(*m==7)
{
b=c=1;
a=0;
}
if(*m==8)
{
a=b=c=1;
}
if(*n==1)
{
d=e=f=0;
}
if(*n==2)
{
d=1;
e=f=0;
}
if(*n==3)
{
d=f=0;
e=1;
}
if(*n==4)
{
d=e=1;
f=0;
}
if(*n==5)
{
d=e=0;
f=1;
}
if(*n==6)
{
d=f=1;
e=0;
}
if(*n==7)
{
e=f=1;
d=0;
}
if(*n==8)
{
d=e=f=1;
}
int x[6]={a,b,c,d,e,f};
t=x[6-y];
if(t==1)
x[6-y]=0;
else
x[6-y]=1;
*m=x[2]*2*2+x[1]*2+x[0]+1;
*n=x[5]*2*2+x[4]*2+x[3]+1;
}
void bpt_sf(int *m,int *n) //求旁通的函数//
{
int a=0,b=0,c=0,d=0,e=0,f=0;
if(*m==1)
{
a=b=c=0;
}
if(*m==2)
{
a=1;
b=c=0;
}
if(*m==3)
{
a=c=0;
b=1;
}
if(*m==4)
{
a=b=1;
c=0;
}
if(*m==5)
{
a=b=0;
c=1;
}
if(*m==6)
{
a=c=1;
b=0;
}
if(*m==7)
{
b=c=1;
a=0;
}
if(*m==8)
{
a=b=c=1;
}
if(*n==1)
{
d=e=f=0;
}
if(*n==2)
{
d=1;
e=f=0;
}
if(*n==3)
{
d=f=0;
e=1;
}
if(*n==4)
{
d=e=1;
f=0;
}
if(*n==5)
{
d=e=0;
f=1;
}
if(*n==6)
{
d=f=1;
e=0;
}
if(*n==7)
{
e=f=1;
d=0;
}
if(*n==8)
{
d=e=f=1;
}
int x[6]={a,b,c,d,e,f};
int i;
for(i=0;i<6;i++)
{
if(x[i]==1)
x[i]=0;
else
x[i]=1;
}
*m=x[2]*2*2+x[1]*2+x[0]+1;
*n=x[5]*2*2+x[4]*2+x[3]+1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -