Разветвляющиеся вычислительные процессы



Цели:

ü познакомиться с понятием разветвляющегося вычислительного процесса;

ü познакомиться с понятием логического выражения, изучить логические операции и операции отношения и освоить методику построения логических выражений;

ü изучить операторы языка С++, позволяющие реализовывать разветвляющиеся вычислительные алгоритмы.

Управляющая структура «развилка».

Логические операции и операции отношения

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

если <условие>

действия1

иначе

действия2

все_если

Работа структуры организована по принципу: если <условие> истинно (выполняется), то выполняются действия1; в случае ложности (невыполнения) <условие> выполняются действия2.

Возможна вложенность структур «если–то–иначе» любой глубины, т.е. вместо действия1 и/или действия2 может быть записана еще одна структура «развилка» и т.д.

<условие>, записанное после слова если, представляет собой логическое выражение. Логическое выражение – это два операнда, соединенные либо логической операцией, либо операцией отношения. Под логической операцией понимается одна из операций, связывающих два операнда: И, ИЛИ или операция отрицания НЕ, записываемая перед операндом. Если <условие> – два условия, связанные логической операцией И, то <условие> будет истинным в случае одновременного исполнения этих двух условий. Если <условие> – два условия, связанные логической операцией ИЛИ, то <условие> будет истинным в случае, когда хотя бы одно из этих двух условий будет выполняться. Результаты выполнения логических операций приведены в табл.4.

Таблица 4

Значение операнда 1 (оп1)

Значение операнда 2 (оп2)

Результат операций

НЕ(оп1) (оп1) И (оп2) (оп1) ИЛИ (оп2)
0 0 1 0 0
0 1 1 0 1
1 0 0 0 1
1 1 0 1 1

Под операцией отношения понимается одна из операций, связывающих два операнда: > (больше), >= (больше или равно), < (меньше), <= (меньше или равно), == (равно), != (не равно). Операция отношения позволяет сравнивать числовые выражения по их значениям.

Пример. Определить условие попадания точки с координатами (x;y) в указанную область D:

Напишем условие попадания точки с координатами (x;y) в указанную область. Очевидно, что данная область должна быть разбита на две непересекающиеся области D1 и D2, т.е. D=D1UD2. Таким образом, можно установить, что точка может попасть в D1 или в D2.

Опишем условие попадания точки (х;у) в области D1 и D2:

D1:  x>=-4 И x<=4 И y>=0 И y<=2

D2: x>=0 И x<=2 И y>=-2 И y<=0

Таким образом, условие принадлежности точки с координатами (x;y) области D будет следующим:

(x>=-4 И x<=4 И y>=0 И y<=2) ИЛИ (x>=0 И x<=2 И y>=-2 И y<=0)

 

2. Операторы языка С++, позволяющие реализовывать разветвляющиеся вычислительные алгоритмы

 Для реализации разветвляющихся вычислительных алгоритмов в языке С++ предусмотрены условный оператор if() , условное выражение и оператор выбора switch().

Условный оператор if()

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

if (<условие>)

<оператор1, выполняемый при истинности (выполнении) условия>

else

<оператор2 , выполняемый при ложности (не выполнении) условия>

После if(<условие>) и else точка с запятой не ставится. Оператор1 и оператор2 – это либо простой, либо составной оператор, т.е. операторные скобки ставятся в том случае, если после if() или else записано несколько операторов, относящихся к if() или else соответственно; если же записан один оператор после if() или else, то операторные скобки не ставятся.

Условием может быть логическое или арифметическое выражение. Логическое выражение – это два операнда, соединенные логической операцией (&& (логическое И), || (логическое ИЛИ), !(логическое НЕ)) и/или операцией отношения (<, <=, >, >=, ==, !=). Результаты логических операций приведены в табл.5.

Таблица 5

Значение операнда1 (оп1)

Значение  операнда2 (оп2)

Результат операций

