Структурное программирование: три базовые конструкции.
Работа Бома и Джакопини показала, что все программы могут быть написаны с использованием всего трёх управляющих структур, названных структура следования, структура выбора и структура повторения.
Любая программа представляет собой иерархическую структуру, построенную из трёх типов базовых конструкций:
- структура следования — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
- структура выбора — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
- структура повторения — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие.
Структура следования встроена в C++. Пока не указано иное, компьютер выполняет операторы C++ один за другим в той последовательности, в которой они записаны.
C++ обеспечивает три типа структур выбора альтернатив:
СМОТРЕТЬ ВСЕМ! Как написать курсовую за 20 мин с нуля и уникальностью 80% Показываем в режиме онлайн
- Структура выбора if выполняет некоторое действие, если проверяемое условие истинно, или пропускает его, если условие ложно. Она также называется структура с единственным выбором, поскольку она выбирает или игнорирует единственное действие.
- Структура выбора if/else выполняет одно действие, если условие истинно, и выполняет другое действие, если оно ложно. Она также называется структура с двойным выбором, поскольку осуществляет выбор между двумя различными действиями.
- Структура выбора switch выполняет одно из множества действий в зависимости от значения проверяемого выражения. Она также называется структура с множественным выбором, поскольку осуществляет выбор среди множества различных действий.
C++ обеспечивает три типа структур повторения, называемых:
- Структура повторения while выполняет действие, пока проверяемое условие истинно.
- Структура повторения do/while похожа на структуру повторения while. Сперва выполняется действие, а затем проверяется условие. Действия выполняется до тех пор, пока условие истинно.
- Структура повторения for позволяет выполнить заданное действие для всех значений параметра.
И это всё. C++ имеет только семь управляющих структур: следование, три типа выбора и три типа повторения. Любая программа на C++ формируется из такого количества комбинаций каждого типа управляющих структур, которое нужно для осуществления соответствующего алгоритма.
Основные операторы.
Ссылки – особый тип данных, являющийся скрытой формой указателя, который при использовании автоматически разименовывается. Ссылка может быть объявлена как другим именем, так и как псевдоним переменной, на которую ссылается.
// структура объявления ссылок
При объявлении ссылки перед её именем ставится символ амперсанда «, сама же ссылка должна быть проинициализирована именем переменной, на которую она ссылается. Тип данных, на который указывает ссылка, может быть любым, но должен совпадать с объектом, на который ссылается, то есть с типом данных ссылочной переменной. Для удобства, будем называть переменную, на которую ссылается ссылка «ссылочной переменной». Любое изменение значения содержащегося в ссылке повлечёт за собой изменение этого значения в переменной, на которую ссылается ссылка. Разработаем программу, в которой объявим ссылку на объект типа int.
Многомодульные программы. Межмодульные связи. Многоязыковые программы. 17 лекция
// №1.cpp: определяет точку входа для консольного приложения.
using namespace std;
int main(int argc, char* argv[])
int // объявление и инициализация ссылки значением переменной value
cout cout reference+=15; // изменяем значение переменной value посредством изменения значения в ссылке
В строке 10 объявлена ссылка reference типа int на переменную value. В строке 13 суммируется значение переменной value с числом 15, черезссылку reference. Результат работы программы (см. Рисунок 1).
Рисунок 1 — Ссылки в С++
Просмотрев результат работы программы можно сказать, что через ссылку меняется значение ссылочной переменной. Таким образом, сама ссылка не имеет как таковой копии значения взятой у переменной при инициализации ссылки, а всего лишь ссылка ссылается на ссылочную переменную посредством её адреса.
Ссылки, как правило, в большинстве случаев используют в функциях как ссылки-параметры или ссылки-аргументы. Напомню, что в языке программирования С++ в функции передаются данные по значению и по ссылке.
Так вот, когда происходит передача по значению, те данные, которые необходимо передать, нужно сначала скопировать, а когда передаётся большой объём данных, то только на передачу затрачивается большое количество времени и ресурсов. В таком случае необходимо использовать передачу по ссылке, в этом случае данные копировать нет необходимости, так как к ним обеспечен прямой доступ, но нарушают безопасность данных, хранимых в ссылочных переменных, так как открывают прямой доступ к этим данным.
Хотя далее мы рассмотрим, как обеспечить целостность данных и скорость их передачи. Для этого, разработаем программу, в которой создадим три функции, аргументы в которых будут передаваться по значению и по ссылке. Вдобавок ко всему этому ещё и передачу через указатель осуществим. Частенько возникает путаница между указателями и ссылками, на первый взгляд и ссылки и указатели работают одинаково, но разница все, же есть и весьма значительная.
Источник: studfile.net
Все программы могут быть написаны с использованием управляющих структур
С. Bohm and G. Jacopini, Flow Diagrams, Turing Machines, and Languages with Only Two Formation Rules , Communication of the ACM, Vol. 9, No. 5, May 1966, pp. 336-371.
Программы на псевдокоде не могут выполняться на компьютере. Их назначение — помочь программисту обдумать программу прежде, чем попытаться написать ее на таком языке программирования, как С-Ы-. В этой главе мы приведем несколько примеров того, как можно эффективно использовать псевдокод при создании структурированных программ на С++.
Тот псевдокод, который мы рассматриваем, состоит исключительно из символов, так что программист может писать на нем свои программы, используя любой текстовый редактор, и просматривать их на экране. Тщательно подготовленная программа на псевдокоде может быть легко преобразована в соответствующую программу на С++. Во многих случаях для этого достаточно просто заменить предложения псевдокода их эквивалентами в языке С++.
Псевдокод включает только исполняемые операторы — те, которые выполняются, когда программа переведена из псевдокода на С++ и запущена на счет. Объявления не являются исполняемыми операторами. Например, объявление
просто сообщает компилятору тип переменной i и дает указание зарезервировать для нее место в памяти. Но это объявление не вызывает при выполнении программы какого-то действия — ввода данных, их вывода или каких-нибудь вычислений. Некоторые программисты предпочитают составлять список переменных с кратким описанием их назначения и помещать его в начале программы на псевдокоде.
2.4. Управляющие структуры
Обычно операторы программы выполняются друг за другом в той последовательности, в которой они написаны. Это называется последовательным выполнением. Однако, как мы скоро увидим, различные операторы С++ позволяют программисту указать, что следующим должен выполняться не очередной оператор в тексте программы, а какой-то другой. Это называется передачей управления.
В 60-е годы стало ясно, что неограниченное использование передач управления является источником множества неприятностей при групповой разработке программного обеспечения. Вина была возложена на оператор goto, который позволяет программисту передавать управление в очень широких пределах. Идеи так называемого структурного программирования стали почти синонимами требования ке применять goto .
Исследование Бома и Джакопини* показало, что программы могут быть написаны без использования оператора goto. В результате для программистов настала эра перехода к стилю программирования с минимальным использованием goto . Такого не было до 70-х годов, пока программисты не стали серьезно применять структурное программирование. Результаты получились впечатляющие: группы разработчиков программного обеспечения сообщали, что время разработок сократилось, производительность труда выросла и проекты стали чаще укладываться в рамки бюджета. Ключом к успеху явилось то, что структурированные программы стали более прозрачными, легче под-
давались отладке и модификации и, что самое главное, в них стало меньше ошибок.
Работа Бома и Джакопини показала, что все программы могут быть написаны с использованием всего трех управляющих структур, названных структура следования, структура выбора и структура повторения. Структура следования встроена в C-i-+. Пока не указано иное, компьютер выполняет операторы C-I-I- один за другим в той последовательности, в которой они записаны. Фрагмент блок-схемы на рис. 2.1 иллюстрирует типичную структуру следования, в которой две вычислительных операции выполняются последовательно.
Блок-схема — это графическое представление алгоритма или фрагмента алгоритма. Блок-схема рисуется с использованием специальных символов, таких, как прямоугольники, ромбы, овалы и малые окружности; эти символы соединяются стрелками, называемыми линиями связи.
Подобно псевдокоду блок-схемы часто используются при разработке и описании алгоритмов, хотя большинство программистов предпочитает псевдокод. Блок-схемы наглядно показывают, как действуют управляющие структуры; поэтому мы будем использовать их в дальнейшем изложении.
добавить grade к total
добавить 1 к counter
total = total + grade counter = counter + 1
Рис. 2.1. Блок-схема структуры следования С++
Рассмотрим фрагмент блок-схемы структуры следования на рис. 2.1. Мы используем символ прямоугольника, называемый узлом обработки, чтобы обозначить какие-то действия, включая вычисления или операции ввода-вывода. Линии связи на рисунке показывают последовательность, в которой должны осуществляться операции обработки — сначала grade прибавляется к total, а затем 1 прибавляется к counter.
С++ позволяет нам иметь в структуре следования столько узлов обработки, сколько мы хотим. Как мы скоро увидим, везде, где можно поместить один узел обработки (один оператор), можно поместить последовательно и несколько узлов.
Когда рисуется блок-схема, представляющая полный алгоритм, то первым ее символом является символ овала, содержащий слово Начало ; символ овала, содержащий слово Конец , является последним символом. Когда рисуется только фрагмент алгоритма, как на рис. 2.1, символы овалов заменяются символами малых окружностей, называемых также символами слияния.
Наиболее важным символом блок-схем является, пожалуй, символ ромба, называемый также узлом проверки условия, который показывает, какое из
возможных решений принято. Мы рассмотрим символ ромба в следующем разделе.
С++ обеспечивает три типа структур выбора альтернатив; мы рассмотрим все их в данной главе. Структура выбора if выполняет некоторое действие (обработку), если проверяемое условие истинно, или пропускает его, если условие ложно. Структура выбора if/else выполняет одно действие, если условие истинно, и выполняет другое действие, если оно ложно. Структура выбора switch выполняет одно из множества действий в зависимости от значения проверяемого выражения.
Структура if (ЕСЛИ) называется структурой с единственным выбором, поскольку она выбирает или игнорирует единственное действие. Структура if/else (ЕСЛИ-ИНАЧЕ) называется структурой с двойным выбором, так как она осуществляет выбор между двумя различными действиями. Структура switch (ВЫБОР)называется структурой с множественным выбором, так как она осуществляет выбор среди множества различных действий.
С++ обеспечивает три типа структур повторения, называемых while (ПОКА), do/while (ЦИКЛ-ПОКА) и for (ЦИКЛ) Все приведенные слова, такие, как if, else, switch, while, do и for являются ключевыми словами С++. Ключевые слова зарезервированы в языке, чтобы отражать какие-то его особенности, в частности, управляющие структуры С++. Ключевые слова нельзя использовать как идентификаторы, например, для обозначения имен переменных. Полный список ключевых слов С++ приведен на рис. 2.2.
Типичная ошибка программирования 2.1
Использование ключевого слова в качестве идентификатора.
Источник: www.pmbk.ru
Способы записи алгоритмов
Прежде чем писать программу для решения конкретной задачи, необходимо досконально понять эту задачу и тщательно спланировать пути ее решения. Когда пишется программа, в равной степени важно понимать типы имеющихся в распоряжении строительных блоков и следовать апробированным методикам построения программ. В этой и следующих лекциях мы обсудим все эти вопросы в процессе знакомства с теорией и принципами структурного программирования.
Любая вычислительная задача может быть решена путем выполнения в определенном порядке некоторой совокупности операций. Процедура решения задачи, выраженная в категориях:
1. операций, которые должны выполняться, и
2. порядка, в котором эти операции должны выполняться,
Известны два способазаписи алгоритмов: псевдокод и блок-схема.
Псевдокод — это искусственный и неформальный язык, который помогает программистам разрабатывать алгоритмы. Псевдокод, который мы рассматриваем, часто используется для разработки алгоритмов, которые потом должны быть преобразованы в структурированные фрагменты программ на С++. Псевдокод подобен разговорному языку; он удобный и ясный, но это не язык программирования.
Программы на псевдокоде не могут выполняться на компьютере. Их назначение — помочь программисту «продумать программу», прежде чем пытаться написать ее на таком языке программирования, как С++. Тщательно подготовленная программа на псевдокоде может быть легко преобразована в соответствующую программу на С++. Во многих случаях для этого достаточно просто заменить операторы псевдокода их эквивалентами на С++.
Псевдокод обычно включает только исполняемые операторы — те, вызывают конкретные действия, когда программа переведена из псевдокода на С++ и запущена на компьютере. Обычно в псевдокод не включают объявления переменных. Однако некоторые программисты предпочитают составлять список переменных с кратким описанием их назначения и помещать его в начале программ на псевдокоде.
Блок-схема является графическим представлением алгоритма или части алгоритма. При рисовании блок-схемы используются некоторые символы специального назначения, такие как прямоугольники, ромбы, овалы и кружки; эти символы соединяются стрелками, называемыми линиями перехода.
При рисовании блок-схемы, представляющей полный алгоритм, первым символом, используемым в блок-схеме, является символ овала, содержащий слово «Начало»; символ овала, содержащий слово «Конец», является последним символом. При рисовании только части алгоритма, символы овалов опускаются и вместо них используются символы кружков, также называемые символами соединения.
Возможно, наиболее важным символом при составлении блок-схем является символ ромба, называемый символом принятия решения, который указывает на
Подобно псевдокоду, блок-схемы полезны для разработки и представления алгоритмов, хотя большинство программистов предпочитают псевдокод. На блок-схемах ясно видно, как действуют управляющие структуры; собственно, ради этого и используют их.
3.4. Управляющие структуры
Обычно операторы программы выполняются друг за другом в той последовательности, в которой они написаны. Это называется последовательным исполнением. Однако некоторые операторы С++, которые мы будем здесь обсуждать, позволяют программисту указать, что следующим должен выполняться не очередной оператор в последовательности, а какой-то другой. Это называется передачей управления.
В 60-е годы стало ясно, что неосторожное использование передач управления является источником множества трудностей при групповой разработке программного обеспечения. Вина была возложена на оператор goto, который позволяет программисту передавать управление в очень широких пределах (что приводит к коду, который иногда называют «лапшой»). Понятие так называемого структурного программирования стало почти синонимом «исключения goto».
Исследование Бома и Джакопини [1] показало, что программы могут быть написаны без использования оператора goto. В результате для программистов настала эра перехода к стилю программирования «с минимальным использованием goto». Но только в 70-х годах программисты стали принимать структурное программирование всерьез. Результаты получились впечатляющие: группы разработчиков программного обеспечения сообщали, что время разработок сократилось, производительность труда выросла, и проекты стали чаще укладываться в рамки бюджета. Ключом к успеху явилось то, что структурированные программы стали более прозрачными, легче поддавались отладке и модификации и, что самое главное, в них стало меньше ошибок.
Работа Бома и Джакопини показала, что все программы могут быть написаны с использованием всего трех управляющих структур, а именно, последовательной структуры, структуры выбора и структуры повторения. Термин «управляющие структуры» взят из компьютерной теории. Когда мы будем представлять реализацию управляющих структур в С++, мы, в соответствии с терминологией стандартного
Последовательная структура встроена в С++. Если не указано иначе, компьютер автоматически выполняет операторы С++ один за другим в порядке их записи.
Структуры выбора используются для избрания одного из альтернативных направлений действий.
Структура повторения – это многократное повторение одних и тех же действий для решения задачи. На практике это реализуется либо с помощью рекурсии либо с помощью итерации. Итерация — это повторение одних и тех же действий определенное количество раз. Основным методом итерации является цикл.
Управляющие структуры могут присоединяться друг к другу путем соединения точки выхода одной управляющей структуры, с точкой входа последующей. Этот способ соединения структур называется суперпозицией управляющих структур. Существует еще только один способ их соединения — метод, называемый вложением управляющих структур. Таким образом, любая программа на языке C++ может быть построена из различных типов управляющих структур, объединенных одним из двух возможных способов.
3.5 Операторы выбора в С++
Язык С++ предоставляет программисту три типа структур выбора в форме операторов. В операторе выбора if некоторое действие либо выполняется (выбирается), если условие истинно, либо пропускается, если это условие ложно. В операторе выбора if..else некоторое действие выполняется, если условие истинно, и выполняется другое действие, если это условие ложно. В операторе выбора switch выполняется одно из набора различных действий в зависимости от значения некоторого выражения. В языке С++ также существует четвертый оператор выбора — тернарный условный оператор ?:, который является альтернативой оператору if..else.
Оператор if является структурой с одиночным выбором, поскольку в нем выбирается или игнорируется одно действие. Оператор if..else является структурой с двойным выбором, поскольку в нем выбор происходит между двумя альтернативными действиями. Оператор switch является структурой с множественным выбором, поскольку в нем выбор происходит из нескольких различных действий.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru