Главная » Basic » ПРОСТЫЕ ОПЕРАТОРЫ IF

0

Обсуждавшиеся до  сих  пор  программы имели  очень  простую  структуру  —  последовательность действий, подобную иллюстрированной в приведенном выше примере в разд. 3.1. Эта структура, или, скорее,  отсутствие  содержательной  структуры,  не  позволяет  решить  многие  задачи.  Однако  в дополнение к ней существует возможность производить проверку выполнения условий с помощью оператора IF, позволяющую разрабатывать более разносторонние программы.

Рассмотрим следующую программу: 10 INPUT А, B

20 IF A>B THEN 50

30   PRINT А,В

40 STOP

50   PRINT В,А

60 END

Ее действия таковы: вводятся два числа и печатаются в порядке возрастания. В строке 20 проверяется условие "А больше В"; если оно выполнено, то управление передается строке 50, в которой меньшее из двух значений (В) печатается первым. Если это условие не выполнено, то управление передается следующему оператору (строке 30), который первым печатает значение  А.  Обратите внимание на оператор STOP, завершающий исполнение программы.

Оператор STOP Общая форма записи: STOP

Вызывает завершение исполнения программы; может указываться многократно или вообще  не присутствовать.   Обычно   этим   оператором   нельзя   заменить   оператор   END,   являющийся последним оператором программы.

Когда при  исполнении программы очередь доходит до оператора STOP,  то  система  прекращает исполнение программы и выдает приглашение к вводу другой команды. Обычно в программе должен быть только один оператор END (при этом он должен иметь наибольший  номер), но в некоторых системах разрешается многократное использование оператора END в качестве

эквивалента оператора STOP.

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

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

Эта программа должна печатать сообщение, указывающее знак введенного числа.

10 PRINT "ВВЕДИТЕ ЧИСЛО"

20 INPUT N

30 IF N≥0 THEN 60

40   PRINT "ВАШЕ ЧИСЛО ОТРИЦАТЕЛЬНО"

50 STOP

60 IF N<>0 THEN 90

70   PRINT "ВАШЕ ЧИСЛО НУЛЬ"

80 STOP

90   PRINT "ВАШЕ ЧИСЛО ПОЛОЖИТЕЛЬНО" 100 END

Простой оператор IF Общая форма записи: IF e THEN s

Здесь е условие, которое может быть выполнено или нет, a sномер оператора.

Если условие е истинно, то управление передается оператору с номером s. В противном  случае исполняется оператор, номер которого следующий за номером оператора IF.

В некоторых системах дополнительно разрешается форма

IF e GO TO s имеющая ровно тот же смысл, что и приведенная выше.

В других системах, например в Бейсике ВВС, после THEN разрешается указывать любой оператор Бейсика (кроме IF). Например:

IF A=2+В THEN PRINT   "СУММА РАВНА" ,А

IF X>Y THEN STOP

Если Ваша система с Бейсиком позволяет указывать в одной строке несколько операторов, то будьте осторожны при применении оператора IF: если условие не выполнено, управление будет  передано следующей строке, а не следующему оператору.

Ниже  приведены  допустимые  формы  оператора  IF.  Если  условие  выполняется,  то  управление передается оператору с номером s:

b b

o b

b или

b или

Зачастую  оператор  IF  используется  для  присваивания  переменной  одного  из  двух   значений.

Например, приведенные ниже операторы программы присваивают переменной Y значение 1, если X

= 50, и значение 0 в противном случае (в строке 70 оператор GO TO передает управление строке 100;

подробнее об этом операторе см. подразд. 3.2.1) .

50  IF X = 50 THEN 80

60     Y=0

70  GO TO 100

80     Y=1 100—-

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

Если условие (X = 50) выполнено, то управление передается в правый нижний прямоугольник;  в противном случае —в левый нижний прямоугольник. Происходящие в строке 100 действия должны быть изображены под этими прямоугольниками.

Если результатом выполнения оператора IF может быть только одно действие, то один из  нижних прямоугольников надо оставить пустыми. Например, операторы

40  IF X=10 THEN N=N+1 60   INPUT A можно проиллюстрировать следующей структограммой:

Условие в операторе IF может содержать довольно сложные выражения, например: IF A+B>43 THEN  210

IF А/С≤В+100+D THEN 92

IF 10=A+B THEN A=B/4

Условные выражения можно комбинировать с помощью логических операций NOT (НЕ), AND (И), OR   (ИЛИ).   Обычно  смысл  этих   операций  нетрудно  определять,  читая  выражение,   но   при необходимости иметь более полные сведения см. подразд. 6.1.1. Приведем пример применения этих операций:

IF X>1 AND Y>1 THEN 90 IF NOT (X>2) THEN STOP IF X>1 OR X<0 THEN 100

3.2.1.  ОПЕРАТОР GO TO

Оператор GO TO всегда вызывает передачу управления указанному в нем оператору.

Оператор GO TO Общая форма записи: GO TO s или

GO TO s          (запись одним словом)

Управление передается оператору с номером s.

Учтите, что в Бейсике ВВС не допускается первая форма записи (с пробелом) и разрешается только форма GO TO.

Приведем  примеры  этого   оператора,  позволяющего  "перескакивать"

назад или вперед: GO TO 50

GO TO 9999

Обратившись к рис. 3.1, Вы можете заметить, что для оператора GO TO не предусмотрено никакой диаграммы. Причина этого проста: оператор не принадлежит к специальным образом подобранному набору структур, обеспечивающему разработку программы любого типа. Используйте оператор GO TO  с  большой осторожностью. Лучше  всего сочетать его  с  другими  операторами так,  чтобы в результате образовывались стандартные структуры, изображенные на рис. 3.1.

3.2.2.  ПРИМЕР ПРОГРАММЫ

Рассмотрим  программу  для  перевода  температуры  из  шкалы  Цельсия  в  шкалу   Фаренгейта.

Соответствующая формула имеет вид

Температура по Фаренгейту = (температура по Цельсию)*180/100 + 32.

Можно написать такую программу:

10   INPUT С

20     F=C*180/100+32

30        PRINT  C, F 40  END

Она выдает вполне удовлетворительный результат, но от Вас требуется помнить, что символизируют С и  F и  в каком порядке они печатаются. Было бы лучше печатать пояснения, для чего можно добавить строки:

30 PRINT   "ТЕМПЕРАТУРА ПО ЦЕЛЬСИЮ =";С

35 PRINT   "ТЕМПЕРАТУРА ПО ФАРЕНГЕЙТУ =";F

6    PRINT     "ПРОГРАММА ПРЕОБРАЗОВАНИЯ ТЕМПЕРАТУРЫ ИЗ ГРАДУСОВ  ЦЕЛЬСИЯ"• $ PRINT   " В ГРАДУСЫ ФАРЕНГЕЙТА"                                            ГРАДУСОВ ЦЕЛЬСИЯ ,

7  PRINT   "УКАЖИТЕ ТЕМПЕРАТУРУ В ГРАДУСАХ ЦЕЛЬСИЯ"

Измененная программа выводит результаты в следующем виде (ответы пользователя подчеркнуты): RUN

ПРОГРАММА  ПРЕОБРАЗОВАНИЯ  ТЕМПЕРАТУРЫ  ИЗ  ГРАДУСОВ  ЦЕЛЬСИЯ  В  ГРАДУСЫ ФАРЕНГЕЙТА

УКАЖИТЕ ТЕМПЕРАТУРУ В ГРАДУСАХ ЦЕЛЬСИЯ

ТЕМПЕРАТУРА ПО ЦЕЛЬСИЮ =50 ТЕМПЕРАТУРА ПО ФАРЕНГЕЙТУ=122

END AT LINE 40

Будучи полезной для преобразования одного значения температуры, эта программа не очень удобна для  преобразования ряда  значений,  так  как  ее  придется запускать  столько  раз,  сколько  всего значений. Чтобы программа могла обработать последовательность значений, надо после исполнения оператора печати в строке 35 вернуть управление на строку 6. Добавив строку

