2012-02-13 9 views
0

私はiOSプログラミング/目的関数cを初めて使用しています。反復試行錯誤計算をしようとしています。通常、このコードは、私がobjのCでこの問題を克服するかどうかはわかりませんエクセルVBAで働いているだろう:私はこれをコンパイルするとき試行錯誤はiOSのdo文で行われます

- (IBAction)calculate:(id)sender { 

    static float friction=2; 

    static float difference; 


    float Re = [pipe_id.text floatValue] * [fluid_velocity.text floatValue]/[kin_viscosity.text floatValue]; 

ReynoldsNo.text = [[NSString alloc]initWithFormat:@"%6.2f", Re]; 


do{ 

    float Colebrook1 = 1/powf(friction,0.5); 

    float Colebrook2 = -2*log10f([RelativeRoughness.text floatValue]/(3.7*[pipe_id.text floatValue]) + 2.51/(Re*powf(friction,0.5))); 

    float difference = fabsf((Colebrook1-Colebrook2)*1000);       

    friction = friction - 0.000001; 


    FrictionFactor.text = [[NSString alloc]initWithFormat:@"%6.2f", friction]; 

    Cole1.text = [[NSString alloc]initWithFormat:@"%6.2f", Colebrook1]; 

    Cole2.text = [[NSString alloc]initWithFormat:@"%6.2f", Colebrook2];   

    }while (difference > 0.000001); 


} 

だから、摩擦の値は2のまま私のループではありません全体的な試行錯誤が崩れています。これを客観的にどのように書くべきかを知るには何か助けが必要です。

答えて

1

ブロックスコープに注意してください。内側のdifferenceは外側を覆っていますので、floatを削除するだけで再宣言する必要はありません。

また、慣習的なヒントとして、クラスの大文字の識別子をそのまま使用してください。

1

この行はあなたの問題です:

float difference = fabsf((Colebrook1-Colebrook2)*1000); 

あなたは既にループの外の変数の違いを宣言します。ループ内で再度宣言する必要はありません。

はおそらく言いたい:また

difference = fabsf((Colebrook1-Colebrook2)*1000); 

、あなたの外側の宣言はstaticであることが必要であることを確信していますか?つまり、そのメソッドの呼び出しの間に値が保持されます。これは有効なコードですが、これは珍しいことです。

+0

非常にスティーブン、ありがとうございました。最初は、宣言されていない変数を使用していましたので、後でループ外の変数を宣言しようとしました。 static float friction = 2; ループ内で変数が見えないと思ったので、私は静的変数を使用しました。 – ALM

関連する問題