Московский государственный университет имени М.В.Ломоносова
Опубликован: 03.10.2006 | Доступ: свободный | Студентов: 1224 / 79 | Длительность: 09:08:00
Специальности: Программист
Лекция 3:

Управление последовательностью действий

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Операторы

Структурное программирование

Первоначально все разрабатываемые универсальные языки программирования имели оператор безусловного перехода 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 в этом случае преобразовывается в значение сдвига по таблице перехода, определяющее выполняемую команду.

Операторы цикла

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

Языки программирования, как правило, имеют несколько форм оператора цикла.

В языке С++ предусмотрено три формы оператора цикла:

  • for
  • do
  • while.

Цикл 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 указать список исключений, при возникновении которых управление будет возвращено вызывающей программе).

< Лекция 2 || Лекция 3: 123 || Лекция 4 >