- •Тема 3. Технология разработки алгоритмов и программ.
- •3.1. Основные этапы разработки программного обеспечения.
- •3.2. Проектирование алгоритмов.
- •3.2.1. Требования к алгоритмам.
- •3.2.2. Временная и емкостная сложность алгоритмов.
- •3.2.3. Алгоритмы полиномиальной сложности и np-полные алгоритмы.
- •3.2.4. Эвристические алгоритмы.
- •3.2.5. Итеративные и рекурсивные алгоритмы.
- •3.2.6. Восходящий и нисходящий методы проектирования алгоритмов.
- •3.2.7. Базовые управляющие структуры алгоритмов и структурное прог-
- •3.2.8. Модульный метод разработки алгоритмов.
- •3.3. Проектирование данных.
- •3.3.1. Типы данных и объекты данных.
- •3.3.2. Классификация типов данных в системе программирования Turbo
- •Integer -32768 .. 32767 16 битов со знаком
- •3.3.3. Основные структуры данных и их представления.
- •3.4. Отладка и тестирование программ.
- •3.4.1. Классификация ошибок в программах.
- •3.4.2. Цели и задачи отладки и тестирования.
- •3.4.3. Основные возможности интегрированного отладчика системы
3.2.8. Модульный метод разработки алгоритмов.
Неформально модульная программа - это такая программа, в которой
любую часть логической структуры можно изменить, не вызывая изменений в
остальных частях программы. Одним из более абстрактных понятий, связан-
ных с модульностью, является понятие независимости: в модульной програм-
ме каждый модуль является независимой единицей компиляции. Законченная
теория модульности не является общепринятой и в значительной степени за-
висит от языка программирования (системы программирования). Обычно тео-
рия модульности формулируется на языке структурного программирования,
которое было рассмотрено в предыдущем пункте. Тем не менее существует
некоторое число специальных приемов, которые обычно позволяют успешно
строить модульные программы:
- разбивайте Ваши програмы на малые независимые подпрограммы. Необ-
ходимо постоянно стремиться выделять функциональный характер подпрограм-
мы; каждая подпрограмма должна иметь определенное назначение, которое
более или менее не зависит от других подпрограмм программы.
- используйте символьные параметры для констант;
- отделяйте действия по вводу-выводу от вычислительных операций;
- не пользуйтесь общей областью памяти. Обычно значительно проще
отлаживать программу, если каждому модулю отводится локализованная об-
ласть для хранения промежуточных результатов.
3.3. Проектирование данных.
Фактором, сравнимым по значению с выбором алгоритма, является про-
ектирование данных. Следует выбирать такое представление данных, которое
наилучшим образом соответствует рассматриваемой задаче. Имеется немало
литературных источников, где рассматриваются различные типы и структуры
данных, например, трехтомник Д. Кнута "Искусство программирования для
ЭВМ". Почти все структуры данных могут быть смоделированы на любом язы-
ке, и эти методы обсуждаются в упомянутых книгах, но лучше использовать
тот язык программирования, в конструкциях которого предусмотрена нужная
Вам структура данных.
3.3.1. Типы данных и объекты данных.
Данные в языках программирования группируются во взаимоисключающие
классы, называемые типами данных. Тип данных определяется не как отдель-
ное независимое значение, а в рамках некоторой системы типов. Отвечая на
вопрос, "что такое тип?", - недостаточно сказать, например, "тип - это
множество значений", а надо установить, какими средствами строятся или
описываются множества как типы и как они соотносятся друг с другом.
Система типов обычно строится из некторых базисных типов, которыми явля-
ются множества с заданными свойствами, с помощью некоторых операций над
типами.
Суммируя сказанное, тип данных можно определить множеством значе-
ний, которыми могут обладать идентификаторы, объявленные как объекты
этого типа, и множеством операций, применяемых к объектам этого типа
данных. Следует отметить, что с "машинной" точки зрения тип данных - это
прежде всего шаблон их представления в памяти ЭВМ и определяемый этим
шаблоном способ доступа к данным и их частям.
Объекты данных бывают двух видов:
- постоянные (или константные), значения которых не изменяются в
процессе выполнения программы и
- переменные, которые вводятся для обозначения произвольных, зара-
нее неизвестных значений, возникающих в процессе выполнения программы.
Во всех языках программирования, за исключением самых простых, для
объектов данных вводят собственные имена. В простейшем случае в роли
имени выступает идентификатор; в общем случае идентификатору может быть
приписан специальный выделитель. Во многих языках программирования реко-
мендуется все объекты данных описывать с помощью операторов, принадлежа-
щих к классу описаний (деклараций, объявлений). По роли описания объек-
тов данных языки программирования делятся на языки с обязательными объ-
явлениями и необязательными объявлениями. Например, Turbo Pascal - язык
с обязательными объявлениями в том смысле, что каждый идентификатор,
используемый в программе, должен быть описан с помощью некоторого описа-
ния.
Описание любого объекта данных имеет ограниченную сферу действия
(область видимости). По сфере действия в тексте программы объекты данных
делятся на локальные и глобальные. Участки программы, в которых локали-
зуются объекты данных в разных языках устанавливаются по-разному. В язы-
ке Turbo Pascal, например, они соответствуют описаниям процедур и функ-
ций.
По способу распределения памяти объекты данных делятся на стати-
ческие и динамические. Статические данные создаются при их указании в
описании и уничтожаются в момент прекращения выполнения программы. Дина-
мические данные могут создаваться и уничножаться во время выполнения
программы. На динамические данные можно ссылаться, используя один или
более указателей.