Простые задачи на
работу со структурами (элементарными классами)
Для простоты давайте разобьем задачу на две части:
А) Создание всего одного класса
(или структуры) CStudent с одним студентом и просто ввод/вывод данных одного студента. Т.е.
написание функций вида
int CStudent∷Input1(FILE *f);
int CStudent∷Output1(FILE *f);
+ тест на эту функцию. Там
надо будет создать всего одну структуру и вызвать две эти функции с проверкой
кода ошибки. И это просто!
Б) Создание полноценной
функции.
Это сведется к:
- отведению памяти. Это я
явно показал на лекции.
- вызову в цикле предыдущих
функций. Это тоже элементарно.
- решению задачи. Решение-то
во всех задачах простое и короткое! Если Вы так не считаете, то обсудите это с
преподавателем. Возможно, задачу удастся упростить.
Сдавать задачи надо по частям. Т.е. сначала
присылаете и сдаете первую часть, а потом – вторую.
В задачах не предполагается нахождение
какого-либо оптимального решения. Решение должно быть правильным, а на его
оптимальность можно не обращать внимания.
Формулировки всех задач во многом
неформальные (как в реальной жизни). Постарайтесь рассматривать задачи как
бытовые и стараться понимать их на этом уровне.
В некоторых задачах найти решение, в
точности удовлетворяющее условиям, невозможно или крайне сложно. Относитесь к
этому философски (в бытовом понимании этого слова J).
Ввод данных, решение задачи, вывод данных
должны быть оформлены в виде отдельных функций.
Во всех задачах Б должна быть корректная очистка памяти
в конце работы.
1.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Отсортировать полученные массив по возрастанию рейтинга студентов.
Вывести отсортированные данные по студентам в файл в том же формате, что и
исходный файл, отделив (с помощью какого-то разделителя) примерно 10% студентов
с максимальным и минимальным рейтингом.
2.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Отсортировать полученные массив по номеру группы и по имени студентов (т.е.
студенты одной группы должны идти подряд).
Вывести отсортированные данные по студентам в файл в том же формате, что и
исходный файл. Списки групп должны как-то отделяться.
3.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Для каждой записи s в массиве
найти все записи с бОльшим номером и с тем же именем
и номером группы, занести максимальный рейтинг студента изо всех этих записей в
запись s, уничтожить из массива все эти найденный записи.
Вывести все полученные данные по студентам в файл в том же формате, что и
исходный файл.
4.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Аналогичным образом создать файл с данными по отчисленным студентам, загрузить
их в массив, созданный также аналогичным образом. Уничтожить из массива всех
студентов исключенных студентов (т.е. студентов с тем же именем и тем же
номером группы).
Вывести данные по оставшимся студентам в файл в том же формате, что и исходный
файл.
5.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Аналогичным образом создать файл с данными по студентам, которых должны
отчислить, загрузить их в массив, созданный также аналогичным образом.
У студентов, которых должны отчислить рейтинг должен быть не больше некоторого R (его можно задать как
угодно). Проверить, значится ли студент, которого должны отчислить, в полном
списке студентов и то, что его рейтинг ≤ R.
Вывести данные по студентам с некорректными данными в файл в том же формате,
что и исходный файл.
6.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, целое с номером
школы, где учился студент, School. Для создания
массива указателей на структуры Student создать
переменную типа Student**. Записать в файл
соответствующие данные по студентам (по одному студенту в строке). Загрузить
указанные данные в указанный массив указателей на структуры (каждый указатель
указывает на данные по одному студенту).
Перераспределить студентов по группам, чтобы студенты из одной группы, по возможности, заканчивали разные
школы. Вариант решения: за один проход для каждого студента A если у него в
данной группе есть одношкольник, то ищем студента из
другой группы B, у
которого нет одношкольников из студентов группы студента
A, при этом в группе
студента B нет одношкольников студента A. Если студент B найден,
то меняем местами группы студентов A и B.
Вывести полученные данные по студентам в файл в том же формате, что и исходный
файл.
7.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, целое с номером
школы, где учился студент, School. Для создания
массива указателей на структуры Student создать
переменную типа Student**. Записать в файл
соответствующие данные по студентам (по одному студенту в строке). Загрузить
указанные данные в указанный массив указателей на структуры (каждый указатель
указывает на данные по одному студенту).
Перераспределить студентов по группам, чтобы студенты из одной группы, по возможности, заканчивали одинаковые
школы. Вариант решения: за один проход для каждого студента с индексом в
массиве i если у него в другой группе есть одношкольник
с индексом j>i,
то ищем студента из группы студента i с
индексом k>i,
закончившего другую школу. Если таковые студенты найдены, то меняем местами
группы студентов с индексами k и j.
Вывести полученные данные по студентам в файл в том же формате, что и исходный
файл.
8.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Занести всех студентов с максимальным рейтингом в одну группу (количество
студентов в группах не должно измениться). Вывести полученные данные по
студентам в файл в том же формате, что и исходный файл.
9.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Отчислить (удалить из массива) указанное количество процентов студентов с
минимальным рейтингом. Вариант решения: отсортировать студентов по убыванию
рейтинга и уменьшить длину массива, чтобы его длина уменьшилась примерно на
указанное количество процентов.
Вывести данные оставшихся студентов в файл в том же формате, что и исходный
файл.
10.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating, флаг (целое) IsElder.
Для создания массива указателей на структуры Student
создать переменную типа Student**. Записать в файл
соответствующие данные по студентам (по одному студенту в строке). Загрузить
указанные данные в указанный массив указателей на структуры (каждый указатель
указывает на данные по одному студенту).
Для каждой группы переназначить старосту. Критерий назначения: староста должен
иметь медианный рейтинг в группе.
Вывести данные по студентам в файл в том же формате, что и исходный файл.
11.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур.
Отсортировать полученные массив по возрастанию рейтинга студентов.
Вывести отсортированные данные по студентам в файл в том же формате, что и
исходный файл, отделив (с помощью какого-то разделителя) примерно 10% студентов
с максимальным и минимальным рейтингом.
12.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур.
Отсортировать полученные массив по номеру группы и по имени студентов (т.е.
студенты одной группы должны идти подряд).
Вывести отсортированные данные по студентам в файл в том же формате, что и
исходный файл. Списки групп должны как-то отделяться.
13.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур.
Для каждой записи s в массиве
найти все записи с бОльшим номером и с тем же именем
и номером группы, занести максимальный рейтинг студента изо всех этих записей в
запись s, уничтожить из массива все эти найденный записи.
Вывести все полученные данные по студентам в файл в том же формате, что и
исходный файл.
14.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур. Аналогичным образом создать файл с данными по отчисленным студентам,
загрузить их в массив, созданный также аналогичным образом.
Уничтожить из массива всех студентов исключенных студентов (т.е. студентов с
тем же именем и тем же номером группы).
Вывести данные по оставшимся студентам в файл в том же формате, что и исходный
файл.
15.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур. Аналогичным образом создать
файл с данными по студентам, которых должны отчислить, загрузить их в массив,
созданный также аналогичным образом.
У студентов, которых должны отчислить рейтинг должен быть не больше некоторого R (его можно задать как
угодно). Проверить, значится ли студент, которого должны отчислить, в полном
списке студентов и то, что его рейтинг ≤ R.
Вывести данные по студентам с некорректными данными в файл в том же формате,
что и исходный файл.
16.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, целое с номером
школы, где учился студент, School. Для создания
массива структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур.
Перераспределить студентов по группам, чтобы студенты из одной группы, по возможности, заканчивали разные
школы. Вариант решения: за один проход для каждого студента A если у него в
данной группе есть одношкольник, то ищем студента из другой
группы B, у которого
нет одношкольников из студентов группы студента A, при этом в группе студента
B нет
одношкольников студента A. Если студент B найден, то
меняем местами группы студентов A и B.
Вывести полученные данные по студентам в файл в том же формате, что и исходный
файл.
17.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, целое с номером
школы, где учился студент, School. Для создания
массива структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур.
Перераспределить студентов по группам, чтобы студенты из одной группы, по возможности, заканчивали одинаковые
школы. Вариант решения: за один проход для каждого студента с индексом в
массиве i если у него в другой группе есть одношкольник
с индексом j>i,
то ищем студента из группы студента i с
индексом k>i,
закончившего другую школу. Если таковые студенты найдены, то меняем местами группы
студентов с индексами k и j.
Вывести полученные данные по студентам в файл в том же формате, что и исходный
файл.
18.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур.
Занести всех студентов с максимальным рейтингом в одну группу (количество студентов
в группах не должно измениться).
Вывести полученные данные по студентам в файл в том же формате, что и исходный
файл.
19.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
структур Student создать переменную типа Student*. Записать в файл соответствующие данные по студентам
(по одному студенту в строке). Загрузить указанные данные в указанный массив
структур.
Отчислить (удалить из массива) указанное количество процентов студентов с
минимальным рейтингом. Вариант решения: отсортировать студентов по убыванию
рейтинга и уменьшить длину массива, чтобы его длина уменьшилась примерно на
указанное количество процентов.
Вывести данные оставшихся студентов в файл в том же формате, что и исходный
файл.
20.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating, флаг (целое) IsElder.
Для создания массива структур Student создать
переменную типа Student*. Записать в файл соответствующие
данные по студентам (по одному студенту в строке). Загрузить указанные данные в
указанный массив структур.
Для каждой группы переназначить старосту. Критерий назначения: староста должен
иметь медианный рейтинг в группе.
Вывести данные по студентам в файл в том же формате, что и исходный файл.
21.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Отсортировать полученные массив по возрастанию рейтинга студентов.
Вывести отсортированные данные по студентам в файл в том же формате, что и
исходный файл, отделив (с помощью какого-то разделителя) примерно 10% студентов
с максимальным и минимальным рейтингом.
22.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Отсортировать полученные массив по номеру группы и по имени студентов (т.е.
студенты одной группы должны идти подряд).
Вывести отсортированные данные по студентам в файл в том же формате, что и
исходный файл. Списки групп должны как-то отделяться.
23.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Для каждой записи s в массиве
найти все записи с бОльшим номером и с тем же именем
и номером группы, занести максимальный рейтинг студента изо всех этих записей в
запись s, уничтожить из массива все эти найденный записи.
Вывести все полученные данные по студентам в файл в том же формате, что и
исходный файл.
24.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту). Аналогичным образом создать файл с данными по отчисленным студентам,
загрузить их в массив, созданный также аналогичным образом.
Уничтожить из массива всех студентов исключенных студентов (т.е. студентов с
тем же именем и тем же номером группы).
Вывести данные по оставшимся студентам в файл в том же формате, что и исходный
файл.
25.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту). Аналогичным образом создать файл с данными по студентам, которых
должны отчислить, загрузить их в массив, созданный также аналогичным образом.
У студентов, которых должны отчислить рейтинг должен быть не больше некоторого R (его можно задать как
угодно). Проверить, значится ли студент, которого должны отчислить, в полном
списке студентов и то, что его рейтинг ≤ R.
Вывести данные по студентам с некорректными данными в файл в том же формате,
что и исходный файл.
26.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, целое с номером
школы, где учился студент, School. Для создания
массива указателей на структуры Student создать
переменную типа Student**. Записать в файл
соответствующие данные по студентам (по одному студенту в строке). Загрузить
указанные данные в указанный массив указателей на структуры (каждый указатель
указывает на данные по одному студенту).
Перераспределить студентов по группам, чтобы студенты из одной группы, по возможности, заканчивали разные
школы. Вариант решения: за один проход для каждого студента A если у него в
данной группе есть одношкольник, то ищем студента из
другой группы B, у
которого нет одношкольников из студентов группы
студента A, при этом в
группе студента B нет одношкольников студента A. Если студент B найден,
то меняем местами группы студентов A и B.
Вывести полученные данные по студентам в файл в том же формате, что и исходный
файл.
27.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, целое с номером
школы, где учился студент, School. Для создания
массива указателей на структуры Student создать
переменную типа Student**. Записать в файл
соответствующие данные по студентам (по одному студенту в строке). Загрузить
указанные данные в указанный массив указателей на структуры (каждый указатель
указывает на данные по одному студенту).
Перераспределить студентов по группам, чтобы студенты из одной группы, по возможности, заканчивали одинаковые
школы. Вариант решения: за один проход для каждого студента с индексом в
массиве i если у него в другой группе есть одношкольник
с индексом j>i,
то ищем студента из группы студента i с
индексом k>i,
закончившего другую школу. Если таковые студенты найдены, то меняем местами
группы студентов с индексами k и j.
Вывести полученные данные по студентам в файл в том же формате, что и исходный файл.
28.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Занести всех студентов с максимальным рейтингом в одну группу (количество
студентов в группах не должно измениться).
Вывести полученные данные по студентам в файл в том же формате, что и исходный
файл.
29.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating. Для создания массива
указателей на структуры Student создать переменную типа Student**. Записать в файл соответствующие данные по
студентам (по одному студенту в строке). Загрузить указанные данные в указанный
массив указателей на структуры (каждый указатель указывает на данные по одному
студенту).
Отчислить (удалить из массива) указанное количество процентов студентов с
минимальным рейтингом. Вариант решения: отсортировать студентов по убыванию
рейтинга и уменьшить длину массива, чтобы его длина уменьшилась примерно на
указанное количество процентов.
Вывести данные оставшихся студентов в файл в том же формате, что и исходный
файл.
30.
Создать тип данных структура Student, содержащую поля: строка Name, целое Group, вещественное Rating, флаг (целое) IsElder.
Для создания массива указателей на структуры Student создать переменную типа Student**. Записать в
файл соответствующие данные по студентам (по одному студенту в строке).
Загрузить указанные данные в указанный массив указателей на структуры (каждый
указатель указывает на данные по одному студенту).
Для каждой группы переназначить старосту. Критерий назначения: староста должен
иметь медианный рейтинг в группе.
Вывести данные по студентам в файл в том же формате, что и исходный файл.