Лучший результат
Кто лучше всех написал тест? Как найти наибольшее значение в векторе, вы знаете из урока о циклах: запомнить первый элемент, а в цикле проверять, нет ли среди остальных большего. Но на этот раз знать наибольший результат мало. Учитель хочет знать, кто это, а имя лежит в другом векторе. Поэтому запоминайте индекс лучшего ученика. По нему можно получить и имя, и результат:
std::vector<std::string> athletes = {"Аня", "Борис", "Алиса"};
std::vector<int> jumps = {412, 455, 430};
int longest = 0;
for (int i = 1; i < jumps.size(); i++) {
if (jumps[i] > jumps[longest]) {
longest = i;
}
}
std::cout << "Самый длинный прыжок: " << athletes[longest] << ", " << jumps[longest] << " см" << std::endl;Самый длинный прыжок: Борис, 455 смПеременная longest начинается с 0, то есть с первого элемента, поэтому цикл можно начинать с индекса 1. Сравнение через > (а не >=) означает, что при равенстве побеждает тот, кто стоит в векторе раньше.
Оформите это в функцию bestStudent(), которая возвращает индекс. Частая ошибка — вернуть наибольший результат вместо индекса. Тогда names[48] — это элемент далеко за концом вектора, в котором всего 5 элементов, и программа выводит что попало или аварийно завершается.
В printResults() индекс нужен дважды: для имени и для результата. Поэтому сохраните его в переменной, например int index = bestStudent(scores);, и функция вызывается только один раз.
Задание
- 1
Над
printResults()напишите функциюint bestStudent(const std::vector<int>& scores), которая возвращает индекс элемента с наибольшим результатом. - 2
В
printResults()под средним баллом выведите имя и результат лучшего ученика:Лучший: Тимур (баллы: 48)