|
Программирование >> Разработка устойчивых систем
4. При помощи своей любимой утилиты поиска (например, grep) найдите имена всех файлов, содержащих определенную последовательность символов. Перенаправьте вывод в файл. Напишите программу, которая по содержимому этого файла генерирует пакетный файл, запускающий текстовый редактор для каждого найденного файла. 5. Мы знаем, что манипулятор setw() позволяет задать минимальное количество вводимых символов. А если размер вводимых данных потребуется ограничить сверху? Напишите эффектор, который бы позволял задать максимальное количество вводимых символов. Пусть ваш эффектор также работает для вывода (выводимые поля должны при необходимости усекаться по ширине). 6. Докажите, что если при установленном флаге badbit или failbit активизировать потоковые исключения, то поток немедленно запустит исключение. 7. Строковые потоки упрощают преобразования текстовых данных, но за это приходится платить определенную цену. Напишите программу для проведения сравнительного хронометража atoi() и системы преобразований stringstream. Посмотрите, к каким затратам приводит использование системы stringstream. 8. Создайте структуру Person с информацией о человеке: имя, адрес и т. д. Объявите строковые поля как массивы фиксированного размера. Ключом каждой записи должен быть номер социального страхования. Реализуйте следующий класс Database: class DataBase { public: Поиск записи на диске size t query(s1ze t ssn): Выборка структуры Person по номеру записи Person retrieve(size t гп): Сохранение записи на диске void add(const Persons р): Запишите примеры данных Person на диск (не держите их в памяти). Когда пользователь запросит запись, прочитайте ее с диска и передайте пользователю. В операциях ввода-вывода класса DataBase при обработке записей Person должны применяться функции read() и write(). 9. Напишите оператор для структуры Person, который бы отображал записи в формате, удобном для чтения. Продемонстрируйте его работу, сохранив данные в файле. 10. Допустим, база данных со структурами Person была потеряна, но у вас остался файл, записанный в предыдущем примере. Воссоздайте базу данных по содержимому файла. Не забудьте организовать проверку ошибок! И. Запишите size t(-l) (наибольшее беззнаковое целое на вашей платформе) в текстовый файл 1 ООО ООО раз. Сделайте то же самое для двоичного файла. Сравните размеры двух файлов и посмотрите, сколько места экономит вывод в двоичном формате (попробуйте предсказать результат заранее). 12. Определите максимальную точность вывода в вашей реализации библиотеки потоков, последовательно увеличивая значение аргумента precision() при выводе трансцендентного числа (например, sqrt(2.0)). 13. Напишите программу, которая читает вещественные числа из файла и выводит их сумму, среднее арифметическое, минимальное и максимальное значения. 14. Определите, какие данные выведет следующая программа, до ее выполнения: : C04:Exercisel4.cpp #include <fstream> linclude <iostream> linclude <sstream> linclude ../require.h using namespace std; Idefine d(a) cout la ==\t a endl; void tellPointers(fstreams s) ( dCs.tellpO); d(s.tellg()) cout endl void tellPointers(stringstream& s) dCs.tellpO); d(s.tellg()) cout endl } int mainO ( fstream in( Exercisel4.cpp ); assureCin. Exercisel4.cpp ); in.seekg(lO); tellPointers(in); in.seekp(20); tellPointers(in); stringstream memStream( Here is a sentence. ); memStream.seekg(lO); tel1Poi nters(memStream); memStream.seekp(5); tellPointers(memStream); } III:- 15. Предположим, у вас имеются строковые данные в файле следующего формата: ; С04:Exercisel5.txt Australia 5Е56.7667230284.Langler.Tyson.31.2147.О.00042117361 2B97.7586701.Onei 11.Zeke.553.429.0.0074673053156065 4D75.7907252710.Ni ckerson.Kelly.761.612.0.010276276 9F2.6882945012.Hartenbach.Nei1.47.9637.0.0006471644 Austria 480F.7187262472.Onei11.Dee.264.012.0.00356226040013 1865.4754732628.Haney.Kim.7.33843.0.000099015948475 DAI.1954960784.Pascente.Lester.56.5452.0.0007629529 3F18.1839715659.El sea.Chelsy.801.901,0.010819887645 *Last Name* *First Name* *ID* *Phone* *Sales* *Percent* Langler Tyson 24150 766-723-0284 31.24 4.21E-02 Oneill Zeke 11159 XXX-758-6701 553.43 7.47E-01 ИТ. д. Belgium BDF.5993489554.Onei11.Meredi th.283.404,0.0038239127 5AC6.6612945602.Pari si enne.Bi ff.557.74.0.0075254727 6AD.6477082.Penni ngton.Li zanne.31.0807.0.0004193544 4D0E.7861652688.Si sea.Franci s.704.751.0.00950906238 Bahamas 37D8.6837424208.Pari si enne.Samson.396.104.0.0053445 5E98.6384069.Wi11i s.Pam.90.4257.0.00122009564059246 1462.1288616408.Stover.Hazal.583.939.0.007878970561 5FF3.8028775718.Stromstedt.Bunk.39.8712.0.000537974 1095.3737212.Stover.Denny.3.05387.0.000041205248883 7428.2019381883.Pari s i enne.Shane.363.272.0.00490155 В заголовках секций указаны географические регионы, а в строках каждой секции перечисляются торговые представители некой организации. Данные каждого представителя хранятся в виде полей, разделенных запятыми. Первое поле в строке содержит идентификатор представителя - к сожалению, записанный в шестнадцатеричном виде. Во втором поле хранится телефонный номер; обратите внимание: междугородные коды кое-где пропущены. Затем следуют поля фамилии и имени. В предпоследнем поле содержится общий объем продаж данного представителя, а в последнем - его доля в общем объеме продаж компании. Вы должны отформатировать данные в терминальном окне так, чтобы данные легко читались. Ниже приведен пример вывода: Australia
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |