- •Тема 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.3.3. Основные структуры данных и их представления.
Структура данных - это группа из одного или более элементов данных,
которые структурно связаны между собой. Если некоторые данные в структу-
ре сами являются структурами данных, то образуется многоуровневая иерар-
хическая структура данных. Существует большое разнообразие структур дан-
ных, среди которых можно выделить три основных:
- списки, структурные свойства которых ограничены лишь относитель-
ным расположением элементов;
- деревья, образующие иерархические структуры, в которых каждый
подчиненный элемент имеет только один предшествующий элемент;
- графы, которые представляют наиболее общий случай связей между
элементами типа "исходный-порожденный". В графе любой элемент может быть
связан с любым другим элементом.
Разработка структур данных осуществляется в два этапа. На первом
этапе, называемом логическим (или концептуальным), определяется упрощен-
ная логическая структура данных. На втором этапе, называемом физическим
(или реализационным), определяется отображение логической структуры дан-
ных в памяти ЭВМ для ее последующей обработки прикладными программами.
Пример организации линейного двунаправленного связанного списка:
На рисунке приведено условное изображение списка.
+--------+ +--------+ +--------+
| | | | | |
+--------+ +--------+ +--------+
| nil |<--------* |<---- ... <--------* |
+--------+ +--------+ +--------+
| *--------->| *---------> ... ---->| nil |
+--------+ +--------+ +--------+
Каждый элемент двунаправленного списка содержит указатель на следу-
ющий элемент этого списка и на предыдущий элемент этого списка. Указа-
тель на следующий элемент в последнем элементе содержит nil. Указатель
на предыдущий элемент в первом элементе содержит nil.
Необходимые объявления для организации такого списка на языке Turbo
Pascal будут иметь вид:
type ElemPtr = ^Elem;
Elem = record
...
Prev: ElemPtr;
Next: ElemPtr;
end; -
3.4. Отладка и тестирование программ.
Испытания любой программной системы всегда представляют собой один
из наиболее ответственных этапов ее разработки и часто бывают связвны с
наибольшими трудностями и наибольшими потерями времени. Отладка и тести-
рование - это два четко различимых и непохожих друг на друга этапа. В
первом случае происходит устранение синтаксических ошибок и явных ошибок
кодирования. Во втором случае имеют дело с программой, не содержащей от-
меченных ошибок, которая выдает какие-то правильные результаты. Основная
цель выделения отладки и тестирования как отдельных этапов создания
программы заключается в том, чтобы обратить внимание на обязательность
обеих стадий и на необходимость специального планирования временных зат-
рат по каждой из них в отдельности.