русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Оператор цикла For


Дата добавления: 2015-06-12; просмотров: 762; Нарушение авторских прав


Я говорил в 6.3, что имеются две разновидности оператора For. Здесь я расмотрю только одну. Вторая будет разобрана в 14.3.

Мы знаем, что выполняя программу печати чисел 3 5 7 9, оператор Do выполнил цикл 4 раза. Обычно, когда мы пишем операторы Do, нам совсем не интересно знать, сколько раз они выполнят цикл. Тем не менее, существует много задач, для решения которых цикл нужно выполнить именно определенное количество раз. В этом случае удобно использовать оператор цикла For.

 

Задача: 200 раз напечатать слово ФУТБОЛ.

Попробуем сначала решить задачу при помощи оператора GoTo. Начнем с такого фрагмента:

metka: Print "ФУТБОЛ"
GoTo metka

Но здесь цикл будет повторяться бесконечно, а нам нужно только 200 раз. Мы уже видели, что для выхода из цикла оператор GoTo нужно включить в состав оператора If. Кроме этого нужна переменная, меняющая свое значение от одного выполнения цикла к следующему. Придумаем этой величине какое-нибудь имя, скажем i. Проще всего задачу решает такая процедура:

Private Sub Command1_Click()

i = 1

metka: Debug.Print "ФУТБОЛ"

i = i + 1 'увеличение i на 1

If i <= 200 Then GoTo metka

End Sub

Здесь i вначале равно 1, но к каждому следующему выполнению цикла оно увеличивается на 1. В первый раз выполняя оператор If, компьютер проверяет условие 2<=200 и найдя его истинным, выполняет оператор GoTo metka. Во второй раз проверяется условие 3<=200 и т.д. В 199-й раз компьютер проверяет условие 200<=200 и найдя его истинным, выполняет оператор GoTo metka. В 200-й раз компьютер проверяет условие 201<=200 и найдя его ложным, выходит из цикла.

В нашем фрагменте "полезную" работу выполняет только одна строка из четырех - Print "ФУТБОЛ" . Остальные три строки заняты тем, что обеспечивают выполнение "полезной" строки ровно 200 раз. Нам пришлось организовать специальную переменную i, значение которой в каждый момент выполнения программы говорит о том, в какой раз выполняется цикл. Переменная с таким свойством называется счетчиком циклов.



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

 

Private Sub Command1_Click() Private Sub Command2_Click()
i = 1 For i = 1 To 200
m1: Debug.Print "ФУТБОЛ" Debug.Print "ФУТБОЛ"
i = i + 1: If i <= 200 Then GoTo m1 Next i 'увеличение i на 1 и возврат
End Sub End Sub

 

Прогоните правый вариант программы в пошаговом режиме, заменив для удобства число 200 числом 5 и следя за значением переменной i.

Слово Forпереводится "для". Слово Toпереводится "до". Конструкция For i=1 To 200понимается так: Для i, изменяющегося от 1 до 200, выполняй операторы, стоящие ниже вплоть до слова Next. Слово Next говорит о том, что надо увеличивать i на 1 и возвращаться к началу цикла. При первом выполнении цикла i будет равно 1, при втором - 2, и так далее. При последнем - 200. Переменная i называется переменной цикла,

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

For i = 501 To 700

 

Задача: Распечатать пары чисел - 101 1000 102 990 103 980 104 970 ……. 109 920 110 910

Здесь значения переменной цикла важны. Вот программа:

Private Sub Command1_Click()

For a = 101 To 110

Debug.Print a;

Debug.Print 1000 - 10 * (a - 101)

Next a

End Sub

 

До сих пор переменная цикла менялась с шагом 1. Шаг можно задавать любой и тогда оператор For очень удобно использовать вместо Do - программы получаются короче. Напишем, например, программу для вычисления таблиц Брадиса (задача 38 - напомню, что нужно печатать квадраты чисел от 0 до 1 с шагом 0.001):

Private Sub Command1_Click()

For a = 0 To 1.00001 Step 0.001

Debug.Print Format(a, "0.000"), Format(a * a, "0.000000")

Next a

End Sub

Здесь Step0.001 означает "Шаг 0.001". Для более аккуратной печати я использовал форматирование. Почему вместо 1 я написал 1.00001, объяснено в ответе к задаче 38.

 

Если бы мы хотели посчитать таблицы Брадиса в обратном порядке - от 1 до 0, то оператор цикла нужно было бы записать так:

For a = 1 To 0 Step -0.001

 

Синтаксис оператора For:

For переменная = выражение1 To выражение2 [ Step выражение3 ]

операторы

операторы

……………..

Next [ переменная ]

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

Пример записи: For j=a+b To 2*s Step k*10

Если шаг не указан, он считается равным 1, то есть переменная на каждом выполнении цикла увеличивается на 1. Если же мы хотим уменьшать ее на 1, нам придется явно указать Step -1.

 

Работа оператора For при положительном (или нулевом) шаге:

Прежде всего вычисляется выражение1, и переменной цикла (пусть это будет i) присваивается его значение. Затем вычисляется выражение2 и сравнивается с i. Если i > выражения2, то оператор For завершает свою работу, так ничего и не сделав. В противном случае выполняются операторы, стоящие между строками For и Next. После их выполнения значение i увеличивается на значение выражения3 (или при его отсутствии на 1) и снова сравнивается с выражением2. Если i > выражения2, то оператор For завершает свою работу, иначе снова выполняются операторы, снова i увеличивается и т.д.

 

 

Работа оператора For при отрицательном шаге:

Прежде всего вычисляется выражение1, и переменной цикла (пусть это будет i) присваивается его значение. Затем вычисляется выражение2 и сравнивается с i. Если i < выражения2, то оператор For завершает свою работу, так ничего и не сделав. В противном случае выполняются операторы, стоящие между строками For и Next. После их выполнения значение i уменьшается на значение модуля выражения3 и снова сравнивается с выражением2. Если i < выражения2, то оператор For завершает свою работу, иначе снова выполняются операторы, снова i уменьшается и т.д.

 

Оператор Exit For

Оператор Exit For- еще один способ выхода из цикла For. Применяется он совершенно аналогично оператору Exit Do, описанному в 6.3, поэтому отсылаю вас туда.

 

Задание 46: Напечатать с помощью оператора For:

Прямой счет: -5 -4 -3 -2 -1 0 1 2 3 4 5 Обратный счет: 5 4 3 2 1 0 -1 -2 -3 -4 -5 Конец счета



<== предыдущая лекция | следующая лекция ==>
Операторы цикла Do | Типы ошибок. Сообщения об ошибках.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.309 сек.