Программирование на языке qbasic


Оператор цикла Принудительное прерывание программы



бет4/13
Дата28.06.2016
өлшемі479.5 Kb.
#163119
1   2   3   4   5   6   7   8   9   ...   13

9. Оператор цикла



Принудительное прерывание программы

До сих пор рассматривались программы, которые выполняли операторытолько один раз. Но часто бывает нужно, чтобы оператор выполнялся заданное число раз. Бывает, что нужно, чтобы оператор выполнялся до тех пор, пока выполняется некоторое заданное условие. Если записано неверное условие, то программа может выполять оператор бесконечное число раз. Для её прерывания используется комбинация клавиш CTRL+BREAK.

Приведём пример программы, которая заканчивается принудительным прерыванием.
DO

PRINT “INFORMATIKA”;

LOOP


Цикл DO……LOOP

Создадим программу, которая работает до тех пор, пока пользователь не ответит «ДА» или «да» на вопрос «Нравится ли вам QBASIC?”. Если пользователь ответит что-то другое, программа спрашивает его заново.


DO

INPUT « Нравится ли вам QBASIC?”, O$

LOOP UNTIL O$=«ДА» OR O$= «да»

PRINT « Прекрасно! »


Обратим внимание, что, если в операторе INPUT используется запятая, знак ? в конце текста не ставится, а если стоит ; ,то ставится.
Общая структура операторов DO…. LOOP:

Первая возможность – это когда логическое условие находится в конце.

Например:
DO

………(Операторы)

LOOP UNTIL (логическое выражение)
В последнем примере было логическое выражение O$=«ДА» OR O$= «да»

Вторая возможность – написать логическое выражение вначало. Например,

DO UNTIL (логическое выражение)…

…(операторы)

LOOP
Оба цикла выполняют операторы до тех пор, пока условие неверно (значение равно 0). Если условия нет, то цикл бесконечный. Иногда вместо команды UNTIL используется команда WHILE. Тогда цикл работает до тех пор, пока условие выполняется (значение –верно, т.е. отличное от нуля)

Логическое условие может быть написано вначале:

DO WHILE (логическое условие)

(операторы)

LOOP

Логическое условие может быть написано в конце:



DO

(операторы)

LOOP WHILE (логическое условие)
Если WHILE или UNTIL находятся в конце, то цикл выполняется хотя бы один раз , а если впереди, то ноль или больше раз.

Рассмотрим ещё две программы, где используется оператор WHILE или UNTIL. Программы печатают все числа от 1 до 10.


Программа 1.

I=1


DO

PRINT I
I=I+1

LOOP UNTIL I=10

Программа 2.


I=0

DO

PRINT I


I=I+1

LOOP WHILE I<10


Из цикла DO …..LOOP можно выйти и преждевременно. Для этого используется оператор EXIT DO. Рассмотрим программу, которая находит такое значение I, что II=2. Программа заканчивает выполнение, когда находит значение I с заданной точностью. Программа заканчивает работу, если не находит такое значение, т.е. I становится больше 2 и нет смысла искать значения дальше.
DO

I=I+0.0001

IF ABS (2-I^I)<0.001 THEN

PRINT “Значение равно”; I

EXIT DO

END IF


LOOP UNTIL I>2

PRINT «Программа закончила работу»


При изменении шага и точности могут возникнуть случаи, когда решения нет.

Цикл FOR...NEXT

Цикл FOR…NEXT хорошо использовать, когда нужен счётчик. Например в следующей программе мы считаем количество ходов.


FOR I=1 TO 10 STEP 2

PRINT I


NEXT
Программа напечатает 1, 3,5, 7, 9.
Циклы могут быть вложенными один в другой. Например в следующей программе.

Программа печатает таблицу умножения.


CLS´Чистит экран

FOR I=1 TO 10

FOR J=1 TO 10

PRINT I*J

NEXT J

PRINT ´Начинается новый ряд



NEXT I
Вначале закрывается внутренний цикл, затем внешний.

Можно использовать переменные цикла внутри программы, например в программе выбора цветов.


CLS

FOR I=1 TO 31

COLOR I´Выбор цвета

PRINT “Цвет“; I;

NEXT I
Выполнение цикла можно прервать. Для этого используется оператор EXIT FOR. Рассмотрим программу, которая находит наибольшее n из промежутка 1……….100, удовлетворяющее условию: 1+2+3+ +n<1000. После нахождения числа программа прерывается.
FOR N=1 TO 100

SUM=SUM+N

IF SUM >=1000 THEN EXIT FOR

NEXT N


PRINT N
В этой программе видно также, что при выходе из цикла печатается последнее принимаемое переменной значение.

Оператор GOTO

Оператор GOTO прост, однако не стоит им злоупотреблять. Приведём пример программы которая пишет на экран «Привет!» и спрашивает у пользователя разрешения сделать это снова. Если пользователь ответит утвердительно («Да» или «да»), то программа снова напишет на экране «Привет!»


Snova:´Помечаем ряд

PRINT “Привет!»

INPUT “Желаешь ещё?»; O$

IF O$=”ДА» OR O$=”да“ THEN GOTO snova


В данной программе пометили ряд словом Snova: После слова нужно двоеточие. Можно помечать ряды цифрами. Одинаковых цифр быть не может.
Рассмотрим программу, которая проверяет верность пароля. Пометим ряды цифрами.
10 INPUT “Введи пароль“; PAROOL$

20 IF PAROOL$=”Abrakadabra” THEN GOTO 50

30 PRINT “Пароль неверный!“

40 GOTO 10

50 PRINT “Пароль верный!“
Номера рядов использовались в более старых версиях Бейсика. Нумерация шла через 10, чтобы можно было вставить между ряд. В современных версиях нумерация необязательна, например предыдущую программу можно записать без нумерации следующим образом:
INPUT “Введи пароль“; PAROOL$

IF PAROOL$<>”Abrakadabra” THEN PRINT “Пароль неверный!

LOOP UNTIL PAROOL$=”Abrakadabra”

PRINT “Пароль верный!“


Приведём пример программы, которая позволяет выучить таблицу умножения.

Поскольку программа большая, её удобно запускать по- шагам, используя клавиши F8 и F4.

F8 выполняет один ряд программы.

F4 позволяет смотреть текст на экране.




PRINT "Эта программа позволяет выучить таблицу умножения"

INPUT "Какое число умножаем?"; ARV
home:
FOR I = 1 TO 10

back: 'Это обозначение ряда



PRINT ARV; "*"; I; "=";

INPUT ОТVЕT '...Ждём ответа
'Если ответ неверный пишем заново условие и считаем количество неверных ответов.

IF ARV * I <> VASTUS THEN

PRINT "Неверно! Попробуй ещё!"

Valesid = Valesid + 1'Считаем количество неверных ответов



GOTO back

END IF
'Сюда попадаем, если ответ верный

NEXT I

'здесь проверяется, были ли ошибки

IF Valesid <> 0 THEN

CLS
PRINT "Сделал ошибки. Начнём сначала."
'Обнуляем количество неверных ответов

Valesid = 0



GOTO home

END IF
'Сюда попадаем, если все 10 ответов были верны

PRINT "Молодец!"






Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   13




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет