Программирование >>  Структурное программирование 

1 ... 9 10 11 [ 12 ] 13 14 15 ... 342


состоит в том, что студентам трудно визуально представить себе структуры данных и связь их узлов. Поэтому мы включили в главу иллюстрации, которые показывают связи и последовательность, в которой они создаются. Пример двоичного дерева - превосходная основа для изучения указателей и динамических структур данных. В этом примере создается двоичное дерево, убираются дубликаты и рекурсивно осуществляются три вида обхода дерева: последовательный, обход в ширину и обратный. Студенты испытывают подлинное чувство завершенности, когда они изучают и реализуют этот пример. Они особенно рады увидеть, как последовательный обход печатает значения в узлах в упорядоченной последовательности. Глава включает множество упражнений. Исключительной особенностью главы является специальный раздел Создание вашего собственного компилятора . Упражнения проводят студента через разработку программы преобразования инфиксной формы записи выражений в постфиксную форму и программы вычисления выражения в постфиксной форме. Затем мы изменяем алгоритм постфиксного вычисления так, чтобы он генерировал коды машинного языка. Транслятор помещает этот код в файл, используя методы, рассмотренные в главе 14. Затем студенты передают файл программы на машинном языке, созданный их транслятором, в программу моделирования компьютера, построенную ими в упражнениях главы 5. 35 упражнений данной главы включают моделирование очереди в супермаркете, рекурсивный поиск в списке, рекурсивную печать списка в обратной последовательности, удаление узлов двоичного дерева, послойный обход бинарного дерева, печать деревьев, написание фрагментов оптимизирующего компилятора, написание интерпретатора, вставка и удаление произвольного узла связного списка, реализацию списков и очередей без указателей на их конец, анализ эффективности поиска и сортировки на двоичном дереве и построение класса индексированных списков.

Глава 16, Биты, символы, строки и структуры , представляет ряд важных особенностей С++. Мощные средства манипулирования битами в С++ позволяют программистам писать программы, которые эффективно используют аппаратные возможности низшего уровня. Эти полезные программы обрабатывают поля битов, устанавливают и сбрасывают отдельные биты и хранят информацию более компактно. Такие возможности, обычно присущие только языкам ассемблера низкого уровня, оценены программистами, пишущими системное программное обеспечение типа операционных систем и программного обеспечения работы с сетями. Как вы помните, мы ознакомили студента с манипулированием строками в главе 5 и представили там наиболее популярные функции обработки строк. В главе 16 мы продолжаем наше рассмотрение символов и строк. Мы рассказываем о различных возможностях обработки символов, предоставляемых библиотекой ctype; они включают возможность проверить, является ли символ цифрой, буквой, алфавитно-цифровым символом, шестнадцатеричной цифрой, символом в нижнем регистре, в верхнем регистре и т.д. Мы представляем функции работы со строками различных библиотек. Как всегда, для каждой функции приводится использующая ее полная рабочая программа на С++. Структуры в С++ подобны записям в Паскале и других языках программирования; они группируют элементы данных различных типов. Структуры используются в главе 14 при формировании файлов, состоящих из записей информации. Структуры вместе с указателями и динамическим распределением памяти используются в главе 15 при формировании динамических структур данных типа связных списков, очередей, стеков, и деревьев. Особенностью данной главы 16 явля-



ется пересмотренное, более эффективное, чем рассматривалось ранее, моделирование тасования и раздачи карт. Это превосходная возможность для преподавателя подчеркнуть важность стремления к созданию высококачественных алгоритмов. 35 упражнений вдохновляют студента испытать большинство функциональных возможностей, обсужденных в данной главе. Одно из характерных упражнений стимулирует студента к разработке программы проверки орфографии.

Глава 17, Препроцессор , предлагает детальное обсуждение директив препроцессора. Глава включает более полную информацию о директиве #in-clude, которая перед компиляцией копирует указанный файл на место этой директивы, и о директиве #define, которая создает символические константы и макросы. Глава объясняет условную трансляцию, предоставляющую программисту возможность управлять выполнением директив препроцессора и компиляцией кода программы. Обсуждаются также операция #, которая преобразовывает операнд, являющийся макросом, в строку с кавычками, и операция ##, который сцепляет два макроса. Представлены пять предопределенных символических констант ( LINE , FILE , DATE , TIME и STDC ). В заключение обсуждается макрос assert заголовочного файла assert.h; макрос assert полезен при тестировании и отладке программ.

