Ошибочный метод расчета в C++

Я прохожу курс C++ для начинающих, и сейчас я борюсь с заданием. Задание было:

В конкретном конкурсе талантов участвуют 5 судей, каждый из которых присуждает балл от 0 до 10 каждому исполнителю. Напишите программу, которая использует эти правила для вычисления и отображения результатов участника. Он должен включать в себя следующие функции:

• int getJudgeData() должна запрашивать у пользователя оценку судьи, сохранять ее в переменной ссылочного параметра и проверять ее. Эта функция должна быть вызвана main один раз для каждого из 5 судей.

• double calcScore() должна вычислять и возвращать среднее из 3 оценок, оставшихся после отбрасывания самой высокой и самой низкой оценок, полученных исполнителем. Эта функция должна быть вызвана main только один раз и должна пройти 5 баллов.

Две дополнительные функции, описанные ниже, должны быть вызваны функцией calcScore, которая использует возвращенную информацию, чтобы определить, какие оценки следует отбросить.

• int findLowest() должна найти и вернуть наименьшую из 5 переданных ей оценок.

• int findHighest() должна находить и возвращать наивысшую из 5 переданных ей оценок.

При тестировании моей программы она работает правильно, если оценка первого судьи является самой низкой, но теперь она будет работать правильно для любых других судей, имеющих самую низкую оценку.

Ex: I will enter 2,1,5,4,3 so it should drop the 1 & 5 and come out with the avg of 3 but the result is 2.6667

код, который у меня есть для int findLowest():

int findLowest(int scoreOne,int scoreTwo,int scoreThree,int scoreFour,int scoreFive)
{
    int lowest = scoreOne;
    if ( scoreTwo < lowest )
        lowest = scoreTwo;
    if ( scoreThree < lowest )
        lowest = scoreThree;
    if ( scoreFour < lowest )
        lowest = scoreFour;
    if ( scoreFive < lowest )
        lowest = scoreFive;

    return lowest;
}

int findHighest аналогичен, но очевидно, что символы меньше чем переключаются.

для функции calcAverage() у меня есть:

double calcAverage(double OneScore,double twoScore,double threeScore, double fourScore,double fiveScore)
{
    double lowest, highest, sum;

    lowest=findLowest(OneScore,twoScore,threeScore,fourScore,fiveScore);
    highest=findHighest(OneScore,twoScore,threeScore,fourScore,fiveScore);

    sum = (OneScore + twoScore + threeScore + fourScore + fiveScore);
    sum = sum - lowest;
    sum = sum - highest;
    sum = sum / 3;

    cout<<"\nAfter droping highest and lowest scores\n";
    cout<<"Your average score is "<<sum << endl;

return 0;
}

EDIT: я поместил операторы cout в функции findHighest и findLowest, чтобы проверить правильность определяемого числа, и каждый раз, когда он выбирает правильное наибольшее число, а для наименьшего оно будет иметь 0

РЕДАКТИРОВАТЬ ВТОРОЕ: я обнаружил, что программа присваивает баллу от 1 значение 0 независимо от того, что вводится. Программа принимает правильный ввод для других оценок.


person Brendon    schedule 11.11.2014    source источник
comment
Вы можете себе представить, если бы было 100 судей или даже 20 судей? После ввода всего этого кода вам понадобится новая клавиатура. Подсказка: изучите массивы.   -  person PaulMcKenzie    schedule 11.11.2014
comment
@PaulMcKenzie, спасибо за предложение. Нам еще предстоит изучить массивы в этом курсе, поэтому профессор не хотел, чтобы мы использовали их здесь.   -  person Brendon    schedule 11.11.2014
comment
Я вижу упражнение, в котором есть 3 судьи, и вас просят кодировать такие вещи. Но все, что выше 3, становится розыгрышем, если вам говорят делать что-то таким образом. То, как это делается с › 3 элементами, всегда (я даже не буду говорить почти всегда) использует массив или какой-либо агрегатный тип.   -  person PaulMcKenzie    schedule 11.11.2014
comment
Я полагаю, что это то, что мы собирались рассмотреть далее, поэтому, возможно, мы снова получим то же задание, но с увеличенным количеством судей и профессором, ищущим массивы для использования.   -  person Brendon    schedule 11.11.2014
comment
Тут какая-то путаница с типами. Все должно быть ints, пока вы не вычислите среднее значение, почему все double?   -  person Barry    schedule 11.11.2014
comment
@ Барри, ты прав, все должно быть int, а не double, и я поменял их местами в своей программе, но это не решило проблему.   -  person Brendon    schedule 11.11.2014


Ответы (1)


После беглого просмотра код, который у вас есть, должен работать. Запустите его еще раз и убедитесь, что каждый оператор if соответствует тому, что вы хотите сделать. Если это не сработает, вы можете попробовать другой способ:

double lowest = oneScore;

if (twoScore < lowest)
    lowest = twoScore;
if(threeScore < lowest)
    lowest = threeScore;

etc...

Ваша функция calcAverage(), вероятно, дает сбой только из-за самых низких() и самых высоких() функций.

EDIT: если вы изучили массивы, используйте его для объявления массива оценок, а затем используйте цикл for для итерации, как намекает Пол в своем комментарии

person Peter    schedule 11.11.2014
comment
Это на самом деле то, что у меня было сначала, и все еще был тот же результат. Программа вычисляет правильное среднее значение, если судья имеет самый низкий балл, но в любом другом случае она не работает правильно. - person Brendon; 11.11.2014
comment
@ user3363195 - Трудно поверить, что ваш код был таким же, как и в ответе. Убедитесь, что между этими проверками не было else, так как это точно не сработает. - person PaulMcKenzie; 11.11.2014
comment
@user3363195 user3363195 - Пожалуйста, посмотрите код здесь. ideone.com/kTSiwu Возьмите этот код и расскажите нам, чем он отличается от вашего. Это работает отлично. - person PaulMcKenzie; 11.11.2014
comment
@PaulMcKenzie Я обнаружил, что проблема не в функции findLowest. По какой-то причине программа устанавливает счет один на 0 независимо от того, что введено. Он принимает правильный ввод для других оценок, но не набирает один - person Brendon; 11.11.2014