Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
27.04.2015
Размер:
290.5 Кб
Скачать

2.5.1.3. Средства программирования разветвляющихся структур

 

На практике редко встречаются задачи, решение которых представляется только в виде алгоритмов линейной структуры. Как правило, приходится решать задачи, в которых в зависимости от выполнения некоторого логического условия необходимо органи­зовать вычисления по одной из нескольких ветвей алгоритма. Алгоритмы решения таких задач строятся с использованием раз­ветвляющихся алгоритмических структур. В результате проверки логического выражения(“Истина” или “Ложь”) управление передается ветке “Да” или “Нет”.

Логические выражения, в отличие от арифметических, содержат операции отношения(=, <, >, <=, >=, <>), а также еще пятьлогических операций, записанных далее в порядке убывания приоритета: отрицание -NOT, логическое умножение (логическое “И”) -AND, логическое сложение (логическое “ИЛИ”) -OR, исключающее “ИЛИ” -XOR, эквивалентность -EQV.

Результатом выполнения логического выражения может быть “Истина” (не 0)или “Ложь” (0). Например,NOT 7<9всегда прини­мает значение “Ложь”, что соответствует значению0, а4>3 AND 7<9принимает значение “Истина”, что соответствует-1.

В табл. 2.5.1-5 приведено описание логических операций. Здесь T(true) - “Истина”, аF(false) “Ложь”.

Таблица 2.5.1-5

Значения операндов

NOT x

x AND y

x OR y

x XOR y

х EQV y

X

Y

T

T

F

T

T

F

T

T

F

F

F

T

T

F

F

T

T

F

T

T

F

F

F

T

F

F

F

T

 

 Разветвляющиеся алгоритмические структуры в языках про­граммирования реализуются операторами условного перехода.ВQBдля программирования условных переходов используются три типа операторов:однострочный IF,блочныйIFи оператор выбораSELECT CASE

Однострочный оператор IFимеет следующий формат:

 

If выражение then оператор(ы) [else оператор(ы)]

 

Порядок выполнения оператора следующий: если значение выражения не нуль (“Истина”), то выполняется оператор (или операторы), стоящий послеTHEN, в противном случае выполняются операторы, стоящие послеELSE. КонструкцияELSEможет от­сутствовать (в формате она взята в квадрат­ные скобки) – случай усеченного разветвления.

Выражениеможет быть логическим или арифметическим. Ненулевое значение арифметического выражения интерпретируется как “Истина”, а нулевое - как “Ложь”.

Особенностью однострочного оператора IFявляется то, что он должен располагаться в одной строке программы.

Приведем примеры записи однострочного оператора IF:

IF x > 0 THEN y=SQR(x) ELSE y=1

IF d THEN epsilon=0.001

IF lambda < 1 OR beta = 3 THEN PRINT lambda, beta : x=0

IF x < 10 THEN y=1 ELSE IF x < 100 THEN y=2 ELSE y=4 

Если запись оператора не умещается в пределах экрана, а также при программировании вложенных разветвлений, используется блочный(многострочный) операторIF. Он имеет следующий формат:

IF выражение_1 THEN     [ блок_операторов_1 ] [ ELSEIF выражение_2 THEN     [ блок_операторов_2 ] . . . [ ELSE     [ блок_операторов_n ] ] END IF 

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

Порядок выполнения оператора следующий: если значение выражения_1Истина” - выполняетсяблок_операторов_1и далее управление передается оператору, следующему послеEND IF. Есливыражение_1“Ложь”, то проверяется значение следующего выражения и так далее. После выполнения любого блока операторов управление всегда передается оператору, следующему послеEND IF. Конструкций типаELSEIFможет быть несколько.Блок_операторов_n, следующий заELSE,выполняется в том случае, если последовательные проверки всех выражений выше дали значение “Ложь”. КонструкцииELSEIFиELSEмогут отсут­ствовать, что и отмечается в синтаксисе оператора квадратными скобками. Особенностью оператора является то, что словоTHENдолжно быть последним в строке, а словоELSE- единственным. СловоELSEIFзаписывается слитно, а словаEND IF- через пробел.

Примеры блочных операторов IF:

1)

IF X>0 THEN

y=SQR(x)

z=1+y

p=4

END IF

2)

IF x < 10 THEN     y=1 ELSEIF x < 100 THEN      y=2 ELSEIF x < 1000 THEN   y=3

ELSE

y=4    

END IF

Оператор SELECT CASEпозволяет осуществить разветвление по любому фиксированному числу ветвей. Он имеет следующий формат:

SELECT CASE выражение CASE тест_1 [блок_операторов_1] [CASE тест_2 [блок_операторов_2]] 

. . . [CASE ELSE [блок_операторов_n]] ENDSELECT

 Здесь выражение– арифметическое или строковое, атест_iможет иметь одну из трех форм:

1)выражение [, выражение . . .]

2)выражение TO выражение

3)IS операция_отношения выражение

 

Например, строки CASEмогут содержать следующие тесты:

CASE IS >3‘проверка на превышение значения 3;CASE x^2 ‘проверка на равенство значению выражения; CASE 5 TO 7‘ проверка на принадлежность отрезку [5;7];CASE 1 TO 4,  7 TO 9,  11, 13,  IS > Max.

 В последнем примере через запятую перечисляются несколько тестов, при этом результат проверки выражения считается ис­тинным, если выполняется хотя бы один из тестов.

Порядок выполнения оператора SELECT CASEследующий: если значениевыраженияудовлетворяеттеступосле конструк­цииCASE, то выполняетсяблок_операторов, а затем управление передается оператору, следующему после конструкцииEND SELECT. В противном случае проверяется следующийтести так далее. Все конструкцииSELECT CASEрабо­тают аналогично.Блок_операторов_n, расположенный послеCASE ELSEвыполняется в том случае, если последовательные проверки всехтестоввыше дали значе­ние “Ложь”.

Оператор имеет следующие особенности: тест_1,тест_2и так далее должны быть последними в строке, а конструкцияCASE ELSEдолжна быть единственной в строке.

Соседние файлы в папке 2 Уровень повыше. Теоретика