✔ 最佳答案
沒空寫,我隨便譯一下:
1. 輸入一個整數,用下列式子去算π的近似值
π^2 = 12 (1 - 1/4 + 1/9 - 1/16 + 1/25 - .... - 1/(2n)^2 + 1/(2n + 1)^2)
2. 讀入平行四邊行的四個點:(x1, y1), (x2, y2), (x3, y3), and (x4, y4)
1) 檢查它們是平是四邊行的四個點,若是,回答下列問題;
否,印出不是四邊行
2) 算出周長
3) 算出面積
太忙,有空的大大就麻煩幫他一下囉!
2007-10-27 00:45:06 補充:
這 2 題我都會。
實在太忙沒空寫。
會寫程式想幫忙、但不會算它們是否平行的朋友們,
可以來信。
我再給方向。
(不好意思唷,只是純想幫幫版大,沒別的意思。)
2007-10-28 00:02:06 補充:
A. 寫個 Va 是否 平行 Vb 的副程式:
方法:Va(xa, ya), Vb(xb, yb), fabs(xa*yb - ya * sb) < EPSILON * 2048
EPSILON: 2.2204460492503131E-16 Double
1.192092896E-7F Float
2048 自定的一個數,建議是2n,範圍:約 n = 4 ~ 15
B. 寫個算 Va 長度的副程式:
方法:length = sqrt(xa * xa + yb * yb)
C. 寫個算 Va dot Vb 的副程式:(內積)
方法:double dot(Va, Vb) = xa * xb + ya * yb;
D. 寫個算 Va Vb 夾角的副程式:
方法:theta = acos( dot(Va, Vb) / (length(Va) * length(Vb));
E. 進入主題:
1. 檢查 AB // CD 且 AC // BD?
是:是平行四邊形
否:檢查 AB // CD 且 AD // BC?(E)
是:是平行四邊形
否:不是平行四邊形
2. 邊長=(length(AB) + length (AC)) * 2
(若是由(E)查到,要換成 (length(AB) + length(AD))*2)
3. area = length(AB) * length(AC) * sin(theta(AB, AC))
(若是由(E)查到,你會換吧!?
2007-10-28 00:09:55 補充:
什麼是 EPSILON?
正名:Machine Epsilon
定義:最大的數使〝1 + EPSILON = 1〞
暗示:這種記算準度的極限!
用處:預估答案的可靠性。
用法:上述便是一例。
除非是在研究極好的數值方法,
不然很少有用 EPSILON * 100 以下的!
(有的數值方法差到是 sqrt(EPSILON):用 double 只有 float 的準度!)
所以上述的 n = 4,才 16 << 100,是理想狀況下才會碰到!
絕大多數的情況,約在 512 ~ 4096。
2007-10-28 10:15:50 補充:
B. 竟寫錯!
B. 寫個算 V 長度的副程式:
方法:length = sqrt(x * x + y * y)
2007-10-28 10:17:11 補充:
你的第一題〝最好〞從 n 加到 1,不要從 1 加到 n!
這樣會比較準。
2007-10-28 14:48:17 補充:
算斜率的缺點:
1. 要用除法:在演算法理論上,除法不會比乘法慢!
但,〝好像〞還沒找到這樣的演算法!
2. 要檢查是否除 0!
if 是現代 CPU 速度的殺手!
所以,我那裡用的是〝變種斜率〞:xa*yb - ya * xb!
其實,說穿了就是
檢查 xa * yb == ya * xb,就是
檢查 xa / xb == ya / yb!就是斜率!
但,我這樣做,沒有除法!
而,浮點數的問題,造成的誤差也要處理!
這就是為何變成了看起來那麼複雜的
fabs(xa*yb - ya * sb) < EPSILON * 2048
的原因與由來。
2007-10-28 14:49:12 補充:
又發現打錯字了!
該去撞牆了!:$
A. 寫個 Va 是否 平行 Vb 的副程式:
方法:Va(xa, ya), Vb(xb, yb), fabs(xa*yb - ya * sb) < EPSILON * 2048
裡的 sb 是 xb 才對