Управление последовательностью действий в языках программирования может быть представлено некоторой управляющей структурой. Такая структура называется неявным управлением в том случае, если последовательность действий определяется естественным образом (например, выполнение программы идет с первого оператора и т.д.). Управляющая структура представляет собой явное управление в том случае, если для изменения порядка выполнения действий используются какие-либо операторы или иные синтаксические конструкции. Основными управляющими структурами принято считать:
В языках логического программирования управляющие структуры могут представляться несколько иначе. Так, в языке Prolog модель управления последовательностью действий вместо операторов использует такие категории, как факты, правила и запросы.
Выражение состоит из операций, операндов и функций (функции можно рассматривать как особый тип операции). Операндами могут выступать переменные и константы. Операторы, определяющие операции, могут быть унарными и бинарными.
Синтаксис выражения можно представить в виде дерева: вершиной дерева является последняя выполняемая операция, узлы описывают промежуточные операции, а листья указывают данные (переменные или константы).
На рисунке 3.1 показано древовидное представление вычисления выражения (x*y)-x*(-(x**2)+(y-0.3)).
(рис 3.1) Древовидное представление выражения Для представления выражения в
В префиксной записи, называемой также польской префиксной записью, сначала записывается символ операции, а затем по порядку слева направо записываются операнды. Так, выражение (z+2)*(x+y) в префиксной записи будет иметь следующий вид: * + z 2 + x y. Польская префиксная запись не содержит скобок и позволяет однозначно определять порядок вычисления выражения.
Язык LISP для представления выражений использует префиксный тип записи, называемый кембриджской польской записью. Такая запись в отличие от польской записи содержит скобки, ограничивающие операнды, на которые действует операция. Таким образом, в кембриджской польской записи выражение представляет собой множество вложенных подвыражений, ограниченных скобками.
Например:
* (+ (z 2) +(x y))
В постфиксной записи, называемой также обратной польской записью или суффиксной записью, символ операции записывается после операндов. Выражение (z+2)*(x+y) в постфиксной записи будет иметь следующий вид: z 2 + x y + *.
Третьим типом записи выражений является инфиксная запись, используемая для представления выражений как в математике, так и в языках программирования. Инфиксная запись - это стандартный способ записи выражений, при котором символ операции указывается между операндами. Однако инфиксная запись не позволяет представлять унарные операции.
Наиболее простым представлением выражения с точки зрения процесса трансляции является
При вычислении выражений учитывается приоритет операций: сначала выполняются операции с более высоким приоритетом.
Вычисление выражений, имеющих операции с одинаковым приоритетом, производится в соответствии с правилом сочетательности, которое определяет порядок выполнения таких операций. В языке С сочетательность операций применяется как слева направо, так и справа налево (как и при вычислении возведения в степень). Порядок вычисления справа налево означает, что выражение x** 2**4 трактуется как x**(2**4).
В следующей таблице приведены в убывающем порядке уровни приоритета операций языка С.
| Уровни приоритета | Операции | Порядок выполнения операций |
|---|---|---|
| Скобки | ( ), [ ] |
слева направо |
| Индексы, вызов функций | x[i], fun() |
слева направо |
| Постфиксный инкремент и декремент | ++, -- |
слева направо |
| Префиксный инкремент и декремент | ++, -- |
слева направо |
| Унарный минус | - |
слева направо |
| Поразрядное отрицание (NOT) | ~ |
слева направо |
| Размер объекта | sizeof |
слева направо |
| Логическое отрицание | ! | слева направо |
| Получение адреса и разименование | , * |
справа налево |
| Явное приведение типа | (any_type) |
слева направо |
| Умножение, деление, деление по модулю | *, /, % |
слева направо |
| Сложение, вычитание | +, - |
слева направо |
| Сдвиг влево, сдвиг вправо | <<, >> |
слева направо |
| Сравнение (меньше, больше, меньше или равно, больше или равно) | <, >, <=, >= |
слева направо |
| Сравнение (тождественное равенство, неравенство) | ==, != |
слева направо |
| Поразрядное логическое И | |
слева направо |
| Поразрядное исключающее ИЛИ (XOR) | ^ |
слева направо |
| Поразрядное логическое ИЛИ | | |
слева направо |
| Логическое И (AND) | |
слева направо |
| Логическое ИЛИ (OR) | || |
слева направо |
| Условная операция | ?: |
справа налево |
| Операция перед присваиванием | =, +=, -=, *=, /=, %=, <<=, >>=, =, ^=, |= |
справа налево |
Операции AND, OR, NOT и XOR относятся к логическим операциям. Следующая таблица показывает результаты применения логических операций.
| x | y | x y (x AND y) | x || y (x OR y) | ! x (NOT y) | x ^ y (x XOR y) |
|---|---|---|---|---|---|
0 ( false ) |
0 ( false ) |
0 |
0 |
1 |
0 |
0 ( false ) |
1 ( true ) |
0 |
1 |
1 |
1 |
1 ( true ) |
0 ( false ) |
0 |
1 |
0 |
1 |
1 ( true ) |
1 ( true ) |
1 |
1 |
0 |
0 |
Единственной операцией, имеющей три операнда, является операция "условие" (называемая также условной операцией).
Условная операция имеет следующий формальный синтаксис:
(expr_log) ? expr1:expr2.
Если выражение expr_log принимает значение true, то условная операция возвращает значение expr1, а если false, то значение expr2.
Например:
// x примет значение 1, если y>z. x=(y>z)? 1:0;
Операции сдвига целочисленного значения выполняют сдвиг всех битов операнда, указанного слева, на число позиций, заданных операндом, указанным справа, а вместо сдвинутых битов записываются нули. Операции сдвига имеют следующий формальный синтаксис:
value<<count_of_position value>>count_of_position.
Например, выражение 9<<2 вычисляется следующим образом: число 9 имеет в двоичном представлении значение 001001 ( 118 ) и при сдвиге его на два разряда влево получается значение 100100 ( 448 ).
Операции инкремента и декремента соответственно увеличивают или уменьшают значение операнда на 1. Различают постфиксный и префиксный инкремент и декремент. Например, выражение x++ возвращает значение переменной х, а затем увеличивает его на 1, а выражение ++x увеличивает значение x на 1 и возвращает его.
Операция присваивания в различных языках имеет разное обозначение. Так, в языках С, C++, Java операция присваивания обозначается символом =. Например, x=y+z;. Язык С позволяет в одном операторе указывать несколько операций присваивания. Например: x1=x2=y+z;. В языках Pascal и ALGOL операция присваивания указывается символами :=. Например: x:=y+z ;. В языке LISP операция присваивания обозначается функцией SETQ (например, (SETQ x (PLUS y z)) ).
Первоначально все разрабатываемые универсальные языки программирования имели goto. В настоящее время разработчики языков большей частью придерживаются парадигмы структурного программирования (программирования без goto ).
К основным достоинствам структурного программирования следует отнести:
Алгоритм выполнения
Изображение этих узлов представлено на следующей схеме.
(рис 3.2) Типы узлов и соответствующие блок-схемыПравильная
Каждая из основных форм управления последовательностью действий имеет в различных языках программирования свои, в значительной степени синтаксически схожие, операторы языка программирования.
Для создания сложных управляющих композиций иногда последовательность операторов необходимо указывать как один оператор. Для этой цели служит составной оператор. Синтаксически составной оператор может быть указан ключевыми словами begin end (язык Pascal) или фигурными скобками {} (языки C++, Java, Perl).
К операторам выбора относятся:
if – условный оператор;switch – переключатель.Операторы выбора осуществляют ветвление. Оператор if в зависимости от значения выражения-условия позволяет выполнить только одну из двух указанных последовательностей операторов (в большинстве языков программирования такая последовательность операторов указывается как один составной оператор). Существуют формы оператора if, позволяющие задавать вместо второй выполняемой последовательности операторов условие ( if-elseif-then- elseif-then ).
Оператор switch в зависимости от значения вычисляемого выражения позволяет выполнить одну из нескольких указанных последовательностей операторов.
Например:
switch (i):
{
case 0:
case 1: // последовательность операторов
break;
case 2: // последовательность операторов
break;
default:
}
Реализация оператора if достаточно проста: как правило, процессор поддерживает команды перехода и ветвления.
Реализация оператора switch может быть выполнена в виде таблицы перехода, состоящей из команд безусловного перехода на соответствующие фрагменты кода. Вычисляемое выражение оператора switch в этом случае преобразовывается в значение сдвига по таблице перехода, определяющее выполняемую команду.
Операторы цикла наряду с механизмом рекурсии выражают форму повторения последовательности действий.
Языки программирования, как правило, имеют несколько форм оператора цикла.
В языке С++ предусмотрено три формы оператора цикла:
fordowhile.Цикл for выполняется заданное число раз, а проверка условия принадлежности счетчика цикла заданному диапазону производится до выполнения операторов, указанных в цикле.
Оператор do выполняется до тех пор, пока условие цикла остается истинным, а проверка условия цикла производится после выполнения операторов, указанных в цикле.
Оператор while выполняется до тех пор, пока условие цикла остается истинным, а проверка условия цикла производится до выполнения операторов, указанных в цикле.
Принято считать, что любой оператор цикла состоит из двух частей:
Реализация операторов цикла с конечным числом повторений отличается от реализации циклов с бесконечным повторением или повторением, основанным на некоторых данных. При реализации цикла с конечным числом повторений выделяется специальная область памяти для хранения этого значения. Цикл for также может относиться как к циклам с конечным числом повторений ( for (i=1; i<50; i++){cout<<i<<endl;} ), так и к циклам с бесконечным повторением ( for (;;){j=i+j;} ).
Для выхода из бесконечных циклов или подпрограмм используются операторы перехода. В языке C++ реализованы четыре оператора перехода:
break – прерывает выполнение цикла, завершая его;continue – завершает текущую итерацию выполнения цикла;return – определяет выход из функции;goto – Некоторые языки программирования позволяют реализовывать обработку ошибок, называемых исключениями, используя операторы исключений. Код, который может инициировать исключение, заключается в специальный оператор try-catch. При этом ключевое слово catch определяет действия, выполняемые в случае возникновения определенного исключения. Исключение может инициироваться программно или оператором throw (бросок исключения). Некоторые языки программирования позволяют передавать обработку исключения вызывающему методу (так, в языке Java в сигнатуре метода можно ключевым словом throws указать список исключений, при возникновении которых управление будет возвращено вызывающей программе).
Управление последовательностью действий в языках программирования может быть представлено некоторой управляющей структурой. Такая структура называется неявным управлением в том случае, если последовательность действий определяется естественным образом (например, выполнение программы идет с первого оператора и т.д.). Управляющая структура представляет собой явное управление в том случае, если для изменения порядка выполнения действий используются какие-либо операторы или иные синтаксические конструкции. Основными управляющими структурами принято считать:
В языках логического программирования управляющие структуры могут представляться несколько иначе. Так, в языке Prolog модель управления последовательностью действий вместо операторов использует такие категории, как факты, правила и запросы.
Выражение состоит из операций, операндов и функций (функции можно рассматривать как особый тип операции). Операндами могут выступать переменные и константы. Операторы, определяющие операции, могут быть унарными и бинарными.
Синтаксис выражения можно представить в виде дерева: вершиной дерева является последняя выполняемая операция, узлы описывают промежуточные операции, а листья указывают данные (переменные или константы).
На рисунке 3.1 показано древовидное представление вычисления выражения (x*y)-x*(-(x**2)+(y-0.3)).
(рис 3.1) Древовидное представление выражения Для представления выражения в
В префиксной записи, называемой также польской префиксной записью, сначала записывается символ операции, а затем по порядку слева направо записываются операнды. Так, выражение (z+2)*(x+y) в префиксной записи будет иметь следующий вид: * + z 2 + x y. Польская префиксная запись не содержит скобок и позволяет однозначно определять порядок вычисления выражения.
Язык LISP для представления выражений использует префиксный тип записи, называемый кембриджской польской записью. Такая запись в отличие от польской записи содержит скобки, ограничивающие операнды, на которые действует операция. Таким образом, в кембриджской польской записи выражение представляет собой множество вложенных подвыражений, ограниченных скобками.
Например:
* (+ (z 2) +(x y))
В постфиксной записи, называемой также обратной польской записью или суффиксной записью, символ операции записывается после операндов. Выражение (z+2)*(x+y) в постфиксной записи будет иметь следующий вид: z 2 + x y + *.
Третьим типом записи выражений является инфиксная запись, используемая для представления выражений как в математике, так и в языках программирования. Инфиксная запись - это стандартный способ записи выражений, при котором символ операции указывается между операндами. Однако инфиксная запись не позволяет представлять унарные операции.
Наиболее простым представлением выражения с точки зрения процесса трансляции является
При вычислении выражений учитывается приоритет операций: сначала выполняются операции с более высоким приоритетом.
Вычисление выражений, имеющих операции с одинаковым приоритетом, производится в соответствии с правилом сочетательности, которое определяет порядок выполнения таких операций. В языке С сочетательность операций применяется как слева направо, так и справа налево (как и при вычислении возведения в степень). Порядок вычисления справа налево означает, что выражение x** 2**4 трактуется как x**(2**4).
В следующей таблице приведены в убывающем порядке уровни приоритета операций языка С.
| Уровни приоритета | Операции | Порядок выполнения операций |
|---|---|---|
| Скобки | ( ), [ ] |
слева направо |
| Индексы, вызов функций | x[i], fun() |
слева направо |
| Постфиксный инкремент и декремент | ++, -- |
слева направо |
| Префиксный инкремент и декремент | ++, -- |
слева направо |
| Унарный минус | - |
слева направо |
| Поразрядное отрицание (NOT) | ~ |
слева направо |
| Размер объекта | sizeof |
слева направо |
| Логическое отрицание | ! | слева направо |
| Получение адреса и разименование | , * |
справа налево |
| Явное приведение типа | (any_type) |
слева направо |
| Умножение, деление, деление по модулю | *, /, % |
слева направо |
| Сложение, вычитание | +, - |
слева направо |
| Сдвиг влево, сдвиг вправо | <<, >> |
слева направо |
| Сравнение (меньше, больше, меньше или равно, больше или равно) | <, >, <=, >= |
слева направо |
| Сравнение (тождественное равенство, неравенство) | ==, != |
слева направо |
| Поразрядное логическое И | |
слева направо |
| Поразрядное исключающее ИЛИ (XOR) | ^ |
слева направо |
| Поразрядное логическое ИЛИ | | |
слева направо |
| Логическое И (AND) | |
слева направо |
| Логическое ИЛИ (OR) | || |
слева направо |
| Условная операция | ?: |
справа налево |
| Операция перед присваиванием | =, +=, -=, *=, /=, %=, <<=, >>=, =, ^=, |= |
справа налево |
Операции AND, OR, NOT и XOR относятся к логическим операциям. Следующая таблица показывает результаты применения логических операций.
| x | y | x y (x AND y) | x || y (x OR y) | ! x (NOT y) | x ^ y (x XOR y) |
|---|---|---|---|---|---|
0 ( false ) |
0 ( false ) |
0 |
0 |
1 |
0 |
0 ( false ) |
1 ( true ) |
0 |
1 |
1 |
1 |
1 ( true ) |
0 ( false ) |
0 |
1 |
0 |
1 |
1 ( true ) |
1 ( true ) |
1 |
1 |
0 |
0 |
Единственной операцией, имеющей три операнда, является операция "условие" (называемая также условной операцией).
Условная операция имеет следующий формальный синтаксис:
(expr_log) ? expr1:expr2.
Если выражение expr_log принимает значение true, то условная операция возвращает значение expr1, а если false, то значение expr2.
Например:
// x примет значение 1, если y>z. x=(y>z)? 1:0;
Операции сдвига целочисленного значения выполняют сдвиг всех битов операнда, указанного слева, на число позиций, заданных операндом, указанным справа, а вместо сдвинутых битов записываются нули. Операции сдвига имеют следующий формальный синтаксис:
value<<count_of_position value>>count_of_position.
Например, выражение 9<<2 вычисляется следующим образом: число 9 имеет в двоичном представлении значение 001001 ( 118 ) и при сдвиге его на два разряда влево получается значение 100100 ( 448 ).
Операции инкремента и декремента соответственно увеличивают или уменьшают значение операнда на 1. Различают постфиксный и префиксный инкремент и декремент. Например, выражение x++ возвращает значение переменной х, а затем увеличивает его на 1, а выражение ++x увеличивает значение x на 1 и возвращает его.
Операция присваивания в различных языках имеет разное обозначение. Так, в языках С, C++, Java операция присваивания обозначается символом =. Например, x=y+z;. Язык С позволяет в одном операторе указывать несколько операций присваивания. Например: x1=x2=y+z;. В языках Pascal и ALGOL операция присваивания указывается символами :=. Например: x:=y+z ;. В языке LISP операция присваивания обозначается функцией SETQ (например, (SETQ x (PLUS y z)) ).
Первоначально все разрабатываемые универсальные языки программирования имели goto. В настоящее время разработчики языков большей частью придерживаются парадигмы структурного программирования (программирования без goto ).
К основным достоинствам структурного программирования следует отнести:
Алгоритм выполнения
Изображение этих узлов представлено на следующей схеме.
(рис 3.2) Типы узлов и соответствующие блок-схемыПравильная
Каждая из основных форм управления последовательностью действий имеет в различных языках программирования свои, в значительной степени синтаксически схожие, операторы языка программирования.
Для создания сложных управляющих композиций иногда последовательность операторов необходимо указывать как один оператор. Для этой цели служит составной оператор. Синтаксически составной оператор может быть указан ключевыми словами begin end (язык Pascal) или фигурными скобками {} (языки C++, Java, Perl).
К операторам выбора относятся:
if – условный оператор;switch – переключатель.Операторы выбора осуществляют ветвление. Оператор if в зависимости от значения выражения-условия позволяет выполнить только одну из двух указанных последовательностей операторов (в большинстве языков программирования такая последовательность операторов указывается как один составной оператор). Существуют формы оператора if, позволяющие задавать вместо второй выполняемой последовательности операторов условие ( if-elseif-then- elseif-then ).
Оператор switch в зависимости от значения вычисляемого выражения позволяет выполнить одну из нескольких указанных последовательностей операторов.
Например:
switch (i):
{
case 0:
case 1: // последовательность операторов
break;
case 2: // последовательность операторов
break;
default:
}
Реализация оператора if достаточно проста: как правило, процессор поддерживает команды перехода и ветвления.
Реализация оператора switch может быть выполнена в виде таблицы перехода, состоящей из команд безусловного перехода на соответствующие фрагменты кода. Вычисляемое выражение оператора switch в этом случае преобразовывается в значение сдвига по таблице перехода, определяющее выполняемую команду.
Операторы цикла наряду с механизмом рекурсии выражают форму повторения последовательности действий.
Языки программирования, как правило, имеют несколько форм оператора цикла.
В языке С++ предусмотрено три формы оператора цикла:
fordowhile.Цикл for выполняется заданное число раз, а проверка условия принадлежности счетчика цикла заданному диапазону производится до выполнения операторов, указанных в цикле.
Оператор do выполняется до тех пор, пока условие цикла остается истинным, а проверка условия цикла производится после выполнения операторов, указанных в цикле.
Оператор while выполняется до тех пор, пока условие цикла остается истинным, а проверка условия цикла производится до выполнения операторов, указанных в цикле.
Принято считать, что любой оператор цикла состоит из двух частей:
Реализация операторов цикла с конечным числом повторений отличается от реализации циклов с бесконечным повторением или повторением, основанным на некоторых данных. При реализации цикла с конечным числом повторений выделяется специальная область памяти для хранения этого значения. Цикл for также может относиться как к циклам с конечным числом повторений ( for (i=1; i<50; i++){cout<<i<<endl;} ), так и к циклам с бесконечным повторением ( for (;;){j=i+j;} ).
Для выхода из бесконечных циклов или подпрограмм используются операторы перехода. В языке C++ реализованы четыре оператора перехода:
break – прерывает выполнение цикла, завершая его;continue – завершает текущую итерацию выполнения цикла;return – определяет выход из функции;goto – Некоторые языки программирования позволяют реализовывать обработку ошибок, называемых исключениями, используя операторы исключений. Код, который может инициировать исключение, заключается в специальный оператор try-catch. При этом ключевое слово catch определяет действия, выполняемые в случае возникновения определенного исключения. Исключение может инициироваться программно или оператором throw (бросок исключения). Некоторые языки программирования позволяют передавать обработку исключения вызывающему методу (так, в языке Java в сигнатуре метода можно ключевым словом throws указать список исключений, при возникновении которых управление будет возвращено вызывающей программе).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.