Операторы IF...THEN [...ELSE]

 

Операторы IF..THEN [..ELSE] предназначены для изменения порядка выполнения программы в зависимости от значения выражения, следующего за опцией IF.

Синтаксис:

IF <выражение> THEN <оператор(ы)>|<номер строки>

[ELSE<оператор(ы)>|<номер строки>]

За THEN может следовать либо номер строки, на которую следует осуществить переход, либо один или более операторов, которые необходимо выполнить. Допускается вложенность операторов IF..THEN...ELSE. Вложенность ограничивается только длиной строки.

Например, оператор

IF X>Y THEN PRINT "GREATER" ELSE IF Y>X

THEN PRINT "LESS THAN" ELSE PRINT "EQUAL"

является допустимым оператором. Если оператор состоит из разного количества предписаний ELSE и THEN, то каждому предписанию ELSE соответствует ближайшее THEN, у которого нет пары ELSE.

Например, оператор

IF A=B THEN IF B=C THEN PRINT "A=C"

ELSE PRINT "A<>C"

не будет печатать "A<>C", когда A<>B.

 

Задача: на дороге стоит ящик массой m, который необходимо сдвинуть с места машиной которая имеет силу тяги Ft тросом с пределом прочности d, извесно также коэф.трения k.

INPUT "введите массу тела"; m

INPUT "Введите коэф. трения."; k

INPUT "Введите силу тяги"; ft

INPUT "Введите предел прочности троса"; d

REM находим силу трения

f = 9.8 * m * k

REM сравним силу трения и силу тяги

IF f > ft THEN PRINT "Не хватит мощности машины": END

REM сравним силу тяги с прочностью троса

IF ft > d THEN PRINT " порвется трос": END

REM если не выполняется не одно из условий то груз сдвинется"

PRINT "груз сдвинется с места"

 

 

 

 

 

IF...GOTO

 

Операторы IF...GOTO предназначены для изменения порядка выполнения программы в зависимости от значения выражения, следующего за опцией IF.

Синтаксис:

IF <выражение> GOTO <номер строки>

[ELSE<оператор(ы)>|<номер строки>]

Если значение <выражения> не равно нулю, то выполняется предписание THEN или GOTO.

За GOTO всегда следует метка. Если значение <выражения> равно нулю, то предписания THEN или GOTO игнорируются и выполняется предписание ELSE (если оно задано). Выполнение продолжается со следующего выполняемого оператора.

IF(I<20) THEN D=100-I :GOTO м7

PRINT "привет"

В этом примере проверяется, имеет ли переменная I значение, большее 10 и меньшее 20.

В случае, если значение I находится в этом интервале, то производится вычисление D и осуществляется переход на строку с меткой 7. В противном случае выполнение программы продолжается со следующей строки.

 

 

IF...THEN...ELSE

 

IF.. .THEN... ELSE — управляющий оператор, осуществляющий условное ветвление операций, основанное на оценке логического выражения. Выражение может быть истинным или ложным.

Блочный синтаксис:

IF логическое_вырожение THEN

[блок_операторов_1 ]

