Разветвляющиеся алгоритмы

Содержание

Слайд 2

Операция «,» (запятая) Данная операция используется при организации строго гарантированной последовательности

Операция «,» (запятая)
Данная операция используется при организации строго гарантированной последовательности вычислений

(обычно используется там, где по синтаксису допустима только одна операция, например, в операторе for). Форма записи:
Выражение_1, … , Выражение_N;
Выражения 1, 2, …, N вычисляются последовательно друг за другом и результатом будет значение последнего Выражения_N, например:
m = ( i = 1, j = i + 1, k = 6, n = i + j + k );
получим последовательность вычислений, взятых в скобки:
i = 1, j = i + 1 = 2, k = 6, n = 1 + 2 + 6,
в результате m = n = 9.
Слайд 3

Используя «запятую» в операции присваивания, нужно помнить, что операция присваивания выполняется

Используя «запятую» в операции присваивания, нужно помнить, что операция присваивания выполняется

справа на лево, поэтому последним будет Выражение_1:
Операнд = Выражение_1, … , Выражение_N;
Тогда предыдущий пример (без скобок) следует записать:
m = n = i + j + k, k = 6, j = i + 1, i = 1;
получим последовательность аналогичных вычислений:
i = 1, j = i + 1 = 2, k = 6, n = 1 + 2 + 6,
в результате m = n = 9.
Слайд 4

Пример ошибки: Вычислить Обозначив числитель a, знаменатель b запишем: a =

Пример ошибки: Вычислить

Обозначив числитель a, знаменатель b запишем:
a = 2

* cos ( x – M_PI / 6 );
b = 0,5 + sin ( y );
t = a / b;
В последней операции будет ошибка «Деление на ноль», т.к. в b = 0,5 + sin ( y );
Выражение_1 = 0, Выражение_2 = 5 + sin ( y ).
В результате b = 0;
Слайд 5

Операции сравнения В языке Си используются следующие операции сравнения (отношения между

Операции сравнения
В языке Си используются следующие операции сравнения (отношения между объектами):
==

Равно; != Не равно;
< Меньше; <= Меньше либо равно;
> Больше; >= Больше либо равно.
Пары символов разделять нельзя.
Общий вид операций отношений:
Операнд_1 Знак_Операции Операнд_2
Операндами могут быть любые арифметические выражения и указатели.
Арифметические выражения перед сравнением вычисляются и преобразуются к одному типу.
Результат операции имеет значение 1 (true), если отношение Истинно, или получено не нулевое значение, в противном случае 0, т.е. Ложно (false).
Слайд 6

В языке Си нет логического типа данных, в С++ это тип

В языке Си нет логического типа данных, в С++ это тип

bool.
Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции отношений.
Арифметические операции имеют больший приоритет над операциями сравнения.
Примеры. Какие будут результаты в следующих выражениях:
int a = 2, b = 5, x;
1) x = a % b == 0;
2) x = a * b > 3;
3) x = (a != 0) + (b == 5);
Слайд 7

Логические операции Логические операции в порядке убывания приоритета: ! – Логическое

Логические операции
Логические операции в порядке убывания приоритета:
! – Логическое «НЕ», отрицание

(инверсия);
&& – Логическое «И», конъюнкция (умножение);
|| – Логическое «ИЛИ», дизъюнкция (сложение).
Операндами логических операций могут быть любые скалярные объекты. Ненулевое значение операнда Истинно (1), нулевое – Ложь (0). Результат логической операции 1, или 0.
Общий вид унарной операции отрицания, которая изменяет значение Операнда на противоположный:
! Операнд
Примеры ( ! Истина – Ложь ):
1) !0 → 1
2) !5 → 0
3) x = 10; ! (x > 0) → 0 Нужны ли скобки?
Слайд 8

Общий вид бинарных операций И и ИЛИ Выражение_1 Операция Выражение_2 1.

Общий вид бинарных операций И и ИЛИ
Выражение_1 Операция Выражение_2
1. В операции

