Формальные требования к выполнению задания 2

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

Специфика данного задания. Программа должна считывать исходные данные из файла и далее создавать необходимые для работы массивы в точности на используемое количество элементов, выделяя память с помощью функций типа malloc или оператора new. По окончании решения задачи эти ресурсы (пямять) должны освобождаться с помощью функций free или оператора delete. Не разрешается захватывать память ``с запасом'' на

Как правило (если в условии не указано иначе), вся работа должна происходить на базе единственного массива с исходными данными. Не разрешается создавать дополнительные рабочие массивы, длина которых зависит от количества исходных данных.

Хотя это и не требуется в обязательном порядке, по возможности следует реализовывать эффективные алгоритмы, сложность которых пропорциональна N или N log N, где N - количество чисел в массиве данных.

У каждой задаче должны быть подготовлены тесты, т.е. некоторое количество файлов с данными, на которых и будет проверяться работоспособность программы. Тестовые данные должны проверять базовые свойства реализации, т.е. решение задачи в корректном случае и реакции на некорректное состояние исходных данных. Перед сдачей задания преподавателю студент должен самостоятельно проверить свою программу на соответствующем наборе тестов. Можно предусмотреть ввод имени файла с данными в начале работы программы, чтобы иметь возможность быстро запускать тесты для разных заранее подготовленных данных.
FILE *fin;
char filename[256];
printf("data file name >");
sscanf("%s", filename);
fin = fopen(filename, "r");
...