Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Laschenko_KIT

.pdf
Скачиваний:
21
Добавлен:
26.03.2015
Размер:
3.76 Mб
Скачать

x= Val(InputBox(«Введите x»))

n= Val(InputBox(«Введите n»))

y= Exp(-2 * x) + 1

z= Log(x) / (x + 1)

If x < z ^ 2 Then w = Sqr(x * y)

Picture1.Print y, z, w Else

w = n * x + 2 Picture1.Print y, z, w End If

Пример 3.3. Фрагмент программы с использованием сложного условия в операторе If

sin x,0 x 5

 

 

y

cos x, x 5

 

 

 

Dim x As Single, y As Single

x = Val(InputBox(«Введите значение х»))

If x >= 0 And x <= 5 Then y = Sin(x) Else y = Cos(x)

Пример 3.4. Фрагмент программы с использованием вложенных операторов If

sin x, x 0 y cos x,0 x 2

tgx, x 2

Dim x As Single, y As Single

x = Val(InputBox("Введите значение х"))

If x < 0 Then y = Sin(x) Else If x > 2 Then y = Tan(x) Else y = Cos(x)

101

3.4. ОПЕРАТОРЫ ЦИКЛОВ

3.4.1. Общие сведения

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

For ... Next

Do ... Loop

Циклы For…Next используются, когда заранее определено, сколько раз должно выполняться повторение.

For <счетчик> = <нач. значение> То <кон. значение> <оператор 1> <оператор 2>

Next <счетчик>

В этом случае счетчиком является переменная целого типа, увеличивающаяся на каждом шаге цикла на 1. Например, следующая программа

For i = 1 To 10

Print i^2

Next i

приведет к выводу на форму квадратов целых чисел от 1 до 10.

В общем случае в роли счетчика количества повторений в цикле может выступать любая переменная вещественного типа и тогда оператор цикла For…Next записывается с указанием величины приращения с помощью ключевого слова Step:

For <переменная> = <нач. знач.> То <кон. знач.> Step <приращение> <оператор 1> <оператор 2>

Next <счетчик>

Например, чтобы вывести таблицу значений аргумента х и функции Sin(x) на интервале от 0 до 1 с приращением значения аргумента 0.1 необходимо записать оператор цикла For…Next сле-

102

дующим образом:

For x = 0 To 1 Step 0.1

Print х, Sin(x)

Next х

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

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

1) Цикл с ключевым словом While продолжает свою работу, пока условие остается истинным, т.е. условие выполняется, и задается в двух вариантах, представленных ниже.

Do While <условие>

Условие проверяется до того, как выпол-

<операторы >

няется группа операторов, образующих

Loop

тело цикла.

Do

Условие проверяется после того, как опе-

<операторы>

раторы, составляющие тело цикла, будут

Loop While <усло-

выполнены хотя бы один раз.

вие>

 

2) Цикл с ключевым словом Until продолжает свою работу, пока условие является ложным, т.е. условие не выполняется, и задается в двух вариантах, представленных ниже.

Do Until <условие>

Условие проверяется до того, как выпол-

<операторы>

няется группа операторов, образующих

Loop

тело цикла.

Do

Условие проверяется после того, как опе-

<операторы>

раторы, составляющие тело цикла, будут

Loop Until <условие>

выполнены хотя бы один раз.

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

103

суммы, приравнивается нулю до начала цикла (например, s = 0), а при вычислении произведения – единице (например, p = 1). Внутри цикла должна быть строка, в которой последовательно в ходе работы цикла в сумму включаются все слагаемые (например, s = s + sn) или, соответственно, в произведение – все сомножители (например, p = p*pn).

Пример 3.4.1. Программа на основе цикла Do…Loop с использованием ключевого слова While для вычисления суммы той части

 

 

n

 

 

бесконечного ряда y =

 

 

, которая включает все члены ряда,

 

2

n 1

n

1

 

пока они не станут меньше 0,001.

Dim n As Integer, x As Single, s As Single n = 1

y = 0 Do

x = n / (n ^ 2 + 1) s = s + x

n = n + 1

Loop While x >= 0.001

Print «Сумма ряда =»; s

В циклах Do…Loop необходимо организовать изменение значений переменных, входящих в проверяемое условие выхода из цикла, иначе цикл будет бесконечным (для выхода из такого «зацикливания» программы необходимо нажать комбинацию клавиш Ctrl/Break).

Пример 3.4.2. Программа с использованием ключевого слова

Until для вычисления произведения p = (k 2 1) до тех пор, пока

k o

произведение из сомножителей ( k 2 1) не достигнет значения больше

1000.

Dim k As Integer, x As Single, y As Single y = 1: k = 0

Do Until y > 1000 x = k ^ 2 + 1

y = y * x k = k + 1 Loop

Print «Произведение =»; y; «и содержит»; k + 1; «сомножителей»

104

В этом примере проверка условия выхода из цикла происходит в начале цикла, в то время, как в предыдущем примере происходила в конце цикла.

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

чен оператором Next внутренний цикл, а затем внешний.

3.5. ОДНОМЕРНЫЕ МАССИВЫ

3.5.1. Общие сведения

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

Одномерные массивы имеют один индекс, например a(i), где a – имя массива, i – номер элемента массива.

Массивы до их использования в программе должны быть объявлены в операторе Dim, например:

