Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы по ДПВ-2.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
69 Кб
Скачать
☆

12.5. Оператор цикла Do … Loop

Особенностью циклов с условием является условие, может быть любым выражением логического типа, см. табл. 12.5.1:

Таблица 12.5.1

Цикл с предусловием

Цикл с постусловием

Do [While / Until <Лог.Выражение>]

[<Операторы>]

[Exit Do]

Loop

Do

[<Операторы>]

[Exit Do]

Loop [While / Until <Лог.Выражение>]

Цикл с While выполняется до тех пор, пока логическое выражение имеет значение True. Цикл с Until выполняется до тех пор, пока логическое выражение имеет значение False. Если логическое выражение проверяется в начале цикла, то операторы могут никогда не выполняться, если логическое выражение принимает с самого начала неподходящее значение. Если логическое выражение проверяется в конце, то операторы выполняются хотя бы один раз. Для досрочного выхода из цикла используется Exit Do. Если While / Until <Лог.Выражение> отсутствует, то цикл превращается в бесконечный.

В VB есть еще один оператор While:

While <Выражение>

[<Операторы>]

Wend

Выполнение: Тело цикла (<Операторы>) выполняется пока <Выражение>=True. Выход из цикла осуществляется как только оно станет равным False.

Замечание: Тело цикла может совсем не выполняться, если вначале <Выражение>=False.

Для этого цикла нет оператора досрочного выхода, кроме GoTo.

Пример1:

Dim S As Integer, I As Integer

S = 2: I = 1

Do While S < 10

S = S + I

I = I + 1

Loop ‘S = 2 + 1 + 2 + 3 + 4 = 12

Пример2: Составить программу для вычисления суммы ряда:

y=1 + 2/x + (2*3)/x^2 + (2*3*2)/x^3 + (2*3*2*3)/x^4 + ... принимая, что |x|>3.

Вычисления продолжать до тех пор, пока модуль разности между слагаемым и его предыдущим значением не станет мень­ше заданной величины (точности вычисления).

13.1. Процедуры

Процедура в языке VB имеет вид:

[Public / Private][Static] Sub <ИмяПроцедуры> ([<CписокФормальныхПараметов>])

[<Объявление переменных процедуры>]

[<Операторы>]

[Exit Sub]

End Sub

Public / Private – необязательные ключевые слова, определяющие область видимости процедуры. Глобальная (Public) доступна из других модулей. Локальная (Private) доступна только внутри данного модуля. Если область видимости явно не указана, то по умолчанию она будет определена как глобальная.

Static – необязательное ключевое слово, определяющее статус переменных, объявленных внутри процедуры. При наличии этого слова переменные будут сохранять свои значения между последовательными вызовами, в противном случае – нет.

Exit Sub – необязательный оператор, прерывающий выполнение процедуры и возвращающий управление на оператор, следующий за оператором вызова.

<CписокФормальныхПараметов> - это список входных и выходных параметров. Входной параметр – параметр, значение которого должно быть определено до начала работы процедуры, и переданный в процедуру в момент ее вызова. Выходной параметр – это параметр, значение которого определяется в результате работы процедуры. Процедура может не иметь входных параметров или не иметь выходных или и тех и других. В этом случае в заголовке процедуры останутся только пустые круглые скобки. Кроме того любой из параметров может быть одновременно и входным и выходным. Это касается общих процедур. Процедуры обработки событий имеет набор параметров, зависящих от конкретного события и не может быть изменен разработчиком. Список формальных параметров имеет вид:

[ByRef / ByVal] <ИмяПараметра1>[()] [As <ИмяТипа1>]

[, [ByRef / ByVal] <ИмяПараметра2>[()] [As <ИмяТипа2>] [, ….. ]]

ByVal / ByRef – определяет способ передачи данных в процедуру при ее вызове.

ByRef определяет, что данные передаются их адресом параметра в памяти. Поэтому, если процедура изменяет значение параметра, то изменение сохраняется и после окончания работы процедуры (параметр может быть как входным, так и выходным параметром).

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

По умолчанию – ByRef.

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

[Call] <ИмяПроцедуры> [(]<СписокФактическихПараметров>[)]

<СписокФактическихПараметров> - список параметров, которые замещают формальные параметры при исполнении процедуры. Элементы списка записываются своими именами или значениями и разделяются запятыми. Он должен быть согласован (совпадать) со списком формальных параметров по количеству элементов, их типам и по порядку их следования.

Если при вызове процедуры используется ключевое слово Call, то список фактических параметров должен быть указан в скобках. Если процедура вызывается без использования Call, то параметры перечисляются без скобок. Если процедура не имеет параметров и используется слово Call, то после имени процедуры следует ставить пустые скобки.

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

Пример1: Повторение примера приведенного на рис. 17. (стр. 14, сложение двух чисел):

(General) (Declarations)

Option Base 1

(General) Sum

Sub Sum(A() As Single)

A(3) = A(2) + A(1)

End Sub

Command1 Click

Private Sub Command1_Click()

'Dim A As Single

'Dim B As Single

Dim C(3) As Single

'A = Val(Text1.Text)

'B = Val(Text2.Text)

C(1) = Val(Text1.Text)

C(2) = Val(Text2.Text)

Call Sum(C()) ‘ Sum C()

'Label4.Caption = A + B

Label4.Caption = C(3)

End Sub

Command2 Click

Private Sub Command2_Click()

End

End Sub