ТОП 10:

Диалоговое окно ввода информации InputBox



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

InputBox(Приглашение,Заголовок,НачЗначение),

где

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

Заголовок– это надпись в строке заголовка окна ввода.

НачЗначение – это значение, которое будет введено автоматически, если пользователь будет с этим согласен.

Возвращаемым значение данной функции является информация, вводимая пользователем, которой автоматически приписывает тип String. Например, функция InputBox(”Введите s”,”Ввод данных”,””), использованная в событийной процедуре:

Рrivate Sub Command1_Click()

s=InputBox(”Ввод данных”,”Введите s”,””)

Text1.Text= s

End Sub

вызывает появление диалогового окна

Окно сообщения MsgBox

Диалоговое окно сообщения предназначено для выдачи сообщения пользователю. Оно не требует проектирования и вызывается из программы функцией MsgBox(), имеющей следующий синтаксис:

MsgBox(Сообщение[,Кнопки][,Заголовок][,Файл_помощи,Помощь])

Здесь:

Сообщение – обязательный аргумент; строковое выражение, которое и является сообщением или вопросом, обращенным к пользователю. Максимально может содержать около 1024 символов. Если сообщение необходимо разбить на несколько строк, то используются специальные символы кодовой таблицы ASCII: 13 – возврат каретки, 10 – переход на новую строку. Используются они в виде строки Chr(13)+Chr(10), которая добавляется к каждой из разбиваемых строк. Например:

MsgBox (“Вы уже посмотрели, как работает программа?”+Chr(13)+Chr(10)+“Завершить работу сейчас?”)

Кнопки – необязательный параметр, определяющий внешний вид окна сообщения:

Наименование константы Набор кнопок в диалоговом окне сообщений
VbOKOnly ОК
VbOKCancel ОК, Отмена
VbAbortRetryIgnore Стоп, Повтор, Пропустить
VbYesNoCancel Да, Нет, Отмена
VbYesNo Да, Нет
vbRetryCancel Повтор, Отмена
VbCritical Значок критического состояния
VbQuestion Значок вопроса с предупреждением
VbExclamation Значок предупреждающего сообщения
VbInformation Значок информационного сообщения

Для того, чтобы задать несколько параметров кнопок и значков одновременно, следует просто сложить соответствующие константы. Например, VbExclamation+ VbAbortRetryIgnore.

Заголовок – необязательный аргумент; строковое выражение, отображаемое в заголовке окна, если он опущен, в заголовке используется имя проекта.

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

Параметр Кнопки по умолчанию имеет значение VbOKOnly.

В зависимости от выбора кнопки пользователем данная функция MsgBox возвращает следующие константы:

Нажатая кнопка Константа
OK VbOK
Отмена VbCancel
Стоп VbAbort
Повтор VbRetry
Пропустить VbIgnore
Да VbYes
Нет VbNo

Если данная функция используется просто как некоторое сообщение пользователю, т.е. нет кнопок и функция не должна возвращать никакого значения, то вместо функции MsgBox() используется команда MsgBox:

MsgBox(”Деление на ноль”).

На Рис. 5 представлен пример работы процедуры, вызывающей окно сообщения с двумя кнопками Да и Нет:

Private Sub Command1_Click()

