Структурное программирование

1. Элементы блок-схем

Язык блок-схем – это язык формального графического представления алгоритмов.

  • начало;
начало
  • конец;
конец
  • ввод/вывод;
ввод/вывод
  • оператор;
оператор
  • условие;
условие
  • подзадача (вспомогательный алгоритм, который описывается отдельной блок-схемой, а в программе часто – отдельной подпрограммой).
подзадача

Только один элемент блок-схемы – «начало» – может иметь только выход, только один элемент – «конец» – может иметь только вход, и только один элемент – «условие» – может иметь два выхода, выбор из которых осуществляется с помощью условия.

Дополнительные элементы блок-схем:

  • узел – объединение ветвей (можно обозначать точкой);
узел
  • переход в точку А;
переход в точку А
  • переход из точки А.
переход из точки А

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

2. Структурное программирование

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

3. Базовые управляющие структуры

Следование

Ветвление

Все циклы позволяют осуществлять повтор некоторых действий.

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

4. Базисы Дейкстры и Вирты

Набор из следования, ветвления и цикла «пока» называется базисом Дейкстры, а набор из следования, ветвления и цикла «до» называется базисом Вирта. Базисы обладают свойствами полноты (любой алгоритм может быть реализован только из структур одного из базисов) и независимости (каждая из базисных структур не может быть представлена комбинацией 2-х других). Избыточный набор структур введён для удобства разработки программ.

5. Примеры комбинаций базовых управляющих структур

Возможно любое количество вложенных циклов.

Задание. Придумайте другие комбинации управляющих структур (не забывайте про следование).

6. Нисходящее и восходящее проектирование

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

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

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

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