2015-04-12 6 views
1

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

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

Моя большая проблема заключается в том, что может быть бесконечное количество имен (столько, сколько пользователь входит), и я не знаю, как добавить все 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 
} 

ответ

0

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

У вас есть validCheck() вернуть двойное значение, указанное в качестве ввода (с именем score).

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

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

#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

Спасибо, это помогло, но одна вещь, чтобы быть уверенным, при попытке для запуска этой версии (с несколькими изменениями) «баллы» и сортировка не определены, что бы вы определили их как? Я пробовал несколько вещей без успеха –