Поздравляем!
Поздравляем: ваша программа работает, и вы дошли до конца курса по C++! Она выводит результат и оценку каждого ученика, считает средний балл, находит лучшего ученика, добавляет бонус за неудачный вопрос и исправляет результат по имени. И всё это вы написали сами.
Последнее улучшение. Учитель хочет сразу видеть, сколько учеников не справились с тестом. Добавьте в конец результатов строку с количеством оценок F. Это подсчёт с условием, из урока о циклах: счётчик начинается с 0, цикл проходит по результатам всех учеников, и каждый раз, когда grade() возвращает 'F', счётчик растёт на 1.
Чему вы научились. Посмотрите, как каждая часть курса нашла своё место в вашей программе:
- Переменные и арифметика хранят сумму результатов и счётчик. В среднем балле есть дробная часть, потому что вы складывали в переменной
double. - Условия определяют оценку (
else ifв правильном порядке), не дают результатам превысить 50 и проверяют, найден ли ученик. - Векторы хранят имена и результаты. То, что относится друг к другу, имеет один и тот же индекс.
- Циклы проходят по ученикам, чтобы вывести их, сложить результаты, найти лучшего, найти ученика по имени (с
break) и посчитать оценки F. - Функции делят программу на части с понятными задачами:
grade(),average()иbestStudent()вычисляют и возвращают результат,addPoints()иfixScore()меняют данные, аprintResults()выводит. - Ссылки передают векторы без копирования. С
constфункция их только читает, безconst— может менять. - Строки (
std::string) — это имена учеников, и вы сравниваете их через==. - А когда что-то не получалось, сообщения об ошибках компилятора подсказывали, что не так и в какой строке. Всегда стоит исправлять сначала первую из них.
Указатели в проекте не понадобились: для параметров функций ссылки проще и безопаснее. Но вы встретите указатели в чужом коде и в библиотеках, а когда дойдёте до динамической памяти, они вам понадобятся.
C++ на вашем компьютере. Здесь программы компилирует и запускает ваш браузер. На собственном компьютере есть несколько вариантов:
- Онлайн-компилятор не требует установки. Например, на onlinegdb.com выберите язык C++, вставьте программу и запустите её кнопкой Run. Ввод с клавиатуры там тоже работает.
- Windows: установите бесплатную Visual Studio Community и во время установки выберите набор компонентов Desktop development with C++. Затем создайте новый проект Console App, замените пример кода своей программой и запустите её сочетанием
Ctrl+F5. Visual Studio Code — это другая программа: всего лишь редактор, для которого компилятор нужно устанавливать отдельно. - macOS: в Терминале установите инструменты командой
xcode-select --install(Xcode Command Line Tools). Сохраните программу какmain.cpp, перейдите в её папку в Терминале командойcdи скомпилируйте её:clang++ main.cpp -o main. Получится программа с именемmain, которую вы запускаете командой./main. - Linux: установите компилятор g++, например в Ubuntu командой
sudo apt install g++. Затем скомпилируйте программу командойg++ main.cpp -o mainи запустите её командой./main.
Часть -o main задаёт имя готовой программы. После каждого изменения кода его нужно компилировать заново, иначе вы запустите старую версию. Здесь, на сайте, это за вас делала кнопка «Запустить». Если компилятор на Mac сообщает об ошибках или предупреждениях из-за новых возможностей C++, добавьте -std=c++17: команда clang++ -std=c++17 main.cpp -o main использует ту же версию языка, что и этот сайт.
Что дальше. Теперь вы знаете основы, из которых состоит любая программа на C++. Вот несколько идей, что изучать дальше:
- Ввод от пользователя. На вашем компьютере работает
std::cin:std::cin >> score;ждёт, пока пользователь введёт число и нажмёт Enter, и сохраняет его в переменной. (Здесь, в браузере, вводить некому, поэтому это не работает.) Тогда учитель мог бы сам вводить результаты. - Структуры и классы. Вместо двух векторов, которые нужно держать в одном порядке, можно создать собственный тип через
struct, напримерstruct Student { std::string name; int score; };, и положить всех учеников в одинstd::vector<Student>. Классы (class) добавляют к данным собственные функции. std::map. Он хранит значения под ключами: сstd::map<std::string, int>результат задаётся по имени, напримерscores["Лиза"] = 35;, и цикл для поиска ученика не нужен.- Файлы. Библиотека
<fstream>умеет читать данные из файла и записывать их в файл, чтобы результаты не пропадали, когда программа завершается. - Алгоритмы. В библиотеке
<algorithm>есть готовые функции для того, что вы писали циклами:std::sortсортирует вектор,std::max_elementнаходит наибольший элемент, аstd::findищет. Теперь вы знаете, как они работают внутри. - Свои проекты и соревнования. Игра «Угадай число», викторина, крестики-нолики во вложенном векторе. Больше всего учишься, когда решаешь собственные задачи. C++ очень популярен и на соревнованиях по программированию, например на олимпиадах по информатике, которые во многих странах проводят для школьников.
А если захотите попробовать другой язык, вас ждут курсы Python и JavaScript.
Задание
- 1
В конце
printResults()под строкой с лучшим учеником добавьте строку с количеством учеников, не справившихся с тестом. Счётчик начинается с0, а цикл увеличивает его на 1 для каждого ученика, у которогоgrade()возвращает'F'. В нашем классе такой один:Не сдали: 1 - 2
Проверьте, что число после
"Не сдали: "выводится из переменной-счётчика, а не вписано прямо в код. Только тогда программа правильно посчитает и для другого класса.