37  GOТО 6

и три  оператора REM, получим

LIST

1  REM ПРЕОБРАЗОВАНИЕ ТЕМПЕРАТУРЫ ИЗ ГРАДУСОВ ЦЕЛЬСИЯ

2  REM В ГРАДУСЫ ФАРЕНГЕЙТА

3  REM С=ТЕМПЕРАТУРА ПО ЦЕЛЬСИЮ, F=ТЕМПЕРАТУРА ПО ФАРЕНГЕЙТУ

5  PRINT "ПРОГРАММА ПРЕОБРАЗОВАНИЯ ТЕМПЕРАТУРЫ ИЗ ГРАДУСОВ ЦЕЛЬСИЯ"

6  PRINT " В ГРАДУСЫ ФАРЕНГЕЙТА"

7  PRINT "УКАЖИТЕ ТЕМПЕРАТУРУ В ГРАДУСАХ ЦЕЛЬСИЯ"

10   INPUT  С

20     F=C*180/100+32

30 PRINT "ТЕМПЕРАТУРА ПО ЦЕЛЬСИЮ =";С

35 PRINT "ТЕМПЕРАТУРА ПО ФАРЕНГЕЙТУ =";F

37 GO TO 6

40 END

ПРОГРАММА ПРЕОБРАЗОВАНИЯ ТЕМПЕРАТУРЫ ИЗ ГРАДУСОВ ЦЕЛЬСИЯ В ГРАДУСЫ ФАРЕНГЕЙТА

УКАЖИТЕ ТЕМПЕРАТУРУ В ГРАДУСАХ ЦЕЛЬСИЯ

?50

ТЕМПЕРАТУРА ПО ЦЕЛЬСИЮ=50

ТЕМПЕРАТУРА ПО ФАРЕНГЕЙТУ=122

УКАЖИТЕ ТЕМПЕРАТУРУ В ГРАДУСАХ ЦЕЛЬСИЯ

ТЕМПЕРАТУРА    ПО    ЦЕЛЬСИЮ    =80    ТЕМПЕРАТУРА    ПО    ФАРЕНГЕЙТУ    =176

УКАЖИТЕ И Т. Д.

Эта  программа будет  без  конца  повторяться между  строками 6  и   37.  Воспользовавшись конструкциями  рис. 3.1, получим для нее диаграмму следующего вида:

ПЕЧАТЬ заголовка Повторять без конца

ПЕЧАТЬ запроса на ввод

ВВОД С

F=C*180/100+32

ПЕЧАТЬ результатов КОНЕЦ

Остановиться можно, только прервав исполнение  программы. Обычно для  этого  имеется специальная команда. Однако  такой  ситуации  нельзя  допускать при разработке хорошей программы; поэтому сделаем так, чтобы программа завершала свою работу при  получении определенного значения С, скажем 9999. Добавив оператор

15   IF С =9999 THEN STOP получим

LIST

1    REM ПРЕОБРАЗОВАНИЕ ТЕМПЕРАТУРЫ ИЗ ГРАДУСОВ ЦЕЛЬСИЯ

2  REM В ГРАДУСЫ ФАРЕНГЕЙТА

3  REM С=ТЕМПЕРАТУРА ПО ЦЕЛЬСИЮ. F=ТЕМПЕРАТУРА ПО ФАРЕНГЕЙТУ

6 PRINT "ПРОГРАММА ПРЕОБРАЗОВАНИЯ ТЕМПЕРАТУРЫ ИЗ ГРАДУСОВ ЦЕЛЬСИЯ";

6  PRINT " В ГРАДУСЫ ФАРЕНГЕЙТА"

7  PRINT "УКАЖИТЕ ТЕМПЕРАТУРУ В ГРАДУСАХ ЦЕЛЬСИЯ" 10 INPUT С

15    IF С=9999 THEN STOP

2В   F=C*180/100+32

