2016-06-22 14 views
2

私はC++を初めて使用しています。私は式を介して値を計算し、関数が呼び出されるたびに毎回その値を保存する必要があります。私はサイズ10の配列を作成し、myValueを計算してからその値を格納しようとしました。これは正しい方法ですか?関数が呼び出されるたびにmyValueを計算して格納し、次の呼び出しでその値n [i-1]を使用して、値n [i]を計算するように動作します。第1コールのmyvalueが0.5であるとします。次の呼び出しでは、myValue =(1-0.3)* 0.5となります。 10個の値すべてを10回の呼び出しで保存し、最後に格納された値を使用してmyValueを計算しますか?私はそれをコンパイルしているときに私に何かエラーを表示していませんが、それでも私は疑いがあります。与えられたコードで関数が呼び出されるたびに値を配列に格納します

static double 
CalculatemyValue(Node* ch) 
{ 
float gamma=0.3; 
double myValue = 0.0; 
    int n[10]; 
    int i = 0; 
    n[i] = myValue; 
    myValue = ((1-gamma)*n[i-1]) //previous value 
    return myValue; 
} 
+0

私はあなたが何をする必要があるのか​​理解していませんが、どこかに静的なローカル変数が必要なように聞こえます。 – NathanOliver

答えて

1

static double 
CalculatemyValue(Node* ch) 
{ 
float gamma=0.3; 
double myValue = 0.0; 
    int n[10]; 
    int i = 0; 
    n[i] = myValue; 
    myValue = ((1-gamma)*n[i-1]) //previous value 
    return myValue; 
} 

&hellip。配列nはローカル自動変数です。実行が宣言に達するたびに新たに作成され、実行がブロックを離れるときに破棄されます。通話間に情報は保持されません。呼び出し間で状態を保持する一つの良い方法は、例えば、関数にデータメンバーを維持したい状態を構成するクラスのメンバ関数を作ることです


このように:

class Power_sequence 
{ 
private: 
    double gamma_; 
    double value_; 
public: 
    auto gamma() const -> double { return gamma_; } 

    void advance() { value_ *= 1 - gamma_; } 
    auto current() const -> double { return value_; } 

    auto next() 
     -> double 
    { 
     double const result = current(); 
     advance(); 
     return result; 
    } 

    Power_sequence(double const gamma = 0.3) 
     : gamma_(gamma) 
     , value_(1.0) 
    {} 
}; 

…これは、あなたがこのように使用します。

Power_sequence seq; 
for(int i = 1; i <= 42; ++i) 
{ 
    cout << seq.next() << endl; 
} 

免責事項:上記のコードコンパイラによってチェックされません。

もう1つの方法は、状態を明示的な引数として関数に渡すことです。

+0

ありがとうございました。このコードは42の値すべてを保存しますか?私の次のステップは、すべての格納された値の中で最大値を見つけることです。 – noman

+0

このコードは、最新の値のみを格納します。すべての値を保存するように変更することができます。あなたが望むものなら、なんでも。 'std :: vector'は動的な値を格納するのに適しています。 –