2017-10-14 13 views
-1

クラスと関数を使用してmaxとminを配列で取得するコードを記述しようとしていました。配列の最大値と最小値

#include "Header.h" 

    int MaxMin::MaxArray(int Numbers[5]) 
    { 
     for (int i = 0; i < 5; i++) 
     { 
      Numbers[i]; 
      if (Numbers[i] > MaxNum) 
       MaxNum = Numbers[i]; 
     } 
     return MaxNum; 
    } 

    int MaxMin::MinArray(int Numbers[5]) 
     { 
    for (int i = 0; i < 5; i++) 
    { 
    Numbers[i]; 
    if (Numbers[i] < MinNum) 
     MinNum = Numbers[i]; 
    } 
    return MinNum; 
    } 

、ここではmain.cppに

#include "Header.h" 
    #include <iostream> 

    using namespace std; 

    void main() 
    { 
     MaxMin N; 
     int Numb[5]; 
     int choice; 
     for (int i = 0; i < 5; i++) 
     { 
      cout << "Enter the array Number " << i << " :"; 
      cin >> Numb[i]; 
      cout << endl; 
     } 
     cout << "Your max Number is : " << N.MaxArray(Numb) << endl; 
     cout << "Your Min Number is : " << N.MinArray(Numb) << endl; 

     system("Pause"); 
    } 

最大数がうまく働いているが、最小数の結果が0でした!

+0

[すでに範囲の最小値と最大値を取得するには、標準ライブラリ内の関数が存在する](http://en.cppreference.com/w/cpp/algorithm/ minmax_element)。どうしたの? –

+0

現在のコードをどのように解決するかについては、[小さなプログラムをデバッグする方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を読むのに時間を取ることをお勧めします。 )をEric Lippertによって行い、デバッガを使用してコードを1行ずつ進める方法を学びます。 –

+0

また、「MinNum」と「MaxNum」とは何ですか?どのように初期化されますか(問題は初期化と関係があります) [最小、**完全**、および検証可能な例](http://stackoverflow.com/help/mcve)はどこですか?そして、あなたが「Numbers [i]」という声明はどう思いますか? –

答えて

1

問題は、検索を開始する前にデフォルトの最大値/最小値を設定していないことです。これは0から始まることを意味します。正の数のみを持つと仮定すると、おそらく最大では動作しますが、最小では失敗します(ネガの逆、正と負の両方で失敗します)。

これを解決するには2つの方法があります。 1は元の値を最小(最大)または最大(最小)の許容値に設定するか、最初の値に設定します。

ので:

int MaxMin::MaxArray(int Numbers[5]) 
{ 
    MaxNum = Numbers[0]; 
    for (int i = 1; i < 5; i++) 
    { 
     if (Numbers[i] > MaxNum) 
      MaxNum = Numbers[i]; 
    } 
    return MaxNum; 
} 

int MaxMin::MinArray(int Numbers[5]) 
{ 
    MinNum = Numbers[0]; 
    for (int i = 1; i < 5; i++) 
    { 
    if (Numbers[i] < MinNum) 
     MinNum = Numbers[i]; 
    } 
    return MinNum; 
}