38 PRINT "ТЕМПЕРАТУРА ПО ЦЕЛЬСИЮ=";С

35 PRINT "ТЕМПЕРАТУРА ПО ФАРЕНГЕЙТУ=";F

37 GOTO 6

40 END RUN

ПРОГРАММА   ПРЕОБРАЗОВАНИЯ   ТЕМПЕРАТУРЫ   ИЗ   ГРАДУСОВ   ЦЕЛЬСИЯ    В ГРАДУСЫ ФАРЕНГЕЙТА

УКАЖИТЕ ТЕМПЕРАТУРУ В ГРАДУСАХ ЦЕЛЬСИЯ

ТЕМПЕРАТУРА ПО ЦЕЛЬСИЮ 50 ТЕМПЕРАТУРА ПО ФАРЕНГЕЙТУ=122 52

УКАЖИТЕ ТЕМПЕРАТУРУ В ГРАДУСАХ ЦЕЛЬСИЯ

?80

ТЕМПЕРАТУРА ПО   ЦЕЛЬСИЮ  =   80

ТЕМПЕРАТУРА  ПО   ФАРЕНГЕЙТУ   =176

УКАЖИТЕ ТЕМПЕРАТУРУ В  ГРАДУСАХ   ЦЕЛЬСИЯ

?9999

END  AT   LINE   40

Выполняемые этой программой действия можно изобразить следующей диаграммой:

Эта диаграмма гораздо лучше предыдущей, так как обладает точкой завершения работы.

3.3. ЦИКЛЫ

В  предыдущем  разделе  было  показано,  как  можно  обеспечить повторение исполнения последовательности операторов и управлять завершением полученного таким образом цикла. Если нам заранее известно, сколько значений температуры требуется преобразовать, то в процессе преобразования можно подсчитать число преобразованных значений и  перейти на конец программы, как только будет выполнено заданное число преобразований.  Такой цикл можно    организовать   с    помощью    оператора    IF,    переменной   I    (счетчика   цикла), регистрирующей число выполненных повторений, и  переменной N, содержащей требуемое число повторений:

10 INPUT N 20 I=1

30 IF I>N THEN 90

40   INPUT С

50   F=C*180/100+32

60   PRINT F

70   I=I+1

80 GOTO 30

90 END

Не считая ввода значения N, для управления  циклом используются следующие операторы:

строка 20, которая устанавливает счетчик I равным 1, строка

30, которая проверяет, не сделано ли  уже N повторений, строка 70, которая при каждом проходе цикла увеличивает счетчик I на 1, а также строка 80, которая возвращает управление на начало цикла

-   строку 30. И вновь оператор GO TO надо представлять в структограмме только как элемент цикла,

так что эту программу можно изобразить в следующем виде:

В этой диаграмме смущает потеря оператора IF. Она произошла потому, что этот оператор вошел в конструкцию "ПОВТОРЯТЬ,  ПОКА".  Горизонтальная черта  показывает,  что  проверка   условия происходит перед выполнением оператора INPUT С (ВВОД С) .

Кроме  указанного  метода  организации  цикла есть  еще  несколько  способов.  Например, удалите строки 30 и 80 и вставьте строку

80 IF I≤N THEN 40

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

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

ВВОД N Присвоить I начальное значение

ВВОД С F=С* … ПЕЧАТЬ F Увеличить I на 1

ПОВТОРЯТЬ ДО I> N

КОНЕЦ

И вновь оператор IF, на этот раз замыкающий цикл, поглощен конструкцией "ПОВТОРЯТЬ ДО". Многие языки программирования, в том числе некоторые расширенные   версии Бейсика, содержат особые операторы для облегчения выполнения подобных циклов, что позволяет избежать несколько "неуклюжего" употребления операторов IF и GOTO.

Первая из рассмотренных форм организации циклов соответствует действию операторов FOR-NEXT,

описанных в следующем разделе.

Источник: Уолш Б.    Программирование на Бейсике: Пер. с англ. М.: Радио и связь, 1988. 336 с: ил.

По теме:

  • Комментарии