программирование на языке бейсик

 

УРОК 5. Оператор цикла

Довольно часто в программе выполняются одинаковые действия. Для этих целей используется оператор цикла. Приведем пример. Допустим необходимо вывести на экран десять положительных чисел от 1 до 10, как это показано ниже.

FOR i1%= 1 TO 10

PRINT i1%

NEXT i1%

В данном примере переменная i1% принимает значения от 1 до 10, которые и выводятся на экран. Сначала переменная i1% принимает значение 1 (FOR i1%= 1), оно выводится на экран, затем на единицу больше («2»), которое также выводится на экран на следующей строчке и так далее до тех пор, пока переменная не примет значение 10 (TO 10), которое будет выведено на экран и программа закончит выполнение своей работы.

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

FOR i1%= 1 TO 10

PRINT i1%,

NEXT i1%

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

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

FOR i1%= 2 TO 20 STEP 2

PRINT i1%,

NEXT i1%

В этой программе первоначальное значение для переменной i1% будет равно 2, затем следующее значение будет на 2 больше («STEP 2» - с шагом 2), то есть 4, затем 6 и так до 20. Значения будут выведены один за другим, так как в операторе PRINT указана запятая.

Циклы могут входить один в другой. Предположим, что нам нужно напечатать в одной строчке значения 1, 2, 3, 4, 5, в другой 101, 102, 103, 104, 105, а в третьей 201, 202, 203, 204, 205. Это выполнит следующая программа:

FOR i1% = 0 TO 2

FOR i2% = 1 TO 5

PRINT i2% + 100 * i1%,

NEXT i2%

PRINT

NEXT i1%

Как видно, операторы сдвинуты друг относительно друга на несколько пробелов. Это сделано для того, чтобы можно было легче читать текст программы. На выполнение программы это никак не сказывается. Первый уровень – это цикл по переменной i1%, операторы которых введены без пробелов вначале строки, затем по переменной i2%, сдвинутые на несколько пробелов и больше всего сдвинут вправо третий оператор, который находится внутри двух циклов. В дальнейшем мы будет продолжать такое написание программ.

В третьей строке находится оператор вывода значения на экран «PRINT», в конце которого находится запятая, обозначающая, что следующее число будет выведено на той же строчке. После цикла по переменной i2% находится пустой оператор PRINT, то есть оператор, который не содержит аргументов, позволяющий перейти на следующую строчку экрана. Таким образом, после заполнения строчки числами 1, 2, 3, 4, 5 произойдет выход из цикла и переход на следующую строчку, куда будут выводиться новые значения.

Рассмотрим следующую программу.

CLS

FOR i1% = 1 TO 100

i2 = RND

i2% = i2 * 22 + 1

LOCATE i2%, i2% * 3

COLOR 0

PRINT "текст"

FOR i3 = 1 TO 100

i4 = SIN(i3 / 100)

NEXT i3

i2 = RND

i2% = i2 * 22 + 1

LOCATE i2%, i2% * 3

COLOR 7

PRINT "текст"

NEXT i1%

COLOR 7, 0

Данная программа выводит случайным образом на экран слово «текст» по диагонали и случайным образом убирает данный текст. Рассмотрим действие программы подробнее. Первый оператор очищает экран дисплея (CLS). Второй оператор вводит цикл по переменной i1% в количестве ста шагов. В третьем операторе переменной i2% присваивается случайное значение от 0 до 1. В четвертом операторе целой переменной i2% присваивается значение номера строки от 1 до 22. Отметим, что переменные i2 и i2% - это разные переменные, в которых находятся разные значения.

Оператор LOCATE устанавливает положение курсора на экране, причем первый параметр определяет номер строки, а второй - номер столбца. Для того, чтобы лесенка было менее наклонной, номер столбца умножается на 3. Всего на экране имеется 25 строк и 80 столбцов, причем их номера следуют от 1 до 25 и от 1 до 80 соответственно. Таким образом, координаты позиций, где будет выводиться текст, будут: (1,3), (2,6), (3,9),… (22, 66).

Оператор COLOR назначает цвет символов, который может быть:


0 - черный

4 - красный

8 - серый

12 - ярко - красный

1 - синий

5 - пурпурный

9 - ярко - синий

13 - ярко - пурпурный

2 - зеленый

6 - коричневый

10 - ярко - зеленый

14 - желтый

3 - голубой

7 - белый

11 - ярко - голубой

15 - ярко - белый

 

В нашем примере устанавливаем цвет символа - 0, то есть черный. Оператор PRINT выводит на экран символы «текст» в ранее установленную позицию.

Следующие три оператора в цикле высчитывают значение синуса. Данные вычисления в программе не нужны, фактически вычисления фиктивные, однако, они позволяют замедлить выполнение программы и текст, появляющийся на экране будет заметен глазу. В противном случае на экране будут видны только последние вычисления. Если ваш компьютер имеет большое быстродействие, то количество циклов можно увеличить, например, таким образом:

FOR i4 = 1 TO 10

FOR i3 = 1 TO 100

i4 = SIN(i3 / 100)

NEXT i3

NEXT i4

Данный фрагмент программы позволит замедлить работу программы в десять раз. Экспериментально установите приемлемое для вас количество циклов, чтобы текст выводился на экран не слишком медленно и не слишком быстро.

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

Далее имеется повторение операторов, которые выводили на экран в произвольное место символы «текст», за исключением того, что цвет символов будет черным (COLOR 7). В результате выведенные символы будут накладываться на существующие и останется только черный фон, то есть текст, если он на этом месте находился, будет уничтожен.

