2017-06-22 6 views
-2

私は、配列内の最大値を求める関数を記述しようとしています作業マックス配列値の関数などC++:ソート、max_elementのような関数に建てられた任意のC++を使用せずに、不適切

私はこれを開発しました以下のコードは、それが最終的には、「最大値」を決定しないが、それは常に正しいではありません。

double dispMax(int farray[], int maxValue) 
{ 

    int max = farray[0]; 

    for (int x = 0; x < maxValue; x++) //maxValue is size of farray 
    { 

     if (farray[x] > max) 
     { 

      max = farray[x]; 
      return max; 

     } 

    } 

} 

farray []はソートされていない、とのデータ型(例えば(123.25、234.3のリストだけで構成されています、345.12))。

アレイ全体で繰り返し処理しないようなことがあります。ほとんどの場合、最大値とみなされるものを見つけた場合と同じように、すぐにその値を返します。

また、最小値を見つけるために関数を調整すると、最小値のALMOSTと似た結果が得られますが、それほどではありません。

大変助かりました!

+1

「maxValueはfarrayのサイズです。とにかく、デバッガで簡単に把握できます。 – juanchopanza

+1

'return max'をループの外に置きます。それで全部です。 – skypjack

+1

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。少なくとも、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、デバッガでの観察結果を含めるように質問を編集する必要があります。 –

答えて

1

リターンは間違った場所

Suposeアレイはそう最大1 2 3

= 1です。

そしてそれが第2の値のため

farrayになったとき[1] = 2が1より大きくなるように戻す(?)

ループは、すべてトラバースさせ、forループ外のリターンを入れ配列

double dispMax(int farray[], int maxValue) 
{ 
    // need to be double 
    double max = farray[0]; 
    for (int x = 0; x < maxValue; x++) //maxValue is size of farray 
    { 
     if (farray[x] > max) 
     { 
      max = farray[x];  
     } 
    } 
    return max; 
} 
関連する問題