Операторы break, continue, exit, halt

Оператор цикла с параметром for ... do

Оператор цикла с постусловием repeat... until

Оператор цикла с предусловием while ... do

Оператор варианта case

Условный оператор if...then...else

 

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

 

;

 

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

;

;

 

Если условие истинно, то выполняется оператор (простой или составной), следующий за словом then. Но если условие ложно, то будет выполняться оператор, следующий за словом else. Альтернативная ветвь else может отсутствовать, если в ней нет необходимости. В таком «усеченном» операторе в случае невыполнения условия ничего не происходит и управление передается следующему оператору, например:

 

;

;

;

;

 

Условные операторы могут быть вложены друг в друга:

 

;

При вложениях всегда действует правило: альтернатива else считается принадлежащей ближайшему условному оператору if, имеющему ветвь else. Следовательно, есть риск сделать ошибку, например:

 

 

По записи похоже, что будет выполняться, только если ложно, но в действительности он будет отнесен к . Причем «;» после только ухудшит положение. Выход таков: нужно представить вложенное условие как составной оператор:

 

 

В этом случае для ветви else ближайшим незакрытым оператором if окажется оператор с .

 

Пример 3.4. Написать две программы решения квадратного и биквадратного уравнений. Блок-схемы алгоритмов решения этих задач приведены на рис. 1.5 и 1.12.

 

Программа решения квадратного уравнения следующая:

 

;

;

;

;

;

;

;

.

 

Программа решения биквадратного уравнения такова:

 

Program bikvadrat;

;

 

;

;;

;;

;;

;;

;

;

;

;;

;

;

;;

;

;

;

.

 

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

 

;

;

;

 

Оператор работает следующим образом:

1. Если управляющая_переменная принимает значение из набора_значений_1, то выполняется оператор_1.

2. Если управляющая_переменная принимает значение из набора значений_2, то выполняется оператор_2.

3. Если управляющая_переменная принимает значение из набора_значений_N, то выполняется оператор_N.

4. Если управляющая переменная не принимает ни одно значение из имеющихся наборов, то выполняется альтернативный_оператор.

 

Тип управляющей_переменной, которая стоит между служебными словами case и of, должен быть только перечислимым (включая char и boolean) диапазоном или целочисленным.

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

 

Рассмотрим пример, в котором err (переменная типа word) принимает некоторые целочисленные значения, соответствующие коду ошибки завершения программы. В зависимости от значения переменной err на экран выводится соответствующее сообщение:

 

;

;

;

;

;

.

 

Блок-схема алгоритма работы этого оператора приведена на рис. 3.1.

 

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

 

 

Обращение к оператору while ... do переводится как «пока ... делать» и выглядит так:

 

;

 

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

 

Рис. 3.1. Алгоритм применения оператора case

 

Условие выполнения тела цикла while проверяется до начала каждой итерации. Поэтому, если условие сразу не выполняется, то тело цикла игнорируется, и управление передается оператору, стоящему сразу за телом цикла.

Оператор while ... do предназначен для реализации циклов с предусловием.

При написании циклов с предусловием следует помнить следующее:

 

1. Чтобы цикл имел шанс когда-нибудь закончиться, содержимое его тела должно обязательно влиять на условие цикла.

2. Условие должно состоять из корректных выражений и значений, определенных еще до первого выполнения тела цикла.

 

Пример 3.5. Вычислить значения , соответствующие каждому значению x (, шаг изменения равен ) по формуле . Вычислить сумму положительных значений , произведение ненулевых , количество отрицательных .

 

Блок-схема приведена на рис. 1.17.

 

;

;

;;

;

;

;

;

;

;

;

;

;

;

.

 

Пример 3.6. Вычислить значения, которые соответствуют каждому значению по формуле: . Считать до тех пор, пока подкоренное выражение больше или равно 0,02. Определить количество вычисленных .

 

Блок-схема приведена на рис. 1.19.

 

;

 

;

;

;

;

.

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

Тело цикла может содержать другие вложенные циклы.

 

