Треб-я к л.р. №2 (2018, 2-й семестр). Тема Потоковый вводвывод при работе с консолью и с двоичными файлами. Организация меню и зацикленной через него работы программы. Работа с одномерным массивом числовых данных. Динамическое распределение памяти.
Скачать 20.57 Kb.
|
Л.р. №2: Си++, задание №6 из сборника (второй вариант – с двоичным файлом): Тема: «Потоковый ввод/вывод при работе с консолью и с двоичными файлами. Организация меню и зацикленной через него работы программы. Работа с одномерным массивом числовых данных. Динамическое распределение памяти.» В программе циклически осуществляется вывод запроса пользователю на выбор действия и выполнение выбранного действия. Доступные действия: «1. Создать файл с исходными данными», «2. Загрузить исходные данные», «3. Вывести исходные данные», «4. Обработать данные», «5. Завершить работу с программой». Каждое действие выбирается пользователем путем однократного нажатия на соответствующую цифровую клавишу. При выборе действия «1» у пользователя запрашивается: имя двоичного файла, в который будет сохраняться задаваемый пользователем массив; кол-во элементов массива; значения самих элементов. Результат открытия файлового потока должен проверяться. В случае ошибки, имя файла должно запрашиваться повторно. Также необходимо проверять на существование по указанному пути файла с указанным именем и, в случае его наличия, выдавать пользователю запрос на перезапись этого файла. Такую проверку можно реализовать средствами потока. Корректность вводимых пользователем числовых значений количества элементов и самих элементов должна проверяться. В случае некорректности, соответствующее значение должно запрашиваться повторно. Имя файла можно запрашивать в последнюю очередь. Это позволит (при дополнительной программной реализации такой возможности) пользователю отказаться от записи данных в файл, но при этом сформированный массив останется в памяти и будет доступен для дальнейшей обработки. При выборе действия «2» у пользователя должен запрашиваться ввод с клавиатуры имени двоичного файла, из которого будут загружаться элементы массива. Результат открытия файлового потока должен проверяться. При неуспешном открытии потока имя файла должно запрашиваться повторно. При успешной загрузке данных, исходный массив должен сразу выводиться на экран. Должны присутствовать простейшие проверки целостности данных, загружаемых из файла. Память под хранение элементов массива должна выделяться динамически с помощью оператора new (освобождаться – с помощью delete), размер выделяемой памяти должен определяться программой автоматически по содержимому файла (а не вводиться пользователем с клавиатуры). Результат выделения памяти должен проверяться. При неуспешном выделении должно выводиться соответствующее сообщение. Вывод результатов на экран – форматированный. Если выводится массив, то в первой строке – порядковые номера элементов, а строго под ними – значения соответствующих элементов; в начале строки с номерами – слово «Номера:», в начале строки с элементами – слово «Элементы:». При выборе действия «3» выполняется вывод ранее созданного (в результате выполнения действия «1») или загруженного из файла в память (в результате выполнения действия «2») исходного массива на экран. При выборе действия «4» выполняется обработка ранее созданного или загруженного из файла в память исходного массива и вывод результатов обработки на экран. Выбор пользователем действий «3» и «4» никогда не должен приводить к возникновению необработанных ошибок. Повторное выполнение действий «1» и «2» не должно приводить к утечке памяти. Для возврата к выбору следующего действия (т.е. в меню) после выполнения действий «1-4» должно ожидаться нажатие пользователем любой клавиши с выводом соответствующей подсказки. Меню всегда должно выводиться в чистом окне консоли. После выбора пользователем нужного действия (пункта меню) консоль также должна очищаться. В любом месте программы продемонстрировать применение адресной арифметики для обращения к элементам массива. При выборе действия «5» работа программы завершается. В программе должны присутствовать все необходимые подписи, приглашения к вводу и подсказки для пользователя на русском языке. Если по Вашему варианту задания №6 дано 2 исходных массива, то в целях упрощения задачи можно свести условие задачи к одному массиву. Например: «заменить в первом массиве все отрицательные элементы на максимальный элемент из второго» → «заменить в массиве все отрицательные элементы на максимальный». На оценку «4»: Не обязательно выполнять одно из следующих требований: проверка корректности числовых значений, вводимых с клавиатуры, в пункте «1»; проверка наличия файла с указанным именем и выдача запроса на перезапись существующего файла в пункте «1»; проверки целостности данных, загружаемых из файла, в пункте «2». На оценку «3»: Не обязательно выполнять все требования, перечисленные выше для оценки «4». Вопросы для самоподготовки: принципы организации зацикленной работы программы с предоставлением пользователю возможности выбора очередного действия (меню); способы организации ввода с клавиатуры числовых значений с проверкой их корректности и повторным вводом в случае ошибок; средства файловых потоков для работы с двоичными файлами: открытие, чтение, запись; назначение флага ios::binary; суть трансляции символов, условия ее возникновения; на что она влияет и на что не влияет; каким образом это влияние можно преодолеть. + вопросы по теме лаб. работы из большого списка Некоторые источники (в дополнение к конспекту лекций): Прата С. Язык программирования С++. Лекции и упражнения, 6-е изд. : Пер. с англ. — М.: ООО "И.Д. Вильямс". 2012. - 1248 с. Глава 17. Ввод, вывод и файлы (стр. 967) Файловый ввод и вывод Режимы файла Бинарные файлы (стр. 1027) Произвольный доступ (стр. 1032) Лафоре P. Объектно-ориентированное программирование в С++. Классика Computer Science. 4-е изд. — СПб.: Питер, 2003. — 928 с. Глава 12. Потоки и файлы Двоичный ввод/вывод (стр. 557) + справочная система |