2017-05-03 8 views
1

2つの配列(文字列と値を含む配列)を含むプロジェクトが与えられ、映画と年を使用することに決めました。プロジェクトのパラメータの1つは、文字列とともに最大値と最小値を表示することです。さて、maxは正常に動作しますが、minを実行しようとすると、初期化されていません。私は間違って何をしていますか?インデックス作成の問題関数を使用した配列からの最小値

#include <iostream> 
#include <string> 
using namespace std; 

int avgYear(int arr[], int size); 
int indexMin(int arr[], int size); 
int indexMax(int arr[], int size); 

int main() 
{ 
    int total = 0; 

    string name[] = {"Toy Story", "A Bug's Life", "Toy Story 2", "Monster's Inc.", "Finding Nemo", "The Incredibles", "Cars", "Ratatouille", "WALL-E", "Up"}; 
    int year[] = { 1995, 1998, 1999, 2001, 2003, 2004, 2006, 2007, 2008, 2009}; 
    for (int x = 0; x < 10; x++) 
     cout << name[x] << "  " << year[x] << endl; 

    cout << "The average year of release was " << avgYear(year, 10) << endl; 
    cout << "The First Year of Release was " << name[indexMin(year, 10)] << " in " << year[indexMin(year, 10)] << endl; 
    cout << "The Last Year of Release was "<< name[indexMax(year, 10)] << " in " << year[indexMax(year, 10)] << endl; 


    return 0; 
} 

int avgYear(int arr[], int size) 
{ 
    int avg; 
    int total=0; 
    for (int x = 0; x < size; x++) 
     total += arr[x]; 
    avg = total/size; 

    return avg; 
} 

int indexMin(int arr[], int size) 
{ 
    int iMin; 
    int min = arr[0]; 
    for (int x = 1; x < size; x++) 
     if (arr[x] < min) 
     { 
      min = arr[0]; 
      iMin = x; 
     } 
    return iMin; 
} 

int indexMax(int arr[], int size) 
{ 
    int iMax; 
    int max = arr[0]; 
    for (int x = 0; x < size; x++) 
     if (arr[x] > max) 
     { 
      max = arr[x]; 
      iMax = x; 
     } 
    return iMax; 
} 

答えて

0

if (arr[x] < min)を返すことはありませんので、最小値は、その後iMinが今までarr[0]初期化されませんされている場合。 あなたの最大の機能も同じ問題を持っていますが、最大の要素はインデックス0あなたの問題を修正する必要があります

int iMin = 0; 

ではないので、動作します。また、への習慣を開発することをお勧めします。常に変数とフィールドを初期化してください。初期化されていない変数に格納されている値は、不確定です、reading from it is undefined behaviourです。

+0

ありがとう、本当にありがとうございます。私は数時間このプロジェクトを見てきました。また、理由を説明してくれてありがとう、本当に役に立ちました! – Rebeckah

0

あなたはこのように年を初期化する場合:。

int year[] = { 2009, 2008, 2007, 2006, 2004, 2003, 2001, 1999, 1998, 1995}; 

し、その後、分作業罰金、とmaxは誤りです^ _^

あなたはIMINとIMAX、および初期を初期化する必要があります番号は次のようにarrインデックスと同じにする必要があります。

// min 
int nStartIndex = 0; 
int iMin = nStartIndex; 
int min = arr[nStartIndex]; 
// max 
int nStartIndex = 0; 
int iMax = nStartIndex; 
int max = arr[nStartIndex]; 
関連する問題