Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию 1.doc
Скачиваний:
307
Добавлен:
11.04.2015
Размер:
27.08 Mб
Скачать

Глава 4. Некоторые основные приемы и алгоритмы

При разработке программ есть несколько основных приемов, которыми должен уметь поль­зоваться каждый, кто разрабатывает и анализирует алгоритмы. В этой главе мы представим некоторые фундаментальные теоретиче­ские положения и алгоритмы из четырех различных областей: струк­турное программирование сверху-вниз, сети, структуры данных и вероятность и статистика.

4.1 Структурное программирование сверху-вниз и правильность программ

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

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

Одной из таких методологий, зародившейся в начале 70-х годов и получивших в последнее время широкое распространение и признание, является структурное программирование. По сути своей, структурное программирование, является воплощением принципов системного подхода в процессе создания и эксплуатации систем математического обеспечения ЭВМ. В основу структурного программирования положены следующие достаточно простые положения:

1. Программа должна создаваться мелкими шагами. Размер шага определяется количеством решений, применяемых программистом на этом шаге.

2. Сложная задача должна разбиваться на достаточно простые, легко воспринимаемые части, каждая из которых имеет только один вход и один выход.

3. Логика программы должна опираться на минимальное количество достаточно простых базовых управляющих структур, подобно тому как любая функция алгебры логики может быть выражена через функционально полную систему (например, дизъюнкцию, конъюнкцию, отрицание).

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

Идеи структурно программирования в наиболее полной форме были высказаны Э.Дейкстрой, однако они опираются на работы К.Бема, Г.Джекопини, П.Наура и Р.Флойда.

Фундаментом структурного программирования является доказанная Бемом и Джекопини теорема о структурировании. Эта теорема устанавливает: как бы ни была сложна задача, блок-схема соответствующей программы всегда может быть представлена с использованием весьма ограниченного числа элементарных управляющих структур, например:

f THEN g IF p THEN f ELSE g WHILE p DO f

(следования) (ветвления) (цикла)

Эти элементарные структуры могут соединяться между собой, образуя более сложные структуры, по тем же самым элементарным схемам. При этом f и g могут являть собой довольно сложные блок-схемы с одним входом и одним выходом, построенные из таких же элементарных структур.

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