В конце программы находится оператор, означающий конец цикла (NEXT i1%) и оператор «COLOR 7, 0», позволяющий перейти снова к выводу светлых символов на черном фоне, иначе на экране не видно будет сообщения: «Press any key to continue», свидетельствующее об окончании работы программы.

Попробуем разнообразить задачу и выводить символы в разных представлениях. Для этого перепишем программу следующим образом:


CLS

FOR i1% = 1 TO 100

i2 = RND

i2% = i2 * 22 + 1

LOCATE i2%, i2% * 3

i3% = 1 + RND * 15

i4% = 1+ RND * 7

COLOR i3%, i4%

PRINT "текст"

FOR i3 = 1 TO 300

i4 = SIN(i3 / 100)

NEXT i3

i2 = RND

i2% = i2 * 22 + 1

LOCATE i2%, i2% * 3

COLOR 0, 0

PRINT "текст"

NEXT i1%

COLOR 7, 0

 

Данная программа выводит цветные символы на цветном фоне за счет добавленных и измененных в ней операторов:

i3% = 1+ RND * 15

i4% = 1+ RND * 7

COLOR i2%, i3%

Первый из них (i3%) получает значение от 1 до 16 и обозначает цвет символа, второй (i4%) имеет значение от 1 до 8 и обозначает цвет фона символа. Для того, чтобы стереть символы с экрана, необходимо изменить и оператор «COLOR 0, 0», добавив в него второй параметр - 0, обозначающий цвет фона, который должен быть черным (0).

Теперь займемся оптимизацией программы и перепишем ее в следующем виде:


CLS

FOR i1% = 1 TO 100

i2% = RND * 22 + 1

LOCATE i2%, i2% * 3

COLOR 1 + RND * 15, 1+ RND * 7

PRINT "текст"

FOR i3 = 1 TO 300

i4 = SIN(i3 / 100)

NEXT i3

i2% = RND * 22 + 1

LOCATE i2%, i2% * 3

COLOR 0, 0

PRINT "текст"

NEXT i1%

COLOR 7, 0


 

Как видно, текст программы стал короче и в нем находится меньше переменных. Так, не стало переменных i3%, i4%, из трех строчек: «i2 = RND», «i2% = i2 * 22 + 1» и «LOCATE i2%, i2% * 3» стало две: «i2% = RND * 22 + 1» и «LOCATE i2%, i2% * 3». Из трех строчек «i3% = 1 + RND * 15», «i4% = 1+ RND * 7» и «COLOR i3%, i4%» стала одна: «COLOR 1 + RND * 15, 1 + RND * 7» и также из трех строчек с номерами 13-15 стало две с номерами 10 и 11. Причем все новые строчки выполняют те же функции, что и старые. В результате программа будет выполняться быстрее, так как нужно меньше операций для вычислений. Кроме того, она будет требовать также меньший объем памяти, так как используется сокращенное число переменных и машинных команд.

Отметим, что оператор RND при каждом запуске будет выдавать одни и те же значения. Для того, чтобы эти значения отличались, нужно воспользоваться оператором RANDOMIZE TIMER, который устанавливается в начале программы.

В некоторых случаях программа зацикливается, то есть выполняется бесконечное число раз. Небольшой пример показан ниже.

i1 = 0

m1: i1 = i1 + 1

PRINT i1;

GOTO m1

В этом случае программа выводит последовательные значения на экран без остановки. Что делать в таком случае? Как прекратить выполнение программы? Для этого нажмите на клавишу Ctrl, и, не отпуская ее, на клавишу Break, которая находится справа от функциональных клавиш. Программа прервет свою работу и можно скорректировать исходный текст. Отметим, что в предыдущем примере программа на самом деле не будет работать бесконечно, так как переменная постоянно увеличивает свое значение, и при ее переполнении произойдет ошибка, в результате чего программа прекратит свою работу. Однако, если установить оператор как m1: i1 = i1, то программа действительно будет работать бесконечно.

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

INPUT "Введите количество значений - ", i1

i3 = 0

FOR i2 = 1 TO i1

INPUT "Введите значение - ", i1

i3 = i3 + i1

NEXT i2

PRINT i3 / i2

Задачи.

1. Напишите программу вывода на экран первых положительных нечетных чисел от 1 до 11.

2. Напишите программу вывода первых 20 чисел от 1 до 20.

3. Напишите программу вывода первых отрицательных нечетных чисел от -1 до -21.

4. Какие числа будут выведены на экран в следующих программах?


FOR i1%= 2 TO 20

PRINT i1%,

NEXT i1%

FOR i1%= 2 TO 4 STEP .2

PRINT i1%,

NEXT i1%

FOR i1%= -2 TO 10 STEP 2

PRINT i1%,

NEXT i1%

 5. Напишите программу вывода следующих строчек:

а) 1, 2, 3, 4, 5

б) 1, 4, 7, 10

в) 3, 8, 13,18

г) 5, 11, 16

д) 7, 5, 3, 1

е) -5, -10, -15

ж) 201, 203, 205

з) 301, 303, 305

и) 401, 403, 405

 

6. Вывести на экран сумму квадратов первых нечетных чисел от 1 до 11.

7. Напишите программу бегущей строки из Вашего имени.

(переход на следующую страницу)

 

О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О











Информация данного сайта предназначена для бесплатного изучения персонального компьютера. Можно копировать, передавать материалы другим лицам.

Запрещается использовать материалы для получения личной финансовой выгоды, а также размещать на сайтах в интернете.


 
 
 
Яндекс.Метрика


Каталог@MAIL.RU - каталог ресурсов интернет