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



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) Напишите манипулятор, который включает и отключает эхо
   символа.
 
« Предыдущая статья   Следующая статья »