2013-02-07 134 views
0

假設我有一個多項式函數f(x),並且我希望將這個表達式用於表達式g(x)或者h(x),這取決於用戶選擇哪個表達式。這可能嗎?如何傳遞一個表達式作爲參數/參數?

例如

int main() { 

    float fexpression = /* polynomial function f(x) here */;  

    /* some code where user picks g(x) or h(x) */ 

    if (/* gexpression == true */) 
     cout << gfunction(fexpression); 
    else /* h expression == true */ 
     cout << hfunction(fexpression); 

return 0; 
    } 

float gfunction(float j){ 

    float var = /* some function representing g(f(x)) == g(j) */; 
    return var; 
    } 

float hfunction(float j){ 
     float var = /* some function representing h(f(x)) == h(j) */; 
    return var; 
     } 

它只是似乎並不正確,我認爲我可以通過一個變量是一個表達式,如

float fexpression = .... 
+0

不清楚你設置/使用'x'的位置。 「fexpression」是一個字符串嗎?你如何評估f(x)? – Floris

+0

以及我希望它是一個變量的多項式表達式。例如,(5 *(pow(x,4)))+(3 *(pow(x,3)))+(10 * x) - 5 – LazerSharks

+0

假設它在賦值過程中被評估,該值不是表達式。這確實需要你在某處定義'x' ... – Floris

回答

3

你想要一個function pointer

使表達式成爲函數。

float fexpression(float x) 
{ 
    return (5*(pow(x,4))) + (3*(pow(x, 3))) + (10 * x) - 5 
} 

這段代碼,就像你寫的那樣,會自動傳遞功能。

if (/* gexpression == true */) 
     cout << gfunction(fexpression); 
    else /* h expression == true */ 
     cout << hfunction(fexpression); 
+0

ohhhhhh。涼。謝謝,我會先試試這個。 – LazerSharks

+0

是否有可能將函數fexpression分配給一個將在稍後通過而不首先啓動x的變量?並在具有fexpression的變量被傳遞後賦值x? – LazerSharks

+0

@ShaltNot是的。閱讀關於函數指針的信息。 –

3

我試圖在德魯的答案的註釋部分解釋這個細節,但它在格式化中丟失了...所以不得不開始另一個答案。

@ DrewDorman的是正確的說,你只是需要定義你的表達作爲一個函數:

float fexpression(float x) 
{ 
    return (5*(pow(x,4))) + (3*(pow(x, 3))) + (10 * x) - 5 
} 

缺什麼(你)是以下(你會從閱讀德魯的鏈接得到... ):

定義gfunction如下(例如)

float gfunction(float (*funcp)(float)) { 
    // lots of stuff to determine the value of x 
    return (*funcp)(x); 
} 

這是gfunction如何評估你的多項式。做hfunction

當你調用gfunction類似的東西,你必須引用fexpression如下:

cout << gfunction(&fexpression); 

&問題...這也從德魯的答案失蹤。

+0

好信息,@弗洛里斯。 –

+0

@DrewDormann - 歡呼聲。這種來回是SO如何最有價值的。 – Floris

+0

@Floris參數中包含(* funcp)(float)的含義是什麼?我讀了指針,但我仍然不清楚。 它是否將第二個浮點參數強制轉換爲名爲funcp的指針? – LazerSharks