В цикле с предусловием предварительной проверкой определяется, выполнять тело цикла или нет, до первой итерации. Если это не соответствует логике алгоритма, то можно использовать цикл с постусловием, то есть цикл, в котором проверяется, делать или нет очередную итерацию, лишь после завершения предыдущей. Это имеет принципиальное значение лишь на первом шаге, а далее циклы ведут себя идентично. Оператор repeat ... until реализует цикл с постусловием. Цикл с постусловием всегда будет выполнен хотя бы один раз.

 

;;

;

;

 

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

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

 

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

 

 

Найти максимальное и минимальное значения .

Блок-схема приведена на рис. 1.18.

 

;

;

;;

;

;

;

;

;

.

Пример 3.8. Вычислить отрицательный корень уравнения , используя рекуррентную формулу . Определить количество итераций. Вычисления прекратить при .

 

Блок-схема приведена на рис. 1.20.

 

;

;

;

;

.

Пример 3.9. Вычислить значения функции , используя рекуррентную формулу . Вычисления прекратить при . Определить количество итераций.

 

Блок-схема приведена на рис. 1.21.

 

;

;

.

 

 

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

 

;

;

 

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

 

;

.

 

Выполнение цикла начинается с присвоения параметру стартового значения. Затем следует проверка, не превосходит ли параметр конечное значение. Если результат проверки утвердительный, то цикл считается завершенным, и управление передается следующему за телом цикла оператору. В противном случае выполняется тело цикла, и параметр меняет свое значение на следующее согласно заголовку цикла. Далее снова производится проверка значения параметра цикла, и алгоритм повторяется. В блок-схемах такие циклы изображаются так, как показано на рис. 3.2.

На рис. 3.2: переменная цикла, начальное значение переменной цикла, – конечное значение переменной цикла.

Блок, в котором указаны эти значения, называется блоком модификации. Шаг изменения переменной цикла равен единице. Алгоритм, изображенный на рис. 3.2, работает следующим образом: переменной цикла присваивается начальное значение, затем значение переменной цикла увеличивается на единицу, и цикл повторяется. Так продолжается до тех пор, пока переменная цикла не превысит свое конечное значение, после чего цикл заканчивается. Если шаг изменения равен -1, то в блоке модификации мы напишем: .

 

Пример 3.10. Вычислить факториал числа.

Блок-схема приведена на рис. 3.3.

 

Входные данные: – целое число, факториал которого необходимо вычислить.

Выходные данные: factorial – значение факториала числа .

Промежуточные данные: – параметр цикла.

Вводится число . Переменной factorial присваивается начальное значение. Затем организуется цикл, причем в блок-схеме для этого используется блок модификации. Здесь параметру цикла присваивается начальное значение 1, и цикл повторяется до с шагом 1. Когда параметр становится больше , цикл заканчивается и на печать выводится значение переменой factorial, которая была вычислена в теле цикла.

Теперь рассмотрим текст программы вычисления факториала на языке Borland Pascal 7.0 .

 

;

;

;

.

 

 

Операторы break и continueвведены в язык Borland Pascal 7.0. В базовой версии они отсутствуют.

Оператор break осуществляет немедленный выход из циклов repeat, while, for. Его можно использовать только внутри циклов.

 

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

 

;

;

;

;

;

;

;

.

 

Оператор continue начинает новую итерацию цикла, даже если предыдущая не была завершена. Его можно использовать только внутри цикла. Рассмотрим пример:

 

.

 

Оператор exit осуществляет выход из подпрограммы.

Оператор halt прекращает выполнение программы и возвращает код завершения в операционную систему. Структура оператора:

- переменная типа word (код завершения).

 

Если е отсутствует, то код завершения 0. Рассмотрим использование операторов exit и halt на примере вычисления факториала:

 

;

;;

;

;

.

Задание на самостоятельную работу по теме

«Структура программы на языке Borland Pascal 7.0. Операторы языка Borland Pascal 7.0»

1. Изучить материал разделов «Операторы ввода-вывода», «Форматированный вывод информации», «Оператор цикла с постусловием repeat... until», «Операторы break, continue, exit, halt»;

2. Проанализировать примеры 3.4-3.10.

3. В соответствии с заданным вариантом подготовиться к выполнению упражнений по изучаемой теме.

4. В соответствии с заданным вариантом подготовиться к аттестации по курсу «Программирование».

5. Подготовить ответы на контрольные вопросы по изучаемой теме.