И (&&) результат 1 только если Истинны оба Выражения, иначе – 0 (умножение).
2. В операции ИЛИ (||) результат 0 только если Ложны оба Выражения, иначе – 1 (сложение).
Особенность операций И и ИЛИ – экономное последовательное вычисление Выражений-Операндов:
1) если Выражение_1 операции И Ложно, то результат операции – 0 и Выражение_2 не вычисляется;
2) если Выражение_1 операции ИЛИ Истинно, то результат операции – 1 и Выражение_2 не вычисляется.
Слайд 9

Логические операции «И» и «ИЛИ» имеют меньший приоритет, чем операции сравнения.

Логические операции «И» и «ИЛИ» имеют меньший приоритет, чем операции сравнения.


Примеры:
1) y > 0 && x == 7 → 1, если оба выражения Истинны;
2) y > 0 || x == 7 → 1, если хотя бы одно выражение Истинно.
3) чтобы записать x ∈ [a, b] (a ≤ x ≤ b):
x >= a && x <= b
4) чтобы записать x ∈ [a, b] или x ∈ [с, d]:
(x >= a && x <= b) || (x >= c && x <= d)
Слайд 10

Побитовые логические операции (~, &, |, ^), операции над битами (>>,

Побитовые логические операции (~, &, |, ^), операции над битами (>>,

<<)
В языке Си предусмотрен набор операций для работы с отдельными битами. Побитовые логические операции нельзя применять к переменным вещественного типа.
Обозначения операций:
~ Дополнение (унарная операция);
& Побитовое «И»;
| Побитовое включающее «ИЛИ»;
^ Побитовое исключающее «ИЛИ» – сложение по модулю 2;
>> Сдвиг вправо;
<< Сдвиг влево.
Слайд 11

Условный оператор Условный оператор if (если) используется для разветвления процесса выполнения

Условный оператор
Условный оператор if (если) используется для разветвления процесса выполнения кода

программы на два направления.
Условный оператор может быть простым и полным.
Форма простого оператора:
if (Выражение) Оператор;
Выражение – логическое или арифметическое выражение, вычисляемое перед проверкой.
Если (if) Выражение истинно (не равно 0), то выполняется Оператор, иначе он игнорируется.
Оператор – простой или составной (блок) оператор.
Блок создаем, если необходимо выполнить более одного оператора (заключаем их в фигурные скобки).
Слайд 12

Примеры записи: 1) if (x > 0) y = 0; 2)

Примеры записи:
1) if (x > 0) y = 0;
2) if (i

!= 1) { – Создаем Блок
j++;
s = 1;
}
3) if (i != 1) j++, s = 1; – Используем Запятую
Слайд 13

Форма полного (составного) оператора: if (Выражение) Оператор_1 ; else Оператор_2 ;

Форма полного (составного) оператора:
if (Выражение) Оператор_1 ;
else Оператор_2 ;
Если

Выражение Истинно, то выполняется Оператор_1, иначе (else) – Оператор_2. Операторы 1, 2 могут быть простыми или составными (блоками).
Символ «;» перед словом else в языке Си обязателен.
Слайд 14

Операторами 1, 2 могут быть любые, в том числе и условные.

Операторами 1, 2 могут быть любые, в том числе и условные.

Если есть вложенные операторы if-else, то текущий else принадлежит ближайшему if, не имеющему else. Например:
if (n > 0)
if(a > b) z = a;
else z = b;
Здесь else связан со вторым if (a > b).
Если нужно связать else с внешним if, то используем операторные скобки (блок):
if (n > 0) {
if (a > b) z = a;
}
else z = b;
Обратите внимание, что после заголовка оператора if(Выражение) «;» не ставится!!!
Слайд 15

В следующей цепочке операторов if-else-if Выражения 1,2,3 просматриваются последовательно: if (Выражение_1)

В следующей цепочке операторов if-else-if Выражения 1,2,3 просматриваются последовательно:
if (Выражение_1)

Оператор_1;
else
if (Выражение_2) Оператор_2;
else
if (Выражение_3) Оператор_3;
else Оператор_4 ;
Если какое-то Выражение оказывается истинным, то выполняется относящийся к нему Оператор и этим вся цепочка заканчивается.
Оператор_4 будет выполнен только, если все Выражения Ложны.
Слайд 16

Замечание 1. Наиболее распространенной ошибкой является использование в Выражении операции присваивания

