Операторы передачи безусловного перехода по метке goto

Оператор безусловного перехода gotoимеет формат:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор.

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

Использование оператора безусловного перехода оправдано в двух случаях:

принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;

переход из нескольких мест функции в одно (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).

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

21)условный оператор if…then

If ... Then — линейный и блочный.

Линейный оператор чтобы выполнить какой-либо один оператор, если некоторое условие будет истинным.

Синтаксическая конструкция

If<Условие>Then<Оператор_1>Else<Оператор_2>

При значении Условия = True выполняется Оператор_1, следующий засловом Then, а затем следующий за условным оператор. Если Условие принимает значение False, то выполняется следующий за Else оператор Оператор_2. Else может отсутствовать, тогда оператор называется безальтернативным и, если Условие= True, то выполняется Оператор_1, а затем следующий за условным оператор. Если Условие= False, а выполняется следующий оператор.

Блочный оператор имеет синтаксис:

If<Условие_1>Then

<Операторы_1, если Условие=True>

[ElseIf<Условие_2>Then

<Операторы_2, если Условие_2=True>]

[ElseIf<Условие_3>Then

<Операторы_3, если Условие_3=False>]

[Else

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

EndIf

<Условие_1> – необходимая часть оператора, это то Условие, которое должно проверяться. Если значение этого условия True, то выполняется Операторы_1 следующие за словом Then. Если необходимо проверить еще условия, то добавляется зарезервированное слово ElseIf с последующим условием. Если Условие_2=True, то выполняются Операторы_2. Если необходимы еще условия, то добавляются еще структура ElseIf и если все Условия не выполняются, то выполняются Операторы следующие за словом Else.

Операторы If могут быть вложенными друг в друга. Такое вложение операторов применяется, если нужно проверить какое-либо условие при другом условии, которое является True и включить альтернативу Else.

Задача 6 (алгоритм ветвления) Найти наибольшее из трех чисел a,b и c. Составить программу.

Решение

Дано: три числа a, b, c.

Найти: наибольшее из трех чисел.

Набирать процедуру на месте курсора:

Private Sub CommandButton1_Click()

Dim a, b, c As Single

Dim max As Single

’Вводданных

a = Range("A1").Value

b = Range("B1").Value

c = Range("C1").Value

’Вычисление

If a > b And a > c Then

max = a

Else

If b > c Then

max = b

Else

max = c

End If

EndIf

’Вывод результатов в ячейку B4

Range("B4").Value = "Максимальное число = " &max

EndSub

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

Цикл — представляет собой многократно повторяющуюся последовательность операторов. Операторы повторяются конечное число раз до выполнения условия

Циклысо =циклы For, или циклами For … Next. Синтаксис цикла For … Next таков:

ForСчетчик = НачалоToКонец[StepШаг]

Операторы

[ExitFor]

[Операторы]

Next[Счетчик],

где For – зарезервированное слово VBA, обозначающее начало цикла; Счетчик– переменная, определенная в качестве счетчика цикла, при первом выполнении циклв принимает значение Начало и каждый раз при выполнении оператора Next увеличивается на величину, заданную параметром Шаг;
To – зарезервированное слово VBA, разделяющее значения Начало и Конец; Step – зарезервированное слово VBA, используемое для задания шага цикла, необязательный аргумент; Шаг – число, задающее значение, на которое увеличивается

Exit For – оператор экстренного выхода из цикла; Next – зарезервированное слово VBA, обозначающее конец цикла.

Step отсутствует, то значение шага равен единице.

пример

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

последовательности. Операторы передачи безусловного перехода по метке goto - student2.ru , Операторы передачи безусловного перехода по метке goto - student2.ru

Дано: начало a и конец n суммирования и произведения.

Найти: Sum, Pr.

Private Sub CommandButton1_Click()

Dim a, n, h, iAs Integer

Dim Sum, Pr, b As Single

'Вводданных

a = Range("A1").Value

n = Range("B1").Value

h = Range("C1").Value

'Вычисления

Sum = 0

Pr = 1

For i = a To n Step h

b = Sin(2 * i + 0.4)

Sum = Sum + b

Pr = Pr * b

Nexti

’Вывод результатов в ячейки B4 и B5

Range("B4").Value = "Сумма = " &Sum

Range("B5").Value = "Произведение = " &Pr

EndSub

Программирование цикла с условием

Циклы с условием применяются , когда число повторений неизвестно, анекоторые действия в программе должны повторяться до тех пор, пока выполняется определенное условие или до тех пор, пока не будет выполнено определенное условие. Условием может быть любым выражением, принимающим значение True (Истина) или False (Ложь). В VBA есть два основных цикла с условием — цикл DoWhile ... Loop и цикл DoUntil ... Loop. Оба они могут быть с предусловием или с постусловием.

Циклы DoWhile | Until имеют следующий синтаксис:

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

DoWhile | Until<Условие>Операторы
[ExitDo]Loop

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

Операторы[ExitDo]LoopWhile | Until<Условие>,

где Do — зарезервированное слово VBA, указывающее на начало цикла; While|Until— зарезервированные слова VBA, если используется While ->цикл выполняется, если <Условие> принимает значениеTrueи заканчивает свою работу, если <Условие> принимает значение False.Если используется Until ->цикл выполняется, если <Условие>=Falseи заканчивает свою работу, если <Условие>=True; <Условие> — логическое выражение, принимающее значение True или False; Loop — зарезервированное слово VBA, указывающее на окончание цикла.

Цикл с предусловием и Цикл с постусловием отличаются тем, что Цикл с постусловием выполняется хотя бы один раз до проверки <Условие>, а Цикл с предусловием может не выполняться ни разу, если не выполняется <Условие>.

Для заданногоe найти наименьшее n такое, что 2n/n!<e . Вывести все члены последовательности от 1-го до n-го.

u = 1 'первый множитель

n = 0 'количество шагов

Range("C1:E20").Clear

Do Until (u <Eps) Or (n >= Limit)

n = n + 1

q = 1

For i = 1 To n

q = q * i

Nexti

u = 2 ^ n / q 'очередной множитель

Cells(n, 4).Value = n

Cells(n, 5).Value = u

Loop

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

Обратим внимание, что

u1=2\1/1!,

u2=2\2/2!=2*2/(1*2)= u1*21/2,

u3=2\3/3!=22*2/(1*2*3)= и2*2/3 и т.д,

т.е. у нас возникает множитель 2/n, умноженный на значение предыдущего шага.

Нам необходимо учесть, что число шагов может быть невообразимо много, поэтому мы введет константу для ограничения шагов Limit = 100.

PublicSubСтепень_двух()

'Описание констант

Const Limit As Integer = 100

'Описаниепеременных

Dim EpsAs Single

Dim u As Single

Dim u1 As Single

Dim n As Integer

'Вводпеременных

Eps = Range("b1").Value

'Задание начальных значений

u = 1 'первый множитель

n = 0 'количество шагов

Range("C1:E20").Clear

'Вычисление значений

Do Until (u <Eps) Or (n >= Limit)

Cells(n, 4).Value = n

u1 = u

u = u1 * 2 / n 'очередной множитель

n = n + 1

Cells(n - 1, 5).Value = u

Loop

'Вывод результатов

Range("A6:A7").Clear

If n >= Limit Then

Range("A7").Value = n& " шагов не хватило для достижнияточночти."

EndIf

EndSub

Наши рекомендации