Простые задачи на работу со структурами

 

  Для простоты давайте разобьем задачу на две части:

 

А) Создание всего одной структуры с одним студентом и просто ввод/вывод данных одного студента. Т.е. написание функций вида

int Input1(FILE *f, SStudent *s);

int Output1(FILE *f, SStudent *s);

 

+ тест на эту ф-цию. Там надо будет создать всего одну структуру и вызвать две эти функции с проверкой кода ошибки. И это просто!

 

Б) Создание полноценной функции.

Это сведется к:

- отведению памяти. Это я явно показал на лекции.

- вызову в цикле предыдущих функций. Это тоже элементарно.

- решению задачи. Решение-то во всех задачах простое и короткое! Если Вы так не считаете, то обсудите это с преподавателем. Возможно, задачу удастся упростить.

 

  Сдавать задачи надо по частям. Т.е. сначала присылаете и сдаете первую часть, а потом – вторую.

 

  В задачах не предполагается нахождение какого-либо оптимального решения. Решение должно быть правильным, а на его оптимальность можно не обращать внимания.

   Формулировки всех задач во многом неформальные (как в реальной жизни). Постарайтесь рассматривать задачи как бытовые и стараться понимать их на этом уровне.

   В некоторых задачах найти решение, в точности удовлетворяющее условиям, невозможно или крайне сложно. Относитесь к этому философски (в бытовом понимании этого слова 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**. Записать в файл соответствующие данные по студентам (по одному студенту в строке). Загрузить указанные данные в указанный массив указателей на структуры (каждый указатель указывает на данные по одному студенту).
Для каждой группы переназначить старосту. Критерий назначения: староста должен иметь медианный рейтинг в группе.
Вывести данные по студентам в файл в том же формате, что и исходный файл.