Лекция: Управляющие конструкции QBasic
1. Оператор безусловного перехода GOTO N, где N-метка. В качестве N можно взять любое число, не обязательно совпадающее с номером строки, так как в QBasic 4.5 строки можно не нумеровать. Но двух одинаковых меток в одной программе не должно быть. Исполнение программы будет продолжено с той её части, которая начинается с указанной метки.
Пример:
.......
GOTO 10
.......
10 PRINT «Текст»
.......
2. Условный оператор IF...THEN...ELSE (Если… Тогда… Иначе):
IF <условие> THEN <список операторов> ELSE <список операторов>
Если заданное условие истинно, выполняется список операторов, стоящий после THEN, в противном случае выполняется список операторов, стоящий после ELSE.
Слово ELSE может и отсутствовать. Тогда происходит переход к строке, следующей за оператором IF...THEN.
Условия представляют собой логические соотношения: равенства или неравенства = равно, <> неравно, > больше, < меньше, >= больше или равно, <= меньше или равно.
При использовании сложных условий (объединении двух и более условий) применяют слова AND (И) и OR (ИЛИ): Условие1 AND (или OR) Условие2...
Условный оператор позволяет реализовать алгоритм с ветвлением.
Пример 2:
CLS
INPUT «Введите год основания Москвы: M=»; M
IF M = 1147 THEN PRINT «Вы правы!» ELSE PRINT «Вы ошиблись!»
Пример 2:
CLS
PRINT «Вычислите y=1/(x-2) для всех x»
INPUT «Введите x=», x
IF x = 2 THEN PRINT «При x=2 функция не определена!»: END
y = 1 / (x — 2)
PRINT «y=»; y
Применяется также частный случай условного оператора — оператор условного перехода: IF <условие> GOTO N ELSE <список операторов> Число N — метка. Если условие выполняется, то происходит переход по метке N, а иначе выполняется список операторов, стоящих после ELSE. Слово ELSE может и отсутствовать. Тогда происходит переход к строке, следующей за оператором IF...GOTO.
Пример 3:
CLS
INPUT «Если хочешь каникулы, вводи 1. Если нет, любое число. n=», n
IF n = 1 THEN GOTO 10 ELSE GOTO 20
10 PRINT «Хочу каникулы!»: END
20 PRINT «Хочу учиться!»
3. Оператор цикла FOR...TO...NEXT... позволяет реализовать циклический алгоритм, когда часть программы может быть выполнена много раз подряд. FOR...TO… — начало цикла, NEXT… — конец цикла.
То, что стоит между началом и концом цикла, называется телом цикла. Иногда также применяются вложенные циклы, то есть циклы могут быть вложенными один в другой.
FOR X=A TO B STEP H
...................
NEXT X
Здесь X — переменная, A — начальное значение переменной, B — конечное значение переменной, H — шаг, с которым меняется переменная. Если шаг STEP H отсутствует, то по умолчанию шаг H=1. При этом переменная X называется счётчиком цикла. Повторение участка программы с шагом H происходит до тех пор, пока X<B. Число повторений цикла равно (B-A)/H. При X=B цикл заканчивается и выполняется оператор, следующий за оператором конца цикла NEXT. Возможно, что шаг H<0, но тогда A>B.
Пример 1: Напечатать на экране текст 20 раз.
CLS
FOR X=1 TO 20
PRINT «С Новым Годом!»
NEXT X
Пример 2: Вычислить сумму n первых членов ряда S=1+1/4+1/9+...+1/n^2
CLS
INPUT «Введите число членов ряда: n=», n
FOR i = 1 TO n
S = S + 1 / i ^ 2
NEXT i
PRINT «Сумма n первых членов ряда равна: S=», S
Примеры 5,6: Одновременное использование циклического и условного операторов. Вычисление функций, имеющих ограничения в области определения.
Примечание: Оператор IF...THEN...ELSE в QBasic должен быть записан в одну строку!
Пример 5.
CLS
REM Вычислить функцию y=1/(x^2-5*x-6)
FOR x = -10 TO 10
IF x ^ 2 — 5 * x — 6 = 0 THEN PRINT «При x=-1, x=6 функция не определена!»
ELSE y = 1 / (x ^ 2 — 5 * x — 6)
PRINT «x=»; x, " y="; y
NEXT x
Пример 6.
CLS
REM Вычислить функцию y=1/SQR(x^2-3*x+2)
FOR x = -5 TO 5
IF x >= 1 AND x <= 2 THEN PRINT «При 1<=x=<2 функция не определена!»
ELSE y = 1 / SQR(x ^ 2 — 3 * x + 2)
PRINT «x=»; x, " y="; y
NEXT x
Задачи
1. Нарисуйте блок-схему линейного алгоритма. Приведите пример программы с линейным алгоритмом на языке QBasic.
2. Нарисуйте блок-схему разветвляющегося алгоритма. Приведите пример программы на QBasic с разветвляющимся алгоритмом.
3. Нарисуйте блок-схему циклического алгоритма. Приведите пример программы на QBasic с циклическим алгоритмом. Вычислите сумму первых n членов арифметической прогрессии.