-2

ブール変数から作成された配列のすべてのメンバーをチェックし、最初の「真の」値が見つかったときに終了するループを持つ関数を作成しようとしています。

それが私が今持っているものです:

    bool solids[50];
    int a,i;

//"equality" is a function that checks the equality between "a" and a defined value
solids[0] = equality(a,&value_1); 
solids[1] = equality(a,&value_1);
solids[2] = equality(a,&value_1);
solids[3] = equality(a,&value_1);

for (i = 0; solids[i] != true; i++)
{

[...]

}

しかし、ループに何を入れる必要があるのか​​ わかりません。

私の試みは

for (i = 0; i <= 50; i++)
{
    if (solids[i] == true)
    {
    return true;
    break;
    } else {
    return false;
    }
}

true最初に true が見つかった後に戻りfalse、配列にtrue値を持つメンバーがない場合に戻る必要がありますが、コードでは機能しないようです。

違いますか?はいの場合、何が問題ですか?

PS .:trueカウンタを使用して s の数を数えることはできますが、これは問題の最適な解決策ではありません。最初の値を探すだけなのでtrue、プログラムは 50 個のメンバーすべてをチェックする必要がないからです。数える必要はありませんが、これが解決する必要がある不要なステップの数は何を意味するのでしょうか。

4

3 に答える 3

0

ソリッドを正しく設定したら (現在、すべての値を同じものに設定しているようです)、次のように最初の true で終了するループを作成できます。

for (i = 0; i < 50; i++)
{
    if (solids[i] == true)
    {
        return true;
    } 
}
return false;

また、宣言は外部では使用されないためiforループ本体に移動するだけですが、上記はあなたの質問に答えます。

于 2013-06-09T19:31:24.020 に答える
0

returnbreakすぐに関数を終了するため、後でループする必要はありません。

検索の直後に関数を終了するだけで十分な場合は、次のように記述します。

for (int i = 0; i < 50; i++) {
  if (solids[i]) return true;
}
return false;

同じ関数で検索結果を使用する必要がある場合は、追加の変数を使用します。

bool found = false;
for (int = 0; i < 50; i++) {
  if (solids[i]) {
    bool = true;
    break;
  }
}

if (found) { ...
于 2013-06-09T19:32:18.987 に答える