2014-02-17 4 views
1

저는 C++을 처음 접했고 C#, Python 및 JS에서만 경험할 수있었습니다.배열의 최고/최저 요소를 찾는 데 문제가 발생했습니다.

사용자 입력을 5 점으로 취하여 배열에 저장하려고합니다. 배열을 전달하고 배열의 점수를 평가하여 가장 낮은 값과 가장 높은 값을 찾습니다. 나는 그 둘을 떨어 뜨리고 다른 세 가지 값의 평균을 찾아야합니다. 내 문제는 최고/최저 값을 찾지 못했기 때문입니다. 나는 findLowest()와 findHighest()에서 로직을 가지고 있지만 테스트하기 위해 main()에 동일한 로직을 넣었다. 누군가 나를 배열의 최고/최저 값을 찾는 데 안내 할 수 있습니까? 감사!

#include "stdafx.h" 
#include <iostream> 
#include <cmath> 
#include <iomanip> 
#include <algorithm> 

using namespace std; 

void getJudgeData(double score) 
{ 
    cin >> score; 
    if (score > 10 || score < 0) 
    { 
     cout << "Invalid score, please enter again." << endl; 
     cin >> score; 
    } 
    else 
    { 
    cout << "Thank you." << endl; 
    } 
} 

double findLowest(double scores[]) 
{ 
    double lowScore = *min_element(scores, scores+5); 

    return lowScore; 
} 

double findHighest(double scores[]) 
{ 
    double highScore = *max_element(scores, scores+5); 

    return highScore; 
} 
double calcScore(double scores[]) 
{ 
    double finalScore; 
    double sum = 0; 
    double newScore[3] = {}; 

    double lowScore = findLowest(scores); 
    double highScore = findHighest(scores); 
    int j = 0; 
    for (int i=0; i < 5; i++) 
    { 
     if (scores[i] != lowScore && scores[i] != highScore) 
     { 
      scores[i] = newScore[j]; 
      j++; 
     } 
    } 
    for (int k=0; k < 3; k++) 
    { 
     sum = sum + newScore[k]; 
    } 
    finalScore = sum/3; 
    return finalScore; 
}  

int main()   
{ 
    double finalScore; 
    double judgeScores[5] = {}; 
    for (int i = 0; i < 5; ++i) 
    { 
     cout << "Enter judge " << i + 1 << "'s score: "; 
     getJudgeData(judgeScores[i]); 
    } 
    finalScore = calcScore(judgeScores); 
    cout << "Highest score is: " << *max_element(judgeScores, judgeScores+5) << endl; 
    cout << "The final score is: " << finalScore << endl; 

    // This prevents the Console Window from closing during debug mode 
    cin.ignore(cin.rdbuf()->in_avail()); 
    cout << "\nPress only the 'Enter' key to exit program: "; 
    cin.get(); 

    return 0; 
} 
+1

, 당신은 누군가가 같은 점수를 여러 번 박았 경우 몇 가지 문제를 가지고가는 될 일이 가장 높은 또는 가장 낮은 점수. –

+0

벡터를 사용하여 벡터 정렬을 시도하고 최고 및 최저 요소 (첫 번째 및 마지막)를 제거합니다. :-) –

답변

6

getJudgeData는 값 double score 소요하기 때문이다. 결과적으로 최종 사용자의 항목은 getJudgeData 기능으로 제한됩니다. 함수에 전달한 judgeScores[i] 변수는 변경되지 않습니다.

이 문제를 해결하기 위해 앰퍼샌드를 추가
void getJudgeData(double &score) { 
    ... 
} 

이제 매개 변수는 getJudgeData 그것에 수정을시키는, 참조에 의해 전달된다.

2

calcScore()에 할당을 바꾼 경우를 제외하면 대부분의 논리가 정상인 것으로 보입니다. 당신은이 :

scores[i] = newScore[j]; 

당신은 아마 의미 : 또한

newScore[j] = scores[i]; 

, 조심해야 : 당신의 입력 배열은 최소 또는 최대 동일한 여러 점수가 포함되어있는 경우, 당신은 제거 후 3 개 미만이 남아있을 것이다 그들.

편집 : 오, 그래, 다른 사람들이 getJudgeData()를 참조하여 값을 전달 대해 말했다 또한 무엇.

+0

위대한 포인트. 동일한 점수를 얻으려면 어떻게해야합니까? – jacksonSD

+1

당신은 그것들을 제거하고'newScore'에 복사하는 실제 항목 수를 추적 할 수 있습니다 (그리고 3을 가정하는 대신 그 수를 사용합니다; 당신의 경우'j'는 복사 된 항목의 수를 남겨 둡니다) 0 개 항목 남음 처리 중]) 또는 중복 된 항목을 남기고 가장 낮은 항목과 가장 높은 항목 중 하나만 제거하도록 선택할 수 있습니다 (항상 3을 남깁니다). 어떻게 행동 하느냐에 따라 당신에게 달려 있습니다. –

4

변경

void getJudgeData(double score) 

다른 모든 것들 외에도

void getJudgeData(double &score) 
관련 문제