周易是一本玄学的书。
其中里面的算卦我特别感兴趣,对于梅花易数或者投硬币的方法可以自己亲自算。速度蛮快的。
但是六爻算卦却有些麻烦。在自己算了一卦后,便决定试试将其程序化,估计应该没什么人感兴趣,注释什么的我也省了。
手机写的,估计也没什么排版。
蓍草占卜事先要准备五十根蓍草。演算开始时,先取一根放在外面,表示天地产生之前的“太极”状态。然后将剩余的四十九根蓍草随意分为两部分,左手所持有的部分表示“天”,右手所持有的部分表示“地”。再从右手任意取出一根放在左手小指和无名指之间,表示“人”。此后继续以每四根为一组表示“四季”进行分发,先用右手分数左手的蓍草,再用左手分数右手的蓍草。直至分到出现以下规律:左余一,右余三,左余二,右余二,左余三,右余一,左余四,右余四。然后,将左手所剩蓍草放在右手中指和无名指之间,右手所剩蓍草放在左手食指与中指之间,这就完成了“第一变”。“第二变”如法炮制,去除指缝间的余数,将剩余的蓍草按“第一变”的顺序和方法继续演算。然后按间样的顺序和办法进行第三次演算。“三变”之后,两手所持的蓍草总数应为三十六、三十二、二十是二十四。然后除以四,得到一爻。
蓍草占卜共有六爻,必须经过十八次演算,才能得到一个卦象,因此又被称为“六爻”。推演过程全部结束后,根据推论规则对卦象进行解释,占卜才算真正完成。
1 #include <iostream> 2 #include <stdlib.h> 3 #include <time.h> 4 using namespace std; 5 6 7 int main() { 8 9 srand(unsigned (time(0))); 10 int su; 11 int a, b, a1, b1, c; 12 int yao[6];//储存六爻 13 for (int i1 = 0; i1 < 6; i1++) { 14 su = 49; 15 for (int i2 = 0; i2 < 3; i2++) { 16 17 a = 4 + rand() % su - 5; 18 b = su - 1 - a; 19 a1 = a % 4; 20 b1 = b % 4; 21 22 if (a1 == 0) { 23 a1 = 4; 24 } 25 if (b1 == 0) { 26 b1 = 4; 27 } 28 29 c = 1 + a1 + b1; 30 31 su = su - c; 32 33 /* cout << "a: " << a << endl; cout << "b: " << b << endl; 34 35 cout << "a1: " << a1 << endl; cout << "b1: " << b1 << endl; 36 37 //cout << "c: " << c << endl; 38 39 cout << "数: " << su << endl; 40 41 cout << endl; */ 42 43 44 } 45 46 yao[i1] = su / 4; 47 48 } 49 cout << "本卦:\n"; 50 for (int i = 0; i < 6; i++) { 51 52 // cout << yao[i] << "\n"; 53 54 switch (yao[i]) { 55 56 case 6: 57 cout << "--\n"; 58 break; 59 case 7: 60 cout << "─\n"; 61 break; 62 case 8: 63 cout << "--x\n"; 64 break; 65 case 9: 66 cout << "─○\n"; 67 break; 68 69 } 70 } 71 cout << "变卦:\n"; 72 for (int i = 0; i < 6; i++) { 73 74 switch (yao[i]) { 75 76 case 6: 77 cout << "--\n"; 78 break; 79 case 7: 80 cout << "─\n"; 81 break; 82 case 8: 83 cout << "─\n"; 84 break; 85 case 9: 86 cout << "--\n"; 87 break; 88 89 } 90 } 91 92 93 94 }