DestinyNet 命理網



✨AI算命大師



議題選項
議題評分
#49959 - 2001-12-14 23:09:40 Re: 設計起卦程式遇到障礙了!
近道 離線
亢龍有悔
註冊: 2001-03-16
文章數: 892
阿倫先生:
點選18次,您有沒有秀逗呀,六爻六次已經不得了了!
重點是不論自動起卦,或是由占者自行點選(要忠於占者之選擇),其成卦之機率最
好能與原始易經卜筮之設計相同,即出現6,7,8,9的機率應分別為4/64,20/64,28/64,及12/64,點一次,決定6,7,8,9之一,六次之後即可計算
變爻所在(亦宜以古法36,37營數變上爻,54營數變初爻,53營數變二爻等之
方法為準)並成卦.
農曆與陽曆的轉換,只要十年,幾個數字就搞定了,但是您需寫個
程式算出來.或者參考以下程式(轉貼).[我不用該程式之方法]近道敬上

==============================================================================
發信人: [email protected] (陳金進)
看 板: tw.bbs.rec.mud
標 題: MudOS 陰陽曆轉換程式
發信站: 師大計中(精靈之城) (Sat Mar 08 19:19:03 1997 GMT)
==============================================================================

/* 本程式是由 黃曉鳴 於 1995/07/25 發表的程式改編的
原程式請見交大資工 BBS 站的 programming 內的精華區

wade 改寫於 1996 03 08
*/


inherit F_CLEAN_UP;

// 這是轉換時必須的資料庫, 如果要增加容許轉換的年份, 就必須
// 查萬年曆, 將之填入本資料庫內...
// 底下是依次序給與說明
// BaseDays 到西曆 1 月 1 日到農曆正月初一的累積日數
// Intercalation 閏月月份. 0==此年沒有閏月
// BaseWeekday 此年西曆 1 月 1 日為星期幾再減 1
// BaseKanChih 此年西曆 1 月 1 日之干支序號減 1
// 後面是農曆年每月之大小, 0==小月(29日), 1==大月(30日)

mixed LunarCal = ({
({ 23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 }), /* 1936 */
({ 41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 }),
({ 30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 }),
({ 49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }),
({ 38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }), /* 1940 */
({ 26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 }),
({ 45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }),
({ 35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 }),
({ 24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 }), /* 1944 */
({ 43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 }),
({ 32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 }),
({ 21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }),
({ 40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }), /* 1948 */
({ 28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }),
({ 47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 }),
({ 36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }),
({ 26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 }), /* 1952 */
({ 44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1 }),
({ 33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 }),
({ 23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 }),
({ 42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 }), /* 1956 */
({ 30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 }),
({ 48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 }),
({ 38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }),
({ 27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 }), /* 1960 */
({ 45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 }),
({ 35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }),
({ 24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 }),
({ 43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 }), /* 1964 */
({ 32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 }),
({ 20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 }),
({ 39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0 }),
({ 29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 }), /* 1968 */
({ 47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 }),
({ 36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 }),
({ 26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1 }),
({ 45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 }), /* 1972 */
({ 33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1 }),
({ 22, 4, 1, 37, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 }),
({ 41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 }),
({ 30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }), /* 1976 */
({ 48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 }),
({ 37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 }),
({ 27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 }),
({ 46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0 }), /* 1980 */
({ 35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1 }),
({ 24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 }),
({ 43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 }),
({ 32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 }), /* 1984 */
({ 50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 }),
({ 39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1 }),
({ 28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0 }),
({ 47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }), /* 1988 */
({ 36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 }),
({ 26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1 }),
({ 45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0 }),
({ 34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0 }), /* 1992 */
({ 22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 }),
({ 40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 }),
({ 30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1 }),
({ 49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1 }), /* 1996 */
({ 37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }),
({ 27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1 }),
({ 46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 }),
({ 35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 }), /* 2000 */
({ 23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }),
({ 42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }),
({ 31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 }),
({ 21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 }), /* 2004 */
({ 39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 }),
({ 28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 }),
({ 48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 }),
({ 37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 }), /* 2008 */
({ 25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }),
({ 44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }),
({ 33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }),
({ 22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }), /* 2012 */
({ 40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }),
({ 30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 }),
({ 49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 }),
({ 38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 }), /* 2016 */
({ 27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 }),
({ 46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0 }),
({ 35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 }),
({ 24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }), /* 2020 */
({ 42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }),
({ 31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 }),
({ 21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 }),
({ 40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }), /* 2024 */
({ 28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 }),
({ 47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1 }),
({ 36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 }),
({ 25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 }), /* 2028 */
({ 43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }),
({ 32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0 }),
({ 22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 })
});

