§ 17. Массивы и структуры как параметры функций
17.4. Массивы структур. Поиск в массиве структур
Пример 17.8. В текстовом файле input.txt хранится информация о студентах. Для каждого студента указана его фамилия, город, из которого он приехал (название города — одно слово), и три числа — баллы за ЦТ, с которыми он поступил в ВУЗ. Посчитать количество студентов, у которых сумма баллов больше x (вводится с клавиатуры). Вывести в текстовый файл с именем otchet.txt фамилии и суммарный балл студентов из указанного города (вводится с клавиатуры). Этапы выполнения задания I. Исходные данные: структура student с полями fam, gorod, otm (массив из трех элементов). Данные считываются в массив структур. II. Результат: список студентов из указанного города в файле и количество студентов с суммарным баллом, большим x, на экране. Если поиск не дал результата, то вывод соответствующего сообщения. III. Алгоритм решения задачи. 1. Ввод исходных данных с помощью функции vvod. В структуру добавим поле summa, в которое будем записывать суммарный балл для каждого студента при считывании данных. 2.1. Функция для поиска по баллам find_ball возвращает в качестве результата число студентов. Если функция вернула значение 0, то таких студентов нет. 3. После вызова каждой функции проверим, был ли поиск успешным, и выведем соответствующее сообщение. IV. Описание переменных: n – int, a – vector<student>. Передача параметров по ссылке позволяет переслать большие структуры или массивы с минимальной затратой ресурсов. Однако здесь также могут возникнуть другие проблемы. Ссылки позволяют функции изменять значения аргументов напрямую. Однако это может быть нежелательно, если нужно, чтобы аргумент был доступен только для чтения. В таком случае можно использовать передачу параметра по константной ссылке. Константная ссылка — ссылка на переменную, значение которой невозможно изменить через эту же ссылку. Для того чтобы ссылка была константной, нужно добавить перед описанием ключевое слово const. Если использовать константную ссылку в качестве параметра функции, то функция не изменит аргумент. При попытке это сделать получим ошибку компиляции (пример 17.9). |
Пример 17.8. V. Программа:
VI. Тестирование Пример 17.9. Программа: |