Бонусные баллы
Учитель выяснил, что один из вопросов теста был сформулирован неправильно. Поэтому все получают 3 бонусных балла. Но больше 50 баллов не может быть ни у кого, потому что это максимум, который можно было набрать за тест.
На этот раз функция меняет данные. Поэтому вектор она получает по ссылке без const: std::vector<int>&. Тогда она работает с вектором из main() напрямую, и изменения остаются в нём после завершения функции. Меняйте элементы в цикле с индексом:
#include <iostream>
#include <vector>
void doubleAll(std::vector<int>& numbers) {
for (int i = 0; i < numbers.size(); i++) {
numbers[i] *= 2;
}
}
int main() {
std::vector<int> numbers = {1, 2, 3};
doubleAll(numbers);
std::cout << numbers[0] << " " << numbers[1] << " " << numbers[2] << std::endl;
return 0;
}2 4 6numbers[i] — это сам элемент вектора. В цикле for (int n : numbers) n была бы лишь копией элемента, и изменение не попало бы в вектор.
Частые ошибки:
- Без
&функция получает копию вектора. Она меняет копию, а в результатах по-прежнему старые баллы. - С
constкомпилятор не разрешает изменение:
main.cpp:54:19: error: cannot assign to return value because function 'operator[]' returns a const valueВызов пишется в main() над printResults(names, scores): сначала результаты меняются, потом выводятся. Если сделать наоборот, будут выведены старые результаты.
Задание
- 1
Под
printResults()(надmain()) напишите функциюvoid addPoints(std::vector<int>& scores, int bonus), которая в цикле прибавляетbonusк каждому элементуscores. - 2
В
main()над вызовомprintResults()добавьтеaddPoints(scores, 3);. У каждого ученика теперь на 3 балла больше, и результаты начинаются так:РЕЗУЛЬТАТЫ ТЕСТА Адам, баллы: 45, оценка A Эмма, баллы: 41, оценка BУ Адама ровно 45 баллов, поэтому у него A. Если у него B, проверьте, что в условии для A в
grade()стоит>=. Если результаты не изменились, в параметре не хватает&. У Тимура теперь 51 балл из 50. Это вы исправите на следующем шаге. - 3
Измените
addPoints(): если после прибавления у ученика больше 50 баллов, задайте ему результат50. Тогда результаты выглядят так:РЕЗУЛЬТАТЫ ТЕСТА Адам, баллы: 45, оценка A Эмма, баллы: 41, оценка B Тимур, баллы: 50, оценка A Павел, баллы: 17, оценка F Лиза, баллы: 30, оценка C Средний балл: 36.6 Лучший: Тимур (баллы: 50)Если у Лизы с 30 баллами получилась D, проверьте
>=в условии для C.