[ELSE IF логическое_выраженив_2 THEN

[блок_операторов_2]

[ELSE

[блок_операторов_п]]

END IF

• логическое_выражение — выражение, возвращающее ненулевое значение (истина) или ноль (ложь)

• блок операторов — любое количество операторов

 

Линейный синтаксис:

IF логическое выражение THEN операторы 1 [ELSE операторы2]

• операторы1 — операторы, выполняющиеся при значении логического выражения "истина"

• операторы2 — операторы, выполняющиеся при значении логического выражения "ложь"

При блочной форме, Microsoft BASIC тестирует первое логическое выражение. Если оно ненулевое ("истина"), выполняются операторы блока THEN. Если первое выражение равно нулю ("ложь"), Microsoft BASIC оценивает каждое условие ELSEIF. При выполнении такого условия выполняются операторы данного блока. Если ни одно из условий ELSEIF не выполнено (все = "ложь"), выполняются операторы блока ELSE.

 

Блоки ELSE и ELSEIF могут быть опущены. В блочную структуру IF можно вставить любое количество условий ELSEIF. Каждый из блоков может также содержать вложенные блочные структуры IF.

Для идентификации блочной структуры IF Microsoft BASIC определяет, что находится в строке после слова THEN. Структура считается линейной, если после THEN есть операторы (кроме комментариев).

Операторы IF, ELSE, ELSEIF и END IF должны быть первыми операторами в строке. Блок должен заканчиваться оператором END IF.

Блочная форма IF...THEN имеет следующие преимущества перед линейной:

• Больше структурированности и гибкости путем использования нескольких условий.

• Больше сложных условий.

• Более длинные операторы и структуры.

• Программы легче читаются, выполняются и трассируются.

Примеры линейной и блочной форм IF...THEN... ELSE

 

Линейная Форма:

CLS

DO

INPUT 'Введите число, большее 0 и меньшее 1000:', х IF x >- О AND x < 1000 THEN EXIT DO ELSE PRINT "Повторите"

LOOP

IF x < 10 THEN у - 1 ELSE IF x < 100 THEN у - 2 ELSE у - 3

PRINT 'Число имеет', у; "знаков"

 

Блочная форма:

CLS DO

INPUT 'Введите число, большее 0 и меньшее 1000:', х IF x >- О AND x < 1000 THEN

EXIT DO ELSE

PRINT 'Повторите' END IF LOOP

IF x < 10 THEN

У- I ELSEIF x < 100 THEN

У-2 ELSE

v •" 3 END IF PRINT "Число имеет', у, "знаков"

 

 

Условный оператор (Паскаль)

 

Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор — это средство ветвления вычислительного процесса.

Структура условного оператора имеет следующий вид:

IF <условие> THEN <оператор1> ELSE <оператор2>,

где

IF, THEN, ELSE — зарезервированные слова (если, то, иначе};

<условие> — произвольное выражение логического типа;

<оператор1>, <оператор2> — любые операторы языка Турбо Паскаль.

Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение <условие>. Если результат есть TRUE (истина), то выполняется <оператор1>, а <оператор2> пропускается; если результат есть FALSE (ложь), наоборот, <оператор1> пропускается, а выполняется <оператор2>. Например:

 

var

х, у, max: Integer;

begin

if x > max then

у := max else

у := x;

 

При выполнении этого фрагмента переменная У получит значение переменной X, если только это значение не превышает МАХ, в противном случае У станет равно МАХ.

Часть ELSE <оператор2> условного оператора может быть опущена. Тогда при значении TRUE условного выражения выполняется <оператор1>, в противном случае этот оператор пропускается:

 

var

x, у, max: Integer;

begin

if x > max then max := x;

у := x;

 

В этом примере переменная У всегда будет иметь значение переменной X, а в МАХ запоминается максимальное значение X.

 

Поскольку любой из операторов <оператор1> и <оператор2> может быть любого типа, в том числе и условным, а в то же время не каждый из “вложенных” условных операторов может иметь часть ELSE <оператор2>, то возникает неоднозначность трактовки условий. Эта неоднозначность в Турбо Паскале решается следующим образом: любая встретившаяся часть ELSE соответствует ближайшей к ней “сверху” части THEN условного оператора. Например:

var

a,b,c,d : Integer;

begin

a := 1; b := 2; с := 3; d := 4;

if a > b then if с < d then if с < 0 then

с := 0 else

a := b; (а равно 1} if a > b then if g then if с then

с := 0 else else else

a := b; {а равно 2}

Рассмотрим программу (пример 2.4), которая вводит произвольное десятичное целое число в диапазоне О... 15, преобразует его к шестнадцатеричному и выводит на экран полученный результат.

Пример 2.4 Program Hex;

{Программа вводит с клавиатуры целое число в диапазоне от 0 до 15, преобразует его к шестнадцатеричной системе счисления и выводит результат на экран} var

n : Integer; {Вводимое число}

ch : Char; {Результат}

begin

Write('n = ') ;

ReadLn(n); / Вводим число }

{Проверяем число на принадлежность к диапазону 0...15}

if (n >= 0) and (n <= 15) then

begin {Да, принадлежит диапазону}

if n < 10 then

ch := chr(ord('0') + n

else

ch := chr(ord('A') + n - 10);

WriteLn('n = ',ch)

end

else ' {He принадлежит диапазону}

WriteLn('Ошибка')

end.

В шестнадцатеричной системе счисления используется 16 цифр в каждом разряде: цифры О...9 обозначают первые 10 возможных значений разряда, буквы A...F — остальные шесть.

В программе учитывается непрерывность и упорядоченность множеств цифр 0...9, букв A...F и их кодов

 

 

Select case – управляющий оператор выполняющий один из нескольких блоков операторов в зависимости от значения выражения.

Выражение выбора – любое числовое или символьное выражение

Список выражений – одно или несколько выражений такого же типа как и выражение выбора. Ключевое слово Case должно предшествовать блоку операторов.

Операторы цикла – содержат любое количество операторов. если используется ключевое слово ТО для определения пределов выражения, то меньшее значение должно быть первым. Например CASE 1 ТО 5

Синтаксис:

Select Case проверочное выражение

Case значение 1

Операторы

Case значение 2

Операторы

Case else

Операторы.

End select

 

Например:

INPUT a

SELECT CASE a

CASE 1

PRINT "равно 1"

CASE 2, 3

PRINT " число 2 или 3"

CASE 4 TO 6

PRINT "больше или равно 4 и меньше или равно 6"

CASE IS >= 9

PRINT "больше или равно 9"

CASE ELSE

PRINT "ни одно из присутсвующих"

END SELECT

В качестве значения блока можно указывать не только одно значение но и несколько разделенные запятой. Можно также определить область сравнение или воспользоваться относительным сравнением (Is>=9)

 

Переключатели (ON n% GOTO..., ON n% GOSUB...)

ON n% GOTO список_номеров (меток) ON n% GOSUB список_номеров (меток) Пример списка_номеров (меток):

а1,а2,120, bt

332

Переменная п (в общем случае — арифметическое выражение целого типа) может принимать целые значения 1, 2, 3, ... Если n = 1, управление передается блоку с первой меткой из списка (т. е. с меткой а1); если n = 2, управление получает блок а2, если n = 3 — блок 120, если n = 4 — блок bt и т. д.

После выполнения подпрограммы (которая завершается командой RETURN — см. предыдущий пункт) управление возвращается команде, следующей за ON.

Иногда переменную n называют переключателем (она переключает выполнение программы на тот или иной блок, в зависимости от номера, поступающего в n). Профессионалы рекомендуют вместо ON... пользоваться оператором множественного выбора SELECT CASE.