Как различать оценки между именами с помощью функций

Я пытаюсь создать программу голосования по типу шоу талантов, используя функции.

Я большинство из этого выяснил. Программа предложит вам ввести имя, а затем пять баллов, если вы введете «Готово», а не имя, оно закроется. Я использую функции для большей части кода, чтобы практиковаться с ними.

Моя большая проблема в том, что может быть бесконечное количество имен (столько, сколько вводит пользователь), и я не знаю, как сложить все 5 баллов за имя, я не знаю, как их различать. 5 баллов будут усреднены, и победителем станет человек с наибольшим средним значением (3 балла, сбросив 2).

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

Я много исследовал это, но я не смог найти ни одного примера, достаточно похожего на мой (возможно, с бесконечным количеством участников).

Вот мой код, функция внизу — это то, как я возился с функциями, чтобы разобраться с ними и посмотреть, смогу ли я получить какие-либо суммы баллов от имени.

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

void validCheck();
void calcAvgScore();
void findHigh();
void findLow();int main(){
int judge = 1;
double score = 0;
string name;while (name != "done" || name != "Done"){
cout << "Enter Contestant Name, if no more, type 'done': ";
cin >> name;
if (name == "done" || name == "Done"){ break; }
for (judge = 1; judge < 6; judge++){
cout << "Enter score " << judge << " ";
validCheck();
}
}system("pause");
return 0;}void validCheck(){
double score;
cin >> score;
if (score < 1 || score > 10){
cout << "Please Enter a score between 1 and 10: ";
cin >> score;
}
}

void calcAvgCheck(){
double score = 0, value = 0;
static int average;

score += value
}

1

Решение

Объявите строку «winner», удвойте «win_avg», удвойте «avg» вне цикла while.

Ваш validCheck () возвращает двойное значение, заданное как input (именованный счет).

Объявите двойной массив перед вашим циклом for (double [5] scores). Сохраните каждое значение, возвращаемое validCheck () в массив).

Вызовите std :: sort (std :: begin (баллы), std :: end (баллы)), чтобы отсортировать ваши оценки по возрастанию. Найдите среднее значение (игнорируя максимальное и минимальное) и удерживайте максимальное среднее, а также имена человека с максимальным средним.

#include <algorithm>    // std::sort
...
double validCheck();
...

int main(){
string name;
string winner;
double win_avg;
double avg;

while (name != "done" || name != "Done"){
cout << "Enter Contestant Name, if no more, type 'done': ";
cin >> name;
double scores[5];
if (name == "done" || name == "Done"){ break; }
for (int judge = 0; judge < 5; ++judge){
cout << "Enter score " << judge << " ";
scores[judge] = validCheck();
}
std::sort(std::begin(scores), std::end(scores));
for(int score = 1; score < 4; ++score)
avg += scores[score];
avg /= 3;
if(avg > win_avg) {
winner = name;
win_avg = avg;
}
avg = 0;
}
std::cout << "Winner is: " << winner << "\n";
}double validCheck(){
double score;
cin >> score;
if (score < 1 || score > 10){
cout << "Please Enter a score between 1 and 10: ";
cin >> score;
}
return score;
}

Если вы хотите найти среднее значение в функции и вернуть значение, вы можете сделать это

double calcAvgCheck(const double& scores[5]) {
double avg = 0.0;
for(int score = 1; score < 4; ++score)
avg += scores[score];
avg /= 3;
return avg;
}
0

Другие решения


По вопросам рекламы [email protected]