Алгоритм. Требования, предъявляемые к алгоритму, страница 4


Блок-схема: знак завершения: НачалоSub Цикл_с_ветвл ()

    Dim  a  As  Single, x  As Single, y As Single

    Dim  n  As  Integer, k  As  Integer

    a = 3.7

    n = 2:  k = 2:  m = 2

    For  x = 0.5  To  12.5  Step 0.5

           If   x < 4  Then

                   y = Exp(a - x): Cells(n, 1) = x: Cells(n, 2) = y : n = n + 1

           Else

                    If   x <= 8  Then

                            y = Tan(a * x): Cells(k, 3) = x: Cells(k, 4) = y: k = k + 1

                    Else

                            y = 8 * Cos(x): Cells(m, 5) = x: Cells(m, 6) = y: m = m + 1

                    End  If

           End  If

    Next  x

End  Sub

Цикл  со  счетчиком

 Пример 8     Последовательно  вводятся  пары  координат  точек  x, y. Всего M пар. Определить, сколько из  этих  точек  находится  в  третьем  квадранте.

Вводится  переменнаяk-счетчик  точек, попавших  в  третий  квадрант.

Блок  2 – задаем начальное  значение  счетчика

Блок  4 – ввод   координат   текущей  точки.

Блок  7 – наращивание  значения  счетчика.

Блок  8 – переход  к  следующей  порции  данных.

Sub Цикл_со_счет ()

     Dim  x  As Single, y  As Single, k  As Integer, M  As Integer

     M = Val (InputBox ("ввод  M"))

      k = 0

     For  i = 1 To M

             x = Val (InputBox ("ввод  x"))

             y = Val (InputBox ("ввод  y"))

             If   x < 0  And  y < 0  Then

                      k = k + 1

             End  If

     Next  i

     MsgBox "k= " &  k

EndSub

Процедуры  и  функции

          Все рассмотренные ранее VBA- программы  представляли  собой единственную  изолированную  процедуру.

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

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

Процедуры  типа   Function  (функция)

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

Function  может  использоваться  в правой  части  выражений, точно также  как  другие  встроенные  функции (cos, exp).

 Пример 9      VBA –программа, вычисляющая периметр прямоугольного треугольника по заданным  его катетам  и  выводящая результат  в диалоговое окно  сообщений.

Sub  Головная ()

DimZAsSingle

1

 
Z = Периметр ( 13, 7) ' вызовфункции  Периметр ( 13, 7)

MsgBox "Периметр =  " &  Z

End  Sub

2

 
Function  Периметр (x  As  Single, y  As  Single) As  Single

Периметр = x + y + гипотенуза (x, y) ' вызовфункции

' гипотенуза (x, y) 

End  Function

 3

 

4

 
Function  гипотенуза (x  As  Single, y  As  Single) As  Single

гипотенуза = Sqr (x ^ 2 + y ^ 2) 

End  Function

В  строке Подпись: 1 процедура  Головная  вызывает  функцию Периметр (13,7).

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

 

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

В строке  Подпись: 3 −объявление  функции   гипотенуза.

В строке  Подпись: 4 результат выполнения  функции −  значение  присваивается  имени функции  и  через  него  возвращается  в  вызывающую  процедуру

Процедуры  типа   Sub  (подпрограммы)

могут   возвращать  значения   через  параметры.. Процедуры  без  параметров  не  возвращают  значения;  они  относятся  к  категории  макросов.  

 Пример 10.

Вычислить   значение     при  а = 0,98;   b = 1,7

Sub  Головная ()

     Dim  a  As  Single, b  As  Single, D As  Single

     Dim  S  As  Single, S1  As  Single, S2  As  Single

1

 
      a = 0.98:  b = 1.7

     Call  Sum (a, S) ' вызов  подпрограммы  Sum

 3

 

2

 
     S1 = S

 4

 
     Call  Sum (b, S) ' вызов  подпрограммы  Sum

     S2 = S

     D = S1 / S2

      MsgBox "D=" &  D

End Sub

 5

 
Sub  Sum (c  As Single, S  As Single) ' вызываемая  процедура

 6

 
     Dim  SS  As  Single

     SS = 0

     For  i = 1  To  8

             SS = SS + c ^ i

     Next  i

 7

 
     S = SS

End  Sub

В  строке  Подпись: 1 фактический  параметр  aпередается  в  подпрограмму; через параметр S результат  подпрограммы  возвращается  в  головную процедуру

В  строке  Подпись: 2 результат  работы  подпрограммы Sприсваивается  переменной S1.

В  строке  Подпись: 3 фактический  параметр  bпередается  в  подпрограмму; через параметр S результат  подпрограммы  возвращается  в  головную процедуру

В  строке  Подпись: 4 результат  работы  подпрограммы  S  присваивается  переменной  S2.

В  строке  Подпись: 5 объявление  подпрограммыSum.

В  строке  Подпись: 6 объявление  локальной  переменной  SS.

В строке Подпись: 7 результат  подпрограммы SS присваивается  параметру  S.

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

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

Передача  параметров  по  ссылке  реализуется  в  VBA  по – умолчанию  (как  в  данном  примере) .

Для  явного  указания   передачи  параметра  по  ссылке  используют  ключевое  слово  ByRef.

2. По  значению.  В  подпрограмму  передается  не сама  переменная, а  ее  копия  в  виде  значения.  При  этом  изменение параметра  в  подпрограмме  не  влияет  на  исходное  значение  переменной  в  памяти.

Для  явного  указания   передачи  параметра  по  значению используют  ключевое  слово  ByVal.

3.   Явная   передача  значения.   В этом  случае  строка  Подпись: 1 запишется так:

Call  Sum ( 0.98, S)