✨AI算命大師
議題選項
議題評分
#49958 - 2001-12-13 12:00:03 設計起卦程式遇到障礙了!
阿倫 離線
或躍在淵
註冊: 2001-06-26
文章數: 296
各位大大,我好幾個月沒有來這裡來,真抱歉,因為最近

我忙於學習程式設計,準備要改行吃軟體設計這行飯。

由於找程式設計的工作時最好有點作品給人家看一看,

所以我已經開始寫我生平中第一個有實用價值的程式,

而這個程式就是一個起金錢卦的程式,但它不是全由電

腦起卦,而是由電產生亂碼,再由使用者在不知道的情

形下作出選擇,於是卦就出來了。

大既是如此,程式一開始就展示了一個由一百個球所組

成的方陣,每個球都有公和字的屬性,但使用者不會知

道。使用者只要用滑鼠隨便點取十八個球,正如起金錢

卦一般地產生十八個公和字的組合,電腦即自動把卦支

和變爻展出來。這樣使用者就可以再連上這個討論區,

用六爻易卦排系統來把卦排好,再貼上文章,大家就可

以替他/ 她解卦。而我這個程式完全沒有電腦直接起卦

那種使人不信任的缺點,因為卦是使用者自己用手挑選

出來的。

程式是已經寫好了,但我又在想,如果這個程式又能把

卦排好的話,那就更完美了。排世應和地支不難做,最

難的是如何把國曆轉成農曆,如果用最原始的方法,就

是把從今天起往後的十年的總天數,即三千六百五十天

都對應到農曆,但這樣真是一個沒有效率的方法,不知

道各位知不知道,國曆轉成農曆最有效率是用甚麼方法 ?

用我這個程式來輔助起卦,滑鼠點選十八次,只花幾秒

鐘而已,真方便,而且可以絕對信任,不知道各位大大

喜不喜歡這樣的一個起卦程式,如果反應好,我會放在

網路上供大家下載使用。



↑回到頂端↑
廣告
#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營數變二爻等之

方法為準)並成卦.

農曆與陽曆的轉換,只要十年,幾個數字就搞定了,但是您需寫個

程式算出來.或者參考以下程式(轉貼).[我不用該程式之方法]近道敬上



==============================================================================

發信人: jjchen.bbs@bbs.ntnu.edu.tw (陳金進)

看 板: 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

_________________________
二由一有,一亦莫守;一心不生,萬法無咎。
⋯⋯恭錄自禪宗三祖僧璨信心銘
近道
↑回到頂端↑





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