шагом.
Exit For может находится в любом месте между For - Next и используется для прекращения выполнения цикла (управление передается на оператор, который следует сразу за Next) и применяется, например, в логическом операторе, который проверяет альтернативное условие прерывания цикла (например, ошибку).
Параметр цчюш - арифметическая переменная, не может быть элементом массива или элементом пользовательского типа
данных.
Начальное значение, конечное значение и шаг определяют значения, которые принимает параметр цикла при работе программы - на первом шаге параметр цикла принимает начальное значение, после выполнения операторов, входящих в цикл (блок операторов), параметр цикла изменяется на величину шага (выполняется оператор Next), опять выполняются операторы, входящие в цикл, параметр цикла изменяется на величину шага и т. д., пока параметр цикла не примет последовательно все свои
значения.
После того, как параметр цикла примет все свои значения и соответственное число раз выполнится блок операторов в цикле, будет выполняться следующий за Next оператор.
. Операторы, входящие в цикла будут выполняться если:
шаг цикла >= 0 и конечное значение >= начальное значение шаг цикла < 0 и конечное значение <= начальное значение. Пример.
Рассматривается фрагмент программы для нахождения максимального значения элементов одномерного массива из 15 элементов.
Dim В (1 То J5), МахВ As Single 'оператор объявления массива и переменной
МахВ = В(1) 'присвоение начального значения МахВ For /= /To 15 'начало цикла
If B(I) > МахВ Then МахВ = В(1) 'этот оператор выполнится 15 раз
Next / 'конец цикла MsgBox Str(MaxB) 'для вывода результата используется
'встроенная функция MsgBox, в которой 'используется встроенная функция Str 'для преобразования числового значения в строку
При использовании оператора цикла необходимо соблюдать правила:
1. Следует избегать изменения значения параметра цикла в каких-либо операторах внутри цикла.
Оба фрагмента программ эквивалентны, т.е. два цикла могут заканчиваться одним оператором Next.
При выполнении цикла в цикле внутренний цикл выполняется для каждого значения параметра внешнего цикла (в фрагментах программ оператор C(I,J) = A(I) * B(J) выполнится 12 раз со следующей последовательностью индексов: С(1,1), С(1,2), С(1,3), С(1,4), С(2,1), С(2,2), С(2,3), С(2,4), С(3,1), С(3,2), С(3,3),
С(3,4)).
Внутренний (“вложенный”) цикл должен целиком содержаться во внешнем цикле:
Число вложенных циклов не ограничено.
Пример.
Рассматривается фрагмент программы для формирования вектора А(4). элементами которою являются суммы столбцов матрицы В (5,4).
Dim А(1 То 4), В(1 То 5, / То 4) As Single’onepaTop объявления массивов
For J = I To 4
A(J) = 0 'присвоение начального значения
'элемента вектора For / = / То 5
A(J) = A(J) + B(/,J) 'вычисление суммы в цикле Next / Next J
Пример программы.
Определен массив записей для хранения результатов экзаменов
Dim Sesia (5) As Resiiitaf на основе пользовательского типа данных Type Reyiltat
Familia As Sti ing * 20 Name Exam (1 To 3) As Stung * /5 ReyiltExam (/ To J) As Integer End Type
Программа должна вводить исходные данные и определять среднюю оценку студента, фамилия которого задается
Поместим описание пользовательской структуры данных в раздел Geneial модуля Module! (рис 3 7) и создадим форму (рис 3 8).
Рис 37
Форма и программы процедур обработки событии обеспечивают следующую логику работы При загрузке формы меткам (Label I, Label2, Label3) присваиваются названия экзаменов и активизируется командная кнопка “Ввод”, командная кнопка “Вычисление” не активна Последовательное пятикратное щелканье мыши по кнопке “Ввод” после заполнения информацией текстовых окон обеспечивает ввод необходимых исходных данных После чего командная кнопка “Ввод” деактивизируется, а командная кнопка “Вычисление” активизируется После ввода в текстовое окно под ней фамилии и щелчка мыши по кнопке “Вычисление” производится вычисление средней оценки студента и результат выводится в текстовое окно
Рис 38
Работа с формой показана на рис.3.9, а, б.
3.5.5.2. Оператор цикла Do-Loop
Синтаксис оператора следующий
Do [{While | Until} логическое выражение]
[блок операторов}
[Exit Do]
[блок операторов ]
Loop
или
Do
[блок операторов }
[Exit Do]
[блок операторов ]
Loop [{While | Until} логическое выражение ] где Do, While, Until, Exit Do, Loop ключевые слова. Пара Do-Loop определяют начало и конец оператора цикла;
While определяет выполнение операторов, входящих в цикл, пока стоящее следом логическое выражение принимает значение “True”;
Until определяет выполнение операторов, входящих в цикл, до тех пор пока стоящее следом логическое выражение не примет значения “True”; Exit Do используется для прекращения выполнения цикла (управление передается на оператор, который следует сразу за Loop) и применяется, например, и логическом операторе, который проверяет альтернативное условие прерывания цикла (например, ошибку).
Запись условия “{While | Until} логическое выражение” в начале или в конце цикла определяет, где это условие (задается логическим выражением) будет проверяться.
Когда условие проверяется в начале цикла, цикл выполняется, если условие удовлетворено (значение логического выражения равно True). Такой вид цикла удобно применять в тех случаях, когда цикл не должен выполняться до тех пор, пока условие не будет выполнено.
Пример последовательного чтения информации из файла, когда необходима проверка, что файл не закончился, анализируя наличие записи конца файла с использованием встроенной функции EOF ( номер файла):
Операторы чтения файла будут выполняться только в случае значения функции EOF — False (текущая запись не является концом файла).
Запись условия в конце цикла означает, что цикл выполнится хотя бы один раз (при этом первом проходе обычно формируется условие, которое затем будет проверяться).
Пример.
Do I Do Password = InputBox (“Введите пароль”) Password = InputBox (“Введите пароль”) Loop While Password О “Секрет” ] Loop Until Password = “Секрет”
В данном примере условие стоит в конце и ввод пароля (обращение к встроенной функции InputBox) выполняется хотя бы один раз (формируется проверяемое в конце условие). В первом случае используется While, определяющее повторение цикла пока “Секрет” не совпадает с введенным значением. Во втором случае используется Until, определяющее повторение цикла до момента совпадения “Секрет” с введенным значением.
Пример программы.
Программа производит вычисление ряда с задаваемой точностью вычисления. М-и элемент ряда вычисляется по формуле
(-irN/(N!*(2*N+l))
Программа реализуется в четырех вариантах с использованием оператора цикла Do-Loop. Варианты определяют место записи условий While и Until. Каждый вариант помещается в процедуру обработки события щелчка мыши по соответствующей командной кнопке (кнопки “Вариант!”, “Вариант2”, “ВариантЗ”, “Вариант4”) на форме. Иллюстрации работы примера на рис. 3.10.
Текст процедур примера:
Private Sub Commandl_Click () Dim Eps, Sum, Sumi As Double Dim N, NFactorial As Integer Eps = Val(InputBox(“Введите точность вычисления”).) Sum = 0: N = 1: NFactorial = 1 Do While Abs((-1)”N/(NFactorial*(2 * N + 1))) > Eps
Sum = Sum + (-1) л N /(NFactorial * (2 * N + 1)) • N = N + 1
NFactorial = NFactorial * N Loop
MsgBox “Сумма paBHa”+Str$(Sum)+”,N равно” + Str$(N) End Sub
Private Sub Command2_Click() Dim Eps, Sum, Sumi As Double Dim N, NFactorial As Integer
Eps = Val(InputBox(“Введите точность вычисления”)) Sum = 0: N =- 1: NFactorial = 1
Do Until Abs ( (-1)”N/(NFactorial*(2 * N + 1))) < Eps Sum = Sum + (-1) A N / (NFactorial * (2 * N + 1)) N = N + 1
NFactorial = NFactorial * N Loop
MsgBox “Сумма равна”+31г$(Sum)+”, N равно”+ Str$(N) End Sub
Private Sub Command3_Ciick() Dim Eps, Sum, Sumi As Double
Dim N, NFactorial As Integer
Eps = Val(InputBox(“Введите точность вычисления”))
Sum =0: N = 1: NFactorial - 1
DoSum ^ Sum + (-1; N / (NFactorial * (2 * N + 1))’
N = N + 1
NFactorial = NFactorial * N
Loop Wnile Abs ( (-1)’”N/(NFactorial* (2 * N + !)))> Eps
MsgBox “Сумма paBHa”+Str$(Sum)+ “, N равно” + Str$(N) End Sub
Private Sub Command4_Ciick () Dim Eps, Sum, Sumi As Double Dim N, NFactorial As Integer Eps = Val(InputBox(“Введите точность вычисления”)) Sum = 0: N = 1: NFactoriai = 1 Do
Sum = Sum + (-1) л N / (NFactorial ” (2 * N + 1))
N = N + 1
NFactorial = NFactoriai * N Loop Until Abs((-1)”N/(NFactorial*(2*N + !)))< Eps MsgBox “Сумма paBHa”+Str$(Sum).”, N равно” + Str$(N) End Sub
Циклы Do-Loop позволяют также строить циклы со счетчиком, аналогично циклам For-Next.
Пример.
Counter = 1 \ Counter = 1
Do While Counter <= 100 Do While Counter > 100
В(Counter) = ......... В(Counter) = ........
Counter = Counter + 1 Counter = Counter + 1
Loop Loop
Эти два фрагмента программы эквивалентны следующему фрагменту с использованием цикла For — Next.
For Counter = 1 То 100
В(Counter ) = ...........
Next Counter
Для организации ввода исходных значений элементов массивов удобно использовать операторы цикла при работе For-Next и Do-Loop. Примеры процедур обработки события щелчка мыши по форме, которые обеспечивают последовательный ввод элементов массива в специальном окне InpiitBox и их вывод в специальном окне MsgBox: