7 (Семинары и упражнения), страница 2
Описание файла
Файл "7" внутри архива находится в папке "Семинары и упражнения". PDF-файл из архива "Семинары и упражнения", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Ввод-вывод файловВвод-вывод файлов в Си++ имеет много общего со стандартным вводом-выводом. Длязаписи данных в файл необходимо создать потоковый объект, связанный с файлом, ивоспользоваться операцией вставки << или методом write(). Для чтения файла создаетсяпотоковый объект и используется операция извлечения >> или метод get().8.1 Запись в файл.1. Включение в программу заголовочного файла fstream#include <fstream>2. Создание объекта класса ofstream, например,ofstream fout;3. Связывание объекта с определенным файлом:fout.open("a.txt");6Эти два этапа можно объединить в одном: ofstream fout("a.dat"). После этого объектfout можно использовать для вывода так же, как и cout.8.2 Чтение из файла.Для чтения из файла создается объект класса ifstream, например: ifstream fin("b.dat").Далее он может быть использован аналогично стандартному объекту cin.Файлы могут быть открыты на ввод-вывод в различных режимах.
В классе ios_baseопределены константы для указания режима открытия файла:inОткрыть файл для чтенияoutОткрыть файл для записиappДобавить информацию к концу файлаbinaryДвоичный файлПо умолчанию файл для записи открывается таким образом, что если файл существует, тоданные в нем будут потеряны. Чтобы сохранить имеющиеся данные, а новые добавить вконец файла, можно при открытии файла объединить две константы с помощью операциипобитового «ИЛИ»:ofstream fout("a.dat", ios_base::out | ios_base:: app);Проверить, удалось ли открыть файл можно с помощью метода is_open():if (!fout.is_open()){…// не удалось открыть файл};Разорвать связь потока с файлом можно с помощью метода close():fout.close();8.3 Двоичные файлы.Чтобы записать данные в двоичном виде нужно открыть файл в двоичном режиме:ofstream fout("a.dat", ios_base:: out | ios_base:: binary);и воспользоваться методом write():fout.write (const char* chp, sizeof chp);где первый аргумент – адрес записываемых данных, второй – их длина в байтах.Чтобы прочитать данные в двоичном виде, надо использовать метод read() для объектакласса ifstream:ifstream fin("b.dat", ios_base:: binary);fin.read (char* chp, sizeof chp);Здесь первый аргумент – адрес, по которому будут сохраняться данные, второй – их длинав байтах.Литература.Стивен Прата.
"Язык программирования Си++. Лекции и упражнения. Учебник: Пер. С англ." - ОООДиаСофтЮП, 2004. Главы 15, 17.7Упражнение С7.1Напишите программу-калькулятор, которая запрашивает у пользователя два числа и одно из двухарифметических действий * или /, выполняет запрошенное действие с двумя введенными числами ивыводит результат на экран. При выполнении деления программа должна генерировать исключение припопытке деления на ноль. Обработка исключения должна включать сообщение об ошибке и повторный вводзнаменателя.Упражнение С7.2*Добавьте в класс рациональных чисел из упражнения C4.9* генерацию и обработку исключения припопытке деления на ноль.Упражнение С7.3Не меняя программу из упражнения С7.1, с помощью перенаправления организуйте ввод данных из файлаa.txt, а вывод – в файл b.txt.Упражнение С7.4Напишите программу, которая запрашивает ввод числа в шестнадцатеричном виде и выводит его ввосьмеричной и десятичной системах счисления.Упражнение С7.5Напишите программу, которая организует ввод данных с клавиатуры, подсчитывая при этом полное числовведенных символов, число пробелов и число нажатий на клавишу <Enter>.
Завершается ввод после вводасимвола конца файла (Ctrl+z для Windows). Результаты подсчетов следует вывести на экран и в текстовыйфайл.Упражнение Z1.1. Создайте класс - динамический массив для хранения данных целого типа c возможностью добавления впроизвольное место нового элемента. Предусмотрите в качестве частных элементов данных этого классауказатель на начало массива (динамически выделяемую область памяти) и количество элементов в массиве.Должны быть перегружены деструктор, конструктор копирования, оператор присваивания и оператор [].2. Для вставки нового элемента в динамический массив нужно:Запросить память большего размера;Скопировать по новому адресу все старые элементы с индексом меньше индекса вставляемогоэлемента;Добавить в нужную позицию новый элемент;Скопировать оставшиеся элементы;Уничтожить старый массив;Обновить элементы данных класса (указатель на начало массива и число элементов в нем).3.
Напишите программу, в которой запросите у пользователя число элементов динамического массива исоздайте этот массив с нулевыми элементами. Затем запросите у пользователя индекс и значениевставляемого элемента. Вставьте новый элемент в нужное место и выведите на экран и в файл значения всехэлементов динамического массива.8.