Бьерн Страуструп - Язык программирования С++. Главы 8-10 - Упражнения

ОГЛАВЛЕНИЕ

10.7 Упражнения

1. (*1.5) Читая файл вещественных чисел, составлять из пар прочитанных чисел комплексные числа, записать комплексные числа.
2. (*1.5) Определить тип name_and_address (тип_и_адрес). Определить для него << и >>. Написать программу копирования объектов потока
   name_and_address.
3. (*2) Разработать несколько функций для запроса и чтения данных разных типов. Предложения: целое, вещественное число, имя файла, почтовый адрес, дата, личная информация, и т.п. Попытайтесь сделать их устойчивыми к ошибкам.
4. (*1.5) Напишите программу, которая печатает: (1) строчные буквы,
   (2) все буквы, (3) все буквы и цифры, (4) все символы, входящие в идентификатор в вашей версии С++, (5) все знаки пунктуации,
   (6) целые значения всех управляющих символов, (7) все обобщенные пробелы, (8) целые значения всех обобщенных пробелов, и, наконец,
   (9) все изображаемые символы.
5. (*4) Реализуйте стандартную библиотеку ввода-вывода С (<stdio.h>)
с помощью стандартной библиотеки ввода-вывода С++ (<iostream.h>).
6. (*4) Реализуйте стандартную библиотеку ввода-вывода С++
   (<iostream.h>) с помощью стандартной библиотеки ввода-вывода С
   (<stdio.h>).
7. (*4) Реализуйте библиотеки С и С++ так, чтобы их можно было использовать одновременно.
8. (*2) Реализуйте класс, для которого операция [] перегружена так, чтобы обеспечить произвольное чтение символов из файла.
9. (*3) Повторите упражнение 8, но добейтесь, чтобы операция [] была применима для чтения и для записи. Подсказка: пусть [] возвращает объект "дескриптор типа", для которого присваивание означает: присвоить через дескриптор файлу, а неявное приведение к типу char
означает чтение файла по дескриптору.
10.(*2) Повторите упражнение 9, позволяя операции [] индексировать объекты произвольных типов, а не только символы.
11.(*3.5) Продумайтеи реализуйте операцию форматного ввода. Используйте для задания формата строку спецификаций как в printf(). Должна быть возможностьпопыток применения нескольких спецификаций для одного ввода, чтобы найти требуемый формат. Класс форматного ввода должен быть производным класса istream.

12.(*4) Придумайте (и реализуйте) лучшие форматы ввода.

13.(**2) Определите для вывода манипулятор based с двумя параметрами: система счисления и целое значение, и печатайте целое в представлении, определяемом системой счисления. Например, based(2,9)
напечатает 1001.
14.(**2) Напишите "миниатюрную" систему ввода-вывода, которая реализует классы istream, ostream, ifstream, ofstream и предоставляет функции, такие как operator<<() и operator>>() для целых, и операции, такие как open() и close() для файлов. Используйте исключительные ситуации, а не переменные состояния, для сообщения об ошибках.
15.(**2) Напишите манипулятор, который включает и отключает эхо символа.