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

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 Уровень повыше. Теоретика