|
программирование на языке бейсик
|
|
УРОК 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. Напишите программу бегущей строки из Вашего имени.
|
О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О
|
|
Информация
данного сайта предназначена для бесплатного изучения персонального
компьютера. Можно копировать, передавать материалы другим лицам.
Запрещается
использовать материалы для получения личной финансовой выгоды, а также
размещать на сайтах в интернете.
|