Dim a(5) As Single

Здесь определено, что будет использоваться одномерный массив с 6-ю элементами вещественного типа одинарной точности. Число в скобках указывает номер последнего доступного для использования номера индекса. Нумерация индексов начинается с нуля.

После объявления элементы массива могут использоваться в выражениях подобно простым переменным, но с указанием индекса в круглых скобках. Например, после приведенного выше объявления массива а(i) в программном коде можно обращаться к следующим элементам массива: а(0), а(1), а(2), а(3), а(4), а(5)

Если необходимо использовать определенную нумерацию элементов массива, например с 5 до 10, то это указывается при объявлении массива следующим образом:

Dim a(5 to 10) As Single

После этого в программном коде будут доступны следующие элемен-

ты массива: а(5), а(6), а(7), а(8), а(9), а(10)

Ввод элементов массива может производиться с помощью оператора присваивания или в режиме диалога.

105

Пример 3.5.1 программы ввода элементов одномерного массива в диалоговом режиме и вывода их в графическое окно в одну строку.

Dim z(10) As Single For i = 0 To 10

z(i) = InputBox(«Введите z») Picture1.Print z(i),

Next i

Запятая в конце строки вывода с оператором Print оставляет «курсор печати» в той же строке, что приводит к эффекту «разворачивания» выводимых в цикле элементов массива в строку.

Пример 3.5.2. Программа вычисления суммы элементов массива b = {5, 2; 4,5; 1; 2,9; 3}.

Dim b(1 To 5) As Single, s As Single, i As Integer s = 0

For i = 1 To 5

b(i) = Val(InputBox(«Введите элемент массива b»)) s = s + b(i)

Next i

Print «Сумма элементов массива равна»; s

Пример 3.5.3. Программа определения максимального элемента массива d = {12; 0,4; 30; –2; 5; 9,3} и номера этого элемента.

Dim d(1 To 6) As Single

Dim max As Single, n As Integer, i As Integer For i = 1 To 6

d(i) = Val(InputBox(«Введите элемент массива d»))

Next i max = d(1) n = 1

For i = 1 To 6

If d(i) > max Then max = d(i): n = i End If

Next i

Print «Макс. значение =»; max; «имеет элемент с номером»; n

106

3.6. ФУНКЦИИ И ПРОЦЕДУРЫ ПОЛЬЗОВАТЕЛЯ

3.6.1. Общие сведения

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

Однако программный код в VB можно писать и без всякой связи с объектами и событиями, которые совершаются над ними для выполнения процедур. Дело в том, что действия, которые должны совершать различные объекты, размещаемые в окне приложения, зачастую могут быть очень похожими или просто повторяться. Если создать такой программный блок, выполняющий заданные действия, и присвоить ему имя, то получится т. н. процедура общего назначения. Такую процедуру можно всегда выполнить в любых других процедурах, просто записав в тексте программы ее имя. Процедуры, не связанные с объектом и событием, называются в VB еще пользовательскими про-

цедурами.

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

Различают два типа пользовательских процедур:

* процедуры типа Function (функция), которые производят действия, определенные ее программным кодом, и в результате этого действия возвращают значение определенного типа;

107

* процедуры типа Sub (подпрограммы), которые производят действия, определенные ее программным кодом.

Всистеме программирования VB имеется большое количество встроенных функций, например Sin(x), Sqr(x) и т.п. (см. табл.1). Создавая процедуру типа Function, пользователь определяет свою функцию, к которой можно обращаться, как и к встроенной функции.

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

Функция пользователя в общем виде имеет следующий вид:

Function <Имя функции> (<Аргум.1> <As Тип>, ...) <As Тип>

<программный код для определения функции>

End Function

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

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

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

Например, функция v(h, r), вычисляющая объем цилиндра v в зависимости от его высоты h и радиуса основания r, может быть задана в следующем виде:

Function v(h As Single, r As Single) As Single v=3.14*h*r^2

End Function

Когда функция пользователя встречается в программе, то это

108

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

Например, программа вычисления объема тела из двух поставленных друг на друга цилиндров высотой по 10 см и радиусами основания соответственно 3 и 5 см после определения функции v(h,r), приведенной выше, может быть записана следующим образом:

Dim vol As Single vol = v(10, 3)+v(10, 5)

Print «объем равен»; vol; «см3»

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

Например, заголовок функции может иметь следующий вид:

Function F(ByVal x As Single, n As Integer) As Single

Здесь объявляется функция F вещественного типа (Single), зависящая от двух аргументов: x вещественного типа (Single), передаваемого в процедуру по значению, и n целочисленного типа (Integer), передаваемого в процедуру по ссылке.

Обращение к функции из основной программы может произво-

109

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

Пример 3.6.1. Функция пользователя F(k) для расчета факториа-

ла числа k: k!=1*2*3*…*К.

Function F(k As Integer) As Integer

Dim i As Integer

F = 1

For i = 1 To k

F = F * i

Next i

End Function

После такого определения функции F(k) для вычисления выражения С=М!N!/(M+N)! можно использовать следующую программу:

Dim С As Single

Dim N As Integer, M As Integer

M = Val(InputBox(«ВВЕДИТЕ М»))

N = Val(InputBox(«ВВЕДИТЕ N»))

C = F(M) * F(N) / F(M + 1)

Print «С =»; C

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

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

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

110

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]