Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Этот результат установлен Боймом и Якопини еще в 1966 году путем доказательства того что любую программу можн

Работа добавлена на сайт samzan.net: 2016-03-30

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 19.5.2024

44

 В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из трёх структур, называемых следованием, ветвлением и циклом. Этот результат установлен Боймом и Якопини еще в 1966 году путем доказательства того, что любую программу можно преобразовать в эквивалентную, состоящую только из этих структур и их комбинаций.

Следование, ветвление и цикл называются базовыми конструкциями структурного программирования. Следованием называется конструкция, предоставляющая собой последовательное выполнение двух или более операторов (простых или составных). Ветвление задает выполнение либо одного, либо другого оператора в зависимости от выполнения какого-либо условия. Цикл задает многократное выполнение оператора. Особенностью базовых конструкций является то, что любая из них имеет только один вход и один выход, поэтому конструкции могут вкладываться друг в друга произвольным образом, например, цикл может содержать следование из двух ветвлений, каждое из которых включает вложенные циклы.

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

Уловный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:

 if ( выражение ) оператор_1; [else опрератор_2;]

Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется первый оператор, иначе – второй. После этого управление передается на оператор, следующий за условным.

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

Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Формат оператора:

switch ( выражение ) {

case константное_выражение_1: [список_операторов_1]

 case константное_выражение_2: [список_операторов_2]

 case константное_выражение_n: [список_операторов_n]

[default: операторы]

}

Выполнение оператора начинается с вычисления выражения (он должно быть целочисленным), а затем управление передается первому оператору из списка, помеченного константным выражением, значение которого совпало с вычисленным. После этого, если выход из переключателя явно не указан, последовательно выполняются все остальные ветви. Выход из переключателя обычно выполняется с помощью операторов break или return. Оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do. Оператор return выполняет выход из функции, в теле которой он записан.

Все константные выражения должны иметь разные значения, но быть одного и того же целочисленного типа. Несколько меток могут следовать подряд. Если совпадения не произошло, выполняются операторы, расположенные после слова default (а при его отсутствии управление передается следующему за switch оператору).

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

Один проход цикла называется итерацией. Проверка условия выполняется на каждой итерации либо до тела цикла (тогда говорят о цикле с предусловием), либо после тела цикла (цикл с постусловием). Разница между ними состоит в том, что тело цикла с постусловием всегда выполнится хотя бы один раз., после чего проверяется , надо ли его выполнять еще раз. Проверка необходимости выполнения цикла с предусловием делается до тела цикла, поэтому возможно, что он не выполнится ни разу.

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

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

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue, return, goto. Передавать управление извне внутрь цикла не рекомендуется.

Для удобства, а не по необходимости, в С++ есть три разных оператора цикла – while, do while, for.

Цикл с предусловием имеет вид:

while ( выражение ) оператор;

Выражение определяет условие повторения тела цикла, представленного простым или составным оператором. Выполнение оператора начинается с вычисления выражения. Если оно истинно ( не равно false ), выполняется оператор цикла. Если при первой проверке выражение равно false, цикл не выполняется ни разу. Тип выражения должен быть арифметическим или приводимым к нему. Выражение вычисляется перед каждой итерацией цикла.

Распространенный прием программирования – организация бесконечного цикла с заголовком while( true ) либо while( 1 ) и принудительным выходом из тела цикла по выполнению какого-либо условия.

В круглых скобках после ключевого слова while можно вводить описание переменной. Область ее видимости является цикл:

while( int x = 0 ) { /* область видимости x */ }

Цикл с постусловием имеет вид:

do оператор while выражение;

Сначала выполняется простой или составной оператор, составляющий тело цикла, а затем вычисляется выражение. Ели оно истинно ( не равно false ), тело цикла выполняется еще один раз. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управления. Тип выражения должен быть арифметическим или приводимым к нему.

Цикл с параметром имеет следующий формат:

for( инициализация; выражение; модификации ) оператор;

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

Областью действия переменных, объявленных в части инициализации цикла, является цикл. Инициализация выполняется один раз в начале исполнения цикла.

Выражение определяет условие выполнения цикла: если его результат, приведенный к типу bool, равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.

Модификации выполняются после каждой итерации цикла и служат для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую. Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запятой надо оставить на своих местах).

Оператор безусловного перехода goto имеет формат:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор. Метка – это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.

Использование оператора безусловного перехода оправдано в двух случаях:

  1.  принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
  2.  переход из нескольких мест функции в одно (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).

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

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

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

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

