- •Введение
- •Глава 1. Организация и технология разработки прикладных программ Математическое обеспечение и его структура
- •Организация разработки прикладных программ
- •Технология разработки прикладных программ
- •Характеристики качества программного обеспечения
- •Структура курса и литература
- •Глава 2. Типы структурированных данных. Статические и динамические типы данных. Файловая структура
- •Типы данных
- •Представление структур в памяти эвм
- •Некоторые примеры представления данных
- •Техника доступа к информации записанной в файле
- •Глава 3. Основные этапы полного построения алгоритма
- •Глава 4. Некоторые основные приемы и алгоритмы
- •4.1 Структурное программирование сверху-вниз и правильность программ
- •4.2 Основные правила структурного программирования
- •4.3. Структурное программирование сверху-вниз: дополнительные соображения
- •4.4.Практические советы при использовании метода структурного программирования
- •1.4. Общая организация программы и ее запись
- •1.4. "Малый программистский стандарт"
- •5. Методы разработки алгоритма
- •5.1. Методы частных целей, подъема и отрабатывания назад
- •5.2 Метод эвристики
- •5.3 Программирование с отходом назад
- •5.4. Метод ветвей и границ
- •5.5. Рекурсия
- •5.6. Моделирование
- •Глава 6. Алгоритмы машинной математики больших массивов данных.
- •6.1. Сортировка
- •6.2. Сортировка массивов
- •6.3. Сортировка последовательностей.
- •6.4. Поиск
- •7. Документирование, сопровождение и эксплуатация программ.
- •7.1.Стандартизация, дисциплина и творчество в программировании.
- •7.2. Виды программ и программных документов
- •7.3. Основные стадии и этапы разработки программ и программной документации
Глава 4. Некоторые основные приемы и алгоритмы
При разработке программ есть несколько основных приемов, которыми должен уметь пользоваться каждый, кто разрабатывает и анализирует алгоритмы. В этой главе мы представим некоторые фундаментальные теоретические положения и алгоритмы из четырех различных областей: структурное программирование сверху-вниз, сети, структуры данных и вероятность и статистика.
4.1 Структурное программирование сверху-вниз и правильность программ
Традиционная технология программирования складывалась в условиях, когда основной областью применения ЭВМ были научные и инженерные расчеты, быстродействие и оперативная память были весьма ограничены, а необходимость сопровождения программ по существу не возникала. В качестве основного критерия оценки программы рассматривалась ее узкопонимаемая эффективность, которая не учитывала отрицательных последствий тех ухищрений, к которым прибегали программисты для ее достижения.
Применение подобной практики для современных программ, разрабатываемых подчас большими коллективами и являющимися по существу промышленными изделиями, которые необходимо испытывать, внедрять, эксплуатировать, сопровождать, вызывает целый ряд отрицательных последствий. Поэтому необходимо научно обосновывать методологию разработки и документирования сложных программ. Эта методология должна касаться анализа исходной задачи, разделения ее на достаточно самостоятельные части и программирования этих частей, по возможности, независимо друг от друга.
Одной из таких методологий, зародившейся в начале 70-х годов и получивших в последнее время широкое распространение и признание, является структурное программирование. По сути своей, структурное программирование, является воплощением принципов системного подхода в процессе создания и эксплуатации систем математического обеспечения ЭВМ. В основу структурного программирования положены следующие достаточно простые положения:
1. Программа должна создаваться мелкими шагами. Размер шага определяется количеством решений, применяемых программистом на этом шаге.
2. Сложная задача должна разбиваться на достаточно простые, легко воспринимаемые части, каждая из которых имеет только один вход и один выход.
3. Логика программы должна опираться на минимальное количество достаточно простых базовых управляющих структур, подобно тому как любая функция алгебры логики может быть выражена через функционально полную систему (например, дизъюнкцию, конъюнкцию, отрицание).
В дальнейшем будет показано, что использование этих положений позволяет внести определенную систему в труд программиста и составлять удобочитаемые программы, которое можно изучать и проверять, последовательно читая небольшие одностраничные сегменты программного текста. Не менее существенным является то, что использование базовых управляющих структур существенно упрощает доказательство правильности программы.
Идеи структурно программирования в наиболее полной форме были высказаны Э.Дейкстрой, однако они опираются на работы К.Бема, Г.Джекопини, П.Наура и Р.Флойда.
Фундаментом структурного программирования является доказанная Бемом и Джекопини теорема о структурировании. Эта теорема устанавливает: как бы ни была сложна задача, блок-схема соответствующей программы всегда может быть представлена с использованием весьма ограниченного числа элементарных управляющих структур, например:
f THEN g IF p THEN f ELSE g WHILE p DO f
(следования) (ветвления) (цикла)
Эти элементарные структуры могут соединяться между собой, образуя более сложные структуры, по тем же самым элементарным схемам. При этом f и g могут являть собой довольно сложные блок-схемы с одним входом и одним выходом, построенные из таких же элементарных структур.
На сегодняшний день самой популярной методикой, по-видимому, следует считать структурное программирование сверху-вниз. В данном разделе мы введем основные идеи этой методики и проиллюстрируем ее на примере.