#define FIRSTYEAR 1936 // 可以轉換的第一年

#define LASTYEAR FIRSTYEAR+sizeof(LunarCal)-1 // 可以轉換的最後一年

// 西曆年每月之日數
int *SolarCal = ({ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 });

/* 西曆年每月之累積日數, 平年與閏年 */
mixed SolarDays = ({
({ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 396 }),
({ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 397 })
});

int Source; // ==0 則輸入日期為西曆, !=0 則輸入為農曆
int SolarYear; // 輸出或輸入之西曆年份
int SolarMonth; // 西曆月
int SolarDate; // 西曆日
int LunarYear; // 輸出或輸入之農曆年份
int LunarMonth; // 農曆月
int LunarDate; // 農曆日
int Weekday; // 該日為星期幾 ( 0==星期日, 1==星期一, ... )
int Kan; // 該日天干 ( 0==甲, 1==乙, ..., 9==癸 )
int Chih; // 該日地支 ( 0==子, 1==丑, ..., 11==亥 )

// 求此西曆年是否為閏年, 返回 0 為平年, 1 為閏年
int GetLeap (int year)
{
if ( year % 400 == 0 )
return 1;
else if ( year % 100 == 0 )
return 0;
else if ( year % 4 == 0 )
return 1;
else
return 0;
}

