2013-06-30 48 views
1

現在,在這個問題中,您必須使用C代碼作爲創建方案代碼的參考。計劃中球體的面積和體積

#include <stdio.h> 
const double PI = 3.14159265; 

double areac(double d) { 
    double a; 
    a = PI*(d/2)*(d/2); 
    return a; 
} 

double volumec(double d, double h) { 
    double a, v; 
    a = areac(d); // call areac() here 
    v = a*h; 
    return v; 
} 

double TotalVolume() { 
    double v1, v2, v3, v4, v5; 
    v1 = volumec(1, 1); 
    v2 = volumec(2, 2); 
    v3 = volumec(3, 3); 
    v4 = volumec(4, 4); 
    v5 = volumec(5, 5); 
    return v1+v2+v3+v4+v5; 
} 

void main() { 
    double v; 
    v = TotalVolume(); 
    printf("%f\n",v); 
} 

現在我已經在計劃編寫的代碼,它是如下:

(define PI 3.14159265) 

(define areac 
    (lambda(d) 
    (* PI (expt (/ d 2) 2)))) 

(write"Areac: ") 
(areac 5) 
(newLine) 

(define volumec 
    (lambda (d h) 
    (* (* (expt (/ d 2) 2) h) PI))) 

(write"Volumec: ") 
(volumec 5 5) 
(newLine) 

(define TotalVolume 
    (lambda() 
    (+ (volumec 1 1) (volumec 2 2) (volumec 3 3) (volumec 4 4) (volumec 5 5)))) 

(define main 
    (lambda() 
    (* (TotalVolume) 1))) 

(write"Total Volume: ") 
(main) 
(newLine) 

現在不是在volumec寫公式我必須引用在volumecareac,然後運行它。

+1

您可能會看到乘法的交換性質(http://bit.ly/14ky8Zh) – GoZoner

回答

2

然後,只需調用areacvolumec

(define volumec 
    (lambda (d h) 
    (* h (areac d)))) 

解釋:首先,請注意您目前執行的volumec等效於此,憑藉乘法交換律的:

(* h (* PI (expt (/ d 2) 2))) 

現在只需更換已在areac中計算出的代碼即可:

(* PI (expt (/ d 2) 2)) 

本着以areac一個電話,注意到,必須作爲參數傳遞的唯一缺少的值是d

(areac d) 

之後,在C原配方中所看到的,唯一剩下來做的是乘以h,我們都設置了:

(* h (areac d)) 
0

只是一些nitpicks。

(define TotalVolume 
    (lambda() 
    (let ((do-it (lambda (x) (volumec x x)))) 
     (reduce + 0 
     (map do-it (list 1 2 3 4 5))))) 

當你發現自己在鍵入同一件事情,你作爲一個人的編譯器,一個方式,以避免它是通過使用高階函數。

(define main 
    (lambda() 
    (let ((v (TotalVolume))) 
     (display v)))) 

請注意返回到REPL的內容與實際顯示爲輸出的內容之間的區別。除非您使用的功能如顯示,寫入,顯示,格式化或打印......屏幕上顯示的內容是REPL的副作用,而不是程序的實際輸出。當您希望能夠將read以與將數據結構保存到文件時相同的形式返回到函數中時,使用writedisplay通常用於顯示供人閱讀的內容。

使用let特殊形式let來定義函數體中的局部變量。

+0

'(eq'total-volume'TotalVolume)==>#f' – Sylwester