Ознакомиться с принципом работы со структурами на языке программирования С++.
ЗАДАНИЕ
Читая данные из файла и используя массив структур, решить следующую задачу. Дана ведомость абитуриентов, сдавших вступительные экзамены в университет. В каждой строке данной ведомости записана фамилия абитуриента, его постоянное местожительство и полученные им оценки по отдельным дисциплинам (например, физике, математике, литературе). Необходимо определить количество абитуриентов, проживающих в выбранном городе и сдавших экзамены со средним баллом не ниже 4, распечатать их фамилии в алфавитном порядке.
if ( unregister(List[i].city) == unregister(city) && List[i].average >= 4)
{
t = true;
break;
}
}
if (!t)
{
cout << "\nВ базе не найдено ни одной записи, удовлетворяющей условиям фильтра\n";
}
else
{
cout << "\nРезультат фильтрации (по городу: \"" << city << "\" и среднему баллу: \"не ниже 4\"):\n";
for (int i = 0; i < count; i++)
{
if ( unregister(List[i].city) == unregister(city) && List[i].average >= 4)
{
res[i] = true;
}
}
}
// Вывод фамилий в алфавитном порядке
string strtmp;
for (int i = -32; i <= -1; i++)
{
for (int k = 0; k < count; k++)
{
strtmp = unregister(List[k].surname);
if (strtmp[0] == i && res[k])
{
cout << List[k].surname << "\n";
res[k] = false;
}
}
}
// Проверка на выход
string answer = "";
cout << "\nЖелаете ввести другой город? (да - продолжить\; нет - закрыть программу)\n";
while (answer != unregister("Да") && answer != unregister("Нет"))
{
cin >> answer;
answer = from_DOS(answer);
}
if (answer == unregister("Нет"))
{
run = false;
t = false;
}
}
Input.close();
return 0;
}
РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ
Таблица 1
В файле найдено 16 записей.
Список абитуриентов:
Петров Москва 3 4 4
Миролюбов Вологда 4 4 4
Добролюбов Томск 5 4 4
Сидоров Донецк 3 4 4
Бородач Томск 3 4 5
Овербух Москва 5 4 5
Григорьев Томск 5 5 5
Безруков Омск 3 3 5
Сапожников Москва 5 5 5
Мартынов Омск 5 4 5
Железякин Тюмень 5 5 5
Обходимов Омск 3 4 3
Сыромятин Вологда 3 4 5
Коромыслов Томск 4 5 4
Игнатьев Омск 5 5 5
Соловецкий Москва 4 5 5
Введите город для фильтрации:
Москва
Результат фильтрации (по городу: "Москва" и среднему баллу: "не ниже 4"):
Овербух
Сапожников
Соловецкий
Желаете ввести другой город? (да - продолжить; нет - закрыть программу)
да
Введите город для фильтрации:
омск
Результат фильтрации (по городу: "омск" и среднему баллу: "не ниже 4"):
Игнатьев
Мартынов
Желаете ввести другой город? (да - продолжить; нет - закрыть программу)
Нет
ВЫВОД
Структуры в C++ - это множество объектов разного типа расположенных в памяти последовательно. Использование структур сильно улучшает читабельность кода, т.к. при их использовании явно прослеживается связь переменных.
В программе при поиске совпадений по названию города и при обработке команд выхода из программы реализован алгоритм сравнения строк без учёта регистра символов (функция unregister). Поиск по базе фамилий и вывод результатов выполняется столько раз, сколько потребует пользователь.
При выполнении лабораторной работы, самой сложной задачей оказалась реализация корректной обработки символьных данных при считывании кириллических символов с клавиатуры (при считывании с файла проблем не возникло). Эту задачу удалось решить, добавив обработку для считанной строки (функция from_DOS выполняет корректировку).