請C++的高手幫忙解題~

2007-10-27 12:18 am
我真的沒辦法,才來這請求幫忙了....拜託了!!
請幫忙如何轉成C程式碼~

1.
Write a program that reads an integer n to approximate π using the following formula:
π^2 = 12 (1 - 1/4 + 1/9 - 1/16 + 1/25 - .... - 1/(2n)^2 + 1/(2n + 1)^2)

2.
Write a program that reads four points (x1, y1), (x2, y2), (x3, y3), and (x4, y4) of a parallelogram.

1)Check if these four points form a parallelogram. If four points can form a parallelogram, then answer the following questions. Otherwise, indicate it is not a parallelogram.
2)Calculate the circumference of the parallelogram.
3)Calculate the area of the parallelogram.
更新1:

恩~~謝謝各位大大的幫忙,第一題我寫出來了! 現在困擾在第二題 如果給他int A,B,C,D,四點,很容易就寫出來了 只是,如果不固定四點呢?有方法寫的出來嗎?   謝謝~

回答 (4)

2007-10-28 8:02 am
✔ 最佳答案
沒空寫,我隨便譯一下:
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 才對
2007-10-28 10:08 pm
算平行我給個意見
先算第一條線的斜率
在算第二條線的斜率
斜率相等就是平行
如果對此有意見請自己去證明
這是我想的道又最好證明的方式
2007-10-27 6:12 am
這問題恐怕到最後會被移除吧!?
2007-10-27 5:48 am
請幫忙轉成中文吧
拜託了
真的沒辦法


收錄日期: 2021-04-27 17:15:21
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20071026000010KK05388

檢視 Wayback Machine 備份