Треб-я к л.р. №1 (2018, 2-й семестр). Тема Потоковый форматированный вводвывод (текстовый файлконсоль). Работа с одномерным массивом числовых данных. Динамическое распределение памяти, адресная арифметика.
Скачать 23.83 Kb.
|
Л.р. №1: Си++, задание №6 из сборника (первый вариант – с текстовым файлом): Тема: «Потоковый форматированный ввод/вывод (текстовый файл/консоль). Работа с одномерным массивом числовых данных. Динамическое распределение памяти, адресная арифметика.» Исходные данные (последовательность чисел) должны загружаться из текстового файла с помощью потока. При запуске программы у пользователя запрашивается имя файла с клавиатуры. Результат открытия файлового потока должен проверяться. При неуспешном открытии потока имя файла должно запрашиваться повторно. Память под хранение элементов массива должна выделяться динамически с помощью оператора new (освобождаться – с помощью delete), размер выделяемой памяти должен определяться программой автоматически по содержимому файла (а не задаваться фиксированным или вводиться пользователем с клавиатуры). Результат выделения памяти должен проверяться. При неуспешном выделении памяти должно выводиться соответствующее сообщение. Подсчет количества числовых значений в файле должен быть совмещен с проверкой их корректности. Если хотя бы одно числовое значение задано некорректно (содержит недопустимые символы; содержит допустимые символы, но некоторые из них находятся не на своих местах; число выходит за границы диапазона значений выбранного для него типа данных), то дальнейший подсчет количества значений, выделение памяти, загрузка и обработка массива не производятся, а вместо этого пользователю выдается информативное сообщение, указывающее порядковый номер некорректного значения. Дополнительно пользователю можно выводить (в кавычках) всю последовательность символов, задающую некорректное значение. Порядковый номер некорректного значения должен правильно определяться для различных видов возможных ошибок, допускаемых при задании числового значения в файле. При подсчете количества числовых значений в файле программа должна корректно обрабатывать ситуации, связанные с возможным наличием в файле «лишних» пробельных символов-разделителей (пробел, табуляция, переход на новую строку). Они могут находиться в любом месте файла и в любом количестве, при этом они не должны влиять на правильность подсчета количества числовых значений и на правильность выявления наличия некорректных значений. Вывод результатов на экран – форматированный. Если выводится массив, то в первой строке – порядковые номера элементов, а строго под ними – значения соответствующих элементов; в начале строки с номерами – слово «Номера:», в начале строки с элементами – слово «Элементы:». В любом месте программы продемонстрировать применение адресной арифметики для обращения к элементам массива. Работа программы должна начинаться с очистки окна консоли. В программе должны присутствовать все необходимые подписи, приглашения к вводу и подсказки для пользователя, выводимые на русском языке. Работа программы должна завершаться по нажатию пользователем любой клавиши. На оценку «4»: Допускаются некоторые недочеты по выявлению некорректных значений в файле и нежелательная чувствительность программы к наличию «лишних» пробельных символов-разделителей в некоторых местах файла. Можно не выводить последовательность символов, задающую некорректное значение. На оценку «3»: Не обязательно реализовывать проверку корректности загружаемых из файла данных и выводить соответствующее сообщение об ошибке. Вопросы для самоподготовки: стандартные потоки ввода/вывода и средства работы с ними (операторы, функции-члены, манипуляторы, флаги, форматированный вывод в поток); средства и правила работы с файловыми потоками; принцип подсчета количества значений, представляющих собой элементы одномерного массива, в текстовом файле; основные понятия, особенности, средства и правила работы с динамической памятью (преимущества и недостатки по сравнению с другими видами памяти, адреса, указатели, new, delete, адресная арифметика); + вопросы по теме лаб. работы из большого списка Некоторые источники (в дополнение к конспекту лекций): Указатели и динамическое распределение памяти: Прата С. Язык программирования С++. Лекции и упражнения, 6-е изд. : Пер. с англ. — М.: ООО "И.Д. Вильямс". 2012. - 1248 с. Глава 4. Составные типы Указатели и свободное хранилище (стр. 166) Указатели, массивы и арифметика указателей (стр. 179) Глава 9. Модели памяти и пространства имен Схемы хранения и динамическое выделение памяти (стр. 457) Глава 15. Друзья, исключения и многое другое Исключение bad_alloc и операция new (стр. 841) Нулевой указатель и операция new (стр. 842) Шилдт Г. С++: базовый курс, 3-е издание. : Пер. с англ. — М. : Издательский дом "Вильямс", 2010. — 624 с. Глава 6. Указатели (стр. 123) Глава 17. Обработка исключительных ситуаций Обработка исключений, сгенерированных оператором new (стр. 430) Глава 9. Еще о типах данных и операторах Динамическое распределение памяти с использованием операторов new и delete (стр. 228) Лафоре P. Объектно-ориентированное программирование в С++. Классика Computer Science. 4-е изд. — СПб.: Питер, 2003. — 928 с. Глава 10. Указатели (стр. 411) Потоковый ввод/вывод в С++: Прата С. Язык программирования С++. Лекции и упражнения, 6-е изд. : Пер. с англ. — М.: ООО "И.Д. Вильямс". 2012. — 1248 с. Глава 17. Ввод, вывод и файлы Шилдт Г. С++: базовый курс, 3-е издание. : Пер. с англ. — М.: Издательский дом "Вильямс", 2010. — 624 с. Глава 18. С++-система ввода-вывода Липпман С., Лажойе Ж., My Б. Язык программирования С++. Базовый курс, 5-е изд. : Пер. с англ. — М.: ООО "И.Д. Вильямс", 2014. — 1120 с. Глава 8. Библиотека ввода-вывода Лафоре P. Объектно-ориентированное программирование в С++. Классика Computer Science. 4-е изд. — СПб.: Питер, 2003. — 928 с. Глава 12. Потоки и файлы + справочная система |