// 西曆農曆轉換
int CalConv()
{
int leap, d, sm, y, im, l1, l2, acc, i, lm, kc;

if (Source == 0) {
if ( SolarYear <= FIRSTYEAR || SolarYear > LASTYEAR )
return 1;
sm = SolarMonth - 1;
if ( sm < 0 || sm > 11 )
return 2;
leap = GetLeap( SolarYear );
if ( sm == 1 )
d = leap + 28;
else
d = SolarCal[sm];
if ( SolarDate < 1 || SolarDate > d )
return 3;
y = SolarYear - FIRSTYEAR;
acc = SolarDays[leap][sm] + SolarDate;
Weekday = ( acc + LunarCal[y][2] ) % 7;
kc = acc + LunarCal[y][3];
Kan = kc % 10;
Chih = kc % 12;
if ( acc <= LunarCal[y][0])
{
y--;
LunarYear = SolarYear - 1;
leap = GetLeap( LunarYear );
sm += 12;
acc = SolarDays[leap][sm] + SolarDate;
}
else
LunarYear = SolarYear;
l1 = LunarCal[y][0];
for ( i=0; i<13; i++ )
{
l2 = l1 + LunarCal[y][i+4] + 29;
if ( acc <= l2 )
break;
l1 = l2;
}
LunarMonth = i + 1;
LunarDate = acc - l1;
im = LunarCal[y][1];
if ( im != 0 && LunarMonth > im )
{
LunarMonth--;
if ( LunarMonth == im )
LunarMonth = -im;
}
if ( LunarMonth > 12 )
LunarMonth -= 12;
}
else /* Lunar */
{
if ( LunarYear < FIRSTYEAR || LunarYear >= LASTYEAR )
return 1;
y = LunarYear - FIRSTYEAR;
im = LunarCal[y][1];
lm = LunarMonth;
if ( lm < 0 )
{
if ( lm != -im )
return 2;
}
else if ( lm < 1 || lm > 12 )
return 2;
if ( im != 0 )
{
if ( lm > im )
lm++;
else if ( lm == -im )
lm = im + 1;
}
lm--;
if ( LunarDate > LunarCal[y][lm+4] + 29 )
return 3;
acc = LunarCal[y][0];
for ( i=0; i acc += LunarCal[y][i+4] + 29;
acc += LunarDate;
leap = GetLeap( LunarYear );
for ( i=13; i>=0; i-- )
if ( acc > SolarDays[leap] )
break;
SolarDate = acc - SolarDays[leap];
if ( i <= 11 )
{
SolarYear = LunarYear;
SolarMonth = i + 1;
}
else
{
SolarYear = LunarYear + 1;
SolarMonth = i - 11;
}
leap = GetLeap( SolarYear );
y = SolarYear - FIRSTYEAR;
acc = SolarDays[leap][SolarMonth-1] + SolarDate;
Weekday = ( acc + LunarCal[y][2]) % 7;
kc = acc + LunarCal[y][3];
Kan = kc % 10;
Chih = kc % 12;
}
return 0;
}

int main(object me, string arg)
{
int yy,mm,dd;
int OK=0;

if (!arg || arg == "" || sscanf (arg, "%d%d%d", yy, mm, dd) != 3) {
write ("語法: lunar 年 月 日\n");
return 1;
}

if (yy <= 2031 && yy >= 1937 && mm <= 12 && mm >= 1 && dd <= 31 && dd >= 1) {
SolarYear = yy;
SolarMonth = mm;
SolarDate = dd;
Source = 0;
CalConv();
printf ("Year\t: %d\nMonth\t: %d\nDate:\t: %d\n",
LunarYear, LunarMonth, LunarDate);
}
else
printf ("只能查 %d 到 %d 年之間.\n", FIRSTYEAR, LASTYEAR);

return 1;
}

--
※ Origin: 精靈之城 ◆ From: doc.ice.ntnu.edu
ENJOKENB ENJOKENB ENJOKENB ENJOKENB ENJOKENB ENJOKENB ENJOKENB ENJOKENB ENJOKENB
_________________________
二由一有,一亦莫守;一心不生,萬法無咎。
⋯⋯恭錄自禪宗三祖僧璨信心銘
近道
↑回到頂端↑
廣告



全部議題
議題 貼文者 : 張貼日期
設計起卦程式遇到障礙了! 阿倫 2001-12-13 12:00:03
Re: 設計起卦程式遇到障礙了! 近道 2001-12-14 23:09:40

Google 搜尋
七嘴八舌
Facebook 塗鴉牆
最多貼文者 (30 天內)
mikomiko 170
紅兒 103
hui 85
謝尚橗 65
CHC 59
jcj 44
九流術士 32
雙斗魂 24
golden621 23
yungshow 23
元利 18
jwjwo 18
過來人 18
LOOz2023 18
依法不依人 17
最新議題
想問感情 工作一事
by ting2408
3 分 59 秒 之前
各位老師,想問一下最近兩年的事業運,謝謝
by KV6935
今天 at 13:45
影片:文殊菩薩心咒:貓咪的療癒日常
by jwjwo
今天 at 13:34
喜樂最近的修行心得
by healer
今天 at 12:08
影片:綠度母心咒 童謠版
by jwjwo
昨天 at 22:52
步虛大師預言【東南盡毀,四海水中皆赤色】
會在什麼時間發生?

by golden621
昨天 at 21:44
特別想請問進入己亥大限的二個疑惑。謝謝!
by follow
昨天 at 17:46
特別想請問進入己大限的二個疑惑。謝謝!
by follow
昨天 at 17:24
K-Pop 輕舞曲 楞嚴咒咒心 (敦煌天女風 K-Pop 舞蹈)
by jwjwo
昨天 at 09:29
川普說要考慮兩星期才決定。美國最後會否下
場攻擊伊朗?

by golden621
昨天 at 08:24
誰在線上
7 線上使用者 (ting2408, 禾平, braudel, 4 隱形), 57 Guests and 20 Spiders online.
Key: Admin, Global Mod, Mod
最新使用者
我的快樂時代, hihi0933729, derick, WolfTsai197802XXXX, a8565
81756 註冊使用者
討論區統計
81756 使用者
54 討論區
222100 議題
2159892 文章

最高線上使用者: 3332 @ 2025-04-24 03:32:48

本站是個命理討論的園地,如果您要問命,請務必詳閱各板板規,遵守發問規則,不要只留個生日或是命盤, 其他什麼都沒提。貼命盤的方法請特別注意算完命盤後的文字說明,不要貼個沒人看懂歪七扭八的命盤, 貼錯命盤及未遵守板規者,文章很有可能被不預警刪除 另外,如果您提了問題,而有人回覆的話,不論對與錯,請務必多上來回應論命者, 我們不歡迎那種提了問題就等人回答,也不回應的人。我們需要的是,「良好的互動」及「長期的追蹤」。
本站大多數的討論區都得要註冊才能發言,您若是要張貼討論,請務必註冊為使用者, 如果您忘了您的密碼,請在登入」的畫面, 輸入您的帳號,再按一下我忘記我的密碼了」, 此時系統會寄一封信到您當時註冊的 Email 信箱裡面, 裡面則附有一個臨時密碼,請您拿到密碼後用此臨時密碼登入。登入之後可以在 編輯個人檔案」裡面修改成您習慣的密碼。
logo
欣洋網路有限公司