
Технология программирования / ИТ / Лаб_ИТ_Числовой массив
.docЛабораторная работа
«Обработка числовых данных»
Задача. Во входном текстовом файле хранится числовой массив объёмом до 1 млн. значений. Сами значения являются целыми положительными и не превосходят 1000. Возможны повторяющиеся значения. В выходной текстовый файл нужно вывести эти числа в порядке возрастания.
Структура входного файла: первая строка в файле показывает длину числового массива (от 1 до 1000000). Далее идет указанное количество числовых значений от 1 до 1000 каждое по одному числу в строке.
Решение должно быть выполнено в виде консольного приложения, результаты выведены в текстовый файл. Время работы программы не должно превышать 2 сек.
Пример входного файла |
Пример выходного файла |
5 999 100 7 400 7 |
7 7 100 400 999 |
Консольное приложение
Консольное приложение не имеет окна и работает только с файлами. При необходимости диалога с пользователем используются стандартные файлы ввода-вывода. В нашей задаче для ввода и вывода будут использованы только внешние файлы.
Создание консольного приложения в Delphi:
File New Other Console Application
Проект для консольного приложения состоит только из файлов *.dpr, *.cfg и *.dof. Файлы модулей и форм отсутствуют, программа пишется в главном файле проекта.
Работа с файлами
В разделе uses, где перечислены подключаемые к проекту библиотеки, нужно добавить StdCtrls.
Объявление файловой переменной в разделе var
имя_файловой_перем : textfile;
Связывание файловой переменной с файлом на диске
assignFile(имя_файловой_перем, ‘путь к файлу’);
Открытие файла для чтения Reset(имя_файловой_перем);
Открытие файла для записи Reset(имя_файловой_перем);
Закрытие файла closeFile(имя_файловой_перем);
Чтение из файла без перевода строки
Read (имя_файловой_перем, имя_вводимой_перем);
Чтение из файла с переводом строки
ReadLn (имя_файловой_перем, имя_вводимой_перем);
Запись в файл без перевода строки
Write (имя_файловой_перем, имя_выводимой_перем);
Запись в файл с переводом строки
WriteLn (имя_файловой_перем, имя_выводимой_перем);
Пример: вывод в текстовый файл чисел от 1 до 100 по одному в строке. Путь к файлу состоит только из имени файла, значит, файл будет расположен в той же папке, что и выполняемый проект.
Подготовка тестовых примеров
Прежде, чем программа будет написана, подумаем, как мы будем проверять ее правильность, иными словами, разработаем схему тестирования и подготовим набор файлов с тестовыми примерами. Для этого нам потребуется написать программу создания таких файлов.
Исходя из принципов тестирования программ, нужно подготовить тесты на различные ситуации, включая граничные варианты входных данных.
Один тест должен содержать минимальный набор данных – длина массива равна двум, числа в массиве различны (например, 500 и 200).
Следующий тест может содержать небольшой числовой массив (5 – 10 элементов), обязательно включающий граничные значения 1 и 1000. Среди них должны быть повторяющиеся значения.
И, наконец, необходим тест, содержащий максимальное количество входных данных, для проверки, выполнено ли ограничение по времени. Данные в этом тесте могут быть любыми, сравнивать миллион результатов мы не будем. Вводить такой массив вручную мы тоже не будем, напишем программу вывода в файл нужного числа значений.
Обратите внимание, что мы проектируем тесты исключительно по спецификациям, а не по тексту программы (программы ещё нет!). Возможно, что после программирования придётся добавить какие-то тесты для проверки всех ветвей программы.
Задания
-
Подготовьте вручную (например, с помощью Блокнота) три тестовых примера – минимальный, два небольших с различными вариантами.
-
Разработайте программу, которая создаёт большой тестовый пример на 1000000 значений.
-
Разработайте программу для решения основной задачи, предусмотрев вывод результатов на консоль для проверки.
-
Протестируйте программу на всех подготовленных примерах, убедитесь в правильности результатов. Продолжайте отладку до тех пор, пока все результаты не будут верными.