a = MsgBox("Вы уже посмотрели, как работает_

программа?" & Chr(13)&Chr(10) & "Завершить работу_

сейчас?", vbYesNo + vbQuestion, "Демонстрация_

многострочного сообщения")

If a = vbYes Then Unload Me 'Выгрузить форму

End Sub

Рис. 5 – Пример использования функции MsgBox:

 

Ввод и вывод данных в VB

Осуществляется с помощью встроенных функций InputBox, MsgBox,с помощью изменения определенных свойств определенных объектов или применения к ним соответствующих методов.

Ввод данных

Ввод значений переменных может осуществляться:

1. С помощью функции InputBox, которая при выполнении программы выводит на экран свое собственное диалоговое окно. Возвращаемое функцией InputBox значение имеет тип string. Поэтому для использования введенного значения в качестве числовой переменной необходимо дополнительно преобразовать его к числовому типу с помощью функции Val. Например, для ввода значения числа 5,25 в переменную а необходимо записать следующую строку программного кода:

a = Val(InputBox("Введите а", "Ввод данных"))

2. С помощью текстового окна TextBox. В этом случае на форме должно присутствовать текстовое окно, к примеру, Text1, а в событийной процедуре, например, для щелчка по командной кнопке, должен быть записан программный код, в котором используется свойство Тext объекта Text1:

Private Sub Command1_Click()

a = Val(Text1.Text)

End Sub

Свойство Тext объекта Text1, также имеет строковое значение, поэтому необходимо его преобразование в числовое значение с помощью функции Val. Кроме того, на этапе проектирования желательно изменить значение этого свойства, например, на пустую строку.

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

Для вывода результатов в VB существуют различные способы.

1. Основным оператором вывода значений переменных в языке VB является оператор Print, который в терминах объектно-ориентированного программирования рассматривается как метод, действующий на объект, на который и будут выводиться значения, указанные в списке. Основными объектами, для которых имеется метод Print, являются форма Form, и графическое окно PictureBox.

Если объект, к которому применяется метод Print, не указан, то список значений выводится на активную форму. Например:

Строка программного кода Результат
Print a,b или Form1.Print a,b Значения переменных а, b будут выведены окна формы
Picture1.Print a,b Значения переменных будут выведены в левый верхний угол графического окна PictureBox

2. Вывести значение переменной можно с помощью функции MsgBox, которая при выполнении активизирует свое собственное окно сообщений на экране.

Private Sub Command1_Click()

f = 2 * a

MsgBox (f)

End Sub

3. Вывод можно оформить в текстовое окно TextBox, изменяя его свойство Text

Text1.text=Str(a)

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

4. Вывод можно оформить на метку Label, изменяя ее свойство Caption:

Label1.Caption=”Результат” + str(a)

Функция Format

При выводе результатов для большей наглядности часто используется функция Format, которая возвращает значение типа Variant (String), содержащее выражение, отформатированное согласно инструкциям, заданным в описании формата. Эта функция имеет следующий синтаксис:

Format (Выражение, ”Формат”),

где

Выражение – обязательный аргумент – любое допустимое выражение, подлежащее форматированию.

Format – шаблон формата (стандартный или пользовательский):

  Шаблон Назначение
Стандартные форматы General Number Отображает число без разделителей групп разрядов
Currency Отображает значение с разделителями групп разрядов
Fixed Отображает число в формате с фиксированной запятой
Standard Отображает число в формате с фиксированной запятой с разделителями групп разрядов
Percent Отображает число, умноженное на 100, со знаком процентов (%),
Scientific Отображает число в экспоненциальной форме
Пользовательские шаблоны используют символ 0 для обязательного отображения цифр числа, даже если в нем есть незначащие нули, и символ #, если незначащие нули выводится не будут.

При форматировании чисел без указания шаблона формата функция Format выдает тот же результат, что и функция Str, т.е. возвращает строку, представляющую число. Отличие состоит в том, что при преобразовании положительного числа с помощью функции Format пробел в начале строки (на месте знака числа) теряется, а при преобразовании с помощью функции Str останется.

Примеры шаблонов форматов, применяемых для создания пользовательских и стандартных форматов числовых величин:

Строка программного кода Результат
Print Format(6.789, "00.0000") 06,7890
Print Format(6.789, "##.0000") 6,7890
Print Format(123456.789,"General Number") 123456.789
Print Format(123456.789,"Currency") 123 456,79р
Print Format(123456.789,"Fixed") 123456,79
Print Format(123456.789,"Standard") 123 456,79
Print Format(123456.789,"Percent") 123,00%
Print Format(123456.789,"Scientific") ' 1,23E+00

Структурные операторы

Структурные операторы представляют собой структуры, построенные из других операторов по строго определенным правилам. Все структурные операторы подразделяются на три группы: условные операторы, операторы выбора и операторы повтора (цикла).

Условные операторы

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

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

Сокращенная форма Полная форма

Условный оператор в VB может иметь однострочную (простую) и многострочную (блочную) структуру. Однострочная структура имеет следующий синтаксис:

Сокращенная форма
If Условие Then Оператор
Полная форма
If Условие Then Оператор_2 Else Оператор_1

Если Условие имеет значение True, то выполняется оператор после ключевого слова Then, а если оно имеет значение False, то выполняется оператор, следующий за ключевым словом Else, если таковой имеется.

Пример:

If a= 7 Then Beep

If x < 9 Then Print ”False!” Else Print ”True!”

Многострочная структура условного оператора имеет следующий синтаксис:

Сокращенная форма Полная форма
If Условие Then Оператор_1 Оператор_2 . . . . . . End if If Условие Then Операторы для обработки истинного условия Else Операторы для обработки ложного условия End if

Замечание. Ключевое слово End ifобозначает конец многострочной конструкции.

Команда if может проверить только одно условие. Если необходимо осуществить переход управления в зависимости от результатов проверки нескольких условий, то их можно задать с помощью оператора Elseif. Оно будет анализироваться только в том случае, если предыдущее условие ложно. Например:

If x>0 Then

Label1.Caption=”Значение х положительно”

Elseif x=0 Then

Label1.Caption=”Значение х равно нулю”

Else

Label1.Caption=”Значение х отрицательно”

End If

Ниже приведен пример событийной процедуры решения квадратного уравнения ax2 + bx + c = 0 с использованием условного оператора.

Private Sub Command1_Click()

d=b*b – 4 * a * c

If d < 0 then

Print ”Уравнение не имеет корней”

Elseif d = 0 Then

x = -b / (2*a)

Print ”Уравнение имеет один корень”; x

Else

x1 = (-b + sqr(d)) / (2 * a)

x2 = (-b - sqr(d)) / (2 * a)

Print ”Уравнение имеет два корня ”; x1, x2

End If

End Sub

10.2. Оператор выбора Select … Case

Оператор выбора позволяет обрабатывать в программе несколько условий и аналогичен блоку конструкций if...Then...Else. Используется он для частичного облегчения программирования задач, в которых содержится большое число различных проверок. Его также удобно применять тогда, когда выполнение одного из многочисленных действий зависит от значения какой-либо переменной. Синтаксис оператора выбора Select … Case:

Select Case Выражение

Case Диапазон значений _1

Операторы, выполняемые при попадании Выражения в Диапазон значений _1

Case Диапазон значений _2

Операторы, выполняемые при попадании Выражения в Диапазон значений _2

. . .

Case Диапазон значений _N

Операторы, выполняемые при попадании Выражения в Диапазон значений _2

[Case Else

Операторы, выполняемые при непопадании ни в один из указанных диапазонов

End Select

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

Выражение – любое выражение, допустимое в языке VB.

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

Диапазон значений можно задать простым перечислением их через запятую (Case 3,5,9), либо с помощью ключевого слова To(Case 1 To 9). Если в Диапазоне значений необходимо использовать операции отношения, то такой диапазон записывается с помощью ключевого слова Is.

Ниже приведены примеры событийных процедур с использованием оператора выбора.

Пример 2. Проанализировать случайное число, заданное в промежутке от 0 до 10.

Private Sub Command1_Click()

Randomize

a = Int(Rnd * 9) + 1 'Cлучайное число от 1 до 10

Select Case a

Case 1

Print "Равно 1"

Case 2, 3

Print "Равно 2 или 3"

Case 4 To 6

Print "Больше или равно 4 и меньше или равно 6"

Case Is >= 9

Print "Больше или равно 9"

Case Else

Print "Ни одно из предшествующих"

End Select

End Sub

 

Пример 1. Решение квадратного уравнения ax2 + bx + c = 0.

Вариант 1. Здесь Выражение имеет логический тип (d>=0):

Private Sub Command1_Click()

A=val(inputbox(”Задайте А”))

B=val(inputbox(”Задайте B”))

C=val(inputbox(”Задайте C”))

D=B^2-4*a*c

Select Сase d>=0 ' Выражение логического типа

Case True

Print ”x1=”;(-b-sqr(d))/(2*a),”x2=”;(-b+sqr(d))/(2*a)

Case False

Print ”Решений нет”

End Select

End Sub

Вариант 2. Здесь Выражение имеет вещественный тип, а в Диапазоне значений используются операции отношения:

Private Sub Command1_Click()

Select Case b * b - 4 * a * c 'Вещественный тип

Case Is < 0 'Используется операция отношения >

Print "Уравнение не имеет корней"

Case Is = 0

x = -b / (2 * a)

Print "Уравнение имеет один корень"; x

Case Else

X1 = (-b + Sqr(d)) / (2 * a)

X2 = (-b - Sqr(d)) / (2 * a)

Print "Уравнение имеет два корня "; X1, X2

End Select

End Sub

 

Операторы повтора

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

Многократно выполняемые последовательности операторов называют циклами, а изменяющиеся в цикле переменные – переменными цикла.

Алгоритм циклической структуры должен содержать:

1. Подготовку цикла – задание начальных значений переменных цикла перед первым его выполнением;

2. Тело цикла – операторы, которые выполняются при различных значениях переменных цикла;

3. Изменение значений переменных цикла перед его новым повторением;

4. Управление циклом – проверку условия окончания цикла или перехода на начало тела цикла.

В VB для этой цели существуют два вида элементарных циклических структур:

- циклы с параметром;

- циклы с условием.

Циклы с параметром

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

В языке VB циклы с параметром реализуются с помощью оператора For, который имеет следующий формат:

For Счетчик:=S1 To S2 [Step Шаг] Тело цикла Next [Счетчик]

где

Счетчик – параметр цикла порядкового типа;

S1 и S2 – выражения, определяющие начальное и конечное значение параметра цикла;

Шаг – шаг изменения значения счетчика;

Тело цикла – многократно выполняемые операторы.

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

Цикл повторяется пока значение параметра цикла лежит в интервале [S1,S2], причем эти выражения S1 и S2 вычисляются только один раз в начале цикла. Необходимо, чтобы параметр цикла, начальное и конечное значения были одного типа.

В начале выполнения цикла значение Счетчик становится равным S1. При каждом проходе переменная Счетчик увеличивается на 1 или на величину Шаг. Если значение Счетчика становится больше конечного значения S2, то цикл завершается, после чего выполняются следующие за циклом операторы.

Примеры конструкций операторов цикла с параметром:

For i = 1 To 10 Print i * 100 Next i
For L = 100 To 5 Step -0.5 x = y * L Next
For i = 1 To 5 For j = 10 To 20 Print i + j Next j Next i

 

Из тела цикла с параметром можно выйти до окончания цикла с помощью оператора Exit For.

Пример 1. Напечатать 10 чисел ряда Фибоначчи (каждое последующее число равно сумме двух предыдущих), начиная с 11 числа.

Private Sub Command1_Click() Dim f1 As Integer, f2 As Integer Dim i As Byte f1 = 1: f2 = 1 For i = 1 To 20 If i > 10 Then Print f1 f2 = f1 + f2 f1 = f2 - f1 Next i End Sub

Пример 2. Вычислить сумму конечного ряда .

Private Sub Command1_Click()

n=Val(Text1.Text)

s=0

'Организация цикла по числу членов последовательности

For k=1 To n

'Вычисление очередного члена последовательности

y=(k+0.3)/(3*k*k+5)

s=s+y 'Вычисление суммы ряда

Next k

Text2.Text=Str(s) 'Вывод результирующей суммы

End;

Элемент управления Slider

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

Свойства элемента управления Slider

Свойство Назначение
Value Хранится введенное посредством бегунка значение
Min Max Свойства задают диапазон значений ползунка (по умолчанию min=0, max =10)

Пример 3. Вычислить произведение

 

Private Sub Command1_Click() 'Ввод n и m с помощью движка n = Slider1.Value m = Slider2.Value p = 1 For i = 1 To n For j = 1 To m p = p * i / (1 + j ^ 2) Next j Next i Text1.Text = Str(p) End Sub   Private Sub Command2_Click() End 'Выход из приложения End Sub

Пример 3.Протабулировать функцию sin(x) на отрезке [–π, π] с шагом 0,1.

Private Sub Command1_Click() Const pi = 3.1415926 Dim n As Integer Dim h As Single Dim x As Single,y As Single Dim sa As Str,sf As String 'Переменная 'sa используется для формирования строки значений x, 'а переменная sf - для формирования строки значений y h = Val(Text1.Text) 'Ввод шага n = Int(2 * pi / h) + 1 'Количество точек x = -pi ‘Начальное значение x sa = "": sf = "" 'Инициализация sa и sf For i = 1 To n y = Sin(x)
'Формирование строки вывода значений x по формату sa = sa + Format(x, "0.000") + Chr(13)+Chr(10). 'Формирование строки вывода значений y по формату sf = sf + Format(y, "0.000")+ Chr(13) + Chr(10) x = x + h 'Новое значение x Nexti Text2.Text = sa 'Вывод значений x Text3.Text = sf 'Вывод значений y End Sub Private Sub Command2_Click() End End Sub

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

Multiline = True, Scrollbars=Vertical.

Циклы с условием

Циклы с условием используются в тех случаях, когда число повторений тела цикла заранее неизвестно. Такой цикл продолжает работу пока выполняется (или не выполняется) условие окончания цикла. Причем, если условие окончания цикла проверяется перед выполнением тела цикла, то такие циклические структуры называют циклами с предусловием («Выполнять пока»), а если проверка условия происходит после выполнения тела цикла – циклами с постусловием («Выполнять до тех пор, пока »).

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

 

В VB такие циклы образуются с помощью конструкций
Do … Loop. Существует 4 вида таких циклических конструкций, их синтаксис определяется типом проверяемого условия и местом его расположения.

Синтаксис Описание
Do While Условие Операторы Loop Цикл с предусловием типа «Пока». Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, пока это условие остается истинным.
Do Операторы Loop While Условие Цикл с постусловием типа «Пока». Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы 1 раз. Цикл работает, пока это условие остается истинным.
Do Until Условие Операторы Loop Цикл с предусловием типа «До тех пор пока». Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу до тех пор, пока это условие не выполнится (то есть до тех пор, пока условие является ложным)
Do Операторы Loop Until Условие Цикл с постусловием типа «До тех пор пока». Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл работает до тех пор, пока это условие не выполнится (то есть до тех пор, пока условие является ложным).

Замечание 1. Чтобы цикл с предусловием или с постусловием успешно завершился необходимо, чтобы в теле цикла был хотя бы один оператор, изменяющий значения, входящих в логическое выражение переменных.

Замечание 2. Циклы могут быть вложенными, когда внутри одного циклического процесса должен выполняться другой. В этом случае необходимо придерживаться правила: каждый цикл должен иметь свое начало – For или Do (заголовок цикла) и свой конец – слово Loop или Next (окончание цикла). Причем, каждый раз сначала должен быть закончен внутренний цикл, а затем уже внешний.

Для безусловного выхода из цикла с условием используется оператор Exit Do.

Пример 1. Определить количество цифр в целом числе N. Алгоритм решения состоит в том, что нужно делить число N на 10 до тех пор, пока в целой части числа не окажется 0. Количество таких делений будет равно числу цифр в числе.

Private Sub Command1_Click() n = Val(Text1.Text) 'Ввод числа k = 0 'Обнуление счетчика k – количество цифр Do'Начало цикла n = Int(n / 10) 'Выделение цифры k = k + 1 'Подсчет количества цифр Loop While n > 0 'Окончание цикла 'Цикл работает, пока это условие остается истинным  
Text2.Text = Str(k) 'Вывод k Text2.Visible = True Label2.Visible = True 'Содержимое поля становится видимым End Sub   Private Sub Command2_Click() End End Sub   Private Sub Form_Load() Text1.Text = "" 'Очистка поля Label2.Visible = False 'При загрузке формы фраза '«Количество цифр» не видна Text2.Text = "" Text2.Visible = False End Sub

 

Использование операторов цикла с условием оправдано в том случае, когда количество повторений тела цикла определяется в ходе самих вычислений и заранее неизвестно. Например, для вычисления сумм бесконечного ряда обычно задают точность вычислений ε и вычисления ведут до тех пор, пока очередное слагаемое по модулю не станет меньше заданного ε: .

Пример 2. Вычислить с точностью ε = 10-4.

Private Sub Command1_Click() Dim x,y,a As Single Eps = Val(Text1.Text) 'Ввод точности вычислений s = 0 'Инициализация переменной s n = 1 Do'Начало цикла a = n/(n^2+1) 'Вычисление очередного члена последовательности s=s+a 'Вычисление суммы последовательности n=n+1 Loop While a>=0.0001 Text2.Text = Str(s) 'Вывод полученной суммы End Sub   Private Sub Command2_Click() End End Sub

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

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

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

Пример. Вычислить .

Найдем коэффициент c, разделив :

 

Таким образом, очередной член ряда можно вычислить по рекуррентной формуле:

.

Пример 3. Найти количество членов бесконечного ряда , сумма которых дает приближенное значение sin(x) с точностью ε=10-4.

Private Sub Command1_Click() Const Pi = 3.14159265358979 Eps = Val(Text4.Text) 'Точность x = Val(Text1.Text) 'Аргумент x x = x / 180 * Pi 'Перевод в радианную меру f = Sin(x) 'Вычисление точного значения функции s = 0 'Инициализация переменной s a = x 'Первый член ряда k = 1 'Вывод значения Sin(x) по формату Text2.Text = Format(f, "0.000E+")  
Do While Abs(f - s) > e 'Цикл выполняется пока условие a = -a * x ^ 2 / (2 * k) / (2 * k + 1) s = s + a: k = k + 1 Loop Text3.Text = Format(s, "0.000E+") Text5.Text = Str(k) End Sub

Замечание. Иногда возникает необходимость переделать цикл типа For…Next на цикл Do…Loop (наоборот не всегда получается).

For…Next Do…Loop с предусловием Do…Loop с постусловием
For i = 1 to n Тело цикла Next i i = 1 Do While i <= n Tело цикла i=i+1 Loop i=1 Do Тело цикла i=i+1 Loop Until i > n

Использование функции Timer

Условие продолжения или завершения цикла не всегда связано только с внутренними причинами, - изменяющимися от шага к шагу значениями каких-либо переменных. Часто, например, цикл завершается после того, как исчерпывается отпущенное на его выполнение время. Чтобы реализовать такое условие, следует воспользоваться системной функцией Timer. Она возвращает текущее время с точностью до 0,01 сек.

Пример 4.Вычислить сумму бесконечного ряда с использованием функции Timer

Private Sub Command1_Click() Dim x,y,a As Single Eps = Val(Text1.Text) T=Timer 'Зафиксировали время начала работы программы s = 0: n = 1 Do a = n/(n^2+1) s=s+a: n=n+1 If Timer-T>10 Then Exit Do'Если разница между текущим 'временем и временем начала работы больше 10 сек, то выход из цикла Loop Until a<0.0001 End Sub

Подпрограммы пользователя

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

Имя подпрограммы и ее параметры записываются в заголовке подпрограммы. Различают формальные параметры – параметры, определенные в заголовке подпрограммы, и фактические параметры – выражения, задающие конкретные значения при обращении к подпрограмме.

Имеется два типа пользовательских подпрограмм: процедуры (Sub) и функции (Function). Главное отличие функции от процедуры заключается в том, что результат работы функции – единственное значение, а результат работы процедуры – одно значение, несколько значений или ни одного. Например, можно написать процедуру, которая :

- отображает полученные результаты в виде диаграмм в графическом окне;

- вычисляет площадь и периметр многоугольника;

- решает задачу по преобразованию векторов;

- изменяет значения свойств объектов.

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

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

Пользовательские процедуры

Cоздать собственную процедуру, доступную в данной форме можно двумя способами:

1. В общей части кода программы (General/Declaration) ввести слово Sub, затем задать имя и нажать клавишу Enter. В полученной конструкции набрать код программы.

2. С помощью команды Tools ®Add Procedure…

Структура пользовательской процедуры:

Sub Имя процедуры ([Список формальных параметров]) Описание локальных переменных Операторы тела процедуры End Sub

Переменные, объявленные внутри процедуры, называются локальными, они доступны только в этой процедуре. Если эти переменные объявлены с оператором Dim, то они существуют, пока выполняется процедура, после чего память освобождается. Но исчезновение значения локальной переменной при выходе из процедуры не всегда удобно. Есть возможность сохранять значение локальной переменной до следующего вызова процедуры. Для этого ее нужно объявить как статическую, с ключевым словом Static. В этом случае переменная недоступна в других процедурах, но ее значения сохраняются от вызова к вызову. Глобальные переменные (объявленные со словом Public), доступны всему приложению.

Обращение к процедуре осуществляется в основной программе путем задания имени процедуры и списка фактических параметров без круглых скобок.

Имя процедуры [Cписок фактических параметров]

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

Пример 1. Процедура без параметров должна очистить форму и установить размер выводимых на форму символов в 30 пунктов и начертание курсив.

Private Sub A() Cls Font.size=30 FontItalic=true End Sub Private Sub Command1_Click() A Print “Пример процедуры” End Sub

Пример 2. Процедура позволяет накоплять сумму.

Private Sub Sum(Chislo) Static S As Integer S=S+ Chislo End Sub

Если бы в данном примере переменная S не была объявлена с помощью Static, то ее значение каждый раз бы обнулялось.

Пример 3.

Вычислить площадь четырехгранника, если даны длины его ребер.   Вычисление площади треугольника по формуле Герона оформить с помощью процедуры.
'Описание процедуры вычисления площади треугольника по формуле ГерронаPrivate Sub Sq(x,y,z,s) 'Имя процедуры – Sq. 'Формальные параметры: входные x,y,z, 'Выходной параметр s Dim p As Single p=(x+y+z)/2 'Вычисление полупериметра s=Sqr(p*(p-x)*(p-y)*(p-z)) 'Вычисление площади End Sub Private Sub Command1_Click() Dim a,b,c,d,e,f,s,s1,s2,s3,s4 As Single 'Задание длин ребер четырехгранника} a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) d=Val(Text4.Text) e=Val(Text5.Text) f=Val(Text6.Text) 'Обращение к процедуре Sq для вычисления площади каждой грани ' с перечислением фактических параметров Sq a,b,c,s1 Sq c,d,e,s2 Sq b,e,f,s3 Sq a,f,d,s4 s=s1+s2+s3+s4 'Вычисление площади поверхности четырехгранника Text7.Text=Str(s) End Sub  
     

Способ передачи аргументов

В VB аргументы могут передаваться двумя способами: либо как ссылки (ByRef), либо как значения (ByVal).

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

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

Если некоторый параметр является одновременно входным и выходным, то его нужно передать как ссылку.

Функции пользователя

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

Function Имя функции ([Список формальных параметров]) AsТип возвращаемого функцией значения Описание локальных переменных Операторы тела процедуры End Function

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







Последнее изменение этой страницы: 2016-08-12; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 35.172.216.157 (0.038 с.)