Введение
Данная книга задумана как начальное пособие при решении задач программирования и разработке программ с применением Turbo Pascal (версии 7.0). При этом не требуется предварительных знаний по программированию или компьютерам и для большинства материала достаточной математической основой является курс алгебры в объеме средней школы. Тем не менее, для усвоения некоторых разделов необходимы минимальные познания в области дискретной математики.
Решение задач
Взаимосвязь между развитыми навыками решения разного рода задач и способностью эффективно разрабатывать программное обеспечение показана в главе 1. Данная глава также знакомит читателя с интегрированной средой Turbo Pascal. Практическое применение метода проектирования программных средств рассматривается в главе 2 (раздел "ИССЛЕДОВАНИЕ ЗАДАЧИ"); указанный метод затем применяется во всех подобных разделах по всей книге.
В главах 3 и 4 в ходе обсуждения нисходящего проектирования, метода "разделяй и властвуй" (т.е. деления задач на более мелкие подзадачи), решения по аналогии и обобщения решения, как и в предыдущем издании по-прежнему большое внимание уделяется решению задач. Очень важный раздел главы 3 демонстрирует, как Pascal-программа может быть создана на основе документации, явившейся результатом систематического применения метода проектирования программных средств.
Графика
Данное издание содержит введение в компьютерную графику. Некоторые графические процедуры Turbo Pascal описаны в главе 3, анимация - в главе 6 и интерфейсы пользователя - в главе 9.
Техника создания программного обеспечения
В этой книге рассматриваются многие аспекты процесса создания программного обеспечения. Вопросы, связанные со стилем программирования, освещаются с использованием специальных описаний синтаксиса. Концепция программы как последовательности управляющих структур освещается в начале главы 4. Кроме того, несколько глав содержат разделы, посвященные трассировке, отладке и тестированию программ.
Глава 9 представляет собой полное руководство по технике создания программного обеспечения. Из данной главы читатель узнает о таких понятиях, как жизненный цикл программного обеспечения (software life cycle) и создание прототипов (prototyping), а также узнает о том, как организовать совместную работу коллектива разработчиков-программистов над решением общей задачи. Детальное рассмотрение всех фаз жизненного цикла программного обеспечения предполагает обсуждение неформальных методов тестирования программ (тестирование "прозрачного ящика" и "черного ящика", комплексное тестирование, сквозной структурированный контроль) и формальных методов верификации программ, а также обсуждение утверждений и инвариантов цикла. В этой главе также состоится предварительное знакомство читателя с абстракцией данных и процедурной абстракцией. Здесь же содержится информация о модулях, в частности, о модуле Crt, средства которого позволяют создавать оконные интерфейсы. Здесь же показано, как создавать собственные модули с целью реализации библиотек подпрограмм и абстрактных типов данных. Завершается глава 9 обсуждением вопросов, связанных с профессиональной этикой.
Процедурная абстракция
Хотя не существует единого мнения по поводу того, когда приступать к изучению процедур и их параметров, большинство преподавателей сходятся на следующем. Знакомство с процедурами изучающих программирование должно происходить как можно раньше, процедуры никогда не должны манипулировать глобальными переменными (во избежание побочных эффектов). Кроме того, все специалисты признают вопрос о параметрах процедур достаточно сложным. Подход, принятый в данной книге, заключается в том, чтобы сначала (в главе 3) обсудить важность модульности программ и многократного использования процедур и функций. Данная глава обоснует использование подпрограмм в качестве "кирпичиков" при создании программ, демонстрируя некоторые примеры применения процедур без параметров (в частности, для отображения обширных инструкций пользователю и создания диаграмм). Затем в разделе 3.5 обсуждается важность параметров и ограниченность подпрограмм без параметров; тем самым обоснуется необходимость последующего изучения этой темы (глава 6). Раздел 3.6 знакомит читателя с графическими процедурами и демонстрирует их использование.
Глава 6, завершающая изучение процедур и функций, посвящена всем аспектом использования параметров. Глава начинается с обсуждения процедур, у которых есть только параметры-значения; затем здесь идет речь о процедурах, имеющих как параметры-значения, так и параметры-переменные; наконец, читатель познакомится с такой разновидностью подпрограмм, как функции. Необязательный раздел в конце главы посвящен рекурсивным функциям.
Некоторые преподаватели полагают, что процедуры с параметрами и процедуры без параметров следует рассматривать вместе. Читатели, придерживающиеся этого мнения, легко смогут изменить порядок изучения тем. Если вы не имеете ничего против того, чтобы отложить знакомство с процедурами до главы 6 (где, как уже шла речь выше, обсуждаются процедуры с параметрами и процедуры без параметров), пропустите при изучении главы 3 разделы 3.4 и 3.5. И наоборот, если вы предпочитаете узнать о процедурах как можно раньше, обратитесь к разделу 6.1 (посвященному параметрам) сразу после знакомства с главой 3 и отложите разделы 6.2 и 6.3 (в которых рассматриваются параметры-переменные и синтаксис списков параметров) до того, как завершите изучение первых трех разделов главы 4 (посвященных управляющим структурам, Boolean-выражениям и оператору if).
Абстракция данных и объектно-ориентированное программирование
В главе 9, посвященной технике создания программного обеспечения, вы встретитесь с первым примером абстрактного типа данных (АТД). Здесь же вы познакомитесь с перечислимым типом данных и узнаете, как объединить в едином модуле Turbo Pascal тип данных и процедуры, предназначенные для обработки данных этого типа. Абстракция данных и АТД широко используются при освещении более сложных тем, рассматриваемых в этой книге, начиная с главы 13.
Глава 13, посвященная объектам Turbo Pascal и объектно-ориентированному программированию (ООП), помимо прочего, познакомит читателя с таким свойством объектов, как наследование. Объекты и ООП также рассматриваются в главе 17 и главе 18.
Освещение теоретических концепций
Данная книга, помимо прочего, рассматривает также некоторые теоретические вопросы. Так, необязательный раздел из главы 7 познакомит читателя с числовыми вычислениями и итеративной аппроксимацией. Глава 9 обсуждает вопросы верификации программ, фокусируя при этом основное внимание на утверждениях и инвариантах циклов. А в главе 10 читатель познакомится с поиском в массивах и их сортировкой.
Особенности структуры книги
Благодаря некоторым особенностям структуры этой книги значительно повышается ее ценность как учебного пособия. Кстати, приблизительно треть всех имеющихся упражнений, обзорных вопросов и проектов программирования впервые появились в данном издании.
Упражнения в конце разделов:
Большинство разделов завершаются несколькими упражнениями, которые предлагают анализировать фрагменты программ, либо решать простейшие задачи программирования. Ответы для таких упражнений с нечетными номерами можно найти в конце данной книги.
Упражнения в конце глав:
Каждая глава завершается набором контрольных упражнений, предназначенных для проверки знаний, усвоенных в данной главе, а также ответами для этих упражнений. Далее следуют обзорные вопросы, посвященные рассмотренным в главе темам.
Проекты для программирования в конце глав:
Большинство таких проектов связано с решением той или иной задачи программирования.
Примеры и исследования задач:
Одним из несомненных достоинств данной книги являются большое количество примеров программирования. По мере возможности эти примеры представляют собой полные программы или процедуры, а не просто фрагменты. Кроме того, каждая глава содержит один или несколько разделов "ИССЛЕДОВАНИЕ ЗАДАЧИ", в которых решения задач программирования осуществляются с использованием метода проектирования программных средств.
Описания синтаксиса:
Здесь подается краткая информация о синтаксисе и семантике каждого нового элемента Pascal. Здесь же содержится пример использования этого элемента. Кроме того, в книге вы найдете синтаксические диаграммы: несколько таких диаграмм подано в различных главах, а полный их набор находится в приложении В.
Описания стиля программирования:
Здесь даются объяснения, что такое хороший стиль программирования.
Обсуждение типичных ошибок и обзоры глав:
Каждая глава завершается разделом, в котором рассматриваются ошибки, наиболее часто допускаемые программистами. Обзоры глав включают таблицу с новыми Pascal-конструкциями.
Дополнительные темы
Материал, содержащийся в главах 1-12, обычно рассматривается в первом семестре курса программирования. Данная книга содержит шесть дополнительных глав, включающих материал по темам, обычно изучаемых во втором семестре либо в первом семестре ускоренного курса. Этот материал также может быть использован в качестве справочного теми, кто продолжает изучение программирования. К дополнительным темам относятся следующие.
- Рекурсия (глава 14)
- Множества и строки (глава 15)
- Внешние структуры данных: файлы (глава 16)
- Указатели и связанные списки (глава 17)
- Динамические структуры данных (глава 18)
- Приложения и дополнительные материалы
Приложения:
В данной книге имеются самостоятельные приложения, содержащие материалы по среде Turbo Pascal, элементам языка, директивам компилятора, а также синтаксические диаграммы и коды ASCII.
Файлы с программами:
Все процедуры и функции, используемые в разделах "ИССЛЕДОВАНИЕ ЗАДАЧИ", объединены в единые файлы программ. Также имеются файлы, содержащие решения для избранных проектов. Часто эти решения представляют собой отправную точку для последующих проектов. Эти файлы вы можете загрузить на свой компьютер с Web-узла издательского дома Williams (адрес http://www.williamspublishing.com) , а затем запускать их в среде Turbo Pascal. Места в книге, где речь идет о таких проектах, отмечены пиктограммой, подобной той, что изображена слева от данного абзаца.
Благодарности
В ходе работы над пятым изданием автору была оказана существенная помощь, которая заключалась в большом количестве советов и содействии в выявлении ошибок. Вот имена тех, кто помогал создавать эту книгу:
Марта Динуидди (Martha Dinwiddie) - Университет Техаса - Даллас
Майкл Доран (Michael Doran) - Университет Южной Алабамы
Дебора Данн (Deborah Dunn) - Университет А & М Техаса
Мэри Лу Хайнз (Mary Lou Hines) - Университет Миссури - Канзас-Сити
Ван Хауберт (Van Howbert) - Университет штата Колорадо
Айван Лисс (Ivan Liss) - Редфордский университет
Чарльз Оуэн (Charles Owen) - Дартмусский колледж
Уэйн Смит (Wayne Smith) - Университет штата Миссури
Тим Терман (Tim Thurman) - Университет Канзаса
Помимо просмотра рукописи, Чарльз Оуэн из Дартмусского колледжа предложил множество упражнений и проектов, которых не было в предыдущих изданиях. Также следует отметить вклад Джеймса С. Плезанта (James C. Pleasant) из Университета штата Теннеси в раздел, посвященный верификации программ.
Информация, собранная отделом исследования рынка компании Addison-Wesley, помогла сделать содержание данной книги наиболее оптимальным. Я благодарен многим преподавателям из различных колледжей и университетов, внесшим вклад в создание данной книги.
Кроме того, хочется поблагодарить за ценный вклад трех студентов из университета города Темпл (Tample). Кристиан Дж. Полицци (Christian J. Polizzi) протестировал все программы и внес в них необходимые коррективы. Он же проверял корректуру и индексировал текст, а также подготовил решения для упражнений. Донна Чрапкэла (Donna Chrupcala) готовила решения для упражнений и внесла в упражнения множество усовершенствований. А Билл Джоунз (Bill Jones) предложил несколько советов, касающихся упражнений с графикой. Персонал компании Addison-Wesley работал очень напряженно, чтобы соблюсти чрезвычайно жесткие сроки. Мои редакторы Линн Доран Коут (Lynne Doran Cote) и Сузан Хартман (Susan Hartman) принимали активное участие на всех этапах этого проекта. Им умело помогала Джули Данн (Julie Dunn), которая великолепно координировала работу автора с процессом редактирования. Технические редакторы Элизабет Заяц (Elizabeth Zayatz) и Марджори Сингер-Андерсон (Marjorie Singer-Anderson) предложили ценные советы, позволившие улучшить внешний вид страниц этой книги. Эми Уиллкатт (Amy Willcutt) контролировала производство книги. Я благодарен им всем за отличную работу.