В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
Теорема о структурном программировании:
Теорема Бома-Якопини
Любую схему алгоритм а можно представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и, может быть, дополнительных логических переменных (флагов).
Эта теорема была сформулирована итальянскими математиками К. Бомом и Дж. Якопини в 1966 году и говорит нам о том, как можно избежать использования оператора перехода goto.
История структурного программирования
Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственного усложнения программного обеспечения. В 70-е годы XX века объемы и сложность программ достигли такого уровня, что «интуитивная» (неструктурированная, или «рефлекторная») разработка программ, которая была нормой в более раннее время, перестала удовлетворять потребностям практики. Программы становились слишком сложными, чтобы их можно было нормально сопровождать, поэтому потребовалась какая-то систематизация процесса разработки и структуры программ.
Структурное программирование. Базовые принципы
Наиболее сильной критике со стороны разработчиков структурного подхода к программированию подвергся оператор GOTO (оператор безусловного перехода), имевшийся тогда почти во всех языках программирования. Неправильное и необдуманное использование произвольных переходов в тексте программы приводит к получению запутанных, плохо структурированных программ (т. н. спагетти-кода), по тексту которых практически невозможно понять порядок исполнения и взаимозависимость фрагментов.
Следование принципам структурного программирования сделало тексты программ, даже довольно крупных, нормально читаемыми . Об этом говорит сайт https://intellect.icu . Серьезно облегчилось понимание программ, появилась возможность разработки программ в нормальном промышленном режиме, когда программу может без особых затруднений понять не только ее автор, но и другие программисты. Это позволило разрабатывать достаточно крупные для того времени программные комплексы силами коллективов разработчиков, и сопровождать эти комплексы в течение многих лет, даже в условиях неизбежных изменений в составе персонала.
Методология структурной разработки программного обеспечения была признана «самой сильной формализацией 70-х годов». После этого слово «структурный» стало модным в отрасли, и его начали использовать везде, где надо и где не надо. Появились работы по «структурному проектированию», «структурному тестированию», «структурному дизайну» и так далее. В общем, произошло примерно то же самое, что происходило в 90-х годах и происходит в настоящее время с терминами «объектный», «объектно-ориентированный» и «электронный».
Перечислим некоторые достоинства структурного программирования:
Практика программирования: Парадигма структурного программирования. Центр онлайн-обучения «Фоксфорд»
- Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что еще важнее, облегчает понимание ее другими разработчиками.
- В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться безблок-схем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок-схемой).
- Сильно упрощается процесс тестирования и отладки структурированных программ.
процедурное программирование
Процедурное программирование — программирование на императивном языке, при котором последовательно выполняемые операторы можно собрать в подпрограммы, то есть более крупные целостные единицы кода, с помощью механизмов самого языка .
Процедурное программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит абстрактная вычислительная система под названием машина Тьюринга.
Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. Таким образом, с точки зрения программиста имеются программа и память, причем первая последовательно обновляет содержимое последней.
Процедурный язык программирования предоставляет возможность программисту определять каждый шаг в процессе решения задачи. Особенность таких языков программирования состоит в том, что задачи разбиваются на шаги и решаются шаг за шагом. Используя процедурный язык, программист определяет языковые конструкции для выполнения последовательности алгоритмических шагов.
Процедурные языки программирования
- Ada (язык общего назначения)
- Алгол 60
- Алгол 68
- Basic (до появления Visual Basic)
- Си
- КОБОЛ
- Фортран
- Модула-2
- HAL/S
- Pascal
- PureBasic
- ПЛ/1
- Рапира
- REXX
Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается.
После того, какпрограммист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причем разработка каждой подпрограммы ведется тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.
модульность программного кода
Модульность в языках программирования — принцип, согласно которому программное средство (ПС, программа, библиотека, веб-приложение и др.) разделяется на отдельные именованные сущности, называемые модулями. Модульность часто является средством упрощения задачи проектирования ПС и распределения процесса разработки ПС между группами разработчиков. При разбиении ПС на модули для каждого модуля указывается реализуемая им функциональность, а также связи с другими модулями.
Роль модулей могут играть структуры данных, библиотеки функций, классы, сервисы и др. программные единицы, реализующие некоторую функциональность и предоставляющие интерфейс к ней.
Программный код часто разбивается на несколько файлов, каждый из которых компилируется отдельно от остальных. Такая модульность программного кода позволяет значительно уменьшить время перекомпиляции при изменениях, вносимых лишь в небольшое количество исходных файлов, и упрощает групповую разработку. Также это возможность замены отдельных компонентов (таких как jar-файлы, so или dll библиотеки) конечного программного продукта, без необходимости пересборки всего проекта (например, разработка плагинов к уже готовой программе).
Одним из методов написания модульных программ является объектно-ориентированное программирование. ООП обеспечивает высокую степень модульности благодаря таким свойствам, как инкапсуляция, полиморфизм и позднее связывание.
Понятие алгоритма
Алгоритм — это четко определенный план (последовательность) действий.
- дискретность: состоит из отдельных шагов (команд)
- понятность: должен включать только команды, известные исполнителю (входящие в систему команд исполнителя)
- определенность: при одинаковых исходных данных всегда выдает один и тот же результат
- конечность: заканчивается за конечное число шагов
- массовость: может применяться многократно при различных исходных данных
- корректность: дает верное решение при любых допустимых исходных данных
Понятие программы
Программа – это
• алгоритм, записанный на каком-либо языке программирования
• набор команд для компьютера
Информационный процесс процесс получения, хранения, обработки и передачи информации с помощью компьютерных и других технических средств
Команда – это описание действий, которые должен выполнить компьютер.
- откуда взять исходные данные?
- что нужно с ними сделать?
- куда поместить резльтат?
Данные — информация любой природы, зафиксированная тем или иным способом
структуризация алгоритмических моделей
Структуризация моделей программ — — это структурное программирование в узком смысле, как оно зародилось в конце 60-х, иначе называемое программированием без go to(начало — статья Дейкстры 1965 г. «GO TO considered to be harmful»: частые ошибки кодирования — неправильная передача управления — вызваны скачками по тексту). Разрешены только три вида элементарных управляющих структур над функциональными блоками SN:
· Последовательность (составной оператор): S1; S2;
· Выбор (разветвление): if P then S1 else S2;
· Повторение (цикл): while P d oS1;
Каждая из этих стандартных структур имеет, как и функциональными блоками, один вход — один выход (два входа потребовали бы go to!), следовательно возможны эквивалентные преобразования для иерархической структуризации:
— функциональный блок- станд. структура (детализация)
— станд. структура — функциональный блок (обобщение)
Теоретическое обоснование возможности записи любого алгоритма с помощью только указанных трех ЭС — теорема Бома-Якопини (1966).
Запрет на go to часто приводит к потере эффективности. Например, следующее преобразование неструктурной блок-схемы в структурную путем дублирования блока В:
Дублирование кода В неэффективно по памяти, оформление В какподпрограммы — неэффективно по времени. Лишние проверки условий — в следующем примере преобразования рис.6-2.
Существует универсальный метод Ашкрофта-Манна (1971) автоматического преобразования любой блок-схемы в структурную (правда, крайне неэффективную и не наглядную); его можно считать конструктивным доказательством теоремы Бома-Якопини. Однако проще и лучше проектировать структурный алгоритм изначально.
Языки программирования делятся на структурные – содержащие конструкции трех стандартных структур управления, и неструктурные. К первым относятся все современные языки (в них список стандартных структур расширен добавлением операторовcase, forи repeat); некоторые из них вообще не содержат go to(Modula-2, BLISS, CLU). Ко вторым ассемблеры и первоначальный Фортран, Бейсик.
Чтобы избежать неэффективности, современные языки содержат “структурные” операторы перехода: не на метку, а в точку входа в объемлющий блок (break) или точку вызова подпрограммы (return), позволяя описывать преждевременный выход из цикла или подпрограммы. Подобным же образом оператор возбуждения исключения (механизм exception в Аде, CLU или С++) описывает переход не на метку, а по имени исключительной ситуации – на код ее обработки. В целом современный подход не рекомендует, но и не запрещает go to.
Виды парадигм программирования. Парадигмы программирования
Вообще строгого определения нет. но по сути парадигма программирования — это то, что определяет стиль написания исходного кода программ.
В некоторой степени “стиль” диктует так же способ формализации алгоритмов.
Вау!! Ты еще не читал? Это зря!
А как ты думаешь, при улучшении структурное программирование, будет лучше нам? Надеюсь, что теперь ты понял что такое структурное программирование, процедурное программирование, алгоритм, модульность, программа, структуризация алгоритмических моделей, структуризация и для чего все это нужно, а если не понял, или есть замечания, то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Алгоритмизация и программирование. Структурное программирование. Язык C
Источник: intellect.icu
9. Структурное программирование.
Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков (часть кода, которая сгруппирована и воспринимается как единое целое). Предложена в 70-х годах XX века Э. Дейкстрой.
В соответствии с данной методологией
- Любая программа представляет собой структуру, построенную из 3х типов базовых конструкций:
- последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
- ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
- цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
- Повторяющиеся фрагменты программы (либо представляющие собой логически целостные вычислительные блоки) могут оформляться в виде подпрограмм (идентифицированная часть компьютерной программы, содержащая описание определённого набора действий — процедур или функций). (Функция — это подпрограмма специального вида, которая, кроме получения парам-ов, выполнения действий и передачи результатов работы через параметры имеет возможность возвращать результат. Процедура — это независимая именованная часть программы, которую после однократного описания можно многократно вызвать по имени из последующих частей программы для выполнения определенных действия). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
- Разработка программы ведётся пошагово, методом «сверху вниз». Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (т.е. общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.
Теорема о структурном программировании: (Теорема Бома-Якопини).
Любую схему алгоритма можно представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и м/б дополнительных логических переменных (флагов). Эта теорема была сформулирована итальянскими математиками К.Бомом и Дж. Якопини в 1966 году и говорит о том, как можно избежать использование оператора перехода goto (оператор безусловного перехода, ПЕРЕЙТИ К. ).
Теорема Бёма-Якопини — положение СП, согласно которому любой исполняемый алгоритм может быть преобразован к структурированному виду, т.е. такому виду, когда ход его выполнения определяется только при помощи 3х структур управления: последовательной (sequence), ветвлений (selection) и повторов или циклов (repetition, cycle).
Обоснование теоремы:
1. В последовательной структуре инструкции выполняются в том порядке, как они записаны в программе, т. е. одна за другой.
Подпрограмма 1 /* последовательное выполнение инструкций 1, 2 ..N…. */
Конец Подпрограммы 1.
2. В структуре ветвлений последовательность выполнения инструкций зависит от заданного, чаще всего логической переменной, условия.
Подпрограмма 2 /* ветвлений – Выбор инструкции согласно условию */
Если условие 1 то Инструкция 1; /* выполняется, если истинно условие 1 */
Если условие 2 то Инструкция 2; /* выполняется, если истинно условие 2 */
Иначе Инструкция N; /* выполняется, если не ни одно из условий не является истинным */ .
Конец Подпрограммы 2.
3. В циклах инструкции повторяются до тех пор пока не изменится некое условие, например значение логической переменной.
Подпрограмма 3 /* цикл */
Пока условие N выполнить Инструкция N /* цикл повторяется пока верно условие N */
Инструкция N + 1 /* выход из цикла по нарушению условия N */
Конец Подпрограммы 3
Достоинства структурного программирования:
1. Оно позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и облегчает понимание её другими разработчиками. 2. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться без блок-схем и других графических форм изображения алгоритмов (сама программа является собственной блок-схемой).
3. Сильно упрощается процесс тестирования и отладки структурированных программ.
Источник: studfile.net
Информатика экзамен 1 курс
Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.
В соответствии с данной методологией
1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
· последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
· ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
· цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм(процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
Разработка программы ведётся пошагово, методом «сверху вниз».
Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается.
После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.
Источник: informatikaekzamen1kurs.blogspot.com