Принципы структурного программирования
Становление и развитие структурного программирования связано с именем Эдсгера Дейкстры [10].
Принцип 1. Следует отказаться от использования оператора безусловного перехода GoTo.
Принцип 2. Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.
- • Последовательность — однократное выполнение операций в том порядке, в котором они записаны в тексте программы. Бертран Мейер поясняет: «Последовательное соединение: используйте выход одного элемента как вход к другому, подобно тому, как электрики соединяют выход сопротивления со входом конденсатора» [17].
- • Ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения заданного условия.
- • Цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется заданное условие (условие продолжения цикла).
Принцип 3. В программе базовые управляющие конструкции могут быть вложены друг в друга произвольным образом. Никаких других средств управления последовательностью выполнения операций не предусматривается.
Принцип 4. Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций). Таким же образом (в виде подпрограмм) можно оформить логически целостные фрагменты программы, даже если они не повторяются.
В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция «Вызов подпрограммы». При выполнении такой инструкции работает вызванная подпрограмма. После этого продолжается исполнение основной программы, начиная с инструкции, следующей за командой «Вызов подпрограммы».
Бертран Мейер поясняет: «Преобразуйте элемент, возможно, с внутренними элементами, в подпрограмму, характеризуемую одним входом и одним выходом в потоке управления».
Принцип 5. Каждую логически законченную группу инструкций следует оформить как блок (block). Блоки являются основой структурного программирования.
Блок — это логически сгруппированная часть исходного кода, например, набор инструкций, записанных подряд в исходном коде программы. Понятие блок означает, что к блоку инструкций следует обращаться как к единой инструкции. Блоки служат для ограничения области видимости переменных и функций. Блоки могут быть пустыми или вложенными один в другой. Границы блока строго определены. Например, в if-инструкции блок ограничен кодом BEGIN..END (в языке Паскаль) или фигурными скобками <. >(в языке C) или отступами (в языке Питон).
Принцип 6. Все перечисленные конструкции должны иметь один вход и один выход.
Произвольные управляющие конструкции (такие, как в блюде спагетти) могут иметь произвольное число входов и выходов. Ограничив себя управляющими конструкциями с одним входом и одним выходом, мы получаем возможность построения произвольных алгоритмов любой сложности с помощью простых и надежных механизмов.
Принцип 7. Разработка программы ведётся пошагово, методом «сверху вниз» (top-down method) [5].
1. Элементы блок-схем
Язык блок-схем – это язык формального графического представления алгоритмов.
Только один элемент блок-схемы – «начало» – может иметь только выход, только один элемент – «конец» – может иметь только вход, и только один элемент – «условие» – может иметь два выхода, выбор из которых осуществляется с помощью условия.
Дополнительные элементы блок-схем:
Элемент «узел» имеет два входа, но в каждый момент времени выполнение алгоритма идёт только одним путём, соответственно, используется только один из входов.
2. Структурное программирование
3. Базовые управляющие структуры
- Следование – последовательность любых операторов и/или структур.
- Ветвление (условный блок). Эта структура предназначена для выполнения различных действий в зависимости от значения некоторого условия. Она позволяет осуществлять выбор действий.
- Цикл. Эта структура предназначена для многократного выполнения некоторых действий. Существует два основных цикла и один дополнительный:
- цикл с предусловием (цикл «пока»);
- цикл с постусловием (цикл «до»);
- параметрический цикл.
Все циклы позволяют осуществлять повтор некоторых действий.
Обратите внимание на то, что в цикле с постусловием тело цикла всегда выполняется хотя бы один раз, тогда как в цикле с предусловием возможно, что условие сразу же будет ложным, и тело цикла не выполнится ни разу.
4. Базисы Дейкстры и Вирты
Набор из следования, ветвления и цикла «пока» называется базисом Дейкстры, а набор из следования, ветвления и цикла «до» называется базисом Вирта. Базисы обладают свойствами полноты (любой алгоритм может быть реализован только из структур одного из базисов) и независимости (каждая из базисных структур не может быть представлена комбинацией 2-х других). Избыточный набор структур введён для удобства разработки программ.
5. Примеры комбинаций базовых управляющих структур
Возможно любое количество вложенных циклов.
Задание. Придумайте другие комбинации управляющих структур (не забывайте про следование).
6. Нисходящее и восходящее проектирование
При нисходящем проектировании мы начинаем с общей задачи, разбиваем её на более простые подзадачи, которые в свою очередь, разбиваются на ещё более мелкие подзадачи – до тех пор, пока мы не сможем подзадачу очередного уровня выразить оператором языка программирования.
Достоинство нисходящего проектирования состоит в том, что оно позволяет разработчикам сосредоточиться на основных для данного этапа проблемах и отложить принятие всех тех решений, которые не должны приниматься на данном этапе проектирования. Нисходящее проектирование требует с самого начала ставить и решать наиболее фундаментальные задачи, откладывая частные вопросы для последующего рассмотрения.
Существует и противоположный подход, называемый восходящим проектированием. При восходящем проектировании алгоритм собирается из уже имеющихся кирпичиков-подзадач.
Нисходящее и восходящее проектирование обладают своими достоинствами и недостатками. Так, при нисходящем проектировании возможно появление требований, впоследствии оказывающихся нереализуемыми по технологическим, экологическим или иным соображениям. При восходящем проектировании возможно получение объекта, не соответствующего заданным требованиям. В реальной жизни, вследствие итерационного характера проектирования, оба его вида взаимосвязаны.
Какой принцип справедлив для структурного программирования



