Порядок выполнения работы. 1. Определить пользовательский тип данных (класс)
1. Определить пользовательский тип данных (класс). Определить и реализовать в нем конструкторы, деструктор, операции присваивания, ввода и вывода для стандартных потоков.
2. Написать программу № 1 для создания объектов пользовательского класса (ввод исходной информации с клавиатуры с использованием перегруженной операции “>>“) и сохранения их в потоке (файле). Предусмотреть в программе вывод сообщения о количестве сохраненных объектов и о длине полученного файла в байтах.
3. Выполнить тестирование программы.
4. Реализовать для вывода в поток свой манипулятор с параметрами.
5. Написать программу № 2 для чтения объектов из потока, сохранения их в массиве и просмотра массива. Для просмотра объектов использовать перегруженную для cout операцию << и свой манипулятор. Предусмотреть в программе вывод сообщения о количестве прочитанных объектов и байтов.
6. Выполнить программу для чтения из файла сохраненных предыдущей программой объектов и их просмотра.
7. Написать программу № 3 для добавления объектов в поток.
8. Выполнить программу, добавив в поток несколько объектов и просмотреть полученный файл.
9. Написать программу № 4 для удаления объектов из файла.
10. Выполнить программу, удалив из потока несколько объектов и просмотреть полученный файл.
11. Написать программу № 5 для корректировки (т.е. замены) записей в файле.
12. Выполнить программу и просмотреть полученный файл.
Методические указания
1. В качестве пользовательского типа данных взять класс из лабораторной работы № 11. Поля класса типа char* заменить на char[целое].
2. В совокупности программы должны использовать все классы потоков: istream, ostream, fstream, ifstream, ofstream.
3. Также в программах следует показать все три способа создания потока и открытия файла (см. выше).
4. Необходимо продемонстрировать чтение из файла и запись в файл как с помощью функций read/write, так и с помощью перегруженных операций >>и <<.
5. Пользовательский манипулятор создается с не менее чем с двумя параметрами.
6. В качестве параметров манипулятора можно использовать:
а) ширину поля вывода;
б) точность вывода вещественных чисел;
в) символ-заполнитель;
г) способ выравнивания (к левой или правой границе)
и т.д.
7. В поток записать не менее 5 объектов.
8. После записи объектов в файл и перед чтением их из файла определить количество записанных объектов и вывести эту информацию.
Определить количество записанных в файл объектов можно следующим образом:
а) стать на конец файла - функции seekp(),seekg();
б) определить размер файла в байтах - функции tellp(),tellg();
в) определить количество записанных объектов - размер файла поделить на размер объекта.
9. Поскольку в файле может храниться любое, заранее не известное, количество объектов, для их сохранения в программе № 2 при чтении из файла использовать динамический массив.
10. Следует определить функцию find(), которая принимает значение ключевого поля объекта и возвращает смещение этого объекта от начала файла. Вызывать эту функцию перед удалением/изменением объекта в файле.
11. Для изменения и удаления объекта написать функции del()иrepl(), которым передается ссылка на поток, смещение от начала файла изменяемой или удаляемой записи (результат вызова функции find), новое значение изменяемой записи.
Содержание отчета.
1. Титульный лист.
2. Постановка задачи.
3. Определение пользовательского класса.
4. Реализация манипулятора.
5. Реализация функций find(),del()и repl().
Пояснения к программам.
Для каждой программы указывается, какие потоковые классы в ней используются, как создаются объекты потоковых классов, как открываются файлы, каким образом выполняется ввод и вывод данных.
Контрольные вопросы.
1. Понятие потока;
2. Потоковые классы в С++;
3. Базовые потоки ввода-вывода4
4. Форматирование;
5. Манипуляторы;
6. Определение пользовательских манипуляторов;
7. Состояние потока;
8. Файловый ввод-вывод.
Литература
1. Керниган Б., Ритчи Д., Фьюер А. Язык программирования Си. Задачи по языку Си / Пер. с англ. – М.: Финансы и статистика, 1985. – 279с.
2. Керниган Б., Ритчи Д. Язык программирования Си / Пер. с англ. М.: Финансы и статистика, 1992. – 272 с.
3. Подбельский В.В., Фомин С.С. Программирование на языке Си. М.: «Финансы и статистика», 2003. – 600с.
4. Болски М.И. Язык программирования Си / Пер. с англ. Справочник. М.: Радио и связь, 1088. – 98 с.
5. Хэнкок Л., Кригер М. Введение в программирование на языке Си / Пер с англ. – М.: Радио и связь, 1986. – 192с.
6. Белецкий Я Энциклопедия языка Си / Пер с англ. – М.: Мир, 1992. – 687с.
7. Джехани Н. Программирование на языке Си / Пер. с англ. – М.: Радио и связь, 1988. – 272с.
8. Страуструп Б. Язык программирования С++. Специальное издание. Пер. с англ. – М.: ООО»Бином-Пресс», 2004 г. – 1104 с.: ил.
9. Павловская Т.А. С/С++ Программирование на языке высокого уровня-Спб.;Питер,2001-464с.
10. Викентьева О. Л.,Полякова О. А. Методические указания и контрольные задания по дисциплине "Алгоритмические языки и программирование" –Пермь.ПГТУ-2002.
11. Викентьева О. Л.Конспект лекций по курсу «Алгоритмические языки и программирование» –Пермь.ПГТУ-2003.
12. О. Л. Викентьева, О. А. Полякова Программирование на языке С++. Лабораторный практикум для студентов специальности АСУ. –Пермь.ПГТУ-2001.
13. А.М. Ноткин Объектно-ориентированное программирование на языке С++. –Пермь.ПГТУ-2001.
Тицкий Сергей Васильевич
Косенко Евгений Юрьевич
ПРОГРАММИРОВАНИЕ И ОСНОВЫ АЛГОРИТМИЗАЦИИ
Лабораторные и практические занятия
Ответственный за выпуск Тицкий С.В.
Редактор Белова Л.Ф.
Корректор Селезнева Н.П.
ЛП №020565 Подписано к печати
Офсетная печать Усл. п.л. – 5,6 Уч.-изд.л. – 5,4
Заказ № Тираж 500
“С”
__________________________________________________
Издательство Таганрогского государственного
радиотехнического университета
ГСП 17А, Таганрог, 28, Некрасовский, 44
Типография Таганрогского государственного
радиотехнического университета
ГСП 17А, Таганрог, 28, Энгельса, 4
[1]Десятичные числа - это числовые значения, использующие десятичную точку (Например: 2.5)