Работа №2

Вариант 1: Работа с динамическим массивом

Необходимо написать программу, которая позволяет работать с динамическим массивом ВЕЩЕСТВЕННЫХ чисел с помощью меню, в котором есть следующие пункты:

1. Задать размер массива

2. Заполнить массив

3. Вывести содержимое массива на экран

4. Выйти


Операция 1 позволяет выделить новую память для массива. При повторном вызове данного пункта меню, в случае если массив уже был заполнен, заполненные ранее значения (если они есть) необходимо сохранить. Если размер массива увеличился (элементов в массиве стало больше чем было), то добавленные элементы необходимо заполнить нулями. Выделение памяти под массив нового размера необходимо оформить в виде отдельной функции.

Операция 2 позволяет заполнить массив значениями. Значения необходимо спросить у пользователя. Если при выборе пункта 2 размер массива ещё не задан – необходимо выполнить всё то, что требуется при выборе пункта 1.

Обратите внимание, что поскольку число элементов массива изначально неизвестно, то объявить его придётся в виде указателя, например, вот так:

double *a;

Для того чтобы работать массивом, который объявлен подобным образом (просто как указатель, это даже не массив в общем-то), вам потребуется использовать динамическое выделение памяти внутри некоторой функции, причём так, чтобы выделенная в ней память не потерялась, а объявленный на массив указатель нужным образом изменился. Для того чтобы сделать это, вы можете выбрать один из двух путей:

1. Передать в функцию указатель на имеющийся указатель на массив и работать внутри функции с двойным указателем

2. вернуть из функции указатель на выделенную область памяти и присвоить его текущему указателю на массив.

Обратите внимание, что программа должна работать до тех пор, пока пользователь не решит её закрыть. Каждое следующее действие, которое пользователь желает выполнить, должно выполняться над массивом в том состоянии, в котором он оказался после выполнения предыдущего действия.


Вариант 2: Простейшее хранилище информации о студентах

Необходимо написать программу, которая позволяет хранить информацию о студентах, о каждом из которых известно следующее:

- фамилия

- группа

- массив с названиями курсов, по которым у студента есть долги.

Программа должна предусматривать работу с меню, в котором есть следующие пункты:

1. Добавить студента

2. Удалить студента

3. Добавить долг

4. Удалить долг

5. Увидеть всех студентов

6. Выйти


Информацию обо всех студентах необходимо хранить в массиве.

Максимальный размер массива следует задать с помощью define-константы.

При добавлении студента необходимо спросить у пользователя фамилию и название группы студента. Удалять студента можно так как вам больше нравится, главное, чтобы у пользователя была возможность удалить конкретного студента хоть каким-то способом.

Информацию о долгах каждого отдельного студента следует хранить в динамическом массиве, размер которого необходимо увеличивать на 1 при добавлении нового долга и уменьшать на 1 при удалении долга (и при том и при другом действии не забывать очищать память). Как именно добавлять или удалять долг с точки зрения интерфейса – решайте сами, важно чтобы пользователь имел возможность удалить или добавить конкретный долг конкретному студенту.

Обратите внимание, что поскольку информация о долгах будет храниться в динамической памяти, при удалении из основного массива следует не забыть очистить память, занятую его информацией о долгах, если таковые были. Удаление же самого студента из массива студентов физически невозможно (массив студентов по заданию динамическим не является), поэтому удалить студента – значит как-то сделать так, чтобы система информацию о нём просто не выводила, но при этом позволяла добавлять новых студентов если для них есть место в исходном массиве.

Если указывать в качестве долгов названия предметов окажется сложным, то имена можно заменить на целые числа, однако сам массив с ними обязан быть динамическим.

Время на выполнение – 2 недели