Любая программа на С++ состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы). Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена. Как и для других величин, объявлений может быть несколько, а определение только одно. Объявление функции должно находиться в тексте раньше ее вызова для того, чтобы компилятор мог осуществить проверку правильности вызова.

Объявление функции (прототип, заголовок, сигнатура) задает имя, тип возвращаемого значения и список передаваемых параметров. Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:

[ класс ] тип имя ([ список_параметров ])[throw ( исключения )]

{ тело функции }

Передача аргументов.

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

Если в функцию требуется передать внешний по отношению к ней объект, то при указании соответствующего ее формального аргумента следует использовать типы указателей или ссылок.

Если требуется сделать передаваемый объект неизменяемым внутри функции, то следует при указании формального аргумента использовать спецификатор const.

Массивы в качестве аргументов.

Если в функцию требуется передать одномерный массив, то в качестве ее формального аргумента удобно использовать указатель на элемент массива. Тогда в функцию следует передавать адрес начального элемента массива и, если требуется, размер массива. Пример передачи массива в качестве аргумента функции:

double summ(const double *pd, const size_t n) {

double s(0.0);

for(size_t i = 0; i < n; i++)

 s += pd[i];

return s;

}

void main() {

const size_t N(5);

double vd[N] = {1.1, 2.2, 3.3, 4.4, 5.5};

double s = summ(vd, N);

cout << s << endl;

}

Можно в примере вместо «const double *pd» написать «const double pd[]» (причем в квадратных скобках можно указать любое целочисленное константное выражение), однако это ровным счетом ничего не меняет. Поэтому такая запись выглядит более запутанной, и значит, является непредпочтительной.

Размер массива не требуется передавать в функцию, если он может быть вычислен на основании самого массива каким-либо образом, как, например, это обеспечивается при работе с С-строками.

Применение многомерных массивов усложняет программирование на С++. Основные сложности здесь возникают при передаче многомерного массива в функцию.

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

// Вывод на консоль матрицы размера m x n.

void OutMatr(const double *pd, const size_t m, const size_t n) {

size_t i, j, k;

for(i = 0; i < m; i++) {

 k = i * n;

 for(j = 0; j < n; j++)

  cout << ‘ ‘ << pd[k + j];

 cout << endl;

}

}

void main() {

const size_t M(4), N(3);

double matr[M][N] = {

 {1.1, 2.2, 3.3},

 {2.2, 3.3, 4.4},

 {3.3, 4.4, 5.5},

 {4.4, 5.5, 6.6}

};

OutMatr( &matr[0][0], M, N );

}

Возврат результата.

Возврат из функции значения подобен передаче в нее аргумента. Сам возврат производится инструкцией return. Она выполняет присвоение возвращаемого значения соответствующему принимающему объекту.

Если функция объявлена с пустым типом возвращаемого результата (является функцией типа void), то она не может возвращать какое-либо значение.

Если функция объявлена с некоторым непустым типом возвращаемого результата (не void), то она должна вернуть значение типа своего результата.

Не следует возвращать из функции адрес обычного (нестатического) локального объекта либо ссылку на такой объект. Связано это с тем, что сам объект по завершении функции исчезнет, и его содержимое будет неопределенно.

Возвращаемое из функции значение не может иметь тип массива или тип функции, но может иметь тип указателя и тип ссылки на массив или на функцию.




1. Прибуток підприємства та механізм його розподілу
2. Лабораторна робота ’ 5 Виготовлення динамометра Мета уроку- навчитися градуювати пружину із заданою ціно.html
3. Лабораторная работа
4. тема диспетчерского управления Автоматизированная система диспетчерского управления пассажирским т
5. первых изза милейшего личика еще немного детского но уже под слоем довольно наглого макияжа а вовторых
6. Технологія ліків як наука
7. Курсовая работа- Организация аттестации специалистов и руководителей
8. Беру кусок жизни грубой и бедной и творю из него сладостную легенду ибо я поэт
9. управление классик менеджмента А.
10. Лирический образ Руси в прозе Н. В. Гоголя
11. Происх денегКонцепции Деньгиисторическая категория присущая товарному хозву
12. Определение расходов воды на нужды города
13.  Политика фритредерства выражается- а в свободной торговле; б в контингентировании экспорта и импорта;
14. тема Финансовая система госва
15. вариант теста Лыжная подготовка
16. ПЕДИАТРИЯ 2010 год 1.
17. Ударные волны
18. Спутниковые методы определения координат
19. Космический мусор угроза безопасности космических полетов
20. Природные экосистемы