Глава 2
Правило 2
Т
Правило 2
Рис. 2.35. Повторное применение правила 2 к простейшей блок-схеме
/ Правило 3 ...J
Рис. 2.36. Повторное применение правила 3 к простейшей блок-схеме
Управляющие структуры
145
Правило 4 позволяет генерировать большие, сложные структуры с произвольным уровнем вложенности. Блок-схемы, возникающие в результате применения правил рис. 2.33, составляют множество всех возможных структурированных блок-схем и, следовательно, множество всех возможных структурированных программ.
Прелесть структурного подхода в том, что мы используем всего семь простых фрагментов с одним входом и одним выходом и соединяем их всего двумя простыми способами. Рис. 2.37 показывает пакеты стандартных блоков, которые создаются при применении правила 2, и вложение стандартных блоков, которые создаются при применении правила 3. Этот рисунок показывает также частично перекрывающиеся стандартные блоки, которые не могут появиться в структурированных блок-схемах, поскольку игнорируется оператор goto.
Если следовать правилам рис. 2.33, неструктурированные блок-схемы (подобные приведенным на рис. 2.38) не могут быть созданы. Если вы сомневаетесь, является ли некоторая конкретная блок-схема структурированной, примените правила рис. 2.33 в обратной последовательности и попытайтесь свернуть блок-схему к простейшей. Если блок-схема свернется к простейшей, значит исходная блок-схема структурирована, в противном случае — нет.
Структурное программирование стимулирует простоту. Бом и Джакопини доказали, что достаточно всего трех форм управления:
Следование
Выбор
Повторение
Пакетированные стандартные блоки
Вложенные стандартные блоки
Частично перекрывающиеся стандартные блоки (недопустимые в структурированных программах)
Рис. 2.37. Пакетированные, вложенные и частично перекрывающиеся стандартные блоки
146
- 116 Глава 2
- 2.13. Основы повторения, управляемого счетчиком
- 2.14. Структура повторения for (цикл)
- 120 Глава 2
- 122 Глава 2
- 2.15. Пример использования структуры for
- 124 Глава 2
- 126 Глава 2
- 2.16. Структура множественного выбора switch
- Глава 2
- 130 Глава 2
- 132 Глава 2
- 2.17. Структура повторения do/while
- 134 Глава 2
- 2.18. Операторы break и continue
- Глава 2
- 2.19. Логические операции
- 138 Глава 2
- Глава 2
- 2.21. Заключение по структурному программированию
- IfcrpyKTypa (единственный выбор)
- Глава 2
- Глава 2
- 148 Глава 2
- Глава 2
- Глава 2
- Глава 2
- 156 Глава 2
- 158 Глава 2
- 160 Глава 2
- 2.1. А) следование, выбор и повторение, b) if/else. С) управляемым счет чиком или определенным заранее, d) Метку, сигнал, флаг или лож ный сигнал.
- 162 Глава 2
- 164 Глава 2
- 166 Глава 2
- 168 Глава 2
- 170 Глава 2
- 172 Глава 2
- 174 Глава 2
- 176 Глава 2
- 178 Глава 3
- Глава 3
- 3.3. Математические библиотечные функции
- 3.4. Функции
- Глава 3
- 3.5 Определения функций
- 184 Глава 3
- 186 ГлаваЗ
- 3.6. Прототипы функций
- 188 Глава 3
- 3.7. Заголовочные файлы
- 3.8. Генерация случайных чисел
- Глава 3
- 192 Глава 3
- 194 Глава 3
- 3.9. Пример: азартная игра
- Глава 3
- 198 Глава 3
- 3.10. Классы памяти
- 200 Глава 3
- 3.11. Правила, определяющие область действия
- 202 Глава 3
- 204 Глава 3
- 3.12 Рекурсия
- Глава 3
- 6) Значения, возвращаемые после каждого рекурсивного вызова
- 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
- Глава 3
- 3.14. Рекурсии или итерации
- 212 Глава 3
- Глава 3
- Глава 4
- Глава 5
- Глава 6
- 3.15. Функции с пустыми списками параметров
- 214 Глава 3
- 3.16. Встраиваемые функции