Главная страница
Навигация по странице:

  • В этом же запросе

  • Треб-я к л.р. №1 (2022, 2-й семестр). Тема Потоковый форматированный вводвывод (текстовый файлконсоль). Работа с одномерным массивом числовых данных. Динамическое распределение памяти, адресная арифметика.


    Скачать 26.17 Kb.
    НазваниеТема Потоковый форматированный вводвывод (текстовый файлконсоль). Работа с одномерным массивом числовых данных. Динамическое распределение памяти, адресная арифметика.
    Дата08.03.2022
    Размер26.17 Kb.
    Формат файлаdocx
    Имя файлаТреб-я к л.р. №1 (2022, 2-й семестр).docx
    ТипСборник
    #386792

    Л.р. №1: Си++, задание №6 из сборника (работа с текстовым файлом):
    Тема: «Потоковый форматированный ввод/вывод (текстовый файл/консоль). Работа с одномерным массивом числовых данных. Динамическое распределение памяти, адресная арифметика.»
    Исходные данные (последовательность чисел) должны загружаться из текстового файла с помощью файлового потока. При запуске программы у пользователя запрашивается ввод с клавиатуры имени открываемого файла. В этом же запросе пользователю предоставляется возможность ввести символ ‘*’ для завершения работы программы. Результат открытия файлового потока должен проверяться. При неуспешном открытии файлового потока должно выводиться информативное сообщение об ошибке, включающее имя открываемого файла (выводится в двойных кавычках), системный код ошибки (можно получить с помощью макроса errno), также желательно выводить системное сообщение об ошибке (ф-ция perror).

    Память под хранение элементов массива должна выделяться динамически с помощью оператора new (освобождаться – с помощью delete), размер выделяемой памяти должен определяться программой автоматически по содержимому файла (а не задаваться фиксированным или вводиться пользователем с клавиатуры). Результат выделения памяти должен проверяться. При неуспешном выделении памяти должно выводиться соответствующее сообщение об ошибке. Необходимо реализовать 2 способа применения операции new, обнаружения и обработки ошибки выделения памяти: первый — с nothrow, второй — без nothrow.

    Подсчет количества числовых значений в файле должен быть совмещен с проверкой их корректности. Если хотя бы одно числовое значение задано некорректно (содержит недопустимые символы; содержит допустимые символы, но некоторые из них находятся не на своих местах (нарушение формата числа); число выходит за границы диапазона значений выбранного для него типа данных), то дальнейший подсчет количества значений, выделение памяти, загрузка и обработка массива не производятся, а вместо этого пользователю выдается информативное сообщение, указывающее порядковый номер некорректного значения. Дополнительно пользователю можно выводить (в двойных кавычках) всю последовательность символов, задающую это некорректное значение, и абсолютную позицию в файле первого символа этой последовательности. Порядковый номер некорректного значения должен правильно определяться для различных видов возможных ошибок, допускаемых пользователем при задании числового значения в файле. При подсчете количества числовых значений в файле программа должна корректно обрабатывать ситуации, связанные с возможным наличием в файле «лишних» пробельных символов-разделителей (пробел, табуляция, переход на новую строку). Они могут находиться в любом месте файла и в любом количестве, при этом они не должны влиять на правильность подсчета количества числовых значений и на правильность выявления наличия некорректных значений. Реализовать 2 способа решения этой задачи (задачи подсчета количества чисел в файле и проверки их корректности): первый — с применением средств только файлового потока, второй — с применением дополнительного строкового потока ([i]stringstream).

    Вывод исходного массива и результатов его обработки на экран д.б. форматированный. Если выводится массив, то в первой строке – порядковые номера элементов, а строго под ними – значения соответствующих элементов; в начале строки с номерами – слово «Номера:», в начале строки с элементами – слово «Элементы:».

    В любом месте программы продемонстрировать применение адресной арифметики для обращения к элементам массива.

    Работа программы должна начинаться с очистки окна консоли. В программе должны присутствовать все необходимые подписи, приглашения к вводу и подсказки для пользователя, выводимые на русском языке. Вся работа программы (как успешная, так и в случае любых ошибок) должна быть зациклена через запрос имени файла (или ‘*’) и должна завершаться при вводе ‘*’.
    На оценку «4»: При решении задачи подсчета количества чисел в файле и проверки их корректности первым способом, допускаются некоторые недочеты по выявлению некорректных значений в файле и нежелательная чувствительность программы к наличию «лишних» пробельных символов-разделителей в некоторых местах файла. Можно не выводить последовательность символов, задающую некорректное значение.
    На оценку «3»: При решении задачи подсчета количества чисел в файле и проверки их корректности можно ограничиться только вторым способом. При реализации динамического выделения памяти с помощью операции new можно ограничиться только одним способом ее применения.
    Вопросы для самоподготовки:

    • стандартные потоки ввода/вывода и средства работы с ними (операторы, функции-члены, манипуляторы, флаги, форматированный вывод в поток);

    • средства и правила работы с файловыми потоками;

    • принцип подсчета количества значений, представляющих собой элементы одномерного массива, в текстовом файле, и проверки их корректности: первым и вторым способом;

    • основные понятия, особенности, средства и правила работы с динамической памятью (преимущества и недостатки по сравнению с другими видами памяти, адреса, указатели, new, delete, адресная арифметика);


    + вопросы по теме данной лаб. работы из большого списка
    Некоторые источники (в дополнение к конспекту лекций и видеозаписям):

    Указатели и динамическое распределение памяти:

    1. Прата С. Язык программирования С++. Лекции и упражнения, 6-е изд. : Пер. с англ. — М.: ООО "И.Д. Вильямс". 2012. - 1248 с.

    Глава 4. Составные типы

    Указатели и свободное хранилище (стр. 166)

    Указатели, массивы и арифметика указателей (стр. 179)

    Глава 9. Модели памяти и пространства имен

    Схемы хранения и динамическое выделение памяти (стр. 457)

    Глава 15. Друзья, исключения и многое другое

    Исключение bad_alloc и операция new (стр. 841)

    Нулевой указатель и операция new (стр. 842)

    1. Шилдт Г. С++: базовый курс, 3-е издание. : Пер. с англ. — М. : Издательский дом "Вильямс", 2010. — 624 с.

    Глава 6. Указатели (стр. 123)

    Глава 17. Обработка исключительных ситуаций

    Обработка исключений, сгенерированных оператором new (стр. 430)

    Глава 9. Еще о типах данных и операторах

    Динамическое распределение памяти с использованием операторов new и delete (стр. 228)

    1. Лафоре P. Объектно-ориентированное программирование в С++. Классика Computer Science. 4-е изд. — СПб.: Питер, 2003. — 928 с.

    Глава 10. Указатели (стр. 411)
    Потоковый ввод/вывод в С++:

    1. Прата С. Язык программирования С++. Лекции и упражнения, 6-е изд. : Пер. с англ. — М.: ООО "И.Д. Вильямс". 2012. — 1248 с.

    Глава 17. Ввод, вывод и файлы

    1. Шилдт Г. С++: базовый курс, 3-е издание. : Пер. с англ. — М.: Издательский дом "Вильямс", 2010. — 624 с.

    Глава 18. С++-система ввода-вывода

    1. Липпман С., Лажойе Ж., My Б. Язык программирования С++. Базовый курс, 5-е изд. : Пер. с англ. — М.: ООО "И.Д. Вильямс", 2014. — 1120 с.

    Глава 8. Библиотека ввода-вывода

    1. Лафоре P. Объектно-ориентированное программирование в С++. Классика Computer Science. 4-е изд. — СПб.: Питер, 2003. — 928 с.

    Глава 12. Потоки и файлы
    + справочная система



    написать администратору сайта