Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КРАТКИЙ ОБЗОР С.doc
Скачиваний:
1
Добавлен:
26.10.2018
Размер:
2.11 Mб
Скачать

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

* Проектирование и развитие

      "Серебряной пули не существует."       - Ф. Брукс В этой главе обсуждаются подходы к разработке программного обеспечения. Обсуждение затрагивает как технические, так и социологические аспекты процесса развития программного обеспечения. Программа рассматривается как модель реальности, в которой каждый класс представляет определенное понятие. Ключевая задача проектирования состоит в определении доступной и защищенной частей интерфейса класса, исходя из которых определяются различные части программы. Определение этих интерфейсов есть итеративный процесс, обычно требующий экспериментирования. Упор делается на важной роли проектирования и организационных факторов в процессе развития программного обеспечения.