Скачай курс
в приложенииПерейти в приложение
Открыть мобильную версию сайта© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Основы программирования — тест 7

 (1) исключительной ситуацией, возникшей в процессе выполнения некоторого метода, называется ситуация, когда процесс вычислений не может быть продолжен нормальным способом и, следовательно, метод не может выполнить свой контракт 
 (2) причины возникновения исключительной ситуации могут быть разными – это может быть сбои в работе аппаратуры, сети передачи данных, отсутствие требуемого файла данных 
 (3) причины возникновения исключительной ситуации могут быть разными – это может быть невозможность выполнить операцию над пришедшими данными (попытка деления на ноль, извлечение квадратного корня из отрицательного числа и так далее) 
 (4) причины возникновения исключительной ситуации могут быть разными – это может быть исключение, определенное программистом, когда программа явно вызывает исключение 
 (5) исключительная ситуация широко используется программистами как еще одна управляющая структура, — некоторый вариант условного оператора 
Номер 3
Какое утверждение является неверным по отношению к механизму обработки исключительных ситуаций
Retry - resqueв языке Eiffel: (1) предложение Resque , принадлежащее методу, выполняется, когда в методе возникла исключительная ситуация 
 (2) если при выполнении предложения resque предопределенная булевская переменная Retry принимает значение True , то управление передается на повторное выполнение метода, который при повторном выполнении возможно удачно завершит свою работу, выполнив контракт 
 (3) если при выполнении предложения resque предопределенная булевская переменная Retry принимает значение False , то программа прекращает свою работу 
 (4) если при выполнении предложения resque предопределенная булевская переменная Retry принимает значение False , то вызывается исключение, но уже для метода, вызвавшего метод, приведший к возникновению исключительной ситуации. Подъем по цепочке вызовов методов может происходить вплоть до корневого метода. Если и корневой метод не может исправить ситуацию, то программа прерывает свою работу 
 (5) прежде чем стать причиной исключительной ситуации у вызывающего метода, в задачу Resque у метода, приведшего к отказу, входит восстановление инварианта класса 
Упражнение 8: Номер 1
Какие утверждения являются корректными?
 (1) управляющие структуры могут рассматриваться как приемы решения задач, сводя исходную, возможно сложную задачу, к совокупности более простых задач 
 (2) структурное программирование ввело принципы построения управляющих структур, основным из которых является принцип «одного входа и одного выхода» 
 (3) для доказательства корректности работы цикла используется инвариант цикла 
 (4) любой инвариант цикла годится для доказательства корректности цикла 
Номер 2Какое утверждение является некорректным?
 (1) управляющие структуры определяют порядок действий при выполнении программы 
 (2) программу с goto невозможно записать, используя только управляющие структуры структурного программирования 
 (3) теорема Бёма- Джакопини определяет минимальный набор управляющих структур, достаточный для записи любого алгоритма 
 (4) вариант цикла позволяет доказать завершаемость цикла 
Номер 3Какие утверждения являются корректными?
 (1) базисными структурами управления являются: составной оператор, задающий последовательное выполнение списка действий; условный оператор, задающий выполнение одного действия из списка действий в зависимости от выполнения некоторых условий; оператор цикла, задающий повторное выполнение действий 
 (2) согласно теореме о неразрешимости проблемы остановки ни для какой программы нельзя доказать ее завершаемость 
 (3) всякую программу с goto можно записать, используя базисные структуры управления 
 (4) на уровне машинных команд goto является полезной командой, входящей в состав команд любого компьютера 
 (5) исключительные ситуации могут возникать в корректно написанной программе по причинам, не зависящим от программиста