0

私は iOS プログラミング/目的の c を初めて使用します。反復試行錯誤の計算を実行しようとしていますが、立ち往生しています。通常、このコードは Excel VBA で機能するため、obj C でこの問題を解決する方法がわかりません。

- (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 のままです。ループが機能していないため、試行錯誤がうまくいきません。これをオブジェクティブ C でどのように記述すべきかを確認するための助けが必要です。助けてくれてありがとう、ALM。

4

2 に答える 2

1

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

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

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

あなたはおそらく言いたい:

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

また、あなたの外部宣言は である必要がありますstaticか? つまり、その値はメソッドの呼び出し間で保持されます。これは有効なコードですが、見慣れないコードです。

于 2012-02-13T11:08:07.653 に答える
1

ブロック スコープに注意してください。あなたの内側differenceは外側に影を落としているので、float.

また、慣例のヒントとして、クラスの大文字の識別子はそのままにしておきます。

于 2012-02-13T11:05:53.630 に答える