!(оп1) (оп1) && (оп2) (оп1) || (оп2)
0 0 1 0 0
0 1 1 0 1
1 0 0 0 1
1 1 0 1 1

Логические выражения применяются для определения истинности или ложности определенных ситуаций. Результатом вычислений логического выражения является целое число: 1 – случай истинности; 0 – случай ложности. Если значение выражения, указанного в условии оператора if() не равно нулю, то условие считается истинным, и выполняется оператор1, следующий за if(). Допустима сокращённая форма условного оператора, в которой отсутствует else и оператор2. В этом случае при ложности проверяемого условия никакие действия не выполняются. В свою очередь, оператор1 и оператор2 могут быть условными, что позволяет организовать цепочку проверок условий любой глубины вложенности. В этих цепочках каждый из условных операторов может быть как полным условным, так и иметь сокращённую форму записи. При этом могут возникать ошибки неоднозначного сопоставления if() и else. Синтаксис языка предполагает, что при вложенных условных операторах каждое else соответствует ближайшему к нему предшествующему if().

Типичной конструкцией разветвляющегося вычислительного процесса является лесенка if-else-if. Она выглядит следующим образом:

if(<условие>)

{

  операторы;

}

else

  if(<условие>)

  {

         операторы;

  }

  else

         if(<условие>)

         {

               операторы;

    }

·  

·  

·  

else

{

операторы;

}

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

Условное выражение

Условные выражения предназначены для выбора одного из двух арифметических выражений при вычислении левой части оператора присваивания:

a=(<условие>) ? <выражение1> : <выражение2>;

Правило работы условного выражения: если условие истинно, то переменной a присваивается значение <выражение1>; если условие ложно, то переменной a присваивается значение <выражение2>. Например,

x=(w>5) ? I*U : I/U;

Здесь, переменной x будет присвоено значение выражения I*U, если условие w>5 истинно, и значение выражения I/U, если условие w>5 ложно.

Оператор выбора switch()

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

switch(<выражение–ключ>)

{

  case <константное_выражение1>:

         операторы1;

         break;

  case <константное_выражение2>:

         операторы2;

         break;

         …

  default:

         операторыV;

}

<выражение–ключ> – выражение любого типа; результатом вычисления этого выражения может быть значение целого или символьного типа.

Правила работы оператора switch():

1. Вычисляется значение <выражение–ключ>.

2. Это значение последовательно сравнивается со значением каждого из <константного_выражения>, следующих после каждого case.

3. Если значения ключа и какого-либо <константного_выражения> совпали, то выполняются все операторы, следующие за этим case.

4. Если в этом case встретился оператор break, то оператор switch() прекращает работу. Если в этом case нет оператора break, то будут выполняться все операторы, следующие либо после этого case, либо до ближайшего оператора break, либо до конца оператора switch() при отсутствии операторов break.

5. Если не найдено ни одного совпадения ключа и одного из <константного_выражения>, то будут выполняться все операторы, следующие за оператором default.

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

case <константное_выражение>:

В каждом переключателе должно быть не больше одной метки default, однако эта метка может и отсутствовать. В случае её отсутствия при несовпадении переключающего выражения ни с одним из константных выражений, помещаемых вслед за case, в переключателе не выполняется ни один из операторов. Сами по себе метки  case <константное_выражение>: и default не изменяют последовательности выполнения операторов. Если не предусмотрены переходы или выходы из переключателя, то в нём последовательно выполняются все операторы, начиная с той метки, на которую передано управление. С помощью оператора break выполняется выход из переключателя. Операторы break являются не обязательными в операторе switch(). Они используются для окончания работы последовательности операторов, предшествующих этому break. Если break отсутствует, продолжаются выполняться операторы следующего раздела, пока не будет достигнут оператор break или конец оператора switch().

Оператор switch() отличается от условного оператора if() тем, что он может выполнять только операции проверки строгого равенства, в то время как if() может проверять логические выражения.

Лекция 5


Дата добавления: 2019-11-25; просмотров: 277; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!