Глава 18, Другие темы , рассматривает некоторые дополнительные вопросы, включая несколько сложных тем, обычно не рассматриваемых во вводных курсах. Мы показываем, как переназначить ввод в программу на ввод из файла, переназначить вывод из программы на вывод в файл, переназначить вывод из одной программы на ввод в другую программу (конвейерная пересылка), как добавлять вывод программы в конец существующего файла, как разработать функции, которые используют списки параметра переменной длины, как можно передать в функцию main и использовать в ней параметры командной строки, как компилировать программу, состоящую из множества файлов, как регистрировать функции, которые будут выполняться при завершении программы, с помощью atexit и exit, как использовать спецификаторы типа const и volatile, как определять тип числовой константы, используя суффиксы целых чисел и чисел с плавающей запятой, как использовать библиотеку обработки сигналов для перехвата непредвиденных событий, как создавать и использовать динамические массивы с помощью calloc и realloc, как использовать объединения для экономии памяти и как использовать спецификации редактирования при связывании программ на 0+-1- с кодами, унаследованными от С.

Несколько приложений дают читателю ценный справочный материал. В приложении А мы даем обзор с пояснениями всех стандартных библиотечных функций; в приложении Б даем таблицу приоритетов и ассоциативности операций; приложение В содержит набор кодов ASCII для символов; в приложении Г обсуждаются двоичные, восьмеричные, десятичные и шестнадцатеричные системы счисления. Книга содержит обширный предметный указатель, позволяющий читателю найти в тексте любой термин или понятие по ключевым словам.

Приложение А и различные рисунки были отобраны из стандартного документа ANSI/ISO по письменному разрешению Американского Национального Института Стандартов; это приложение - детализированный и ценный источник информации для практикующего программиста. Мы искренне благодарим за сотрудничество и за помощь нам в получении необходимого разрешения на эту публикацию Роберта Хагера, исполняющего



обязанности директора ANSI по публикациям. Разрешение на этот материал приведено ниже:

Различные рисунки и приложение А: Стандартная библиотека были сжаты и адаптированы с разрешения из Американского Национального Стандарта для Информационных систем - язык программирования С, ANSI/ISO 9899: 1990. Копии этого стандарта могут быть приобретены в Американском Национальном Институте Стандартов по адресу: West 42nd Street, New York, NY 10036.

Благодарности

Одно из наибольших удовольствий при написании учебника состоит в возможности принести благодарность за усилия многих людей, чьи имена не могут появиться на обложке, но без чьей упорной работы, сотрудничества, дружбы и понимания написание этого текста было бы невозможно.

X. М. Дейтел хочет поблагодарить своих коллег из Nova University Эдда Леблейна, Эдда Симко, Кловис Тондо, Фила Адамса, Рэйса Сабо, Рауля Са-лазара, Брайана Уэлетта и Барбару Эдж.

Мы хотели бы поблагодарить наших друзей из Digital Equipment Corporation (Стефанию Стосур Шварц, Сью-Лейн Гарретт, Бетти Миллс, Дженни Конноли, Барбару Кутюрье и Пола Сандора, из Sun Microsystems (Гарри Морин и Карин Шо), из Informative Stages (Дона Холла и Дейвида Литвака), из Semaphore Training (Клива Ли), из Cambridge Technology Partners (Карта Дэвиса, Пола Шермана и Вильберто Мартинеса) и многих других наших обпз;их коллег, которые сделали преподавание этого материала в производственной обстановке такой радостью.

Мы были счастливы возможностью работать над этим проектом с талантливой и просвещенной группой издательских профессионалов в Prentice Hall. Эта книга появилась благодаря поддержке, энтузиазму и упорству нашего издателя Алана Апта и главного редактора Марсиа Хортона.

Сондра Чавес координировала усилия рецензентов этой рукописи и была всегда невероятно полезна, когда мы нуждались в помощи; ее кипучая энергия и поддержка искренне оценены нами. Джой Скордато провел замечательную работу как организатор проекта. Ширли Макгуайр была превосходным помощником редактора.

Мы ценим усилия наших рецензентов:

Тима Борна (AT&T, Bell Labs)

Тони Л. Хансена (AT&TBell Labs; Хансен - автор книги oThe С++ Answer Book , Addison-Wesley 1990, которая содержит ответы на упражнения и широко используется вместе с ГЛе С++ Programming Languages - классической книгой по С++ Бьярне Строуструпа)

Кловиса Тондо (Т & Т TechWork, Inc. и Nova Southeastern University; Тондо - соавтор книги The С Answer Book*, Prentice-Hall, 1989, которая содержит ответы на упражнения и широко используется вместе с The С Programming Language* - классическим трудом Брайана Кернигана и Денниса Ритчи)

Р. Рейда (Michigan State University)

Джина Спаффорда (Purdue University)

Х.Е. Дунсмора (Purdue University)

Дейвида Фальконе (California State University at Fullerton) Дейвида Финкеля (Worcester Polytechnic)



1 ... 9 10 11 [ 12 ] 13 14 15 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика