Принципы структурного программирования

1. Разработка алгоритма «сверху вниз» (метод пошаговой детализации).

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

2. Модульность.

Метод пошаговой детализации дает возможность разбить алгоритм на части (модули), каждая из которых решает самостоятельную подзадачу. Размеры модулей должны быть небольшими, а инструкции, входящие в состав модуля, должны давать исчерпывающее представление о действиях, выполняемых модулем. Связи по управлению между модулями осуществляются посредством обращений к ним, а обмен информацией - через параметры и глобальные переменные.

3. Каждый модуль должен иметь один вход и один выход.

Это позволяет упростить стыковку модулей в сложной программе.

4. Логика алгоритма должна опираться на небольшое число достаточно простых базовых управляющих структур:

1. Следование

 
 


2 Развилка

3. Цикл:

а) цикл с предусловием б) цикл с постусловием

       
 
   
 


4. Выбор из нескольких альтернатив (переключатель)

 
 


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

Теорема о полноте. Базовые элементарные структуры: следование, разветвление и цикл - обладают функциональной полнотой, то есть любой алгоритм может быть реализован в виде композиции этих конструкций.

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

Требуется определить, пройдет ли кирпич с ребрами a, b и c в прямоугольное окно со сторонами х, у. Грани кирпича должны быть параллельны или перпендикулярны сторонам окна.

Если бы стороны окна и ребра кирпича были упорядочены, то для решения задачи достаточно сравнить меньшую сторону с меньшим ребром и большую сторону со средним ребром.

Выделяем подзадачи:

1. Упорядочение пары чисел по неубыванию.

2. Упорядочение тройки чисел по неубыванию.

3. Определение, пройдет ли кирпич с ребрами a£b£c в прямоугольное окно со сторонами х £ у.

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

 
 


Спецификация алгоритма Sort2.

Sort2(а, b) сортирует пару вещественных чисел a и b по неубыванию.

Входные параметры: a, b - вещественные числа.

Выходные параметры: a, b, удовлетворяющие условию a £ b.

Аналогично описывается спецификация алгоритма Sort3.

Решение задачи сортировки пары заключается в обмене значениями переменных a и b,если a > b. Обмен значениями пары переменных - еще одна подзадача (подзадача подзадачи). Назовем эту подзадачу Swap.

4. ЯЗЫКИ ПРОГРАММИРОВАНИЯ

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

Каждая ЭВМ имеет свою систему команд, и программа в машинных кодах может быть выполнена сразу. Вначале язык машинных кодов был единственным языком программирования. Но использование этого языка - очень трудоемкий процесс, программы получаются громоздкими, их трудно отлаживать, модифицировать, практически невозможно перенести на другую ЭВМ. Возникла необходимость создания новых способов и средств записи программ. Стали появляться новые языки программирования. Их создание шло по двум направлениям: машинно ориентированные и машинно независимые (алгоритмические) языки. Машинно ориентированные языки (ассемблер, автокод) - языки низкого уровня, требующие указания мелких деталей процесса обработки данных. Алгоритмических языков - языков высокого уровня - в настоящее время более 500. Каждый язык имеет свои особенности, но есть ряд общих черт, отличающих алгоритмические языки от языков низкого уровня:

1. Алгоритмические языки обладают большими выразительными возможностями, имея широкий алфавит, что повышает наглядность текста программ.

2. Набор операций не зависит от машинных операций, а выбирается для удовлетворения потребностей конкретной прикладной области.

3. Операции задаются в удобном виде.

4. Одним предложением можно задать значительный этап обработки данных.

5. Программным объектам, над которыми выполняются действия, присваиваются имена, и обращение к ним происходит по имени.

6. В алгоритмических языках предусмотрен широкий набор типов данных.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: