#c
#c
Вопрос:
Я пишу код для задачи на C , связанной с соревнованиями по дайвингу. Мой код компилируется и запрашивает у пользователя 5 баллов от 1 до 10. Он также учитывает сложность погружения в диапазоне 1-1,67 и вычисляет общий балл для каждого дайвера и среднее значение для каждого дайвера.
У меня возникли проблемы с выделением наивысшего и наименьшего баллов в цикле, в который только накапливается оценка totalScore
, поэтому я не могу провести сравнение, потому что у меня нет ( score1
, score2
, score3
, score4
score5
, ,,,). Вместо этого все значения сохраняются в totalScore
, и я не уверен, как сравнить каждый ввод с самым высоким и самым низким по мере их ввода, потому что я использую цикл.
Есть ли какой-либо способ сделать это внутри моего цикла или другим способом?
Я уже пытался использовать оператор if-else, который сравнивает каждый балл с текущим max / min, но все мои результаты сохраняются в одной переменной. Я попытался установить для моего входного балла длинный оператор if-else, но если ввод равен (5,7,6,8,9), то при первой обработке 5 в цикле он сохраняется до «наивысшего балла», потому что логически это в настоящее время наивысший балл, но когда я запускаю следующее число в цикле, оно заменит 5, потому что логически 7 больше 5, а 5 не вводится в lowestscore
, потому что цикл уже запущен, и 7 заменил 5.
for (numJudges = 1; numJudges < 6; numJudges ) //Input score from 5 Judges
{
cout << "Enter the score given by Judge #" << numJudges << ": ";
cin >> inputScore;
while (inputScore < 0 || inputScore > 10) // Validate if the input score is between 0-10
{
cout << "Invalid score - Please reenter (Valid Range: 0 - 10)" << endl;
cout << "Enter the score given by Judge #" << numJudges << ": ";
cin >> inputScore;
}
totalScore = inputScore;//Add score to total
}
cout << "What was the degree of difficulty? "; //Input degree of difficulty
cin >> diveDifficulty;
while (1 > diveDifficulty || diveDifficulty > 1.67) // Validate degree of difficulty
{
cout << "Invalid degree of difficulty - Please reenter (Valid Range: 1 - 1.67)n";
cout << "What was the degree of difficulty? ";
cin >> diveDifficulty;
}
diverTotal = totalScore - highScore - lowScore;
overallScore = (diverTotal / 3) * diveDifficulty;
totalScore = saveTotal;
Например, ввод:
Судья 1: 8, Судья 2: 8, Судья 3: 8, судья 4: 7, судья 5: 9,
Сложность погружения: 1
Общий балл должен быть просто 8, если добавить только 8 и отбросить 7 и 9, затем разделить на 3 оставшихся балла и умножить на 1; однако всякий раз, когда я использую оператор сравнения if-else (в разделе ‘// добавить балл к итогу’), он некорректно сравнивает текущий ввод с текущим высоким / низким результатом. Я не уверен, возможно ли вообще иметь только одну входную переменную, в которой хранятся все результаты. Я думаю, что мне нужно использовать цикл внутри цикла, но я не уверен, как это настроить.
Комментарии:
1.
std::minmax_element
должно быть полезно.
Ответ №1:
int max = 0
Когда пользователь вводит число или судья выводит оценку, просто сравните это число с максимальным. Если число больше max, тогда max = результат.
Продолжая делать это, вы гарантированно получите максимальное значение в конце вашего цикла ввода.
Та же концепция применяется в течение минуты. Просто нужно int min = INT_MAX
Ответ №2:
Что вам нужно сделать, это отслеживать минимальное и максимальное значение во время цикла, когда вы получаете входные данные.
// Initialize these before the first loop...
double highScore = 0.0;
double lowScore = 10.0;
...
...
while (inputScore < 0 || inputScore > 10) // Validate if the input score is between 0-10
{
cout << "Invalid score - Please reenter (Valid Range: 0 - 10)" << endl;
cout << "Enter the score given by Judge #" << numJudges << ": ";
cin >> inputScore;
}
highScore = std::max(inputScore, highScore);
lowScore = std::min(inputScore, lowScore);
totalScore = inputScore;
...
Комментарии:
1. Большое спасибо за ответ. Я попробовал это, и это работает для некоторых случаев и по какой-то причине не работает для других. Я ввожу (3,4.5,6.7,8,9.2) степень сложности = 1,2 для первого цикла, и я получаю правильный ответ, который равен 7,68, когда я ввожу второй цикл (5.7,6.8,7.6,8.7,6.7) степень сложности = 1.1, я получаю 8.54 вместо 7.74. Как ни странно, если я введу номера моего второго цикла при первом запуске цикла, то оба будут правильными после 2 циклов. Это так близко, как я получил до сих пор, поэтому я действительно ценю этот ответ.
2. @Addy Странно, если я введу номера моего второго цикла — Вероятно, вы забыли сбросить переменные, которые управляют наименьшим и наибольшим значениями, в их начальные состояния во втором цикле?
3. Спасибо, Пол. Я сделал то, что вы сказали, и теперь моя программа работает безупречно.