Замечание 1. Наиболее распространенной ошибкой является использование в Выражении операции присваивания

«=» вместо операции сравнения на равенство «==» (два знака равно). Например, в следующем операторе синтаксической ошибки нет
if (x = 5) a++;
но значение а будет увеличено на единицу независимо от значения переменной х, т.к. результатом операции присваивания х = 5 в круглых скобках является значение
5 ≠ 0 – Истина.
Замечание 2. Вычисления по равенству вещественных величин рекомендуются задавать в else.
Слайд 17

Пример 1: if (x else if(x > 0) cout cout Пример

Пример 1:
if (x < 0) cout << " X отрицательное "

<< endl;
else
if(x > 0) cout << " X положительное " << endl; else
cout << " X равно нулю " << endl;
Пример 2: вычислить

Более корректной для double x, z; будет следующая запись
if (z < 1) x = z * z;
else
x = z + 1;

Слайд 18

Условная операция «?:» Условная операция – тернарная, т.к. в ней участвуют

Условная операция «?:»
Условная операция – тернарная, т.к. в ней участвуют три

операнда. Ее форма:
Выражение_1 ? Выражение_2 : Выражение_3
если Выражение_1 Истинно, то результат операции Выражение_2, иначе – Выражение_3. Каждый раз вычисляется только одно из Выражений 2 или 3.
Схема работы аналогична схеме полного оператора if :
Слайд 19

Пример: найти максимальное между a и b, используя оператор if и

Пример: найти максимальное между a и b, используя оператор if и

условную операцию.
1. Используя оператор if :
if (a > b) max = a;
else max = b;
2. Используя условную операцию:
max = (a > b) ? a : b;
Условную операцию можно использовать также как и любое другое выражение.
Слайд 20

Оператор альтернативного выбора Составной оператор switch (переключатель) предназначен для разветвления процесса

Оператор альтернативного выбора
Составной оператор switch (переключатель) предназначен для разветвления процесса вычислений

на несколько направлений.
Общий вид:
switch ( Выражение ) {
case Константа_1: Список_1 Операторов
case Константа_2: Список_2
...
case Константа_N : Список_N
default : Список_N+1 – Необязательная ветвь
}
Типы Выражения и Констант должны совпадать и могут быть только int (целый) или char (символьный).
Слайд 21

Сначала вычисляется Выражение, указанное в заголовке, затем оно сравнивается с Константами,

Сначала вычисляется Выражение, указанное в заголовке, затем оно сравнивается с Константами,

которые фактически выполняют роль меток.
Если значение Выражения совпало с одной из Констант, то выполняется соответствующий Список Операторов. После этого, если выход из switch в данной ветви не указан, последовательно выполняются все остальные ветви.
Константы должны иметь разные значения, но одного типа. Несколько меток могут следовать подряд, и тогда переход в указанную ветвь будет происходить при совпадении хотя бы одной из них. Порядок следования ветвей не важен.
Если Выражение не совпало ни с одной из Констант, то выполняется ветвь default, а при ее отсутствии – оператор, следующий за switch.
Слайд 22

Оператор break (разрыв) выполняет выход из оператора switch. Если по совпадению

Оператор break (разрыв) выполняет выход из оператора switch.
Если по совпадению

с каждой Константой должна быть выполнена только одна ветвь, в конце каждой из них используем break.
Пример switch с использованием оператора break:
Слайд 23

. . . int i = 2; switch ( i )

. . .
int i = 2;
switch ( i ) {

case 1: cout << " Case 1 " << endl; break;
case 2: cout << " Case 2 " << endl; break;
case 3: cout << " Case 3 " << endl; break;
default : cout << " Default " << endl; break;
}
cout << " End switch" << endl;
. . .
Результат:
Case 2
End switch
Слайд 24

Пример switch без break: . . . int i = 2;

Пример switch без break:
. . .
int i = 2;
switch (

i ) {
case 1: cout << " Case 1 " << endl;
case 2: cout << " Case 2 " << endl;
case 3: cout << " Case 3 " << endl;
default : cout << " Default " << endl;
}
cout << " End switch " << endl;
. . .
Результат в данном случае:
Case 2
Case 3
Default
End switch